diff options
author | Hans Hagen <pragma@wxs.nl> | 2021-01-21 18:48:54 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2021-01-21 18:48:54 +0100 |
commit | aea52f4b97d1be9ba194cd9a1d0ff1865c413691 (patch) | |
tree | 6b6fe6b48a7b8f161442e391ab03c34f2b4222b4 /tex/context/base/mkxl | |
parent | e7016154c1f84ab4f9420c19d14af6a28f53bac8 (diff) | |
download | context-aea52f4b97d1be9ba194cd9a1d0ff1865c413691.tar.gz |
2021-01-21 18:04:00
Diffstat (limited to 'tex/context/base/mkxl')
50 files changed, 902 insertions, 199 deletions
diff --git a/tex/context/base/mkxl/buff-ver.mkxl b/tex/context/base/mkxl/buff-ver.mkxl index b497c694a..7d193553c 100644 --- a/tex/context/base/mkxl/buff-ver.mkxl +++ b/tex/context/base/mkxl/buff-ver.mkxl @@ -404,14 +404,14 @@ %D decided not to use that slow and sometimes troublesome solution. Instead we stick %D to some 'old' \CONTEXT\ macros for typesetting typical \TEX\ characters. -\def\lesscharacter {<} % obsolete -\def\morecharacter {>} % obsolete +\immutable\def\lesscharacter {<} % obsolete +\immutable\def\morecharacter {>} % obsolete -\let\texescape \textbackslash -\let\leftargument \textbraceleft -\let\rightargument \textbraceright -\let\inlinemathmarker \textdollar -\def\displaymathmarker{\textdollar\textdollar} +\immutable\let\texescape \textbackslash +\immutable\let\leftargument \textbraceleft +\immutable\let\rightargument \textbraceright +\immutable\let\inlinemathmarker \textdollar +\immutable\def\displaymathmarker{\textdollar\textdollar} \def\buff_verbatim_special_type#1#2#% # gobbles spaces {\dontleavehmode\bgroup @@ -429,10 +429,10 @@ \protected\def\mat{\buff_verbatim_special_type\inlinemathmarker \inlinemathmarker} \protected\def\dis{\buff_verbatim_special_type\displaymathmarker\displaymathmarker} -\let\normaltexttex\tex -\let\normaltextarg\arg -\let\normaltextmat\mat -\let\normaltextdis\dis +\aliased\let\normaltexttex\tex +\aliased\let\normaltextarg\arg +\aliased\let\normaltextmat\mat +\aliased\let\normaltextdis\dis \permanent\protected\def\astype {\dontleavehmode diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 715937da0..fd44f4c82 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.01.18 18:15} +\newcontextversion{2021.01.21 18:01} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 0cc4a77ea..123558d39 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2021.01.18 18:15} +\immutable\edef\contextversion{2021.01.21 18:01} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/core-two.mkxl b/tex/context/base/mkxl/core-two.mkxl index af48dc7c3..322765a39 100644 --- a/tex/context/base/mkxl/core-two.mkxl +++ b/tex/context/base/mkxl/core-two.mkxl @@ -81,8 +81,9 @@ % temp hack: needs a proper \starteverytimeluacode \setfalse\twopassdatafound -\let \twopassdata \empty -\let \twopassdatalist \empty + +\mutable\let\twopassdata \empty +\mutable\let\twopassdatalist\empty \def\syst_twopass_check % can be delegated to lua once obsolete is gone {\ifempty\twopassdata diff --git a/tex/context/base/mkxl/driv-shp.lmt b/tex/context/base/mkxl/driv-shp.lmt index cfa61e30e..7f305877d 100644 --- a/tex/context/base/mkxl/driv-shp.lmt +++ b/tex/context/base/mkxl/driv-shp.lmt @@ -284,8 +284,11 @@ local flush_character do pos_v = pos_v + v * sy end elseif command == "offset" then + local ph = pos_h + local pv = pos_v local h = packet[2] or 0 local v = packet[3] or 0 + local c = packet[4] if h ~= 0 then if factor ~= 0 then h = h + h * factor / 1000 -- expansion @@ -295,6 +298,31 @@ local flush_character do if v and v ~= 0 then pos_v = pos_v + v * sy end + if c then + flushchar(font,char,fnt,c) + pos_h = ph + pos_v = pv + end + elseif command == "compose" then + local ph = pos_h + local pv = pos_v + local h = packet[2] or 0 + local v = packet[3] or 0 + local c = packet[4] + if h ~= 0 then + if factor ~= 0 then + h = h + h * factor / 1000 -- expansion + end + pos_h = pos_h + h * sx + end + if v and v ~= 0 then + pos_v = pos_v + v * sy + end + if c then + flushchar(font,char,fnt,c) + pos_h = ph + pos_v = pv + end elseif command == "push" then level = level + 1 local s = stack[level] diff --git a/tex/context/base/mkxl/file-res.mklx b/tex/context/base/mkxl/file-res.mklx index a523302d1..a796f3e97 100644 --- a/tex/context/base/mkxl/file-res.mklx +++ b/tex/context/base/mkxl/file-res.mklx @@ -124,11 +124,11 @@ \readfile{#name}{#true}{#false}% \popcatcodetable} -\permanent\protected\def\readxmlfile#name#true#false% - {\pushcatcodetable - \catcodetable\xmlcatcodes - \readfile{#name}{#true}{#false}% - \popcatcodetable} +% \permanent\protected\def\readxmlfile#name#true#false% +% {\pushcatcodetable +% \catcodetable\xmlcatcodes +% \readfile{#name}{#true}{#false}% +% \popcatcodetable} %D \macros %D {doiflocfileelse,locfilename} diff --git a/tex/context/base/mkxl/font-col.lmt b/tex/context/base/mkxl/font-col.lmt index 21c731946..05de35903 100644 --- a/tex/context/base/mkxl/font-col.lmt +++ b/tex/context/base/mkxl/font-col.lmt @@ -399,15 +399,27 @@ local function monoslot(font,char,parent,factor) end end +function collections.register(font,char,handler) + if font and char and type(handler) == "function" then + local vector = vectors[font] + if not vector then + vector = { } + vectors[font] = vector + end + vector[char] = handler + end +end + +-- todo: also general one for missing + function collections.process(head) -- this way we keep feature processing for n, char, font in nextchar, head do local vector = validvectors[font] if vector then local vect = vector[char] - if not vect then - -- keep it - else - if type(vect) == "table" then + if vect then + local kind = type(vect) + if kind == "table" then local newfont = vect[1] local newchar = vect[2] if trace_collecting then @@ -416,6 +428,21 @@ function collections.process(head) -- this way we keep feature processing ) end setfont(n,newfont,newchar) + elseif kind == "function" then + local newfont, newchar = vect(font,char,vector) + if not newfont then + newfont = font + end + if not newchar then + newchar = char + end + if trace_collecting then + report_fonts("remapping character %C in font %a to character %C in font %a%s", + char,font,newchar,newfont,not chardata[newfont][newchar] and " (missing)" or "" + ) + end + setfont(n,newfont,newchar) + vector[char] = { newfont, newchar } else local fakemono = vector.factor if trace_collecting then diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt index 60e3f0233..d737d28ce 100644 --- a/tex/context/base/mkxl/font-con.lmt +++ b/tex/context/base/mkxl/font-con.lmt @@ -1156,6 +1156,7 @@ do initializers = { base = { }, node = { }, plug = { } }, processors = { base = { }, node = { }, plug = { } }, manipulators = { base = { }, node = { }, plug = { } }, + finalizers = { base = { }, node = { }, plug = { } }, } features.register = function(specification) return register(features,specification) end handler.features = features -- will also become hidden @@ -1454,23 +1455,23 @@ end -- after scaling -function constructors.applymanipulators(what,tfmdata,features,trace,report) +local function apply(key,what,tfmdata,features,trace,report) if features and next(features) then - local properties = tfmdata.properties - local whathandler = handlers[what] - local whatfeatures = whathandler.features - local whatmanipulators = whatfeatures.manipulators - local mode = properties.mode - local manipulators = whatmanipulators[mode] - if manipulators then - for i=1,#manipulators do - local step = manipulators[i] + local properties = tfmdata.properties + local whathandler = handlers[what] + local whatfeatures = whathandler.features + local whatactions = whatfeatures[key] + local mode = properties.mode + local actions = whatactions[mode] + if actions then + for i=1,#actions do + local step = actions[i] local feature = step.name - local value = features[feature] + local value = features[feature] if value then local action = step.action if trace then - report("applying feature manipulator %a for mode %a for font %a",feature,mode,properties.fullname) + report("applying feature %s %a for mode %a for font %a",key,feature,mode,properties.fullname) end if action then action(tfmdata,feature,value) @@ -1481,6 +1482,18 @@ function constructors.applymanipulators(what,tfmdata,features,trace,report) end end +function constructors.applymanipulators(what,tfmdata,features,trace,report) + if features and next(features) then + apply("manipulators",what,tfmdata,features,trace,report) + end +end + +function constructors.applyfinalizers(what,tfmdata,features,trace,report) + if features and next(features) then + apply("finalizers",what,tfmdata,features,trace,report) + end +end + function constructors.addcoreunicodes(unicodes) -- maybe make this a metatable if used at all if not unicodes then unicodes = { } diff --git a/tex/context/base/mkxl/font-ctx.lmt b/tex/context/base/mkxl/font-ctx.lmt index b307f8f5d..d60333766 100644 --- a/tex/context/base/mkxl/font-ctx.lmt +++ b/tex/context/base/mkxl/font-ctx.lmt @@ -1227,9 +1227,9 @@ do -- else too many locals name = o_name sub = o_sub end -if texconditionals["c_font_compact"] then - size = 655360 -end + if texconditionals["c_font_compact"] then + size = 655360 + end -- so far -- some settings can have been overloaded if lookup and lookup ~= "" then @@ -1364,10 +1364,10 @@ end context(function() busy = false mathematics.finishfallbacks(tfmdata,specification,fallbacks) -tfmdata.original = specification.specification - local id = definefont(tfmdata) + tfmdata.original = specification.specification + local id = definefont(tfmdata,properties.id) csnames[id] = specification.cs - properties.id = id + properties.id = id -- already set definers.register(tfmdata,id) -- to be sure, normally already done texdefinefont(global,cs,id) constructors.finalize(tfmdata) @@ -1401,10 +1401,10 @@ tfmdata.original = specification.specification end) return else -tfmdata.original = specification.specification - local id = definefont(tfmdata) + tfmdata.original = specification.specification + local id = definefont(tfmdata,properties.id) csnames[id] = specification.cs - properties.id = id + properties.id = id -- already set definers.register(tfmdata,id) -- to be sure, normally already done texdefinefont(global,cs,id) constructors.finalize(tfmdata) diff --git a/tex/context/base/mkxl/font-def.lmt b/tex/context/base/mkxl/font-def.lmt index 01513f1e6..614f98036 100644 --- a/tex/context/base/mkxl/font-def.lmt +++ b/tex/context/base/mkxl/font-def.lmt @@ -29,6 +29,8 @@ local report_defining = logs.reporter("fonts","defining") default loader that only handles <l n='tfm'/>.</p> --ldx]]-- +local nextfont = font.nextid + local fonts = fonts local fontdata = fonts.hashes.identifiers local readers = fonts.readers @@ -368,6 +370,8 @@ function definers.loadfont(specification) if not tfmdata then -- normally context will not end up here often (if so there is an issue somewhere) local forced = specification.forced or "" +local id = nextfont(true) +specification.id = id if forced ~= "" then local reader = readers[lower(forced)] -- normally forced is already lowered tfmdata = reader and reader(specification) @@ -477,7 +481,6 @@ function definers.read(specification,size,id) -- id can be optional, name can al end else tfmdata = definers.loadfont(specification) -- can be overloaded --- put in properties instead if tfmdata then tfmdata.original = specification.specification if trace_defining then diff --git a/tex/context/base/mkxl/font-ini.mklx b/tex/context/base/mkxl/font-ini.mklx index 0a158e69d..c52fb7f4b 100644 --- a/tex/context/base/mkxl/font-ini.mklx +++ b/tex/context/base/mkxl/font-ini.mklx @@ -2267,11 +2267,11 @@ %D math families and finally we activate the default typeface and also set the font %D specific parameters assigned to \type {\everybodyfont}. -\permanent\def\textface {\currentbodyfontdimension\s!text } -\permanent\def\scriptface {\currentbodyfontdimension\s!script } -\permanent\def\scriptscriptface{\currentbodyfontdimension\s!scriptscript} -\permanent\def\xtextface {\currentbodyfontdimension\s!x } -\permanent\def\xxtextface {\currentbodyfontdimension\s!xx } +\permanent\protected\def\textface {\currentbodyfontdimension\s!text } +\permanent\protected\def\scriptface {\currentbodyfontdimension\s!script } +\permanent\protected\def\scriptscriptface{\currentbodyfontdimension\s!scriptscript} +\permanent\protected\def\xtextface {\currentbodyfontdimension\s!x } +\permanent\protected\def\xxtextface {\currentbodyfontdimension\s!xx } \installcorenamespace{fontbodyfaces} @@ -2286,11 +2286,11 @@ \def\font_basics_set_faces_preset {\edef\font_basics_set_faces{% 0.2 sec on 10K \tfa - \enforced\noexpand\edef\noexpand\textface {\currentbodyfontdimension\s!text }% - \enforced\noexpand\edef\noexpand\scriptface {\currentbodyfontdimension\s!script }% - \enforced\noexpand\edef\noexpand\scriptscriptface{\currentbodyfontdimension\s!scriptscript}% - \enforced\noexpand\edef\noexpand\xtextface {\currentbodyfontdimension\s!x }% - \enforced\noexpand\edef\noexpand\xxtextface {\currentbodyfontdimension\s!xx }% + \enforced\permanent\protected\def\textface {\currentbodyfontdimension\s!text }% + \enforced\permanent\protected\def\scriptface {\currentbodyfontdimension\s!script }% + \enforced\permanent\protected\def\scriptscriptface{\currentbodyfontdimension\s!scriptscript}% + \enforced\permanent\protected\def\xtextface {\currentbodyfontdimension\s!x }% + \enforced\permanent\protected\def\xxtextface {\currentbodyfontdimension\s!xx }% }% \gletcsname\??fontbodyfaces\fontbody\endcsname\font_basics_set_faces} diff --git a/tex/context/base/mkxl/font-mpf.lmt b/tex/context/base/mkxl/font-mpf.lmt new file mode 100644 index 000000000..5934c1037 --- /dev/null +++ b/tex/context/base/mkxl/font-mpf.lmt @@ -0,0 +1,174 @@ +if not modules then modules = { } end modules ['font-ogr'] = { + version = 1.001, + comment = "companion to font-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local tonumber, unpack, type = tonumber, unpack, type + +local context = context +local metapost = metapost + +local metafonts = { } +metapost.metafonts = metafonts + +local fastserialize = table.fastserialize +local sortedhash = table.sortedhash +local settings_to_hash = utilities.parsers.settings_to_hash +local settings_to_array = utilities.parsers.settings_to_array + +local addcharacters = fonts.constructors.addcharacters +local fontdata = fonts.hashes.identifiers + +local otf = fonts.handlers.otf +local otfregister = otf.features.register + +local getshapes = fonts.dropins.getshapes + +local setparameterset = metapost.setparameterset +local simplemetapost = metapost.simple + +local register = fonts.collections.register +local checkenabled = fonts.collections.checkenabled +local newprivateslot = fonts.helpers.newprivateslot + +local currentfont = font.current + +local function setmetaglyphs(category,fontid,unicode,specification) + local tfmdata = fontdata[fontid] + if unicode then + local characters = tfmdata.characters + specification.unicode = unicode + specification.category = category + -- Generate one shape, make a use we pass the unicode as that is + -- the index in a picture list (normally). We could actually already + -- fetch the stream but for now we do that later (i.e. we delay the + -- serialization to pdf). + local code = specification.code + if code then + setparameterset("mpsfont",specification) + -- simplemetapost(instance,"begingroup;",true,true) + simplemetapost("simplefun",code) + -- simplemetapost(instance,"endgroup;",true,true) + end + -- We now know (hopefully) the dimensions of the image which is what + -- we need to pass to the engine in order to let it do its work. + local shapes = getshapes(category) + local units = shapes.parameters.units + local scale = tfmdata.parameters.size / units + local shape = shapes.glyphs[unicode] + -- + local llx, lly, urx, ury = unpack(shape.boundingbox) + llx = llx * scale + urx = urx * scale + lly = lly * scale + ury = ury * scale + -- + local newdata = { } + characters[unicode] = newdata -- so that we can register commands + fonts.dropins.swapone("mps",tfmdata,shape,unicode) + -- + local olddata = characters[unicode] + newdata.width = urx - llx + newdata.height = ury + newdata.depth = -lly + newdata.unicode = unicode + -- commands = { { "offset", -llx, 0, newdata.commands[1][1], newdata.commands[1][2] } } + newdata.commands = { { "offset", -llx, 0 }, newdata.commands[1] } + -- pass dimensions to lua + characters[unicode] = newdata + -- pass dimensions to tex + addcharacters(fontid, { characters = { [unicode] = newdata } }) + return fontid, unicode + end +end + +local function setmetaglyph(specification) + if specification then + local category = specification.category + local name = specification.name + if category and name then + local fontid = currentfont() + local private = newprivateslot(name) + register(fontid,private,function(font,char) + return setmetaglyphs(category,font,char,specification) end + ) + checkenabled() + end + end +end + +local function initializempf(tfmdata,kind,value) + local metafont = metafonts[value] + if value then + local font = tfmdata.properties.id + for char, spec in sortedhash(metafont) do + if type(char) == "string" then + char = newprivateslot(char) + end + register(font,char,function(font,char) + return setmetaglyphs(value,font,char,spec) + end) + end + checkenabled() + end +end + +fonts.helpers.setmetaglyphs = setmetaglyphs +fonts.helpers.setmetaglyph = setmetaglyph + +otfregister { + name = "metafont", + description = "metafont glyphs", + manipulators = { + base = initializempf, + node = initializempf, + } +} + +do + + local scanners = tokens.scanners + local scanopen = scanners.scanopen + local scanclose = scanners.scanclose + local scanword = scanners.word + local scanstring = scanners.string + + interfaces.implement { + name = "setmetaglyph", + public = true, + protected = true, + actions = function(t) + local t = { } + if scanopen() then + while not scanclose() do + local key = scanword() + if key == "shapes" then + if scanopen() then + local tt = { } + local nn = 0 + while not scanclose() do + if scanopen() then + local ttt = { } + while not scanclose() do + local key = scanword() + ttt[key] = scanstring() + end + nn= nn + 1 + tt[nn] = ttt + end + end + t[key] = tt + end + else + t[key] = scanstring() + end + end + end + setmetaglyph(t) + end + } + +end diff --git a/tex/context/base/mkxl/font-ogr.lmt b/tex/context/base/mkxl/font-ogr.lmt index a3f8acb3c..1f37ec901 100644 --- a/tex/context/base/mkxl/font-ogr.lmt +++ b/tex/context/base/mkxl/font-ogr.lmt @@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['font-ogr'] = { -- Here we deal with graphic variants and for now also color support ends up here -- but that might change. It's lmtx only code. -local tostring, tonumber, next, type = tostring, tonumber, next, type +local tostring, tonumber, next, type, rawget = tostring, tonumber, next, type, rawget local round, max, mod, div = math.round, math.max, math.mod, math.div local find = string.find local concat, setmetatableindex, sortedhash = table.concat, table.setmetatableindex, table.sortedhash @@ -121,13 +121,57 @@ do end end - function dropins.swap(method,tfmdata,shapes,...) -- by unicode +-- function dropins.swap(method,tfmdata,shapes,...) -- by unicode +-- if method and shapes then +-- local characters = tfmdata.characters +-- local descriptions = tfmdata.descriptions +-- local droppedin, tfmdrop, dropchars, dropdescs, colrshapes +-- local idx = 255 +-- local slot = 0 +-- -- we can have a variant where shaped are by unicode and not by index +-- for k, v in next, characters do +-- local description = descriptions[k] +-- if description then +-- local shape = shapes[k] +-- if shape then +-- if idx >= 255 then +-- idx = 1 +-- colrshapes = setmetatableindex({ },shapes) +-- slot, droppedin, tfmdrop = dropins.provide(method,tfmdata,colrshapes) +-- dropchars = tfmdrop.characters +-- dropdescs = tfmdrop.descriptions +-- else +-- idx = idx + 1 +-- end +-- colrshapes[idx] = shape -- so not: description +-- -- todo: prepend +-- v.commands = { { "slot", slot, idx } } +-- -- hack to prevent that type 3 also gets 'use' flags .. todo +-- local c = { commands = false, index = idx, dropin = tfmdrop } +-- local d = { } -- index = idx, dropin = tfmdrop } +-- setmetatableindex(c,v) +-- setmetatableindex(d,description) +-- dropchars[idx] = c +-- dropdescs[idx] = d -- not needed +-- end +-- end +-- end +-- else +-- -- error +-- end +-- end + + function dropins.swap(method,tfmdata,shapes) -- by unicode if method and shapes then local characters = tfmdata.characters local descriptions = tfmdata.descriptions - local droppedin, tfmdrop, dropchars, dropdescs, colrshapes - local idx = 255 - local slot = 0 + local droppedin = tfmdata.droppedin + local tfmdrop = tfmdata.tfmdrop + local dropchars = tfmdata.dropchars + local dropdescs = tfmdata.dropdescs + local colrshapes = tfmdata.colrshapes + local idx = tfmdata.dropindex or 255 + local slot = tfmdata.dropslot or 0 -- we can have a variant where shaped are by unicode and not by index for k, v in next, characters do local description = descriptions[k] @@ -156,11 +200,63 @@ do end end end + tfmdata.droppedin = droppedin + tfmdata.tfmdrop = tfmdrop + tfmdata.dropchars = dropchars + tfmdata.dropdescs = dropdescs + tfmdata.colrshapes = colrshapes + tfmdata.dropindex = idx + tfmdata.dropslot = slot else -- error end end + function dropins.swapone(method,tfmdata,shape,unicode) + if method and shape then + local characters = tfmdata.characters + local descriptions = tfmdata.descriptions + local droppedin = tfmdata.droppedin + local tfmdrop = tfmdata.tfmdrop + local dropchars = tfmdata.dropchars +-- local dropdescs = tfmdata.dropdescs + local colrshapes = tfmdata.colrshapes + local idx = tfmdata.dropindex or 255 + local slot = tfmdata.dropslot or 0 + local character = characters[unicode] +-- local description = descriptions[unicode] or { } + if character then + if idx >= 255 then + idx = 1 + colrshapes = setmetatableindex({ },shapes) + slot, droppedin, tfmdrop = dropins.provide(method,tfmdata,colrshapes) + dropchars = tfmdrop.characters + dropdescs = tfmdrop.descriptions + else + idx = idx + 1 + end + colrshapes[idx] = shape.code -- so not: description + -- todo: prepend + character.commands = { { "slot", slot, idx } } + -- hack to prevent that type 3 also gets 'use' flags .. todo + local c = { commands = false, index = idx, dropin = tfmdrop } +-- local d = { } -- index = idx, dropin = tfmdrop } + setmetatableindex(c,character) +-- setmetatableindex(d,description) + dropchars[idx] = c +-- dropdescs[idx] = d -- not needed + end + tfmdata.droppedin = droppedin + tfmdata.tfmdrop = tfmdrop + tfmdata.dropchars = dropchars +-- tfmdata.dropdescs = dropdescs + tfmdata.colrshapes = colrshapes + tfmdata.dropindex = idx + tfmdata.dropslot = slot + return + end + end + end do -- this will move to its own module @@ -171,13 +267,22 @@ do -- this will move to its own module local v = { glyphs = { }, parameters = { - units = 1000 + units = 10 }, } t[k] = v return v end) + function dropins.getshape(name,n) + local s = shapes[name] + return s and s.glyphs and s.glyphs[n] + end + + function dropins.getshapes(name) + return shapes[name] + end + function dropins.registerglyphs(parameters) local category = parameters.name local target = shapes[category].parameters @@ -308,16 +413,22 @@ do -- this will move to its own module local wd = shape.width or defaultwidth local ht = shape.height or defaultheight local dp = shape.depth or defaultdepth + local bb = shape.boundingbox local uc = shape.tounicode if uc then uc = round(uc) -- brrr can be 123.0 end + if bb then + for i=1,4 do bb[i] = scale * bb[i] end + end local newc = { - index = index, -- into usedshapes - width = scale * (wd + spread), - height = scale * ht, - depth = scale * dp, - unicode = uc or unicode, + index = index, -- into usedshapes -- used? + width = scale * (wd + spread), + height = scale * ht, + depth = scale * dp, + boundingbox = bb, + unicode = uc or unicode, + -- shape = shape, -- maybe a copy } -- characters [unicode] = newc diff --git a/tex/context/base/mkxl/font-set.mklx b/tex/context/base/mkxl/font-set.mklx index 44d4cff15..fd6a2f1ff 100644 --- a/tex/context/base/mkxl/font-set.mklx +++ b/tex/context/base/mkxl/font-set.mklx @@ -75,7 +75,6 @@ \glet\font_preloads_first_stage \relax \glet\font_preloads_second_stage \relax %\glet\font_preloads_third_stage \relax - \glet\fourthstagepreloadfonts \relax \global\everyhbox\emptytoks \global\everyvbox\emptytoks % old: \font_preloads_reset_nullfont, new: diff --git a/tex/context/base/mkxl/lang-ini.mkxl b/tex/context/base/mkxl/lang-ini.mkxl index 2644d1d76..c95f57fda 100644 --- a/tex/context/base/mkxl/lang-ini.mkxl +++ b/tex/context/base/mkxl/lang-ini.mkxl @@ -138,16 +138,16 @@ {\setcurrentlanguage\currentmainlanguage{#1}} \permanent\protected\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current) - {\edef\xaskedlanguage{#1}% otherwise clash with \askedlanguage - \ifempty\xaskedlanguage \else + {\edef\p_askedlanguage{#1}% otherwise clash with \askedlanguage + \ifempty\p_askedlanguage \else \ifempty\currentmainlanguage\else\resetsystemmode{\systemmodeprefix\currentmainlanguage}\fi - \let\currentmainlanguage\xaskedlanguage + \let\currentmainlanguage\p_askedlanguage \setsystemmode{\systemmodeprefix\currentmainlanguage}% \fi - \edef\xaskedlanguage{#2}% - \ifempty\xaskedlanguage \else + \edef\p_askedlanguage{#2}% + \ifempty\p_askedlanguage \else \ifempty\currentlanguage\else\resetsystemmode\currentlanguage\fi - \let\currentlanguage\xaskedlanguage + \let\currentlanguage\p_askedlanguage \setsystemmode\currentlanguage \fi} diff --git a/tex/context/base/mkxl/lpdf-col.lmt b/tex/context/base/mkxl/lpdf-col.lmt index a999cb2c7..ea60e0551 100644 --- a/tex/context/base/mkxl/lpdf-col.lmt +++ b/tex/context/base/mkxl/lpdf-col.lmt @@ -785,7 +785,8 @@ do end vfinjectors.stopcolor = function() - pdfprint("text", "Q") + -- pdfprint("text", "Q") + pdfprint("page", "Q") end end) diff --git a/tex/context/base/mkxl/lpdf-emb.lmt b/tex/context/base/mkxl/lpdf-emb.lmt index 53bbfe5da..796b9dfd1 100644 --- a/tex/context/base/mkxl/lpdf-emb.lmt +++ b/tex/context/base/mkxl/lpdf-emb.lmt @@ -1642,7 +1642,7 @@ do if decompress then mp = decompress(mp) end - local pdf = simplemprun(instance,mp,true) -- can be sped up, minifun + local pdf = simplemprun(instance,mp,true) local width = width * factor if usecolor then return f_stream_c(width,pdf), width diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index b57557aee..a0c730b71 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -899,7 +899,9 @@ do flushers.startclipping = function(current,pos_h,pos_v) flushsave(current,pos_h,pos_v) - flushliteral("origin",formatters["0 w %s W n"](properties[current].path)) + -- lpdf.print("origin",formatters["0 w %s W n"](nodeproperties[current].path)) + pdf_goto_pagemode() + b = b + 1 ; buffer[b] = formatters["0 w %s W n"](nodeproperties[current].path) end flushers.stopclipping = function(current,pos_h,pos_v) @@ -2368,7 +2370,7 @@ local openfile, closefile do local f_link = formatters["%010i 00000 f\013\010"] local f_first = formatters["%010i 65535 f\013\010"] - local f_pdf = formatters["%%PDF-%i.%i\010"] + local f_pdf_tag = formatters["%%PDF-%i.%i\010"] local f_xref = formatters["xref\0100 %i\010"] local f_trailer_id = formatters["trailer\010<< %s /ID [ <%s> <%s> ] >>\010startxref\010%i\010%%%%EOF"] local f_trailer_no = formatters["trailer\010<< %s >>\010startxref\010%i\010%%%%EOF"] @@ -2422,7 +2424,7 @@ local openfile, closefile do f:write(s) end end - local v = f_pdf(majorversion,minorversion) + local v = f_pdf_tag(majorversion,minorversion) -- local b = "%\xCC\xD5\xC1\xD4\xC5\xD8\xD0\xC4\xC6\010" -- LUATEXPDF (+128) local b = "%\xC3\xCF\xCE\xD4\xC5\xD8\xD4\xD0\xC4\xC6\010" -- CONTEXTPDF (+128) flush(f,v) @@ -2631,7 +2633,7 @@ local openfile, closefile do flush(f,f_trailer_no(trailer(),xrefoffset)) end end - update(f,f_pdf(majorversion,minorversion)) + update(f,f_pdf_tag(majorversion,minorversion)) close(f) end io.flush() diff --git a/tex/context/base/mkxl/math-stc.mklx b/tex/context/base/mkxl/math-stc.mklx index 1f9047394..e7541f61c 100644 --- a/tex/context/base/mkxl/math-stc.mklx +++ b/tex/context/base/mkxl/math-stc.mklx @@ -895,11 +895,11 @@ \permanent\tolerant\protected\def\mathovertext[#category]% {\begingroup - \math_stackers_direct_double_text\plusone {\ifargument#category\or#category\else\v!top\fi}} + \math_stackers_direct_double_text\plusone {\ifarguments#category\or#category\else\v!top\fi}} \permanent\tolerant\protected\def\mathundertext[#category]% {\begingroup - \math_stackers_direct_double_text\zerocount{\ifargument#category\or#category\else\v!bottom\fi}} + \math_stackers_direct_double_text\zerocount{\ifarguments#category\or#category\else\v!bottom\fi}} \def\math_stackers_direct_double_text#where#category#codepoint#text#extra%% {\math_stackers_make_double_text#where{#category}{#codepoint}{#text}{#extra}% @@ -910,7 +910,7 @@ \permanent\tolerant\protected\def\mathtriplet[#category]#:#middletext#toptext#bottomtext% {\begingroup - \math_stackers_triplet\plusone{\ifargument#category\or#category\else\currentmathstackers\fi}{#middletext}{#toptext}{#bottomtext}% + \math_stackers_triplet\plusone{\ifarguments#category\or#category\else\currentmathstackers\fi}{#middletext}{#toptext}{#bottomtext}% \endgroup} \permanent\tolerant\protected\def\definemathtriplet[#1]#*[#2]#*[#3]% category name default diff --git a/tex/context/base/mkxl/meta-fnt.lmt b/tex/context/base/mkxl/meta-fnt.lmt index a0feb0b52..91acd9c02 100644 --- a/tex/context/base/mkxl/meta-fnt.lmt +++ b/tex/context/base/mkxl/meta-fnt.lmt @@ -28,3 +28,123 @@ end -- fontname = "bidi", -- filename = "bidi-symbols.mp", -- } + +-- okay, let's for the moment put this here: + +local tonumber = tonumber +local find = string.find + +local context = context + +local fastserialize = table.fastserialize +local settings_to_hash = utilities.parsers.settings_to_hash +local settings_to_array = utilities.parsers.settings_to_array + +local addcharacters = fonts.constructors.addcharacters +local fontdata = fonts.hashes.identifiers + +-- This is a prelude to a more advance mechanism: when we are in mp we can construct the +-- whole composed character there. + +function fonts.helpers.combineglyphs(fnt, specification) + local hash = fastserialize(specification) + local fontid = fnt or font.current() + local tfmdata = fontdata[fontid] + local combhash = tfmdata.combhash or { } + local unicode = combhash[hash] + if not unicode then + local t = { } + local h = 0 + local d = 0 + local w = 0 + local o = 0 + local characters = tfmdata.characters + for i=1,#specification do + local s = specification[i] + local l = find(s,"=") and settings_to_hash(s) + local n = tonumber(l and l.unicode or s) or tonumber(s) + if n then + local data = characters[n] + if data then + local bb = data.boundingbox + if bb then + local llx = bb[1] + local lly = bb[2] + local urx = bb[3] + local ury = bb[4] + if ury > h then + h = ury + elseif - ury > d then + d = - ury + end + if - lly > d then + d = - lly + elseif lly > h then + h = lly + end + if llx < o then + o = llx + end + -- could be an extension to the "offset" command + local c = l and l.color + if c then + t[#t+1] = { "startcolor", c } + end + t[#t+1] = { "offset", 0, 0, n } + if c then + t[#t+1] = { "stopcolor" } + end + -- t[#t+1] = { "push" } + -- if c then + -- t[#t+1] = { "startcolor", c } + -- end + -- t[#t+1] = { "right", 0 } + -- t[#t+1] = { "char", n } + -- if c then + -- t[#t+1] = { "stopcolor" } + -- end + -- t[#t+1] = { "pop" } + if urx > w then + w = urx + end + else + local ht = data.height or 0 if ht > h then h = ht end + local dp = data.depth or 0 if dp > d then d = dp end + local wd = data.width or 0 if wd > w then w = wd end + t[#t+1] = { "char", n } + end + end + end + end + for i=1,#t do +-- if t[i][1] == "right" then + if t[i][1] == "offset" then + t[i][2] = -o +-- t[i][2] = o + end + end + -- cheat one: we get a private slot + unicode = fonts.helpers.addprivate(tfmdata,nil,{ + commands = t, + width = w - o, + height = h, + depth = d, + }) + -- cheat two: we overload it later + addcharacters(fontid,{ characters = { [unicode] = characters[unicode] } }) + tfmdata.combhash = combhash + combhash[hash] = unicode + end + return unicode +end + +interfaces.implement { + name = "combineglyphs", + public = true, + arguments = "string", + actions = function(list) + local list = settings_to_array(list) + local unicode = fonts.helpers.combineglyphs(font.current(),list) + context(unicode) + end, +} diff --git a/tex/context/base/mkxl/meta-fnt.mkxl b/tex/context/base/mkxl/meta-fnt.mkxl index 0a2cab991..45d1db298 100644 --- a/tex/context/base/mkxl/meta-fnt.mkxl +++ b/tex/context/base/mkxl/meta-fnt.mkxl @@ -14,6 +14,7 @@ \writestatus{loading}{MetaPost Graphics / Fonts} \registerctxluafile{meta-fnt}{autosuffix} +\registerctxluafile{font-mpf}{autosuffix} \unprotect diff --git a/tex/context/base/mkxl/meta-imp-demo.mkxl b/tex/context/base/mkxl/meta-imp-demo.mkxl new file mode 100644 index 000000000..220d5206d --- /dev/null +++ b/tex/context/base/mkxl/meta-imp-demo.mkxl @@ -0,0 +1,187 @@ +%D \module +%D [ file=meta-imp-demo, +%D version=2021.01.21, +%D title=\METAPOST\ Graphics, +%D subtitle=Demo Font, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This is just a demo of defining a font in \METAPOST. The rendering as well as definitions +%D are delayed till we actually need the glyph. + +\startMPcalculation{simplefun} + + picture DemoSnippets[]; + + vardef DemoCircle = image(fill fullcircle scaled 10 ;) enddef ; + vardef DemoCenter = image(fill fullcircle scaled 3 ;) enddef ; + + vardef DemoLeft = image(fill fullcircle scaled 3 shifted (-5, 0) ;) enddef ; + vardef DemoRight = image(fill fullcircle scaled 3 shifted ( 5, 0) ;) enddef ; + vardef DemoUp = image(fill fullcircle scaled 3 shifted ( 0, 5) ;) enddef ; + vardef DemoDown = image(fill fullcircle scaled 3 shifted ( 0,-5) ;) enddef ; + vardef DemoLowerLeft = image(fill fullcircle scaled 3 shifted (-5,-5) ;) enddef ; + vardef DemoLowerRight = image(fill fullcircle scaled 3 shifted ( 5,-5) ;) enddef ; + vardef DemoUpperRight = image(fill fullcircle scaled 3 shifted ( 5, 5) ;) enddef ; + vardef DemoUpperLeft = image(fill fullcircle scaled 3 shifted (-5, 5) ;) enddef ; + + vardef DemoGlyph = + composeglyph(DemoSnippets) ; + enddef ; + + lmt_registerglyphs [ + name = "demo", + units = 10, + width = 10, + height = 10, + depth = 0, + ] ; + + % we need to set up some basics (signals to the backend and such) at definition + % time so we just force a bogus shape (zero) + + lmt_registerglyph [ + category = "demo", + ] ; + +\stopMPcalculation + +\startluacode + +metapost.metafonts.demo = { + [utf.byte("g")] = { + code = "DemoGlyph", + shapes = { + { shape = "DemoCircle", color = "gray" }, + { shape = "DemoLeft", color = "cyan" }, + { shape = "DemoUp", color = "magenta" }, + { shape = "DemoCenter", color = "yellow" }, + } + }, + [utf.byte("h")] = { + code = "DemoGlyph", + shapes = { + { shape = "DemoCircle", color = "gray" }, + { shape = "DemoRight", color = "red" }, + { shape = "DemoDown", color = "green" }, + { shape = "DemoCenter", color = "blue" }, + } + }, + [19] = { + code = "DemoGlyph", + shapes = { + { shape = "DemoCircle", color = "gray" }, + { shape = "DemoUp", color = "darkgray" }, + { shape = "DemoDown", color = "darkgray" }, + { shape = "DemoLeft", color = "darkgray" }, + { shape = "DemoRight", color = "darkgray" }, + { shape = "DemoCenter", color = "darkgray" }, + } + }, + ["weirdsymbol"] = { + code = "DemoGlyph", + shapes = { + { shape = "DemoCircle", color = "middlegray" }, + { shape = "DemoUp", color = "red" }, + { shape = "DemoDown", color = "green" }, + { shape = "DemoLeft", color = "blue" }, + { shape = "DemoRight", color = "magenta" }, + { shape = "DemoCenter", color = "yellow" }, + } + }, + ["weirdersymbol"] = { + code = "DemoGlyph", + shapes = { + -- { shape = "DemoCircle", color = "gray" }, + { shape = "DemoCenter", color = "darkgray" }, + { shape = "DemoLowerLeft", color = "red" }, + { shape = "DemoLowerRight", color = "green" }, + { shape = "DemoUpperRight", color = "blue" }, + { shape = "DemoUpperLeft", color = "yellow" }, + { shape = "DemoUp", color = "darkred" }, + { shape = "DemoDown", color = "darkgreen" }, + { shape = "DemoLeft", color = "darkblue" }, + { shape = "DemoRight", color = "darkmagenta" }, + } + } +} + +\stopluacode + +\continueifinputfile{meta-imp-demo.mkxl} + +\setuplayout[tight] + +\setupbodyfont[dejavu] + +\definefontfeature[demo][metapost=demo,metafont=demo] + +\definefont[DemoA][Serif*demo] +\definefont[DemoB][Serif*demo sa .5] +\definefont[DemoC][Serif*demo sa .25] + +\starttext + + \startbuffer + x\ruledhbox{gh}% + x\ruledhbox{\char19}% + x\privatecharacter{weirdsymbol}% + x\privatecharacter{weirdersymbol}% + x% + \stopbuffer + + \startTEXpage[offset=2pt] + \DemoA\getbuffer\par + \DemoB\getbuffer\quad\DemoC\getbuffer\par + \stopTEXpage + + {\DemoA\ctxlua{fonts.helpers.setmetaglyph { + category = "demo", + name = "whatever", + code = "DemoGlyph", + shapes = { + { shape = "DemoCenter", color = "darkgray" }, + { shape = "DemoLowerLeft", color = "darkred" }, + { shape = "DemoLowerRight", color = "darkgreen" }, + { shape = "DemoUpperRight", color = "darkblue" }, + { shape = "DemoUpperLeft", color = "darkyellow" }, + { shape = "DemoUp", color = "red" }, + { shape = "DemoDown", color = "green" }, + { shape = "DemoLeft", color = "blue" }, + { shape = "DemoRight", color = "magenta" }, + } + }}} + + {\DemoA\setmetaglyph { + category {demo} + name {forever} + code {DemoGlyph} + shapes { + { shape {DemoCenter} color {middlegray} } + { shape {DemoLowerLeft} color {darkgray} } + { shape {DemoLowerRight} color {darkgray} } + { shape {DemoUpperRight} color {darkgray} } + { shape {DemoUpperLeft} color {darkgray} } + { shape {DemoUp} color {lightgray} } + { shape {DemoDown} color {lightgray} } + { shape {DemoLeft} color {lightgray} } + { shape {DemoRight} color {lightgray} } + } + }} + + \startTEXpage[offset=2pt] + \DemoA + \privatecharacter{whatever} + \privatecharacter{forever} + \stopTEXpage + + \DemoA\setupinterlinespace \dorecurse{10}{\dorecurse{1000}{g h }\par}\page + \DemoB\setupinterlinespace \dorecurse{20}{\dorecurse{1000}{g h }\par}\page + \DemoC\setupinterlinespace \dorecurse{30}{\dorecurse{1000}{g h }\par}\page + +\stoptext diff --git a/tex/context/base/mkxl/meta-ini.mkxl b/tex/context/base/mkxl/meta-ini.mkxl index 70fab112b..d9b8eeff8 100644 --- a/tex/context/base/mkxl/meta-ini.mkxl +++ b/tex/context/base/mkxl/meta-ini.mkxl @@ -876,7 +876,7 @@ \permanent\protected\def\resetMPenvironment {\clf_mptexreset} -\protected\def\useMPenvironmentbuffer[#1]% +\permanent\protected\def\useMPenvironmentbuffer[#1]% {\clf_mptexsetfrombuffer{#1}} %D This command takes \type {[reset]} as optional argument. diff --git a/tex/context/base/mkxl/mult-aux.mkxl b/tex/context/base/mkxl/mult-aux.mkxl index a8ab97fb1..5db4c1677 100644 --- a/tex/context/base/mkxl/mult-aux.mkxl +++ b/tex/context/base/mkxl/mult-aux.mkxl @@ -746,7 +746,7 @@ % yes:\twoparameter{beta}\par \permanent\protected\def\relateparameterhandlers#1#2#3#4% {from} {instance} {to} {instance} - {\immutable\edefcsname#1namespace\endcsname#2:\s!parent\endcsname{\csname#3namespace\endcsname#4}} + {\immutable\edefcsname\csname#1namespace\endcsname#2:\s!parent\endcsname{\csname#3namespace\endcsname#4}} \permanent\protected\def\relateparameterhandlersbyns#1#2#3#4% {from} {instance} {to} {instance} {\edefcsname#1#2:\s!parent\endcsname{#3#4}} diff --git a/tex/context/base/mkxl/mult-ini.mkxl b/tex/context/base/mkxl/mult-ini.mkxl index 1dad4858a..ce8d12069 100644 --- a/tex/context/base/mkxl/mult-ini.mkxl +++ b/tex/context/base/mkxl/mult-ini.mkxl @@ -366,7 +366,7 @@ \def\mult_messages_start_nop#1#2\stopmessages {\endgroup} -\let\stopmessages\relax +\aliased\let\stopmessages\relax \permanent\protected\def\setinterfacemessage#1#2#3% {\ifcsname\m!prefix!#1\endcsname\else\immutable\setgvalue{\m!prefix!#1}{#1}\fi diff --git a/tex/context/base/mkxl/pack-lyr.mkxl b/tex/context/base/mkxl/pack-lyr.mkxl index ccf4290d4..2950782f7 100644 --- a/tex/context/base/mkxl/pack-lyr.mkxl +++ b/tex/context/base/mkxl/pack-lyr.mkxl @@ -143,11 +143,11 @@ \newdimen\layerwidth \newdimen\layerheight -\let\lastlayerxpos\!!zeropoint -\let\lastlayerypos\!!zeropoint -\let\lastlayerwd \!!zeropoint -\let\lastlayerht \!!zeropoint -\let\lastlayerdp \!!zeropoint +\mutable\let\lastlayerxpos\!!zeropoint +\mutable\let\lastlayerypos\!!zeropoint +\mutable\let\lastlayerwd \!!zeropoint +\mutable\let\lastlayerht \!!zeropoint +\mutable\let\lastlayerdp \!!zeropoint \appendtoks \edef\p_pack_layers_doublesided{\layerparameter\c!doublesided}% @@ -370,11 +370,11 @@ \global\setbox\layerpagebox\vpack %to \layerparameter\c!height % new, otherwise no negative y possible {\offinterlineskip \ifvoid\layerpagebox - \let\lastlayerwidth \zeropoint - \let\lastlayerheight\zeropoint + \scratchwidth \zeropoint + \scratchheight\zeropoint \else - \edef\lastlayerwidth {\the\wd\layerpagebox}% - \edef\lastlayerheight{\the\ht\layerpagebox}% + \scratchwidth \wd\layerpagebox + \scratchheight\ht\layerpagebox \ht\layerpagebox\zeropoint \dp\layerpagebox\zeropoint \wd\layerpagebox\zeropoint @@ -410,14 +410,14 @@ \gsetboxllx\layerpagebox\scratchdimen \fi \advance\scratchdimen\wd\nextbox - \wd\nextbox\ifdim\scratchdimen>\lastlayerwidth \scratchdimen \else \lastlayerwidth \fi + \wd\nextbox\ifdim\scratchdimen>\scratchwidth \scratchdimen \else \scratchwidth \fi \scratchdimen\dimexpr\d_pack_layers_y_position+\d_pack_layers_y_offset\relax \ifdim\scratchdimen<\getboxlly\layerpagebox \gsetboxlly\layerpagebox\scratchdimen \fi % ll compensation \advance\scratchdimen\dimexpr\ht\nextbox+\dp\nextbox\relax - \ht\nextbox\ifdim\scratchdimen>\lastlayerheight \scratchdimen \else \lastlayerheight \fi + \ht\nextbox\ifdim\scratchdimen>\scratchheight \scratchdimen \else \scratchheight \fi \dp\nextbox\zeropoint % placement \hsize\p_pack_layers_width diff --git a/tex/context/base/mkxl/pack-rul.mkxl b/tex/context/base/mkxl/pack-rul.mkxl index 18a667dd6..d3db64d2e 100644 --- a/tex/context/base/mkxl/pack-rul.mkxl +++ b/tex/context/base/mkxl/pack-rul.mkxl @@ -943,7 +943,7 @@ \pack_framed_initialize \pack_framed_process_box_indeed} % group ends here -\let\postprocessframebox\relax +\mutable\let\postprocessframebox\relax %D A nice example by Aditya: %D diff --git a/tex/context/base/mkxl/page-bck.mkxl b/tex/context/base/mkxl/page-bck.mkxl index 5bdeb53fa..9790cf3bf 100644 --- a/tex/context/base/mkxl/page-bck.mkxl +++ b/tex/context/base/mkxl/page-bck.mkxl @@ -352,7 +352,7 @@ \def\page_backgrounds_set_box#1% #2% {\global\setbox#1\vpack {\dontcomplain - \swapmargins + \page_layouts_swap_margins \ifconditional\swapbackgroundmargins \doifelsemarginswap \donothing {\enforced\swapcsvalues\v!rightmargin\v!leftmargin @@ -361,7 +361,7 @@ \calculatereducedvsizes \offinterlineskip % \ifconditional#2\relax - % \doswapmargins % hm, this one gets nilled in \swapmargins anyway + % \page_layouts_swap_margins_indeed % hm, this one gets nilled in \page_layouts_swap_margin anyway % \fi \ifdim\topheight>\zeropoint \kern\dimexpr-\topheight-\topdistance\relax diff --git a/tex/context/base/mkxl/page-lay.mkxl b/tex/context/base/mkxl/page-lay.mkxl index 01098ae3b..dbdcfc323 100644 --- a/tex/context/base/mkxl/page-lay.mkxl +++ b/tex/context/base/mkxl/page-lay.mkxl @@ -1233,12 +1233,12 @@ \aliased\let\doifmarginswapelse\doifelsemarginswap -\def\swapmargins % name will change, frozen? - {\doifelsemarginswap\relax\doswapmargins} +\protected\def\page_layouts_swap_margins % name will change, frozen? + {\doifelsemarginswap\relax\page_layouts_swap_margins_indeed} -\permanent\protected\def\doswapmargins - {\enforced\let\swapmargins \relax % to prevent local swapping - \enforced\let\doswapmargins\relax % to prevent local swapping +\protected\def\page_layouts_swap_margins_indeed + {\let\page_layouts_swap_margins \relax % to prevent local swapping + \let\page_layouts_swap_margins_indeed\relax % to prevent local swapping \the\everyswapmargins} \permanent\def\rightorleftpageaction diff --git a/tex/context/base/mkxl/page-one.mkxl b/tex/context/base/mkxl/page-one.mkxl index 2169c6018..444feff1d 100644 --- a/tex/context/base/mkxl/page-one.mkxl +++ b/tex/context/base/mkxl/page-one.mkxl @@ -216,8 +216,8 @@ \vskip\s_page_one_between_top_insert \egroup} -\let\totaltopinserted\!!zeropoint -\let\totalbotinserted\!!zeropoint +\mutable\let\totaltopinserted\!!zeropoint +\mutable\let\totalbotinserted\!!zeropoint \protected\def\page_one_command_set_top_insertions {\bgroup diff --git a/tex/context/base/mkxl/page-txt.mklx b/tex/context/base/mkxl/page-txt.mklx index b20650341..a5a5a97ab 100644 --- a/tex/context/base/mkxl/page-txt.mklx +++ b/tex/context/base/mkxl/page-txt.mklx @@ -854,7 +854,7 @@ {\setbox\b_page_layouts_element\vpack {\dontcomplain \calculatereducedvsizes - \swapmargins + \page_layouts_swap_margins \offinterlineskip \vkern\dimexpr-\topheight-\topdistance\relax \the\toptextcontent @@ -888,13 +888,13 @@ {\offinterlineskip \calculatereducedvsizes \calculatehsizes - \swapmargins + \page_layouts_swap_margins \vkern\dimexpr\headerheight+\headerdistance+\textdistance\relax \dontleavehmode %\page_prepare_backgrounds{#2}% \hpack to \makeupwidth {\begingroup - \swapmargins + \page_layouts_swap_margins \goleftonpage \ifdim\leftedgewidth>\zeropoint \the\leftedgetextcontent diff --git a/tex/context/base/mkxl/publ-ini.mkxl b/tex/context/base/mkxl/publ-ini.mkxl index 0104cc4eb..c2d421e4c 100644 --- a/tex/context/base/mkxl/publ-ini.mkxl +++ b/tex/context/base/mkxl/publ-ini.mkxl @@ -1893,14 +1893,14 @@ {\begingroup \let\savedcurrentbtx\currentbtx \def\currentbtx{#1}% - \usebtxstyle\c!style + \usebtxstyleparameter\c!style \let\currentbtx\savedcurrentbtx} \permanent\protected\def\btxstartcolor[#1]% {\begingroup \let\savedcurrentbtx\currentbtx \def\currentbtx{#1}% - \usebtxcolor\c!color + \usebtxcolorparameter\c!color \let\currentbtx\savedcurrentbtx} \permanent\protected\def\btxstartstyleandcolor[#1]% diff --git a/tex/context/base/mkxl/spac-ali.mkxl b/tex/context/base/mkxl/spac-ali.mkxl index d0530d138..56ac53a3e 100644 --- a/tex/context/base/mkxl/spac-ali.mkxl +++ b/tex/context/base/mkxl/spac-ali.mkxl @@ -292,7 +292,7 @@ \parfillleftskip \zeropoint \parfillskip \s_zero_plus_one_fil % new \setfalse \raggedonelinerstate % now here - \let\updateraggedskips\relax} % no need for adaption + \enforced\aliased\let\updateraggedskips\relax} % no need for adaption \permanent\protected\def\spac_align_set_horizontal_left {\setraggedness \spac_align_set_raggedness_left @@ -537,8 +537,8 @@ \newtoks\t_spac_align_collected -\let\raggedcommand \relax -\let\updateraggedskips\relax +\aliased\let\raggedcommand \relax +\aliased\let\updateraggedskips\relax \def\spac_align_add_to_cache {\enforced\let\raggedbox\relax % why @@ -564,10 +564,10 @@ \spac_align_flush_page \spac_align_flush_parfill }}% kept, nice for tracing - \edef\raggedcommand {\the\t_spac_align_collected }% - \edef\updateraggedskips{\spac_align_flush_horizontal}% - \gletcsname\??alignmentnormalcache\m_spac_align_asked\endcsname\raggedcommand - \gletcsname\??alignmentraggedcache\m_spac_align_asked\endcsname\updateraggedskips} + \enforced\permanent\protected\edef\raggedcommand {\the\t_spac_align_collected }% + \enforced\permanent\protected\edef\updateraggedskips{\spac_align_flush_horizontal}% + \enforced\aliased\gletcsname\??alignmentnormalcache\m_spac_align_asked\endcsname\raggedcommand + \enforced\aliased\gletcsname\??alignmentraggedcache\m_spac_align_asked\endcsname\updateraggedskips} \def\spac_align_collect#1% {\csname\??aligncommand#1\endcsname} @@ -576,11 +576,11 @@ \permanent\protected\def\spac_align_prepare#1% deferred {\edef\m_spac_align_asked{#1}% - \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname + \enforced\aliased\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifrelax\raggedcommand \spac_align_add_to_cache \else - \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname + \enforced\aliased\expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname \fi} \aliased\let\dosetraggedcommand\spac_align_prepare % sort of public @@ -589,11 +589,11 @@ \permanent\tolerant\protected\def\setupalign[#1]% immediate {\edef\m_spac_align_asked{#1}% - \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname + \enforced\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifrelax\raggedcommand \spac_align_add_to_cache \else - \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname + \enforced\aliased\expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname \fi \raggedcommand} @@ -610,11 +610,11 @@ \fi} \def\spac_align_use_indeed - {\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname + {\enforced\aliased\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifrelax\raggedcommand \spac_align_add_to_cache \else - \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname + \enforced\aliased\expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname \fi \raggedcommand} @@ -623,7 +623,7 @@ \protected\def\spac_align_use_later#1% {\begingroup \edef\m_spac_align_asked{#1}% - \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname + \enforced\aliased\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname \ifrelax\raggedcommand \spac_align_add_to_cache \fi @@ -848,7 +848,7 @@ % be aware of possible interference. \permanent\protected\def\setraggedskips#1#2#3#4#5#6#7% never change this name (todo: inline this one .. less tracingall) - {\protected\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% + {\enforced\permanent\protected\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% \updateraggedskips} \permanent\protected\def\dosetraggedskips#1#2#3#4#5#6#7% diff --git a/tex/context/base/mkxl/spac-ver.mkxl b/tex/context/base/mkxl/spac-ver.mkxl index fe74ee06e..9a7912abf 100644 --- a/tex/context/base/mkxl/spac-ver.mkxl +++ b/tex/context/base/mkxl/spac-ver.mkxl @@ -1234,8 +1234,8 @@ \permanent\protected\def\pseudostrut {\noindent} % better: \dontleavehmode -\let\pseudobegstrut\pseudostrut -\let\pseudoendstrut\removeunwantedspaces +\aliased\let\pseudobegstrut\pseudostrut +\aliased\let\pseudoendstrut\removeunwantedspaces \permanent\protected\def\resetteststrut {\strutwidth\zeropoint diff --git a/tex/context/base/mkxl/strc-flt.mklx b/tex/context/base/mkxl/strc-flt.mklx index d55a6c77e..58c72c0fc 100644 --- a/tex/context/base/mkxl/strc-flt.mklx +++ b/tex/context/base/mkxl/strc-flt.mklx @@ -595,8 +595,8 @@ \let\m_strc_floats_saved_userdata\empty \let\currentfloatcaption\currentfloat} -\let\askedfloatmethod \empty -\let\askedfloatoptions\empty +\mutable\let\askedfloatmethod \empty +\mutable\let\askedfloatoptions\empty \def\strc_floats_reset_variables {\global\emptyfloatcaptionfalse diff --git a/tex/context/base/mkxl/strc-itm.mklx b/tex/context/base/mkxl/strc-itm.mklx index 33d5c324d..01155fa10 100644 --- a/tex/context/base/mkxl/strc-itm.mklx +++ b/tex/context/base/mkxl/strc-itm.mklx @@ -1132,7 +1132,7 @@ % \stopitemize % \stopitemize -\tolerant\protected\def\startitemgroupitem[#reference]% we can reuse more +\tolerant\permanent\protected\def\startitemgroupitem[#reference]% we can reuse more {\def\currentitemreference{#reference}% \ifconditional\c_strc_itemgroups_text % begin of item @@ -1170,7 +1170,7 @@ \hskip\d_strc_itemgroups_signal % concat \itemgroupparameter\c!command} -\protected\def\stopitemgroupitem +\protected\permanent\def\stopitemgroupitem {\ifhmode \endstrut % new per 2017-12-15 \fi @@ -1180,7 +1180,7 @@ \endgraf \fi} -\tolerant\protected\def\startitemgrouphead[#reference]% +\tolerant\permanent\protected\def\startitemgrouphead[#reference]% {\ifconditional\c_strc_itemgroups_first \else \strc_itemgroups_insert_breakallow \fi @@ -1201,7 +1201,7 @@ \strc_itemgroups_stop_head_indeed \strc_itemgroups_head_body_indeed} -\protected\def\stopitemgrouphead +\protected\permanent\def\stopitemgrouphead {\dostoptagged \stopitemgroupitem} @@ -1306,14 +1306,14 @@ {\dorecurse{0\itemgroupparameter\c!items}{\strc_itemgroups_used_symbol\hss}% \unskip}} -\protected\def\startspecialitemgroupitem[#name]% todo: frozen +\protected\permanent\def\startspecialitemgroupitem[#name]% todo: frozen {\ifcsname\??itemgroupstart#name\endcsname \expandafter\lastnamedcs \else \expandafter\strc_itemgroups_start_do_item \fi} -\protected\def\stopspecialitemgroupitem % todo: frozen +\protected\permanent\def\stopspecialitemgroupitem % todo: frozen {\stopitemgroupitem} \letvalue{\??itemgroupstart\v!item}\strc_itemgroups_start_do_item @@ -1579,25 +1579,25 @@ %D The local commands: -\ifdefined\item \else \let\item \relax \fi -\ifdefined\sub \else \let\sub \relax \fi -\ifdefined\sym \else \let\sym \relax \fi -\ifdefined\ran \else \let\ran \relax \fi -\ifdefined\its \else \let\its \relax \fi -\ifdefined\mar \else \let\mar \relax \fi -\ifdefined\noitem \else \let\noitem \relax \fi -\ifdefined\itm \else \let\itm \relax \fi -\ifdefined\but \else \let\but \relax \fi -\ifdefined\nop \else \let\nop \relax \fi -\ifdefined\txt \else \let\txt \relax \fi -\ifdefined\head \else \let\head \relax \fi -\ifdefined\headsym \else \let\headsym \relax \fi -\ifdefined\startitem \else \let\startitem \relax \fi -\ifdefined\stopitem \else \let\stopitem \relax \fi -\ifdefined\starthead \else \let\starthead \relax \fi -\ifdefined\stophead \else \let\stophead \relax \fi -\ifdefined\startspecialitem \else \let\startspecialitem\relax \fi -\ifdefined\stopspecialitem \else \let\stopspecialitem \relax \fi +\ifdefined\item \else \let\item \relax \fi % defined later +\ifdefined\sub \else \aliased\let\sub \relax \fi +\ifdefined\sym \else \aliased\let\sym \relax \fi +\ifdefined\ran \else \aliased\let\ran \relax \fi +\ifdefined\its \else \aliased\let\its \relax \fi +\ifdefined\mar \else \aliased\let\mar \relax \fi +\ifdefined\noitem \else \aliased\let\noitem \relax \fi +\ifdefined\itm \else \aliased\let\itm \relax \fi +\ifdefined\but \else \aliased\let\but \relax \fi +\ifdefined\nop \else \aliased\let\nop \relax \fi +\ifdefined\txt \else \aliased\let\txt \relax \fi +\ifdefined\head \else \let\head \relax \fi % defined later +\ifdefined\headsym \else \aliased\let\headsym \relax \fi +\ifdefined\startitem \else \let\startitem \relax \fi % defined later +\ifdefined\stopitem \else \aliased\let\stopitem \relax \fi +\ifdefined\starthead \else \aliased\let\starthead \relax \fi +\ifdefined\stophead \else \aliased\let\stophead \relax \fi +\ifdefined\startspecialitem \else \aliased\let\startspecialitem\relax \fi +\ifdefined\stopspecialitem \else \aliased\let\stopspecialitem \relax \fi \appendtoks @@ -1624,7 +1624,7 @@ \ifx\currentinterface \s!english \else - \def\next#1#2{\ifcsname#1\endcsname\else\enforced\letcsname#1\endcsname#2\fi} + \def\next#1#2{\ifcsname#1\endcsname\else\enforced\aliased\letcsname#1\endcsname#2\fi} \etoksapp\itemgroupcommands{% \next{\v!item }\strc_itemgroups_start_do_item @@ -1735,7 +1735,7 @@ \expandafter\strc_itemgroups_collected_flush \fi} -\protected\def\stopcollectitems % todo: frozen +\protected\permanent\def\stopcollectitems % todo: frozen {\ifconditional\c_strc_itemgroups_collecting \c_strc_itemgroups_collected_done \zerocount \c_strc_itemgroups_collected_current\zerocount @@ -1751,10 +1751,10 @@ \fi \fi} -\protected\def\startcollectitems % todo: frozen +\protected\permanent\def\startcollectitems % todo: frozen {\ifconditional\c_strc_itemgroups_collecting \c_strc_itemgroups_collected_stored\zerocount - \letcsname\e!start\v!item\endcsname\strc_itemgroups_collected_store + \enforced\letcsname\e!start\v!item\endcsname\strc_itemgroups_collected_store \fi} %D Left-overs: diff --git a/tex/context/base/mkxl/strc-lst.mklx b/tex/context/base/mkxl/strc-lst.mklx index 0b8c2e2a3..725faff9a 100644 --- a/tex/context/base/mkxl/strc-lst.mklx +++ b/tex/context/base/mkxl/strc-lst.mklx @@ -1551,9 +1551,9 @@ % todo: -\def\utilitylistlength{\listlength} % old name ... uses in styles +\permanent\def\utilitylistlength{\listlength} % also in strc-reg (downward compatible name) -\mutable\let\listlength\!!zerocount % better use listmode +\mutable\let\listlength\!!zerocount % also in strc-reg \permanent\tolerant\protected\def\determinelistcharacteristics[#list]#spacer[#settings]% {\begingroup diff --git a/tex/context/base/mkxl/strc-pag.mkxl b/tex/context/base/mkxl/strc-pag.mkxl index abab94e72..3af694e81 100644 --- a/tex/context/base/mkxl/strc-pag.mkxl +++ b/tex/context/base/mkxl/strc-pag.mkxl @@ -327,16 +327,6 @@ \strc_pagenumbers_set_location \to \everysetuppagenumbering -\appendtoks - \ifdefined\trackingmarginnotestrue - \ifdoublesided - \trackingmarginnotestrue - \else - \trackingmarginnotesfalse - \fi - \fi -\to \everysidedswitch - \ifdefined \page_backgrounds_recalculate \else \let\page_backgrounds_recalculate\relax \fi diff --git a/tex/context/base/mkxl/strc-ref.mklx b/tex/context/base/mkxl/strc-ref.mklx index 758f2855f..680cf2e29 100644 --- a/tex/context/base/mkxl/strc-ref.mklx +++ b/tex/context/base/mkxl/strc-ref.mklx @@ -736,6 +736,8 @@ %D When a reference is not found, we typeset a placeholder (two glyphs are often %D enough to represent the reference text). +% \askedreference defined in lua + \def\dummyreference{{\tttf ??}} \def\emptyreference{{\tttf !!}} diff --git a/tex/context/base/mkxl/strc-reg.mkxl b/tex/context/base/mkxl/strc-reg.mkxl index dcfdd0946..2a8cc50fe 100644 --- a/tex/context/base/mkxl/strc-reg.mkxl +++ b/tex/context/base/mkxl/strc-reg.mkxl @@ -602,13 +602,15 @@ % todo: c!language ipv s!language -\let\utilityregisterlength\!!zerocount +\permanent\def\utilityregisterlength{\listlength} % also in strc-lst (downward compatible name) + +% \mutable\let\listlength\!!zerocount % also in strc-lst \permanent\tolerant\protected\def\determineregistercharacteristics[#1]#*[#2]% {\begingroup \setupregister[#1][#2]% \edef\currentregister{\firstinset{#1}}% - \normalexpanded{\endgroup\noexpand\xdef\noexpand\utilityregisterlength{\clf_analyzeregister + \normalexpanded{\endgroup\noexpand\xdef\noexpand\listlength{\clf_analyzeregister {\currentregister}% {% language {\registerparameter\s!language}% diff --git a/tex/context/base/mkxl/strc-sec.mkxl b/tex/context/base/mkxl/strc-sec.mkxl index 81e0248e6..acc7e494e 100644 --- a/tex/context/base/mkxl/strc-sec.mkxl +++ b/tex/context/base/mkxl/strc-sec.mkxl @@ -888,6 +888,10 @@ \newtoks\everybeforesectionheadhandle \newtoks\everyaftersectionheadhandle +\mutable\let\getheadnumber\empty +\mutable\let\getheadtitle \empty +\mutable\let\getheadsyncs \empty + \def\strc_sectioning_handle#1#2#3% name data userdata (we can move #1 to the caller) {\xdef\currenthead {#1}% \xdef\currentheadcoupling{\sectionheadcoupling\currenthead}% diff --git a/tex/context/base/mkxl/syst-aux.mkxl b/tex/context/base/mkxl/syst-aux.mkxl index 9dea8e5bb..ce6177b3b 100644 --- a/tex/context/base/mkxl/syst-aux.mkxl +++ b/tex/context/base/mkxl/syst-aux.mkxl @@ -2769,7 +2769,7 @@ \permanent\protected\def\relaxvalueifundefined#1% {\ifcsname#1\endcsname \else - \letcsname#1\endcsname\relax + \aliased\letcsname#1\endcsname\relax \fi} %D \macros @@ -2778,7 +2778,7 @@ %D The next macro hardly needs explanation. Because no nesting is to be expected, we %D can reuse \type {\wait} within \type {\wait} itself. -\protected\def\wait +\permanent\protected\def\wait {\begingroup \read16 to \wait \endgroup} @@ -3003,7 +3003,7 @@ %D unexpected results, for instance execution of \type {\doif} even if both numbers %D are unequal. -\def\zerocountervalue{0} +\immutable\def\zerocountervalue{0} \permanent\protected\def\newcounter#1% {\dodoglobal\let#1\zerocountervalue} @@ -6241,7 +6241,7 @@ \permanent\protected\def\retestfeature % timer support is new per 10/5/2005 {\bgroup - \ifcase\interactionmode\let\wait\relax\fi + \ifcase\interactionmode\enforced\let\wait\relax\fi \clf_resettimer \c_syst_helpers_test_feature_n\zerocount \syst_helpers_test_feature_nop @@ -6263,7 +6263,7 @@ \permanent\protected\def\testfeatureonce#1#2% {\begingroup - \let\wait\relax + \enforced\let\wait\relax \testfeature{#1}{#2}% \endgroup} diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl index a12a83064..50b61231f 100644 --- a/tex/context/base/mkxl/syst-ini.mkxl +++ b/tex/context/base/mkxl/syst-ini.mkxl @@ -143,8 +143,11 @@ function tex.enableprimitives() end % so we kind of protect what's there } +\permanent\let\undefined\undefined + \immutable\def\space{ } \immutable\def\empty{} +\mutable \def\temp {} \immutable\letcharcode \formfeedasciicode \par % \def ^^L{\par} formfeed \immutable\letcharcode \tildeasciicode \ % tilde @@ -259,7 +262,7 @@ %D 255. Users can use the scratch registers upto 31 without problem but all others %D are reserved. -\let\wlog\gobbleoneargument % Let's get rid of this one. +\permanent\let\wlog\gobbleoneargument % Let's get rid of this one. %D The allocators share a common helper macro. diff --git a/tex/context/base/mkxl/tabl-ntb.mkxl b/tex/context/base/mkxl/tabl-ntb.mkxl index 2840a9cd1..668a10f5b 100644 --- a/tex/context/base/mkxl/tabl-ntb.mkxl +++ b/tex/context/base/mkxl/tabl-ntb.mkxl @@ -1138,8 +1138,8 @@ \tabl_ntb_let_tag\c_tabl_ntb_current_row\c_tabl_ntb_current_col\c_tabl_ntb_none \fi} -\let\startTBLprocessing\relax % public -\let\stopTBLprocessing \relax % public +\mutable\let\startTBLprocessing\relax % public +\mutable\let\stopTBLprocessing \relax % public \newcount\c_tabl_prelocated_rows % \prelocateTBLrows{1000} may speed up large tables diff --git a/tex/context/base/mkxl/tabl-tab.mkxl b/tex/context/base/mkxl/tabl-tab.mkxl index 5b053abb5..45dc36b36 100644 --- a/tex/context/base/mkxl/tabl-tab.mkxl +++ b/tex/context/base/mkxl/tabl-tab.mkxl @@ -40,13 +40,13 @@ \newdimen \d_tabl_table_column_width_unit \newdimen \d_tabl_table_kern_unit -\def\tablestrutheightfactor {8} -\def\tablestrutdepthfactor {3} -\def\tableintercolumnspacefactor {3} -\def\tablecolumnwidthfactor {10} -\def\tablevspacefactor {2} -\def\tablekernfactor {1} -\def\tablelinethicknessfactor {4} +\mutable\def\tablestrutheightfactor {8} +\mutable\def\tablestrutdepthfactor {3} +\mutable\def\tableintercolumnspacefactor {3} +\mutable\def\tablecolumnwidthfactor {10} +\mutable\def\tablevspacefactor {2} +\mutable\def\tablekernfactor {1} +\mutable\def\tablelinethicknessfactor {4} \newtoks\everytable \newtoks\everytableparbox @@ -283,6 +283,8 @@ \tabl_table_use_bar \expanded{\endgroup\noexpand\doreadtableformatkeys#1]}}% appear in a \tabl_table_reformat cmd; this is here as a safeguard. +\aliased\let\ReFormat\relax + \appendtoks \enforced\let\ReFormat\tabl_table_reformat \to \everytable @@ -290,7 +292,9 @@ \def\!tfEndReFormat {\!tfReFormat} -\appendtoks \tabl_table_paralignment \to \everytableparbox +\appendtoks + \tabl_table_paralignment +\to \everytableparbox \def\!tfReFormat#1% {\the \!taLeftGlue @@ -424,6 +428,9 @@ % Key "\LeftGlue": Specifies the glue (usually \hfil, or nothing) to be % added to extreme left of the template to position a column +\aliased\let\LeftGlue \relax +\aliased\let\RightGlue\relax + \newtableformatkey \LeftGlue#1% {\!taLeftGlue{#1}% \doreadtableformatkeys} @@ -774,6 +781,10 @@ \def\tabl_table_enlarge#1#2% 3rd argument is picked up later {\tabl_table_Enlarge{#1\d_tabl_table_strut_unit}{#2\d_tabl_table_strut_unit}} + +\aliased\let\enlarge\relax +\aliased\let\Enlarge\relax + \appendtoks \enforced\let\enlarge\tabl_table_enlarge \enforced\let\Enlarge\tabl_table_Enlarge @@ -955,6 +966,9 @@ {\tabl_table_use{#1}% \tabl_table_reformat[} +\aliased\let\use\relax +\aliased\let\Use\relax + \appendtoks \enforced\let\use\tabl_table_use \enforced\let\Use\tabl_table_Use @@ -1118,6 +1132,19 @@ \fi \egroup} % Ends the \noalign +\aliased\let\JustLeft \relax +\aliased\let\JustCenter \relax +\aliased\let\JustRight \relax +\aliased\let\Smash \relax +\aliased\let\Raise \relax +\aliased\let\Lower \relax +\aliased\let\BackSpace \relax +\aliased\let\Vspace \relax +\aliased\let\OpenUp \relax +\aliased\let\TableLeft \relax +\aliased\let\TableCenter\relax +\aliased\let\TableRight \relax + \appendtoks \enforced\let\JustLeft \tabl_table_JustLeft \enforced\let\JustCenter \tabl_table_JustCenter @@ -2087,6 +2114,14 @@ \permanent\def\tabl_table_FIVE {\use\plusfive} \permanent\def\tabl_table_SIX {\use\plussix} +\aliased\let\TWO \relax +\aliased\let\THREE\relax +\aliased\let\FOUR \relax +\aliased\let\FIVE \relax +\aliased\let\SIX \relax +\aliased\let\SPAN \relax +\aliased\let\REF \relax + \appendtoks \enforced\let\TWO \tabl_table_TWO \enforced\let\THREE\tabl_table_THREE diff --git a/tex/context/base/mkxl/tabl-tbl.mkxl b/tex/context/base/mkxl/tabl-tbl.mkxl index a4e6e6fed..f29389f15 100644 --- a/tex/context/base/mkxl/tabl-tbl.mkxl +++ b/tex/context/base/mkxl/tabl-tbl.mkxl @@ -228,12 +228,10 @@ \aliased\let\tabulatesplitlinemode\c_tabl_tabulate_splitlinemode % temp hack, we need an interface - \newtoks \everytabulatepar % where used ? \newtoks \everytabulate % public ? -\protected\def\tolerantTABLEbreaktrue {\settrue \c_tabl_tabulate_tolerant_break} % used in styles ! -%protected\def\handletabulatepbreakfalse{\setfalse\c_tabl_tabulate_handlepbreak } % depricated +\permanent\protected\def\tolerantTABLEbreaktrue{\settrue\c_tabl_tabulate_tolerant_break} % used in styles ! \permanent\def\noftabulaterows{\number\c_tabl_tabulate_noflines} % handy for testing if a table is empty @@ -1109,8 +1107,8 @@ % todo: make footer synonym to tail -\setuvalue{\e!start\v!tabulatehead}{\doifelsenextoptionalcs\tabl_tabulate_start_head_yes\tabl_tabulate_start_head_nop} -\setuvalue{\e!start\v!tabulatetail}{\doifelsenextoptionalcs\tabl_tabulate_start_foot_yes\tabl_tabulate_start_foot_nop} +\permanent\protected\defcsname\e!start\v!tabulatehead\endcsname{\doifelsenextoptionalcs\tabl_tabulate_start_head_yes\tabl_tabulate_start_head_nop} +\permanent\protected\defcsname\e!start\v!tabulatetail\endcsname{\doifelsenextoptionalcs\tabl_tabulate_start_foot_yes\tabl_tabulate_start_foot_nop} \let\m_tabl_tabulate_data\empty diff --git a/tex/context/base/mkxl/tabl-tsp.mkxl b/tex/context/base/mkxl/tabl-tsp.mkxl index 9d4a13380..83ad0350a 100644 --- a/tex/context/base/mkxl/tabl-tsp.mkxl +++ b/tex/context/base/mkxl/tabl-tsp.mkxl @@ -248,6 +248,8 @@ \let\postprocesstsplit \donothing \to \everyresettsplit +\mutable\let\postprocesstsplit\donothing + \permanent\protected\def\resettsplit {\the\everyresettsplit} diff --git a/tex/context/base/mkxl/typo-mar.mkxl b/tex/context/base/mkxl/typo-mar.mkxl index 946199f87..daed1ee3d 100644 --- a/tex/context/base/mkxl/typo-mar.mkxl +++ b/tex/context/base/mkxl/typo-mar.mkxl @@ -174,7 +174,7 @@ \docheckpagestate\s!margintext\nofmargintexts %\doifelserightpagestate\s!margintext\nofmargintexts\relax\relax \realpageno\realpagestateno - \swapmargins} + \page_layouts_swap_margins} \permanent\protected\def\margindata {\iftrialtypesetting diff --git a/tex/context/base/mkxl/typo-scr.mkxl b/tex/context/base/mkxl/typo-scr.mkxl index f1e56cbaa..bb67228cd 100644 --- a/tex/context/base/mkxl/typo-scr.mkxl +++ b/tex/context/base/mkxl/typo-scr.mkxl @@ -45,8 +45,8 @@ \setuplow [\c!style=\tx,\c!distance=\zeropoint,\c!down=.48\exheight] % historical \setuphigh[\c!style=\tx,\c!distance=\zeropoint,\c!up =.86\exheight] % values -\appendtoks \setuevalue\currentlow {\typo_scripts_low [\currentlow ]}\to \everydefinelow -\appendtoks \setuevalue\currenthigh{\typo_scripts_high[\currenthigh]}\to \everydefinehigh +\appendtoks \frozen\protected\edefcsname\currentlow \endcsname{\typo_scripts_low [\currentlow ]}\to \everydefinelow +\appendtoks \frozen\protected\edefcsname\currenthigh\endcsname{\typo_scripts_high[\currenthigh]}\to \everydefinehigh \protected\def\typo_scripts_low[#1]#2% {\dontleavehmode diff --git a/tex/context/base/mkxl/unic-ini.mkxl b/tex/context/base/mkxl/unic-ini.mkxl index 3fccd2feb..aedfe47ed 100644 --- a/tex/context/base/mkxl/unic-ini.mkxl +++ b/tex/context/base/mkxl/unic-ini.mkxl @@ -31,6 +31,6 @@ \permanent\protected\def\unknownchar {\dontleavehmode\hpack{\vrule\s!width.5\emwidth\s!height\exheight\s!depth\zeropoint}} -\ifdefined\zwnbsp\else \let\zwnbsp\relax \fi % zerowidthnonbreakablespace +% \ifdefined\zwnbsp\else \let\zwnbsp\relax \fi % zerowidthnonbreakablespace \protect \endinput |