diff options
Diffstat (limited to 'tex/generic')
-rw-r--r-- | tex/generic/context/luatex/luatex-fonts-merged.lua | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index f97f82489..0a14e6082 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 : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 10/17/18 15:06:55 +-- merge date : 10/18/18 00:07:52 do -- begin closure to overcome local limits and interference @@ -9414,6 +9414,7 @@ function constructors.scale(tfmdata,specification) targetparameters.forcedsize=forcedsize targetparameters.extrafactor=extrafactor local tounicode=fonts.mappings.tounicode + local unknowncode=tounicode(0xFFFD) local defaultwidth=resources.defaultwidth or 0 local defaultheight=resources.defaultheight or 0 local defaultdepth=resources.defaultdepth or 0 @@ -9669,6 +9670,7 @@ function constructors.scale(tfmdata,specification) chr.unicode=isunicode chr.tounicode=tounicode(isunicode) else + chr.tounicode=unknowncode end if hasquality then local ve=character.expansion_factor @@ -10759,31 +10761,31 @@ local unknown=f_single(0xFFFD) local hash={} local conc={} table.setmetatableindex(hash,function(t,k) + if k<0xD7FF or (k>0xDFFF and k<=0xFFFF) then + v=f_single(k) + else + local k=k-0x10000 + v=f_double(rshift(k,10)+0xD800,k%1024+0xDC00) + end + t[k]=v + return v +end) +local function tounicode(k) if type(k)=="table" then local n=#k for l=1,n do conc[l]=hash[k[l]] end return concat(conc,"",1,n) - end - local v - if k>=0x00E000 and k<=0x00F8FF then - v=unknown + elseif k>=0x00E000 and k<=0x00F8FF then + return unknown elseif k>=0x0F0000 and k<=0x0FFFFF then - v=unknown + return unknown elseif k>=0x100000 and k<=0x10FFFF then - v=unknown - elseif k<0xD7FF or (k>0xDFFF and k<=0xFFFF) then - v=f_single(k) + return unknown else - k=k-0x10000 - v=f_double(rshift(k,10)+0xD800,k%1024+0xDC00) + return hash[k] end - t[k]=v - return v -end) -local function tounicode(unicode) - return hash[unicode] end local function fromunicode16(str) if #str==4 then @@ -21065,7 +21067,7 @@ local function stripredundant(fontdata) if descriptions then local n=0 local c=0 - if not context and fonts.privateoffsets.keepnames then + if (not context and fonts.privateoffsets.keepnames) or forcekeep then for unicode,d in next,descriptions do if d.class=="base" then d.class=nil |