summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-10-03 22:43:11 +0000
committerKarl Berry <karl@freefriends.org>2018-10-03 22:43:11 +0000
commit6a571d522b6eef2ec3644ce4a87d392c6685be32 (patch)
tree14aab55c30aea07e69a087973ef38d56cc224aa3 /Master/texmf-dist/tex/luatex
parent0f791aa75457eadaf84716c9bd1dfe3cfcdafbde (diff)
luaotfload (3oct18)
git-svn-id: svn://tug.org/texlive/trunk@48822 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex')
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-2018-10-02.lua (renamed from Master/texmf-dist/tex/luatex/luaotfload/fontloader-2018-09-24.lua)640
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-cff.lua1
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua3
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua11
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ini.lua47
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua5
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua5
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oup.lua501
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-fonts-mis.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua485
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua2
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua2
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua2
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua2
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua4
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua8
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua2
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua2
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua6
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua58
-rw-r--r--Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty2
23 files changed, 1236 insertions, 564 deletions
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2018-09-24.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2018-10-02.lua
index 99e38f6399a..eed5fb7d455 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2018-09-24.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-2018-10-02.lua
@@ -1,6 +1,6 @@
--[[info-----------------------------------------------------------------------
Luaotfload fontloader package
- build 2018-09-24 22:51:46 by fischer@troubleshooting-tex.de
+ build 2018-10-02 23:45:47 by fischer@troubleshooting-tex.de
-------------------------------------------------------------------------------
© 2018 PRAGMA ADE / ConTeXt Development Team
@@ -61,7 +61,7 @@
--info]]-----------------------------------------------------------------------
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “data-con” d8982c834ed9acc6193eee23067b9d5d] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “data-con” d8982c834ed9acc6193eee23067b9d5d] ---
if not modules then modules={} end modules ['data-con']={
version=1.100,
@@ -173,10 +173,10 @@ function containers.cleanname(name)
return (gsub(lower(name),"[^%w\128-\255]+","-"))
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “data-con”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “data-con”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “basics-nod” 78f56219685f3145b9393c2b688aad94] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “basics-nod” 78f56219685f3145b9393c2b688aad94] ---
if not modules then modules={} end modules ['luatex-fonts-nod']={
version=1.001,
@@ -589,10 +589,10 @@ do
}
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “basics-nod”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “basics-nod”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ini” 6f615d3bc72fb29f409ed2b8f6364c35] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ini” dd3ff5febc73c79b23e16d713a1282fb] ---
if not modules then modules={} end modules ['font-ini']={
version=1.001,
@@ -602,9 +602,11 @@ if not modules then modules={} end modules ['font-ini']={
license="see context related readme files"
}
local allocate=utilities.storage.allocate
+local sortedhash=table.sortedhash
fonts=fonts or {}
local fonts=fonts
-fonts.hashes=fonts.hashes or { identifiers=allocate() }
+local identifiers=allocate()
+fonts.hashes=fonts.hashes or { identifiers=identifiers }
fonts.tables=fonts.tables or {}
fonts.helpers=fonts.helpers or {}
fonts.tracers=fonts.tracers or {}
@@ -614,13 +616,24 @@ fonts.readers={}
fonts.definers={ methods={} }
fonts.loggers={ register=function() end }
if context then
+ font.originaleach=font.each
+ function font.each()
+ return sortedhash(identifiers)
+ end
fontloader=nil
end
+fonts.privateoffsets={
+ textbase=0xF0000,
+ textextrabase=0xFD000,
+ mathextrabase=0xFE000,
+ mathbase=0xFF000,
+ keepnames=false,
+}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ini”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ini”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-mis” fd0a52acf5180695d2870da654db7272] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-mis” 17e967c9ec4d001deefd43ddf25e98f7] ---
if not modules then modules={} end modules ['luatex-font-mis']={
version=1.001,
@@ -648,11 +661,14 @@ table.setmetatableindex(marks,function(t,k)
return marks
end
end)
+function font.each()
+ return table.sortedhash(fonts.hashes.identifiers)
+end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-mis”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-mis”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-con” 3218bd21a24c2abb13b284085da8ced4] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-con” eff77b4c54c2d26eacb29de59e94e2f9] ---
if not modules then modules={} end modules ['font-con']={
version=1.001,
@@ -684,7 +700,7 @@ constructors.autocleanup=true
constructors.namemode="fullpath"
constructors.version=1.01
constructors.cache=containers.define("fonts","constructors",constructors.version,false)
-constructors.privateoffset=0xF0000
+constructors.privateoffset=fonts.privateoffsets.textbase or 0xF0000
constructors.cacheintex=true
local designsizes=allocate()
constructors.designsizes=designsizes
@@ -1991,10 +2007,10 @@ function constructors.addcoreunicodes(unicodes)
return unicodes
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-con”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-con”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-enc” 5ff4ca50493d7c4ecea0e15c203099f0] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-enc” 5ff4ca50493d7c4ecea0e15c203099f0] ---
if not modules then modules={} end modules ['luatex-font-enc']={
version=1.001,
@@ -2063,10 +2079,10 @@ function encodings.load(filename)
return containers.write(encodings.cache,name,data)
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-enc”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-enc”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-cid” 22b0367742fb253deef84ef7ccf5e8de] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-cid” 22b0367742fb253deef84ef7ccf5e8de] ---
if not modules then modules={} end modules ['font-cid']={
version=1.001,
@@ -2217,10 +2233,10 @@ function cid.getmap(specification)
return found
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-cid”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-cid”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-map” 2c03dc61afabb5887ef18a88e6ec86bd] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-map” f57b80596cf5096c3505c0f3ef4285a8] ---
if not modules then modules={} end modules ['font-map']={
version=1.001,
@@ -2517,12 +2533,16 @@ function mappings.addtounicode(data,filename,checklookups,forceligatures)
missing[du]=true
nofmissing=nofmissing+1
end
+ else
end
end
else
local overload=overloads[du]
if overload then
glyph.unicode=overload.unicode
+ elseif not glyph.unicode then
+ missing[du]=true
+ nofmissing=nofmissing+1
end
end
end
@@ -2603,10 +2623,10 @@ function mappings.addtounicode(data,filename,checklookups,forceligatures)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-map”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-map”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-vfc” 237aff1862009b7850653c2098473bd4] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-vfc” 237aff1862009b7850653c2098473bd4] ---
if not modules then modules={} end modules ['font-vfc']={
version=1.001,
@@ -2682,10 +2702,10 @@ helpers.commands=utilities.storage.allocate {
dummy=dummy,
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-vfc”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-vfc”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otr” 4a1dae571a43d7cb8afce7e906df89c6] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otr” 4a1dae571a43d7cb8afce7e906df89c6] ---
if not modules then modules={} end modules ['font-otr']={
version=1.001,
@@ -4463,10 +4483,10 @@ function readers.extend(fontdata)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otr”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otr”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-oti” 309a75f9c14b77d87e94eba827dc4e71] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-oti” 309a75f9c14b77d87e94eba827dc4e71] ---
if not modules then modules={} end modules ['font-oti']={
version=1.001,
@@ -4609,10 +4629,10 @@ function otffeatures.checkeddefaultlanguage(featuretype,autolanguage,languages)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-oti”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-oti”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ott” a4dd9bc516bdb7669ee61d5207f899c6] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ott” b20ddcf6360a2e35e79b7bdad0289a19] ---
if not modules then modules={} end modules ["font-ott"]={
version=1.001,
@@ -4998,6 +5018,7 @@ local languages=allocate {
["kiu" ]="kirmanjki",
["kjd" ]="southern kiwai",
["kjp" ]="eastern pwo karen",
+ ["kjz" ]="bumthangkha",
["kkn" ]="kokni",
["klm" ]="kalmyk",
["kmb" ]="kamba",
@@ -5086,6 +5107,7 @@ local languages=allocate {
["mdr" ]="mandar",
["men" ]="me'en",
["mer" ]="meru",
+ ["mfa" ]="pattani malay",
["mfe" ]="morisyen",
["min" ]="minangkabau",
["miz" ]="mizo",
@@ -5283,6 +5305,7 @@ local languages=allocate {
["tpi" ]="tok pisin",
["trk" ]="turkish",
["tsg" ]="tsonga",
+ ["tsj" ]="tshangla",
["tua" ]="turoyo aramaic",
["tul" ]="tulu",
["tuv" ]="tuvin",
@@ -5313,6 +5336,7 @@ local languages=allocate {
["xbd" ]="lü",
["xhs" ]="xhosa",
["xjb" ]="minjangbal",
+ ["xkf" ]="khengkha",
["xog" ]="soga",
["xpe" ]="kpelle (liberia)",
["yak" ]="sakha",
@@ -5658,10 +5682,10 @@ function otffeatures.normalize(features)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ott”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ott”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-cff” eefa156275ba0ac91aa651a944d35978] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-cff” 428a467664b5f49b812b2d66f579e3cf] ---
if not modules then modules={} end modules ['font-cff']={
version=1.001,
@@ -7524,10 +7548,10 @@ function readers.cffcheck(filename)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-cff”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-cff”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ttf” ff587471f4297aa8ba0fa022609adc6e] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ttf” ff587471f4297aa8ba0fa022609adc6e] ---
if not modules then modules={} end modules ['font-ttf']={
version=1.001,
@@ -8618,10 +8642,10 @@ function readers.gvar(f,fontdata,specification,glyphdata,shapedata)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ttf”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ttf”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-dsp” 9cade9beb226c61b4323729aca1f4a80] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-dsp” cb8138a91cfbe562467821c5e0c2568e] ---
if not modules then modules={} end modules ['font-dsp']={
version=1.001,
@@ -8630,7 +8654,7 @@ if not modules then modules={} end modules ['font-dsp']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local next,type=next,type
+local next,type,tonumber=next,type,tonumber
local band=bit32.band
local extract=bit32.extract
local bor=bit32.bor
@@ -9415,8 +9439,9 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
rules=rules,
}
elseif subtype==3 then
- local current=readarray(f)
+ local nofglyphs=readushort(f)
local noflookups=readushort(f)
+ local current=readcardinaltable(f,nofglyphs,ushort)
local lookups=readlookuparray(f,noflookups,#current)
current=readcoveragearray(f,tableoffset,current,true)
return {
@@ -9610,7 +9635,7 @@ function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofg
local delta=readshort(f)
local coverage=readcoverage(f,tableoffset+coverage)
for index in next,coverage do
- local newindex=index+delta
+ local newindex=(index+delta)%65536
if index>nofglyphs or newindex>nofglyphs then
report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
coverage[index]=nil
@@ -10496,7 +10521,6 @@ do
if not rlookups then
report_issue(i,what,sequence,"no")
elseif not next(rlookups) then
- report_issue(i,what,sequence,"empty")
rule.lookups=nil
else
local length=#rlookups
@@ -10685,7 +10709,7 @@ do
elseif specification.globalkerns then
name="globalkern"
else
- report("ignoring global kern table using gpos kern feature")
+ report("ignoring global kern table, using gpos kern feature")
return
end
setposition(f,datatable.offset)
@@ -11632,10 +11656,10 @@ function readers.mvar(f,fontdata,specification)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-dsp”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-dsp”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-oup” 020f2630f5a18d39e209f1cbf7a334ea] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-oup” ab288020c44f14da4d7eff185a37c8a4] ---
if not modules then modules={} end modules ['font-oup']={
version=1.001,
@@ -11653,8 +11677,15 @@ local sortedkeys=table.sortedkeys
local sortedhash=table.sortedhash
local tohash=table.tohash
local setmetatableindex=table.setmetatableindex
-local report=logs.reporter("otf reader")
+local report_error=logs.reporter("otf reader","error")
+local report_markwidth=logs.reporter("otf reader","markwidth")
+local report_cleanup=logs.reporter("otf reader","cleanup")
+local report_optimizations=logs.reporter("otf reader","merges")
+local report_unicodes=logs.reporter("otf reader","unicodes")
local trace_markwidth=false trackers.register("otf.markwidth",function(v) trace_markwidth=v end)
+local trace_cleanup=false trackers.register("otf.cleanups",function(v) trace_cleanups=v end)
+local trace_optimizations=false trackers.register("otf.optimizations",function(v) trace_optimizations=v end)
+local trace_unicodes=false trackers.register("otf.unicodes",function(v) trace_unicodes=v end)
local readers=fonts.handlers.otf.readers
local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
local f_private=formatters["P%05X"]
@@ -11695,6 +11726,7 @@ local function unifyresources(fontdata,indices)
if not descriptions or not resources then
return
end
+ local nofindices=#indices
local variants=fontdata.resources.variants
if variants then
for selector,unicodes in next,variants do
@@ -11710,8 +11742,8 @@ local function unifyresources(fontdata,indices)
local u=indices[k]
if u then
newmarks[u]=v
- else
- report("discarding mark %i",k)
+ elseif trace_optimizations then
+ report_optimizations("discarding mark %i",k)
end
end
return newmarks
@@ -11744,18 +11776,28 @@ local function unifyresources(fontdata,indices)
if not done[c] then
local t={}
for k,v in next,c do
- t[indices[k]]=v
+ local ug=indices[k]
+ if ug then
+ t[ug]=v
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,"coverage",k,nofindices)
+ end
end
cover[i]=t
done[c]=d
end
end
end
- local function recursed(c)
+ local function recursed(c,kind)
local t={}
for g,d in next,c do
if type(d)=="table" then
- t[indices[g]]=recursed(d)
+ local ug=indices[g]
+ if ug then
+ t[ug]=recursed(d,kind)
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g,nofindices)
+ end
else
t[g]=indices[d]
end
@@ -11783,18 +11825,31 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1,d1 in next,c do
local ug1=indices[g1]
- local ud1=indices[d1]
- t1[ug1]=ud1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=ud1
+ if ug1 then
+ local ud1=indices[d1]
+ if ud1 then
+ t1[ug1]=ud1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=ud1
+ end
+ end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",3,kind,d1,nofindices)
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
end
end
else
for g1,d1 in next,c do
- t1[indices[g1]]=indices[d1]
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=indices[d1]
+ else
+ report_error("fuzzy case %i in unifying %s: %i",2,kind,g1)
+ end
end
end
done[c]=t1
@@ -11808,15 +11863,25 @@ local function unifyresources(fontdata,indices)
if not t1 then
t1={}
for g1,d1 in next,c do
- local t2=done[d1]
- if not t2 then
- t2={}
- for g2,d2 in next,d1 do
- t2[indices[g2]]=d2
+ local ug1=indices[g1]
+ if ug1 then
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ local ug2=indices[g2]
+ if ug2 then
+ t2[ug2]=d2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g2,nofindices,nofindices)
+ end
+ end
+ done[d1]=t2
end
- done[d1]=t2
+ t1[ug1]=t2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
- t1[indices[g1]]=t2
end
done[c]=t1
end
@@ -11825,7 +11890,7 @@ local function unifyresources(fontdata,indices)
elseif kind=="gsub_ligature" then
local c=step.coverage
if c then
- step.coverage=recursed(c)
+ step.coverage=recursed(c,kind)
end
elseif kind=="gsub_alternate" or kind=="gsub_multiple" then
local c=step.coverage
@@ -11836,21 +11901,37 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1,d1 in next,c do
for i=1,#d1 do
- d1[i]=indices[d1[i]]
+ local d1i=d1[i]
+ local d1u=indices[d1i]
+ if d1u then
+ d1[i]=d1u
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,i,d1i,nofindices)
+ end
end
local ug1=indices[g1]
- t1[ug1]=d1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=copy(d1)
+ if ug1 then
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
end
else
for g1,d1 in next,c do
for i=1,#d1 do
- d1[i]=indices[d1[i]]
+ local d1i=d1[i]
+ local d1u=indices[d1i]
+ if d1u then
+ d1[i]=d1u
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,d1i,nofindices)
+ end
end
t1[indices[g1]]=d1
end
@@ -11859,6 +11940,41 @@ local function unifyresources(fontdata,indices)
end
step.coverage=t1
end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=d1
+ end
+ end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
+ end
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" or kind=="gpos_mark2ligature" then
local c=step.coverage
if c then
@@ -11866,7 +11982,12 @@ local function unifyresources(fontdata,indices)
if not t1 then
t1={}
for g1,d1 in next,c do
- t1[indices[g1]]=d1
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
+ end
end
done[c]=t1
end
@@ -11881,7 +12002,12 @@ local function unifyresources(fontdata,indices)
if not t2 then
t2={}
for g2,d2 in next,d1 do
- t2[indices[g2]]=d2
+ local ug2=indices[g2]
+ if ug2 then
+ t2[ug2]=d2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g2,nofindices)
+ end
end
done[d1]=t2
end
@@ -11890,7 +12016,7 @@ local function unifyresources(fontdata,indices)
done[c]=c
end
end
- elseif kind=="gpos_single" then
+ elseif kind=="gpos_cursive" then
local c=step.coverage
if c then
local t1=done[c]
@@ -11899,44 +12025,27 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1,d1 in next,c do
local ug1=indices[g1]
- t1[ug1]=d1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=d1
+ if ug1 then
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
end
end
else
for g1,d1 in next,c do
- t1[indices[g1]]=d1
- end
- end
- done[c]=t1
- end
- step.coverage=t1
- end
- elseif kind=="gpos_cursive" then
- local c=step.coverage
- if c then
- local t1=done[c]
- if not t1 then
- t1={}
- if duplicates then
- for g1,d1 in next,c do
local ug1=indices[g1]
- t1[ug1]=d1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=copy(d1)
- end
+ if ug1 then
+ t1[ug1]=d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
end
- else
- for g1,d1 in next,c do
- t1[indices[g1]]=d1
- end
end
done[c]=t1
end
@@ -11980,9 +12089,13 @@ local function copyduplicates(fontdata)
if not ds or ds.width==0 then
if ds then
descriptions[0xAD]=nil
- report("patching soft hyphen")
+ if trace_unicodes then
+ report_unicodes("patching soft hyphen")
+ end
else
- report("adding soft hyphen")
+ if trace_unicodes then
+ report_unicodes("adding soft hyphen")
+ end
end
if not duplicates then
duplicates={}
@@ -12018,10 +12131,12 @@ local function copyduplicates(fontdata)
end
n=n+1
end
- if n<=m then
- report("duplicates: %i : % t",n,t)
- else
- report("duplicates: %i : % t ...",n,t)
+ if trace_unicodes then
+ if n<=m then
+ report_unicodes("%i : % t",n,t)
+ else
+ report_unicodes("%i : % t ...",n,t)
+ end
end
else
end
@@ -12143,7 +12258,9 @@ local function checklookups(fontdata,missing,nofmissing)
end
end
if nofmissing<=0 then
- report("all done in %s loops",loops)
+ if trace_unicodes then
+ report_unicodes("all missings done in %s loops",loops)
+ end
return
elseif old==nofmissing then
break
@@ -12192,7 +12309,9 @@ local function checklookups(fontdata,missing,nofmissing)
recursed(ligatures[i])
end
if nofmissing<=0 then
- report("all done in %s loops",loops)
+ if trace_unicodes then
+ report_unicodes("all missings done in %s loops",loops)
+ end
return
elseif old==nofmissing then
break
@@ -12201,7 +12320,7 @@ local function checklookups(fontdata,missing,nofmissing)
t=nil
n=0
end
- if nofmissing>0 then
+ if trace_unicodes and nofmissing>0 then
local done={}
for i,r in next,missing do
if r then
@@ -12213,7 +12332,7 @@ local function checklookups(fontdata,missing,nofmissing)
end
end
if next(done) then
- report("not unicoded: % t",sortedkeys(done))
+ report_unicode("not unicoded: % t",sortedkeys(done))
end
end
end
@@ -12236,6 +12355,9 @@ local function unifymissing(fontdata)
fonts.mappings.addtounicode(fontdata,fontdata.filename,checklookups)
resources.unicodes=nil
end
+local firstprivate=fonts.privateoffsets.textbase or 0xF0000
+local puafirst=0xE000
+local pualast=0xF8FF
local function unifyglyphs(fontdata,usenames)
local private=fontdata.private or privateoffset
local glyphs=fontdata.glyphs
@@ -12258,40 +12380,106 @@ local function unifyglyphs(fontdata,usenames)
else
indices[0]=zerocode
end
- for index=1,#glyphs do
- local glyph=glyphs[index]
- local unicode=glyph.unicode
- if not unicode or unicode>=private or (unicode>=0xE000 and unicode<=0xF8FF) or unicode==0xFFFE or unicode==0xFFFF then
- unicode=private
- if names then
+ if names then
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
local name=glyph.name or f_private(unicode)
indices[index]=name
names[name]=unicode
- else
- indices[index]=unicode
- end
- private=private+1
- elseif descriptions[unicode] then
- report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
- unicode=private
- if names then
+ private=private+1
+ elseif unicode>=firstprivate then
+ unicode=private
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ private=private+1
+ elseif unicode>=puafirst and unicode<=pualast then
local name=glyph.name or f_private(unicode)
indices[index]=name
names[name]=unicode
+ elseif descriptions[unicode] then
+ unicode=private
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ private=private+1
else
- indices[index]=unicode
- end
- private=private+1
- else
- if names then
local name=glyph.name or f_unicode(unicode)
indices[index]=name
names[name]=unicode
+ end
+ descriptions[unicode]=glyph
+ end
+ elseif trace_unicodes then
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=firstprivate then
+ local name=glyph.name
+ if name then
+ report_unicodes("moving glyph %a indexed %05X from private %U to %U ",name,index,unicode,private)
+ else
+ report_unicodes("moving glyph indexed %05X from private %U to %U ",index,unicode,private)
+ end
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=puafirst and unicode<=pualast then
+ local name=glyph.name
+ if name then
+ report_unicodes("keeping private unicode %U for glyph %a indexed %05X",unicode,name,index)
+ else
+ report_unicodes("keeping private unicode %U for glyph indexed %05X",unicode,index)
+ end
+ indices[index]=unicode
+ elseif descriptions[unicode] then
+ local name=glyph.name
+ if name then
+ report_unicodes("assigning duplicate unicode %U to %U for glyph %a indexed %05X ",unicode,private,name,index)
+ else
+ report_unicodes("assigning duplicate unicode %U to %U for glyph indexed %05X ",unicode,private,index)
+ end
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ else
+ indices[index]=unicode
+ end
+ descriptions[unicode]=glyph
+ end
+ else
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=firstprivate then
+ local name=glyph.name
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=puafirst and unicode<=pualast then
+ local name=glyph.name
+ indices[index]=unicode
+ elseif descriptions[unicode] then
+ local name=glyph.name
+ unicode=private
+ indices[index]=unicode
+ private=private+1
else
indices[index]=unicode
end
+ descriptions[unicode]=glyph
end
- descriptions[unicode]=glyph
end
for index=1,#glyphs do
local math=glyphs[index].math
@@ -12335,28 +12523,39 @@ local function unifyglyphs(fontdata,usenames)
end
local p_bogusname=(
(P("uni")+P("UNI")+P("Uni")+P("U")+P("u"))*S("Xx")^0*R("09","AF")^1+(P("identity")+P("Identity")+P("IDENTITY"))*R("09","AF")^1+(P("index")+P("Index")+P("INDEX"))*R("09")^1
-)*P(-1)
+)*(P(-1)+P("."))
local function stripredundant(fontdata)
local descriptions=fontdata.descriptions
if descriptions then
local n=0
local c=0
- for unicode,d in next,descriptions do
- local name=d.name
- if name and lpegmatch(p_bogusname,name) then
- d.name=nil
- n=n+1
+ if not context and fonts.privateoffsets.keepnames then
+ for unicode,d in next,descriptions do
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
end
- if d.class=="base" then
- d.class=nil
- c=c+1
+ else
+ for unicode,d in next,descriptions do
+ local name=d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name=nil
+ n=n+1
+ end
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
end
end
- if n>0 then
- report("%s bogus names removed (verbose unicode)",n)
- end
- if c>0 then
- report("%s base class tags removed (default is base)",c)
+ if trace_cleanup then
+ if n>0 then
+ report_cleanup("%s bogus names removed (verbose unicode)",n)
+ end
+ if c>0 then
+ report_cleanup("%s base class tags removed (default is base)",c)
+ end
end
end
end
@@ -13445,12 +13644,16 @@ local function mergesteps_1(lookup,strict)
local f=first.format
for i=2,nofsteps do
if steps[i].format~=f then
- report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ end
return 0
end
end
end
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
for i=2,nofsteps do
local c=steps[i].coverage
@@ -13475,12 +13678,16 @@ local function mergesteps_2(lookup)
local f=first.format
for i=2,nofsteps do
if steps[i].format~=f then
- report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ end
return 0
end
end
end
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
for i=2,nofsteps do
local c=steps[i].coverage
@@ -13507,7 +13714,9 @@ end
local function mergesteps_3(lookup,strict)
local steps=lookup.steps
local nofsteps=lookup.nofsteps
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local coverage={}
for i=1,nofsteps do
local c=steps[i].coverage
@@ -13515,7 +13724,9 @@ local function mergesteps_3(lookup,strict)
for k,v in next,c do
local tk=coverage[k]
if tk then
- report("quitting merge due to multiple checks")
+ if trace_optimizations then
+ report_optimizations("quitting merge due to multiple checks")
+ end
return nofsteps
else
coverage[k]=v
@@ -13562,7 +13773,9 @@ local function mergesteps_4(lookup)
local steps=lookup.steps
local nofsteps=lookup.nofsteps
local first=steps[1]
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
for i=2,nofsteps do
local c=steps[i].coverage
@@ -13585,7 +13798,9 @@ local function mergesteps_5(lookup)
local steps=lookup.steps
local nofsteps=lookup.nofsteps
local first=steps[1]
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
local hash=nil
for k,v in next,target do
@@ -13634,7 +13849,9 @@ local function checkkerns(lookup)
end
end
if kerns then
- report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ end
local c={}
for g1,d1 in next,coverage do
if d1 and d1~=true then
@@ -13675,7 +13892,9 @@ local function checkpairs(lookup)
if step.format=="pair" then
local coverage=onlykerns(step)
if coverage then
- report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ end
for g1,d1 in next,coverage do
local d={}
for g2,d2 in next,d1 do
@@ -13791,17 +14010,19 @@ function readers.compact(data)
end
end
end
- else
- report("no lookups in %a",what)
+ elseif trace_optimizations then
+ report_optimizations("no lookups in %a",what)
end
end
compact("sequences")
compact("sublookups")
- if merged>0 then
- report("%i steps of %i removed due to merging",merged,allsteps)
- end
- if kerned>0 then
- report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ if trace_optimizations then
+ if merged>0 then
+ report_optimizations("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned>0 then
+ report_optimizations("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ end
end
end
local function mergesteps(t,k)
@@ -13892,7 +14113,7 @@ function readers.expand(data)
if not wd then
d.width=defaultwidth
elseif trace_markwidth and wd~=0 and d.class=="mark" then
- report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+ report_markwidth("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
end
if bb then
local ht=bb[4]
@@ -14042,10 +14263,10 @@ function readers.expand(data)
expandlookups(sublookups)
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-oup”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-oup”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otl” fcc55ae6cff5fd55b5054f923c21cafa] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otl” 40cdceeb682bac55b4a69465b76bcc33] ---
if not modules then modules={} end modules ['font-otl']={
version=1.001,
@@ -14073,7 +14294,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_de
local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
-otf.version=3.104
+otf.version=3.106
otf.cache=containers.define("fonts","otl",otf.version,true)
otf.svgcache=containers.define("fonts","svg",otf.version,true)
otf.sbixcache=containers.define("fonts","sbix",otf.version,true)
@@ -14149,7 +14370,7 @@ function otf.load(filename,sub,instance)
end
if reload then
report_otf("loading %a, hash %a",filename,hash)
- starttiming(otfreaders)
+ starttiming(otfreaders,true)
data=otfreaders.loadfont(filename,sub or 1,instance)
if data then
local used=checkmemory()
@@ -14232,6 +14453,7 @@ function otf.load(filename,sub,instance)
checkmemory(used,threshold,tracememory)
end
else
+ stoptiming(otfreaders)
data=nil
report_otf("loading failed due to read error")
end
@@ -14747,10 +14969,10 @@ otf.coverup={
end
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otl”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otl”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-oto” d78a6165b7ff6c21f4c3c4c3c0553648] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-oto” d78a6165b7ff6c21f4c3c4c3c0553648] ---
if not modules then modules={} end modules ['font-oto']={
version=1.001,
@@ -15197,10 +15419,10 @@ registerotffeature {
}
otf.basemodeinitializer=featuresinitializer
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-oto”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-oto”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otj” 578448ae37a167319dbccd5af04738da] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otj” 578448ae37a167319dbccd5af04738da] ---
if not modules then modules={} end modules ['font-otj']={
version=1.001,
@@ -16657,10 +16879,10 @@ function injections.handler(head,where)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otj”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otj”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ota” d883cf661bb8c27bfa9b7cc66420c1ed] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ota” d883cf661bb8c27bfa9b7cc66420c1ed] ---
if not modules then modules={} end modules ['font-ota']={
version=1.001,
@@ -17038,10 +17260,10 @@ directives.register("otf.analyze.useunicodemarks",function(v)
analyzers.useunicodemarks=v
end)
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ota”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ota”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ots” 624f23e63b7430a51212c8824d09924f] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ots” 624f23e63b7430a51212c8824d09924f] ---
if not modules then modules={} end modules ['font-ots']={
version=1.001,
@@ -20609,10 +20831,10 @@ registerotffeature {
},
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ots”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ots”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-osd” d2b542031aa693bb423b6d3272820c9a] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-osd” d2b542031aa693bb423b6d3272820c9a] ---
if not modules then modules={} end modules ['font-osd']={
version=1.001,
@@ -22547,10 +22769,10 @@ for i=1,nofscripts do
methods[scripts_two[i]]=method_two
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-osd”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-osd”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ocl” 49cf3230228aa7f2d19cd491f55f5395] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ocl” 49cf3230228aa7f2d19cd491f55f5395] ---
if not modules then modules={} end modules ['font-ocl']={
version=1.001,
@@ -23022,10 +23244,10 @@ fonts.handlers.otf.features.register {
}
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-ocl”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-ocl”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otc” 9dcd93d83bc61c90f0fb6161a1911a55] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otc” 9dcd93d83bc61c90f0fb6161a1911a55] ---
if not modules then modules={} end modules ['font-otc']={
version=1.001,
@@ -23766,10 +23988,10 @@ end
otf.enhancers.enhance=enhance
otf.enhancers.register("check extra features",enhance)
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-otc”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-otc”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-onr” cf93eb4ab34461d2b3797792dbdb035f] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-onr” cf93eb4ab34461d2b3797792dbdb035f] ---
if not modules then modules={} end modules ['font-onr']={
version=1.001,
@@ -24122,10 +24344,10 @@ function readers.getinfo(filename)
end
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-onr”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-onr”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-one” 52588c7c3aab714d95d03e91ee86e1ad] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-one” 52588c7c3aab714d95d03e91ee86e1ad] ---
if not modules then modules={} end modules ['font-one']={
version=1.001,
@@ -24824,10 +25046,10 @@ registerafmenhancer("normalize features",enhance_normalize_features)
registerafmenhancer("check extra features",otfenhancers.enhance)
registerafmenhancer("fix names",enhance_fix_names)
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-one”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-one”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-afk” 9da14e0fb22129c053acc599d1312544] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-afk” 9da14e0fb22129c053acc599d1312544] ---
if not modules then modules={} end modules ['font-afk']={
version=1.001,
@@ -24994,10 +25216,10 @@ fonts.handlers.afm.helpdata={
}
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-afk”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-afk”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-tfm” c9797c1b4ccb8fdb7f041e19207109a2] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-tfm” c9797c1b4ccb8fdb7f041e19207109a2] ---
if not modules then modules={} end modules ['font-tfm']={
version=1.001,
@@ -25508,10 +25730,10 @@ registertfmfeature {
}
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-tfm”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-tfm”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-lua” 1fbfdf7b689b2bdfd0e3bb9bf74ce136] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-lua” 1fbfdf7b689b2bdfd0e3bb9bf74ce136] ---
if not modules then modules={} end modules ['font-lua']={
version=1.001,
@@ -25551,10 +25773,10 @@ function readers.lua(specification)
return check_lua(specification,fullname)
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-lua”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-lua”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-def” 8e2cb2552bf02246da2ac43334b91795] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-def” 8e2cb2552bf02246da2ac43334b91795] ---
if not modules then modules={} end modules ['font-def']={
version=1.001,
@@ -25959,10 +26181,10 @@ function font.getfont(id)
end
callbacks.register('define_font',definers.read,"definition of fonts (tfmdata preparation)")
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-def”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-def”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-def” f435e0875f203f343157baeff876ec9c] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-def” f435e0875f203f343157baeff876ec9c] ---
if not modules then modules={} end modules ['luatex-fonts-def']={
version=1.001,
@@ -26043,10 +26265,10 @@ function fonts.definers.applypostprocessors(tfmdata)
return tfmdata
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-def”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-def”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-ext” 32013cbc5d5d336be8b1d1e5879d86c4] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-ext” 32013cbc5d5d336be8b1d1e5879d86c4] ---
if not modules then modules={} end modules ['luatex-fonts-ext']={
version=1.001,
@@ -26232,10 +26454,10 @@ registerotffeature {
}
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-ext”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-ext”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-tex” ceb087ef6fa2f89aed7179f60ddf8f35] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-tex” ceb087ef6fa2f89aed7179f60ddf8f35] ---
if not modules then modules={} end modules ['font-imp-tex']={
version=1.001,
@@ -26334,10 +26556,10 @@ registerotffeature {
description="arabic digits",
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-tex”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-tex”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-ligatures” 26ffcf089391445f7af59536c8814364] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-ligatures” 26ffcf089391445f7af59536c8814364] ---
if not modules then modules={} end modules ['font-imp-ligatures']={
version=1.001,
@@ -26451,10 +26673,10 @@ if context then
}
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-ligatures”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-ligatures”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-italics” c2e6d6c4096a2c30d68fbffd3d7d58a7] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-italics” c2e6d6c4096a2c30d68fbffd3d7d58a7] ---
if not modules then modules={} end modules ['font-imp-italics']={
version=1.001,
@@ -26560,10 +26782,10 @@ if context then
registerafmfeature(dimensions_specification)
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-italics”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-italics”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-effects” 3327181ef3db6f44dd234ad66ccc3f38] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-effects” 3327181ef3db6f44dd234ad66ccc3f38] ---
if not modules then modules={} end modules ['font-imp-effects']={
version=1.001,
@@ -26920,10 +27142,10 @@ local specification={
registerotffeature(specification)
registerafmfeature(specification)
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “font-imp-effects”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “font-imp-effects”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-lig” fbd251eea3810a43a8d5542319361d68] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-lig” fbd251eea3810a43a8d5542319361d68] ---
fonts.handlers.otf.addfeature {
@@ -28992,10 +29214,10 @@ fonts.handlers.otf.addfeature {
["type"]="ligature",
}
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-lig”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-lig”] ---
-do --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-gbn” 10ecdf01e7c926e5128ad8a9dff4d677] ---
+do --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-gbn” 10ecdf01e7c926e5128ad8a9dff4d677] ---
if not modules then modules={} end modules ['luatex-fonts-gbn']={
version=1.001,
@@ -29260,7 +29482,7 @@ function nodes.simple_font_handler(head,groupcode,size,packtype,direction)
return head
end
-end --- [luaotfload, fontloader-2018-09-24.lua scope for “fonts-gbn”] ---
+end --- [luaotfload, fontloader-2018-10-02.lua scope for “fonts-gbn”] ---
--- vim:ft=lua:sw=2:ts=8:et:tw=79
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-cff.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-cff.lua
index 87234dd460f..ecd49fa3ad1 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-cff.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-cff.lua
@@ -1567,6 +1567,7 @@ do
end
local function blend()
+ -- leaves n values on stack
local n = stack[top]
top = top - 1
if not axis then
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua
index e8bcd56a263..54cf2c19953 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-con.lua
@@ -46,8 +46,7 @@ constructors.namemode = "fullpath" -- will be a function
constructors.version = 1.01
constructors.cache = containers.define("fonts", "constructors", constructors.version, false)
-constructors.privateoffset = 0xF0000 -- 0x10FFFF | context also uses privates: 0xE000-0xEFFF
-
+constructors.privateoffset = fonts.privateoffsets.textbase or 0xF0000
constructors.cacheintex = true -- so we see the original table in fonts.font
-- This might become an interface:
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua
index 1fe4289b2f7..127afd9cbaf 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-dsp.lua
@@ -54,7 +54,7 @@ if not modules then modules = { } end modules ['font-dsp'] = {
-- Although we use a few table readers there i sno real gain in there (apart from having
-- less code. After all there are often not that many demanding features.
-local next, type = next, type
+local next, type, tonumber = next, type, tonumber
local band = bit32.band
local extract = bit32.extract
local bor = bit32.bor
@@ -1007,8 +1007,9 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
rules = rules,
}
elseif subtype == 3 then
- local current = readarray(f)
+ local nofglyphs = readushort(f)
local noflookups = readushort(f)
+ local current = readcardinaltable(f,nofglyphs,ushort)
local lookups = readlookuparray(f,noflookups,#current)
current = readcoveragearray(f,tableoffset,current,true)
return {
@@ -1215,7 +1216,7 @@ function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofg
local delta = readshort(f) -- can be negative
local coverage = readcoverage(f,tableoffset+coverage) -- not simple as we need to set key/value anyway
for index in next, coverage do
- local newindex = index + delta
+ local newindex = (index + delta) % 65536 -- modulo is new in 1.8.3
if index > nofglyphs or newindex > nofglyphs then
report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
coverage[index] = nil
@@ -2213,7 +2214,7 @@ do
report_issue(i,what,sequence,"no")
elseif not next(rlookups) then
-- can be ok as it aborts a chain sequence
- report_issue(i,what,sequence,"empty")
+ -- report_issue(i,what,sequence,"empty")
rule.lookups = nil
else
-- we can have holes in rlookups flagged false and we can have multiple lookups
@@ -2421,7 +2422,7 @@ do
elseif specification.globalkerns then
name = "globalkern"
else
- report("ignoring global kern table using gpos kern feature")
+ report("ignoring global kern table, using gpos kern feature")
return
end
setposition(f,datatable.offset)
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ini.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ini.lua
index 3d5dd27a2d5..462e30bf909 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ini.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ini.lua
@@ -10,22 +10,45 @@ if not modules then modules = { } end modules ['font-ini'] = {
<p>Not much is happening here.</p>
--ldx]]--
-local allocate = utilities.storage.allocate
+local allocate = utilities.storage.allocate
+local sortedhash = table.sortedhash
-fonts = fonts or { }
-local fonts = fonts
+fonts = fonts or { }
+local fonts = fonts
-fonts.hashes = fonts.hashes or { identifiers = allocate() }
-fonts.tables = fonts.tables or { }
-fonts.helpers = fonts.helpers or { }
-fonts.tracers = fonts.tracers or { } -- for the moment till we have move to moduledata
-fonts.specifiers = fonts.specifiers or { } -- in format !
+local identifiers = allocate()
-fonts.analyzers = { } -- not needed here
-fonts.readers = { }
-fonts.definers = { methods = { } }
-fonts.loggers = { register = function() end }
+fonts.hashes = fonts.hashes or { identifiers = identifiers }
+fonts.tables = fonts.tables or { }
+fonts.helpers = fonts.helpers or { }
+fonts.tracers = fonts.tracers or { } -- for the moment till we have move to moduledata
+fonts.specifiers = fonts.specifiers or { } -- in format !
+
+fonts.analyzers = { } -- not needed here
+fonts.readers = { }
+fonts.definers = { methods = { } }
+fonts.loggers = { register = function() end }
if context then
+
+ font.originaleach = font.each
+
+ function font.each()
+ return sortedhash(identifiers)
+ end
+
fontloader = nil
+
end
+
+-- Outside context one can bump textbase to some higher value but only the
+-- textbase given here is officially supported (read: bug testing etc will
+-- use the values below).
+
+fonts.privateoffsets = {
+ textbase = 0xF0000, -- used for hidden (opentype features)
+ textextrabase = 0xFD000, -- used for visible by name
+ mathextrabase = 0xFE000, -- used for visible by code
+ mathbase = 0xFF000, -- used for hidden (virtual math)
+ keepnames = false, -- when set to true names are always kept (not for context)
+}
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua
index a7fbfe49e89..712b1584c50 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-map.lua
@@ -550,12 +550,17 @@ function mappings.addtounicode(data,filename,checklookups,forceligatures)
missing[du] = true
nofmissing = nofmissing + 1
end
+ else
+ -- maybe a message or so
end
end
else
local overload = overloads[du]
if overload then
glyph.unicode = overload.unicode
+ elseif not glyph.unicode then
+ missing[du] = true
+ nofmissing = nofmissing + 1
end
end
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua
index abb0ebd148c..7a8e9b02eaa 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-otl.lua
@@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading")
local fonts = fonts
local otf = fonts.handlers.otf
-otf.version = 3.104 -- beware: also sync font-mis.lua and in mtx-fonts
+otf.version = 3.106 -- beware: also sync font-mis.lua and in mtx-fonts
otf.cache = containers.define("fonts", "otl", otf.version, true)
otf.svgcache = containers.define("fonts", "svg", otf.version, true)
otf.sbixcache = containers.define("fonts", "sbix", otf.version, true)
@@ -155,7 +155,7 @@ function otf.load(filename,sub,instance)
if reload then
report_otf("loading %a, hash %a",filename,hash)
--
- starttiming(otfreaders)
+ starttiming(otfreaders,true)
data = otfreaders.loadfont(filename,sub or 1,instance) -- we can pass the number instead (if it comes from a name search)
if data then
-- todo: make this a plugin
@@ -242,6 +242,7 @@ function otf.load(filename,sub,instance)
checkmemory(used,threshold,tracememory)
end
else
+ stoptiming(otfreaders)
data = nil
report_otf("loading failed due to read error")
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua
index 88da136ac70..6f8b85446f7 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-ott.lua
@@ -390,6 +390,7 @@ local languages = allocate {
["kiu" ] = "kirmanjki",
["kjd" ] = "southern kiwai",
["kjp" ] = "eastern pwo karen",
+ ["kjz" ] = "bumthangkha",
["kkn" ] = "kokni",
["klm" ] = "kalmyk",
["kmb" ] = "kamba",
@@ -478,6 +479,7 @@ local languages = allocate {
["mdr" ] = "mandar",
["men" ] = "me'en",
["mer" ] = "meru",
+ ["mfa" ] = "pattani malay",
["mfe" ] = "morisyen",
["min" ] = "minangkabau",
["miz" ] = "mizo",
@@ -675,6 +677,7 @@ local languages = allocate {
["tpi" ] = "tok pisin",
["trk" ] = "turkish",
["tsg" ] = "tsonga",
+ ["tsj" ] = "tshangla",
["tua" ] = "turoyo aramaic",
["tul" ] = "tulu",
["tuv" ] = "tuvin",
@@ -705,6 +708,7 @@ local languages = allocate {
["xbd" ] = "lü",
["xhs" ] = "xhosa",
["xjb" ] = "minjangbal",
+ ["xkf" ] = "khengkha",
["xog" ] = "soga",
["xpe" ] = "kpelle (liberia)",
["yak" ] = "sakha",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oup.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oup.lua
index 562d7561d94..012b007d502 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oup.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-font-oup.lua
@@ -11,27 +11,34 @@ local P, R, S = lpeg.P, lpeg.R, lpeg.S
local lpegmatch = lpeg.match
local insert, remove, copy, unpack = table.insert, table.remove, table.copy, table.unpack
-local formatters = string.formatters
-local sortedkeys = table.sortedkeys
-local sortedhash = table.sortedhash
-local tohash = table.tohash
-local setmetatableindex = table.setmetatableindex
-
-local report = logs.reporter("otf reader")
-
-local trace_markwidth = false trackers.register("otf.markwidth",function(v) trace_markwidth = v end)
-
-local readers = fonts.handlers.otf.readers
-local privateoffset = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
-
-local f_private = formatters["P%05X"]
-local f_unicode = formatters["U%05X"]
-local f_index = formatters["I%05X"]
-local f_character_y = formatters["%C"]
-local f_character_n = formatters["[ %C ]"]
-
-local check_duplicates = true -- can become an option (pseudo feature) / aways needed anyway
-local check_soft_hyphen = true -- can become an option (pseudo feature) / needed for tagging
+local formatters = string.formatters
+local sortedkeys = table.sortedkeys
+local sortedhash = table.sortedhash
+local tohash = table.tohash
+local setmetatableindex = table.setmetatableindex
+
+local report_error = logs.reporter("otf reader","error")
+local report_markwidth = logs.reporter("otf reader","markwidth")
+local report_cleanup = logs.reporter("otf reader","cleanup")
+local report_optimizations = logs.reporter("otf reader","merges")
+local report_unicodes = logs.reporter("otf reader","unicodes")
+
+local trace_markwidth = false trackers.register("otf.markwidth", function(v) trace_markwidth = v end)
+local trace_cleanup = false trackers.register("otf.cleanups", function(v) trace_cleanups = v end)
+local trace_optimizations = false trackers.register("otf.optimizations", function(v) trace_optimizations = v end)
+local trace_unicodes = false trackers.register("otf.unicodes", function(v) trace_unicodes = v end)
+
+local readers = fonts.handlers.otf.readers
+local privateoffset = fonts.constructors and fonts.constructors.privateoffset or 0xF0000 -- 0x10FFFF
+
+local f_private = formatters["P%05X"]
+local f_unicode = formatters["U%05X"]
+local f_index = formatters["I%05X"]
+local f_character_y = formatters["%C"]
+local f_character_n = formatters["[ %C ]"]
+
+local check_duplicates = true -- can become an option (pseudo feature) / aways needed anyway
+local check_soft_hyphen = true -- can become an option (pseudo feature) / needed for tagging
directives.register("otf.checksofthyphen",function(v)
check_soft_hyphen = v
@@ -67,6 +74,8 @@ local function unifyresources(fontdata,indices)
return
end
--
+ local nofindices = #indices
+ --
local variants = fontdata.resources.variants
if variants then
for selector, unicodes in next, variants do
@@ -83,8 +92,8 @@ local function unifyresources(fontdata,indices)
local u = indices[k]
if u then
newmarks[u] = v
- else
- report("discarding mark %i",k)
+ elseif trace_optimizations then
+ report_optimizations("discarding mark %i",k)
end
end
return newmarks
@@ -123,7 +132,12 @@ local function unifyresources(fontdata,indices)
if not done[c] then
local t = { }
for k, v in next, c do
- t[indices[k]] = v
+ local ug = indices[k]
+ if ug then
+ t[ug] = v
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,"coverage",k,nofindices)
+ end
end
cover[i] = t
done[c] = d
@@ -131,11 +145,16 @@ local function unifyresources(fontdata,indices)
end
end
--
- local function recursed(c) -- ligs are not packed
+ local function recursed(c,kind) -- ligs are not packed
local t = { }
for g, d in next, c do
if type(d) == "table" then
- t[indices[g]] = recursed(d)
+ local ug = indices[g]
+ if ug then
+ t[ug] = recursed(d,kind)
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g,nofindices)
+ end
else
t[g] = indices[d] -- ligature
end
@@ -167,19 +186,31 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1, d1 in next, c do
local ug1 = indices[g1]
- local ud1 = indices[d1]
- t1[ug1] = ud1
- --
- local dg1 = duplicates[ug1]
- if dg1 then
- for u in next, dg1 do
- t1[u] = ud1
+ if ug1 then
+ local ud1 = indices[d1]
+ if ud1 then
+ t1[ug1] = ud1
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ for u in next, dg1 do
+ t1[u] = ud1
+ end
+ end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",3,kind,d1,nofindices)
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
end
end
else
for g1, d1 in next, c do
- t1[indices[g1]] = indices[d1]
+ local ug1 = indices[g1]
+ if ug1 then
+ t1[ug1] = indices[d1]
+ else
+ report_error("fuzzy case %i in unifying %s: %i",2,kind,g1)
+ end
end
end
done[c] = t1
@@ -193,15 +224,25 @@ local function unifyresources(fontdata,indices)
if not t1 then
t1 = { }
for g1, d1 in next, c do
- local t2 = done[d1]
- if not t2 then
- t2 = { }
- for g2, d2 in next, d1 do
- t2[indices[g2]] = d2
+ local ug1 = indices[g1]
+ if ug1 then
+ local t2 = done[d1]
+ if not t2 then
+ t2 = { }
+ for g2, d2 in next, d1 do
+ local ug2 = indices[g2]
+ if ug2 then
+ t2[ug2] = d2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g2,nofindices,nofindices)
+ end
+ end
+ done[d1] = t2
end
- done[d1] = t2
+ t1[ug1] = t2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
- t1[indices[g1]] = t2
end
done[c] = t1
end
@@ -210,7 +251,7 @@ local function unifyresources(fontdata,indices)
elseif kind == "gsub_ligature" then
local c = step.coverage
if c then
- step.coverage = recursed(c)
+ step.coverage = recursed(c,kind)
end
elseif kind == "gsub_alternate" or kind == "gsub_multiple" then
local c = step.coverage
@@ -221,22 +262,37 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1, d1 in next, c do
for i=1,#d1 do
- d1[i] = indices[d1[i]]
+ local d1i = d1[i]
+ local d1u = indices[d1i]
+ if d1u then
+ d1[i] = d1u
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,i,d1i,nofindices)
+ end
end
local ug1 = indices[g1]
- t1[ug1] = d1
- --
- local dg1 = duplicates[ug1]
- if dg1 then
- for u in next, dg1 do
- t1[u] = copy(d1)
+ if ug1 then
+ t1[ug1] = d1
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ for u in next, dg1 do
+ t1[u] = copy(d1)
+ end
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
end
else
for g1, d1 in next, c do
for i=1,#d1 do
- d1[i] = indices[d1[i]]
+ local d1i = d1[i]
+ local d1u = indices[d1i]
+ if d1u then
+ d1[i] = d1u
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,d1i,nofindices)
+ end
end
t1[indices[g1]] = d1
end
@@ -245,6 +301,41 @@ local function unifyresources(fontdata,indices)
end
step.coverage = t1
end
+ elseif kind == "gpos_single" then
+ local c = step.coverage
+ if c then
+ local t1 = done[c]
+ if not t1 then
+ t1 = { }
+ if duplicates then
+ for g1, d1 in next, c do
+ local ug1 = indices[g1]
+ if ug1 then
+ t1[ug1] = d1
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ for u in next, dg1 do
+ t1[u] = d1
+ end
+ end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
+ end
+ end
+ else
+ for g1, d1 in next, c do
+ local ug1 = indices[g1]
+ if ug1 then
+ t1[ug1] = d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
+ end
+ end
+ end
+ done[c] = t1
+ end
+ step.coverage = t1
+ end
elseif kind == "gpos_mark2base" or kind == "gpos_mark2mark" or kind == "gpos_mark2ligature" then
local c = step.coverage
if c then
@@ -252,7 +343,12 @@ local function unifyresources(fontdata,indices)
if not t1 then
t1 = { }
for g1, d1 in next, c do
- t1[indices[g1]] = d1
+ local ug1 = indices[g1]
+ if ug1 then
+ t1[ug1] = d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
+ end
end
done[c] = t1
end
@@ -267,7 +363,12 @@ local function unifyresources(fontdata,indices)
if not t2 then
t2 = { }
for g2, d2 in next, d1 do
- t2[indices[g2]] = d2
+ local ug2 = indices[g2]
+ if ug2 then
+ t2[ug2] = d2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g2,nofindices)
+ end
end
done[d1] = t2
end
@@ -276,7 +377,7 @@ local function unifyresources(fontdata,indices)
done[c] = c
end
end
- elseif kind == "gpos_single" then
+ elseif kind == "gpos_cursive" then
local c = step.coverage
if c then
local t1 = done[c]
@@ -285,47 +386,29 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1, d1 in next, c do
local ug1 = indices[g1]
- t1[ug1] = d1
- --
- local dg1 = duplicates[ug1]
- if dg1 then
- for u in next, dg1 do
- t1[u] = d1
+ if ug1 then
+ t1[ug1] = d1
+ --
+ local dg1 = duplicates[ug1]
+ if dg1 then
+ -- probably needs a bit more
+ for u in next, dg1 do
+ t1[u] = copy(d1)
+ end
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
end
end
else
for g1, d1 in next, c do
- t1[indices[g1]] = d1
- end
- end
- done[c] = t1
- end
- step.coverage = t1
- end
- elseif kind == "gpos_cursive" then
- local c = step.coverage
- if c then
- local t1 = done[c]
- if not t1 then
- t1 = { }
- if duplicates then
- for g1, d1 in next, c do
local ug1 = indices[g1]
- t1[ug1] = d1
- --
- local dg1 = duplicates[ug1]
- if dg1 then
- -- probably needs a bit more
- for u in next, dg1 do
- t1[u] = copy(d1)
- end
+ if ug1 then
+ t1[ug1] = d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
end
- else
- for g1, d1 in next, c do
- t1[indices[g1]] = d1
- end
end
done[c] = t1
end
@@ -376,9 +459,13 @@ local function copyduplicates(fontdata)
if not ds or ds.width == 0 then
if ds then
descriptions[0xAD] = nil
- report("patching soft hyphen")
+ if trace_unicodes then
+ report_unicodes("patching soft hyphen")
+ end
else
- report("adding soft hyphen")
+ if trace_unicodes then
+ report_unicodes("adding soft hyphen")
+ end
end
if not duplicates then
duplicates = { }
@@ -414,10 +501,12 @@ local function copyduplicates(fontdata)
end
n = n + 1
end
- if n <= m then
- report("duplicates: %i : % t",n,t)
- else
- report("duplicates: %i : % t ...",n,t)
+ if trace_unicodes then
+ if n <= m then
+ report_unicodes("%i : % t",n,t)
+ else
+ report_unicodes("%i : % t ...",n,t)
+ end
end
else
-- what a mess
@@ -457,7 +546,6 @@ local function checklookups(fontdata,missing,nofmissing)
end
end
end
-
local function collectthem(sequences)
if not sequences then
return
@@ -549,7 +637,9 @@ local function checklookups(fontdata,missing,nofmissing)
end
end
if nofmissing <= 0 then
- report("all done in %s loops",loops)
+ if trace_unicodes then
+ report_unicodes("all missings done in %s loops",loops)
+ end
return
elseif old == nofmissing then
break
@@ -601,7 +691,9 @@ local function checklookups(fontdata,missing,nofmissing)
recursed(ligatures[i])
end
if nofmissing <= 0 then
- report("all done in %s loops",loops)
+ if trace_unicodes then
+ report_unicodes("all missings done in %s loops",loops)
+ end
return
elseif old == nofmissing then
break
@@ -611,7 +703,7 @@ local function checklookups(fontdata,missing,nofmissing)
n = 0
end
- if nofmissing > 0 then
+ if trace_unicodes and nofmissing > 0 then
local done = { }
for i, r in next, missing do
if r then
@@ -623,7 +715,7 @@ local function checklookups(fontdata,missing,nofmissing)
end
end
if next(done) then
- report("not unicoded: % t",sortedkeys(done))
+ report_unicode("not unicoded: % t",sortedkeys(done))
end
end
end
@@ -648,6 +740,10 @@ local function unifymissing(fontdata)
resources.unicodes = nil
end
+local firstprivate = fonts.privateoffsets.textbase or 0xF0000
+local puafirst = 0xE000
+local pualast = 0xF8FF
+
local function unifyglyphs(fontdata,usenames)
local private = fontdata.private or privateoffset
local glyphs = fontdata.glyphs
@@ -671,45 +767,107 @@ local function unifyglyphs(fontdata,usenames)
indices[0] = zerocode
end
--
- for index=1,#glyphs do
- local glyph = glyphs[index]
- local unicode = glyph.unicode -- this is the primary one
- -- if not unicode then -- some fonts use the private space
- if not unicode or unicode >= private or (unicode >= 0xE000 and unicode <= 0xF8FF) or unicode == 0xFFFE or unicode == 0xFFFF then
- -- report("assigning private unicode %U to glyph indexed %05X (%s)",private,index,"unset")
- unicode = private
- -- glyph.unicode = -1
- if names then
+ if names then
+ -- seldom uses, we don't issue message ... this branch might even go away
+ for index=1,#glyphs do
+ local glyph = glyphs[index]
+ local unicode = glyph.unicode -- this is the primary one
+ if not unicode then
+ unicode = private
local name = glyph.name or f_private(unicode)
indices[index] = name
names[name] = unicode
- else
- indices[index] = unicode
- end
- private = private + 1
- elseif descriptions[unicode] then
- -- real weird
- report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
- unicode = private
- -- glyph.unicode = -1
- if names then
+ private = private + 1
+ elseif unicode >= firstprivate then
+ unicode = private
+ local name = glyph.name or f_private(unicode)
+ indices[index] = name
+ names[name] = unicode
+ private = private + 1
+ elseif unicode >= puafirst and unicode <= pualast then
local name = glyph.name or f_private(unicode)
indices[index] = name
names[name] = unicode
+ elseif descriptions[unicode] then
+ unicode = private
+ local name = glyph.name or f_private(unicode)
+ indices[index] = name
+ names[name] = unicode
+ private = private + 1
else
- indices[index] = unicode
- end
- private = private + 1
- else
- if names then
local name = glyph.name or f_unicode(unicode)
indices[index] = name
names[name] = unicode
+ end
+ descriptions[unicode] = glyph
+ end
+ elseif trace_unicodes then
+ for index=1,#glyphs do
+ local glyph = glyphs[index]
+ local unicode = glyph.unicode -- this is the primary one
+ if not unicode then
+ unicode = private
+ indices[index] = unicode
+ private = private + 1
+ elseif unicode >= firstprivate then
+ local name = glyph.name
+ if name then
+ report_unicodes("moving glyph %a indexed %05X from private %U to %U ",name,index,unicode,private)
+ else
+ report_unicodes("moving glyph indexed %05X from private %U to %U ",index,unicode,private)
+ end
+ unicode = private
+ indices[index] = unicode
+ private = private + 1
+ elseif unicode >= puafirst and unicode <= pualast then
+ local name = glyph.name
+ if name then
+ report_unicodes("keeping private unicode %U for glyph %a indexed %05X",unicode,name,index)
+ else
+ report_unicodes("keeping private unicode %U for glyph indexed %05X",unicode,index)
+ end
+ indices[index] = unicode
+ elseif descriptions[unicode] then
+ local name = glyph.name
+ if name then
+ report_unicodes("assigning duplicate unicode %U to %U for glyph %a indexed %05X ",unicode,private,name,index)
+ else
+ report_unicodes("assigning duplicate unicode %U to %U for glyph indexed %05X ",unicode,private,index)
+ end
+ unicode = private
+ indices[index] = unicode
+ private = private + 1
+ else
+ indices[index] = unicode
+ end
+ descriptions[unicode] = glyph
+ end
+ else
+ for index=1,#glyphs do
+ local glyph = glyphs[index]
+ local unicode = glyph.unicode -- this is the primary one
+ if not unicode then
+ unicode = private
+ indices[index] = unicode
+ private = private + 1
+ elseif unicode >= firstprivate then
+ local name = glyph.name
+ unicode = private
+ indices[index] = unicode
+ private = private + 1
+ elseif unicode >= puafirst and unicode <= pualast then
+ local name = glyph.name
+ indices[index] = unicode
+ elseif descriptions[unicode] then
+ local name = glyph.name
+ unicode = private
+ indices[index] = unicode
+ private = private + 1
else
indices[index] = unicode
end
+ descriptions[unicode] = glyph
end
- descriptions[unicode] = glyph
end
--
for index=1,#glyphs do
@@ -762,29 +920,42 @@ local p_bogusname = (
(P("uni") + P("UNI") + P("Uni") + P("U") + P("u")) * S("Xx")^0 * R("09","AF")^1
+ (P("identity") + P("Identity") + P("IDENTITY")) * R("09","AF")^1
+ (P("index") + P("Index") + P("INDEX")) * R("09")^1
-) * P(-1)
+) * (P(-1) + P("."))
+
local function stripredundant(fontdata)
local descriptions = fontdata.descriptions
if descriptions then
local n = 0
local c = 0
- for unicode, d in next, descriptions do
- local name = d.name
- if name and lpegmatch(p_bogusname,name) then
- d.name = nil
- n = n + 1
+ -- in context we always strip
+ if not context and fonts.privateoffsets.keepnames then
+ for unicode, d in next, descriptions do
+ if d.class == "base" then
+ d.class = nil
+ c = c + 1
+ end
end
- if d.class == "base" then
- d.class = nil
- c = c + 1
+ else
+ for unicode, d in next, descriptions do
+ local name = d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name = nil
+ n = n + 1
+ end
+ if d.class == "base" then
+ d.class = nil
+ c = c + 1
+ end
end
end
- if n > 0 then
- report("%s bogus names removed (verbose unicode)",n)
- end
- if c > 0 then
- report("%s base class tags removed (default is base)",c)
+ if trace_cleanup then
+ if n > 0 then
+ report_cleanup("%s bogus names removed (verbose unicode)",n)
+ end
+ if c > 0 then
+ report_cleanup("%s base class tags removed (default is base)",c)
+ end
end
end
end
@@ -2126,12 +2297,16 @@ local function mergesteps_1(lookup,strict)
local f = first.format
for i=2,nofsteps do
if steps[i].format ~= f then
- report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ end
return 0
end
end
end
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target = first.coverage
for i=2,nofsteps do
local c = steps[i].coverage
@@ -2160,12 +2335,16 @@ local function mergesteps_2(lookup) -- pairs
local f = first.format
for i=2,nofsteps do
if steps[i].format ~= f then
- report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ end
return 0
end
end
end
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target = first.coverage
for i=2,nofsteps do
local c = steps[i].coverage
@@ -2196,7 +2375,9 @@ end
local function mergesteps_3(lookup,strict) -- marks
local steps = lookup.steps
local nofsteps = lookup.nofsteps
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
-- check first
local coverage = { }
for i=1,nofsteps do
@@ -2205,7 +2386,9 @@ local function mergesteps_3(lookup,strict) -- marks
for k, v in next, c do
local tk = coverage[k] -- { class, { x, y } }
if tk then
- report("quitting merge due to multiple checks")
+ if trace_optimizations then
+ report_optimizations("quitting merge due to multiple checks")
+ end
return nofsteps
else
coverage[k] = v
@@ -2255,7 +2438,9 @@ local function mergesteps_4(lookup) -- ligatures
local steps = lookup.steps
local nofsteps = lookup.nofsteps
local first = steps[1]
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target = first.coverage
for i=2,nofsteps do
local c = steps[i].coverage
@@ -2283,7 +2468,9 @@ local function mergesteps_5(lookup) -- cursive
local steps = lookup.steps
local nofsteps = lookup.nofsteps
local first = steps[1]
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target = first.coverage
local hash = nil
for k, v in next, target do
@@ -2335,7 +2522,9 @@ local function checkkerns(lookup)
end
end
if kerns then
- report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ end
local c = { }
for g1, d1 in next, coverage do
if d1 and d1 ~= true then
@@ -2395,7 +2584,9 @@ local function checkpairs(lookup)
if step.format == "pair" then
local coverage = onlykerns(step)
if coverage then
- report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ end
for g1, d1 in next, coverage do
local d = { }
for g2, d2 in next, d1 do
@@ -2518,17 +2709,19 @@ function readers.compact(data)
end
end
end
- else
- report("no lookups in %a",what)
+ elseif trace_optimizations then
+ report_optimizations("no lookups in %a",what)
end
end
compact("sequences")
compact("sublookups")
- if merged > 0 then
- report("%i steps of %i removed due to merging",merged,allsteps)
- end
- if kerned > 0 then
- report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ if trace_optimizations then
+ if merged > 0 then
+ report_optimizations("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned > 0 then
+ report_optimizations("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ end
end
end
@@ -2628,7 +2821,7 @@ function readers.expand(data)
-- or bb?
d.width = defaultwidth
elseif trace_markwidth and wd ~= 0 and d.class == "mark" then
- report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+ report_markwidth("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
end
if bb then
local ht = bb[4]
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-fonts-mis.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-fonts-mis.lua
index d3cfd70a910..b472b86dda8 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-fonts-mis.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-fonts-mis.lua
@@ -29,3 +29,7 @@ table.setmetatableindex(marks,function(t,k)
return marks
end
end)
+
+function font.each()
+ return table.sortedhash(fonts.hashes.identifiers)
+end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua b/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua
index 8ee2fcb32de..ccf6d3a7cd0 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/fontloader-reference.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/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 : 09/24/18 14:11:29
+-- merge date : 10/02/18 23:17:57
do -- begin closure to overcome local limits and interference
@@ -9049,9 +9049,11 @@ if not modules then modules={} end modules ['font-ini']={
license="see context related readme files"
}
local allocate=utilities.storage.allocate
+local sortedhash=table.sortedhash
fonts=fonts or {}
local fonts=fonts
-fonts.hashes=fonts.hashes or { identifiers=allocate() }
+local identifiers=allocate()
+fonts.hashes=fonts.hashes or { identifiers=identifiers }
fonts.tables=fonts.tables or {}
fonts.helpers=fonts.helpers or {}
fonts.tracers=fonts.tracers or {}
@@ -9061,9 +9063,17 @@ fonts.readers={}
fonts.definers={ methods={} }
fonts.loggers={ register=function() end }
if context then
+
--removed
end
+fonts.privateoffsets={
+ textbase=0xF0000,
+ textextrabase=0xFD000,
+ mathextrabase=0xFE000,
+ mathbase=0xFF000,
+ keepnames=false,
+}
end -- closure
@@ -9096,6 +9106,9 @@ table.setmetatableindex(marks,function(t,k)
return marks
end
end)
+function font.each()
+ return table.sortedhash(fonts.hashes.identifiers)
+end
end -- closure
@@ -9131,7 +9144,7 @@ constructors.autocleanup=true
constructors.namemode="fullpath"
constructors.version=1.01
constructors.cache=containers.define("fonts","constructors",constructors.version,false)
-constructors.privateoffset=0xF0000
+constructors.privateoffset=fonts.privateoffsets.textbase or 0xF0000
constructors.cacheintex=true
local designsizes=allocate()
constructors.designsizes=designsizes
@@ -10962,12 +10975,16 @@ function mappings.addtounicode(data,filename,checklookups,forceligatures)
missing[du]=true
nofmissing=nofmissing+1
end
+ else
end
end
else
local overload=overloads[du]
if overload then
glyph.unicode=overload.unicode
+ elseif not glyph.unicode then
+ missing[du]=true
+ nofmissing=nofmissing+1
end
end
end
@@ -13516,6 +13533,7 @@ local languages=allocate {
["kiu" ]="kirmanjki",
["kjd" ]="southern kiwai",
["kjp" ]="eastern pwo karen",
+ ["kjz" ]="bumthangkha",
["kkn" ]="kokni",
["klm" ]="kalmyk",
["kmb" ]="kamba",
@@ -13604,6 +13622,7 @@ local languages=allocate {
["mdr" ]="mandar",
["men" ]="me'en",
["mer" ]="meru",
+ ["mfa" ]="pattani malay",
["mfe" ]="morisyen",
["min" ]="minangkabau",
["miz" ]="mizo",
@@ -13801,6 +13820,7 @@ local languages=allocate {
["tpi" ]="tok pisin",
["trk" ]="turkish",
["tsg" ]="tsonga",
+ ["tsj" ]="tshangla",
["tua" ]="turoyo aramaic",
["tul" ]="tulu",
["tuv" ]="tuvin",
@@ -13831,6 +13851,7 @@ local languages=allocate {
["xbd" ]="lü",
["xhs" ]="xhosa",
["xjb" ]="minjangbal",
+ ["xkf" ]="khengkha",
["xog" ]="soga",
["xpe" ]="kpelle (liberia)",
["yak" ]="sakha",
@@ -17145,7 +17166,7 @@ if not modules then modules={} end modules ['font-dsp']={
copyright="PRAGMA ADE / ConTeXt Development Team",
license="see context related readme files"
}
-local next,type=next,type
+local next,type,tonumber=next,type,tonumber
local band=bit32.band
local extract=bit32.extract
local bor=bit32.bor
@@ -17930,8 +17951,9 @@ local function unchainedcontext(f,fontdata,lookupid,lookupoffset,offset,glyphs,n
rules=rules,
}
elseif subtype==3 then
- local current=readarray(f)
+ local nofglyphs=readushort(f)
local noflookups=readushort(f)
+ local current=readcardinaltable(f,nofglyphs,ushort)
local lookups=readlookuparray(f,noflookups,#current)
current=readcoveragearray(f,tableoffset,current,true)
return {
@@ -18125,7 +18147,7 @@ function gsubhandlers.single(f,fontdata,lookupid,lookupoffset,offset,glyphs,nofg
local delta=readshort(f)
local coverage=readcoverage(f,tableoffset+coverage)
for index in next,coverage do
- local newindex=index+delta
+ local newindex=(index+delta)%65536
if index>nofglyphs or newindex>nofglyphs then
report("invalid index in %s format %i: %i -> %i (max %i)","single",subtype,index,newindex,nofglyphs)
coverage[index]=nil
@@ -19011,7 +19033,6 @@ do
if not rlookups then
report_issue(i,what,sequence,"no")
elseif not next(rlookups) then
- report_issue(i,what,sequence,"empty")
rule.lookups=nil
else
local length=#rlookups
@@ -19200,7 +19221,7 @@ do
elseif specification.globalkerns then
name="globalkern"
else
- report("ignoring global kern table using gpos kern feature")
+ report("ignoring global kern table, using gpos kern feature")
return
end
setposition(f,datatable.offset)
@@ -20167,8 +20188,15 @@ local sortedkeys=table.sortedkeys
local sortedhash=table.sortedhash
local tohash=table.tohash
local setmetatableindex=table.setmetatableindex
-local report=logs.reporter("otf reader")
+local report_error=logs.reporter("otf reader","error")
+local report_markwidth=logs.reporter("otf reader","markwidth")
+local report_cleanup=logs.reporter("otf reader","cleanup")
+local report_optimizations=logs.reporter("otf reader","merges")
+local report_unicodes=logs.reporter("otf reader","unicodes")
local trace_markwidth=false trackers.register("otf.markwidth",function(v) trace_markwidth=v end)
+local trace_cleanup=false trackers.register("otf.cleanups",function(v) trace_cleanups=v end)
+local trace_optimizations=false trackers.register("otf.optimizations",function(v) trace_optimizations=v end)
+local trace_unicodes=false trackers.register("otf.unicodes",function(v) trace_unicodes=v end)
local readers=fonts.handlers.otf.readers
local privateoffset=fonts.constructors and fonts.constructors.privateoffset or 0xF0000
local f_private=formatters["P%05X"]
@@ -20209,6 +20237,7 @@ local function unifyresources(fontdata,indices)
if not descriptions or not resources then
return
end
+ local nofindices=#indices
local variants=fontdata.resources.variants
if variants then
for selector,unicodes in next,variants do
@@ -20224,8 +20253,8 @@ local function unifyresources(fontdata,indices)
local u=indices[k]
if u then
newmarks[u]=v
- else
- report("discarding mark %i",k)
+ elseif trace_optimizations then
+ report_optimizations("discarding mark %i",k)
end
end
return newmarks
@@ -20258,18 +20287,28 @@ local function unifyresources(fontdata,indices)
if not done[c] then
local t={}
for k,v in next,c do
- t[indices[k]]=v
+ local ug=indices[k]
+ if ug then
+ t[ug]=v
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,"coverage",k,nofindices)
+ end
end
cover[i]=t
done[c]=d
end
end
end
- local function recursed(c)
+ local function recursed(c,kind)
local t={}
for g,d in next,c do
if type(d)=="table" then
- t[indices[g]]=recursed(d)
+ local ug=indices[g]
+ if ug then
+ t[ug]=recursed(d,kind)
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g,nofindices)
+ end
else
t[g]=indices[d]
end
@@ -20297,18 +20336,31 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1,d1 in next,c do
local ug1=indices[g1]
- local ud1=indices[d1]
- t1[ug1]=ud1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=ud1
+ if ug1 then
+ local ud1=indices[d1]
+ if ud1 then
+ t1[ug1]=ud1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=ud1
+ end
+ end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",3,kind,d1,nofindices)
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
end
end
else
for g1,d1 in next,c do
- t1[indices[g1]]=indices[d1]
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=indices[d1]
+ else
+ report_error("fuzzy case %i in unifying %s: %i",2,kind,g1)
+ end
end
end
done[c]=t1
@@ -20322,15 +20374,25 @@ local function unifyresources(fontdata,indices)
if not t1 then
t1={}
for g1,d1 in next,c do
- local t2=done[d1]
- if not t2 then
- t2={}
- for g2,d2 in next,d1 do
- t2[indices[g2]]=d2
+ local ug1=indices[g1]
+ if ug1 then
+ local t2=done[d1]
+ if not t2 then
+ t2={}
+ for g2,d2 in next,d1 do
+ local ug2=indices[g2]
+ if ug2 then
+ t2[ug2]=d2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g2,nofindices,nofindices)
+ end
+ end
+ done[d1]=t2
end
- done[d1]=t2
+ t1[ug1]=t2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
- t1[indices[g1]]=t2
end
done[c]=t1
end
@@ -20339,7 +20401,7 @@ local function unifyresources(fontdata,indices)
elseif kind=="gsub_ligature" then
local c=step.coverage
if c then
- step.coverage=recursed(c)
+ step.coverage=recursed(c,kind)
end
elseif kind=="gsub_alternate" or kind=="gsub_multiple" then
local c=step.coverage
@@ -20350,21 +20412,37 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1,d1 in next,c do
for i=1,#d1 do
- d1[i]=indices[d1[i]]
+ local d1i=d1[i]
+ local d1u=indices[d1i]
+ if d1u then
+ d1[i]=d1u
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,i,d1i,nofindices)
+ end
end
local ug1=indices[g1]
- t1[ug1]=d1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=copy(d1)
+ if ug1 then
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
end
else
for g1,d1 in next,c do
for i=1,#d1 do
- d1[i]=indices[d1[i]]
+ local d1i=d1[i]
+ local d1u=indices[d1i]
+ if d1u then
+ d1[i]=d1u
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,d1i,nofindices)
+ end
end
t1[indices[g1]]=d1
end
@@ -20373,6 +20451,41 @@ local function unifyresources(fontdata,indices)
end
step.coverage=t1
end
+ elseif kind=="gpos_single" then
+ local c=step.coverage
+ if c then
+ local t1=done[c]
+ if not t1 then
+ t1={}
+ if duplicates then
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=d1
+ end
+ end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
+ end
+ end
+ else
+ for g1,d1 in next,c do
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
+ end
+ end
+ end
+ done[c]=t1
+ end
+ step.coverage=t1
+ end
elseif kind=="gpos_mark2base" or kind=="gpos_mark2mark" or kind=="gpos_mark2ligature" then
local c=step.coverage
if c then
@@ -20380,7 +20493,12 @@ local function unifyresources(fontdata,indices)
if not t1 then
t1={}
for g1,d1 in next,c do
- t1[indices[g1]]=d1
+ local ug1=indices[g1]
+ if ug1 then
+ t1[ug1]=d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
+ end
end
done[c]=t1
end
@@ -20395,7 +20513,12 @@ local function unifyresources(fontdata,indices)
if not t2 then
t2={}
for g2,d2 in next,d1 do
- t2[indices[g2]]=d2
+ local ug2=indices[g2]
+ if ug2 then
+ t2[ug2]=d2
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g2,nofindices)
+ end
end
done[d1]=t2
end
@@ -20404,7 +20527,7 @@ local function unifyresources(fontdata,indices)
done[c]=c
end
end
- elseif kind=="gpos_single" then
+ elseif kind=="gpos_cursive" then
local c=step.coverage
if c then
local t1=done[c]
@@ -20413,44 +20536,27 @@ local function unifyresources(fontdata,indices)
if duplicates then
for g1,d1 in next,c do
local ug1=indices[g1]
- t1[ug1]=d1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=d1
+ if ug1 then
+ t1[ug1]=d1
+ local dg1=duplicates[ug1]
+ if dg1 then
+ for u in next,dg1 do
+ t1[u]=copy(d1)
+ end
end
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",1,kind,g1,nofindices)
end
end
else
for g1,d1 in next,c do
- t1[indices[g1]]=d1
- end
- end
- done[c]=t1
- end
- step.coverage=t1
- end
- elseif kind=="gpos_cursive" then
- local c=step.coverage
- if c then
- local t1=done[c]
- if not t1 then
- t1={}
- if duplicates then
- for g1,d1 in next,c do
local ug1=indices[g1]
- t1[ug1]=d1
- local dg1=duplicates[ug1]
- if dg1 then
- for u in next,dg1 do
- t1[u]=copy(d1)
- end
+ if ug1 then
+ t1[ug1]=d1
+ else
+ report_error("case %i, bad index in unifying %s: %s of %s",2,kind,g1,nofindices)
end
end
- else
- for g1,d1 in next,c do
- t1[indices[g1]]=d1
- end
end
done[c]=t1
end
@@ -20494,9 +20600,13 @@ local function copyduplicates(fontdata)
if not ds or ds.width==0 then
if ds then
descriptions[0xAD]=nil
- report("patching soft hyphen")
+ if trace_unicodes then
+ report_unicodes("patching soft hyphen")
+ end
else
- report("adding soft hyphen")
+ if trace_unicodes then
+ report_unicodes("adding soft hyphen")
+ end
end
if not duplicates then
duplicates={}
@@ -20532,10 +20642,12 @@ local function copyduplicates(fontdata)
end
n=n+1
end
- if n<=m then
- report("duplicates: %i : % t",n,t)
- else
- report("duplicates: %i : % t ...",n,t)
+ if trace_unicodes then
+ if n<=m then
+ report_unicodes("%i : % t",n,t)
+ else
+ report_unicodes("%i : % t ...",n,t)
+ end
end
else
end
@@ -20657,7 +20769,9 @@ local function checklookups(fontdata,missing,nofmissing)
end
end
if nofmissing<=0 then
- report("all done in %s loops",loops)
+ if trace_unicodes then
+ report_unicodes("all missings done in %s loops",loops)
+ end
return
elseif old==nofmissing then
break
@@ -20706,7 +20820,9 @@ local function checklookups(fontdata,missing,nofmissing)
recursed(ligatures[i])
end
if nofmissing<=0 then
- report("all done in %s loops",loops)
+ if trace_unicodes then
+ report_unicodes("all missings done in %s loops",loops)
+ end
return
elseif old==nofmissing then
break
@@ -20715,7 +20831,7 @@ local function checklookups(fontdata,missing,nofmissing)
t=nil
n=0
end
- if nofmissing>0 then
+ if trace_unicodes and nofmissing>0 then
local done={}
for i,r in next,missing do
if r then
@@ -20727,7 +20843,7 @@ local function checklookups(fontdata,missing,nofmissing)
end
end
if next(done) then
- report("not unicoded: % t",sortedkeys(done))
+ report_unicode("not unicoded: % t",sortedkeys(done))
end
end
end
@@ -20750,6 +20866,9 @@ local function unifymissing(fontdata)
fonts.mappings.addtounicode(fontdata,fontdata.filename,checklookups)
resources.unicodes=nil
end
+local firstprivate=fonts.privateoffsets.textbase or 0xF0000
+local puafirst=0xE000
+local pualast=0xF8FF
local function unifyglyphs(fontdata,usenames)
local private=fontdata.private or privateoffset
local glyphs=fontdata.glyphs
@@ -20772,40 +20891,106 @@ local function unifyglyphs(fontdata,usenames)
else
indices[0]=zerocode
end
- for index=1,#glyphs do
- local glyph=glyphs[index]
- local unicode=glyph.unicode
- if not unicode or unicode>=private or (unicode>=0xE000 and unicode<=0xF8FF) or unicode==0xFFFE or unicode==0xFFFF then
- unicode=private
- if names then
+ if names then
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
local name=glyph.name or f_private(unicode)
indices[index]=name
names[name]=unicode
- else
- indices[index]=unicode
- end
- private=private+1
- elseif descriptions[unicode] then
- report("assigning private unicode %U to glyph indexed %05X (%C)",private,index,unicode)
- unicode=private
- if names then
+ private=private+1
+ elseif unicode>=firstprivate then
+ unicode=private
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ private=private+1
+ elseif unicode>=puafirst and unicode<=pualast then
local name=glyph.name or f_private(unicode)
indices[index]=name
names[name]=unicode
+ elseif descriptions[unicode] then
+ unicode=private
+ local name=glyph.name or f_private(unicode)
+ indices[index]=name
+ names[name]=unicode
+ private=private+1
else
- indices[index]=unicode
- end
- private=private+1
- else
- if names then
local name=glyph.name or f_unicode(unicode)
indices[index]=name
names[name]=unicode
+ end
+ descriptions[unicode]=glyph
+ end
+ elseif trace_unicodes then
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=firstprivate then
+ local name=glyph.name
+ if name then
+ report_unicodes("moving glyph %a indexed %05X from private %U to %U ",name,index,unicode,private)
+ else
+ report_unicodes("moving glyph indexed %05X from private %U to %U ",index,unicode,private)
+ end
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=puafirst and unicode<=pualast then
+ local name=glyph.name
+ if name then
+ report_unicodes("keeping private unicode %U for glyph %a indexed %05X",unicode,name,index)
+ else
+ report_unicodes("keeping private unicode %U for glyph indexed %05X",unicode,index)
+ end
+ indices[index]=unicode
+ elseif descriptions[unicode] then
+ local name=glyph.name
+ if name then
+ report_unicodes("assigning duplicate unicode %U to %U for glyph %a indexed %05X ",unicode,private,name,index)
+ else
+ report_unicodes("assigning duplicate unicode %U to %U for glyph indexed %05X ",unicode,private,index)
+ end
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ else
+ indices[index]=unicode
+ end
+ descriptions[unicode]=glyph
+ end
+ else
+ for index=1,#glyphs do
+ local glyph=glyphs[index]
+ local unicode=glyph.unicode
+ if not unicode then
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=firstprivate then
+ local name=glyph.name
+ unicode=private
+ indices[index]=unicode
+ private=private+1
+ elseif unicode>=puafirst and unicode<=pualast then
+ local name=glyph.name
+ indices[index]=unicode
+ elseif descriptions[unicode] then
+ local name=glyph.name
+ unicode=private
+ indices[index]=unicode
+ private=private+1
else
indices[index]=unicode
end
+ descriptions[unicode]=glyph
end
- descriptions[unicode]=glyph
end
for index=1,#glyphs do
local math=glyphs[index].math
@@ -20849,28 +21034,39 @@ local function unifyglyphs(fontdata,usenames)
end
local p_bogusname=(
(P("uni")+P("UNI")+P("Uni")+P("U")+P("u"))*S("Xx")^0*R("09","AF")^1+(P("identity")+P("Identity")+P("IDENTITY"))*R("09","AF")^1+(P("index")+P("Index")+P("INDEX"))*R("09")^1
-)*P(-1)
+)*(P(-1)+P("."))
local function stripredundant(fontdata)
local descriptions=fontdata.descriptions
if descriptions then
local n=0
local c=0
- for unicode,d in next,descriptions do
- local name=d.name
- if name and lpegmatch(p_bogusname,name) then
- d.name=nil
- n=n+1
+ if not context and fonts.privateoffsets.keepnames then
+ for unicode,d in next,descriptions do
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
end
- if d.class=="base" then
- d.class=nil
- c=c+1
+ else
+ for unicode,d in next,descriptions do
+ local name=d.name
+ if name and lpegmatch(p_bogusname,name) then
+ d.name=nil
+ n=n+1
+ end
+ if d.class=="base" then
+ d.class=nil
+ c=c+1
+ end
end
end
- if n>0 then
- report("%s bogus names removed (verbose unicode)",n)
- end
- if c>0 then
- report("%s base class tags removed (default is base)",c)
+ if trace_cleanup then
+ if n>0 then
+ report_cleanup("%s bogus names removed (verbose unicode)",n)
+ end
+ if c>0 then
+ report_cleanup("%s base class tags removed (default is base)",c)
+ end
end
end
end
@@ -21959,12 +22155,16 @@ local function mergesteps_1(lookup,strict)
local f=first.format
for i=2,nofsteps do
if steps[i].format~=f then
- report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ end
return 0
end
end
end
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
for i=2,nofsteps do
local c=steps[i].coverage
@@ -21989,12 +22189,16 @@ local function mergesteps_2(lookup)
local f=first.format
for i=2,nofsteps do
if steps[i].format~=f then
- report("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("not merging %a steps of %a lookup %a, different formats",nofsteps,lookup.type,lookup.name)
+ end
return 0
end
end
end
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
for i=2,nofsteps do
local c=steps[i].coverage
@@ -22021,7 +22225,9 @@ end
local function mergesteps_3(lookup,strict)
local steps=lookup.steps
local nofsteps=lookup.nofsteps
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local coverage={}
for i=1,nofsteps do
local c=steps[i].coverage
@@ -22029,7 +22235,9 @@ local function mergesteps_3(lookup,strict)
for k,v in next,c do
local tk=coverage[k]
if tk then
- report("quitting merge due to multiple checks")
+ if trace_optimizations then
+ report_optimizations("quitting merge due to multiple checks")
+ end
return nofsteps
else
coverage[k]=v
@@ -22076,7 +22284,9 @@ local function mergesteps_4(lookup)
local steps=lookup.steps
local nofsteps=lookup.nofsteps
local first=steps[1]
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
for i=2,nofsteps do
local c=steps[i].coverage
@@ -22099,7 +22309,9 @@ local function mergesteps_5(lookup)
local steps=lookup.steps
local nofsteps=lookup.nofsteps
local first=steps[1]
- report("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("merging %a steps of %a lookup %a",nofsteps,lookup.type,lookup.name)
+ end
local target=first.coverage
local hash=nil
for k,v in next,target do
@@ -22148,7 +22360,9 @@ local function checkkerns(lookup)
end
end
if kerns then
- report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ end
local c={}
for g1,d1 in next,coverage do
if d1 and d1~=true then
@@ -22189,7 +22403,9 @@ local function checkpairs(lookup)
if step.format=="pair" then
local coverage=onlykerns(step)
if coverage then
- report("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ if trace_optimizations then
+ report_optimizations("turning pairs of step %a of %a lookup %a into kerns",i,lookup.type,lookup.name)
+ end
for g1,d1 in next,coverage do
local d={}
for g2,d2 in next,d1 do
@@ -22305,17 +22521,19 @@ function readers.compact(data)
end
end
end
- else
- report("no lookups in %a",what)
+ elseif trace_optimizations then
+ report_optimizations("no lookups in %a",what)
end
end
compact("sequences")
compact("sublookups")
- if merged>0 then
- report("%i steps of %i removed due to merging",merged,allsteps)
- end
- if kerned>0 then
- report("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ if trace_optimizations then
+ if merged>0 then
+ report_optimizations("%i steps of %i removed due to merging",merged,allsteps)
+ end
+ if kerned>0 then
+ report_optimizations("%i steps of %i steps turned from pairs into kerns",kerned,allsteps)
+ end
end
end
local function mergesteps(t,k)
@@ -22406,7 +22624,7 @@ function readers.expand(data)
if not wd then
d.width=defaultwidth
elseif trace_markwidth and wd~=0 and d.class=="mark" then
- report("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
+ report_markwidth("mark %a with width %b found in %a",d.name or "<noname>",wd,basename)
end
if bb then
local ht=bb[4]
@@ -22586,7 +22804,7 @@ local trace_defining=false registertracker("fonts.defining",function(v) trace_de
local report_otf=logs.reporter("fonts","otf loading")
local fonts=fonts
local otf=fonts.handlers.otf
-otf.version=3.104
+otf.version=3.106
otf.cache=containers.define("fonts","otl",otf.version,true)
otf.svgcache=containers.define("fonts","svg",otf.version,true)
otf.sbixcache=containers.define("fonts","sbix",otf.version,true)
@@ -22662,7 +22880,7 @@ function otf.load(filename,sub,instance)
end
if reload then
report_otf("loading %a, hash %a",filename,hash)
- starttiming(otfreaders)
+ starttiming(otfreaders,true)
data=otfreaders.loadfont(filename,sub or 1,instance)
if data then
local used=checkmemory()
@@ -22745,6 +22963,7 @@ function otf.load(filename,sub,instance)
checkmemory(used,threshold,tracememory)
end
else
+ stoptiming(otfreaders)
data=nil
report_otf("loading failed due to read error")
end
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua
index 03027e760e3..180f4bb6731 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-auxiliary.lua
@@ -2,7 +2,7 @@
-----------------------------------------------------------------------
-- FILE: luaotfload-auxiliary.lua
-- DESCRIPTION: part of luaotfload
--- REQUIREMENTS: luaotfload 2.9
+-- REQUIREMENTS: luaotfload 2.91
-- AUTHOR: Khaled Hosny, Élie Roux, Philipp Gesang
-----------------------------------------------------------------------
--
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua
index 13b2e05157b..de541db051f 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-colors.lua
@@ -1,5 +1,5 @@
if not modules then modules = { } end modules ['luaotfload-colors'] = {
- version = "2.9",
+ version = "2.91",
comment = "companion to luaotfload-main.lua (font color)",
author = "Khaled Hosny, Elie Roux, Philipp Gesang, Dohyun Kim, David Carlisle",
copyright = "Luaotfload Development Team",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua
index d7604241c4d..45397189d0f 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-configuration.lua
@@ -2,14 +2,14 @@
-------------------------------------------------------------------------------
-- FILE: luaotfload-configuration.lua
-- DESCRIPTION: config file reader
--- REQUIREMENTS: Luaotfload 2.8 or above
+-- REQUIREMENTS: Luaotfload 2.9 or above
-- AUTHOR: Philipp Gesang, <phg@phi-gamma.net>
-- AUTHOR: Dohyun Kim <nomosnomos@gmail.com>
-------------------------------------------------------------------------------
--
if not modules then modules = { } end modules ["luaotfload-configuration"] = {
- version = "2.9",
+ version = "2.91",
comment = "part of Luaotfload",
author = "Philipp Gesang, Dohyun Kim",
copyright = "Luaotfload Development Team",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua
index a195eaae724..b825c0b3e64 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-database.lua
@@ -1,5 +1,5 @@
if not modules then modules = { } end modules ['luaotfload-database'] = {
- version = "2.9",
+ version = "2.91",
comment = "companion to luaotfload-main.lua",
author = "Khaled Hosny, Elie Roux, Philipp Gesang, Marcel Krüger",
copyright = "Luaotfload Development Team",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua
index c69cab3a720..b66c1160b65 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-features.lua
@@ -1,5 +1,5 @@
if not modules then modules = { } end modules ["features"] = {
- version = "2.9",
+ version = "2.91",
comment = "companion to luaotfload-main.lua",
author = "Hans Hagen, Khaled Hosny, Elie Roux, Philipp Gesang, Marcel Krüger",
copyright = "PRAGMA ADE / ConTeXt Development Team",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua
index 3446b79aff9..29ce2de3111 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-filelist.lua
@@ -1,9 +1,9 @@
-------------------------------------------------------------------------------
-- FILE: luaotfload-filelist.lua
-- DESCRIPTION: a table with the files of luaotfload
--- VERSION: 2.9
+-- VERSION: 2.91
-- AUTHOR: Ulrike Fischer, <fischer@troubleshooting-tex.de>
--- DATE: 2018-09-23
+-- DATE: 2018-10-03
-------------------------------------------------------------------------------
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua
index b50b5c2291d..50fbee19a61 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-init.lua
@@ -3,7 +3,7 @@
-- FILE: luaotfload-init.lua
-- DESCRIPTION: Luaotfload font loader initialization
-- REQUIREMENTS: luatex v.0.80 or later; packages lualibs
--- VERSION: 2.9 2018-09-24
+-- VERSION: 2.91 2018-10-03
-- AUTHOR: Philipp Gesang (Phg), <phg@phi-gamma.net>, Marcel Krüger
-----------------------------------------------------------------------
--
@@ -601,18 +601,18 @@ local init_main = function ()
fontloader, path)
local _void = require (path)
- elseif fontloader then
+ elseif kpselookup (("fontloader-%s.lua"):format(fontloader)) then
logreport ("log", 0, "init",
"Using predefined fontloader “%s”.",
fontloader)
load_fontloader_module (fontloader)
else
- logreport ("log", 0, "init",
+ logreport ("both", 0, "init",
"No match for requested fontloader “%s”.",
fontloader)
fontloader = luaotfload.fontloader_package
- logreport ("log", 0, "init",
+ logreport ("both", 0, "init",
"Defaulting to predefined fontloader “%s”.",
fontloader)
load_fontloader_module (fontloader)
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua
index 104047ba8ba..9e9350905ac 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-letterspace.lua
@@ -1,5 +1,5 @@
if not modules then modules = { } end modules ['letterspace'] = {
- version = "2.9",
+ version = "2.91",
comment = "companion to luaotfload-main.lua",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL; adapted by Philipp Gesang, Ulrike Fischer",
copyright = "PRAGMA ADE / ConTeXt Development Team",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua
index 8ba3e1c474a..07c7c1235b7 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-log.lua
@@ -1,5 +1,5 @@
if not modules then modules = { } end modules ["luaotfload-log"] = {
- version = "2.9",
+ version = "2.91",
comment = "companion to Luaotfload",
author = "Khaled Hosny, Elie Roux, Philipp Gesang",
copyright = "Luaotfload Development Team",
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua
index 1ac0752c621..727bfb07689 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-main.lua
@@ -11,7 +11,7 @@ config = config or { }
luaotfload = luaotfload or { }
local luaotfload = luaotfload
luaotfload.log = luaotfload.log or { }
-luaotfload.version = "2.9"
+luaotfload.version = "2.91"
luaotfload.loaders = { }
luaotfload.min_luatex_version = { 0, 95, 0 }
luaotfload.fontloader_package = "reference" --- default: from current Context
@@ -52,8 +52,8 @@ local authors = "\z
luaotfload.module = {
name = "luaotfload-main",
- version = 2.90001,
- date = "2018/09/24",
+ version = 2.91001,
+ date = "2018/10/03",
description = "OpenType layout system.",
author = authors,
copyright = authors,
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua
index cb3cdd57811..443c60fe2f1 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload-status.lua
@@ -1,8 +1,8 @@
return {
["hashes"]={
- { "fontloader-2018-09-24.lua", "9b44571b829ca5276deffe1d1a9c8673" },
+ { "fontloader-2018-10-02.lua", "0f32b26fe46cb16473473c3d67084433" },
{ "fontloader-util-fil.lua", "258d23db3b135c06ceb87faecbe785b4" },
- { "fontloader-util-str.lua", "98fd6915ad05564aed39dff72102b6db" },
+ { "fontloader-util-str.lua", "48e82196229dca83ad7be2d8b42fc203" },
{ "fontloader-l-unicode.lua", "c8dd70435ced1bd05e257557a05b718b" },
{ "fontloader-l-math.lua", "082add08e0bb79f39191ae9534a79849" },
{ "fontloader-l-boolean.lua", "abe28515dd33e8f6c416c09bca351cf8" },
@@ -18,7 +18,7 @@ return {
{ "fontloader-fonts-ext.lua", "32013cbc5d5d336be8b1d1e5879d86c4" },
{ "fontloader-fonts-def.lua", "f435e0875f203f343157baeff876ec9c" },
{ "fontloader-fonts-enc.lua", "5ff4ca50493d7c4ecea0e15c203099f0" },
- { "fontloader-fonts-mis.lua", "f8d0788d2554d71720dc543cf4ffafe1" },
+ { "fontloader-fonts-mis.lua", "17e967c9ec4d001deefd43ddf25e98f7" },
{ "fontloader-basics-nod.lua", "78f56219685f3145b9393c2b688aad94" },
{ "fontloader-font-imp-effects.lua", "3327181ef3db6f44dd234ad66ccc3f38" },
{ "fontloader-font-imp-italics.lua", "c2e6d6c4096a2c30d68fbffd3d7d58a7" },
@@ -29,7 +29,7 @@ return {
{ "fontloader-font-tfm.lua", "c9797c1b4ccb8fdb7f041e19207109a2" },
{ "fontloader-font-afk.lua", "9da14e0fb22129c053acc599d1312544" },
{ "fontloader-font-one.lua", "52588c7c3aab714d95d03e91ee86e1ad" },
- { "fontloader-font-onr.lua", "66a0c352b5c36b9974aab1b5026152f2" },
+ { "fontloader-font-onr.lua", "cf93eb4ab34461d2b3797792dbdb035f" },
{ "fontloader-font-otc.lua", "9dcd93d83bc61c90f0fb6161a1911a55" },
{ "fontloader-font-ocl.lua", "49cf3230228aa7f2d19cd491f55f5395" },
{ "fontloader-font-osd.lua", "d2b542031aa693bb423b6d3272820c9a" },
@@ -37,50 +37,50 @@ return {
{ "fontloader-font-ota.lua", "d883cf661bb8c27bfa9b7cc66420c1ed" },
{ "fontloader-font-otj.lua", "578448ae37a167319dbccd5af04738da" },
{ "fontloader-font-oto.lua", "d78a6165b7ff6c21f4c3c4c3c0553648" },
- { "fontloader-font-otl.lua", "fcc55ae6cff5fd55b5054f923c21cafa" },
- { "fontloader-font-oup.lua", "020f2630f5a18d39e209f1cbf7a334ea" },
- { "fontloader-font-dsp.lua", "9cade9beb226c61b4323729aca1f4a80" },
+ { "fontloader-font-otl.lua", "40cdceeb682bac55b4a69465b76bcc33" },
+ { "fontloader-font-oup.lua", "ab288020c44f14da4d7eff185a37c8a4" },
+ { "fontloader-font-dsp.lua", "cb8138a91cfbe562467821c5e0c2568e" },
{ "fontloader-font-ttf.lua", "ff587471f4297aa8ba0fa022609adc6e" },
- { "fontloader-font-cff.lua", "eefa156275ba0ac91aa651a944d35978" },
- { "fontloader-font-ott.lua", "a4dd9bc516bdb7669ee61d5207f899c6" },
+ { "fontloader-font-cff.lua", "428a467664b5f49b812b2d66f579e3cf" },
+ { "fontloader-font-ott.lua", "b20ddcf6360a2e35e79b7bdad0289a19" },
{ "fontloader-font-oti.lua", "309a75f9c14b77d87e94eba827dc4e71" },
{ "fontloader-font-otr.lua", "4a1dae571a43d7cb8afce7e906df89c6" },
{ "fontloader-font-vfc.lua", "237aff1862009b7850653c2098473bd4" },
- { "fontloader-font-map.lua", "2c03dc61afabb5887ef18a88e6ec86bd" },
+ { "fontloader-font-map.lua", "f57b80596cf5096c3505c0f3ef4285a8" },
{ "fontloader-font-cid.lua", "22b0367742fb253deef84ef7ccf5e8de" },
- { "fontloader-font-con.lua", "3218bd21a24c2abb13b284085da8ced4" },
- { "fontloader-font-ini.lua", "6f615d3bc72fb29f409ed2b8f6364c35" },
+ { "fontloader-font-con.lua", "eff77b4c54c2d26eacb29de59e94e2f9" },
+ { "fontloader-font-ini.lua", "dd3ff5febc73c79b23e16d713a1282fb" },
{ "fontloader-data-con.lua", "d8982c834ed9acc6193eee23067b9d5d" },
- { "fontloader-reference.lua", "78d6781759aa7a701282370a9c02bbb5" },
+ { "fontloader-reference.lua", "087a1ac6e832824c0387692b76d38735" },
{ "fontloader-basics-gen.lua", "a1e8c7de52ec6a8afcce3b2105f0d355" },
{ "mktests", "c7cff7025962922944376acc1ffa9c47" },
{ "mkstatus", "66bd373bfc704d78084cfe95a6b9c192" },
{ "mkcharacters", "42bb2bec362979ffdccce9be69acc5fb" },
{ "mkglyphlist", "2ff6dcdec67b4853c6ad102a16fa8539" },
{ "mkimport", "2540d1920712e0b3777d0dc0aec52729" },
- { "luaotfload-glyphlist.lua", "bcf89e1441be9f4ad29c0cf3a076bcea" },
+ { "luaotfload-glyphlist.lua", "b53cbf4a32c0f3fa4ece22d533b698ca" },
{ "luaotfload-characters.lua", "910152da2c9ae773c539284ac6cb0a90" },
{ "luaotfload-resolvers.lua", "6cd52af62c4726ba8fce657376de4579" },
{ "luaotfload-parsers.lua", "c6e627e3b157fc4004f7c9e715c01822" },
{ "luaotfload-loaders.lua", "a2bdea2fc644fbc31efec7377312b282" },
- { "luaotfload-letterspace.lua", "078b211a668ac6943141442b84062354" },
- { "luaotfload-features.lua", "14041df7943fb33d0d2493b14cf95706" },
- { "luaotfload-database.lua", "f4ee22158855438aa8a29623552ed82c" },
- { "luaotfload-configuration.lua", "12e69f5d83340c8fb810c590f16f60cf" },
- { "luaotfload-colors.lua", "d494389674e7fe39678f4819c7bd0d00" },
- { "luaotfload-auxiliary.lua", "6788b0f763d759933de8c1d493421210" },
- { "luaotfload-filelist.lua", "dae5349af86ec3b471f9a57eb6b5631b" },
- { "luaotfload-tool.lua", "e3cc9e50fb9fc5ce3428c0c8ac72bf25" },
+ { "luaotfload-letterspace.lua", "aea76b256d57b1c323e187f6d1c5523a" },
+ { "luaotfload-features.lua", "a21be7e463260c98e69f232c2fad3798" },
+ { "luaotfload-database.lua", "72df8179882da8e0045e9ce8574046f4" },
+ { "luaotfload-configuration.lua", "dca6b1f7a05ab469aeedb23092511801" },
+ { "luaotfload-colors.lua", "6fbe333cc790b0e0e85df10df2c42d65" },
+ { "luaotfload-auxiliary.lua", "4c81811eb5da713a80f53ad21011b35a" },
+ { "luaotfload-filelist.lua", "1c4ae87307a75ce3d09d9fa6a224c6ba" },
+ { "luaotfload-tool.lua", "0974625b294bb157ef3d7b930dec08bc" },
{ "luaotfload-diagnostics.lua", "1ff35d5ef3adf4e9d92ee3f979672b9c" },
- { "luaotfload-log.lua", "7b9e8dd90047a06a8840d662f2b63739" },
- { "luaotfload-init.lua", "63d9efafb1a9f659f7f2cce355022899" },
- { "luaotfload-main.lua", "c4784393b85fb082a100ffaf100d5e74" },
+ { "luaotfload-log.lua", "faf32504a1c3310197f154caf015a7c4" },
+ { "luaotfload-init.lua", "79dd1f0754ac710c8b43f60059aa105c" },
+ { "luaotfload-main.lua", "d9b80dcf36322ef52f29339dda858845" },
},
["notes"]={
["committer"]="Ulrike Fischer <fischer@troubleshooting-tex.de>",
- ["description"]="2.9",
- ["loader"]="fontloader-2018-09-24.lua",
- ["revision"]="f9f554b2305fba2bc075b84380321104161e230d",
- ["timestamp"]="2018-09-25 16:34:44 +0200",
+ ["description"]="v2.91",
+ ["loader"]="fontloader-2018-10-02.lua",
+ ["revision"]="0f1daff67762435aeabbb00a7874e5b1adba432e",
+ ["timestamp"]="2018-10-03 00:47:03 +0200",
},
} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
index 312771474f0..04f219ba416 100644
--- a/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
+++ b/Master/texmf-dist/tex/luatex/luaotfload/luaotfload.sty
@@ -42,7 +42,7 @@
\ProvidesPackage{luaotfload}%
%% FIXME The date is meaningless, we need to find a way to
%% use the git revision instead.
- [2018/09/24 v2.9 OpenType layout system]
+ [2018/10/03 v2.91 OpenType layout system]
\fi
\directlua{
require('luaotfload-main')