diff options
| author | Philipp Gesang <phg@phi-gamma.net> | 2016-04-24 20:08:29 +0200 | 
|---|---|---|
| committer | Philipp Gesang <phg@phi-gamma.net> | 2016-04-24 20:08:29 +0200 | 
| commit | 4f5a4f429479ce16964f7637fe3d92a1d19650af (patch) | |
| tree | 1f9fca8250e30e371251f8a1ed652b44de3c3b3f /src | |
| parent | 61fcc90e47c36c7c8c8bf4a5d46c649942886462 (diff) | |
| download | luaotfload-4f5a4f429479ce16964f7637fe3d92a1d19650af.tar.gz | |
[fontloader] sync with Context as of 2016-04-24
Diffstat (limited to 'src')
| -rw-r--r-- | src/fontloader/misc/fontloader-font-afm.lua | 9 | ||||
| -rw-r--r-- | src/fontloader/misc/fontloader-font-otr.lua | 63 | ||||
| -rw-r--r-- | src/fontloader/misc/fontloader-font-oup.lua | 22 | ||||
| -rw-r--r-- | src/fontloader/runtime/fontloader-reference.lua | 78 | 
4 files changed, 138 insertions, 34 deletions
diff --git a/src/fontloader/misc/fontloader-font-afm.lua b/src/fontloader/misc/fontloader-font-afm.lua index 3dedf12..7003304 100644 --- a/src/fontloader/misc/fontloader-font-afm.lua +++ b/src/fontloader/misc/fontloader-font-afm.lua @@ -56,7 +56,7 @@ local pfb                = constructors.newhandler("pfb")  local afmfeatures        = constructors.newfeatures("afm")  local registerafmfeature = afmfeatures.register -afm.version              = 1.500 -- incrementing this number one up will force a re-cache +afm.version              = 1.501 -- incrementing this number one up will force a re-cache  afm.cache                = containers.define("fonts", "afm", afm.version, true)  afm.autoprefixed         = true -- this will become false some day (catches texnansi-blabla.*) @@ -547,9 +547,10 @@ local uparser = fonts.mappings.makenameparser()  unify = function(data, filename)      local unicodevector = fonts.encodings.agl.unicodes -- loaded runtime in context -    local unicodes, names = { }, { } -    local private = constructors.privateoffset -    local descriptions = data.descriptions +    local unicodes      = { } +    local names         = { } +    local private       = constructors.privateoffset +    local descriptions  = data.descriptions      for name, blob in next, data.characters do          local code = unicodevector[name] -- or characters.name_to_unicode[name]          if not code then diff --git a/src/fontloader/misc/fontloader-font-otr.lua b/src/fontloader/misc/fontloader-font-otr.lua index 27bb6a6..a9ad739 100644 --- a/src/fontloader/misc/fontloader-font-otr.lua +++ b/src/fontloader/misc/fontloader-font-otr.lua @@ -60,15 +60,15 @@ if not modules then modules = { } end modules ['font-otr'] = {  -- faster but it might not be the real bottleneck as we still need to juggle data. It  -- is probably more memory efficient as no intermediate strings are involved. -if not characters then -    require("char-def") -    require("char-ini") -end +-- if not characters then +--     require("char-def") +--     require("char-ini") +-- end  local next, type, unpack = next, type, unpack  local byte, lower, char, strip, gsub = string.byte, string.lower, string.char, string.strip, string.gsub  local bittest = bit32.btest -local concat, remove, unpack = table.concat, table.remov, table.unpack +local concat, remove, unpack, fastcopy = table.concat, table.remov, table.unpack, table.fastcopy  local floor, mod, abs, sqrt, round = math.floor, math.mod, math.abs, math.sqrt, math.round  local P, R, S, C, Cs, Cc, Ct, Carg, Cmt = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cs, lpeg.Cc, lpeg.Ct, lpeg.Carg, lpeg.Cmt  local lpegmatch = lpeg.match @@ -1186,6 +1186,8 @@ local sequence = {      { 3,  0,  6 },      -- variants      { 0,  5, 14 }, +    -- last resort ranges +    { 3, 10, 13 },  }  -- local sequence = { @@ -1388,7 +1390,7 @@ formatreaders[12] = function(f,fontdata,offset)          local last  = readulong(f)          local index = readulong(f)          if trace_cmap then -            report("format 12 from %C to %C",first,last) +            report("format 12 from %C to %C starts at index %i",first,last,index)          end          for unicode=first,last do              local glyph = glyphs[index] @@ -1416,6 +1418,53 @@ formatreaders[12] = function(f,fontdata,offset)      return nofdone  end +formatreaders[13] = function(f,fontdata,offset) +    -- +    -- this fector is only used for simple fallback fonts +    -- +    setposition(f,offset+2+2+4+4) -- skip format reserved length language +    local mapping    = fontdata.mapping +    local glyphs     = fontdata.glyphs +    local duplicates = fontdata.duplicates +    local nofgroups  = readulong(f) +    local nofdone    = 0 +    for i=1,nofgroups do +        local first = readulong(f) +        local last  = readulong(f) +        local index = readulong(f) +        if first < privateoffset then +            if trace_cmap then +                report("format 13 from %C to %C get index %i",first,last,index) +            end +            local glyph   = glyphs[index] +            local unicode = glyph.unicode +            if not unicode then +                unicode = first +                glyph.unicode = unicode +                first = first + 1 +            end +            local list     = duplicates[unicode] +            mapping[index] = unicode +            if not list then +                list = { } +                duplicates[unicode] = list +            end +            if last >= privateoffset then +                local limit = privateoffset - 1 +                report("format 13 from %C to %C pruned to %C",first,last,limit) +                last = limit +            end +            for unicode=first,last do +                list[unicode] = true +            end +            nofdone = nofdone + last - first + 1 +        else +            report("format 13 from %C to %C ignored",first,last) +        end +    end +    return nofdone +end +  formatreaders[14] = function(f,fontdata,offset)      if offset and offset ~= 0 then          setposition(f,offset) @@ -2225,7 +2274,7 @@ function readers.extend(fontdata)      end  end --- +-- for now .. this will move to a context specific file  if fonts.hashes then diff --git a/src/fontloader/misc/fontloader-font-oup.lua b/src/fontloader/misc/fontloader-font-oup.lua index a99aaf4..3b6d8ea 100644 --- a/src/fontloader/misc/fontloader-font-oup.lua +++ b/src/fontloader/misc/fontloader-font-oup.lua @@ -367,22 +367,28 @@ local function copyduplicates(fontdata)              for u, d in next, duplicates do                  local du = descriptions[u]                  if du then -                    local t  = { f_character_y(u), "@", f_index(du.index), "->" } +                    local t = { f_character_y(u), "@", f_index(du.index), "->" } +                    local n = 0 +                    local m = 25                      for u in next, d do                          if descriptions[u] then -                            t[#t+1] = f_character_n(u) +                            if n < m then +                                t[n+4] = f_character_n(u) +                            end                          else                              local c = copy(du) -                         -- c.unicode = u -- maybe +                            c.unicode = u -- better this way                              descriptions[u] = c -                            t[#t+1] = f_character_y(u) +                            if n < m then +                                t[n+4] = f_character_y(u) +                            end                          end +                        n = n + 1                      end -                    local n = #t -                    if n > 25 then -                        report("duplicates: %i : %s .. %s ",n,t[1],t[n]) -                    else +                    if n <= m then                          report("duplicates: %i : % t",n,t) +                    else +                        report("duplicates: %i : % t ...",n,t)                      end                  else                      -- what a mess diff --git a/src/fontloader/runtime/fontloader-reference.lua b/src/fontloader/runtime/fontloader-reference.lua index 7c06c25..09a24b9 100644 --- a/src/fontloader/runtime/fontloader-reference.lua +++ b/src/fontloader/runtime/fontloader-reference.lua @@ -1,6 +1,6 @@  -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua  -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date  : 04/21/16 12:13:25 +-- merge date  : 04/22/16 09:10:04  do -- begin closure to overcome local limits and interference @@ -7002,7 +7002,7 @@ local afm=constructors.newhandler("afm")  local pfb=constructors.newhandler("pfb")  local afmfeatures=constructors.newfeatures("afm")  local registerafmfeature=afmfeatures.register -afm.version=1.500  +afm.version=1.501   afm.cache=containers.define("fonts","afm",afm.version,true)  afm.autoprefixed=true   afm.helpdata={}  @@ -7367,7 +7367,8 @@ end  local uparser=fonts.mappings.makenameparser()  unify=function(data,filename)    local unicodevector=fonts.encodings.agl.unicodes  -  local unicodes,names={},{} +  local unicodes={} +  local names={}    local private=constructors.privateoffset    local descriptions=data.descriptions    for name,blob in next,data.characters do @@ -8244,14 +8245,10 @@ if not modules then modules={} end modules ['font-otr']={    copyright="PRAGMA ADE / ConTeXt Development Team",    license="see context related readme files"  } -if not characters then -  require("char-def") -  require("char-ini") -end  local next,type,unpack=next,type,unpack  local byte,lower,char,strip,gsub=string.byte,string.lower,string.char,string.strip,string.gsub  local bittest=bit32.btest -local concat,remove,unpack=table.concat,table.remov,table.unpack +local concat,remove,unpack,fastcopy=table.concat,table.remov,table.unpack,table.fastcopy  local floor,mod,abs,sqrt,round=math.floor,math.mod,math.abs,math.sqrt,math.round  local P,R,S,C,Cs,Cc,Ct,Carg,Cmt=lpeg.P,lpeg.R,lpeg.S,lpeg.C,lpeg.Cs,lpeg.Cc,lpeg.Ct,lpeg.Carg,lpeg.Cmt  local lpegmatch=lpeg.match @@ -8896,6 +8893,7 @@ local sequence={    { 0,0,6 },    { 3,0,6 },    { 0,5,14 }, +  { 3,10,13 },  }  local supported={}  for i=1,#sequence do @@ -9067,7 +9065,7 @@ formatreaders[12]=function(f,fontdata,offset)      local last=readulong(f)      local index=readulong(f)      if trace_cmap then -      report("format 12 from %C to %C",first,last) +      report("format 12 from %C to %C starts at index %i",first,last,index)      end      for unicode=first,last do        local glyph=glyphs[index] @@ -9093,6 +9091,49 @@ formatreaders[12]=function(f,fontdata,offset)    end    return nofdone  end +formatreaders[13]=function(f,fontdata,offset) +  setposition(f,offset+2+2+4+4)  +  local mapping=fontdata.mapping +  local glyphs=fontdata.glyphs +  local duplicates=fontdata.duplicates +  local nofgroups=readulong(f) +  local nofdone=0 +  for i=1,nofgroups do +    local first=readulong(f) +    local last=readulong(f) +    local index=readulong(f) +    if first<privateoffset then +      if trace_cmap then +        report("format 13 from %C to %C get index %i",first,last,index) +      end +      local glyph=glyphs[index] +      local unicode=glyph.unicode +      if not unicode then +        unicode=first +        glyph.unicode=unicode +        first=first+1 +      end +      local list=duplicates[unicode] +      mapping[index]=unicode +      if not list then +        list={} +        duplicates[unicode]=list +      end +      if last>=privateoffset then +        local limit=privateoffset-1 +        report("format 13 from %C to %C pruned to %C",first,last,limit) +        last=limit +      end +      for unicode=first,last do +        list[unicode]=true +      end +      nofdone=nofdone+last-first+1 +    else +      report("format 13 from %C to %C ignored",first,last) +    end +  end +  return nofdone +end  formatreaders[14]=function(f,fontdata,offset)    if offset and offset~=0 then      setposition(f,offset) @@ -13932,20 +13973,27 @@ local function copyduplicates(fontdata)          local du=descriptions[u]          if du then            local t={ f_character_y(u),"@",f_index(du.index),"->" } +          local n=0 +          local m=25            for u in next,d do              if descriptions[u] then -              t[#t+1]=f_character_n(u) +              if n<m then +                t[n+4]=f_character_n(u) +              end              else                local c=copy(du) +              c.unicode=u                 descriptions[u]=c -              t[#t+1]=f_character_y(u) +              if n<m then +                t[n+4]=f_character_y(u) +              end              end +            n=n+1            end -          local n=#t -          if n>25 then -            report("duplicates: %i : %s .. %s ",n,t[1],t[n]) -          else +          if n<=m then              report("duplicates: %i : % t",n,t) +          else +            report("duplicates: %i : % t ...",n,t)            end          else          end  | 
