From ca2f0f64dbb46140d36db84ac6e1b6079a386cfa Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Tue, 2 Nov 2021 10:26:54 +0100 Subject: 2021-11-02 10:02:00 --- .../context/lexers/data/scite-context-data-tex.lua | 2 +- .../context/scite-context-data-tex.properties | 44 +-- .../context/syntaxes/context-syntax-tex.json | 2 +- .../general/manuals/lowlevel-localboxes.pdf | Bin 0 -> 61262 bytes .../manuals/lowlevel/lowlevel-localboxes.tex | 408 +++++++++++++++++++++ .../sources/general/manuals/lowlevel/lowlevel.tex | 1 + tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkii/mult-en.mkii | 2 + tex/context/base/mkii/mult-ro.mkii | 2 + tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/mult-def.lua | 20 + tex/context/base/mkiv/mult-prm.lua | 4 + tex/context/base/mkiv/status-files.pdf | Bin 24701 -> 24767 bytes tex/context/base/mkiv/status-lua.pdf | Bin 253854 -> 253917 bytes tex/context/base/mkiv/syst-aux.mkiv | 23 +- tex/context/base/mkiv/trac-deb.lua | 6 +- tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/driv-shp.lmt | 260 ++++++------- tex/context/base/mkxl/font-imp-math.lmt | 5 +- tex/context/base/mkxl/lpdf-lmt.lmt | 60 ++- tex/context/base/mkxl/node-tsk.lmt | 19 +- tex/context/base/mkxl/page-app.mkxl | 1 + tex/context/base/mkxl/tabl-frm.mkxl | 3 +- tex/context/base/mkxl/trac-deb.lmt | 6 +- tex/context/base/mkxl/typo-lbx.lmt | 237 +++++++----- tex/context/base/mkxl/typo-lbx.mkxl | 279 ++++++++++---- tex/context/fonts/mkiv/ebgaramond.lfg | 38 ++ tex/context/fonts/mkiv/libertinus-math.lfg | 110 ++++-- tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv | 24 +- tex/context/interface/mkii/keys-en.xml | 2 + tex/context/interface/mkii/keys-ro.xml | 2 + tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 35 files changed, 1182 insertions(+), 392 deletions(-) create mode 100644 doc/context/documents/general/manuals/lowlevel-localboxes.pdf create mode 100644 doc/context/sources/general/manuals/lowlevel/lowlevel-localboxes.tex diff --git a/context/data/scite/context/lexers/data/scite-context-data-tex.lua b/context/data/scite/context/lexers/data/scite-context-data-tex.lua index 1bafcef10..e3738136f 100644 --- a/context/data/scite/context/lexers/data/scite-context-data-tex.lua +++ b/context/data/scite/context/lexers/data/scite-context-data-tex.lua @@ -1,7 +1,7 @@ return { ["aleph"]={ "Alephminorversion", "Alephrevision", "Alephversion" }, ["etex"]={ "botmarks", "clubpenalties", "currentgrouplevel", "currentgrouptype", "currentifbranch", "currentiflevel", "currentiftype", "detokenize", "dimexpr", "displaywidowpenalties", "everyeof", "firstmarks", "fontchardp", "fontcharht", "fontcharic", "fontcharwd", "glueexpr", "glueshrink", "glueshrinkorder", "gluestretch", "gluestretchorder", "gluetomu", "ifcsname", "ifdefined", "iffontchar", "interactionmode", "interlinepenalties", "lastlinefit", "lastnodetype", "marks", "muexpr", "mutoglue", "numexpr", "pagediscards", "parshapedimen", "parshapeindent", "parshapelength", "predisplaydirection", "protected", "savinghyphcodes", "savingvdiscards", "scantokens", "showgroups", "showifs", "showtokens", "splitbotmarks", "splitdiscards", "splitfirstmarks", "topmarks", "tracingassigns", "tracinggroups", "tracingifs", "tracinglevels", "tracingnesting", "unexpanded", "unless", "widowpenalties" }, - ["luatex"]={ "UUskewed", "UUskewedwithdelims", "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaccentbaseheight", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubshift", "Umathextrasuppreshift", "Umathextrasupshift", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathspacebeforescript", "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathvextensiblevariant", "Umathvoid", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "aligntab", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "boundary", "boxattribute", "boxdirection", "boxorientation", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecifiedsize", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphyoffset", "glyphyscale", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmaxdepth", "insertmode", "insertmultiplier", "insertpenalty", "insertprogress", "insertstorage", "insertstoring", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastchkdim", "lastchknum", "lastnamedcs", "lastnodesubtype", "lastparcontext", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letprotected", "lettonothing", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathitalicsmode", "mathnolimitsmode", "mathpenaltiesmode", "mathrulesfam", "mathrulesmode", "mathrulethicknessmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathstyle", "mathsurroundmode", "mathsurroundskip", "mugluespecdef", "mutable", "noaligned", "noboundary", "nohrule", "norelax", "normalizelinemode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orphanpenalties", "orphanpenalty", "orunless", "outputbox", "overloaded", "overloadmode", "pageboundary", "pagevsize", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "shapingpenaltiesmode", "shapingpenalty", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingalignments", "tracingexpressions", "tracingfonts", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "undent", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoksapp", "xtokspre" }, + ["luatex"]={ "UUskewed", "UUskewedwithdelims", "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaccentbaseheight", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubshift", "Umathextrasuppreshift", "Umathextrasupshift", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathspacebeforescript", "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathvextensiblevariant", "Umathvoid", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "aligntab", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "boundary", "boxattribute", "boxdirection", "boxorientation", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecifiedsize", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphyoffset", "glyphyscale", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmaxdepth", "insertmode", "insertmultiplier", "insertpenalty", "insertprogress", "insertstorage", "insertstoring", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastchkdim", "lastchknum", "lastnamedcs", "lastnodesubtype", "lastparcontext", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letprotected", "lettonothing", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localinterlinepenalty", "localleftbox", "localleftboxbox", "localmiddlebox", "localrightbox", "localrightboxbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathitalicsmode", "mathnolimitsmode", "mathpenaltiesmode", "mathrulesfam", "mathrulesmode", "mathrulethicknessmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathstyle", "mathsurroundmode", "mathsurroundskip", "mugluespecdef", "mutable", "noaligned", "noboundary", "nohrule", "norelax", "normalizelinemode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orphanpenalties", "orphanpenalty", "orunless", "outputbox", "overloaded", "overloadmode", "pageboundary", "pagevsize", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "shapingpenaltiesmode", "shapingpenalty", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingalignments", "tracingexpressions", "tracingfonts", "tracingfullboxes", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "undent", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoksapp", "xtokspre" }, ["omega"]={ "Omegaminorversion", "Omegarevision", "Omegaversion" }, ["pdftex"]={ "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfignoreunknownimages", "pdfimageaddfilename", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinfoomitdate", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmajorversion", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfomitcharset", "pdfomitcidset", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkfixeddpi", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrecompress", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdfsuppressoptionalinfo", "pdfsuppressptexinfo", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdftrailerid", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformmargin", "pdfxformname", "pdfxformresources", "pdfximage" }, ["tex"]={ " ", "-", "/", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "aligncontent", "atop", "atopwithdelims", "badness", "baselineskip", "batchmode", "begingroup", "beginsimplegroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "botmark", "box", "boxmaxdepth", "brokenpenalty", "catcode", "char", "chardef", "cleaders", "clubpenalty", "copy", "count", "countdef", "cr", "crcr", "csname", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "dimen", "dimendef", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "edef", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "endsimplegroup", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "fam", "fi", "finalhyphendemerits", "firstmark", "floatingpenalty", "font", "fontdimen", "fontname", "fontspecifiedname", "futurelet", "gdef", "global", "globaldefs", "glyph", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifcase", "ifcat", "ifdim", "iffalse", "ifhbox", "ifhmode", "ifinner", "ifmmode", "ifnum", "ifodd", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "indent", "input", "inputlineno", "insert", "insertpenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastpenalty", "lastskip", "lccode", "leaders", "left", "lefthyphenmin", "leftskip", "leqno", "let", "limits", "linepenalty", "lineskip", "lineskiplimit", "long", "looseness", "lower", "lowercase", "mark", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "meaningasis", "meaningfull", "meaningless", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "multiply", "muskip", "muskipdef", "newlinechar", "noalign", "noexpand", "noindent", "nolimits", "nonscript", "nonstopmode", "nulldelimiterspace", "nullfont", "number", "omit", "or", "outer", "output", "outputpenalty", "over", "overfullrule", "overline", "overshoot", "overwithdelims", "pagedepth", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageshrink", "pagestretch", "pagetotal", "par", "parfillleftskip", "parfillskip", "parindent", "parshape", "parskip", "patterns", "pausing", "penalty", "postdisplaypenalty", "predisplaypenalty", "predisplaysize", "pretolerance", "prevdepth", "prevgraf", "radical", "raise", "relax", "relpenalty", "right", "righthyphenmin", "rightskip", "romannumeral", "scaledfontdimen", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showlists", "shownodedetails", "showthe", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "splitbotmark", "splitfirstmark", "splitmaxdepth", "splittopskip", "string", "tabskip", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "todimension", "tointeger", "toks", "toksdef", "tolerance", "topmark", "topskip", "toscaled", "tracingcommands", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingstats", "uccode", "uchyph", "underline", "unhbox", "unhcopy", "unhpack", "unkern", "unpenalty", "unskip", "unvbox", "unvcopy", "unvpack", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalty", "xdef", "xleaders", "xspaceskip", "year" }, diff --git a/context/data/scite/context/scite-context-data-tex.properties b/context/data/scite/context/scite-context-data-tex.properties index 947a10649..7dd48fc55 100644 --- a/context/data/scite/context/scite-context-data-tex.properties +++ b/context/data/scite/context/scite-context-data-tex.properties @@ -89,28 +89,28 @@ instance integerdef lastarguments lastchkdim lastchknum \ lastnamedcs lastnodesubtype lastparcontext leftmarginkern letcharcode \ letcsname letfrozen letprotected lettonothing linedirection \ localbrokenpenalty localcontrol localcontrolled localinterlinepenalty localleftbox \ -localrightbox lpcode luabytecode luabytecodecall luacopyinputnodes \ -luadef luaescapestring luafunction luafunctioncall luatexbanner \ -luatexrevision luatexversion mathcontrolmode mathdelimitersmode mathdirection \ -mathdisplayskipmode matheqnogapstep mathflattenmode mathfontcontrol mathitalicsmode \ -mathnolimitsmode mathpenaltiesmode mathrulesfam mathrulesmode mathrulethicknessmode \ -mathscale mathscriptboxmode mathscriptcharmode mathscriptsmode mathstyle \ -mathsurroundmode mathsurroundskip mugluespecdef mutable noaligned \ -noboundary nohrule norelax normalizelinemode nospaces \ -novrule numericscale numexpression orelse orphanpenalties \ -orphanpenalty orunless outputbox overloaded overloadmode \ -pageboundary pagevsize parametercount parametermark parattribute \ -pardirection permanent postexhyphenchar posthyphenchar prebinoppenalty \ -predisplaygapfactor preexhyphenchar prehyphenchar prerelpenalty protrudechars \ -protrusionboundary pxdimen quitvmode retokenized rightmarginkern \ -rpcode savecatcodetable scantextokens semiexpanded semiprotected \ -setfontid shapingpenaltiesmode shapingpenalty snapshotpar supmarkmode \ -swapcsvalues tabsize textdirection thewithoutunit tokenized \ -toksapp tokspre tolerant tpack tracingalignments \ -tracingexpressions tracingfonts tracinghyphenation tracinginserts tracingmarks \ -tracingmath undent unletfrozen unletprotected untraced \ -vpack wordboundary wrapuppar xdefcsname xtoksapp \ -xtokspre +localleftboxbox localmiddlebox localrightbox localrightboxbox lpcode \ +luabytecode luabytecodecall luacopyinputnodes luadef luaescapestring \ +luafunction luafunctioncall luatexbanner luatexrevision luatexversion \ +mathcontrolmode mathdelimitersmode mathdirection mathdisplayskipmode matheqnogapstep \ +mathflattenmode mathfontcontrol mathitalicsmode mathnolimitsmode mathpenaltiesmode \ +mathrulesfam mathrulesmode mathrulethicknessmode mathscale mathscriptboxmode \ +mathscriptcharmode mathscriptsmode mathstyle mathsurroundmode mathsurroundskip \ +mugluespecdef mutable noaligned noboundary nohrule \ +norelax normalizelinemode nospaces novrule numericscale \ +numexpression orelse orphanpenalties orphanpenalty orunless \ +outputbox overloaded overloadmode pageboundary pagevsize \ +parametercount parametermark parattribute pardirection permanent \ +postexhyphenchar posthyphenchar prebinoppenalty predisplaygapfactor preexhyphenchar \ +prehyphenchar prerelpenalty protrudechars protrusionboundary pxdimen \ +quitvmode retokenized rightmarginkern rpcode savecatcodetable \ +scantextokens semiexpanded semiprotected setfontid shapingpenaltiesmode \ +shapingpenalty snapshotpar supmarkmode swapcsvalues tabsize \ +textdirection thewithoutunit tokenized toksapp tokspre \ +tolerant tpack tracingalignments tracingexpressions tracingfonts \ +tracingfullboxes tracinghyphenation tracinginserts tracingmarks tracingmath \ +undent unletfrozen unletprotected untraced vpack \ +wordboundary wrapuppar xdefcsname xtoksapp xtokspre keywordclass.tex.omega=\ Omegaminorversion Omegarevision Omegaversion diff --git a/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json b/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json index dd48d5359..c0060572c 100644 --- a/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json +++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json @@ -216,7 +216,7 @@ ] }, "primitive" : { - "match" : "\u005C\u005C(year|xtokspre|xtoksapp|xspaceskip|xleaders|xdefcsname|xdef|wrapuppar|wordboundary|widowpenalty|widowpenalties|wd|vtop|vss|vsplit|vskip|vsize|vrule|vpack|vfuzz|vfilneg|vfill|vfil|vcenter|vbox|vbadness|valign|vadjust|uppercase|unvpack|unvcopy|unvbox|untraced|unskip|unpenalty|unletprotected|unletfrozen|unless|unkern|unhpack|unhcopy|unhbox|underline|undent|uchyph|uccode|tracingstats|tracingrestores|tracingparagraphs|tracingpages|tracingoutput|tracingonline|tracingnesting|tracingmath|tracingmarks|tracingmacros|tracinglostchars|tracinglevels|tracinginserts|tracingifs|tracinghyphenation|tracinggroups|tracingfonts|tracingexpressions|tracingcommands|tracingassigns|tracingalignments|tpack|toscaled|topskip|topmarks|topmark|tolerant|tolerance|tokspre|toksdef|toksapp|toks|tokenized|tointeger|todimension|time|thinmuskip|thickmuskip|thewithoutunit|the|textstyle|textfont|textdirection|tabskip|tabsize|swapcsvalues|supmarkmode|string|splittopskip|splitmaxdepth|splitfirstmarks|splitfirstmark|splitdiscards|splitbotmarks|splitbotmark|span|spaceskip|spacefactor|snapshotpar|skipdef|skip|skewchar|showtokens|showthe|shownodedetails|showlists|showifs|showgroups|showboxdepth|showboxbreadth|showbox|show|shipout|shapingpenalty|shapingpenaltiesmode|sfcode|setlanguage|setfontid|setbox|semiprotected|semiexpanded|scrollmode|scriptstyle|scriptspace|scriptscriptstyle|scriptscriptfont|scriptfont|scantokens|scantextokens|scaledfontdimen|savingvdiscards|savinghyphcodes|savecatcodetable|rpcode|romannumeral|rightskip|rightmarginkern|righthyphenmin|right|retokenized|relpenalty|relax|raise|radical|quitvmode|pxdimen|protrusionboundary|protrudechars|protected|prevgraf|prevdepth|pretolerance|prerelpenalty|prehyphenchar|preexhyphenchar|predisplaysize|predisplaypenalty|predisplaygapfactor|predisplaydirection|prebinoppenalty|posthyphenchar|postexhyphenchar|postdisplaypenalty|permanent|penalty|pdfximage|pdfxformresources|pdfxformname|pdfxformmargin|pdfxformattr|pdfxform|pdfvorigin|pdfuniqueresname|pdfuniformdeviate|pdftrailerid|pdftrailer|pdftracingfonts|pdfthreadmargin|pdfthread|pdftexversion|pdftexrevision|pdftexbanner|pdfsuppressptexinfo|pdfsuppressoptionalinfo|pdfstartthread|pdfstartlink|pdfsetrandomseed|pdfsetmatrix|pdfsavepos|pdfsave|pdfretval|pdfrestore|pdfreplacefont|pdfrefximage|pdfrefxform|pdfrefobj|pdfrecompress|pdfrandomseed|pdfpxdimen|pdfprotrudechars|pdfprimitive|pdfpkresolution|pdfpkmode|pdfpkfixeddpi|pdfpagewidth|pdfpagesattr|pdfpageresources|pdfpageref|pdfpageheight|pdfpagebox|pdfpageattr|pdfoutput|pdfoutline|pdfomitcidset|pdfomitcharset|pdfobjcompresslevel|pdfobj|pdfnormaldeviate|pdfnoligatures|pdfnames|pdfminorversion|pdfmapline|pdfmapfile|pdfmajorversion|pdfliteral|pdflinkmargin|pdflastypos|pdflastxpos|pdflastximagepages|pdflastximage|pdflastxform|pdflastobj|pdflastlink|pdflastlinedepth|pdflastannot|pdfinsertht|pdfinfoomitdate|pdfinfo|pdfinclusionerrorlevel|pdfinclusioncopyfonts|pdfincludechars|pdfimageresolution|pdfimagehicolor|pdfimagegamma|pdfimageapplygamma|pdfimageaddfilename|pdfignoreunknownimages|pdfignoreddimen|pdfhorigin|pdfglyphtounicode|pdfgentounicode|pdfgamma|pdffontsize|pdffontobjnum|pdffontname|pdffontexpand|pdffontattr|pdffirstlineheight|pdfendthread|pdfendlink|pdfeachlineheight|pdfeachlinedepth|pdfdraftmode|pdfdestmargin|pdfdest|pdfdecimaldigits|pdfcreationdate|pdfcopyfont|pdfcompresslevel|pdfcolorstackinit|pdfcolorstack|pdfcatalog|pdfannot|pdfadjustspacing|pausing|patterns|parskip|parshapelength|parshapeindent|parshapedimen|parshape|parindent|parfillskip|pardirection|parattribute|parametermark|parametercount|par|pagevsize|pagetotal|pagestretch|pageshrink|pagegoal|pagefilstretch|pagefillstretch|pagefilllstretch|pagediscards|pagedepth|pageboundary|overwithdelims|overshoot|overloadmode|overloaded|overline|overfullrule|over|outputpenalty|outputbox|output|outer|orunless|orphanpenalty|orphanpenalties|orelse|or|omit|numexpression|numexpr|numericscale|number|nullfont|nulldelimiterspace|novrule|nospaces|normalyear|normalxtokspre|normalxtoksapp|normalxspaceskip|normalxleaders|normalxdefcsname|normalxdef|normalwrapuppar|normalwordboundary|normalwidowpenalty|normalwidowpenalties|normalwd|normalvtop|normalvss|normalvsplit|normalvskip|normalvsize|normalvrule|normalvpack|normalvfuzz|normalvfilneg|normalvfill|normalvfil|normalvcenter|normalvbox|normalvbadness|normalvalign|normalvadjust|normaluppercase|normalunvpack|normalunvcopy|normalunvbox|normaluntraced|normalunskip|normalunpenalty|normalunletprotected|normalunletfrozen|normalunless|normalunkern|normalunhpack|normalunhcopy|normalunhbox|normalunexpanded|normalunderline|normalundent|normaluchyph|normaluccode|normaltracingstats|normaltracingrestores|normaltracingparagraphs|normaltracingpages|normaltracingoutput|normaltracingonline|normaltracingnesting|normaltracingmath|normaltracingmarks|normaltracingmacros|normaltracinglostchars|normaltracinglevels|normaltracinginserts|normaltracingifs|normaltracinghyphenation|normaltracinggroups|normaltracingfonts|normaltracingexpressions|normaltracingcommands|normaltracingassigns|normaltracingalignments|normaltpack|normaltoscaled|normaltopskip|normaltopmarks|normaltopmark|normaltolerant|normaltolerance|normaltokspre|normaltoksdef|normaltoksapp|normaltoks|normaltokenized|normaltointeger|normaltodimension|normaltime|normalthinmuskip|normalthickmuskip|normalthewithoutunit|normalthe|normaltextstyle|normaltextfont|normaltextdirection|normaltabskip|normaltabsize|normalswapcsvalues|normalsupmarkmode|normalstring|normalsplittopskip|normalsplitmaxdepth|normalsplitfirstmarks|normalsplitfirstmark|normalsplitdiscards|normalsplitbotmarks|normalsplitbotmark|normalspan|normalspaceskip|normalspacefactor|normalsnapshotpar|normalskipdef|normalskip|normalskewchar|normalshowtokens|normalshowthe|normalshownodedetails|normalshowlists|normalshowifs|normalshowgroups|normalshowboxdepth|normalshowboxbreadth|normalshowbox|normalshow|normalshipout|normalshapingpenalty|normalshapingpenaltiesmode|normalsfcode|normalsetlanguage|normalsetfontid|normalsetbox|normalsemiprotected|normalsemiexpanded|normalscrollmode|normalscriptstyle|normalscriptspace|normalscriptscriptstyle|normalscriptscriptfont|normalscriptfont|normalscantokens|normalscantextokens|normalscaledfontdimen|normalsavingvdiscards|normalsavinghyphcodes|normalsavecatcodetable|normalrpcode|normalromannumeral|normalrightskip|normalrightmarginkern|normalrighthyphenmin|normalright|normalretokenized|normalrelpenalty|normalrelax|normalraise|normalradical|normalquitvmode|normalpxdimen|normalprotrusionboundary|normalprotrudechars|normalprotected|normalprevgraf|normalprevdepth|normalpretolerance|normalprerelpenalty|normalprehyphenchar|normalpreexhyphenchar|normalpredisplaysize|normalpredisplaypenalty|normalpredisplaygapfactor|normalpredisplaydirection|normalprebinoppenalty|normalposthyphenchar|normalpostexhyphenchar|normalpostdisplaypenalty|normalpermanent|normalpenalty|normalpdfximage|normalpdfxformresources|normalpdfxformname|normalpdfxformmargin|normalpdfxformattr|normalpdfxform|normalpdfvorigin|normalpdfuniqueresname|normalpdfuniformdeviate|normalpdftrailerid|normalpdftrailer|normalpdftracingfonts|normalpdfthreadmargin|normalpdfthread|normalpdftexversion|normalpdftexrevision|normalpdftexbanner|normalpdfsuppressptexinfo|normalpdfsuppressoptionalinfo|normalpdfstartthread|normalpdfstartlink|normalpdfsetrandomseed|normalpdfsetmatrix|normalpdfsavepos|normalpdfsave|normalpdfretval|normalpdfrestore|normalpdfreplacefont|normalpdfrefximage|normalpdfrefxform|normalpdfrefobj|normalpdfrecompress|normalpdfrandomseed|normalpdfpxdimen|normalpdfprotrudechars|normalpdfprimitive|normalpdfpkresolution|normalpdfpkmode|normalpdfpkfixeddpi|normalpdfpagewidth|normalpdfpagesattr|normalpdfpageresources|normalpdfpageref|normalpdfpageheight|normalpdfpagebox|normalpdfpageattr|normalpdfoutput|normalpdfoutline|normalpdfomitcidset|normalpdfomitcharset|normalpdfobjcompresslevel|normalpdfobj|normalpdfnormaldeviate|normalpdfnoligatures|normalpdfnames|normalpdfminorversion|normalpdfmapline|normalpdfmapfile|normalpdfmajorversion|normalpdfliteral|normalpdflinkmargin|normalpdflastypos|normalpdflastxpos|normalpdflastximagepages|normalpdflastximage|normalpdflastxform|normalpdflastobj|normalpdflastlink|normalpdflastlinedepth|normalpdflastannot|normalpdfinsertht|normalpdfinfoomitdate|normalpdfinfo|normalpdfinclusionerrorlevel|normalpdfinclusioncopyfonts|normalpdfincludechars|normalpdfimageresolution|normalpdfimagehicolor|normalpdfimagegamma|normalpdfimageapplygamma|normalpdfimageaddfilename|normalpdfignoreunknownimages|normalpdfignoreddimen|normalpdfhorigin|normalpdfglyphtounicode|normalpdfgentounicode|normalpdfgamma|normalpdffontsize|normalpdffontobjnum|normalpdffontname|normalpdffontexpand|normalpdffontattr|normalpdffirstlineheight|normalpdfendthread|normalpdfendlink|normalpdfeachlineheight|normalpdfeachlinedepth|normalpdfdraftmode|normalpdfdestmargin|normalpdfdest|normalpdfdecimaldigits|normalpdfcreationdate|normalpdfcopyfont|normalpdfcompresslevel|normalpdfcolorstackinit|normalpdfcolorstack|normalpdfcatalog|normalpdfannot|normalpdfadjustspacing|normalpausing|normalpatterns|normalparskip|normalparshapelength|normalparshapeindent|normalparshapedimen|normalparshape|normalparindent|normalparfillskip|normalparfillleftskip|normalpardirection|normalparattribute|normalparametermark|normalparametercount|normalpar|normalpagevsize|normalpagetotal|normalpagestretch|normalpageshrink|normalpagegoal|normalpagefilstretch|normalpagefillstretch|normalpagefilllstretch|normalpagediscards|normalpagedepth|normalpageboundary|normaloverwithdelims|normalovershoot|normaloverloadmode|normaloverloaded|normaloverline|normaloverfullrule|normalover|normaloutputpenalty|normaloutputbox|normaloutput|normalouter|normalorunless|normalorphanpenalty|normalorphanpenalties|normalorelse|normalor|normalomit|normalnumexpression|normalnumexpr|normalnumericscale|normalnumber|normalnullfont|normalnulldelimiterspace|normalnovrule|normalnospaces|normalnormalizelinemode|normalnorelax|normalnonstopmode|normalnonscript|normalnolimits|normalnoindent|normalnohrule|normalnoexpand|normalnoboundary|normalnoaligned|normalnoalign|normalnewlinechar|normalmutoglue|normalmutable|normalmuskipdef|normalmuskip|normalmultiply|normalmugluespecdef|normalmuexpr|normalmskip|normalmoveright|normalmoveleft|normalmonth|normalmkern|normalmiddle|normalmessage|normalmedmuskip|normalmeaningless|normalmeaningfull|normalmeaningasis|normalmeaning|normalmaxdepth|normalmaxdeadcycles|normalmathsurroundskip|normalmathsurroundmode|normalmathsurround|normalmathstyle|normalmathscriptsmode|normalmathscriptcharmode|normalmathscriptboxmode|normalmathscale|normalmathrulethicknessmode|normalmathrulesmode|normalmathrulesfam|normalmathrel|normalmathpunct|normalmathpenaltiesmode|normalmathord|normalmathopen|normalmathop|normalmathnolimitsmode|normalmathitalicsmode|normalmathinner|normalmathfontcontrol|normalmathflattenmode|normalmatheqnogapstep|normalmathdisplayskipmode|normalmathdirection|normalmathdelimitersmode|normalmathcontrolmode|normalmathcode|normalmathclose|normalmathchoice|normalmathchardef|normalmathchar|normalmathbin|normalmathaccent|normalmarks|normalmark|normalluatexversion|normalluatexrevision|normalluatexbanner|normalluafunctioncall|normalluafunction|normalluaescapestring|normalluadef|normalluacopyinputnodes|normalluabytecodecall|normalluabytecode|normallpcode|normallowercase|normallower|normallooseness|normallong|normallocalrightbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolled|normallocalcontrol|normallocalbrokenpenalty|normallineskiplimit|normallineskip|normallinepenalty|normallinedirection|normallimits|normallettonothing|normalletprotected|normalletfrozen|normalletcsname|normalletcharcode|normallet|normalleqno|normalleftskip|normalleftmarginkern|normallefthyphenmin|normalleft|normalleaders|normallccode|normallastskip|normallastpenalty|normallastparcontext|normallastnodetype|normallastnodesubtype|normallastnamedcs|normallastlinefit|normallastkern|normallastchknum|normallastchkdim|normallastbox|normallastarguments|normallanguage|normalkern|normaljobname|normalizelinemode|normalinterlinepenalty|normalinterlinepenalties|normalinteractionmode|normalintegerdef|normalinstance|normalinsertwidth|normalinsertuncopy|normalinsertunbox|normalinsertstoring|normalinsertstorage|normalinsertprogress|normalinsertpenalty|normalinsertpenalties|normalinsertmultiplier|normalinsertmode|normalinsertmaxdepth|normalinsertlimit|normalinsertheights|normalinsertheight|normalinsertdistance|normalinsertdepth|normalinsertcopy|normalinsertbox|normalinsert|normalinputlineno|normalinput|normalinitcatcodetable|normalindent|normalimmutable|normalimmediate|normalignorespaces|normalignorepars|normalignorearguments|normalifx|normalifvoid|normalifvmode|normalifvbox|normaliftrue|normaliftok|normalifrelax|normalifpdfprimitive|normalifpdfabsnum|normalifpdfabsdim|normalifparameters|normalifparameter|normalifodd|normalifnumval|normalifnumexpression|normalifnum|normalifmmode|normalifmathstyle|normalifmathparameter|normalifinsert|normalifinner|normalifincsname|normalifhmode|normalifhbox|normalifhasxtoks|normalifhastoks|normalifhastok|normalifhaschar|normaliffontchar|normalifflags|normaliffalse|normalifempty|normalifdimval|normalifdimexpression|normalifdim|normalifdefined|normalifcstok|normalifcsname|normalifcondition|normalifcmpnum|normalifcmpdim|normalifchknum|normalifchkdim|normalifcat|normalifcase|normalifboolean|normalifarguments|normalifabsnum|normalifabsdim|normalif|normalhyphenpenalty|normalhyphenchar|normalhyphenationmode|normalhyphenationmin|normalhyphenation|normalht|normalhss|normalhskip|normalhsize|normalhrule|normalhpack|normalholdinginserts|normalhjcode|normalhfuzz|normalhfilneg|normalhfill|normalhfil|normalhccode|normalhbox|normalhbadness|normalhangindent|normalhangafter|normalhalign|normalgtokspre|normalgtoksapp|normalglyphyscale|normalglyphyoffset|normalglyphxscale|normalglyphxoffset|normalglyphtextscale|normalglyphstatefield|normalglyphscriptscriptscale|normalglyphscriptscale|normalglyphscriptfield|normalglyphscale|normalglyphoptions|normalglyphdatafield|normalglyph|normalgluetomu|normalgluestretchorder|normalgluestretch|normalgluespecdef|normalglueshrinkorder|normalglueshrink|normalglueexpr|normalglobaldefs|normalglobal|normalglettonothing|normalgletcsname|normalglet|normalgleaders|normalgdefcsname|normalgdef|normalfuturelet|normalfutureexpandisap|normalfutureexpandis|normalfutureexpand|normalfuturedef|normalfuturecsname|normalfrozen|normalformatname|normalfonttextcontrol|normalfontspecifiedsize|normalfontspecifiedname|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normalescapechar|normalerrorstopmode|normalerrorcontextlines|normalerrmessage|normalerrhelp|normaleqno|normalenforced|normalendsimplegroup|normalendlocalcontrol|normalendlinechar|normalendinput|normalendgroup|normalendcsname|normalend|normalemergencystretch|normalelse|normalefcode|normaledefcsname|normaledef|normaldump|normaldp|normaldoublehyphendemerits|normaldivide|normaldisplaywidth|normaldisplaywidowpenalty|normaldisplaywidowpenalties|normaldisplaystyle|normaldisplaylimits|normaldisplayindent|normaldiscretionary|normaldirectlua|normaldimexpression|normaldimexpr|normaldimensiondef|normaldimendef|normaldimen|normaldetokenize|normaldelimitershortfall|normaldelimiterfactor|normaldelimiter|normaldelcode|normaldefcsname|normaldefaultskewchar|normaldefaulthyphenchar|normaldef|normaldeadcycles|normalday|normalcurrentmarks|normalcurrentiftype|normalcurrentiflevel|normalcurrentifbranch|normalcurrentgrouptype|normalcurrentgrouplevel|normalcsstring|normalcsname|normalcrcr|normalcrampedtextstyle|normalcrampedscriptstyle|normalcrampedscriptscriptstyle|normalcrampeddisplaystyle|normalcr|normalcountdef|normalcount|normalcopy|normalclubpenalty|normalclubpenalties|normalclearmarks|normalcleaders|normalchardef|normalchar|normalcatcodetable|normalcatcode|normalbrokenpenalty|normalboxyoffset|normalboxymove|normalboxxoffset|normalboxxmove|normalboxtotal|normalboxorientation|normalboxmaxdepth|normalboxdirection|normalboxattribute|normalbox|normalboundary|normalbotmarks|normalbotmark|normalbinoppenalty|normalbelowdisplayskip|normalbelowdisplayshortskip|normalbeginsimplegroup|normalbeginlocalcontrol|normalbegingroup|normalbegincsname|normalbatchmode|normalbaselineskip|normalbadness|normalautoparagraphmode|normalautomigrationmode|normalautomatichyphenpenalty|normalautomaticdiscretionary|normalattributedef|normalattribute|normalatopwithdelims|normalatop|normalatendofgrouped|normalatendofgroup|normalaligntab|normalalignmark|normalaligncontent|normalaliased|normalaftergrouped|normalaftergroup|normalafterassignment|normalafterassigned|normaladvance|normaladjustspacingstretch|normaladjustspacingstep|normaladjustspacingshrink|normaladjustspacing|normaladjdemerits|normalaccent|normalabovewithdelims|normalabovedisplayskip|normalabovedisplayshortskip|normalabove|normalXeTeXversion|normalUvextensible|normalUunderdelimiter|normalUsuperscript|normalUsuperprescript|normalUsubscript|normalUsubprescript|normalUstyle|normalUstopmath|normalUstopdisplaymath|normalUstartmath|normalUstartdisplaymath|normalUstack|normalUskewedwithdelims|normalUskewed|normalUroot|normalUright|normalUradical|normalUoverwithdelims|normalUoverdelimiter|normalUover|normalUnosuperscript|normalUnosuperprescript|normalUnosubscript|normalUnosubprescript|normalUmiddle|normalUmathvoid|normalUmathvextensiblevariant|normalUmathunderlinevariant|normalUmathunderdelimitervgap|normalUmathunderdelimitervariant|normalUmathunderdelimiterbgap|normalUmathunderbarvgap|normalUmathunderbarrule|normalUmathunderbarkern|normalUmathtopaccentvariant|normalUmathsupsubbottommax|normalUmathsupshiftup|normalUmathsupshiftdrop|normalUmathsuperscriptvariant|normalUmathsupbottommin|normalUmathsubtopmax|normalUmathsubsupvgap|normalUmathsubsupshiftdown|normalUmathsubshiftdrop|normalUmathsubshiftdown|normalUmathsubscriptvariant|normalUmathstackvgap|normalUmathstackvariant|normalUmathstacknumup|normalUmathstackdenomdown|normalUmathspacingmode|normalUmathspacebeforescript|normalUmathspaceafterscript|normalUmathskewedfractionvgap|normalUmathskewedfractionhgap|normalUmathrelrelspacing|normalUmathrelpunctspacing|normalUmathrelordspacing|normalUmathrelopspacing|normalUmathrelopenspacing|normalUmathrelinnerspacing|normalUmathrelclosespacing|normalUmathrelbinspacing|normalUmathradicalvgap|normalUmathradicalvariant|normalUmathradicalrule|normalUmathradicalkern|normalUmathradicaldegreeraise|normalUmathradicaldegreebefore|normalUmathradicaldegreeafter|normalUmathquad|normalUmathpunctrelspacing|normalUmathpunctpunctspacing|normalUmathpunctordspacing|normalUmathpunctopspacing|normalUmathpunctopenspacing|normalUmathpunctinnerspacing|normalUmathpunctclosespacing|normalUmathpunctbinspacing|normalUmathphantom|normalUmathoverlinevariant|normalUmathoverlayaccentvariant|normalUmathoverdelimitervgap|normalUmathoverdelimitervariant|normalUmathoverdelimiterbgap|normalUmathoverbarvgap|normalUmathoverbarrule|normalUmathoverbarkern|normalUmathordrelspacing|normalUmathordpunctspacing|normalUmathordordspacing|normalUmathordopspacing|normalUmathordopenspacing|normalUmathordinnerspacing|normalUmathordclosespacing|normalUmathordbinspacing|normalUmathoprelspacing|normalUmathoppunctspacing|normalUmathopordspacing|normalUmathopopspacing|normalUmathopopenspacing|normalUmathopinnerspacing|normalUmathoperatorsize|normalUmathopenupheight|normalUmathopenupdepth|normalUmathopenrelspacing|normalUmathopenpunctspacing|normalUmathopenordspacing|normalUmathopenopspacing|normalUmathopenopenspacing|normalUmathopeninnerspacing|normalUmathopenclosespacing|normalUmathopenbinspacing|normalUmathopclosespacing|normalUmathopbinspacing|normalUmathnumeratorvariant|normalUmathnolimitsupfactor|normalUmathnolimitsubfactor|normalUmathnolimits|normalUmathnoaxis|normalUmathlimits|normalUmathlimitbelowvgap|normalUmathlimitbelowkern|normalUmathlimitbelowbgap|normalUmathlimitabovevgap|normalUmathlimitabovekern|normalUmathlimitabovebgap|normalUmathinnerrelspacing|normalUmathinnerpunctspacing|normalUmathinnerordspacing|normalUmathinneropspacing|normalUmathinneropenspacing|normalUmathinnerinnerspacing|normalUmathinnerclosespacing|normalUmathinnerbinspacing|normalUmathhextensiblevariant|normalUmathfractionvariant|normalUmathfractionrule|normalUmathfractionnumvgap|normalUmathfractionnumup|normalUmathfractiondenomvgap|normalUmathfractiondenomdown|normalUmathfractiondelsize|normalUmathextrasupshift|normalUmathextrasuppreshift|normalUmathextrasubshift|normalUmathextrasubpreshift|normalUmathdenominatorvariant|normalUmathdelimiterundervariant|normalUmathdelimiterovervariant|normalUmathdegreevariant|normalUmathconnectoroverlapmin|normalUmathcodenum|normalUmathcode|normalUmathcloserelspacing|normalUmathclosepunctspacing|normalUmathcloseordspacing|normalUmathcloseopspacing|normalUmathcloseopenspacing|normalUmathcloseinnerspacing|normalUmathcloseclosespacing|normalUmathclosebinspacing|normalUmathclass|normalUmathcharslot|normalUmathcharnumdef|normalUmathcharnum|normalUmathcharfam|normalUmathchardef|normalUmathcharclass|normalUmathchar|normalUmathbotaccentvariant|normalUmathbinrelspacing|normalUmathbinpunctspacing|normalUmathbinordspacing|normalUmathbinopspacing|normalUmathbinopenspacing|normalUmathbininnerspacing|normalUmathbinclosespacing|normalUmathbinbinspacing|normalUmathaxis|normalUmathadapttoright|normalUmathadapttoleft|normalUmathaccentvariant|normalUmathaccentbaseheight|normalUmathaccent|normalUleft|normalUhextensible|normalUdelimiterunder|normalUdelimiterover|normalUdelimiter|normalUdelcodenum|normalUdelcode|normalUchar|normalUatopwithdelims|normalUatop|normalUabovewithdelims|normalUabove|normalUUskewedwithdelims|normalUUskewed|normalOmegaversion|normalOmegarevision|normalOmegaminorversion|normalAlephversion|normalAlephrevision|normalAlephminorversion|normal |norelax|nonstopmode|nonscript|nolimits|noindent|nohrule|noexpand|noboundary|noaligned|noalign|newlinechar|mutoglue|mutable|muskipdef|muskip|multiply|mugluespecdef|muexpr|mskip|moveright|moveleft|month|mkern|middle|message|medmuskip|meaningless|meaningfull|meaningasis|meaning|maxdepth|maxdeadcycles|mathsurroundskip|mathsurroundmode|mathsurround|mathstyle|mathscriptsmode|mathscriptcharmode|mathscriptboxmode|mathscale|mathrulethicknessmode|mathrulesmode|mathrulesfam|mathrel|mathpunct|mathpenaltiesmode|mathord|mathopen|mathop|mathnolimitsmode|mathitalicsmode|mathinner|mathfontcontrol|mathflattenmode|matheqnogapstep|mathdisplayskipmode|mathdirection|mathdelimitersmode|mathcontrolmode|mathcode|mathclose|mathchoice|mathchardef|mathchar|mathbin|mathaccent|marks|mark|luatexversion|luatexrevision|luatexbanner|luafunctioncall|luafunction|luaescapestring|luadef|luacopyinputnodes|luabytecodecall|luabytecode|lpcode|lowercase|lower|looseness|long|localrightbox|localleftbox|localinterlinepenalty|localcontrolled|localcontrol|localbrokenpenalty|lineskiplimit|lineskip|linepenalty|linedirection|limits|lettonothing|letprotected|letfrozen|letcsname|letcharcode|let|leqno|leftskip|leftmarginkern|lefthyphenmin|left|leaders|lccode|lastskip|lastpenalty|lastparcontext|lastnodetype|lastnodesubtype|lastnamedcs|lastlinefit|lastkern|lastchknum|lastchkdim|lastbox|lastarguments|language|kern|jobname|interlinepenalty|interlinepenalties|interactionmode|integerdef|instance|insertwidth|insertuncopy|insertunbox|insertstoring|insertstorage|insertprogress|insertpenalty|insertpenalties|insertmultiplier|insertmode|insertmaxdepth|insertlimit|insertheights|insertheight|insertdistance|insertdepth|insertcopy|insertbox|insert|inputlineno|input|initcatcodetable|indent|immutable|immediate|ignorespaces|ignorepars|ignorearguments|ifx|ifvoid|ifvmode|ifvbox|iftrue|iftok|ifrelax|ifpdfprimitive|ifpdfabsnum|ifpdfabsdim|ifparameters|ifparameter|ifodd|ifnumval|ifnumexpression|ifnum|ifmmode|ifmathstyle|ifmathparameter|ifinsert|ifinner|ifincsname|ifhmode|ifhbox|ifhasxtoks|ifhastoks|ifhastok|ifhaschar|iffontchar|ifflags|iffalse|ifempty|ifdimval|ifdimexpression|ifdim|ifdefined|ifcstok|ifcsname|ifcondition|ifcmpnum|ifcmpdim|ifchknum|ifchkdim|ifcat|ifcase|ifboolean|ifarguments|ifabsnum|ifabsdim|if|hyphenpenalty|hyphenchar|hyphenationmode|hyphenationmin|hyphenation|ht|hss|hskip|hsize|hrule|hpack|holdinginserts|hjcode|hfuzz|hfilneg|hfill|hfil|hccode|hbox|hbadness|hangindent|hangafter|halign|gtokspre|gtoksapp|glyphyscale|glyphyoffset|glyphxscale|glyphxoffset|glyphtextscale|glyphstatefield|glyphscriptscriptscale|glyphscriptscale|glyphscriptfield|glyphscale|glyphoptions|glyphdatafield|glyph|gluetomu|gluestretchorder|gluestretch|gluespecdef|glueshrinkorder|glueshrink|glueexpr|globaldefs|global|glettonothing|gletcsname|glet|gleaders|gdefcsname|gdef|futurelet|futureexpandisap|futureexpandis|futureexpand|futuredef|futurecsname|frozen|formatname|fonttextcontrol|fontspecifiedsize|fontspecifiedname|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|escapechar|errorstopmode|errorcontextlines|errmessage|errhelp|eqno|enforced|endsimplegroup|endlocalcontrol|endlinechar|endinput|endgroup|endcsname|end|emergencystretch|else|efcode|edefcsname|edef|dump|dp|doublehyphendemerits|divide|displaywidth|displaywidowpenalty|displaywidowpenalties|displaystyle|displaylimits|displayindent|discretionary|directlua|dimexpression|dimexpr|dimensiondef|dimendef|dimen|detokenize|delimitershortfall|delimiterfactor|delimiter|delcode|defcsname|defaultskewchar|defaulthyphenchar|def|deadcycles|day|currentmarks|currentiftype|currentiflevel|currentifbranch|currentgrouptype|currentgrouplevel|csstring|csname|crcr|crampedtextstyle|crampedscriptstyle|crampedscriptscriptstyle|crampeddisplaystyle|cr|countdef|count|copy|clubpenalty|clubpenalties|clearmarks|cleaders|chardef|char|catcodetable|catcode|brokenpenalty|boxyoffset|boxymove|boxxoffset|boxxmove|boxtotal|boxorientation|boxmaxdepth|boxdirection|boxattribute|box|boundary|botmarks|botmark|binoppenalty|belowdisplayskip|belowdisplayshortskip|beginsimplegroup|beginlocalcontrol|begingroup|begincsname|batchmode|baselineskip|badness|autoparagraphmode|automigrationmode|automatichyphenpenalty|automaticdiscretionary|attributedef|attribute|atopwithdelims|atop|atendofgrouped|atendofgroup|aligntab|alignmark|aligncontent|aliased|aftergrouped|aftergroup|afterassignment|afterassigned|advance|adjustspacingstretch|adjustspacingstep|adjustspacingshrink|adjustspacing|adjdemerits|accent|abovewithdelims|abovedisplayskip|abovedisplayshortskip|above|XeTeXversion|Uvextensible|Uunderdelimiter|Usuperscript|Usuperprescript|Usubscript|Usubprescript|Ustyle|Ustopmath|Ustopdisplaymath|Ustartmath|Ustartdisplaymath|Ustack|Uskewedwithdelims|Uskewed|Uroot|Uright|Uradical|Uoverwithdelims|Uoverdelimiter|Uover|Unosuperscript|Unosuperprescript|Unosubscript|Unosubprescript|Umiddle|Umathvoid|Umathvextensiblevariant|Umathunderlinevariant|Umathunderdelimitervgap|Umathunderdelimitervariant|Umathunderdelimiterbgap|Umathunderbarvgap|Umathunderbarrule|Umathunderbarkern|Umathtopaccentvariant|Umathsupsubbottommax|Umathsupshiftup|Umathsupshiftdrop|Umathsuperscriptvariant|Umathsupbottommin|Umathsubtopmax|Umathsubsupvgap|Umathsubsupshiftdown|Umathsubshiftdrop|Umathsubshiftdown|Umathsubscriptvariant|Umathstackvgap|Umathstackvariant|Umathstacknumup|Umathstackdenomdown|Umathspacingmode|Umathspacebeforescript|Umathspaceafterscript|Umathskewedfractionvgap|Umathskewedfractionhgap|Umathrelrelspacing|Umathrelpunctspacing|Umathrelordspacing|Umathrelopspacing|Umathrelopenspacing|Umathrelinnerspacing|Umathrelclosespacing|Umathrelbinspacing|Umathradicalvgap|Umathradicalvariant|Umathradicalrule|Umathradicalkern|Umathradicaldegreeraise|Umathradicaldegreebefore|Umathradicaldegreeafter|Umathquad|Umathpunctrelspacing|Umathpunctpunctspacing|Umathpunctordspacing|Umathpunctopspacing|Umathpunctopenspacing|Umathpunctinnerspacing|Umathpunctclosespacing|Umathpunctbinspacing|Umathphantom|Umathoverlinevariant|Umathoverlayaccentvariant|Umathoverdelimitervgap|Umathoverdelimitervariant|Umathoverdelimiterbgap|Umathoverbarvgap|Umathoverbarrule|Umathoverbarkern|Umathordrelspacing|Umathordpunctspacing|Umathordordspacing|Umathordopspacing|Umathordopenspacing|Umathordinnerspacing|Umathordclosespacing|Umathordbinspacing|Umathoprelspacing|Umathoppunctspacing|Umathopordspacing|Umathopopspacing|Umathopopenspacing|Umathopinnerspacing|Umathoperatorsize|Umathopenupheight|Umathopenupdepth|Umathopenrelspacing|Umathopenpunctspacing|Umathopenordspacing|Umathopenopspacing|Umathopenopenspacing|Umathopeninnerspacing|Umathopenclosespacing|Umathopenbinspacing|Umathopclosespacing|Umathopbinspacing|Umathnumeratorvariant|Umathnolimitsupfactor|Umathnolimitsubfactor|Umathnolimits|Umathnoaxis|Umathlimits|Umathlimitbelowvgap|Umathlimitbelowkern|Umathlimitbelowbgap|Umathlimitabovevgap|Umathlimitabovekern|Umathlimitabovebgap|Umathinnerrelspacing|Umathinnerpunctspacing|Umathinnerordspacing|Umathinneropspacing|Umathinneropenspacing|Umathinnerinnerspacing|Umathinnerclosespacing|Umathinnerbinspacing|Umathhextensiblevariant|Umathfractionvariant|Umathfractionrule|Umathfractionnumvgap|Umathfractionnumup|Umathfractiondenomvgap|Umathfractiondenomdown|Umathfractiondelsize|Umathextrasupshift|Umathextrasuppreshift|Umathextrasubshift|Umathextrasubpreshift|Umathdenominatorvariant|Umathdelimiterundervariant|Umathdelimiterovervariant|Umathdegreevariant|Umathconnectoroverlapmin|Umathcodenum|Umathcode|Umathcloserelspacing|Umathclosepunctspacing|Umathcloseordspacing|Umathcloseopspacing|Umathcloseopenspacing|Umathcloseinnerspacing|Umathcloseclosespacing|Umathclosebinspacing|Umathclass|Umathcharslot|Umathcharnumdef|Umathcharnum|Umathcharfam|Umathchardef|Umathcharclass|Umathchar|Umathbotaccentvariant|Umathbinrelspacing|Umathbinpunctspacing|Umathbinordspacing|Umathbinopspacing|Umathbinopenspacing|Umathbininnerspacing|Umathbinclosespacing|Umathbinbinspacing|Umathaxis|Umathadapttoright|Umathadapttoleft|Umathaccentvariant|Umathaccentbaseheight|Umathaccent|Uleft|Uhextensible|Udelimiterunder|Udelimiterover|Udelimiter|Udelcodenum|Udelcode|Uchar|Uatopwithdelims|Uatop|Uabovewithdelims|Uabove|UUskewedwithdelims|UUskewed|Omegaversion|Omegarevision|Omegaminorversion|Alephversion|Alephrevision|Alephminorversion| )(?=[^a-zA-Z])", + "match" : "\u005C\u005C(year|xtokspre|xtoksapp|xspaceskip|xleaders|xdefcsname|xdef|wrapuppar|wordboundary|widowpenalty|widowpenalties|wd|vtop|vss|vsplit|vskip|vsize|vrule|vpack|vfuzz|vfilneg|vfill|vfil|vcenter|vbox|vbadness|valign|vadjust|uppercase|unvpack|unvcopy|unvbox|untraced|unskip|unpenalty|unletprotected|unletfrozen|unless|unkern|unhpack|unhcopy|unhbox|underline|undent|uchyph|uccode|tracingstats|tracingrestores|tracingparagraphs|tracingpages|tracingoutput|tracingonline|tracingnesting|tracingmath|tracingmarks|tracingmacros|tracinglostchars|tracinglevels|tracinginserts|tracingifs|tracinghyphenation|tracinggroups|tracingfullboxes|tracingfonts|tracingexpressions|tracingcommands|tracingassigns|tracingalignments|tpack|toscaled|topskip|topmarks|topmark|tolerant|tolerance|tokspre|toksdef|toksapp|toks|tokenized|tointeger|todimension|time|thinmuskip|thickmuskip|thewithoutunit|the|textstyle|textfont|textdirection|tabskip|tabsize|swapcsvalues|supmarkmode|string|splittopskip|splitmaxdepth|splitfirstmarks|splitfirstmark|splitdiscards|splitbotmarks|splitbotmark|span|spaceskip|spacefactor|snapshotpar|skipdef|skip|skewchar|showtokens|showthe|shownodedetails|showlists|showifs|showgroups|showboxdepth|showboxbreadth|showbox|show|shipout|shapingpenalty|shapingpenaltiesmode|sfcode|setlanguage|setfontid|setbox|semiprotected|semiexpanded|scrollmode|scriptstyle|scriptspace|scriptscriptstyle|scriptscriptfont|scriptfont|scantokens|scantextokens|scaledfontdimen|savingvdiscards|savinghyphcodes|savecatcodetable|rpcode|romannumeral|rightskip|rightmarginkern|righthyphenmin|right|retokenized|relpenalty|relax|raise|radical|quitvmode|pxdimen|protrusionboundary|protrudechars|protected|prevgraf|prevdepth|pretolerance|prerelpenalty|prehyphenchar|preexhyphenchar|predisplaysize|predisplaypenalty|predisplaygapfactor|predisplaydirection|prebinoppenalty|posthyphenchar|postexhyphenchar|postdisplaypenalty|permanent|penalty|pdfximage|pdfxformresources|pdfxformname|pdfxformmargin|pdfxformattr|pdfxform|pdfvorigin|pdfuniqueresname|pdfuniformdeviate|pdftrailerid|pdftrailer|pdftracingfonts|pdfthreadmargin|pdfthread|pdftexversion|pdftexrevision|pdftexbanner|pdfsuppressptexinfo|pdfsuppressoptionalinfo|pdfstartthread|pdfstartlink|pdfsetrandomseed|pdfsetmatrix|pdfsavepos|pdfsave|pdfretval|pdfrestore|pdfreplacefont|pdfrefximage|pdfrefxform|pdfrefobj|pdfrecompress|pdfrandomseed|pdfpxdimen|pdfprotrudechars|pdfprimitive|pdfpkresolution|pdfpkmode|pdfpkfixeddpi|pdfpagewidth|pdfpagesattr|pdfpageresources|pdfpageref|pdfpageheight|pdfpagebox|pdfpageattr|pdfoutput|pdfoutline|pdfomitcidset|pdfomitcharset|pdfobjcompresslevel|pdfobj|pdfnormaldeviate|pdfnoligatures|pdfnames|pdfminorversion|pdfmapline|pdfmapfile|pdfmajorversion|pdfliteral|pdflinkmargin|pdflastypos|pdflastxpos|pdflastximagepages|pdflastximage|pdflastxform|pdflastobj|pdflastlink|pdflastlinedepth|pdflastannot|pdfinsertht|pdfinfoomitdate|pdfinfo|pdfinclusionerrorlevel|pdfinclusioncopyfonts|pdfincludechars|pdfimageresolution|pdfimagehicolor|pdfimagegamma|pdfimageapplygamma|pdfimageaddfilename|pdfignoreunknownimages|pdfignoreddimen|pdfhorigin|pdfglyphtounicode|pdfgentounicode|pdfgamma|pdffontsize|pdffontobjnum|pdffontname|pdffontexpand|pdffontattr|pdffirstlineheight|pdfendthread|pdfendlink|pdfeachlineheight|pdfeachlinedepth|pdfdraftmode|pdfdestmargin|pdfdest|pdfdecimaldigits|pdfcreationdate|pdfcopyfont|pdfcompresslevel|pdfcolorstackinit|pdfcolorstack|pdfcatalog|pdfannot|pdfadjustspacing|pausing|patterns|parskip|parshapelength|parshapeindent|parshapedimen|parshape|parindent|parfillskip|pardirection|parattribute|parametermark|parametercount|par|pagevsize|pagetotal|pagestretch|pageshrink|pagegoal|pagefilstretch|pagefillstretch|pagefilllstretch|pagediscards|pagedepth|pageboundary|overwithdelims|overshoot|overloadmode|overloaded|overline|overfullrule|over|outputpenalty|outputbox|output|outer|orunless|orphanpenalty|orphanpenalties|orelse|or|omit|numexpression|numexpr|numericscale|number|nullfont|nulldelimiterspace|novrule|nospaces|normalyear|normalxtokspre|normalxtoksapp|normalxspaceskip|normalxleaders|normalxdefcsname|normalxdef|normalwrapuppar|normalwordboundary|normalwidowpenalty|normalwidowpenalties|normalwd|normalvtop|normalvss|normalvsplit|normalvskip|normalvsize|normalvrule|normalvpack|normalvfuzz|normalvfilneg|normalvfill|normalvfil|normalvcenter|normalvbox|normalvbadness|normalvalign|normalvadjust|normaluppercase|normalunvpack|normalunvcopy|normalunvbox|normaluntraced|normalunskip|normalunpenalty|normalunletprotected|normalunletfrozen|normalunless|normalunkern|normalunhpack|normalunhcopy|normalunhbox|normalunexpanded|normalunderline|normalundent|normaluchyph|normaluccode|normaltracingstats|normaltracingrestores|normaltracingparagraphs|normaltracingpages|normaltracingoutput|normaltracingonline|normaltracingnesting|normaltracingmath|normaltracingmarks|normaltracingmacros|normaltracinglostchars|normaltracinglevels|normaltracinginserts|normaltracingifs|normaltracinghyphenation|normaltracinggroups|normaltracingfullboxes|normaltracingfonts|normaltracingexpressions|normaltracingcommands|normaltracingassigns|normaltracingalignments|normaltpack|normaltoscaled|normaltopskip|normaltopmarks|normaltopmark|normaltolerant|normaltolerance|normaltokspre|normaltoksdef|normaltoksapp|normaltoks|normaltokenized|normaltointeger|normaltodimension|normaltime|normalthinmuskip|normalthickmuskip|normalthewithoutunit|normalthe|normaltextstyle|normaltextfont|normaltextdirection|normaltabskip|normaltabsize|normalswapcsvalues|normalsupmarkmode|normalstring|normalsplittopskip|normalsplitmaxdepth|normalsplitfirstmarks|normalsplitfirstmark|normalsplitdiscards|normalsplitbotmarks|normalsplitbotmark|normalspan|normalspaceskip|normalspacefactor|normalsnapshotpar|normalskipdef|normalskip|normalskewchar|normalshowtokens|normalshowthe|normalshownodedetails|normalshowlists|normalshowifs|normalshowgroups|normalshowboxdepth|normalshowboxbreadth|normalshowbox|normalshow|normalshipout|normalshapingpenalty|normalshapingpenaltiesmode|normalsfcode|normalsetlanguage|normalsetfontid|normalsetbox|normalsemiprotected|normalsemiexpanded|normalscrollmode|normalscriptstyle|normalscriptspace|normalscriptscriptstyle|normalscriptscriptfont|normalscriptfont|normalscantokens|normalscantextokens|normalscaledfontdimen|normalsavingvdiscards|normalsavinghyphcodes|normalsavecatcodetable|normalrpcode|normalromannumeral|normalrightskip|normalrightmarginkern|normalrighthyphenmin|normalright|normalretokenized|normalrelpenalty|normalrelax|normalraise|normalradical|normalquitvmode|normalpxdimen|normalprotrusionboundary|normalprotrudechars|normalprotected|normalprevgraf|normalprevdepth|normalpretolerance|normalprerelpenalty|normalprehyphenchar|normalpreexhyphenchar|normalpredisplaysize|normalpredisplaypenalty|normalpredisplaygapfactor|normalpredisplaydirection|normalprebinoppenalty|normalposthyphenchar|normalpostexhyphenchar|normalpostdisplaypenalty|normalpermanent|normalpenalty|normalpdfximage|normalpdfxformresources|normalpdfxformname|normalpdfxformmargin|normalpdfxformattr|normalpdfxform|normalpdfvorigin|normalpdfuniqueresname|normalpdfuniformdeviate|normalpdftrailerid|normalpdftrailer|normalpdftracingfonts|normalpdfthreadmargin|normalpdfthread|normalpdftexversion|normalpdftexrevision|normalpdftexbanner|normalpdfsuppressptexinfo|normalpdfsuppressoptionalinfo|normalpdfstartthread|normalpdfstartlink|normalpdfsetrandomseed|normalpdfsetmatrix|normalpdfsavepos|normalpdfsave|normalpdfretval|normalpdfrestore|normalpdfreplacefont|normalpdfrefximage|normalpdfrefxform|normalpdfrefobj|normalpdfrecompress|normalpdfrandomseed|normalpdfpxdimen|normalpdfprotrudechars|normalpdfprimitive|normalpdfpkresolution|normalpdfpkmode|normalpdfpkfixeddpi|normalpdfpagewidth|normalpdfpagesattr|normalpdfpageresources|normalpdfpageref|normalpdfpageheight|normalpdfpagebox|normalpdfpageattr|normalpdfoutput|normalpdfoutline|normalpdfomitcidset|normalpdfomitcharset|normalpdfobjcompresslevel|normalpdfobj|normalpdfnormaldeviate|normalpdfnoligatures|normalpdfnames|normalpdfminorversion|normalpdfmapline|normalpdfmapfile|normalpdfmajorversion|normalpdfliteral|normalpdflinkmargin|normalpdflastypos|normalpdflastxpos|normalpdflastximagepages|normalpdflastximage|normalpdflastxform|normalpdflastobj|normalpdflastlink|normalpdflastlinedepth|normalpdflastannot|normalpdfinsertht|normalpdfinfoomitdate|normalpdfinfo|normalpdfinclusionerrorlevel|normalpdfinclusioncopyfonts|normalpdfincludechars|normalpdfimageresolution|normalpdfimagehicolor|normalpdfimagegamma|normalpdfimageapplygamma|normalpdfimageaddfilename|normalpdfignoreunknownimages|normalpdfignoreddimen|normalpdfhorigin|normalpdfglyphtounicode|normalpdfgentounicode|normalpdfgamma|normalpdffontsize|normalpdffontobjnum|normalpdffontname|normalpdffontexpand|normalpdffontattr|normalpdffirstlineheight|normalpdfendthread|normalpdfendlink|normalpdfeachlineheight|normalpdfeachlinedepth|normalpdfdraftmode|normalpdfdestmargin|normalpdfdest|normalpdfdecimaldigits|normalpdfcreationdate|normalpdfcopyfont|normalpdfcompresslevel|normalpdfcolorstackinit|normalpdfcolorstack|normalpdfcatalog|normalpdfannot|normalpdfadjustspacing|normalpausing|normalpatterns|normalparskip|normalparshapelength|normalparshapeindent|normalparshapedimen|normalparshape|normalparindent|normalparfillskip|normalparfillleftskip|normalpardirection|normalparattribute|normalparametermark|normalparametercount|normalpar|normalpagevsize|normalpagetotal|normalpagestretch|normalpageshrink|normalpagegoal|normalpagefilstretch|normalpagefillstretch|normalpagefilllstretch|normalpagediscards|normalpagedepth|normalpageboundary|normaloverwithdelims|normalovershoot|normaloverloadmode|normaloverloaded|normaloverline|normaloverfullrule|normalover|normaloutputpenalty|normaloutputbox|normaloutput|normalouter|normalorunless|normalorphanpenalty|normalorphanpenalties|normalorelse|normalor|normalomit|normalnumexpression|normalnumexpr|normalnumericscale|normalnumber|normalnullfont|normalnulldelimiterspace|normalnovrule|normalnospaces|normalnormalizelinemode|normalnorelax|normalnonstopmode|normalnonscript|normalnolimits|normalnoindent|normalnohrule|normalnoexpand|normalnoboundary|normalnoaligned|normalnoalign|normalnewlinechar|normalmutoglue|normalmutable|normalmuskipdef|normalmuskip|normalmultiply|normalmugluespecdef|normalmuexpr|normalmskip|normalmoveright|normalmoveleft|normalmonth|normalmkern|normalmiddle|normalmessage|normalmedmuskip|normalmeaningless|normalmeaningfull|normalmeaningasis|normalmeaning|normalmaxdepth|normalmaxdeadcycles|normalmathsurroundskip|normalmathsurroundmode|normalmathsurround|normalmathstyle|normalmathscriptsmode|normalmathscriptcharmode|normalmathscriptboxmode|normalmathscale|normalmathrulethicknessmode|normalmathrulesmode|normalmathrulesfam|normalmathrel|normalmathpunct|normalmathpenaltiesmode|normalmathord|normalmathopen|normalmathop|normalmathnolimitsmode|normalmathitalicsmode|normalmathinner|normalmathfontcontrol|normalmathflattenmode|normalmatheqnogapstep|normalmathdisplayskipmode|normalmathdirection|normalmathdelimitersmode|normalmathcontrolmode|normalmathcode|normalmathclose|normalmathchoice|normalmathchardef|normalmathchar|normalmathbin|normalmathaccent|normalmarks|normalmark|normalluatexversion|normalluatexrevision|normalluatexbanner|normalluafunctioncall|normalluafunction|normalluaescapestring|normalluadef|normalluacopyinputnodes|normalluabytecodecall|normalluabytecode|normallpcode|normallowercase|normallower|normallooseness|normallong|normallocalrightboxbox|normallocalrightbox|normallocalmiddlebox|normallocalleftboxbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolled|normallocalcontrol|normallocalbrokenpenalty|normallineskiplimit|normallineskip|normallinepenalty|normallinedirection|normallimits|normallettonothing|normalletprotected|normalletfrozen|normalletcsname|normalletcharcode|normallet|normalleqno|normalleftskip|normalleftmarginkern|normallefthyphenmin|normalleft|normalleaders|normallccode|normallastskip|normallastpenalty|normallastparcontext|normallastnodetype|normallastnodesubtype|normallastnamedcs|normallastlinefit|normallastkern|normallastchknum|normallastchkdim|normallastbox|normallastarguments|normallanguage|normalkern|normaljobname|normalizelinemode|normalinterlinepenalty|normalinterlinepenalties|normalinteractionmode|normalintegerdef|normalinstance|normalinsertwidth|normalinsertuncopy|normalinsertunbox|normalinsertstoring|normalinsertstorage|normalinsertprogress|normalinsertpenalty|normalinsertpenalties|normalinsertmultiplier|normalinsertmode|normalinsertmaxdepth|normalinsertlimit|normalinsertheights|normalinsertheight|normalinsertdistance|normalinsertdepth|normalinsertcopy|normalinsertbox|normalinsert|normalinputlineno|normalinput|normalinitcatcodetable|normalindent|normalimmutable|normalimmediate|normalignorespaces|normalignorepars|normalignorearguments|normalifx|normalifvoid|normalifvmode|normalifvbox|normaliftrue|normaliftok|normalifrelax|normalifpdfprimitive|normalifpdfabsnum|normalifpdfabsdim|normalifparameters|normalifparameter|normalifodd|normalifnumval|normalifnumexpression|normalifnum|normalifmmode|normalifmathstyle|normalifmathparameter|normalifinsert|normalifinner|normalifincsname|normalifhmode|normalifhbox|normalifhasxtoks|normalifhastoks|normalifhastok|normalifhaschar|normaliffontchar|normalifflags|normaliffalse|normalifempty|normalifdimval|normalifdimexpression|normalifdim|normalifdefined|normalifcstok|normalifcsname|normalifcondition|normalifcmpnum|normalifcmpdim|normalifchknum|normalifchkdim|normalifcat|normalifcase|normalifboolean|normalifarguments|normalifabsnum|normalifabsdim|normalif|normalhyphenpenalty|normalhyphenchar|normalhyphenationmode|normalhyphenationmin|normalhyphenation|normalht|normalhss|normalhskip|normalhsize|normalhrule|normalhpack|normalholdinginserts|normalhjcode|normalhfuzz|normalhfilneg|normalhfill|normalhfil|normalhccode|normalhbox|normalhbadness|normalhangindent|normalhangafter|normalhalign|normalgtokspre|normalgtoksapp|normalglyphyscale|normalglyphyoffset|normalglyphxscale|normalglyphxoffset|normalglyphtextscale|normalglyphstatefield|normalglyphscriptscriptscale|normalglyphscriptscale|normalglyphscriptfield|normalglyphscale|normalglyphoptions|normalglyphdatafield|normalglyph|normalgluetomu|normalgluestretchorder|normalgluestretch|normalgluespecdef|normalglueshrinkorder|normalglueshrink|normalglueexpr|normalglobaldefs|normalglobal|normalglettonothing|normalgletcsname|normalglet|normalgleaders|normalgdefcsname|normalgdef|normalfuturelet|normalfutureexpandisap|normalfutureexpandis|normalfutureexpand|normalfuturedef|normalfuturecsname|normalfrozen|normalformatname|normalfonttextcontrol|normalfontspecifiedsize|normalfontspecifiedname|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normalescapechar|normalerrorstopmode|normalerrorcontextlines|normalerrmessage|normalerrhelp|normaleqno|normalenforced|normalendsimplegroup|normalendlocalcontrol|normalendlinechar|normalendinput|normalendgroup|normalendcsname|normalend|normalemergencystretch|normalelse|normalefcode|normaledefcsname|normaledef|normaldump|normaldp|normaldoublehyphendemerits|normaldivide|normaldisplaywidth|normaldisplaywidowpenalty|normaldisplaywidowpenalties|normaldisplaystyle|normaldisplaylimits|normaldisplayindent|normaldiscretionary|normaldirectlua|normaldimexpression|normaldimexpr|normaldimensiondef|normaldimendef|normaldimen|normaldetokenize|normaldelimitershortfall|normaldelimiterfactor|normaldelimiter|normaldelcode|normaldefcsname|normaldefaultskewchar|normaldefaulthyphenchar|normaldef|normaldeadcycles|normalday|normalcurrentmarks|normalcurrentiftype|normalcurrentiflevel|normalcurrentifbranch|normalcurrentgrouptype|normalcurrentgrouplevel|normalcsstring|normalcsname|normalcrcr|normalcrampedtextstyle|normalcrampedscriptstyle|normalcrampedscriptscriptstyle|normalcrampeddisplaystyle|normalcr|normalcountdef|normalcount|normalcopy|normalclubpenalty|normalclubpenalties|normalclearmarks|normalcleaders|normalchardef|normalchar|normalcatcodetable|normalcatcode|normalbrokenpenalty|normalboxyoffset|normalboxymove|normalboxxoffset|normalboxxmove|normalboxtotal|normalboxorientation|normalboxmaxdepth|normalboxdirection|normalboxattribute|normalbox|normalboundary|normalbotmarks|normalbotmark|normalbinoppenalty|normalbelowdisplayskip|normalbelowdisplayshortskip|normalbeginsimplegroup|normalbeginlocalcontrol|normalbegingroup|normalbegincsname|normalbatchmode|normalbaselineskip|normalbadness|normalautoparagraphmode|normalautomigrationmode|normalautomatichyphenpenalty|normalautomaticdiscretionary|normalattributedef|normalattribute|normalatopwithdelims|normalatop|normalatendofgrouped|normalatendofgroup|normalaligntab|normalalignmark|normalaligncontent|normalaliased|normalaftergrouped|normalaftergroup|normalafterassignment|normalafterassigned|normaladvance|normaladjustspacingstretch|normaladjustspacingstep|normaladjustspacingshrink|normaladjustspacing|normaladjdemerits|normalaccent|normalabovewithdelims|normalabovedisplayskip|normalabovedisplayshortskip|normalabove|normalXeTeXversion|normalUvextensible|normalUunderdelimiter|normalUsuperscript|normalUsuperprescript|normalUsubscript|normalUsubprescript|normalUstyle|normalUstopmath|normalUstopdisplaymath|normalUstartmath|normalUstartdisplaymath|normalUstack|normalUskewedwithdelims|normalUskewed|normalUroot|normalUright|normalUradical|normalUoverwithdelims|normalUoverdelimiter|normalUover|normalUnosuperscript|normalUnosuperprescript|normalUnosubscript|normalUnosubprescript|normalUmiddle|normalUmathvoid|normalUmathvextensiblevariant|normalUmathunderlinevariant|normalUmathunderdelimitervgap|normalUmathunderdelimitervariant|normalUmathunderdelimiterbgap|normalUmathunderbarvgap|normalUmathunderbarrule|normalUmathunderbarkern|normalUmathtopaccentvariant|normalUmathsupsubbottommax|normalUmathsupshiftup|normalUmathsupshiftdrop|normalUmathsuperscriptvariant|normalUmathsupbottommin|normalUmathsubtopmax|normalUmathsubsupvgap|normalUmathsubsupshiftdown|normalUmathsubshiftdrop|normalUmathsubshiftdown|normalUmathsubscriptvariant|normalUmathstackvgap|normalUmathstackvariant|normalUmathstacknumup|normalUmathstackdenomdown|normalUmathspacingmode|normalUmathspacebeforescript|normalUmathspaceafterscript|normalUmathskewedfractionvgap|normalUmathskewedfractionhgap|normalUmathrelrelspacing|normalUmathrelpunctspacing|normalUmathrelordspacing|normalUmathrelopspacing|normalUmathrelopenspacing|normalUmathrelinnerspacing|normalUmathrelclosespacing|normalUmathrelbinspacing|normalUmathradicalvgap|normalUmathradicalvariant|normalUmathradicalrule|normalUmathradicalkern|normalUmathradicaldegreeraise|normalUmathradicaldegreebefore|normalUmathradicaldegreeafter|normalUmathquad|normalUmathpunctrelspacing|normalUmathpunctpunctspacing|normalUmathpunctordspacing|normalUmathpunctopspacing|normalUmathpunctopenspacing|normalUmathpunctinnerspacing|normalUmathpunctclosespacing|normalUmathpunctbinspacing|normalUmathphantom|normalUmathoverlinevariant|normalUmathoverlayaccentvariant|normalUmathoverdelimitervgap|normalUmathoverdelimitervariant|normalUmathoverdelimiterbgap|normalUmathoverbarvgap|normalUmathoverbarrule|normalUmathoverbarkern|normalUmathordrelspacing|normalUmathordpunctspacing|normalUmathordordspacing|normalUmathordopspacing|normalUmathordopenspacing|normalUmathordinnerspacing|normalUmathordclosespacing|normalUmathordbinspacing|normalUmathoprelspacing|normalUmathoppunctspacing|normalUmathopordspacing|normalUmathopopspacing|normalUmathopopenspacing|normalUmathopinnerspacing|normalUmathoperatorsize|normalUmathopenupheight|normalUmathopenupdepth|normalUmathopenrelspacing|normalUmathopenpunctspacing|normalUmathopenordspacing|normalUmathopenopspacing|normalUmathopenopenspacing|normalUmathopeninnerspacing|normalUmathopenclosespacing|normalUmathopenbinspacing|normalUmathopclosespacing|normalUmathopbinspacing|normalUmathnumeratorvariant|normalUmathnolimitsupfactor|normalUmathnolimitsubfactor|normalUmathnolimits|normalUmathnoaxis|normalUmathlimits|normalUmathlimitbelowvgap|normalUmathlimitbelowkern|normalUmathlimitbelowbgap|normalUmathlimitabovevgap|normalUmathlimitabovekern|normalUmathlimitabovebgap|normalUmathinnerrelspacing|normalUmathinnerpunctspacing|normalUmathinnerordspacing|normalUmathinneropspacing|normalUmathinneropenspacing|normalUmathinnerinnerspacing|normalUmathinnerclosespacing|normalUmathinnerbinspacing|normalUmathhextensiblevariant|normalUmathfractionvariant|normalUmathfractionrule|normalUmathfractionnumvgap|normalUmathfractionnumup|normalUmathfractiondenomvgap|normalUmathfractiondenomdown|normalUmathfractiondelsize|normalUmathextrasupshift|normalUmathextrasuppreshift|normalUmathextrasubshift|normalUmathextrasubpreshift|normalUmathdenominatorvariant|normalUmathdelimiterundervariant|normalUmathdelimiterovervariant|normalUmathdegreevariant|normalUmathconnectoroverlapmin|normalUmathcodenum|normalUmathcode|normalUmathcloserelspacing|normalUmathclosepunctspacing|normalUmathcloseordspacing|normalUmathcloseopspacing|normalUmathcloseopenspacing|normalUmathcloseinnerspacing|normalUmathcloseclosespacing|normalUmathclosebinspacing|normalUmathclass|normalUmathcharslot|normalUmathcharnumdef|normalUmathcharnum|normalUmathcharfam|normalUmathchardef|normalUmathcharclass|normalUmathchar|normalUmathbotaccentvariant|normalUmathbinrelspacing|normalUmathbinpunctspacing|normalUmathbinordspacing|normalUmathbinopspacing|normalUmathbinopenspacing|normalUmathbininnerspacing|normalUmathbinclosespacing|normalUmathbinbinspacing|normalUmathaxis|normalUmathadapttoright|normalUmathadapttoleft|normalUmathaccentvariant|normalUmathaccentbaseheight|normalUmathaccent|normalUleft|normalUhextensible|normalUdelimiterunder|normalUdelimiterover|normalUdelimiter|normalUdelcodenum|normalUdelcode|normalUchar|normalUatopwithdelims|normalUatop|normalUabovewithdelims|normalUabove|normalUUskewedwithdelims|normalUUskewed|normalOmegaversion|normalOmegarevision|normalOmegaminorversion|normalAlephversion|normalAlephrevision|normalAlephminorversion|normal |norelax|nonstopmode|nonscript|nolimits|noindent|nohrule|noexpand|noboundary|noaligned|noalign|newlinechar|mutoglue|mutable|muskipdef|muskip|multiply|mugluespecdef|muexpr|mskip|moveright|moveleft|month|mkern|middle|message|medmuskip|meaningless|meaningfull|meaningasis|meaning|maxdepth|maxdeadcycles|mathsurroundskip|mathsurroundmode|mathsurround|mathstyle|mathscriptsmode|mathscriptcharmode|mathscriptboxmode|mathscale|mathrulethicknessmode|mathrulesmode|mathrulesfam|mathrel|mathpunct|mathpenaltiesmode|mathord|mathopen|mathop|mathnolimitsmode|mathitalicsmode|mathinner|mathfontcontrol|mathflattenmode|matheqnogapstep|mathdisplayskipmode|mathdirection|mathdelimitersmode|mathcontrolmode|mathcode|mathclose|mathchoice|mathchardef|mathchar|mathbin|mathaccent|marks|mark|luatexversion|luatexrevision|luatexbanner|luafunctioncall|luafunction|luaescapestring|luadef|luacopyinputnodes|luabytecodecall|luabytecode|lpcode|lowercase|lower|looseness|long|localrightboxbox|localrightbox|localmiddlebox|localleftboxbox|localleftbox|localinterlinepenalty|localcontrolled|localcontrol|localbrokenpenalty|lineskiplimit|lineskip|linepenalty|linedirection|limits|lettonothing|letprotected|letfrozen|letcsname|letcharcode|let|leqno|leftskip|leftmarginkern|lefthyphenmin|left|leaders|lccode|lastskip|lastpenalty|lastparcontext|lastnodetype|lastnodesubtype|lastnamedcs|lastlinefit|lastkern|lastchknum|lastchkdim|lastbox|lastarguments|language|kern|jobname|interlinepenalty|interlinepenalties|interactionmode|integerdef|instance|insertwidth|insertuncopy|insertunbox|insertstoring|insertstorage|insertprogress|insertpenalty|insertpenalties|insertmultiplier|insertmode|insertmaxdepth|insertlimit|insertheights|insertheight|insertdistance|insertdepth|insertcopy|insertbox|insert|inputlineno|input|initcatcodetable|indent|immutable|immediate|ignorespaces|ignorepars|ignorearguments|ifx|ifvoid|ifvmode|ifvbox|iftrue|iftok|ifrelax|ifpdfprimitive|ifpdfabsnum|ifpdfabsdim|ifparameters|ifparameter|ifodd|ifnumval|ifnumexpression|ifnum|ifmmode|ifmathstyle|ifmathparameter|ifinsert|ifinner|ifincsname|ifhmode|ifhbox|ifhasxtoks|ifhastoks|ifhastok|ifhaschar|iffontchar|ifflags|iffalse|ifempty|ifdimval|ifdimexpression|ifdim|ifdefined|ifcstok|ifcsname|ifcondition|ifcmpnum|ifcmpdim|ifchknum|ifchkdim|ifcat|ifcase|ifboolean|ifarguments|ifabsnum|ifabsdim|if|hyphenpenalty|hyphenchar|hyphenationmode|hyphenationmin|hyphenation|ht|hss|hskip|hsize|hrule|hpack|holdinginserts|hjcode|hfuzz|hfilneg|hfill|hfil|hccode|hbox|hbadness|hangindent|hangafter|halign|gtokspre|gtoksapp|glyphyscale|glyphyoffset|glyphxscale|glyphxoffset|glyphtextscale|glyphstatefield|glyphscriptscriptscale|glyphscriptscale|glyphscriptfield|glyphscale|glyphoptions|glyphdatafield|glyph|gluetomu|gluestretchorder|gluestretch|gluespecdef|glueshrinkorder|glueshrink|glueexpr|globaldefs|global|glettonothing|gletcsname|glet|gleaders|gdefcsname|gdef|futurelet|futureexpandisap|futureexpandis|futureexpand|futuredef|futurecsname|frozen|formatname|fonttextcontrol|fontspecifiedsize|fontspecifiedname|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|escapechar|errorstopmode|errorcontextlines|errmessage|errhelp|eqno|enforced|endsimplegroup|endlocalcontrol|endlinechar|endinput|endgroup|endcsname|end|emergencystretch|else|efcode|edefcsname|edef|dump|dp|doublehyphendemerits|divide|displaywidth|displaywidowpenalty|displaywidowpenalties|displaystyle|displaylimits|displayindent|discretionary|directlua|dimexpression|dimexpr|dimensiondef|dimendef|dimen|detokenize|delimitershortfall|delimiterfactor|delimiter|delcode|defcsname|defaultskewchar|defaulthyphenchar|def|deadcycles|day|currentmarks|currentiftype|currentiflevel|currentifbranch|currentgrouptype|currentgrouplevel|csstring|csname|crcr|crampedtextstyle|crampedscriptstyle|crampedscriptscriptstyle|crampeddisplaystyle|cr|countdef|count|copy|clubpenalty|clubpenalties|clearmarks|cleaders|chardef|char|catcodetable|catcode|brokenpenalty|boxyoffset|boxymove|boxxoffset|boxxmove|boxtotal|boxorientation|boxmaxdepth|boxdirection|boxattribute|box|boundary|botmarks|botmark|binoppenalty|belowdisplayskip|belowdisplayshortskip|beginsimplegroup|beginlocalcontrol|begingroup|begincsname|batchmode|baselineskip|badness|autoparagraphmode|automigrationmode|automatichyphenpenalty|automaticdiscretionary|attributedef|attribute|atopwithdelims|atop|atendofgrouped|atendofgroup|aligntab|alignmark|aligncontent|aliased|aftergrouped|aftergroup|afterassignment|afterassigned|advance|adjustspacingstretch|adjustspacingstep|adjustspacingshrink|adjustspacing|adjdemerits|accent|abovewithdelims|abovedisplayskip|abovedisplayshortskip|above|XeTeXversion|Uvextensible|Uunderdelimiter|Usuperscript|Usuperprescript|Usubscript|Usubprescript|Ustyle|Ustopmath|Ustopdisplaymath|Ustartmath|Ustartdisplaymath|Ustack|Uskewedwithdelims|Uskewed|Uroot|Uright|Uradical|Uoverwithdelims|Uoverdelimiter|Uover|Unosuperscript|Unosuperprescript|Unosubscript|Unosubprescript|Umiddle|Umathvoid|Umathvextensiblevariant|Umathunderlinevariant|Umathunderdelimitervgap|Umathunderdelimitervariant|Umathunderdelimiterbgap|Umathunderbarvgap|Umathunderbarrule|Umathunderbarkern|Umathtopaccentvariant|Umathsupsubbottommax|Umathsupshiftup|Umathsupshiftdrop|Umathsuperscriptvariant|Umathsupbottommin|Umathsubtopmax|Umathsubsupvgap|Umathsubsupshiftdown|Umathsubshiftdrop|Umathsubshiftdown|Umathsubscriptvariant|Umathstackvgap|Umathstackvariant|Umathstacknumup|Umathstackdenomdown|Umathspacingmode|Umathspacebeforescript|Umathspaceafterscript|Umathskewedfractionvgap|Umathskewedfractionhgap|Umathrelrelspacing|Umathrelpunctspacing|Umathrelordspacing|Umathrelopspacing|Umathrelopenspacing|Umathrelinnerspacing|Umathrelclosespacing|Umathrelbinspacing|Umathradicalvgap|Umathradicalvariant|Umathradicalrule|Umathradicalkern|Umathradicaldegreeraise|Umathradicaldegreebefore|Umathradicaldegreeafter|Umathquad|Umathpunctrelspacing|Umathpunctpunctspacing|Umathpunctordspacing|Umathpunctopspacing|Umathpunctopenspacing|Umathpunctinnerspacing|Umathpunctclosespacing|Umathpunctbinspacing|Umathphantom|Umathoverlinevariant|Umathoverlayaccentvariant|Umathoverdelimitervgap|Umathoverdelimitervariant|Umathoverdelimiterbgap|Umathoverbarvgap|Umathoverbarrule|Umathoverbarkern|Umathordrelspacing|Umathordpunctspacing|Umathordordspacing|Umathordopspacing|Umathordopenspacing|Umathordinnerspacing|Umathordclosespacing|Umathordbinspacing|Umathoprelspacing|Umathoppunctspacing|Umathopordspacing|Umathopopspacing|Umathopopenspacing|Umathopinnerspacing|Umathoperatorsize|Umathopenupheight|Umathopenupdepth|Umathopenrelspacing|Umathopenpunctspacing|Umathopenordspacing|Umathopenopspacing|Umathopenopenspacing|Umathopeninnerspacing|Umathopenclosespacing|Umathopenbinspacing|Umathopclosespacing|Umathopbinspacing|Umathnumeratorvariant|Umathnolimitsupfactor|Umathnolimitsubfactor|Umathnolimits|Umathnoaxis|Umathlimits|Umathlimitbelowvgap|Umathlimitbelowkern|Umathlimitbelowbgap|Umathlimitabovevgap|Umathlimitabovekern|Umathlimitabovebgap|Umathinnerrelspacing|Umathinnerpunctspacing|Umathinnerordspacing|Umathinneropspacing|Umathinneropenspacing|Umathinnerinnerspacing|Umathinnerclosespacing|Umathinnerbinspacing|Umathhextensiblevariant|Umathfractionvariant|Umathfractionrule|Umathfractionnumvgap|Umathfractionnumup|Umathfractiondenomvgap|Umathfractiondenomdown|Umathfractiondelsize|Umathextrasupshift|Umathextrasuppreshift|Umathextrasubshift|Umathextrasubpreshift|Umathdenominatorvariant|Umathdelimiterundervariant|Umathdelimiterovervariant|Umathdegreevariant|Umathconnectoroverlapmin|Umathcodenum|Umathcode|Umathcloserelspacing|Umathclosepunctspacing|Umathcloseordspacing|Umathcloseopspacing|Umathcloseopenspacing|Umathcloseinnerspacing|Umathcloseclosespacing|Umathclosebinspacing|Umathclass|Umathcharslot|Umathcharnumdef|Umathcharnum|Umathcharfam|Umathchardef|Umathcharclass|Umathchar|Umathbotaccentvariant|Umathbinrelspacing|Umathbinpunctspacing|Umathbinordspacing|Umathbinopspacing|Umathbinopenspacing|Umathbininnerspacing|Umathbinclosespacing|Umathbinbinspacing|Umathaxis|Umathadapttoright|Umathadapttoleft|Umathaccentvariant|Umathaccentbaseheight|Umathaccent|Uleft|Uhextensible|Udelimiterunder|Udelimiterover|Udelimiter|Udelcodenum|Udelcode|Uchar|Uatopwithdelims|Uatop|Uabovewithdelims|Uabove|UUskewedwithdelims|UUskewed|Omegaversion|Omegarevision|Omegaminorversion|Alephversion|Alephrevision|Alephminorversion| )(?=[^a-zA-Z])", "name" : "context.primitive.commands.primitive.tex" }, "reserved" : { diff --git a/doc/context/documents/general/manuals/lowlevel-localboxes.pdf b/doc/context/documents/general/manuals/lowlevel-localboxes.pdf new file mode 100644 index 000000000..0a2e8017f Binary files /dev/null and b/doc/context/documents/general/manuals/lowlevel-localboxes.pdf differ diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-localboxes.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-localboxes.tex new file mode 100644 index 000000000..891b361be --- /dev/null +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-localboxes.tex @@ -0,0 +1,408 @@ +% language=us runpath=texruns:manuals/lowlevel + +% \unprotect \pushoverloadmode +% \popoverloadmode \protect + +\environment lowlevel-style + +\startdocument + [title=localboxes, + color=middlered] + +\startsectionlevel[title=Introduction] + +The \LUATEX\ engine inherited a few features from other engines and adding local +boxes to paragraphs is one of them. This concept comes from \OMEGA\ but over time +it has been made a bit more robust, also by using native par nodes instead of +whatsit nodes that are used to support \TEX's extensions. In another low level +manual we discuss paragraph properties and these local boxes are also part of +that so you might want to catch up on that. Local boxes are stored in an initial +par node with an adequate subtype but users wont' notice this (unless they mess +around in \LUA). The inline par nodes have a different subtype and are injected +with the \typ {\localinterlinepenalty}, \typ {\localbrokenpenalty}, \typ +{\localleftbox}, \typ {\localrightbox} and \LUAMETATEX\ specific \typ +{\localmiddlebox} primitives. WHen these primitives are used in vertical mode +they just set registers. + +The original (\OMEGA) idea was that local boxes are used for repetitive +punctuation (like quotes) at the left and|/|or right end of the lines that make +up a paragraph. That means that when these primitives inject nodes they actually +introduce states so that a stretch of text can be marked. + +When this mechanism was cleaned up in \LUAMETATEX\ I decided to investigate if +other usage made sense. After all, it is a feature that introduces some extra +code and it then pays of to use it when possible. Among the extensions are a +callback that is triggered when the left and right boxes get added and +experiments with that showed some potential but in order to retain performance as +well as limit extensive node memory usage (par nodes are large) a system of +classes was added. All this will be illustrated below. Warning: the mechanism in +\LUAMETATEX\ is not compatible with \LUATEX. + +{\em This is a preliminary, uncorrected manual.} + +\stopsectionlevel + +\startsectionlevel[title=The basics] + +This mechanism uses a mix of setting (pseudo horizontal) box registers that get +associated with (positions in a) paragraph. When the lines resulting from +breaking the list gets packaged into an horizontal (line) box, the local left and +right boxes get prepended and appended to the textual part (inside the left, +right and parfills kips and left or right hanging margins). When assigning the +current local boxes to the paragraph node(s) references to the pseudo registers +are used and the packaging actually copies them. This mix of referencing and +copying is somewhat tricky but the engine does it best to hide this for the user. + +This mechanism is rather useless when not wrapped into some high level mechanism +because by default setting these boxes wipes the existing value. In \LUAMETATEX\ +you can actually access the boxes so prepending and appending is possible but +experiments showed that this could come with a huge performance hit when the +lists are not cleaned up during a run. This is why we have introduced classes: +when you assign local boxes using the class option that specific class will be +replaced and therefore we have a more sparse solution. So, contrary to \LUATEX, +in \LUAMETATEX\ the local box registers have a linked lists of local boxes tagged +by class. Unless you manipulate in \LUA, this is hidden from the user. One can +access the boxes from the \TEX\ the but there can be no confusion with \LUATEX\ +here because there we don't have access. This is why usage as in \LUATEX\ will +also work in \LUAMETATEX. + +This mechanism obeys grouping as is demonstrated in the next three examples. The +first example is: + +\startbuffer[example-1] +\start + \dorecurse{10}{test #1.1 } + \localleftbox{\blackrule[width=2em,color=darkred] } + \dorecurse{20}{test #1.2 } + \removeunwantedspaces + \localrightbox{ \blackrule[width=3em,color=darkblue]} + \dorecurse{20}{test #1.3 } +\stop + \dorecurse{20}{test #1.4 } + % par ends here +\stopbuffer + +\typebuffer[example-1][option=TEX] + +The next example differs in a subtle way: watch the \type {keep} keyword, +it makes the setting retain after the group ends. + +\startbuffer[example-2] +\start + \start + \dorecurse{10}{test #1.1 } + \localleftbox keep {\blackrule[width=2em,color=darkred] } + \dorecurse{20}{test #1.2 } + \removeunwantedspaces + \localrightbox { \blackrule[width=3em,color=darkblue]} + \dorecurse{20}{test #1.3 } + \stop + \dorecurse{20}{test #1.4 } +\stop +% par ends here +\stopbuffer + +\typebuffer[example-2][option=TEX] + +The third example has two times \type {keep}. This option is \LUAMETATEX\ +specific. + +\startbuffer[example-3] +\start + \start + \dorecurse{10}{test #1.1 } + \localleftbox keep {\blackrule[width=2em,color=darkred] } + \dorecurse{20}{test #1.2 } + \removeunwantedspaces + \localrightbox keep { \blackrule[width=3em,color=darkblue]} + \dorecurse{20}{test #1.3 } + \stop + \dorecurse{20}{test #1.4 } +\stop +% par ends here +\stopbuffer + +\typebuffer[example-3][option=TEX] + +\startplacefigure % [location=page] + \startcombination[nx=1,ny=3] + {\vbox{\hsize\textwidth\getbuffer[example-1]}} {\bf Example 1} + {\vbox{\hsize\textwidth\getbuffer[example-2]}} {\bf Example 2} + {\vbox{\hsize\textwidth\getbuffer[example-3]}} {\bf Example 3} + \stopcombination +\stopplacefigure + +One (nasty) side effect is that when you set these boxes ungrouped they are +applied to whatever follows, which is why resetting them is built in the relevant +parts of \CONTEXT. The next examples are typeset grouped an demonstrate the use +of classes: + +\startbuffer +\dorecurse{20}{before #1 } +\localleftbox{\bf \darkred L 1 }% +\localleftbox{\bf \darkred L 2 }% +\dorecurse{20}{after #1 } +\stopbuffer + +\typebuffer[option=TEX] \start \getbuffer \par \stop + +Classes can be set for both sides: + +\startbuffer +\dorecurse{5}{\localrightbox class #1{ \bf \darkgreen R #1}}% +\dorecurse{20}{before #1 } +\dorecurse{5}{\localleftbox class #1{\bf \darkred L #1 }}% +\dorecurse{20}{after #1 } +\stopbuffer + +\typebuffer[option=TEX] \start \getbuffer \par \stop + +We can instruct this mechanism to hook the local box into the main +par node by using the \type {par} keyword. Keep in mind that these +local boxes only come into play when the lines are broken, so till +then changing them is possible. + +\startbuffer +\dorecurse{3}{\localrightbox class #1{ \bf \darkgreen R #1}}% +\dorecurse{20}{before #1 } +\dorecurse{2}{\localleftbox par class #1{\bf \darkred L #1 }}% +\dorecurse{20}{after #1 } +\stopbuffer + +\typebuffer[option=TEX] \start \getbuffer \par \stop + +\stopsectionlevel + +\startsectionlevel[title=The interface] + +{\em The interface described here is experimental.} + +Because it is hard to foresee if this mechanism will be used at all the \CONTEXT\ +interface is somewhat low level: one can build functionality on top of it. In the +previous section we saw examples of local boxes being part of the text but one +reason for extending the interface was to see if we can also use this engine +feature for efficiently placing marginal content. + +\startbuffer[definition] +\definelocalboxes + [lefttext] + [location=lefttext,width=3em,color=darkblue] +\definelocalboxes + [lefttextx] + [location=lefttext,width=3em,color=darkblue] + +\definelocalboxes + [righttext] + [location=righttext,width=3em,color=darkyellow] +\definelocalboxes + [righttextx] + [location=righttext,width=3em,color=darkyellow] +\stopbuffer + +\typebuffer[definition][option=TEX] + +\getbuffer[definition] + +The order of definition matters! Here the \type {x} variants have a larger class +number. There can (currently) be at most 256 classes. The defined local boxes +are triggered with \type {\localbox}: + +\startbuffer[example] +\startnarrower +\dorecurse{20}{before #1 }% +\localbox[lefttext]{[L] }% +\localbox[lefttextx]{[LL] }% +\localbox[righttext]{ [RR]}% +\localbox[righttextx]{ [R]}% +\dorecurse{20}{ after #1}% +\stopnarrower +\stopbuffer + +\typebuffer[example][option=TEX] + +Watch how we obey the margins: + +\getbuffer[example] + +Here these local boxes have dimensions. The predefined margin variants are +virtual. Here we set up the style and color: + +\startbuffer[definition] +\setuplocalboxes + [leftmargin] + [style=\bs, + color=darkgreen] +\setuplocalboxes + [rightmargin] + [style=\bs, + color=darkred] +\stopbuffer + +\typebuffer[definition][option=TEX] + +\startbuffer[example] +\dorecurse{2}{ + \dorecurse{10}{some text #1.##1 }% + KEY#1.1% + \localmargintext[leftmargin]{L #1.1}% + \localmargintext[rightmargin]{R #1.1}% + \dorecurse{10}{some text #1.##1 }% + KEY#1.2% + \localmargintext[leftmargin]{L #1.2}% + \localmargintext[rightmargin]{R #1.2}% + \dorecurse{10}{some text #1.##1 }% + \blank +} +\stopbuffer + +\typebuffer[example][option=TEX] + +You can also use \type {leftedge} and \type {rightedge} but using them here would +put them outside the page. + +{\getbuffer[definition,example]} + +In previous examples you can see that setting something at the left will lag behind +so deep down we use another trick here: \type {\localmiddlebox}. When these boxes +get placed a callback can be triggered and in \CONTEXT\ we use that to move these +middle boxes to the margins. + +Next we implement line numbers. Watch out: this will not replace the existing +mechanisms, it's just an alternative as we have alternative table mechanisms. We +have a repertoire of helpers for constructing the result: + +\startbuffer[definition] +\definelocalboxes + [linenumberleft] + [command=\LeftNumber, + location=middle, + distance=\leftmargindistance, + width=3em, + style=\bs, + color=darkred] + +\definelocalboxes + [linenumberright] % [linenumberleft] + [command=\RightNumber, + location=middle, + distance=\rightmargindistance, + width=3em, + style=\bf, + color=darkgreen] + +\definecounter[MyLineNumberL] +\definecounter[MyLineNumberR] + +\setupcounter + [MyLineNumberL] + [numberconversion=characters] + +\setupcounter + [MyLineNumberR] + [numberconversion=romannumerals] + +\def\LineNumberL + {\incrementcounter[MyLineNumberL]% + \convertedcounter[MyLineNumberL]} + +\def\LineNumberR + {\incrementcounter[MyLineNumberR]% + \convertedcounter[MyLineNumberR]} + +\protected\def\LeftNumber + {\setbox\localboxcontentbox\hbox + to \localboxesparameter{width} + {(\LineNumberL\hss\strut)}% + \localmarginlefttext\zeropoint} + +\protected\def\RightNumber + {\setbox\localboxcontentbox\hbox + to \localboxesparameter{width} + {(\strut\hss\LineNumberR)}% + \localmarginrighttext\zeropoint} +\stopbuffer + +\typebuffer[definition][option=TEX] + +\startbuffer[example] +\localbox[linenumberleft]{}% +\localbox[linenumberright]{}% +\dorecurse{2}{ + \samplefile{tufte} + \par +} +\resetlocalbox[linenumberleft]% +\resetlocalbox[linenumberright]% +\stopbuffer + +\typebuffer[example][option=TEX] + +We use our tufte example to illustrate the usage: + +\getbuffer[definition] + +{\getbuffer[example]} + +For convenience we support ranges like this (we've reset the line number counters +here): + +\resetcounter[MyLineNumberL] +\resetcounter[MyLineNumberR] + +\startbuffer[example] +\startlocalboxrange[linenumberleft]% +\startlocalboxrange[linenumberright]% +\dorecurse{2}{ + \samplefile{tufte} + \par +} +\stoplocalboxrange +\stoplocalboxrange +\stopbuffer + +\typebuffer[example][option=TEX] + +{\getbuffer[example]} + +\stopsectionlevel + +\startsectionlevel[title=The helpers] + +For the moment we have these helpers: + +\starttabulate[|l|;|] +\NC \type {\localboxclass} \NC integer \NC \NR +\NC \type {\localboxlinenumber} \NC integer \NC \NR +\NC +\NC \type {\localboxlinewidth} \NC dimension \NC \NR +\NC \type {\localboxlocalwidth} \NC dimension \NC \NR +\NC \type {\localboxprogress} \NC dimension \NC \NR +\NC \type {\localboxleftoffset} \NC dimension \NC \NR +\NC \type {\localboxrightoffset} \NC dimension \NC \NR +\NC +\NC \type {\localboxleftskip} \NC dimension \NC \NR +\NC \type {\localboxrightskip} \NC dimension \NC \NR +\NC \type {\localboxlefthang} \NC dimension \NC \NR +\NC \type {\localboxrighthang} \NC dimension \NC \NR +\NC +\NC \type {\localboxindent} \NC dimension \NC \NR +\NC \type {\localboxparfillleftskip} \NC dimension \NC \NR +\NC \type {\localboxparfillrightskip} \NC dimension \NC \NR +\NC \type {\localboxovershoot} \NC dimension \NC \NR +\NC +\stoptabulate + +The progress and offsets are accumulated values of the normalized indent, hangs, +skips etc. The line number is the position in the paragraph. In the callback we +set the box register \type {\localboxcontentbox} and use it after the command has +been applied. In the line number example you can see how we set its final +content, so these boxes are sort of dynamic. Normally in the middle case no +content is passed and in the par builder a middle is not taken into account when +calculating the line width. + +\stopsectionlevel + +\stopdocument + + +% implement { name = "localboxmarkonce", diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel.tex index b958308a2..14242e3a9 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel.tex @@ -33,6 +33,7 @@ \startsectionlevel[title=Alignments] \component [lowlevel-alignments] \stopsectionlevel \startsectionlevel[title=Marks] \component [lowlevel-marks] \stopsectionlevel \startsectionlevel[title=Inserts] \component [lowlevel-inserts] \stopsectionlevel + \startsectionlevel[title=Localboxes] \component [lowlevel-localboxes] \stopsectionlevel \stoptext diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 3fac13aaf..2ac02f2e3 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2021.10.28 10:17} +\newcontextversion{2021.11.02 09:59} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index fedf5acb3..5bf011408 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2021.10.28 10:17} +\edef\contextversion{2021.11.02 09:59} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-en.mkii b/tex/context/base/mkii/mult-en.mkii index f990c83e5..fcf27a17b 100644 --- a/tex/context/base/mkii/mult-en.mkii +++ b/tex/context/base/mkii/mult-en.mkii @@ -315,6 +315,7 @@ \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{leftmargin} \setinterfacevariable{leftpage}{leftpage} +\setinterfacevariable{lefttext}{lefttext} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legend} \setinterfacevariable{less}{less} @@ -476,6 +477,7 @@ \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{rightmargin} \setinterfacevariable{rightpage}{rightpage} +\setinterfacevariable{righttext}{righttext} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{roman} \setinterfacevariable{romannumerals}{romannumerals} diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii index 87a4a91c0..5db4797e4 100644 --- a/tex/context/base/mkii/mult-ro.mkii +++ b/tex/context/base/mkii/mult-ro.mkii @@ -315,6 +315,7 @@ \setinterfacevariable{lefthanging}{lefthanging} \setinterfacevariable{leftmargin}{marginestanga} \setinterfacevariable{leftpage}{paginastanga} +\setinterfacevariable{lefttext}{textstanga} \setinterfacevariable{lefttoright}{lefttoright} \setinterfacevariable{legend}{legenda} \setinterfacevariable{less}{less} @@ -476,6 +477,7 @@ \setinterfacevariable{righthanging}{righthanging} \setinterfacevariable{rightmargin}{marginedreapta} \setinterfacevariable{rightpage}{paginadreapta} +\setinterfacevariable{righttext}{textdreapta} \setinterfacevariable{righttoleft}{righttoleft} \setinterfacevariable{roman}{roman} \setinterfacevariable{romannumerals}{numereromane} diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 8c12216dd..5bee9fbb3 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.10.28 10:17} +\newcontextversion{2021.11.02 09:59} %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/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 6cc906cf4..c61fb2936 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2021.10.28 10:17} +\edef\contextversion{2021.11.02 09:59} %D Kind of special: diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index 7c62df864..2cc8a1c19 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -16590,6 +16590,16 @@ return { ["pe"]="حاشیه‌چپ", ["ro"]="marginestanga", }, + ["lefttext"]={ + ["cs"]="textvlevo", + ["de"]="linkertext", + ["en"]="lefttext", + ["fr"]="textegauche", + ["it"]="testosinistro", + ["nl"]="linkertekst", + ["pe"]="متن‌چپ", + ["ro"]="textstanga", + }, ["leftpage"]={ ["cs"]="levastranka", ["de"]="linkerseite", @@ -18040,6 +18050,16 @@ return { ["pe"]="صفحه‌راست", ["ro"]="paginadreapta", }, + ["righttext"]={ + ["cs"]="textvpravo", + ["de"]="rechtertext", + ["en"]="righttext", + ["fr"]="textedroite", + ["it"]="testodestro", + ["nl"]="rechtertekst", + ["pe"]="متن‌راست", + ["ro"]="textdreapta", + }, ["righttoleft"]={ ["cs"]="righttoleft", ["de"]="righttoleft", diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index d0312e18d..7579eb4e9 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -428,7 +428,10 @@ return { "localcontrolled", "localinterlinepenalty", "localleftbox", + "localleftboxbox", + "localmiddlebox", "localrightbox", + "localrightboxbox", "lpcode", "luabytecode", "luabytecodecall", @@ -520,6 +523,7 @@ return { "tracingalignments", "tracingexpressions", "tracingfonts", + "tracingfullboxes", "tracinghyphenation", "tracinginserts", "tracingmarks", diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 4a0bc353d..6e149394e 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 78253afaf..ed087bd8f 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkiv/syst-aux.mkiv b/tex/context/base/mkiv/syst-aux.mkiv index 194f1de2c..79b118a9b 100644 --- a/tex/context/base/mkiv/syst-aux.mkiv +++ b/tex/context/base/mkiv/syst-aux.mkiv @@ -1470,10 +1470,20 @@ % replaces prev +% \protected\def\syst_helpers_do_if_in_string_else#1#2% ##2 can be {abc} +% {\expandafter\def\expandafter\syst_helpers_do_do_if_in_string_else +% \expandafter##\expandafter1#1##2##3^^^^0004{\unless\if##2@}% expand #1 here +% \expandafter\syst_helpers_do_do_if_in_string_else\normalexpanded{#2#1}@@^^^^0004} % expand #2 here + \protected\def\syst_helpers_do_if_in_string_else#1#2% ##2 can be {abc} {\expandafter\def\expandafter\syst_helpers_do_do_if_in_string_else - \expandafter##\expandafter1#1##2##3^^^^0004{\unless\if##2@}% expand #1 here - \expandafter\syst_helpers_do_do_if_in_string_else\normalexpanded{#2#1}@@^^^^0004} % expand #2 here + \expandafter##\expandafter1#1##2##3^^^^0004{\unless\ifx##2^^^^0003}% expand #1 here + \expandafter\syst_helpers_do_do_if_in_string_else\normalexpanded{#2#1}^^^^0003^^^^0003^^^^0004} % expand #2 here + +% \protected\def\syst_helpers_do_if_in_string_else#1#2% ##2 can be {abc} +% {\normalexpanded{\def\noexpand\syst_helpers_do_do_if_in_string_else +% ##1#1##2##3}^^^^0004{\unless\ifx##2^^^^0003}% expand #1 here +% \normalexpanded{\noexpand\syst_helpers_do_do_if_in_string_else#2#1}^^^^0003^^^^0003^^^^0004} % expand #2 here %D The next alternative proved to be upto twice as fast on tasks like checking %D reserved words in pretty verbatim typesetting! This is mainly due to the fact @@ -1486,10 +1496,15 @@ %D Where \type {\doifinstringelse} does as much expansion as possible, the latter %D alternative does minimal (one level) expansion. +% \protected\def\syst_helpers_do_if_in_csname_else#1#2% +% {\def\syst_helpers_do_do_if_in_csname_else##1#1##2##3^^^^0004% +% {\unless\if##2@}% +% \expandafter\syst_helpers_do_do_if_in_csname_else#2#1@@^^^^0004} + \protected\def\syst_helpers_do_if_in_csname_else#1#2% {\def\syst_helpers_do_do_if_in_csname_else##1#1##2##3^^^^0004% - {\unless\if##2@}% - \expandafter\syst_helpers_do_do_if_in_csname_else#2#1@@^^^^0004} + {\unless\ifx##2^^^^3}% + \expandafter\syst_helpers_do_do_if_in_csname_else#2#1^^^^3^^^^3^^^^0004} \protected\def\doifelseincsname#1#2% {\normalexpanded{\syst_helpers_do_if_in_csname_else{#1}}{#2}% diff --git a/tex/context/base/mkiv/trac-deb.lua b/tex/context/base/mkiv/trac-deb.lua index 07865e4bf..88d7e54c6 100644 --- a/tex/context/base/mkiv/trac-deb.lua +++ b/tex/context/base/mkiv/trac-deb.lua @@ -191,9 +191,11 @@ function tracers.printerror(specification) report_str(tracers.showlines(filename,linenumber,offset,tonumber(luaerrorline))) report_nl() end - local errname = file.addsuffix(tex.jobname .. "-error","log") if quitonerror then - table.save(errname,specification) + local name = tex.jobname or "" + if name ~= "" then + table.save(name .. "-error.log",specification) + end local help = specification.lasttexhelp if help and #help > 0 then report_nl() diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index c09d7a8ae..9f20ffaf8 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.10.28 10:17} +\newcontextversion{2021.11.02 09:59} %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 afb958933..f48c343c5 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.10.28 10:17} +\immutable\edef\contextversion{2021.11.02 09:59} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/driv-shp.lmt b/tex/context/base/mkxl/driv-shp.lmt index a917d9501..f24a4090f 100644 --- a/tex/context/base/mkxl/driv-shp.lmt +++ b/tex/context/base/mkxl/driv-shp.lmt @@ -9,87 +9,89 @@ if not modules then modules = { } end modules ['driv-shp'] = { local type, next = type, next -local setmetatableindex = table.setmetatableindex -local formatters = string.formatters -local concat = table.concat -local keys = table.keys -local sortedhash = table.sortedhash -local find = string.find -local stripstring = string.strip -local sequenced = table.sequenced -local round = math.round -local nuts = nodes.nuts - -local tonut = nodes.tonut -local tonode = nodes.tonode - -local getdirection = nuts.getdirection -local getlist = nuts.getlist -local getoffsets = nuts.getoffsets -local getorientation = nuts.getorientation -local getwhd = nuts.getwhd -local getkern = nuts.getkern -local getheight = nuts.getheight -local getdepth = nuts.getdepth ------ getwidth = nuts.getwidth -local getnext = nuts.getnext -local getsubtype = nuts.getsubtype -local getid = nuts.getid -local getleader = nuts.getleader ------ getglue = nuts.getglue -local getshift = nuts.getshift -local getreplace = nuts.getreplace -local setreplace = nuts.setreplace -local getfont = nuts.getfont -local getkerndimension = nuts.getkerndimension - -local setdirection = nuts.setdirection -local setlink = nuts.setlink - -local isglyph = nuts.isglyph ------ nextdir = nuts.traversers.dir -local nextnode = nuts.traversers.node - -local effectiveglue = nuts.effectiveglue -local dirdimensions = nuts.dirdimensions - -local fonthashes = fonts.hashes -local fontdata = fonthashes.identifiers -local characters = fonthashes.characters -local parameters = fonthashes.parameters - -local nodecodes = nodes.nodecodes -local whatsitcodes = nodes.whatsitcodes -local gluecodes = nodes.gluecodes -local dirvalues = nodes.dirvalues -local subtypes = nodes.subtypes - -local lefttoright_code = dirvalues.lefttoright -local righttoleft_code = dirvalues.righttoleft - -local glyph_code = nodecodes.glyph -local kern_code = nodecodes.kern -local glue_code = nodecodes.glue -local hlist_code = nodecodes.hlist -local vlist_code = nodecodes.vlist -local dir_code = nodecodes.dir -local disc_code = nodecodes.disc -local math_code = nodecodes.math -local rule_code = nodecodes.rule -local whatsit_code = nodecodes.whatsit - -local leaders_code = gluecodes.leaders -local cleaders_code = gluecodes.cleaders -local xleaders_code = gluecodes.xleaders -local gleaders_code = gluecodes.gleaders - -local spaceskip_code = gluecodes.spaceskip - -local getpagedimensions = layouts.getpagedimensions - -local drivers = drivers - -local report = logs.reporter("drivers") +local setmetatableindex = table.setmetatableindex +local formatters = string.formatters +local concat = table.concat +local keys = table.keys +local sortedhash = table.sortedhash +local find = string.find +local stripstring = string.strip +local sequenced = table.sequenced +local round = math.round +local nuts = nodes.nuts + +local tonut = nodes.tonut +local tonode = nodes.tonode + +local getdirection = nuts.getdirection +local getlist = nuts.getlist +local getoffsets = nuts.getoffsets +local getorientation = nuts.getorientation +local getxyscales = nuts.getxyscales +local getwhd = nuts.getwhd +local getkern = nuts.getkern +local getheight = nuts.getheight +local getdepth = nuts.getdepth +----- getwidth = nuts.getwidth +local getnext = nuts.getnext +local getsubtype = nuts.getsubtype +local getid = nuts.getid +local getleader = nuts.getleader +----- getglue = nuts.getglue +local getshift = nuts.getshift +local getreplace = nuts.getreplace +local setreplace = nuts.setreplace +local getfont = nuts.getfont +local getkerndimension = nuts.getkerndimension +local getglyphdimensions = nuts.getglyphdimensions + +local setdirection = nuts.setdirection +local setlink = nuts.setlink + +local isglyph = nuts.isglyph +----- nextdir = nuts.traversers.dir +local nextnode = nuts.traversers.node + +local effectiveglue = nuts.effectiveglue +local dirdimensions = nuts.dirdimensions + +local fonthashes = fonts.hashes +local fontdata = fonthashes.identifiers +local characters = fonthashes.characters +local parameters = fonthashes.parameters + +local nodecodes = nodes.nodecodes +local whatsitcodes = nodes.whatsitcodes +local gluecodes = nodes.gluecodes +local dirvalues = nodes.dirvalues +local subtypes = nodes.subtypes + +local lefttoright_code = dirvalues.lefttoright +local righttoleft_code = dirvalues.righttoleft + +local glyph_code = nodecodes.glyph +local kern_code = nodecodes.kern +local glue_code = nodecodes.glue +local hlist_code = nodecodes.hlist +local vlist_code = nodecodes.vlist +local dir_code = nodecodes.dir +local disc_code = nodecodes.disc +local math_code = nodecodes.math +local rule_code = nodecodes.rule +local whatsit_code = nodecodes.whatsit + +local leaders_code = gluecodes.leaders +local cleaders_code = gluecodes.cleaders +local xleaders_code = gluecodes.xleaders +local gleaders_code = gluecodes.gleaders + +local spaceskip_code = gluecodes.spaceskip + +local getpagedimensions = layouts.getpagedimensions + +local drivers = drivers + +local report = logs.reporter("drivers") --------------------------------------------------------------------------------------- @@ -291,7 +293,7 @@ local flush_character do pos_v = pos_v + v * sy end if c then - flushchar(fnt,c) + flushchar(fnt,c) -- todo: e f ! pos_h = ph pos_v = pv end @@ -466,8 +468,6 @@ local flush_character do local onetimemessage -- could be defined later (todo: make plug for this) - local getxyscales = nuts.getxyscales - flush_character = function(current,font,char,factor,vfcommands,pos_h,pos_v,pos_r,f,e) if font ~= lastfont then @@ -492,14 +492,19 @@ local flush_character do end local width, height, depth, naturalwidth, sx, sy if current then - naturalwidth, height, depth, factor = getwhd(current,true) -- also get corrected width - sx, sy = getxyscales(current) -- maybe: getwhdfs - if factor == 0 then - width = naturalwidth + -- height and depth not needed + if true then + width, height, depth, factor, sx, sy = getglyphdimensions(current) else - -- width = (1.0 + factor/1000000.0) * naturalwidth - width = naturalwidth + naturalwidth * factor/1000000.0 - -- width = naturalwidth + naturalwidth * 0.000001 * factor + naturalwidth, height, depth, factor = getwhd(current,true) -- also get corrected width + sx, sy = getxyscales(current) + if factor == 0 then + width = naturalwidth + else + -- width = (1.0 + factor/1000000.0) * naturalwidth + width = naturalwidth + naturalwidth * factor/1000000.0 + -- width = naturalwidth + naturalwidth * 0.000001 * factor + end end else width = data.width or 0 @@ -537,7 +542,6 @@ local flush_character do flushcharacter(current,pos_h,pos_v,pos_r,font,char,data,f,e,factor,sx,sy) -- ,naturalwidth,width) end end - return width, height, depth end @@ -627,28 +631,6 @@ local hlist_out, vlist_out do -- to be checked: begin- or enddir kan nil zijn, weird - -- local function calculate_width_to_enddir(this_box,begindir) -- can be a helper - -- local dir_nest = 1 - -- local enddir = begindir - -- for current, subtype in nextdir, getnext(begindir) do - -- if subtype == normaldir_code then -- todo - -- dir_nest = dir_nest + 1 - -- else - -- dir_nest = dir_nest - 1 - -- end - -- if dir_nest == 0 then -- does the type matter - -- enddir = current - -- local width = rangedimensions(this_box,begindir,enddir) - -- return enddir, width - -- end - -- end - -- if enddir == begindir then - -- local width = rangedimensions(this_box,begindir) -- ,enddir) - -- return enddir, width - -- end - -- return enddir, 0 - -- end - -- check frequencies of nodes hlist_out = function(this_box,current) @@ -686,8 +668,8 @@ local hlist_out, vlist_out do pos_v = pos_v + raise pos_h = pos_h - left local wd = flush_character(current,font,char,false,true,pos_h,pos_v,pos_r) --- cur_h = cur_h + wd - right -- hm, no left here? -cur_h = cur_h + wd -- see new tabulate alignment code + -- cur_h = cur_h + wd - right -- hm, no left here? + cur_h = cur_h + wd -- see new tabulate alignment code elseif id == glue_code then local gluewidth = effectiveglue(current,this_box) if gluewidth ~= 0 then @@ -781,8 +763,8 @@ cur_h = cur_h + wd -- see new tabulate alignment code end else if tospace and subtype == spaceskip_code then - -- todo: flush_space - flush_character(false,getfont(current),32,false,true,pos_h,pos_v,pos_r) -- we need tp pass current for scale? + -- kind of tricky because because we can have a different sx sy + flush_character(false,getfont(current),32,false,true,pos_h,pos_v,pos_r) -- we need to pass current for scale? end cur_h = cur_h + gluewidth end @@ -861,15 +843,21 @@ cur_h = cur_h + wd -- see new tabulate alignment code end cur_h = cur_h + width elseif id == kern_code then - -- we can use getkerndimension(current) but then we get rounded values so for - -- now we calculate ourselves - local kern, factor = getkern(current,true) - if kern ~= 0 then - if factor ~= 0 then - cur_h = cur_h + (1.0 + factor/1000000.0) * kern - else + -- when we use getkerndimension we get rounded values + if true then + local kern = getkerndimension(current) + if kern ~= 0 then cur_h = cur_h + kern end + else + local kern, factor = getkern(current,true) + if kern ~= 0 then + if factor ~= 0 then + cur_h = cur_h + (1.0 + factor/1000000.0) * kern + else + cur_h = cur_h + kern + end + end end elseif id == rule_code then local width, height, depth = getwhd(current) @@ -1412,3 +1400,25 @@ do end) end + +-- local function calculate_width_to_enddir(this_box,begindir) -- can be a helper +-- local dir_nest = 1 +-- local enddir = begindir +-- for current, subtype in nextdir, getnext(begindir) do +-- if subtype == normaldir_code then -- todo +-- dir_nest = dir_nest + 1 +-- else +-- dir_nest = dir_nest - 1 +-- end +-- if dir_nest == 0 then -- does the type matter +-- enddir = current +-- local width = rangedimensions(this_box,begindir,enddir) +-- return enddir, width +-- end +-- end +-- if enddir == begindir then +-- local width = rangedimensions(this_box,begindir) -- ,enddir) +-- return enddir, width +-- end +-- return enddir, 0 +-- end diff --git a/tex/context/base/mkxl/font-imp-math.lmt b/tex/context/base/mkxl/font-imp-math.lmt index bf3c8b56e..3077d0dcd 100644 --- a/tex/context/base/mkxl/font-imp-math.lmt +++ b/tex/context/base/mkxl/font-imp-math.lmt @@ -101,13 +101,13 @@ function fonts.helpers.mathscriptslots(tfmdata,textcode) end local function manipulate(tfmdata,value) - if texconditionals["c_font_compact"] then + -- if texconditionals["c_font_compact"] then + if value then -- so basically always local rawdata = tfmdata.shared.rawdata local rawresources = rawdata and rawdata.resources local rawfeatures = rawresources and rawresources.features local basesubstitutions = rawfeatures and rawfeatures.gsub local sequences = basesubstitutions and tfmdata.resources.sequences - if sequences then local characters = tfmdata.characters for s=1,#sequences do @@ -153,6 +153,7 @@ local function manipulate(tfmdata,value) end local function initialize(tfmdata,value) + -- Here it really gets enabled as the scales are used. if texconditionals["c_font_compact"] then local rawdata = tfmdata.shared.rawdata local rawresources = rawdata and rawdata.resources diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index f6cf9f072..81df491c2 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -186,7 +186,7 @@ end -- fonts local fontcharacters -local fontdescriptions +----- fontdescriptions local fontparameters local fontproperties local pdfcharacters @@ -237,7 +237,7 @@ local tjfactor = 100 / 65536 function flushers.updatefontstate(font) fontcharacters = characters[font] - fontdescriptions = descriptions[font] + -- fontdescriptions = descriptions[font] fontparameters = parameters[font] fontproperties = properties[font] local size = fontparameters.size -- or bad news @@ -468,23 +468,55 @@ do -- when changing this, check math: compact-001.tex (rule width) +-- local naturalwidths = setmetatableindex(function(t,font) +-- local d = descriptions[font] +-- local c = characters[font] +-- local f = parameters[font].hfactor or parameters[font].factor +-- local v = setmetatableindex(function(t,char) +-- local w +-- local e = c and c[char] +-- if e then +-- w = e.width or 0 +-- end +-- if not w then +-- e = d and d[char] +-- if e then +-- w = e.width +-- if w then +-- w = w * f +-- end +-- end +-- end +-- if not w then +-- w = 0 +-- end +-- t[char] = w +-- return w +-- end) +-- t[font] = v +-- return v +-- end) + + -- we need to use descriptions ... otherwise we get wrong dimensions when we use + -- characters[n].xoffset or virtual stuff + local naturalwidths = setmetatableindex(function(t,font) local d = descriptions[font] local c = characters[font] local f = parameters[font].hfactor or parameters[font].factor local v = setmetatableindex(function(t,char) local w - local e = c and c[char] + local e = d and d[char] if e then - w = e.width or 0 + w = e.width + if w then + w = w * f + end end if not w then - e = d and d[char] + e = c and c[char] if e then - w = e.width - if w then - w = w * f - end + w = e.width or 0 end end if not w then @@ -611,7 +643,7 @@ do return v end) - -- local trace_threshold = false trackers.register("backends.pdf.threshold", function(v) trace_threshold = v end) + local trace_threshold = false trackers.register("backends.pdf.threshold", function(v) trace_threshold = v end) -- local f_skip = formatters["%.2N"] @@ -624,16 +656,15 @@ do pdf_goto_textmode() setup_fontparameters(font,factor,f,e,sx,sy) set_font() - elseif cur_f ~= f then -- when ok move up + elseif cur_f ~= f then -- when ok move up (maybe no longer needed) pdf_goto_textmode() setup_fontparameters(font,factor,f,e,sx,sy) set_font() --- elseif cur_tmrx ~= tmrx or cur_factor ~= factor or cur_f ~= f or cur_e ~= e then + -- elseif cur_tmrx ~= tmrx or cur_factor ~= factor or cur_f ~= f or cur_e ~= e then elseif cur_tmrx ~= tmrx or cur_factor ~= factor or cur_e ~= e then setup_fontparameters(font,factor,f,e,sx,sy) need_tm = true end - local move = calc_pdfpos(pos_h,pos_v) if trace_threshold then @@ -691,7 +722,6 @@ do if mode == "chararray" then begin_charmode() end - cw = cw + naturalwidth[char] * tmef * f_x_scale local slot = pdfcharacters[data.index or char] -- registers usage @@ -2174,7 +2204,6 @@ do objnum = objnum, immediate = true, nolength = nolength, --- compresslevel = compressed == false and 0 or nil, compresslevel = compressed, type = "stream", string = data, @@ -2190,7 +2219,6 @@ do return pdfdeferredobject { objnum = objnum, immediate = true, --- compresslevel = compressed == false and 0 or nil, compresslevel = compressed, type = "stream", file = filename, diff --git a/tex/context/base/mkxl/node-tsk.lmt b/tex/context/base/mkxl/node-tsk.lmt index c12c9597e..dfa1e9475 100644 --- a/tex/context/base/mkxl/node-tsk.lmt +++ b/tex/context/base/mkxl/node-tsk.lmt @@ -976,30 +976,31 @@ local tonode = nodes.nuts.tonode %localize% --- line,leftbox,rightbox,linenumber,leftskip,rightskip,lefthang,righthang,indent,parfillleftskip,parfillrightskip +-- line,leftbox,rightbox,middlebox,linenumber,leftskip,rightskip,lefthang,righthang,indent,parfillleftskip,parfillrightskip -return function(line,leftbox,rightbox,...) - nutline = tonut(line) - nutleftbox = leftbox and tonut(leftbox) - nutrightbox = rightbox and tonut(rightbox) +return function(line,leftbox,rightbox,middlebox,...) + nutline = tonut(line) + nutleftbox = leftbox and tonut(leftbox) + nutrightbox = rightbox and tonut(rightbox) + nutmiddlebox = middlebox and tonut(middlebox) %actions% end ]], step = [[ - tonut((%action%(line,leftbox,rightbox,...))) + tonut((%action%(line,leftbox,rightbox,middlebox,...))) ]], nut = [[ - %action%(nutline,nutleftbox,nutrightbox,...) + %action%(nutline,nutleftbox,nutrightbox,nutmiddlebox,...) ]], nohead = [[ - %action%(line,leftbox,rightbox,...) + %action%(line,leftbox,rightbox,middlebox,...) ]], nonut = [[ - %action%(nutline,nutleftbox,nutrightbox,...) + %action%(nutline,nutleftbox,nutrightbox,nutmiddlebox,...) ]], } diff --git a/tex/context/base/mkxl/page-app.mkxl b/tex/context/base/mkxl/page-app.mkxl index d41487640..67699143a 100644 --- a/tex/context/base/mkxl/page-app.mkxl +++ b/tex/context/base/mkxl/page-app.mkxl @@ -75,6 +75,7 @@ \bgroup \inheritedfittingpageframed \bgroup + \pack_framed_initialize \gobblespacetokens} \protected\def\page_fitting_stop_normal % todo: figure out why a small mp image gets shifted diff --git a/tex/context/base/mkxl/tabl-frm.mkxl b/tex/context/base/mkxl/tabl-frm.mkxl index ec530e7a4..4caa287f7 100644 --- a/tex/context/base/mkxl/tabl-frm.mkxl +++ b/tex/context/base/mkxl/tabl-frm.mkxl @@ -115,6 +115,7 @@ \setupframed[\??framedtable][#2]% \fi \edef\currentframed{\??framedtable\currentframedtable}% + \pack_framed_initialize \c_tabl_framed_r\zerocount \d_tabl_framed_d\framedparameter\c!distance \framedparameter\c!before} @@ -126,7 +127,7 @@ % a two pass variant that deals with the height .. so no catcode changes here \tolerant\protected\def\pack_framed_start_framed_whatever[#1]% - {\pack_framed_initialize + {\pack_framed_initialize % moved up \bgroup \setupcurrentframed[#1]% here ! \pack_framed_process_indeed diff --git a/tex/context/base/mkxl/trac-deb.lmt b/tex/context/base/mkxl/trac-deb.lmt index 13e3c7e70..6ac0f3e16 100644 --- a/tex/context/base/mkxl/trac-deb.lmt +++ b/tex/context/base/mkxl/trac-deb.lmt @@ -248,9 +248,11 @@ function tracers.printerror(specification) report_str(tracers.showlines(filename,linenumber,offset,tonumber(luaerrorline))) report_nl() end - local errname = tex.jobname .. "-error.log" if quitonerror then - table.save(errname,specification) + local name = tex.jobname or "" + if name ~= "" then + table.save(name .. "-error.log",specification) + end local help = specification.lasttexhelp if help and #help > 0 then report_nl() diff --git a/tex/context/base/mkxl/typo-lbx.lmt b/tex/context/base/mkxl/typo-lbx.lmt index 00ba1cc7f..758f3c700 100644 --- a/tex/context/base/mkxl/typo-lbx.lmt +++ b/tex/context/base/mkxl/typo-lbx.lmt @@ -7,53 +7,67 @@ if not modules then modules = { } end modules ['typo-lbx'] = { license = "see context related readme files" } +local context = context + local tostring = tostring -local nuts = nodes.nuts +local nuts = nodes.nuts +local tonut = nodes.tonut +local tonode = nodes.tonode -local left_box_code = nodes.listcodes.left -local right_box_code = nodes.listcodes.right -local hlist_code = nodes.nodecodes.hlist +local left_box_code = nodes.listcodes.left +local right_box_code = nodes.listcodes.right +local local_box_code = nodes.listcodes["local"] +local hlist_code = nodes.nodecodes.hlist -local getlist = nuts.getlist -local getprev = nuts.getprev -local getnext = nuts.getnext -local getattribute = nuts.getattribute -local gettail = nuts.tail -local getwidth = nuts.getwidth -local setlist = nuts.setlist -local setoffsets = nuts.setoffsets -local flushlist = nuts.flushlist -local takebox = nuts.takebox -local setbox = nuts.setbox -local copynode = nuts.copynode -local rangedimensions = nuts.rangedimensions -local traverse_list = nuts.traversers.list +-- some can go: -local expandmacro = token.expandmacro +local getlist = nuts.getlist +local getprev = nuts.getprev +local getnext = nuts.getnext +local getattribute = nuts.getattribute +local gettail = nuts.tail +local getwidth = nuts.getwidth +local getboth = nuts.getboth +local getindex = nuts.getindex +local setlist = nuts.setlist +local flushlist = nuts.flushlist +local takebox = nuts.takebox +local setbox = nuts.setbox +local copynode = nuts.copynode +local rangedimensions = nuts.rangedimensions +local traverse_list = nuts.traversers.list -local dimension_value = tokens.values.dimension -local integer_value = tokens.values.integer +----- setlocalbox = tex.setlocalbox -- todo: also in node.direct namespace +----- getlocalbox = tex.getlocalbox -- todo: also in node.direct namespace -local implement = interfaces.implement +local expandmacro = token.expandmacro -typesetters = typesetters or { } -local typesetters = typesetters +local dimension_value = tokens.values.dimension +local integer_value = tokens.values.integer -typesetters.localboxes = typesetters.localboxes or { } -local localboxes = typesetters.localboxes +local implement = interfaces.implement -local a_localboxes = attributes.private("localboxes") +typesetters = typesetters or { } +local typesetters = typesetters -local starttiming = statistics.starttiming -local stoptiming = statistics.stoptiming +typesetters.localboxes = typesetters.localboxes or { } +local localboxes = typesetters.localboxes -do +local a_localboxesmark = attributes.private("localboxesmark") + +local starttiming = statistics.starttiming +local stoptiming = statistics.stoptiming - local lb_attribute = 0 +do + local lb_found = nil + local lb_class = 0 local lb_linenumber = 0 - local lb_width = 0 - local lb_offset = 0 + local lb_linewidth = 0 + local lb_localwidth = 0 + local lb_progress = 0 + local lb_leftoffset = 0 + local lb_rightoffset = 0 local lb_leftskip = 0 local lb_rightskip = 0 local lb_lefthang = 0 @@ -63,10 +77,13 @@ do local lb_parfillrightskip = 0 local lb_overshoot = 0 - implement { name = "localboxattribute", public = true, usage = "value", actions = function() return integer_value, lb_attribute end } + implement { name = "localboxclass", public = true, usage = "value", actions = function() return integer_value, lb_class end } implement { name = "localboxlinenumber", public = true, usage = "value", actions = function() return integer_value, lb_linenumber end } - implement { name = "localboxwidth", public = true, usage = "value", actions = function() return dimension_value, lb_width end } - implement { name = "localboxoffset", public = true, usage = "value", actions = function() return dimension_value, lb_offset end } + implement { name = "localboxlinewidth", public = true, usage = "value", actions = function() return dimension_value, lb_linewidth end } + implement { name = "localboxlocalwidth", public = true, usage = "value", actions = function() return dimension_value, lb_localwidth end } + implement { name = "localboxprogress", public = true, usage = "value", actions = function() return dimension_value, lb_progress end } + implement { name = "localboxleftoffset", public = true, usage = "value", actions = function() return dimension_value, lb_leftoffset end } + implement { name = "localboxrightoffset", public = true, usage = "value", actions = function() return dimension_value, lb_rightoffset end } implement { name = "localboxleftskip", public = true, usage = "value", actions = function() return dimension_value, lb_leftskip end } implement { name = "localboxrightskip", public = true, usage = "value", actions = function() return dimension_value, lb_rightskip end } implement { name = "localboxlefthang", public = true, usage = "value", actions = function() return dimension_value, lb_lefthang end } @@ -76,71 +93,115 @@ do implement { name = "localboxparfillrightskip", public = true, usage = "value", actions = function() return dimension_value, lb_parfillrightskip end } implement { name = "localboxovershoot", public = true, usage = "value", actions = function() return dimension_value, lb_overshoot end } - local function action(current,where) - -- We can have nested leftboxes! - local l = getlist(current) - setlist(current) - local h = copynode(current) - setlist(h,l) - setbox("localboxcontentbox",h) - expandmacro("localboxcommand") -- no longer pass arguments - local b = takebox("localboxcontentbox") - setlist(current,b) - if where == "left" then - local w = getwidth(b) - setoffsets(b,lb_width - lb_offset - w) - else - setoffsets(b,lb_offset - lb_width) + local cache = table.setmetatableindex(function(t,k) + local v = { n = 0, m = 0 } + t[k] = v + return v + end) + + -- todo: use a simple usernode that refers to a cache so that we don't need to + -- make copies + + implement { + name = "localboxmarkonce", + public = true, + arguments = "integer", + actions = function(attr) + local c = cache[attr] + local n = c.n +-- first test this: +-- if n == c.m then +-- print("all false",attr,n) +-- -- all false +-- n = 1 +-- c.m = 0 +-- else + n = n + 1 +-- end + c[n] = true + c.n = n + context(n) + end + } + + local function action(current) + local list = getlist(current) + if list then + local attr = getattribute(list,a_localboxesmark) or 0 + local cach = attr and cache[lb_class] + local once = cach and cach[attr] + if once == false then + setlist(current) + flushlist(list) + else + setlist(current) + local head = copynode(current) + setlist(head,list) + setbox("localboxcontentbox",head) + expandmacro("localboxcommand") -- no longer pass arguments + local box = takebox("localboxcontentbox") + setlist(current,box) + if once and cach[attr] == true then + cach[attr] = false + cach.m = cach.m + 1 + end + end end end - local function processleftbox(box,width) + -- these two are now more or less the same so ... + + local function processleftbox(box) local list = getlist(box) - if not width then - width = 0 - end for current, id, subtype in traverse_list, list do - if id == hlist_code then - local a = getattribute(current,a_localboxes) - if a then - lb_attribute = a - lb_width = width + rangedimensions(box,list,getprev(current)) - action(current,"left") - end - if subtype == left_box_code then - processleftbox(current,width + rangedimensions(box,list,getprev(current))) + if subtype == local_box_code and getwidth(current) == 0 then + local class = getindex(current) + if class then + lb_found = current + lb_class = class + lb_progress = rangedimensions(box,list,current) + action(current) end end end end - local function processrightbox(box,width) + local function processrightbox(box) local list = getlist(box) - local tail = gettail(list) - if not width then - width = 0 - end for current, id, subtype in traverse_list, list do - if id == hlist_code then - local a = getattribute(current,a_localboxes) - if a then - lb_attribute = a - lb_width = width + rangedimensions(box,list,getnext(current),tail) - action(current,"right") + if subtype == local_box_code and getwidth(current) == 0 then + local class = getindex(current) + if class then + lb_found = current + lb_class = class + lb_progress = rangedimensions(box,list,current) + action(current) end - if subtype == right_box_code then - processrightbox(current,width + rangedimensions(box,getnext(current),tail)) + end + end + end + + local function processmiddlebox(box,line) + local list = getlist(box) + for current, id, subtype in traverse_list, list do + if subtype == local_box_code and getwidth(current) == 0 then + local class = getindex(current) + if class then + lb_found = current + lb_class = class + lb_progress = rangedimensions(line,getlist(line),box) + action(current) end end end end - local function processlocalboxes(line, leftbox, rightbox, linenumber, leftskip, rightskip, lefthang, righthang, indent, parfillleftskip, parfillrightskip, overshoot) + local function processlocalboxes(line,leftbox,rightbox,middlebox,linenumber,leftskip,rightskip,lefthang,righthang,indent,parfillleftskip,parfillrightskip,overshoot) -- - lb_attribute = 0 + lb_found = nil + lb_class = 0 lb_linenumber = linenumber - lb_width = 0 - -- lb_offset = 0 + lb_progress = 0 lb_leftskip = leftskip lb_rightskip = rightskip lb_lefthang = lefthang @@ -149,15 +210,19 @@ do lb_parfillleftskip = parfillleftskip lb_parfillrightskip = parfillrightskip lb_overshoot = overshoot - -- - -- for now we always anchor - -- + lb_linewidth = getwidth(line) + lb_leftoffset = leftskip + lefthang + parfillleftskip + indent + lb_rightoffset = rightskip + righthang + parfillrightskip - overshoot if leftbox then - lb_offset = leftskip + lefthang + indent + parfillleftskip + getwidth(leftbox) + lb_localwidth = getwidth(leftbox) processleftbox(leftbox) end + if middlebox then + lb_localwidth = getwidth(middlebox) + processmiddlebox(middlebox,line) + end if rightbox then - lb_offset = rightskip + righthang + parfillrightskip + getwidth(rightbox) - overshoot + lb_localwidth = getwidth(rightbox) processrightbox(rightbox) end end diff --git a/tex/context/base/mkxl/typo-lbx.mkxl b/tex/context/base/mkxl/typo-lbx.mkxl index f8d252a27..0310a441f 100644 --- a/tex/context/base/mkxl/typo-lbx.mkxl +++ b/tex/context/base/mkxl/typo-lbx.mkxl @@ -13,10 +13,11 @@ \writestatus{loading}{ConTeXt Typesetting Macros / Local Boxes} -% musical timestamp: New Scary Goldings ft. John Scofield MonoNeon & Louis Cole (late -% October 2021) +% This time the usual musical timestamp is: New Scary Goldings ft. John Scofield +% MonoNeon & Louis Cole (late October 2021) (plus the playlist in loop mode) and +% further improved after watching Cory Wong's LIVE IN MPLS (9 FEB 2019) concert. -% maybe: \iflocalleftbox +% maybe: \iflocalbox 0/1/2 \registerctxluafile{typo-lbx}{autosuffix} @@ -27,18 +28,18 @@ %D many instances at the same time add some complizity. Therefore, for the moment it's %D a playground. - \unprotect -\def\v!lefttext {lefttext} -\def\v!righttext{righttext} +\def\typo_localboxes_reset + {\localleftbox {}% no class here, works grouped + \localrightbox {}% + \localmiddlebox{}} \appendtoks - \localleftbox {}% \nolocalboxes : we don't have a nice command category for it - \localrightbox{}% + \typo_localboxes_reset \to\everyforgetall -\definesystemattribute[localboxes][public] +\definesystemattribute[localboxesmark][public] %D We used to pass arguments but there might be many so ... @@ -48,13 +49,18 @@ \installcorenamespace{localboxesattribute} \installcorenamespace{localboxesnamespace} \installcorenamespace{localboxeslocations} +\installcorenamespace{localboxesresetters} \installcommandhandler \??localboxes {localboxes} \??localboxes \setuplocalboxes - [\c!location=\v!left] + [\c!command=\localboxcontent, + \c!width=\zeropoint, + \c!location=\v!left, + \c!distance=\zeropoint] \newcount\c_typo_localboxes +\newcount\c_typo_localboxes_class \appendtoks \global\advance\c_typo_localboxes\plusone @@ -62,33 +68,29 @@ \gletcsname\??localboxesnamespace\number\c_typo_localboxes\endcsname\currentlocalboxes \to \everydefinelocalboxes -%D The optional argument forces seting the \quote {whole} paragraph properties (which is needed +%D The optional argument forces setting the \quote {whole} paragraph properties (which is needed %D when the assignment happens after e.g.\ \type {\everypar} but is also meant for the first %D line. +%D Todo: reserve class 1 for this: + \def\typo_paragraphs_l#1{\localleftbox \ifcstok{#1}\v!global par\fi} \def\typo_paragraphs_r#1{\localrightbox\ifcstok{#1}\v!global par\fi} -\permanent\tolerant\protected\def\leftparbox [#1]{\typo_paragraphs_l{#1}\bgroup\enforced\let\leftparbox \relax\let\next} -\permanent\tolerant\protected\def\rightparbox [#1]{\typo_paragraphs_r{#1}\bgroup\enforced\let\rightparbox\relax\let\next} - -\permanent\tolerant\protected\def\appendleftparbox [#1]{\dowithnextbox{\leftparbox [#1]{\the\localleftbox \unhbox\nextbox}}\hbox} -\permanent\tolerant\protected\def\appendrightparbox [#1]{\dowithnextbox{\rightparbox[#1]{\the\localrightbox\unhbox\nextbox}}\hbox} - -\permanent\tolerant\protected\def\prependleftparbox [#1]{\dowithnextbox{\leftparbox [#1]{\unhbox\nextbox\the\localleftbox }}\hbox} -\permanent\tolerant\protected\def\prependrightparbox[#1]{\dowithnextbox{\rightparbox[#1]{\unhbox\nextbox\the\localrightbox}}\hbox} - -\permanent\tolerant\protected\def\resetleftparbox [#1]{\typo_paragraphs_l{#1}{}} -\permanent\tolerant\protected\def\resetrightparbox [#1]{\typo_paragraphs_r{#1}{}} +\permanent\tolerant\protected\def\leftparbox [#1]{\typo_paragraphs_l{#1}\bgroup\enforced\let\leftparbox \relax\let\next} +\permanent\tolerant\protected\def\rightparbox[#1]{\typo_paragraphs_r{#1}\bgroup\enforced\let\rightparbox\relax\let\next} % called back: +\permanent\protected\def\localboxcontent + {\box\localboxcontentbox} + \permanent\protected\def\localboxcommand - {\ifcsname\??localboxesnamespace\number\localboxattribute\endcsname + {\ifcsname\??localboxesnamespace\number\localboxclass\endcsname %\edef\currentlocalboxes{\lastnamedcs}% \expandafter\let\expandafter\currentlocalboxes\lastnamedcs \setbox\localboxcontentbox\hbox - {\uselocalboxesstyleandcolor\c!style\c!color + {\uselocalboxesstyleandcolor\c!style\c!color % sometimes redundant \localboxesparameter\c!command}% \fi} @@ -96,51 +98,79 @@ %D existing local box we create nested ones. This is handled in the callback but if %D really needed one can do something like (do we need a primitive?): -% \localrightbox{% -% \the\localrightbox -% \setbox\scratchbox\lastbox -% \unhbox\scratchbox -% additional}% +\def\typo_localboxes_localbox + {\ifx\currentlocalboxeslocation\v!right + \localrightbox + \orelse\ifx\currentlocalboxeslocation\v!left + \localleftbox + \else + \localmiddlebox + \fi} -\def\typo_localboxes_zero#1#2% - {\ifcsname\??localboxesattribute#1\endcsname - \hpack attr \localboxesattribute \lastnamedcs to \zeropoint \bgroup - \edef\currentlocalboxes{#1}% - #2% - \egroup +\def\typo_localboxes_zero#1#2#3% + {\ifcsname\??localboxesattribute#2\endcsname + \c_typo_localboxes_class\lastnamedcs + \edef\currentlocalboxes{#2}% + \edef\currentlocalboxeslocation{#1}% + \typo_localboxes_localbox + class \c_typo_localboxes_class + \bgroup + \hpack + \ifcstok{\localboxesparameter\c!repeat}\v!no + attr \localboxesmarkattribute \localboxmarkonce\c_typo_localboxes_class\relax + \fi + to \zeropoint + \bgroup + \uselocalboxesstyleandcolor\c!style\c!color + \hbox{#3}% + \hss + \egroup + \egroup + \fi} + +\def\typo_localboxes_asis#1#2#3% + {\ifcsname\??localboxesattribute#2\endcsname + \c_typo_localboxes_class\lastnamedcs + \edef\currentlocalboxes{#2}% + \edef\currentlocalboxeslocation{#1}% + \typo_localboxes_localbox + class \c_typo_localboxes_class + \bgroup + \hpack + \ifcstok{\localboxesparameter\c!repeat}\v!no + attr \localboxesmarkattribute \localboxmarkonce\c_typo_localboxes_class\relax + \fi + % todo: use width if dimension, use distance if given + \bgroup + \uselocalboxesstyleandcolor\c!style\c!color + \hbox{#3}% no \hss + \egroup + \egroup \fi} -\def\typo_localboxes_asis#1#2% - {\hpack \bgroup % todo: use width if dimension, use distance if given +\defcsname\??localboxeslocations\v!left \endcsname{\typo_localboxes_zero\v!left } +\defcsname\??localboxeslocations\v!right \endcsname{\typo_localboxes_zero\v!right } +\defcsname\??localboxeslocations\v!lefttext \endcsname{\typo_localboxes_asis\v!left } +\defcsname\??localboxeslocations\v!righttext\endcsname{\typo_localboxes_asis\v!right } +\defcsname\??localboxeslocations\v!middle \endcsname{\typo_localboxes_asis\v!middle} + +\letcsname\??localboxesresetters\v!left \endcsname\v!left +\letcsname\??localboxesresetters\v!right \endcsname\v!right +\letcsname\??localboxesresetters\v!lefttext \endcsname\v!left +\letcsname\??localboxesresetters\v!righttext\endcsname\v!right +\letcsname\??localboxesresetters\v!middle \endcsname\v!middle + +\permanent\tolerant\protected\def\resetlocalbox[#1]% + {\ifcsname\??localboxesattribute#1\endcsname + \c_typo_localboxes_class\lastnamedcs \edef\currentlocalboxes{#1}% - \localboxesparameter\c!command{#2}% - \egroup} - -\defcsname\??localboxeslocations\v!left\endcsname#1#2% - {\leftparbox \bgroup - \typo_localboxes_zero{#1}{#2}% - \the\localleftbox - \egroup} - -\defcsname\??localboxeslocations\v!right\endcsname#1#2% - {\rightparbox \bgroup - \the\localrightbox - \typo_localboxes_zero{#1}{#2}% - \egroup} - -\defcsname\??localboxeslocations\v!lefttext\endcsname#1#2% - {\leftparbox \bgroup - \typo_localboxes_asis{#1}{#2}% - \the\localleftbox - \egroup} - -\defcsname\??localboxeslocations\v!righttext\endcsname#1#2% - {\rightparbox \bgroup - \the\localrightbox - \typo_localboxes_asis{#1}{#2}% - \egroup} + \ifcsname\??localboxesresetters\localboxesparameter\c!location\endcsname + \edef\currentlocalboxeslocation{\lastnamedcs}% + \typo_localboxes_localbox class \c_typo_localboxes_class {}% + \fi + \fi} -\permanent\tolerant\protected\def\localbox[#1]% +\def\typo_localboxes_box#1% {\dowithnextboxcontent {\edef\currentlocalboxes{#1}% \uselocalboxesstyleandcolor\c!style\c!color} @@ -148,8 +178,11 @@ \expandafter\lastnamedcs \else \csname\??localboxeslocations\v!left\expandafter\endcsname - \fi{#1}{\unhbox\nextbox}}% - \hbox} + \fi{#1}{\unhbox\nextbox}}} + + +\permanent\tolerant\protected\def\localbox[#1]% + {\typo_localboxes_box{#1}\hbox} \permanent\tolerant\protected\def\startlocalbox[#1]% {\dowithnextbox @@ -166,6 +199,120 @@ \aliased\let\stoplocalbox\donothing +\permanent\tolerant\protected\def\startlocalboxrange[#1]% + {\globalpushmacro\stoplocalboxrange + \ifcsname\??localboxeslocations\namedlocalboxesparameter{#1}\c!location\endcsname + \lastnamedcs{#1}{}% + \fi} + +\permanent\protected\def\stoplocalboxrange + {\globalpopmacro\stoplocalboxrange}% + +% using left and right with left lagging behind: +% +% \permanent\protected\def\localmarginlefttext#1% +% {\setbox\localboxcontentbox\hpack +% {\unhbox\localboxcontentbox +% \setbox\localboxcontentbox\lastbox +% \unhbox\localboxcontentbox}% +% \hpack xoffset -\dimexpr +% #1 +% +\localboxprogress +% +\localboxleftoffset +% +\wd\localboxcontentbox +% +\localboxesparameter\c!distance +% \relax{\box\localboxcontentbox}} +% +% \permanent\protected\def\localmarginrighttext#1% +% {\hpack xoffset \dimexpr +% #1 +% +\localboxrightoffset +% +\localboxlocalwidth +% -\localboxprogress +% +\localboxesparameter\c!distance +% \relax{\box\localboxcontentbox}} + +% using middle: + +\permanent\protected\def\localmarginlefttext#1% + {\ifzeropt\localboxesparameter\c!width\relax + % a but ugly hack ... for now + \setbox\localboxcontentbox\hpack + {\unhbox\localboxcontentbox + \setbox\localboxcontentbox\lastbox + \unhbox\localboxcontentbox}% + \fi + \hpack xoffset \dimexpr + -#1 + -\localboxprogress + -\wd\localboxcontentbox + -\localboxesparameter\c!distance + \relax{\box\localboxcontentbox}} + +\permanent\protected\def\localmarginrighttext#1% + {\hpack xoffset \dimexpr + #1 + +\localboxlinewidth + -\localboxprogress + +\localboxesparameter\c!distance + \relax{\box\localboxcontentbox}} + +% todo: use generic one above + +\permanent\protected\def\localmargintext[#1]#2% + {\dontleavehmode + \ifcsname\??localboxesattribute#1\endcsname + \c_typo_localboxes_class\lastnamedcs + \edef\currentlocalboxes{#1}% + \edef\currentlocalboxeslocation{\localboxesparameter\c!location}% + \ifx\currentlocalboxeslocation\v!right\localrightbox\orelse\ifx\currentlocalboxeslocation\v!left\localleftbox\else\localmiddlebox\fi + class \c_typo_localboxes_class + \bgroup + \hpack + \ifcstok{\localboxesparameter\c!repeat}\v!no + attr \localboxesmarkattribute \localboxmarkonce\c_typo_localboxes_class\relax + \fi + to \zeropoint + \bgroup + \uselocalboxesstyleandcolor\c!style\c!color + \hbox{#2}% + \hss + \egroup + \egroup + \fi} + +\definelocalboxes + [\v!leftmargin] + [\c!command=\localmarginlefttext\zeropoint, + \c!repeat=\v!no, + \c!distance=\leftmargindistance, + % \c!location=\v!left] + \c!location=\v!middle] + +\definelocalboxes + [\v!rightmargin] + [\c!command=\localmarginrighttext\zeropoint, + \c!repeat=\v!no, + \c!distance=\rightmargindistance, + % \c!location=\v!right] + \c!location=\v!middle] + +\definelocalboxes + [\v!leftedge] + [\c!command=\localmarginlefttext\leftmargintotal, + \c!repeat=\v!no, + \c!distance=\leftedgedistance, + % \c!location=\v!left] + \c!location=\v!middle] + +\definelocalboxes + [\v!rightedge] + [\c!command=\localmarginrighttext\rightmargintotal, + \c!repeat=\v!no, + \c!distance=\rightedgedistance, + % \c!location=\v!right] + \c!location=\v!middle] + %D Here is an example of usage: %D \starttyping diff --git a/tex/context/fonts/mkiv/ebgaramond.lfg b/tex/context/fonts/mkiv/ebgaramond.lfg index 43cc13c51..73f3e6b70 100644 --- a/tex/context/fonts/mkiv/ebgaramond.lfg +++ b/tex/context/fonts/mkiv/ebgaramond.lfg @@ -4,6 +4,44 @@ return { comment = "Goodies that complement eb garamond.", author = "Hans Hagen", copyright = "ConTeXt development team", + mathematics = { + tweaks = { + aftercopying = { + function(target,original,...) + local crap = { + [0x1D453] = { .20, 1.20 }, + [0x1D454] = { .15, 1.15 }, + } + local characters = target.characters + local function adapt(k,v) + local character = characters[k] + local width = character.width + character.width = v[2]*width + -- character.commands = { { "offset", v[1]*width, 0, k } } + character.xoffset = v[1]*width + local smaller = original.characters[k].smaller + if smaller and smaller ~= k then + adapt(smaller,v) + end + end + for k, v in next, crap do + adapt(k,v) + end + end, + }, + }, + + alternates = { + partial = { feature = 'ss02', value = 1, comment = "Curved partial" }, + semibold = { feature = 'ss04', value = 1, comment = "Semibold" }, + extrabold = { feature = 'ss05', value = 1, comment = "Extrabold" }, + hbar = { feature = 'ss06', value = 1, comment = "Horizontal bar for h-bar" }, + integral = { feature = 'ss07', value = 1, comment = "A more slanted integral sign" }, + tilde = { feature = 'ss09', value = 1, comment = "A tilde variant" }, + outbendingh = { feature = 'ss10', value = 1, comment = "Out-bending h" }, + largeoperators = { feature = 'ss11', value = 1, comment = "Larger operators" }, + }, + }, designsizes = { ["EBGaramond-Italic"] = { ["8pt"] = "file:EBGaramond08-Italic", diff --git a/tex/context/fonts/mkiv/libertinus-math.lfg b/tex/context/fonts/mkiv/libertinus-math.lfg index b6621b946..c02f0506a 100644 --- a/tex/context/fonts/mkiv/libertinus-math.lfg +++ b/tex/context/fonts/mkiv/libertinus-math.lfg @@ -13,29 +13,67 @@ return { mathematics = { tweaks = { aftercopying = { + -- function(target,original) + -- local okay = 983068 + -- local crap = { + -- ["minute"] = "minute.ssty1", + -- ["second"] = "second.ssty1", + -- -- [8242] = 983068, + -- -- [8243] = 983069, + -- [8244] = 983070, + -- [8245] = 983071, + -- [8246] = 983072, + -- [8247] = 983073, + -- } + -- local characters = target.characters + -- local unicodes = original.resources.unicodes + -- if unicodes["minute.ssty1"] == okay then + -- for old, new in next, crap do + -- if type(old) == "string" then + -- old = unicodes[old] + -- end + -- if type(new) == "string" then + -- new = unicodes[new] + -- end + -- if old and new and characters[old] then + -- local c = characters[new] + -- if c then + -- characters[old] = c + -- c.commands = { { "up", .06 * c.height }, { "slot", 0, new, .7 } } + -- end + -- end + -- end + -- local four = characters[0x2057] + -- if four then + -- local one = characters[okay] + -- local owd = .75*one.width + -- local off = .6*one.height + -- four.width = 4*owd + -- four.commands = { + -- { "offset", 0, off, okay }, + -- { "offset", owd, off, okay }, + -- { "offset", 2*owd, off, okay }, + -- { "offset", 3*owd, off, okay }, + -- } + -- else + -- -- we don't add (but we could), just patch, and there's no + -- -- reverse quad either + -- end + -- else + -- logs.report("fonts","the libertinus tweaks need to be checked") + -- end + -- end, function(target,original) - local okay = 983068 - local crap = { - ["minute"] = "minute.ssty1", - ["second"] = "second.ssty1", - -- [8242] = 983068, - -- [8243] = 983069, - [8244] = 983070, - [8245] = 983071, - [8246] = 983072, - [8247] = 983073, - } + local crap = { 0x2032, 0x2033, 0x2034, 0x2036, 0x2037, 0x2038 } -- 0x2057 local characters = target.characters + local originals = original.characters local unicodes = original.resources.unicodes - if unicodes["minute.ssty1"] == okay then - for old, new in next, crap do - if type(old) == "string" then - old = unicodes[old] - end - if type(new) == "string" then - new = unicodes[new] - end - if old and new and characters[old] then + for i=1,#crap do + local old = crap[i] + local chr = characters[slot] + if chr then + local new = chr.smaller + if new then local c = characters[new] if c then characters[old] = c @@ -43,28 +81,22 @@ return { end end end - local four = characters[0x2057] - if four then - local one = characters[okay] - local owd = .75*one.width - local off = .6*one.height - four.width = 4*owd - four.commands = { - { "offset", 0, off, okay }, - { "offset", owd, off, okay }, - { "offset", 2*owd, off, okay }, - { "offset", 3*owd, off, okay }, - } - else - -- we don't add (but we could), just patch, and there's no - -- reverse quad either - end - else - logs.report("fonts","the libertinus tweaks need to be checked") + end + local four = characters[0x2057] + if four then + local one = characters[0x2032] + local owd = .75*one.width + local off = .6*one.height + four.width = 4*owd + four.commands = { + { "offset", 0, off, okay }, + { "offset", owd, off, okay }, + { "offset", 2*owd, off, okay }, + { "offset", 3*owd, off, okay }, + } end end, }, }, }, } - diff --git a/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv b/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv index 5cafe503f..87f8b5cad 100644 --- a/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv +++ b/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv @@ -57,19 +57,25 @@ % \definetypeface [ebgaramond] [mm] [math] [bonum] [default] [rscale=0.8] % rather arbitrary but seldom mixed anyway % \stoptypescript - \starttypescript [serif] [ebgaramond] + \starttypescript [\s!serif] [ebgaramond] \setups[font:fallback:serif] - \definefontsynonym [Serif] [file:ebgaramond-regular] [features=eb-garamond-normal] - \definefontsynonym [SerifItalic] [file:ebgaramond-italic] [features=eb-garamond-normal] - \definefontsynonym [SerifBold] [file:ebgaramond-bold] [features=eb-garamond-normal] - \definefontsynonym [SerifBoldItalic][file:ebgaramond-bolditalic][features=eb-garamond-normal] - \definefontsynonym [SerifCaps] [Serif] [features=eb-garamond-smallcaps] + \definefontsynonym [\s!Serif] [\s!file:ebgaramond-regular] [\s!features=eb-garamond-normal] + \definefontsynonym [\s!SerifItalic] [\s!file:ebgaramond-italic] [\s!features=eb-garamond-normal] + \definefontsynonym [\s!SerifBold] [\s!file:ebgaramond-bold] [\s!features=eb-garamond-normal] + \definefontsynonym [\s!SerifBoldItalic][\s!file:ebgaramond-bolditalic][\s!features=eb-garamond-normal] + \definefontsynonym [\s!SerifCaps] [\s!Serif] [\s!features=eb-garamond-smallcaps] + \stoptypescript + + \starttypescript [\s!math] [ebgaramond] [\s!name] + \loadfontgoodies[ebgaramond] + \definefontsynonym [\s!MathRoman] [\s!file:garamond-math.otf] [\s!features=\s!math\mathsizesuffix,\s!goodies=ebgaramond] \stoptypescript \starttypescript[ebgaramond] - \definetypeface [ebgaramond] [rm] [serif] [ebgaramond] [default] - \definetypeface [ebgaramond] [tt] [mono] [dejavu] [default] [rscale=0.8] % rather arbitrary but seldom mixed anyway - \definetypeface [ebgaramond] [mm] [math] [bonum] [default] [rscale=0.8] % rather arbitrary but seldom mixed anyway + \definetypeface [ebgaramond] [\s!rm] [\s!serif] [ebgaramond] [\s!default] + \definetypeface [ebgaramond] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.8] % rather arbitrary but seldom mixed anyway + % \definetypeface [ebgaramond] [\s!mm] [\s!math] [bonum] [\s!default] [\s!rscale=0.8] % rather arbitrary but seldom mixed anyway + \definetypeface [ebgaramond] [\s!mm] [\s!math] [ebgaramond] [\s!default] \stoptypescript \stoptypescriptcollection diff --git a/tex/context/interface/mkii/keys-en.xml b/tex/context/interface/mkii/keys-en.xml index 88cd1886b..06da1c646 100644 --- a/tex/context/interface/mkii/keys-en.xml +++ b/tex/context/interface/mkii/keys-en.xml @@ -318,6 +318,7 @@ + @@ -479,6 +480,7 @@ + diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml index 447cfd580..ead51a685 100644 --- a/tex/context/interface/mkii/keys-ro.xml +++ b/tex/context/interface/mkii/keys-ro.xml @@ -318,6 +318,7 @@ + @@ -479,6 +480,7 @@ + diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 27a2037c1..9ecdb0f6f 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2021-10-28 10:17 +-- merge date : 2021-11-02 09:59 do -- begin closure to overcome local limits and interference -- cgit v1.2.3