diff options
| -rw-r--r-- | luaotfload-auxiliary.lua | 12 | ||||
| -rw-r--r-- | luaotfload-features.lua | 11 | ||||
| -rw-r--r-- | luaotfload-merged.lua | 95 | ||||
| -rw-r--r-- | luaotfload.dtx | 6 | 
4 files changed, 85 insertions, 39 deletions
| diff --git a/luaotfload-auxiliary.lua b/luaotfload-auxiliary.lua index c08f775..be380e3 100644 --- a/luaotfload-auxiliary.lua +++ b/luaotfload-auxiliary.lua @@ -31,6 +31,7 @@ local stringlower   = string.lower  local stringformat  = string.format  local stringgsub    = string.gsub  local stringbyte    = string.byte +local stringfind    = string.find  -----------------------------------------------------------------------  ---                          font patches @@ -64,18 +65,17 @@ local add_fontdata_fallbacks = function (fontdata)      else --- otf        metadata = fontdata.shared.rawdata.metadata +      fontdata.name    = fontdata.name +                      or fontdata.fullname +                      or fontdata.psname        fontdata.units   = fontdata.units_per_em +      fontdata.size = fontdata.size or fontparameters.size        local resources  = fontdata.resources -      --- the next line is a hack that fixes scaling of fonts with -      --- non-standard em-sizes (most ms fonts have 2048, others -      --- come with 256) -      --fontdata.size    = fontparameters.size * fontdata.units / 1000        --- for legacy fontspec.lua and unicode-math.lua        fontdata.shared.otfdata          = {          pfminfo   = { os2_capheight = metadata.pfminfo.os2_capheight },          metadata  = { ascent = metadata.ascent },        } -      --fontdata.shared.otfdata.metadata = metadata --- brr, that’s meta indeed        --- for microtype and fontspec        local fake_features = { } -- wrong: table.copy(resources.features)        setmetatable(fake_features, { __index = function (tab, idx) @@ -98,8 +98,6 @@ end  --if config.luaotfload.compatibility == true then  if true then -  --- this will cause the output pdf to be garbled -  --- in pdf.js    luatexbase.add_to_callback(      "luaotfload.patch_font",      add_fontdata_fallbacks, diff --git a/luaotfload-features.lua b/luaotfload-features.lua index 8852596..220b362 100644 --- a/luaotfload-features.lua +++ b/luaotfload-features.lua @@ -337,7 +337,9 @@ local import_values = {      --- That’s what the 1.x parser did, not quite as graciously,      --- with an array of branch expressions.      -- "style", "optsize",--> from slashed notation; handled otherwise -    "lookup", "sub", "mode", +    { "lookup", false }, +    { "sub",    false }, +    { "mode",   true },  }  local lookup_types = { "anon", "file", "name", "path" } @@ -411,11 +413,14 @@ local handle_request = function (specification)      end      for n=1, #import_values do -        local feat       = import_values[n] +        local feat       = import_values[n][1] +        local keep       = import_values[n][2]          local newvalue   = request.features[feat]          if newvalue then              specification[feat]    = request.features[feat] -            --request.features[feat] = nil +            if not keep then +                request.features[feat] = nil +            end          end      end diff --git a/luaotfload-merged.lua b/luaotfload-merged.lua index a0a58cc..008b02a 100644 --- a/luaotfload-merged.lua +++ b/luaotfload-merged.lua @@ -1,6 +1,6 @@  -- merged file : luatex-fonts-merged.lua  -- parent file : luatex-fonts.lua --- merge date  : 05/09/13 15:23:31 +-- merge date  : 05/10/13 15:05:28  do -- begin closure to overcome local limits and interference @@ -5046,7 +5046,7 @@ local report_otf=logs.reporter("fonts","otf loading")  local fonts=fonts  local otf=fonts.handlers.otf  otf.glists={ "gsub","gpos" } -otf.version=2.742  +otf.version=2.743   otf.cache=containers.define("fonts","otf",otf.version,true)  local fontdata=fonts.hashes.identifiers  local chardata=characters and characters.data  @@ -5065,6 +5065,7 @@ local usemetatables=false  local packdata=true  local syncspace=true  local forcenotdef=false +local includesubfonts=false  local wildcard="*"  local default="dflt"  local fontloaderfields=fontloader.fields @@ -5191,8 +5192,8 @@ local ordered_enhancers={    "check glyphs",    "check metadata",    "check extra features", -  "add duplicates",    "check encoding", +  "add duplicates",    "cleanup tables",  }  local actions=allocate() @@ -5536,7 +5537,7 @@ actions["prepare glyphs"]=function(data,filename,raw)    local duplicates=resources.duplicates    local variants=resources.variants    if rawsubfonts then -    metadata.subfonts={} +    metadata.subfonts=includesubfonts and {}      properties.cidinfo=rawcidinfo      if rawcidinfo.registry then        local cidmap=fonts.cid.getmap(rawcidinfo) @@ -5547,7 +5548,9 @@ actions["prepare glyphs"]=function(data,filename,raw)          for cidindex=1,#rawsubfonts do            local subfont=rawsubfonts[cidindex]            local cidglyphs=subfont.glyphs -          metadata.subfonts[cidindex]=somecopy(subfont) +          if includesubfonts then +            metadata.subfonts[cidindex]=somecopy(subfont) +          end            for index=0,subfont.glyphcnt-1 do               local glyph=cidglyphs[index]              if glyph then @@ -5556,6 +5559,10 @@ actions["prepare glyphs"]=function(data,filename,raw)                if not unicode or unicode==-1 or unicode>=criterium then                  unicode=cidunicodes[index]                end +              if unicode and descriptions[unicode] then +                report_otf("preventing glyph %a at index %H to overload unicode %U",name or "noname",index,unicode) +                unicode=-1 +              end                if not unicode or unicode==-1 or unicode>=criterium then                  if not name then                    name=format("u%06X",private) @@ -5659,7 +5666,8 @@ actions["check encoding"]=function(data,filename,raw)    local resources=data.resources    local properties=data.properties    local unicodes=resources.unicodes  -  local indices=resources.indices +  local indices=resources.indices  +  local duplicates=resources.duplicates    local mapdata=raw.map or {}    local unicodetoindex=mapdata and mapdata.map or {}    local encname=lower(data.enc_name or mapdata.enc_name or "") @@ -5671,10 +5679,35 @@ actions["check encoding"]=function(data,filename,raw)      for unicode,index in next,unicodetoindex do         if unicode<=criterium and not descriptions[unicode] then          local parent=indices[index]  -        if parent then -          report_otf("weird, unicode %U points to %U with index %H",unicode,parent,index) -        else +        if not parent then            report_otf("weird, unicode %U points to nowhere with index %H",unicode,index) +        else +          local parentdescription=descriptions[parent] +          if parentdescription then +            local altuni=parentdescription.altuni +            if not altuni then +              altuni={ { unicode=parent } } +              parentdescription.altuni=altuni +              duplicates[parent]={ unicode } +            else +              local done=false +              for i=1,#altuni do +                if altuni[i].unicode==parent then +                  done=true +                  break +                end +              end +              if not done then +                altuni[#altuni+1]={ unicode=parent } +                table.insert(duplicates[parent],unicode) +              end +            end +            if trace_loading then +              report_otf("weird, unicode %U points to nowhere with index %H",unicode,index) +            end +          else +            report_otf("weird, unicode %U points to %U with index %H",unicode,index) +          end          end        end      end @@ -8468,29 +8501,18 @@ local function toligature(kind,lookupname,head,start,stop,char,markflag,discfoun            logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])          end          head,current=insert_node_after(head,current,copy_node(start))  +      elseif trace_marks then +        logwarning("%s: delete mark %s",pref(kind,lookupname),gref(char))        end        start=start.next      end -    local start=components -    while start and start.id==glyph_code do  -      local char=start.char -      if marks[char] then -        start[a_ligacomp]=baseindex+(start[a_ligacomp] or componentindex) -        if trace_marks then -          logwarning("%s: keep mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp]) -        end -      else -        break -      end -      start=start.next -    end -    local start=base.next -    while start and start.id==glyph_code do  +    local start=current.next +    while start and start.id==glyph_code do        local char=start.char        if marks[char] then          start[a_ligacomp]=baseindex+(start[a_ligacomp] or componentindex)          if trace_marks then -          logwarning("%s: find mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp]) +          logwarning("%s: set mark %s, gets index %s",pref(kind,lookupname),gref(char),start[a_ligacomp])          end        else          break @@ -10702,6 +10724,12 @@ local function packdata(data)              end            end          end +        local altuni=description.altuni +        if altuni then +          for i=1,#altuni do +            altuni[i]=pack_flat(altuni[i]) +          end +        end        end        local lookups=data.lookups        if lookups then @@ -10806,6 +10834,10 @@ local function packdata(data)                mlookups[tag]=pack_normal(mlookup)              end            end +          local altuni=description.altuni +          if altuni then +            description.altuni=pack_normal(altuni) +          end          end          local lookups=data.lookups          if lookups then @@ -10997,6 +11029,19 @@ local function unpackdata(data)              end            end          end +        local altuni=description.altuni +        if altuni then +          local altuni=tables[altuni] +          if altuni then +            description.altuni=altuni +            for i=1,#altuni do +              local tv=tables[altuni[i]] +              if tv then +                altuni[i]=tv +              end +            end +          end +        end        end        local lookups=data.lookups        if lookups then diff --git a/luaotfload.dtx b/luaotfload.dtx index 0d062a6..75d1221 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -133,7 +133,7 @@ and the derived files  \usepackage{fontspec}  \usepackage{unicode-math}  \setmainfont[ -  Numbers     = OldStyle, +% Numbers     = OldStyle, %% buggy with font cache    Ligatures   = TeX,    BoldFont    = {Linux Libertine O Bold},    ItalicFont  = {Linux Libertine O Italic}, @@ -407,7 +407,7 @@ and the derived files  %           \fileent{GFSBodoni.otf}, and  %           \fileent{PTZ56F.ttf}.  % -% \subsection{\hologo{XeTeX} Compatibility Layer} +% \subsection{Compatibility Layer}  %  % In addition to the regular prefixed requests, \identifier{luaotfload}  % accepts loading fonts the \XETEX way. @@ -1720,8 +1720,6 @@ local patch_defined_font = function (specification, size, id)      return tfmdata  end -caches.compilemethod = "both" -  reset_callback("define_font")  %    \end{macrocode} | 
