From f200bf504aeaf3b54a823082c87ce22ebb31b1c9 Mon Sep 17 00:00:00 2001 From: Context Git Mirror Bot Date: Sat, 27 Sep 2014 13:15:03 +0200 Subject: 2014-09-27 12:10:00 --- tex/generic/context/luatex/luatex-fonts-merged.lua | 127 ++++++++++++++++++++- 1 file changed, 123 insertions(+), 4 deletions(-) (limited to 'tex/generic') diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 4aa03e6a4..79f7a1b88 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 09/26/14 11:42:21 +-- merge date : 09/27/14 12:07:56 do -- begin closure to overcome local limits and interference @@ -5224,6 +5224,7 @@ function mappings.addtounicode(data,filename) local properties=data.properties local descriptions=data.descriptions local unicodes=resources.unicodes + local lookuptypes=resources.lookuptypes if not unicodes then return end @@ -5233,9 +5234,10 @@ function mappings.addtounicode(data,filename) unicodes['zwnj']=unicodes['zwnj'] or 0x200C local private=fonts.constructors.privateoffset local unknown=format("%04X",utfbyte("?")) - local unicodevector=fonts.encodings.agl.unicodes + local unicodevector=fonts.encodings.agl.unicodes local tounicode={} local originals={} + local missing={} resources.tounicode=tounicode resources.originals=originals local lumunic,uparser,oparser @@ -5354,6 +5356,123 @@ function mappings.addtounicode(data,filename) end end end + if not unicode then + missing[name]=true + end + end + end + if next(missing) then + local guess={} + local function check(gname,code,unicode) + local description=descriptions[code] + local variant=description.name + if variant==gname then + return + end + local unic=unicodes[variant] + if unic==-1 or unic>=private or (unic>=0xE000 and unic<=0xF8FF) or unic==0xFFFE or unic==0xFFFF then + else + return + end + local index=descriptions[code].index + if tounicode[index] then + return + end + local g=guess[variant] + if g then + g[gname]=unicode + else + guess[variant]={ [gname]=unicode } + end + end + for unicode,description in next,descriptions do + local slookups=description.slookups + if slookups then + local gname=description.name + for tag,data in next,slookups do + local lookuptype=lookuptypes[tag] + if lookuptype=="alternate" then + for i=1,#data do + check(gname,data[i],unicode) + end + elseif lookuptype=="substitution" then + check(gname,data,unicode) + end + end + end + local mlookups=description.mlookups + if mlookups then + local gname=description.name + for tag,list in next,mlookups do + local lookuptype=lookuptypes[tag] + if lookuptype=="alternate" then + for i=1,#list do + local data=list[i] + for i=1,#data do + check(gname,data[i],unicode) + end + end + elseif lookuptype=="substitution" then + for i=1,#list do + check(gname,list[i],unicode) + end + end + end + end + end + local done=true + while done do + done=false + for k,v in next,guess do + if type(v)~="number" then + for kk,vv in next,v do + if vv==-1 or vv>=private or (vv>=0xE000 and vv<=0xF8FF) or vv==0xFFFE or vv==0xFFFF then + local uu=guess[kk] + if type(uu)=="number" then + guess[k]=uu + done=true + end + else + guess[k]=vv + done=true + end + end + end + end + end + for k,v in next,guess do + if type(v)=="number" then + guess[k]=tounicode16(v) + else + local t=nil + local l=lower(k) + local u=unicodes[l] + if not u then + elseif u==-1 or u>=private or (u>=0xE000 and u<=0xF8FF) or u==0xFFFE or u==0xFFFF then + t=tounicode[descriptions[u].index] + else + end + if t then + guess[k]=t + else + guess[k]="FFFD" + end + end + end + local orphans=0 + local guessed=0 + for k,v in next,guess do + tounicode[descriptions[unicodes[k]].index]=v + if v=="FFFD" then + orphans=orphans+1 + guess[k]=false + else + guessed=guessed+1 + guess[k]=true + end + end + if trace_loading and orphans>0 or guessed>0 then + report_fonts("%s glyphs with no related unicode, %s guessed, %s orphans",guessed+orphans,guessed,orphans) end end if trace_mapping then @@ -6706,7 +6825,7 @@ local report_otf=logs.reporter("fonts","otf loading") local fonts=fonts local otf=fonts.handlers.otf otf.glists={ "gsub","gpos" } -otf.version=2.760 +otf.version=2.761 otf.cache=containers.define("fonts","otf",otf.version,true) local fontdata=fonts.hashes.identifiers local chardata=characters and characters.data @@ -6869,7 +6988,6 @@ local ordered_enhancers={ "prepare lookups", "analyze glyphs", "analyze math", - "prepare tounicode", "reorganize lookups", "reorganize mark classes", "reorganize anchor classes", @@ -6882,6 +7000,7 @@ local ordered_enhancers={ "check glyphs", "check metadata", "check extra features", + "prepare tounicode", "check encoding", "add duplicates", "cleanup tables", -- cgit v1.2.3