diff options
author | Karl Berry <karl@freefriends.org> | 2017-05-13 23:29:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-05-13 23:29:40 +0000 |
commit | dd64b2da8b67c42251d02ce422da9cb4643043e1 (patch) | |
tree | 84e1613005c402bf62b705a7566389bd02d5a566 /Master/texmf-dist/tex/context/base | |
parent | 4eaef7e69e8c1e2ede97a3b50019d01415055717 (diff) |
context (May 12 23:56)
git-svn-id: svn://tug.org/texlive/trunk@44324 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkii/cont-new.mkii | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkii/context.mkii | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/char-ini.lua | 30 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/context.mkiv | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/font-col.lua | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi | 4 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua | 286 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi | 8 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/math-act.lua | 199 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/math-noa.lua | 10 | ||||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/status-files.pdf | bin | 25664 -> 25632 bytes | |||
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf | bin | 424881 -> 424884 bytes |
13 files changed, 379 insertions, 170 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii b/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii index 8d3267e35d1..847856cb974 100644 --- a/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2017.05.10 10:41} +\newcontextversion{2017.05.12 22:40} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/Master/texmf-dist/tex/context/base/mkii/context.mkii b/Master/texmf-dist/tex/context/base/mkii/context.mkii index 0386cce0c1e..725f87c00a2 100644 --- a/Master/texmf-dist/tex/context/base/mkii/context.mkii +++ b/Master/texmf-dist/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2017.05.10 10:41} +\edef\contextversion{2017.05.12 22:40} %D For those who want to use this: diff --git a/Master/texmf-dist/tex/context/base/mkiv/char-ini.lua b/Master/texmf-dist/tex/context/base/mkiv/char-ini.lua index f673a6a86b0..8fe852b586b 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/char-ini.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/char-ini.lua @@ -553,15 +553,34 @@ setmetatableindex(otfscripts,function(t,unicode) return "dflt" end) -local splitter = lpeg.splitat(S(":-")) +local splitter1 = lpeg.splitat(S(":-")) +local splitter2 = lpeg.splitat(S(" +-"),true) -function characters.getrange(name) -- used in font fallback definitions (name or range) - local range = blocks[name] +function characters.getrange(name,expression) -- used in font fallback definitions (name or range) + local range = rawget(blocks,lower(gsub(name,"[^a-zA-Z0-9]",""))) if range then return range.first, range.last, range.description, range.gaps end name = gsub(name,'"',"0x") -- goodie: tex hex notation - local start, stop = lpegmatch(splitter,name) + local start, stop + if expression then + local first, rest = lpegmatch(splitter2,name) + local range = rawget(blocks,lower(gsub(first,"[^a-zA-Z0-9]",""))) + if range then + start = range.first + stop = range.last + local s = loadstring("return 0 " .. rest) + if type(s) == "function" then + local d = s() + if type(d) == "number" then + start = start + d + stop = stop + d + return start, stop, nil + end + end + end + end + start, stop = lpegmatch(splitter1,name) if start and stop then start, stop = tonumber(start,16) or tonumber(start), tonumber(stop,16) or tonumber(stop) if start and stop then @@ -572,6 +591,9 @@ function characters.getrange(name) -- used in font fallback definitions (name or return slot, slot, nil end +-- print(characters.getrange("lowercaseitalic + 123",true)) +-- print(characters.getrange("lowercaseitalic + 124",true)) + local categorytags = allocate { lu = "Letter Uppercase", ll = "Letter Lowercase", diff --git a/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv b/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv index e0596528288..3aacc978cd6 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2017.05.10 10:41} +\newcontextversion{2017.05.12 22:40} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/Master/texmf-dist/tex/context/base/mkiv/context.mkiv b/Master/texmf-dist/tex/context/base/mkiv/context.mkiv index 61c8370763d..6d946e0bc63 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/context.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/context.mkiv @@ -39,7 +39,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2017.05.10 10:41} +\edef\contextversion{2017.05.12 22:40} \edef\contextkind {beta} %D For those who want to use this: diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-col.lua b/Master/texmf-dist/tex/context/base/mkiv/font-col.lua index 3698960b8a9..bce16fae783 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/font-col.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/font-col.lua @@ -104,7 +104,7 @@ function collections.define(name,font,ranges,details) details = settings_to_hash(details) -- todo, combine per font start/stop as arrays for s in gmatch(ranges,"[^, ]+") do - local start, stop, description, gaps = characters.getrange(s) + local start, stop, description, gaps = characters.getrange(s,true) if start and stop then if trace_collecting then if description then @@ -119,7 +119,7 @@ function collections.define(name,font,ranges,details) end local offset = details.offset if type(offset) == "string" then - local start = characters.getrange(offset) + local start = characters.getrange(offset,true) offset = start or false else offset = tonumber(offset) or false diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi index bd1109e5c79..88a3ff9412d 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi +++ b/Master/texmf-dist/tex/context/base/mkiv/font-col.mkvi @@ -102,8 +102,8 @@ {\definedfont[#2*#3\space at #4\scaledpoint]}% \ctxlua{mathematics.registerfallbackid(#1,\fontid\font)}} -\def\font_fallbacks_finish_math - {\ctxlua{mathematics.finishfallbacks()}} +% \def\font_fallbacks_finish_math +% {\ctxlua{mathematics.finishfallbacks()}} % check : only replace when present in replacement font (default: no) % force : force replacent even when basefont has glyph (default: yes) diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua b/Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua index b86ab59fb3f..578babc75a0 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/font-ctx.lua @@ -1118,6 +1118,187 @@ do -- else too many locals -- function commands.definefont_two(global,cs,str,size,inheritancemode,classfeatures,fontfeatures,classfallbacks,fontfallbacks, -- mathsize,textsize,relativeid,classgoodies,goodies,classdesignsize,fontdesignsize,scaledfontmode) +-- scanners.definefont_two = function() + +-- local global = scanboolean() -- \ifx\fontclass\empty\s!false\else\s!true\fi +-- local cs = scanstring () -- {#csname}% +-- local str = scanstring () -- \somefontfile +-- local size = scaninteger() -- \d_font_scaled_font_size +-- local inheritancemode = scaninteger() -- \c_font_feature_inheritance_mode +-- local classfeatures = scanstring () -- \m_font_class_features +-- local fontfeatures = scanstring () -- \m_font_features +-- local classfallbacks = scanstring () -- \m_font_class_fallbacks +-- local fontfallbacks = scanstring () -- \m_font_fallbacks +-- local mathsize = scaninteger() -- \fontface +-- local textsize = scaninteger() -- \d_font_scaled_text_face +-- local relativeid = scaninteger() -- \relativefontid +-- local classgoodies = scanstring () -- \m_font_class_goodies +-- local goodies = scanstring () -- \m_font_goodies +-- local classdesignsize = scanstring () -- \m_font_class_designsize +-- local fontdesignsize = scanstring () -- \m_font_designsize +-- local scaledfontmode = scaninteger() -- \scaledfontmode + +-- if trace_defining then +-- report_defining("start stage two: %s, size %s, features %a & %a",str,size,classfeatures,fontfeatures) +-- end +-- -- name is now resolved and size is scaled cf sa/mo +-- local lookup, name, sub, method, detail = getspecification(str or "") +-- -- new (todo: inheritancemode) +-- local designsize = fontdesignsize ~= "" and fontdesignsize or classdesignsize or "" +-- local designname = designsizefilename(name,designsize,size) +-- if designname and designname ~= "" then +-- if trace_defining or trace_designsize then +-- report_defining("remapping name %a, specification %a, size %a, designsize %a",name,designsize,size,designname) +-- end +-- -- we don't catch detail here +-- local o_lookup, o_name, o_sub, o_method, o_detail = getspecification(designname) +-- if o_lookup and o_lookup ~= "" then lookup = o_lookup end +-- if o_method and o_method ~= "" then method = o_method end +-- if o_detail and o_detail ~= "" then detail = o_detail end +-- name = o_name +-- sub = o_sub +-- end +-- -- so far +-- -- some settings can have been overloaded +-- if lookup and lookup ~= "" then +-- specification.lookup = lookup +-- end +-- if relativeid and relativeid ~= "" then -- experimental hook +-- local id = tonumber(relativeid) or 0 +-- specification.relativeid = id > 0 and id +-- end +-- -- +-- specification.name = name +-- specification.size = size +-- specification.sub = (sub and sub ~= "" and sub) or specification.sub +-- specification.mathsize = mathsize +-- specification.textsize = textsize +-- specification.goodies = goodies +-- specification.cs = cs +-- specification.global = global +-- specification.scalemode = scaledfontmode -- context specific +-- if detail and detail ~= "" then +-- specification.method = method or "*" +-- specification.detail = detail +-- elseif specification.detail and specification.detail ~= "" then +-- -- already set +-- elseif inheritancemode == 0 then +-- -- nothing +-- elseif inheritancemode == 1 then +-- -- fontonly +-- if fontfeatures and fontfeatures ~= "" then +-- specification.method = "*" +-- specification.detail = fontfeatures +-- end +-- if fontfallbacks and fontfallbacks ~= "" then +-- specification.fallbacks = fontfallbacks +-- end +-- elseif inheritancemode == 2 then +-- -- classonly +-- if classfeatures and classfeatures ~= "" then +-- specification.method = "*" +-- specification.detail = classfeatures +-- end +-- if classfallbacks and classfallbacks ~= "" then +-- specification.fallbacks = classfallbacks +-- end +-- elseif inheritancemode == 3 then +-- -- fontfirst +-- if fontfeatures and fontfeatures ~= "" then +-- specification.method = "*" +-- specification.detail = fontfeatures +-- elseif classfeatures and classfeatures ~= "" then +-- specification.method = "*" +-- specification.detail = classfeatures +-- end +-- if fontfallbacks and fontfallbacks ~= "" then +-- specification.fallbacks = fontfallbacks +-- elseif classfallbacks and classfallbacks ~= "" then +-- specification.fallbacks = classfallbacks +-- end +-- elseif inheritancemode == 4 then +-- -- classfirst +-- if classfeatures and classfeatures ~= "" then +-- specification.method = "*" +-- specification.detail = classfeatures +-- elseif fontfeatures and fontfeatures ~= "" then +-- specification.method = "*" +-- specification.detail = fontfeatures +-- end +-- if classfallbacks and classfallbacks ~= "" then +-- specification.fallbacks = classfallbacks +-- elseif fontfallbacks and fontfallbacks ~= "" then +-- specification.fallbacks = fontfallbacks +-- end +-- end +-- local tfmdata = definers.read(specification,size) -- id not yet known (size in spec?) +-- -- +-- local lastfontid = 0 +-- if not tfmdata then +-- report_defining("unable to define %a as %a",name,nice_cs(cs)) +-- lastfontid = -1 +-- texsetcount("scaledfontsize",0) +-- -- ctx_letvaluerelax(cs) -- otherwise the current definition takes the previous one +-- elseif type(tfmdata) == "number" then +-- if trace_defining then +-- report_defining("reusing %s, id %a, target %a, features %a / %a, fallbacks %a / %a, goodies %a / %a, designsize %a / %a", +-- name,tfmdata,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks,classgoodies,goodies,classdesignsize,fontdesignsize) +-- end +-- csnames[tfmdata] = specification.cs +-- texdefinefont(global,cs,tfmdata) +-- -- resolved (when designsize is used): +-- local size = fontdata[tfmdata].parameters.size or 0 +-- -- ctx_setsomefontsize(size .. "sp") +-- setmacro("somefontsize",size.."sp") +-- texsetcount("scaledfontsize",size) +-- lastfontid = tfmdata +-- else +-- -- setting the extra characters will move elsewhere +-- local characters = tfmdata.characters +-- local parameters = tfmdata.parameters +-- -- we use char0 as signal; cf the spec pdf can handle this (no char in slot) +-- characters[0] = nil +-- -- characters[0x00A0] = { width = parameters.space } +-- -- characters[0x2007] = { width = characters[0x0030] and characters[0x0030].width or parameters.space } -- figure +-- -- characters[0x2008] = { width = characters[0x002E] and characters[0x002E].width or parameters.space } -- period +-- -- +-- constructors.checkvirtualids(tfmdata) -- experiment, will become obsolete when slots can selfreference +-- local id = definefont(tfmdata) +-- csnames[id] = specification.cs +-- tfmdata.properties.id = id +-- definers.register(tfmdata,id) -- to be sure, normally already done +-- texdefinefont(global,cs,id) +-- constructors.cleanuptable(tfmdata) +-- constructors.finalize(tfmdata) +-- if trace_defining then +-- report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a", +-- name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks) +-- end +-- -- resolved (when designsize is used): +-- local size = tfmdata.parameters.size or 655360 +-- setmacro("somefontsize",size.."sp") +-- -- ctx_setsomefontsize(size .. "sp") +-- texsetcount("scaledfontsize",size) +-- lastfontid = id +-- end +-- if trace_defining then +-- report_defining("memory usage after: %s",statistics.memused()) +-- report_defining("stop stage two") +-- end +-- -- +-- texsetcount("global","lastfontid",lastfontid) +-- specifiers[lastfontid] = { str, size } +-- if not mathsize then +-- -- forget about it +-- elseif mathsize == 0 then +-- lastmathids[1] = lastfontid +-- else +-- lastmathids[mathsize] = lastfontid +-- end +-- -- +-- stoptiming(fonts) +-- end + scanners.definefont_two = function() local global = scanboolean() -- \ifx\fontclass\empty\s!false\else\s!true\fi @@ -1234,25 +1415,8 @@ do -- else too many locals local tfmdata = definers.read(specification,size) -- id not yet known (size in spec?) -- local lastfontid = 0 - if not tfmdata then - report_defining("unable to define %a as %a",name,nice_cs(cs)) - lastfontid = -1 - texsetcount("scaledfontsize",0) - -- ctx_letvaluerelax(cs) -- otherwise the current definition takes the previous one - elseif type(tfmdata) == "number" then - if trace_defining then - report_defining("reusing %s, id %a, target %a, features %a / %a, fallbacks %a / %a, goodies %a / %a, designsize %a / %a", - name,tfmdata,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks,classgoodies,goodies,classdesignsize,fontdesignsize) - end - csnames[tfmdata] = specification.cs - texdefinefont(global,cs,tfmdata) - -- resolved (when designsize is used): - local size = fontdata[tfmdata].parameters.size or 0 - -- ctx_setsomefontsize(size .. "sp") - setmacro("somefontsize",size.."sp") - texsetcount("scaledfontsize",size) - lastfontid = tfmdata - else + local tfmtype = type(tfmdata) + if tfmtype == "table" then -- setting the extra characters will move elsewhere local characters = tfmdata.characters local parameters = tfmdata.parameters @@ -1263,23 +1427,83 @@ do -- else too many locals -- characters[0x2008] = { width = characters[0x002E] and characters[0x002E].width or parameters.space } -- period -- constructors.checkvirtualids(tfmdata) -- experiment, will become obsolete when slots can selfreference - local id = definefont(tfmdata) - csnames[id] = specification.cs - tfmdata.properties.id = id - definers.register(tfmdata,id) -- to be sure, normally already done - texdefinefont(global,cs,id) - constructors.cleanuptable(tfmdata) - constructors.finalize(tfmdata) + local fallbacks = specification.fallbacks + if fallbacks and fallbacks ~= "" and tfmdata.properties.hasmath then + -- We need this ugly hack in order to resolve fontnames (at the \TEX end). Originally + -- math was done in Lua after loading (plugged into aftercopying). + -- + -- After tl 2017 I'll also do text falbacks this way (although backups there are done + -- in a completely different way. + mathematics.resolvefallbacks(tfmdata,specification,fallbacks) + context(function() + mathematics.finishfallbacks(tfmdata,specification,fallbacks) + local id = definefont(tfmdata) + csnames[id] = specification.cs + tfmdata.properties.id = id + definers.register(tfmdata,id) -- to be sure, normally already done + texdefinefont(global,cs,id) + constructors.cleanuptable(tfmdata) + constructors.finalize(tfmdata) + if trace_defining then + report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a", + name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks) + end + -- resolved (when designsize is used): + local size = tfmdata.parameters.size or 655360 + setmacro("somefontsize",size.."sp") + -- ctx_setsomefontsize(size .. "sp") + texsetcount("scaledfontsize",size) + lastfontid = id + -- + texsetcount("global","lastfontid",lastfontid) + specifiers[lastfontid] = { str, size } + if not mathsize then + -- forget about it + elseif mathsize == 0 then + lastmathids[1] = lastfontid + else + lastmathids[mathsize] = lastfontid + end + stoptiming(fonts) + end) + return + else + local id = definefont(tfmdata) + csnames[id] = specification.cs + tfmdata.properties.id = id + definers.register(tfmdata,id) -- to be sure, normally already done + texdefinefont(global,cs,id) + constructors.cleanuptable(tfmdata) + constructors.finalize(tfmdata) + if trace_defining then + report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a", + name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks) + end + -- resolved (when designsize is used): + local size = tfmdata.parameters.size or 655360 + setmacro("somefontsize",size.."sp") + -- ctx_setsomefontsize(size .. "sp") + texsetcount("scaledfontsize",size) + lastfontid = id + end + elseif tfmtype == "number" then if trace_defining then - report_defining("defining %a, id %a, target %a, features %a / %a, fallbacks %a / %a", - name,id,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks) + report_defining("reusing %s, id %a, target %a, features %a / %a, fallbacks %a / %a, goodies %a / %a, designsize %a / %a", + name,tfmdata,nice_cs(cs),classfeatures,fontfeatures,classfallbacks,fontfallbacks,classgoodies,goodies,classdesignsize,fontdesignsize) end + csnames[tfmdata] = specification.cs + texdefinefont(global,cs,tfmdata) -- resolved (when designsize is used): - local size = tfmdata.parameters.size or 655360 - setmacro("somefontsize",size.."sp") + local size = fontdata[tfmdata].parameters.size or 0 -- ctx_setsomefontsize(size .. "sp") + setmacro("somefontsize",size.."sp") texsetcount("scaledfontsize",size) - lastfontid = id + lastfontid = tfmdata + else + report_defining("unable to define %a as %a",name,nice_cs(cs)) + lastfontid = -1 + texsetcount("scaledfontsize",0) + -- ctx_letvaluerelax(cs) -- otherwise the current definition takes the previous one end if trace_defining then report_defining("memory usage after: %s",statistics.memused()) diff --git a/Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi b/Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi index fb14f111487..cbc78aca892 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi +++ b/Master/texmf-dist/tex/context/base/mkiv/font-mat.mkvi @@ -133,9 +133,9 @@ {\let\savedfontbody\fontbody \let\fontfamily#family% % the order is important as we depend on known id's when completing fonts - \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusthree\font_helpers_set_math_family_a\scriptscriptfont#mrtag\font + \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree\font_helpers_set_math_family_a\scriptscriptfont#mrtag\font \let\mathsizesuffix\mathscriptsuffix \let\fontface\!!plustwo \font_helpers_set_math_family_a\scriptfont #mrtag\font - \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusone \font_helpers_set_math_family_a\textfont #mrtag\font + \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone \font_helpers_set_math_family_a\textfont #mrtag\font \let\mathsizesuffix\empty \let\fontface\!!zerocount \let\fontbody\savedfontbody \setfalse\c_font_auto_size} @@ -161,9 +161,9 @@ \let\defaultfontclass\fontclass % else truefontname falls back on the wrong one \let\savedfontbody\fontbody \let\fontfamily#familytag% - \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusthree\font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% + \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusthree\font_helpers_set_math_family_bold_a\scriptscriptfont#mbfam#mrfam% \let\mathsizesuffix\mathscriptsuffix \let\fontface\!!plustwo \font_helpers_set_math_family_bold_a\scriptfont #mbfam#mrfam% - \let\mathsizesuffix\mathscriptscriptsuffix\let\fontface\!!plusone \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% + \let\mathsizesuffix\mathtextsuffix \let\fontface\!!plusone \font_helpers_set_math_family_bold_a\textfont #mbfam#mrfam% \let\mathsizesuffix\empty \let\fontface\!!zerocount \let\fontbody\savedfontbody \let\defaultfontclass\savedfontclass diff --git a/Master/texmf-dist/tex/context/base/mkiv/math-act.lua b/Master/texmf-dist/tex/context/base/mkiv/math-act.lua index ead26bd4fd0..4fcac17d8a5 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/math-act.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/math-act.lua @@ -632,7 +632,7 @@ blocks["uppercasedoublestruck"].gaps = { -- fonts[index] = { id = id, size = size } -- local chars = fontchars[id] -- local function remap(unic,unicode,gap) --- local unic = unicode + offset - start +-- -- local unic = unicode + offset - start -- if check and not chars[unicode] then -- -- not in font -- elseif force or (not done[unic] and not characters[unic]) then @@ -659,143 +659,100 @@ blocks["uppercasedoublestruck"].gaps = { -- end -- end -- end +-- +-- sequencers.appendaction("aftercopyingcharacters", "system","mathematics.finishfallbacks") local stack = { } function mathematics.registerfallbackid(n,id) - local top = stack[#stack] - if top then - top.list[n] = id - else - report_math("stack underrun in math fallbacks") - end + stack[#stack][n] = id end -function mathematics.injectfallbacks(target,original) - if #stack > 0 then - -- for now - if trace_collecting then - report_math("stack overflow in math fallbacks") - end - return - end - local properties = original.properties - if properties and properties.hasmath then - local specification = target.specification - if specification then - local fallbacks = specification.fallbacks - if fallbacks then - local definitions = fonts.collections.definitions[fallbacks] - if definitions then - insert(stack, { - target = target, - original = original, - list = { }, - }) - if trace_collecting then - report_math("adding fallback characters to font %a",specification.hash) - end - local size = specification.size -- target.size - context.pushcatcodes("prt") -- context.unprotect() - for i=1,#definitions do - local definition = definitions[i] - local name = definition.font - local features = definition.features or "" - local size = size * (definition.rscale or 1) - context.font_fallbacks_register_math(i,name,features,size) - end - context.font_fallbacks_finish_math() - context.popcatcodes() - end +function mathematics.resolvefallbacks(target,specification,fallbacks) + local definitions = fonts.collections.definitions[fallbacks] + if definitions then + local size = specification.size -- target.size + local list = { } + insert(stack,list) + context.pushcatcodes("prt") -- context.unprotect() + for i=1,#definitions do + local definition = definitions[i] + local name = definition.font + local features = definition.features or "" + local size = size * (definition.rscale or 1) + context.font_fallbacks_register_math(i,name,features,size) + if trace_collecting then + report_math("registering fallback font %i, name %a, size %a, features %a",i,name,size,features) end end + context.popcatcodes() end end -function mathematics.finishfallbacks() - local top = remove(stack) - if not top then - report_math("finish error in math fallbacks") - return - end - local target = top.target - local original = top.original - local list = top.list - local properties = original.properties - if properties and properties.hasmath then - local specification = target.specification - if specification then - local fallbacks = specification.fallbacks - if fallbacks then - local definitions = fonts.collections.definitions[fallbacks] - if definitions and #definitions > 0 then - if trace_collecting then - report_math("adding fallback characters to font %a",specification.hash) - end - local definedfont = fonts.definers.internal - local copiedglyph = fonts.handlers.vf.math.copy_glyph - local fonts = target.fonts - local size = specification.size -- target.size - local characters = target.characters - if not fonts then - fonts = { } - target.fonts = fonts - target.type = "virtual" - target.properties.virtualized = true +function mathematics.finishfallbacks(target,specification,fallbacks) + local list = remove(stack) + if list and #list > 0 then + local definitions = fonts.collections.definitions[fallbacks] + if definitions and #definitions > 0 then + if trace_collecting then + report_math("adding fallback characters to font %a",specification.hash) + end + local definedfont = fonts.definers.internal + local copiedglyph = fonts.handlers.vf.math.copy_glyph + local fonts = target.fonts + local size = specification.size -- target.size + local characters = target.characters + if not fonts then + fonts = { } + target.fonts = fonts + end + target.type = "virtual" + target.properties.virtualized = true + if #fonts == 0 then + fonts[1] = { id = 0, size = size } -- self, will be resolved later + end + local done = { } + for i=1,#definitions do + local definition = definitions[i] + local name = definition.font + local start = definition.start + local stop = definition.stop + local gaps = definition.gaps + local check = definition.check + local force = definition.force + local rscale = definition.rscale or 1 + local offset = definition.offset or start + local id = list[i] + if id then + local index = #fonts + 1 + fonts[index] = { id = id, size = size } + local chars = fontchars[id] + local function remap(unic,unicode,gap) + if check and not chars[unicode] then + return + end + if force or (not done[unic] and not characters[unic]) then + if trace_collecting then + report_math("replacing math character %C by %C using vector %a and font %a named %a%s%s", + unic,unicode,fallbacks,id,name,check and ", checked",gap and ", gap plugged") + end + characters[unic] = copiedglyph(target,characters,chars,unicode,index) + done[unic] = true + end end - if #fonts == 0 then - fonts[1] = { id = 0, size = size } -- sel, will be resolved later + for unicode = start, stop do + local unic = unicode + offset - start + remap(unic,unicode,false) end - local done = { } - for i=1,#definitions do - local definition = definitions[i] - local name = definition.font - local start = definition.start - local stop = definition.stop - local gaps = definition.gaps - local check = definition.check - local force = definition.force - local rscale = definition.rscale or 1 - local offset = definition.offset or start - local id = list[i] - if id then - local index = #fonts + 1 - fonts[index] = { id = id, size = size } - local chars = fontchars[id] - local function remap(unic,unicode,gap) - local unic = unicode + offset - start - if check and not chars[unicode] then - -- not in font - elseif force or (not done[unic] and not characters[unic]) then - if trace_collecting then - report_math("remapping math character, vector %a, font %a, character %C%s%s", - fallbacks,name,unic,check and ", checked",gap and ", gap plugged") - end - characters[unic] = copiedglyph(target,characters,chars,unicode,index) - done[unic] = true - else - end - end - for unicode = start, stop do - local unic = unicode + offset - start - remap(unic,unicode,false) - end - if gaps then - for unic, unicode in next, gaps do - remap(unic,unicode,true) - end - end + if gaps then + for unic, unicode in next, gaps do + remap(unic,unicode,true) end end - xlist = nil - xtarget = nil - xoriginal = nil - elseif trace_collecting then - report_math("no fallback characters added to font %a",specification.hash) end end + elseif trace_collecting then + report_math("no fallback characters added to font %a",specification.hash) end end end - -sequencers.appendaction("aftercopyingcharacters", "system","mathematics.injectfallbacks") diff --git a/Master/texmf-dist/tex/context/base/mkiv/math-noa.lua b/Master/texmf-dist/tex/context/base/mkiv/math-noa.lua index 4db35c2d6f8..f9e8c9f70ee 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/math-noa.lua +++ b/Master/texmf-dist/tex/context/base/mkiv/math-noa.lua @@ -585,9 +585,10 @@ do end local newchar = remapalphabets(char,a,g) if newchar then - if characters[newchar] then + local newchardata = characters[newchar] + if newchardata then if trace_remapping then - report_remap("char",font,char,newchar) + report_remap("char",font,char,newchar,newchardata.commands and " (virtual)" or "") end if trace_analyzing then setnodecolor(pointer,"font:isol") @@ -618,6 +619,11 @@ do report_remap("char",font,char,newchar," fails (no fallback style)") end end + elseif trace_remapping then + local chardata = characters[char] + if chardata and chardata.commands then + report_remap("char",font,char,char," (virtual)") + end end end if not characters[char] then diff --git a/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf b/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf Binary files differindex 4948cc2fb5a..ac51837836f 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf +++ b/Master/texmf-dist/tex/context/base/mkiv/status-files.pdf diff --git a/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf b/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf Binary files differindex 16575aea777..7e492a7e75b 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf +++ b/Master/texmf-dist/tex/context/base/mkiv/status-lua.pdf |