diff options
55 files changed, 1873 insertions, 327 deletions
diff --git a/context/data/scite/context/lexers/data/scite-context-data-context.lua b/context/data/scite/context/lexers/data/scite-context-data-context.lua index 76024190b..29a69d871 100644 --- a/context/data/scite/context/lexers/data/scite-context-data-context.lua +++ b/context/data/scite/context/lexers/data/scite-context-data-context.lua @@ -1,4 +1,4 @@ return { - ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "pluseleven", "plustwelve", "plussixteen", "plusfifty", "plushundred", "plusonehundred", "plustwohundred", "plusfivehundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxcount", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "binaryshiftedten", "binaryshiftedtwenty", "binaryshiftedthirty", "directionlefttoright", "directionrighttoleft", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "prerollrun", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "texenginefunctionality", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "contextformat", "contextversion", "contextlmtxmode", "contextmark", "mksuffix", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "statuswrite", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "rlncatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "commaasciicode", "spaceasciicode", "periodasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "leftparentasciicode", "rightparentasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", "hyphenasciicode", "percentasciicode", "leftbracketasciicode", "rightbracketasciicode", "hsizefrozenparcode", "skipfrozenparcode", "hangfrozenparcode", "indentfrozenparcode", "parfillfrozenparcode", "adjustfrozenparcode", "protrudefrozenparcode", "tolerancefrozenparcode", "stretchfrozenparcode", "loosenessfrozenparcode", "lastlinefrozenparcode", "linepenaltyfrozenparcode", "clubpenaltyfrozenparcode", "widowpenaltyfrozenparcode", "displaypenaltyfrozenparcode", "brokenpenaltyfrozenparcode", "demeritsfrozenparcode", "shapefrozenparcode", "linefrozenparcode", "hyphenationfrozenparcode", "shapingpenaltiesfrozenparcode", "orphanpenaltyfrozenparcode", "allfrozenparcode", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vadjustgroupcode", "vcentergroupcode", "mathabovegroupcode", "mathchoicegroupcode", "alsosimplegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "localboxgroupcode", "splitoffgroupcode", "splitkeepgroupcode", "preamblegroupcode", "alignsetgroupcode", "finrowgroupcode", "discretionarygroupcode", "markautomigrationcode", "insertautomigrationcode", "adjustautomigrationcode", "preautomigrationcode", "postautomigrationcode", "charnodecode", "hlistnodecode", "vlistnodecode", "rulenodecode", "insertnodecode", "marknodecode", "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", "overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode", "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "accentitalickernmathcontrolcode", "delimiteritalickernmathcontrolcode", "noorditalickernmathcontrolcode", "charitalicwidthmathcontrolcode", "charitalicnoreboxmathcontrolcode", "boxednoitalickernmathcontrolcode", "nostaircasekernmathcontrolcode", "textitalickernmathcontrolcode", "noscriptitalickernmathcontrolcode", "italicshapekernmathcontrolcode", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode", "noitaliccorrectionglyphoptioncode", "normalparcontextcode", "vmodeparcontextcode", "vboxparcontextcode", "vtopparcontextcode", "vcenterparcontextcode", "vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode", "noalignparcontextcode", "spanparcontextcode", "resetparcontextcode", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "mathexheight", "mathemwidth", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathaxisheight", "muquad", "startmode", "stopmode", "startnotmode", "stopnotmode", "startmodeset", "stopmodeset", "doifmode", "doifelsemode", "doifmodeelse", "doifnotmode", "startmodeset", "stopmodeset", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifelseallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startnotext", "stopnotext", "startdocument", "stopdocument", "documentvariable", "unexpandeddocumentvariable", "setupdocument", "presetdocument", "doifelsedocumentvariable", "doifdocumentvariableelse", "doifdocumentvariable", "doifnotdocumentvariable", "startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule", "setupmodule", "currentmoduleparameter", "moduleparameter", "everystarttext", "everystoptext", "startTEXpage", "stopTEXpage", "enablemode", "disablemode", "preventmode", "definemode", "globalenablemode", "globaldisablemode", "globalpreventmode", "pushmode", "popmode", "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", "mathordcode", "mathopcode", "mathbincode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctcode", "mathalphacode", "mathinnercode", "mathnothingcode", "mathlimopcode", "mathnolopcode", "mathboxcode", "mathchoicecode", "mathaccentcode", "mathradicalcode", "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", "continueifinputfile", "luastringsep", "!!bs", "!!es", "lefttorightmark", "righttoleftmark", "lrm", "rlm", "bidilre", "bidirle", "bidipop", "bidilro", "bidirlo", "breakablethinspace", "nobreakspace", "nonbreakablespace", "narrownobreakspace", "zerowidthnobreakspace", "ideographicspace", "ideographichalffillspace", "twoperemspace", "threeperemspace", "fourperemspace", "fiveperemspace", "sixperemspace", "figurespace", "punctuationspace", "hairspace", "enquad", "emquad", "zerowidthspace", "zerowidthnonjoiner", "zerowidthjoiner", "zwnj", "zwj", "optionalspace", "asciispacechar", "softhyphen", "Ux", "eUx", "Umathaccents", "parfillleftskip", "parfillrightskip", "startlmtxmode", "stoplmtxmode", "startmkivmode", "stopmkivmode", "wildcardsymbol", "normalhyphenationcode", "automatichyphenationcode", "explicithyphenationcode", "syllablehyphenationcode", "uppercasehyphenationcode", "collapsehyphenationcode", "compoundhyphenationcode", "strictstarthyphenationcode", "strictendhyphenationcode", "automaticpenaltyhyphenationcode", "explicitpenaltyhyphenationcode", "permitgluehyphenationcode", "permitallhyphenationcode", "permitmathreplacehyphenationcode", "forcecheckhyphenationcode", "lazyligatureshyphenationcode", "forcehandlerhyphenationcode", "feedbackcompoundhyphenationcode", "ignoreboundshyphenationcode", "partialhyphenationcode", "completehyphenationcode", "normalizelinenormalizecode", "parindentskipnormalizecode", "swaphangindentnormalizecode", "swapparsshapenormalizecode", "breakafterdirnormalizecode", "removemarginkernsnormalizecode", "clipwidthnormalizecode", "flattendiscretionariesnormalizecode", "discardzerotabskipsnormalizecode", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noitaliccorrectionglyphoptioncode", "nokerningcode", "noligaturingcode", "frozenflagcode", "tolerantflagcode", "protectedflagcode", "primitiveflagcode", "permanentflagcode", "noalignedflagcode", "immutableflagcode", "mutableflagcode", "globalflagcode", "overloadedflagcode", "immediateflagcode", "conditionalflagcode", "valueflagcode", "instanceflagcode", "ordmathflattencode", "binmathflattencode", "relmathflattencode", "punctmathflattencode", "innermathflattencode", "normalworddiscoptioncode", "preworddiscoptioncode", "postworddiscoptioncode", "continuewhenlmtxmode" }, + ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "pluseleven", "plustwelve", "plussixteen", "plusfifty", "plushundred", "plusonehundred", "plustwohundred", "plusfivehundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxcount", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "binaryshiftedten", "binaryshiftedtwenty", "binaryshiftedthirty", "directionlefttoright", "directionrighttoleft", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "prerollrun", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "texenginefunctionality", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "contextformat", "contextversion", "contextlmtxmode", "contextmark", "mksuffix", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "statuswrite", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "rlncatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "commaasciicode", "spaceasciicode", "periodasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "leftparentasciicode", "rightparentasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", "hyphenasciicode", "percentasciicode", "leftbracketasciicode", "rightbracketasciicode", "hsizefrozenparcode", "skipfrozenparcode", "hangfrozenparcode", "indentfrozenparcode", "parfillfrozenparcode", "adjustfrozenparcode", "protrudefrozenparcode", "tolerancefrozenparcode", "stretchfrozenparcode", "loosenessfrozenparcode", "lastlinefrozenparcode", "linepenaltyfrozenparcode", "clubpenaltyfrozenparcode", "widowpenaltyfrozenparcode", "displaypenaltyfrozenparcode", "brokenpenaltyfrozenparcode", "demeritsfrozenparcode", "shapefrozenparcode", "linefrozenparcode", "hyphenationfrozenparcode", "shapingpenaltiesfrozenparcode", "orphanpenaltyfrozenparcode", "allfrozenparcode", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vadjustgroupcode", "vcentergroupcode", "mathabovegroupcode", "mathchoicegroupcode", "alsosimplegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "localboxgroupcode", "splitoffgroupcode", "splitkeepgroupcode", "preamblegroupcode", "alignsetgroupcode", "finrowgroupcode", "discretionarygroupcode", "markautomigrationcode", "insertautomigrationcode", "adjustautomigrationcode", "preautomigrationcode", "postautomigrationcode", "charnodecode", "hlistnodecode", "vlistnodecode", "rulenodecode", "insertnodecode", "marknodecode", "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", "overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode", "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "accentitalickernmathcontrolcode", "delimiteritalickernmathcontrolcode", "noorditalickernmathcontrolcode", "charitalicwidthmathcontrolcode", "charitalicnoreboxmathcontrolcode", "boxednoitalickernmathcontrolcode", "nostaircasekernmathcontrolcode", "textitalickernmathcontrolcode", "noscriptitalickernmathcontrolcode", "italicshapekernmathcontrolcode", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode", "noitaliccorrectionglyphoptioncode", "normalparcontextcode", "vmodeparcontextcode", "vboxparcontextcode", "vtopparcontextcode", "vcenterparcontextcode", "vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode", "noalignparcontextcode", "spanparcontextcode", "resetparcontextcode", "leftoriginlistanchorcode", "leftheightlistanchorcode", "leftdepthlistanchorcode", "rightoriginlistanchorcode", "rightheightlistanchorcode", "rightdepthlistanchorcode", "centeroriginlistanchorcode", "centerheightlistanchorcode", "centerdepthlistanchorcode", "halfwaytotallistanchorcode", "halfwayheightlistanchorcode", "halfwaydepthlistanchorcode", "halfwayleftlistanchorcode", "halfwayrightlistanchorcode", "negatexlistsigncode", "negateylistsigncode", "negatelistsigncode", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "mathexheight", "mathemwidth", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathaxisheight", "muquad", "startmode", "stopmode", "startnotmode", "stopnotmode", "startmodeset", "stopmodeset", "doifmode", "doifelsemode", "doifmodeelse", "doifnotmode", "startmodeset", "stopmodeset", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifelseallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startnotext", "stopnotext", "startdocument", "stopdocument", "documentvariable", "unexpandeddocumentvariable", "setupdocument", "presetdocument", "doifelsedocumentvariable", "doifdocumentvariableelse", "doifdocumentvariable", "doifnotdocumentvariable", "startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule", "setupmodule", "currentmoduleparameter", "moduleparameter", "everystarttext", "everystoptext", "startTEXpage", "stopTEXpage", "enablemode", "disablemode", "preventmode", "definemode", "globalenablemode", "globaldisablemode", "globalpreventmode", "pushmode", "popmode", "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", "mathordcode", "mathopcode", "mathbincode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctcode", "mathalphacode", "mathinnercode", "mathnothingcode", "mathlimopcode", "mathnolopcode", "mathboxcode", "mathchoicecode", "mathaccentcode", "mathradicalcode", "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", "continueifinputfile", "luastringsep", "!!bs", "!!es", "lefttorightmark", "righttoleftmark", "lrm", "rlm", "bidilre", "bidirle", "bidipop", "bidilro", "bidirlo", "breakablethinspace", "nobreakspace", "nonbreakablespace", "narrownobreakspace", "zerowidthnobreakspace", "ideographicspace", "ideographichalffillspace", "twoperemspace", "threeperemspace", "fourperemspace", "fiveperemspace", "sixperemspace", "figurespace", "punctuationspace", "hairspace", "enquad", "emquad", "zerowidthspace", "zerowidthnonjoiner", "zerowidthjoiner", "zwnj", "zwj", "optionalspace", "asciispacechar", "softhyphen", "Ux", "eUx", "Umathaccents", "parfillleftskip", "parfillrightskip", "startlmtxmode", "stoplmtxmode", "startmkivmode", "stopmkivmode", "wildcardsymbol", "normalhyphenationcode", "automatichyphenationcode", "explicithyphenationcode", "syllablehyphenationcode", "uppercasehyphenationcode", "collapsehyphenationcode", "compoundhyphenationcode", "strictstarthyphenationcode", "strictendhyphenationcode", "automaticpenaltyhyphenationcode", "explicitpenaltyhyphenationcode", "permitgluehyphenationcode", "permitallhyphenationcode", "permitmathreplacehyphenationcode", "forcecheckhyphenationcode", "lazyligatureshyphenationcode", "forcehandlerhyphenationcode", "feedbackcompoundhyphenationcode", "ignoreboundshyphenationcode", "partialhyphenationcode", "completehyphenationcode", "normalizelinenormalizecode", "parindentskipnormalizecode", "swaphangindentnormalizecode", "swapparsshapenormalizecode", "breakafterdirnormalizecode", "removemarginkernsnormalizecode", "clipwidthnormalizecode", "flattendiscretionariesnormalizecode", "discardzerotabskipsnormalizecode", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noitaliccorrectionglyphoptioncode", "nokerningcode", "noligaturingcode", "frozenflagcode", "tolerantflagcode", "protectedflagcode", "primitiveflagcode", "permanentflagcode", "noalignedflagcode", "immutableflagcode", "mutableflagcode", "globalflagcode", "overloadedflagcode", "immediateflagcode", "conditionalflagcode", "valueflagcode", "instanceflagcode", "ordmathflattencode", "binmathflattencode", "relmathflattencode", "punctmathflattencode", "innermathflattencode", "normalworddiscoptioncode", "preworddiscoptioncode", "postworddiscoptioncode", "continuewhenlmtxmode" }, ["helpers"]={ "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "startluasetups", "stopluasetups", "starttexsetups", "stoptexsetups", "startrawsetups", "stoprawsetups", "startlocalsetups", "stoplocalsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "startcontextcode", "stopcontextcode", "startcontextdefinitioncode", "stopcontextdefinitioncode", "texdefinition", "doifelsesetups", "doifsetupselse", "doifsetups", "doifnotsetups", "setup", "setups", "texsetup", "xmlsetup", "luasetup", "directsetup", "fastsetup", "copysetups", "resetsetups", "doifelsecommandhandler", "doifcommandhandlerelse", "doifnotcommandhandler", "doifcommandhandler", "newmode", "setmode", "resetmode", "newsystemmode", "setsystemmode", "resetsystemmode", "pushsystemmode", "popsystemmode", "globalsetmode", "globalresetmode", "globalsetsystemmode", "globalresetsystemmode", "booleanmodevalue", "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", "then", "begcsname", "autorule", "strippedcsname", "checkedstrippedcsname", "nofarguments", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthargumenttrue", "sixthargumentfalse", "sixthargumenttrue", "seventhargumentfalse", "seventhargumenttrue", "vkern", "hkern", "vpenalty", "hpenalty", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "untraceddonothing", "dontcomplain", "lessboxtracing", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "startpickupmath", "stoppickupmath", "reqno", "mathortext", "thebox", "htdp", "unvoidbox", "hfilll", "vfilll", "mathbox", "mathlimop", "mathnolop", "mathnothing", "mathalpha", "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilll", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "normalhfilllneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilll", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "normalvfilllneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledmbox", "ruledhpack", "ruledvpack", "ruledtpack", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", "filledhboxb", "filledhboxr", "filledhboxg", "filledhboxc", "filledhboxm", "filledhboxy", "filledhboxk", "scratchstring", "scratchstringone", "scratchstringtwo", "tempstring", "scratchcounter", "globalscratchcounter", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "scratchmacro", "scratchmacroone", "scratchmacrotwo", "scratchconditiontrue", "scratchconditionfalse", "ifscratchcondition", "scratchconditiononetrue", "scratchconditiononefalse", "ifscratchconditionone", "scratchconditiontwotrue", "scratchconditiontwofalse", "ifscratchconditiontwo", "globalscratchcounterone", "globalscratchcountertwo", "globalscratchcounterthree", "groupedcommand", "groupedcommandcs", "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "simplegroupedcommandcs", "pickupgroupedcommand", "pickupgroupedcommandcs", "usedbaselineskip", "usedlineskip", "usedlineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "next", "nexttoken", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "boxisempty", "boxtostring", "contentostring", "prerolltostring", "givenwidth", "givenheight", "givendepth", "scangivendimensions", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchtotal", "scratchhsize", "scratchvsize", "scratchxoffset", "scratchyoffset", "scratchhoffset", "scratchvoffset", "scratchxposition", "scratchyposition", "scratchtopoffset", "scratchbottomoffset", "scratchleftoffset", "scratchrightoffset", "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchcounterfour", "scratchcounterfive", "scratchcountersix", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchdimenfour", "scratchdimenfive", "scratchdimensix", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchskipfour", "scratchskipfive", "scratchskipsix", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchmuskipfour", "scratchmuskipfive", "scratchmuskipsix", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchtoksfour", "scratchtoksfive", "scratchtokssix", "scratchboxone", "scratchboxtwo", "scratchboxthree", "scratchboxfour", "scratchboxfive", "scratchboxsix", "scratchnx", "scratchny", "scratchmx", "scratchmy", "scratchunicode", "scratchmin", "scratchmax", "scratchleftskip", "scratchrightskip", "scratchtopskip", "scratchbottomskip", "doif", "doifnot", "doifelse", "firstinset", "doifinset", "doifnotinset", "doifelseinset", "doifinsetelse", "doifelsenextchar", "doifnextcharelse", "doifelsenextcharcs", "doifnextcharcselse", "doifelsenextoptional", "doifnextoptionalelse", "doifelsenextoptionalcs", "doifnextoptionalcselse", "doifelsefastoptionalcheck", "doiffastoptionalcheckelse", "doifelsefastoptionalcheckcs", "doiffastoptionalcheckcselse", "doifelsenextbgroup", "doifnextbgroupelse", "doifelsenextbgroupcs", "doifnextbgroupcselse", "doifelsenextparenthesis", "doifnextparenthesiselse", "doifelseundefined", "doifundefinedelse", "doifelsedefined", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifnothingelse", "doifelsesomething", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifvaluenothingelse", "doifelsedimension", "doifdimensionelse", "doifelsenumber", "doifnumberelse", "doifnumber", "doifnotnumber", "doifelsecommon", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifelseinstring", "doifinstringelse", "doifelseassignment", "doifassignmentelse", "docheckassignment", "doifelseassignmentcs", "doifassignmentelsecs", "validassignment", "novalidassignment", "doiftext", "doifelsetext", "doiftextelse", "doifnottext", "quitcondition", "truecondition", "falsecondition", "tracingall", "tracingnone", "loggingall", "tracingcatcodes", "showluatokens", "aliasmacro", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "emspace", "charspace", "nbsp", "crlf", "obeyspaces", "obeylines", "obeytabs", "obeypages", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "naturalspace", "controlspace", "normalspaces", "ignoretabs", "ignorelines", "ignorepages", "ignoreeofs", "setcontrolspaces", "executeifdefined", "singleexpandafter", "doubleexpandafter", "tripleexpandafter", "dontleavehmode", "removelastspace", "removeunwantedspaces", "keepunwantedspaces", "removepunctuation", "ignoreparskip", "forcestrutdepth", "onlynonbreakablespace", "wait", "writestatus", "define", "defineexpandable", "redefine", "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure", "measured", "directmeasure", "setquantity", "setequantity", "setgquantity", "setxquantity", "definequantity", "freezequantity", "quantity", "quantitied", "directquantity", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "udef", "ugdef", "uedef", "uxdef", "checked", "unique", "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "copyparameters", "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter", "setexpandeddummyparameter", "usedummystyleandcolor", "usedummystyleparameter", "usedummycolorparameter", "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", "unexpanded", "expanded", "startexpanded", "stopexpanded", "protect", "unprotect", "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", "firstofoneunexpanded", "firstoftwounexpanded", "secondoftwounexpanded", "firstofthreeunexpanded", "secondofthreeunexpanded", "thirdofthreeunexpanded", "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs", "fastloopindex", "fastloopfinal", "dowith", "doloopovermatch", "doloopovermatched", "doloopoverlist", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "setconditional", "newmacro", "setnewmacro", "newfraction", "newsignal", "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty", "dosingleargument", "dodoubleargument", "dotripleargument", "doquadrupleargument", "doquintupleargument", "dosixtupleargument", "doseventupleargument", "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty", "permitspacesbetweengroups", "dontpermitspacesbetweengroups", "nopdfcompression", "maximumpdfcompression", "normalpdfcompression", "onlypdfobjectcompression", "nopdfobjectcompression", "modulonumber", "dividenumber", "getfirstcharacter", "doifelsefirstchar", "doiffirstcharelse", "startnointerference", "stopnointerference", "twodigits", "threedigits", "leftorright", "offinterlineskip", "oninterlineskip", "nointerlineskip", "strut", "halfstrut", "quarterstrut", "depthstrut", "halflinestrut", "noheightstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "strutgap", "begstrut", "endstrut", "lineheight", "leftboundary", "rightboundary", "signalcharacter", "aligncontentleft", "aligncontentmiddle", "aligncontentright", "shiftbox", "vpackbox", "hpackbox", "vpackedbox", "hpackedbox", "ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing", "ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing", "opordspacing", "opopspacing", "opbinspacing", "oprelspacing", "opopenspacing", "opclosespacing", "oppunctspacing", "opinnerspacing", "binordspacing", "binopspacing", "binbinspacing", "binrelspacing", "binopenspacing", "binclosespacing", "binpunctspacing", "bininnerspacing", "relordspacing", "relopspacing", "relbinspacing", "relrelspacing", "relopenspacing", "relclosespacing", "relpunctspacing", "relinnerspacing", "openordspacing", "openopspacing", "openbinspacing", "openrelspacing", "openopenspacing", "openclosespacing", "openpunctspacing", "openinnerspacing", "closeordspacing", "closeopspacing", "closebinspacing", "closerelspacing", "closeopenspacing", "closeclosespacing", "closepunctspacing", "closeinnerspacing", "punctordspacing", "punctopspacing", "punctbinspacing", "punctrelspacing", "punctopenspacing", "punctclosespacing", "punctpunctspacing", "punctinnerspacing", "innerordspacing", "inneropspacing", "innerbinspacing", "innerrelspacing", "inneropenspacing", "innerclosespacing", "innerpunctspacing", "innerinnerspacing", "normalreqno", "startimath", "stopimath", "normalstartimath", "normalstopimath", "startdmath", "stopdmath", "normalstartdmath", "normalstopdmath", "normalsuperscript", "normalsubscript", "normalnosuperscript", "normalnosubscript", "superscript", "subscript", "nosuperscript", "nosubscript", "superprescript", "subprescript", "nosuperprescript", "nosubsprecript", "uncramped", "cramped", "mathstyletrigger", "triggermathstyle", "mathstylefont", "mathsmallstylefont", "mathstyleface", "mathsmallstyleface", "mathstylecommand", "mathpalette", "mathstylehbox", "mathstylevbox", "mathstylevcenter", "mathstylevcenteredhbox", "mathstylevcenteredvbox", "mathtext", "setmathsmalltextbox", "setmathtextbox", "pushmathstyle", "popmathstyle", "triggerdisplaystyle", "triggertextstyle", "triggerscriptstyle", "triggerscriptscriptstyle", "triggeruncrampedstyle", "triggercrampedstyle", "triggersmallstyle", "triggeruncrampedsmallstyle", "triggercrampedsmallstyle", "triggerbigstyle", "triggeruncrampedbigstyle", "triggercrampedbigstyle", "luaexpr", "expelsedoif", "expdoif", "expdoifnot", "expdoifelsecommon", "expdoifcommonelse", "expdoifelseinset", "expdoifinsetelse", "ctxdirectlua", "ctxlatelua", "ctxsprint", "ctxwrite", "ctxcommand", "ctxdirectcommand", "ctxlatecommand", "ctxreport", "ctxlua", "luacode", "lateluacode", "directluacode", "registerctxluafile", "ctxloadluafile", "luaversion", "luamajorversion", "luaminorversion", "ctxluacode", "luaconditional", "luaexpanded", "ctxluamatch", "startluaparameterset", "stopluaparameterset", "luaparameterset", "definenamedlua", "obeylualines", "obeyluatokens", "startluacode", "stopluacode", "startlua", "stoplua", "startctxfunction", "stopctxfunction", "ctxfunction", "startctxfunctiondefinition", "stopctxfunctiondefinition", "installctxfunction", "installprotectedctxfunction", "installprotectedctxscanner", "installctxscanner", "resetctxscanner", "cldprocessfile", "cldloadfile", "cldloadviafile", "cldcontext", "cldcommand", "carryoverpar", "freezeparagraphproperties", "defrostparagraphproperties", "setparagraphfreezing", "forgetparagraphfreezing", "updateparagraphproperties", "updateparagraphpenalties", "updateparagraphdemerits", "updateparagraphshapes", "updateparagraphlines", "lastlinewidth", "assumelongusagecs", "Umathbotaccent", "Umathtopaccent", "righttolefthbox", "lefttorighthbox", "righttoleftvbox", "lefttorightvbox", "righttoleftvtop", "lefttorightvtop", "rtlhbox", "ltrhbox", "rtlvbox", "ltrvbox", "rtlvtop", "ltrvtop", "autodirhbox", "autodirvbox", "autodirvtop", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "lefttoright", "righttoleft", "checkedlefttoright", "checkedrighttoleft", "synchronizelayoutdirection", "synchronizedisplaydirection", "synchronizeinlinedirection", "dirlre", "dirrle", "dirlro", "dirrlo", "rtltext", "ltrtext", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "dohyphencollapsing", "nohyphencollapsing", "compounddiscretionary", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalvtop", "naturalhpack", "naturalvpack", "naturaltpack", "reversehbox", "reversevbox", "reversevtop", "reversehpack", "reversevpack", "reversetpack", "hcontainer", "vcontainer", "tcontainer", "frule", "compoundhyphenpenalty", "start", "stop", "unsupportedcs", "openout", "closeout", "write", "openin", "closein", "read", "readline", "readfromterminal", "boxlines", "boxline", "setboxline", "copyboxline", "boxlinewd", "boxlineht", "boxlinedp", "boxlinenw", "boxlinenh", "boxlinend", "boxlinels", "boxliners", "boxlinelh", "boxlinerh", "boxlinelp", "boxlinerp", "boxlinein", "boxrangewd", "boxrangeht", "boxrangedp", "bitwiseset", "bitwiseand", "bitwiseor", "bitwisexor", "bitwisenot", "bitwisenil", "ifbitwiseand", "bitwise", "bitwiseshift", "bitwiseflip", "textdir", "linedir", "pardir", "boxdir", "prelistbox", "postlistbox", "prelistcopy", "postlistcopy", "setprelistbox", "setpostlistbox", "noligaturing", "nokerning", "noexpansion", "noprotrusion", "noleftkerning", "noleftligaturing", "norightkerning", "norightligaturing", "noitaliccorrection", "futureletnexttoken", "defbackslashbreak", "letbackslashbreak", "pushoverloadmode", "popoverloadmode", "pushrunstate", "poprunstate", "suggestedalias", "showboxhere", "discoptioncodestring", "flagcodestring", "frozenparcodestring", "glyphoptioncodestring", "groupcodestring", "hyphenationcodestring", "mathcontrolcodestring", "mathflattencodestring", "normalizecodestring", "parcontextcodestring", "newlocalcount", "newlocaldimen", "newlocalskip", "newlocalmuskip", "newlocaltoks", "newlocalbox", "newlocalwrite", "newlocalread", "setnewlocalcount", "setnewlocaldimen", "setnewlocalskip", "setnewlocalmuskip", "setnewlocaltoks", "setnewlocalbox", "ifexpression" }, }
\ No newline at end of file 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 4144c1007..dda8a7aff 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", "Umathxscale", "Umathyscale", "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", "boxshift", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentloopiterator", "currentloopnesting", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoks", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandedloop", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecdef", "fontspecid", "fontspecifiedsize", "fontspecscale", "fontspecxscale", "fontspecyscale", "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", "localcontrolledloop", "localinterlinepenalty", "localleftbox", "localleftboxbox", "localmiddlebox", "localmiddleboxbox", "localrightbox", "localrightboxbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathlimitsmode", "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", "quitloop", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "shapingpenaltiesmode", "shapingpenalty", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingadjusts", "tracingalignments", "tracingexpressions", "tracingfonts", "tracingfullboxes", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "undent", "unexpandedloop", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoks", "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", "Umathxscale", "Umathyscale", "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", "boxanchor", "boxanchors", "boxattribute", "boxdirection", "boxgeometry", "boxorientation", "boxshift", "boxsource", "boxtarget", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentloopiterator", "currentloopnesting", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoks", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandedloop", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecdef", "fontspecid", "fontspecifiedsize", "fontspecscale", "fontspecxscale", "fontspecyscale", "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", "localcontrolledloop", "localinterlinepenalty", "localleftbox", "localleftboxbox", "localmiddlebox", "localmiddleboxbox", "localrightbox", "localrightboxbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathlimitsmode", "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", "pageboundarypenalty", "pagevsize", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitloop", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "shapingpenaltiesmode", "shapingpenalty", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingadjusts", "tracingalignments", "tracingexpressions", "tracingfonts", "tracingfullboxes", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "tracingnodes", "undent", "unexpandedloop", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoks", "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-context.properties b/context/data/scite/context/scite-context-data-context.properties index 3a79825df..ebe5b861f 100644 --- a/context/data/scite/context/scite-context-data-context.properties +++ b/context/data/scite/context/scite-context-data-context.properties @@ -57,52 +57,55 @@ textitalickernmathcontrolcode noscriptitalickernmathcontrolcode italicshapekernm noexpansionglyphoptioncode noprotrusionglyphoptioncode noleftkerningglyphoptioncode noleftligaturingglyphoptioncode norightkerningglyphoptioncode \ norightligaturingglyphoptioncode noitaliccorrectionglyphoptioncode normalparcontextcode vmodeparcontextcode vboxparcontextcode \ vtopparcontextcode vcenterparcontextcode vadjustparcontextcode insertparcontextcode outputparcontextcode \ -alignparcontextcode noalignparcontextcode spanparcontextcode resetparcontextcode fontslantperpoint \ -fontinterwordspace fontinterwordstretch fontinterwordshrink fontexheight fontemwidth \ -fontextraspace slantperpoint mathexheight mathemwidth interwordspace \ -interwordstretch interwordshrink exheight emwidth extraspace \ -mathaxisheight muquad startmode stopmode startnotmode \ -stopnotmode startmodeset stopmodeset doifmode doifelsemode \ -doifmodeelse doifnotmode startmodeset stopmodeset startallmodes \ -stopallmodes startnotallmodes stopnotallmodes doifallmodes doifelseallmodes \ -doifallmodeselse doifnotallmodes startenvironment stopenvironment environment \ -startcomponent stopcomponent component startproduct stopproduct \ -product startproject stopproject project starttext \ -stoptext startnotext stopnotext startdocument stopdocument \ -documentvariable unexpandeddocumentvariable setupdocument presetdocument doifelsedocumentvariable \ -doifdocumentvariableelse doifdocumentvariable doifnotdocumentvariable startmodule stopmodule \ -usemodule usetexmodule useluamodule setupmodule currentmoduleparameter \ -moduleparameter everystarttext everystoptext startTEXpage stopTEXpage \ -enablemode disablemode preventmode definemode globalenablemode \ -globaldisablemode globalpreventmode pushmode popmode typescriptone \ -typescripttwo typescriptthree mathsizesuffix mathordcode mathopcode \ -mathbincode mathrelcode mathopencode mathclosecode mathpunctcode \ -mathalphacode mathinnercode mathnothingcode mathlimopcode mathnolopcode \ -mathboxcode mathchoicecode mathaccentcode mathradicalcode constantnumber \ -constantnumberargument constantdimen constantdimenargument constantemptyargument continueifinputfile \ -luastringsep !!bs !!es lefttorightmark righttoleftmark \ -lrm rlm bidilre bidirle bidipop \ -bidilro bidirlo breakablethinspace nobreakspace nonbreakablespace \ -narrownobreakspace zerowidthnobreakspace ideographicspace ideographichalffillspace twoperemspace \ -threeperemspace fourperemspace fiveperemspace sixperemspace figurespace \ -punctuationspace hairspace enquad emquad zerowidthspace \ -zerowidthnonjoiner zerowidthjoiner zwnj zwj optionalspace \ -asciispacechar softhyphen Ux eUx Umathaccents \ -parfillleftskip parfillrightskip startlmtxmode stoplmtxmode startmkivmode \ -stopmkivmode wildcardsymbol normalhyphenationcode automatichyphenationcode explicithyphenationcode \ -syllablehyphenationcode uppercasehyphenationcode collapsehyphenationcode compoundhyphenationcode strictstarthyphenationcode \ -strictendhyphenationcode automaticpenaltyhyphenationcode explicitpenaltyhyphenationcode permitgluehyphenationcode permitallhyphenationcode \ -permitmathreplacehyphenationcode forcecheckhyphenationcode lazyligatureshyphenationcode forcehandlerhyphenationcode feedbackcompoundhyphenationcode \ -ignoreboundshyphenationcode partialhyphenationcode completehyphenationcode normalizelinenormalizecode parindentskipnormalizecode \ -swaphangindentnormalizecode swapparsshapenormalizecode breakafterdirnormalizecode removemarginkernsnormalizecode clipwidthnormalizecode \ -flattendiscretionariesnormalizecode discardzerotabskipsnormalizecode noligaturingglyphoptioncode nokerningglyphoptioncode noleftligatureglyphoptioncode \ -noleftkernglyphoptioncode norightligatureglyphoptioncode norightkernglyphoptioncode noexpansionglyphoptioncode noprotrusionglyphoptioncode \ -noitaliccorrectionglyphoptioncode nokerningcode noligaturingcode frozenflagcode tolerantflagcode \ -protectedflagcode primitiveflagcode permanentflagcode noalignedflagcode immutableflagcode \ -mutableflagcode globalflagcode overloadedflagcode immediateflagcode conditionalflagcode \ -valueflagcode instanceflagcode ordmathflattencode binmathflattencode relmathflattencode \ -punctmathflattencode innermathflattencode normalworddiscoptioncode preworddiscoptioncode postworddiscoptioncode \ -continuewhenlmtxmode +alignparcontextcode noalignparcontextcode spanparcontextcode resetparcontextcode leftoriginlistanchorcode \ +leftheightlistanchorcode leftdepthlistanchorcode rightoriginlistanchorcode rightheightlistanchorcode rightdepthlistanchorcode \ +centeroriginlistanchorcode centerheightlistanchorcode centerdepthlistanchorcode halfwaytotallistanchorcode halfwayheightlistanchorcode \ +halfwaydepthlistanchorcode halfwayleftlistanchorcode halfwayrightlistanchorcode negatexlistsigncode negateylistsigncode \ +negatelistsigncode fontslantperpoint fontinterwordspace fontinterwordstretch fontinterwordshrink \ +fontexheight fontemwidth fontextraspace slantperpoint mathexheight \ +mathemwidth interwordspace interwordstretch interwordshrink exheight \ +emwidth extraspace mathaxisheight muquad startmode \ +stopmode startnotmode stopnotmode startmodeset stopmodeset \ +doifmode doifelsemode doifmodeelse doifnotmode startmodeset \ +stopmodeset startallmodes stopallmodes startnotallmodes stopnotallmodes \ +doifallmodes doifelseallmodes doifallmodeselse doifnotallmodes startenvironment \ +stopenvironment environment startcomponent stopcomponent component \ +startproduct stopproduct product startproject stopproject \ +project starttext stoptext startnotext stopnotext \ +startdocument stopdocument documentvariable unexpandeddocumentvariable setupdocument \ +presetdocument doifelsedocumentvariable doifdocumentvariableelse doifdocumentvariable doifnotdocumentvariable \ +startmodule stopmodule usemodule usetexmodule useluamodule \ +setupmodule currentmoduleparameter moduleparameter everystarttext everystoptext \ +startTEXpage stopTEXpage enablemode disablemode preventmode \ +definemode globalenablemode globaldisablemode globalpreventmode pushmode \ +popmode typescriptone typescripttwo typescriptthree mathsizesuffix \ +mathordcode mathopcode mathbincode mathrelcode mathopencode \ +mathclosecode mathpunctcode mathalphacode mathinnercode mathnothingcode \ +mathlimopcode mathnolopcode mathboxcode mathchoicecode mathaccentcode \ +mathradicalcode constantnumber constantnumberargument constantdimen constantdimenargument \ +constantemptyargument continueifinputfile luastringsep !!bs !!es \ +lefttorightmark righttoleftmark lrm rlm bidilre \ +bidirle bidipop bidilro bidirlo breakablethinspace \ +nobreakspace nonbreakablespace narrownobreakspace zerowidthnobreakspace ideographicspace \ +ideographichalffillspace twoperemspace threeperemspace fourperemspace fiveperemspace \ +sixperemspace figurespace punctuationspace hairspace enquad \ +emquad zerowidthspace zerowidthnonjoiner zerowidthjoiner zwnj \ +zwj optionalspace asciispacechar softhyphen Ux \ +eUx Umathaccents parfillleftskip parfillrightskip startlmtxmode \ +stoplmtxmode startmkivmode stopmkivmode wildcardsymbol normalhyphenationcode \ +automatichyphenationcode explicithyphenationcode syllablehyphenationcode uppercasehyphenationcode collapsehyphenationcode \ +compoundhyphenationcode strictstarthyphenationcode strictendhyphenationcode automaticpenaltyhyphenationcode explicitpenaltyhyphenationcode \ +permitgluehyphenationcode permitallhyphenationcode permitmathreplacehyphenationcode forcecheckhyphenationcode lazyligatureshyphenationcode \ +forcehandlerhyphenationcode feedbackcompoundhyphenationcode ignoreboundshyphenationcode partialhyphenationcode completehyphenationcode \ +normalizelinenormalizecode parindentskipnormalizecode swaphangindentnormalizecode swapparsshapenormalizecode breakafterdirnormalizecode \ +removemarginkernsnormalizecode clipwidthnormalizecode flattendiscretionariesnormalizecode discardzerotabskipsnormalizecode noligaturingglyphoptioncode \ +nokerningglyphoptioncode noleftligatureglyphoptioncode noleftkernglyphoptioncode norightligatureglyphoptioncode norightkernglyphoptioncode \ +noexpansionglyphoptioncode noprotrusionglyphoptioncode noitaliccorrectionglyphoptioncode nokerningcode noligaturingcode \ +frozenflagcode tolerantflagcode protectedflagcode primitiveflagcode permanentflagcode \ +noalignedflagcode immutableflagcode mutableflagcode globalflagcode overloadedflagcode \ +immediateflagcode conditionalflagcode valueflagcode instanceflagcode ordmathflattencode \ +binmathflattencode relmathflattencode punctmathflattencode innermathflattencode normalworddiscoptioncode \ +preworddiscoptioncode postworddiscoptioncode continuewhenlmtxmode keywordclass.context.helpers=\ startsetups stopsetups startxmlsetups stopxmlsetups \ diff --git a/context/data/scite/context/scite-context-data-tex.properties b/context/data/scite/context/scite-context-data-tex.properties index 63ccbfa61..ed4941315 100644 --- a/context/data/scite/context/scite-context-data-tex.properties +++ b/context/data/scite/context/scite-context-data-tex.properties @@ -60,8 +60,9 @@ 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 \ -boxshift boxtotal boxxmove boxxoffset boxymove \ +beginlocalcontrol boundary boxanchor boxanchors boxattribute \ +boxdirection boxgeometry boxorientation boxshift boxsource \ +boxtarget boxtotal boxxmove boxxoffset boxymove \ boxyoffset catcodetable clearmarks crampeddisplaystyle crampedscriptscriptstyle \ crampedscriptstyle crampedtextstyle csstring currentloopiterator currentloopnesting \ currentmarks defcsname dimensiondef dimexpression directlua \ @@ -102,19 +103,19 @@ 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 quitloop \ -quitvmode retokenized rightmarginkern rpcode savecatcodetable \ -scantextokens semiexpanded semiprotected setfontid shapingpenaltiesmode \ -shapingpenalty snapshotpar supmarkmode swapcsvalues tabsize \ -textdirection thewithoutunit tokenized toksapp tokspre \ -tolerant tpack tracingadjusts tracingalignments tracingexpressions \ -tracingfonts tracingfullboxes tracinghyphenation tracinginserts tracingmarks \ -tracingmath undent unexpandedloop unletfrozen unletprotected \ -untraced vpack wordboundary wrapuppar xdefcsname \ -xtoks xtoksapp xtokspre +overloaded overloadmode pageboundary pageboundarypenalty pagevsize \ +parametercount parametermark parattribute pardirection permanent \ +postexhyphenchar posthyphenchar prebinoppenalty predisplaygapfactor preexhyphenchar \ +prehyphenchar prerelpenalty protrudechars protrusionboundary pxdimen \ +quitloop quitvmode retokenized rightmarginkern rpcode \ +savecatcodetable scantextokens semiexpanded semiprotected setfontid \ +shapingpenaltiesmode shapingpenalty snapshotpar supmarkmode swapcsvalues \ +tabsize textdirection thewithoutunit tokenized toksapp \ +tokspre tolerant tpack tracingadjusts tracingalignments \ +tracingexpressions tracingfonts tracingfullboxes tracinghyphenation tracinginserts \ +tracingmarks tracingmath tracingnodes undent unexpandedloop \ +unletfrozen unletprotected untraced vpack wordboundary \ +wrapuppar xdefcsname xtoks 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 cb7308542..b19dac6c6 100644 --- a/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json +++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json @@ -69,7 +69,7 @@ "name" : "context.comment.comment.tex" }, "constant" : { - "match" : "\u005C\u005C(zwnj|zwj|zerowidthspace|zerowidthnonjoiner|zerowidthnobreakspace|zerowidthjoiner|zeroskip|zeropoint|zeromuskip|zerocount|xmlcatcodes|xifcode|xetexengine|wildcardsymbol|widowpenaltyfrozenparcode|whatsitnodecode|vtopparcontextcode|vtopgroupcode|vrbcatcodes|voidifcode|voidbox|vmodeparcontextcode|vmodeifcode|vlistnodecode|vcenterparcontextcode|vcentergroupcode|vboxparcontextcode|vboxifcode|vboxgroupcode|valueflagcode|vadjustparcontextcode|vadjustgroupcode|usetexmodule|usemodule|useluamodule|uprotationangle|uppercasehyphenationcode|unsetnodecode|unknownengine|unexpandeddocumentvariable|underscoreasciicode|underrulemathcontrolcode|undefined|typescripttwo|typescriptthree|typescriptone|txtcatcodes|twoperemspace|trueifcode|tpbcatcodes|tpacatcodes|tolerantflagcode|tolerancefrozenparcode|tildeasciicode|threeperemspace|thousandpoint|textitalickernmathcontrolcode|texengineversion|texenginename|texenginefunctionality|texengine|texcatcodes|tabasciicode|syllablehyphenationcode|swapparsshapenormalizecode|swaphangindentnormalizecode|superscriptcatcode|subscriptcatcode|strictstarthyphenationcode|strictendhyphenationcode|stretchfrozenparcode|stoptext|stopproject|stopproduct|stopnotmode|stopnotext|stopnotallmodes|stopmodule|stopmodeset|stopmodeset|stopmode|stopmkivmode|stoplmtxmode|stopenvironment|stopdocument|stopcomponent|stopallmodes|stopTEXpage|statuswrite|starttext|startproject|startproduct|startnotmode|startnotext|startnotallmodes|startmodule|startmodeset|startmodeset|startmode|startmkivmode|startlmtxmode|startenvironment|startdocument|startcomponent|startallmodes|startTEXpage|splitoffgroupcode|splitkeepgroupcode|spanparcontextcode|spacecatcode|spaceasciicode|softhyphen|smallskipamount|slantperpoint|skipfrozenparcode|sixperemspace|singlequoteasciicode|simplegroupcode|shapingpenaltiesfrozenparcode|shapefrozenparcode|setupmodule|setupdocument|semisimplegroupcode|scrollmodecode|scaledpoint|rulenodecode|rlncatcodes|rlm|righttoleftmark|rightrotationangle|rightparentasciicode|rightbracketasciicode|rightbraceasciicode|resetparcontextcode|removemarginkernsnormalizecode|relmathflattencode|radicalrulemathcontrolcode|questionmarkasciicode|pushmode|punctuationspace|punctmathflattencode|prtcatcodes|protrudefrozenparcode|protectedflagcode|project|product|primitiveflagcode|primeasciicode|preworddiscoptioncode|preventmode|presetdocument|prerollrun|preautomigrationcode|preamblegroupcode|postworddiscoptioncode|postautomigrationcode|popmode|points|plustwohundred|plustwo|plustwentythousand|plustwelve|plusthree|plusthousand|plustenthousand|plusten|plussixteen|plussix|plusseven|plusonehundred|plusone|plusnine|plushundred|plusfour|plusfivehundred|plusfive|plusfifty|pluseleven|pluseight|pluscxxviii|pluscxxvii|pluscclvi|pluscclv|permitmathreplacehyphenationcode|permitgluehyphenationcode|permitallhyphenationcode|permanentflagcode|periodasciicode|percentasciicode|penaltynodecode|pdftexengine|partialhyphenationcode|parindentskipnormalizecode|parfillrightskip|parfillleftskip|parfillfrozenparcode|parametercatcode|overrulemathcontrolcode|overloadedflagcode|outputparcontextcode|outputnewlinechar|outputgroupcode|othercatcode|orphanpenaltyfrozenparcode|ordmathflattencode|optionalspace|onepoint|onemuskip|onebasepoint|oddifcode|numifcode|notcatcodes|nostaircasekernmathcontrolcode|noscriptitalickernmathcontrolcode|normalworddiscoptioncode|normalparcontextcode|normalpagebox|normalizelinenormalizecode|normalhyphenationcode|norightligaturingglyphoptioncode|norightligatureglyphoptioncode|norightkerningglyphoptioncode|norightkernglyphoptioncode|noprotrusionglyphoptioncode|noprotrusionglyphoptioncode|noorditalickernmathcontrolcode|nonstopmodecode|nonbreakablespace|noligaturingglyphoptioncode|noligaturingglyphoptioncode|noligaturingcode|noleftligaturingglyphoptioncode|noleftligatureglyphoptioncode|noleftkerningglyphoptioncode|noleftkernglyphoptioncode|nokerningglyphoptioncode|nokerningglyphoptioncode|nokerningcode|noitaliccorrectionglyphoptioncode|noitaliccorrectionglyphoptioncode|noexpansionglyphoptioncode|noexpansionglyphoptioncode|nobreakspace|noalignparcontextcode|noaligngroupcode|noalignedflagcode|nilcatcodes|newlineasciicode|narrownobreakspace|mutableflagcode|muquad|morethanasciicode|moduleparameter|mmodeifcode|mksuffix|minustwo|minusone|medskipamount|medcard|maxdimen|maxcount|maxcardminusone|maxcard|mathsnodecode|mathsizesuffix|mathshiftgroupcode|mathshiftcatcode|mathrelcode|mathradicalcode|mathpunctcode|mathordcode|mathopencode|mathopcode|mathnothingcode|mathnolopcode|mathnodecode|mathlimopcode|mathleftgroupcode|mathinnercode|mathgroupcode|mathexheight|mathemwidth|mathclosecode|mathchoicegroupcode|mathchoicecode|mathboxcode|mathbincode|mathaxisheight|mathalphacode|mathaccentcode|mathabovegroupcode|marknodecode|markautomigrationcode|luatexengine|luastringsep|luacatcodes|lrm|loosenessfrozenparcode|localboxgroupcode|linepenaltyfrozenparcode|linefrozenparcode|ligaturenodecode|lettercatcode|lessthanasciicode|lefttorightmark|leftrotationangle|leftparentasciicode|leftbracketasciicode|leftbraceasciicode|lazyligatureshyphenationcode|lastlinefrozenparcode|kernnodecode|italicshapekernmathcontrolcode|invalidcatcode|interwordstretch|interwordspace|interwordshrink|instanceflagcode|insertparcontextcode|insertnodecode|insertgroupcode|insertautomigrationcode|innermathflattencode|innerifcode|inicatcodes|indentfrozenparcode|immutableflagcode|immediateflagcode|ignorecatcode|ignoreboundshyphenationcode|ideographicspace|ideographichalffillspace|hyphenationfrozenparcode|hyphenasciicode|hsizefrozenparcode|hmodeifcode|hlistnodecode|hboxifcode|hboxgroupcode|hashasciicode|hangfrozenparcode|halfpoint|halfapoint|hairspace|gluenodecode|globalpreventmode|globalflagcode|globalenablemode|globaldisablemode|frozenflagcode|fractionrulemathcontrolcode|fourperemspace|forwardslashasciicode|formfeedasciicode|forcehandlerhyphenationcode|forcecheckhyphenationcode|fontslantperpoint|fontinterwordstretch|fontinterwordspace|fontinterwordshrink|fontextraspace|fontexheight|fontemwidth|fontcharifcode|fmtversion|fmtname|flattendiscretionariesnormalizecode|fiveperemspace|finrowgroupcode|figurespace|feedbackcompoundhyphenationcode|falseifcode|extraspace|explicitpenaltyhyphenationcode|explicithyphenationcode|exheight|exclamationmarkasciicode|everystoptext|everystarttext|escapecatcode|errorstopmodecode|eofifcode|environment|enquad|endoflinetoken|endoflinecatcode|endoflineasciicode|endoffileasciicode|endline|endgroupcatcode|enablemode|emwidth|emquad|emptyvbox|emptytoks|emptyhbox|emptybox|empty|egroup|eUx|downrotationangle|doublequoteasciicode|doublecommentsignal|dollarasciicode|doifnotmode|doifnotdocumentvariable|doifnotallmodes|doifmodeelse|doifmode|doifelsemode|doifelsedocumentvariable|doifelseallmodes|doifdocumentvariableelse|doifdocumentvariable|doifallmodeselse|doifallmodes|documentvariable|displaypenaltyfrozenparcode|discretionarynodecode|discretionarygroupcode|discretionarygroupcode|discardzerotabskipsnormalizecode|disablemode|directionrighttoleft|directionlefttoright|dimifcode|demeritsfrozenparcode|delimiteritalickernmathcontrolcode|delasciicode|definemode|definedifcode|currentmoduleparameter|ctxcatcodes|ctdcatcodes|csnameifcode|continuewhenlmtxmode|continueifinputfile|contextversion|contextmark|contextlmtxmode|contextformat|constantnumberargument|constantnumber|constantemptyargument|constantdimenargument|constantdimen|conditionaltrue|conditionalflagcode|conditionalfalse|compoundhyphenationcode|component|completehyphenationcode|commentcatcode|commentasciicode|commaasciicode|colonasciicode|collapsehyphenationcode|clubpenaltyfrozenparcode|clipwidthnormalizecode|circumflexasciicode|charnodecode|charitalicwidthmathcontrolcode|charitalicnoreboxmathcontrolcode|charifcode|catifcode|caseifcode|brokenpenaltyfrozenparcode|breakafterdirnormalizecode|breakablethinspace|boxednoitalickernmathcontrolcode|bottomlevelgroupcode|binmathflattencode|binaryshiftedtwenty|binaryshiftedthirty|binaryshiftedten|bigskipamount|bidirlo|bidirle|bidipop|bidilro|bidilre|bgroup|begingroupcatcode|batchmodecode|barasciicode|backslashasciicode|automaticpenaltyhyphenationcode|automatichyphenationcode|attributeunsetvalue|atsignasciicode|asciispacechar|ampersandasciicode|alsosimplegroupcode|allfrozenparcode|alignsetgroupcode|alignparcontextcode|alignmentcatcode|aligngroupcode|adjustnodecode|adjustfrozenparcode|adjustedhboxgroupcode|adjustautomigrationcode|activetabtoken|activemathcharcode|activeformfeedtoken|activeendoflinetoken|activecatcode|activecatcode|accentskewhalfmathcontrolcode|accentskewapplymathcontrolcode|accentitalickernmathcontrolcode|Ux|Umathaccents|!!es|!!bs)(?=[^a-zA-Z])", + "match" : "\u005C\u005C(zwnj|zwj|zerowidthspace|zerowidthnonjoiner|zerowidthnobreakspace|zerowidthjoiner|zeroskip|zeropoint|zeromuskip|zerocount|xmlcatcodes|xifcode|xetexengine|wildcardsymbol|widowpenaltyfrozenparcode|whatsitnodecode|vtopparcontextcode|vtopgroupcode|vrbcatcodes|voidifcode|voidbox|vmodeparcontextcode|vmodeifcode|vlistnodecode|vcenterparcontextcode|vcentergroupcode|vboxparcontextcode|vboxifcode|vboxgroupcode|valueflagcode|vadjustparcontextcode|vadjustgroupcode|usetexmodule|usemodule|useluamodule|uprotationangle|uppercasehyphenationcode|unsetnodecode|unknownengine|unexpandeddocumentvariable|underscoreasciicode|underrulemathcontrolcode|undefined|typescripttwo|typescriptthree|typescriptone|txtcatcodes|twoperemspace|trueifcode|tpbcatcodes|tpacatcodes|tolerantflagcode|tolerancefrozenparcode|tildeasciicode|threeperemspace|thousandpoint|textitalickernmathcontrolcode|texengineversion|texenginename|texenginefunctionality|texengine|texcatcodes|tabasciicode|syllablehyphenationcode|swapparsshapenormalizecode|swaphangindentnormalizecode|superscriptcatcode|subscriptcatcode|strictstarthyphenationcode|strictendhyphenationcode|stretchfrozenparcode|stoptext|stopproject|stopproduct|stopnotmode|stopnotext|stopnotallmodes|stopmodule|stopmodeset|stopmodeset|stopmode|stopmkivmode|stoplmtxmode|stopenvironment|stopdocument|stopcomponent|stopallmodes|stopTEXpage|statuswrite|starttext|startproject|startproduct|startnotmode|startnotext|startnotallmodes|startmodule|startmodeset|startmodeset|startmode|startmkivmode|startlmtxmode|startenvironment|startdocument|startcomponent|startallmodes|startTEXpage|splitoffgroupcode|splitkeepgroupcode|spanparcontextcode|spacecatcode|spaceasciicode|softhyphen|smallskipamount|slantperpoint|skipfrozenparcode|sixperemspace|singlequoteasciicode|simplegroupcode|shapingpenaltiesfrozenparcode|shapefrozenparcode|setupmodule|setupdocument|semisimplegroupcode|scrollmodecode|scaledpoint|rulenodecode|rlncatcodes|rlm|righttoleftmark|rightrotationangle|rightparentasciicode|rightoriginlistanchorcode|rightheightlistanchorcode|rightdepthlistanchorcode|rightbracketasciicode|rightbraceasciicode|resetparcontextcode|removemarginkernsnormalizecode|relmathflattencode|radicalrulemathcontrolcode|questionmarkasciicode|pushmode|punctuationspace|punctmathflattencode|prtcatcodes|protrudefrozenparcode|protectedflagcode|project|product|primitiveflagcode|primeasciicode|preworddiscoptioncode|preventmode|presetdocument|prerollrun|preautomigrationcode|preamblegroupcode|postworddiscoptioncode|postautomigrationcode|popmode|points|plustwohundred|plustwo|plustwentythousand|plustwelve|plusthree|plusthousand|plustenthousand|plusten|plussixteen|plussix|plusseven|plusonehundred|plusone|plusnine|plushundred|plusfour|plusfivehundred|plusfive|plusfifty|pluseleven|pluseight|pluscxxviii|pluscxxvii|pluscclvi|pluscclv|permitmathreplacehyphenationcode|permitgluehyphenationcode|permitallhyphenationcode|permanentflagcode|periodasciicode|percentasciicode|penaltynodecode|pdftexengine|partialhyphenationcode|parindentskipnormalizecode|parfillrightskip|parfillleftskip|parfillfrozenparcode|parametercatcode|overrulemathcontrolcode|overloadedflagcode|outputparcontextcode|outputnewlinechar|outputgroupcode|othercatcode|orphanpenaltyfrozenparcode|ordmathflattencode|optionalspace|onepoint|onemuskip|onebasepoint|oddifcode|numifcode|notcatcodes|nostaircasekernmathcontrolcode|noscriptitalickernmathcontrolcode|normalworddiscoptioncode|normalparcontextcode|normalpagebox|normalizelinenormalizecode|normalhyphenationcode|norightligaturingglyphoptioncode|norightligatureglyphoptioncode|norightkerningglyphoptioncode|norightkernglyphoptioncode|noprotrusionglyphoptioncode|noprotrusionglyphoptioncode|noorditalickernmathcontrolcode|nonstopmodecode|nonbreakablespace|noligaturingglyphoptioncode|noligaturingglyphoptioncode|noligaturingcode|noleftligaturingglyphoptioncode|noleftligatureglyphoptioncode|noleftkerningglyphoptioncode|noleftkernglyphoptioncode|nokerningglyphoptioncode|nokerningglyphoptioncode|nokerningcode|noitaliccorrectionglyphoptioncode|noitaliccorrectionglyphoptioncode|noexpansionglyphoptioncode|noexpansionglyphoptioncode|nobreakspace|noalignparcontextcode|noaligngroupcode|noalignedflagcode|nilcatcodes|newlineasciicode|negateylistsigncode|negatexlistsigncode|negatelistsigncode|narrownobreakspace|mutableflagcode|muquad|morethanasciicode|moduleparameter|mmodeifcode|mksuffix|minustwo|minusone|medskipamount|medcard|maxdimen|maxcount|maxcardminusone|maxcard|mathsnodecode|mathsizesuffix|mathshiftgroupcode|mathshiftcatcode|mathrelcode|mathradicalcode|mathpunctcode|mathordcode|mathopencode|mathopcode|mathnothingcode|mathnolopcode|mathnodecode|mathlimopcode|mathleftgroupcode|mathinnercode|mathgroupcode|mathexheight|mathemwidth|mathclosecode|mathchoicegroupcode|mathchoicecode|mathboxcode|mathbincode|mathaxisheight|mathalphacode|mathaccentcode|mathabovegroupcode|marknodecode|markautomigrationcode|luatexengine|luastringsep|luacatcodes|lrm|loosenessfrozenparcode|localboxgroupcode|linepenaltyfrozenparcode|linefrozenparcode|ligaturenodecode|lettercatcode|lessthanasciicode|lefttorightmark|leftrotationangle|leftparentasciicode|leftoriginlistanchorcode|leftheightlistanchorcode|leftdepthlistanchorcode|leftbracketasciicode|leftbraceasciicode|lazyligatureshyphenationcode|lastlinefrozenparcode|kernnodecode|italicshapekernmathcontrolcode|invalidcatcode|interwordstretch|interwordspace|interwordshrink|instanceflagcode|insertparcontextcode|insertnodecode|insertgroupcode|insertautomigrationcode|innermathflattencode|innerifcode|inicatcodes|indentfrozenparcode|immutableflagcode|immediateflagcode|ignorecatcode|ignoreboundshyphenationcode|ideographicspace|ideographichalffillspace|hyphenationfrozenparcode|hyphenasciicode|hsizefrozenparcode|hmodeifcode|hlistnodecode|hboxifcode|hboxgroupcode|hashasciicode|hangfrozenparcode|halfwaytotallistanchorcode|halfwayrightlistanchorcode|halfwayleftlistanchorcode|halfwayheightlistanchorcode|halfwaydepthlistanchorcode|halfpoint|halfapoint|hairspace|gluenodecode|globalpreventmode|globalflagcode|globalenablemode|globaldisablemode|frozenflagcode|fractionrulemathcontrolcode|fourperemspace|forwardslashasciicode|formfeedasciicode|forcehandlerhyphenationcode|forcecheckhyphenationcode|fontslantperpoint|fontinterwordstretch|fontinterwordspace|fontinterwordshrink|fontextraspace|fontexheight|fontemwidth|fontcharifcode|fmtversion|fmtname|flattendiscretionariesnormalizecode|fiveperemspace|finrowgroupcode|figurespace|feedbackcompoundhyphenationcode|falseifcode|extraspace|explicitpenaltyhyphenationcode|explicithyphenationcode|exheight|exclamationmarkasciicode|everystoptext|everystarttext|escapecatcode|errorstopmodecode|eofifcode|environment|enquad|endoflinetoken|endoflinecatcode|endoflineasciicode|endoffileasciicode|endline|endgroupcatcode|enablemode|emwidth|emquad|emptyvbox|emptytoks|emptyhbox|emptybox|empty|egroup|eUx|downrotationangle|doublequoteasciicode|doublecommentsignal|dollarasciicode|doifnotmode|doifnotdocumentvariable|doifnotallmodes|doifmodeelse|doifmode|doifelsemode|doifelsedocumentvariable|doifelseallmodes|doifdocumentvariableelse|doifdocumentvariable|doifallmodeselse|doifallmodes|documentvariable|displaypenaltyfrozenparcode|discretionarynodecode|discretionarygroupcode|discretionarygroupcode|discardzerotabskipsnormalizecode|disablemode|directionrighttoleft|directionlefttoright|dimifcode|demeritsfrozenparcode|delimiteritalickernmathcontrolcode|delasciicode|definemode|definedifcode|currentmoduleparameter|ctxcatcodes|ctdcatcodes|csnameifcode|continuewhenlmtxmode|continueifinputfile|contextversion|contextmark|contextlmtxmode|contextformat|constantnumberargument|constantnumber|constantemptyargument|constantdimenargument|constantdimen|conditionaltrue|conditionalflagcode|conditionalfalse|compoundhyphenationcode|component|completehyphenationcode|commentcatcode|commentasciicode|commaasciicode|colonasciicode|collapsehyphenationcode|clubpenaltyfrozenparcode|clipwidthnormalizecode|circumflexasciicode|charnodecode|charitalicwidthmathcontrolcode|charitalicnoreboxmathcontrolcode|charifcode|centeroriginlistanchorcode|centerheightlistanchorcode|centerdepthlistanchorcode|catifcode|caseifcode|brokenpenaltyfrozenparcode|breakafterdirnormalizecode|breakablethinspace|boxednoitalickernmathcontrolcode|bottomlevelgroupcode|binmathflattencode|binaryshiftedtwenty|binaryshiftedthirty|binaryshiftedten|bigskipamount|bidirlo|bidirle|bidipop|bidilro|bidilre|bgroup|begingroupcatcode|batchmodecode|barasciicode|backslashasciicode|automaticpenaltyhyphenationcode|automatichyphenationcode|attributeunsetvalue|atsignasciicode|asciispacechar|ampersandasciicode|alsosimplegroupcode|allfrozenparcode|alignsetgroupcode|alignparcontextcode|alignmentcatcode|aligngroupcode|adjustnodecode|adjustfrozenparcode|adjustedhboxgroupcode|adjustautomigrationcode|activetabtoken|activemathcharcode|activeformfeedtoken|activeendoflinetoken|activecatcode|activecatcode|accentskewhalfmathcontrolcode|accentskewapplymathcontrolcode|accentitalickernmathcontrolcode|Ux|Umathaccents|!!es|!!bs)(?=[^a-zA-Z])", "name" : "context.constant.commands.constant.tex" }, "csname" : { @@ -216,7 +216,7 @@ ] }, "primitive" : { - "match" : "\u005C\u005C(year|xtokspre|xtoksapp|xtoks|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|unexpandedloop|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|tracingadjusts|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|quitloop|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|normalxtoks|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|normalunexpandedloop|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|normaltracingadjusts|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|normalquitloop|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|normalmathlimitsmode|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|normallocalmiddleboxbox|normallocalmiddlebox|normallocalleftboxbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolledloop|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|normalfontspecyscale|normalfontspecxscale|normalfontspecscale|normalfontspecifiedsize|normalfontspecifiedname|normalfontspecid|normalfontspecdef|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpandedloop|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normaletoks|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|normalcurrentloopnesting|normalcurrentloopiterator|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|normalboxshift|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|normalUmathyscale|normalUmathxscale|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|mathlimitsmode|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|localmiddleboxbox|localmiddlebox|localleftboxbox|localleftbox|localinterlinepenalty|localcontrolledloop|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|fontspecyscale|fontspecxscale|fontspecscale|fontspecifiedsize|fontspecifiedname|fontspecid|fontspecdef|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandedloop|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|etoks|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|currentloopnesting|currentloopiterator|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|boxshift|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|Umathyscale|Umathxscale|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|xtoks|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|unexpandedloop|underline|undent|uchyph|uccode|tracingstats|tracingrestores|tracingparagraphs|tracingpages|tracingoutput|tracingonline|tracingnodes|tracingnesting|tracingmath|tracingmarks|tracingmacros|tracinglostchars|tracinglevels|tracinginserts|tracingifs|tracinghyphenation|tracinggroups|tracingfullboxes|tracingfonts|tracingexpressions|tracingcommands|tracingassigns|tracingalignments|tracingadjusts|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|quitloop|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|pageboundarypenalty|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|normalxtoks|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|normalunexpandedloop|normalunexpanded|normalunderline|normalundent|normaluchyph|normaluccode|normaltracingstats|normaltracingrestores|normaltracingparagraphs|normaltracingpages|normaltracingoutput|normaltracingonline|normaltracingnodes|normaltracingnesting|normaltracingmath|normaltracingmarks|normaltracingmacros|normaltracinglostchars|normaltracinglevels|normaltracinginserts|normaltracingifs|normaltracinghyphenation|normaltracinggroups|normaltracingfullboxes|normaltracingfonts|normaltracingexpressions|normaltracingcommands|normaltracingassigns|normaltracingalignments|normaltracingadjusts|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|normalquitloop|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|normalpageboundarypenalty|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|normalmathlimitsmode|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|normallocalmiddleboxbox|normallocalmiddlebox|normallocalleftboxbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolledloop|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|normalfontspecyscale|normalfontspecxscale|normalfontspecscale|normalfontspecifiedsize|normalfontspecifiedname|normalfontspecid|normalfontspecdef|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpandedloop|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normaletoks|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|normalcurrentloopnesting|normalcurrentloopiterator|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|normalboxtarget|normalboxsource|normalboxshift|normalboxorientation|normalboxmaxdepth|normalboxgeometry|normalboxdirection|normalboxattribute|normalboxanchors|normalboxanchor|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|normalUmathyscale|normalUmathxscale|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|mathlimitsmode|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|localmiddleboxbox|localmiddlebox|localleftboxbox|localleftbox|localinterlinepenalty|localcontrolledloop|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|fontspecyscale|fontspecxscale|fontspecscale|fontspecifiedsize|fontspecifiedname|fontspecid|fontspecdef|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandedloop|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|etoks|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|currentloopnesting|currentloopiterator|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|boxtarget|boxsource|boxshift|boxorientation|boxmaxdepth|boxgeometry|boxdirection|boxattribute|boxanchors|boxanchor|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|Umathyscale|Umathxscale|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/sources/general/manuals/luatex/luatex-nodes.tex b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex index a45c15946..399713c41 100644 --- a/doc/context/sources/general/manuals/luatex/luatex-nodes.tex +++ b/doc/context/sources/general/manuals/luatex/luatex-nodes.tex @@ -959,7 +959,7 @@ what you generate. \NC \type{width} \NC number \NC the width (not used in calculations) \NC \NR \NC \type{height} \NC number \NC the height (not used in calculations) \NC \NR \NC \type{depth} \NC number \NC the depth (not used in calculations) \NC \NR -\NC \type{objnum} \NC number \NC the referenced \PDF\ object number \NC \NR +\NC \type{objnum} \NC number \NC the referenced \PDF\ (structure) object number \NC \NR \NC \type{data} \NC string \NC the annotation data \NC \NR \LL \stoptabulate @@ -1016,10 +1016,16 @@ objects. \TB \NC \type{action_type} \NC number \NC the kind of action involved \NC \NR \NC \type{action_id} \NC number or string \NC token list reference or string \NC \NR -\NC \type{named_id} \NC number \NC the index of the destination \NC \NR +%NC \type{named_id} \NC number \NC the index of the destination \NC \NR +% a strange key but needed for latex; a probably downward incompable patch instead of a fix +\NC \type{named_id} \NC number \NC are \type {dest_id} and \type {struct_id} string values? \NC \NR \NC \type{file} \NC string \NC the target filename \NC \NR \NC \type{new_window} \NC number \NC the window state of the target \NC \NR \NC \type{data} \NC string \NC the name of the destination \NC \NR +% needed for latex and therefore equivalent to pdftex +\NC \type{struct_id} \NC nil \NC the action does not reference a structure destination \NC \NR +\NC \NC number \NC id of the referenced structure destination \NC \NR +\NC \NC string \NC name of the referenced structure destination \NC \NR \LL \stoptabulate diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-anchoring.tex b/doc/context/sources/general/manuals/ontarget/ontarget-anchoring.tex new file mode 100644 index 000000000..090c6ba0c --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-anchoring.tex @@ -0,0 +1,280 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-eventually + +\environment ontarget-style + +\startchapter[title={Anchoring}] + +\startsection[title=Introduction] + +It is valid to question what functionality should be in the engine and what can +best be implemented using callbacks and postprocessing of lists (and boxes) +relying for instance on attributes as signals. In \LUATEX\ we are rather strict +in this and assume that the second method is used. In \LUAMETATEX\ we still +promote this but at the same time some (lightweight) functionality has been added +to the engine that helps implementing some features more efficiently. Reasons are +that it can be handy to carry (fundamental) properties around that are bound to +nodes and that we can set them using primitives, especially for glyphs and boxes. +That way they become part of the formal functionality that one can argue should +be present in a modern engine. Examples for glyph nodes are scales, offsets and +hyphenation, detailed ligature and kerning control. For box nodes we have for +instance offsets and orientation. Most of these are always taken into account by +core mechanisms like breaking paragraphs into lines, where dimensions matter in +which case it really makes sense for them to be part of the engine design. + +Some properties are just passed on to for instance a font handler or the backend +but still they belong to the core functionality. An example of the later is a +(new) simple mechanism for anchoring boxes. This is not really a fundamental +feature, because one can just move content around using a combination of kerning +and boxing, either or not with offsets. But because we already have features like +offsets to boxes it was not that much work to add anchoring as a more fundamental +property. The frontend is agnostic to this feature because dimensions are kind of +virtual here: the backend however carries the real burden. Because backends are +written in \LUA\ it might have a performance hit simply because at least we need +to check if this feature is used. Normally that can compensated when this feature +{\em is} used because less work and shuffling around happens in the frontend. And +when this feature is no longer experimental (and stays) we can gain some back by +using it in existing scenarios. It sounds worse than it is because for +orientations we already have to do some usage checking and we can share that +check; in most situations nothing needs to be done anyway. + +\stopsection + +\startsection[title=The low level approach] + +When we anchor, a box can be a source and|/|or a target. Both are represented by +a number and can be assigned via a keyword. These numbers can be picked up by the +backend. Here is an example: + +\startbuffer +\def\TestMe#1{% + \setbox \scratchbox \ruledvbox + source 123 + orientation #1 + \bgroup + \hsize7cm + \samplefile{zapf} + \hbox to 0pt + source 124 target 123 + xoffset 20pt yoffset -30pt + {\darkred \bfc TEST1}% + \hbox to 0pt + source 125 target 124 + xoffset 10pt yoffset -20pt + {\darkblue \bfc TEST2}% + \egroup + \box \scratchbox +} +\stopbuffer + +\typebuffer \getbuffer + +This example also uses a few offsets. The \quote {origin} is at the left edge of +the baseline. Now, we could have passed the source and target as attribute and +intercepting an attribute in the backend can work pretty well. However, the code +that deals with the final result of the typesetting and thereby flushes it to for +instance a \PDF\ file is, at least that is the setup we use in \CONTEXT, +attribute agnostic. Mixing in attributes at that stage, except for user nodes and +whatsits that are effectively plugins, is counter intuitive and all is already +pretty complex so a clear separation of functionality makes a lot of sense. Of +course the \CONTEXT\ approach is not the only one when it comes to generic engine +functionality. Not that many fundamental (conceptual) extensions showed up over +the last few decades so no one will bother if in \LUAMETATEX\ we have new stuff +that is only used by \CONTEXT. The example code shown here gives: + +\startbuffer[four] +\startcombination[4*1] + {\scale[sx=.4,sy=.4]{\TestMe{0}}} {\type {orientation 0}} + {\scale[sx=.4,sy=.4]{\TestMe{1}}} {\type {orientation 1}} + {\scale[sx=.4,sy=.4]{\TestMe{2}}} {\type {orientation 2}} + {\scale[sx=.4,sy=.4]{\TestMe{3}}} {\type {orientation 3}} +\stopcombination +\stopbuffer + +\startlinecorrection +\dontcomplain\getbuffer[four] +\stoplinecorrection + +In order to avoid additional shifting around, which then might involve copying +and injecting boxes as well as repackaging, two additional keys are available +and these deal with the way boxes get anchored. + +\startbuffer +\vbox + source 123 + \bgroup + \offinterlineskip + \blackrule[width=4cm,height=2cm,depth=0cm,color=darkred]\par + \blackrule[width=4cm,height=0cm,depth=1cm,color=darkblue]\par + \setbox\scratchboxtwo\hbox + anchors "0004 "0001 + % anchor "00040001 + target 123 + orientation 1 + {\blackrule[width=2cm,height=1cm,depth=0cm,color=darkgreen]% + \hskip-2cm + \blackrule[width=2cm,height=0cm,depth=1cm,color=darkyellow]}% + % + \smash{\box\scratchboxtwo}% + \egroup +\stopbuffer + +\typebuffer + +The anchor is just an number but with the plural keyword we can scan it as two +because that is a bit easier on usage. The two numbers four byte numbers control +the source to target anchoring and there is plenty room for future extensions +because not all bits are used. + +\starttabulate[|lT|lT|] +\NC 0x00\uchexnumber\leftoriginlistanchorcode \NC left origin \NC \NR +\NC 0x00\uchexnumber\leftheightlistanchorcode \NC left height \NC \NR +\NC 0x00\uchexnumber\leftdepthlistanchorcode \NC left depth \NC \NR +\NC 0x00\uchexnumber\rightoriginlistanchorcode \NC right origin \NC \NR +\NC 0x00\uchexnumber\rightheightlistanchorcode \NC right height \NC \NR +\NC 0x00\uchexnumber\rightdepthlistanchorcode \NC right depth \NC \NR +\NC 0x00\uchexnumber\centeroriginlistanchorcode \NC center origin \NC \NR +\NC 0x00\uchexnumber\centerheightlistanchorcode \NC center height \NC \NR +\NC 0x00\uchexnumber\centerdepthlistanchorcode \NC center depth \NC \NR +\NC 0x00\uchexnumber\halfwaytotallistanchorcode \NC halfway total \NC \NR +\NC 0x00\uchexnumber\halfwayheightlistanchorcode \NC halfway height \NC \NR +\NC 0x00\uchexnumber\halfwaydepthlistanchorcode \NC halfway depth \NC \NR +\NC 0x00\uchexnumber\halfwayleftlistanchorcode \NC halfway left \NC \NR +\NC 0x00\uchexnumber\halfwayrightlistanchorcode \NC halfway right \NC \NR +\stoptabulate + +The target and source are handled in a way that sort of naturally binds them +which involves a little juggling with dimensions in the backend. There is some +additional control over this but usage is not advertized here because it might +change. + +% \negatexlistsigncode \negateylistsigncode \negatelistsigncode + +One can set these anchoring related properties with keywords but there are also +primitive box manipulators: \type {\boxanchor}, \type {\boxanchors}, \type +{\boxsource} and \type {\boxtarget} that take a box number and value. + +\startlinecorrection +\getbuffer +\stoplinecorrection + +There are some helpers at the \LUA\ end but I haven't completely made up my mind +about them. Normally that evolves with usage. + +\stopsection + +\startsection[title={A first higher level interface}] + +Exploring this here in more detail makes no sense because it is still +experimental and also rather \CONTEXT\ specific. As a teaser an interface that +hooks into layers is shown: + +\startbuffer +\defineanchorboxoverlay[framed] + +\def\DemoAnchor#1#2#3#4% + {\setanchorbox + [#1]% + [target={#3},source={#4}]% + \hbox{\backgroundline[#2]{\white\smallinfofont\setstrut\strut target=#3 source=#4}}} + +\def\DemoAnchorX#1#2% + {\DemoAnchor{#1}{darkred} {#2}{left,top}% + \DemoAnchor{#1}{darkblue} {#2}{left,bottom}% + \DemoAnchor{#1}{darkgreen} {#2}{right,bottom}% + \DemoAnchor{#1}{darkyellow}{#2}{right,top}}% + +\startsetups framed:demo + \DemoAnchorX{framed:background}{left,top}% + \DemoAnchorX{framed:background}{right,top}% + \DemoAnchorX{framed:background}{left,bottom}% + \DemoAnchorX{framed:background}{right,bottom}% + \DemoAnchorX{framed:foreground}{middle}% +\stopsetups + +\midaligned\bgroup + \framed + [align=normal, + width=.7\textwidth, + backgroundcolor=gray, + background={color,framed:background,foreground,framed:foreground}] + \bgroup + \samplefile{zapf}\par + \directsetup{framed:demo}% + \samplefile{zapf}% + \egroup +\egroup +\stopbuffer + +\typebuffer + +Those familiar with \CONTEXT\ will recognize the approach. This one basically is +a more low level variant of layers and a high level variant of the primitives. +Performance wise (in terms of memory usage and runtime) it sits in a sweet spot. + +\startlinecorrection[2*big] + \getbuffer +\stoplinecorrection + +I played a bit with a mechanism that can store the embedded (to be anchored) +content in a more independent way and it actually works okay. However, I'm not +entirely sure if that solution is the best so for now it's commented. As usual it +is also up to users to come up with demands. + +\stopsection + +\stopchapter + +\stopcomponent + +% \defineanchorbox[page:background] +% \defineanchorbox[page:foreground] +% \defineoverlay[page:background][\overlayanchorbox{page:background}] +% \defineoverlay[page:foreground][\overlayanchorbox{page:foreground}] +% +% \defineanchorboxoverlay[page] +% +% \setupbackgrounds[page][background={page:background,foreground,page:foreground}] +% +% test +% +% \setanchorbox[page:background]\ruledhbox +% xoffset 200pt +% yoffset 100pt +% % anchors \halfwayleftlistanchorcode \halfwayrightlistanchorcode +% {\blue DOES IT WORK} +% +% \setanchorbox[page:foreground]\ruledhbox +% orientation 2 +% % anchors \halfwayleftlistanchorcode \halfwayrightlistanchorcode +% {\red DOES IT WORK} +% + +% \registeranchorbox[demo][before]\ruledhbox +% \registeranchorbox[demo][after]\ruledhbox +% +% \defineanchorbox[demo] +% +% \startbuffer +% \vbox +% source 123 +% \bgroup +% \offinterlineskip +% \blackrule[width=4cm,height=2cm,depth=0cm,color=darkred]\par +% \blackrule[width=4cm,height=0cm,depth=1cm,color=darkblue]\par +% \registeranchorbox[demo][before]\ruledhbox +% % \registeranchorbox[demo][after]\ruledhbox +% anchors "0004 "0001 +% % anchor "00040001 +% target 123 +% orientation 1 +% {\blackrule[width=2cm,height=1cm,depth=0cm,color=darkgreen]% +% \hskip-2cm +% \blackrule[width=2cm,height=0cm,depth=1cm,color=darkyellow]}% +% % +% \smash{\box\scratchboxtwo}% +% \egroup +% \stopbuffer +% +% \typebuffer diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-dk.tex b/doc/context/sources/general/manuals/ontarget/ontarget-dk.tex new file mode 100644 index 000000000..5d57da1b7 --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-dk.tex @@ -0,0 +1,90 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-dk + +\environment ontarget-style + +\startchapter[title={A new unit: \type {dk}}] + +At the \CONTEXT\ 2021 meeting I mixed my \TEX\ talks with showing some of the +(upcoming) \LUAMETATEX\ source code. One evening we had a extension party where a +new unit was implemented, the \type {dk}. This event was triggered by a remark +Hraban [Ramm] made on the participants list in advance of the meeting, where he pointed +to a Wikipedia article from which we quote: + +\startquotation +In issue 33, Mad published a partial table of the \quotation {Potrzebie System of +Weights and Measures}, developed by 19|-|year|-|old Donald~E. Knuth, later a famed +computer scientist. According to Knuth, the basis of this new revolutionary +system is the potrzebie, which equals the thickness of Mad issue 26, or +2.2633484517438173216473 mm [\dots]. +\stopquotation + +So, as the result of that session, the source code now has this comment: + +\startquotation +We support the Knuthian Potrzebie, cf.\ \typ +{en.wikipedia.org/wiki/Potrzebie}, as the \type {dk} unit. It was added on +2021-09-22 exactly when we crossed the season during an evening session at the +15\high {th} \CONTEXT\ meeting in Bassenge (Boirs) Belgium. It took a few +iterations to find the best numerator and denominator, but Taco Hoekwater, Harald +Koenig and Mikael Sundqvist figured it out in this interactive session. The error +messages have been adapted accordingly and the scanner in the \LUA\ \type {tex} +library also handles it. One \type {dk} is 6.43985pt. There is no need to make +\METAPOST\ aware of this unit because there it is just a numeric multiplier in a +macro package. +\stopquotation + +When compared to the already present units the \type {dk} nicely fills a gap: + +\def\TheUnit#1{ + \NC \type {#1} + \NC \withoutpt\dimexpr1#1\relax + \NC \number\dimexpr1#1\relax + \NC \vrule width 1#1 height 1.5ex depth .5ex\relax + \NC \NR +} + +\starttabulate[|c|cg{.}|r|l|] + \BC unit \BC points \BC scaled \BC visual \NC \NR + \TheUnit{sp} + \TheUnit{pt} + \TheUnit{bp} + \TheUnit{dd} + \TheUnit{mm} + \TheUnit{dk} + \TheUnit{pc} + \TheUnit{cc} + \TheUnit{cm} + \TheUnit{in} + + %\TheUnit{em} + %\TheUnit{ex} + %\TheUnit{mu} + %\TheUnit{px} +\stoptabulate + +Deep down, the unit scanner uses a numerator and denominator in order +to map the given value onto the internally used scaled points, so the +relevant snippet of \CCODE\ is: + +\starttyping +*num = 49838; // 152940; +*denom = 7739; // 23749; +return normal_unit_scanned; +\stoptyping + +The impact on performance of scanning an additional unit can be neglected because +the scanning code is a bit different from the code in \LUATEX\ and (probably the) +other engines anyway. + +Under consideration are a few extra units in the \type {relative_unit_scanned} +category that we see in \CSS: \type {vw} (relative to the \type {\hsize}), \type +{vh} (relative to the \type {\vsize}), maybe a percentage (but of what) and \type +{ch} (width of the current zero digit character). As usual with \TEX ies, +once it's there it will be (ab)used. + +\stopchapter + +\stopcomponent + diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-eventually.tex b/doc/context/sources/general/manuals/ontarget/ontarget-eventually.tex new file mode 100644 index 000000000..6787b30f2 --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-eventually.tex @@ -0,0 +1,375 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-eventually + +\environment ontarget-style + +\startchapter[title={Eventually 1.0}] + +\startsection[title=Reflection] + +This is just a short reflection on how we came to version 1.0 of \LUAMETATEX. +Much has already been said in articles and history documents. There is nothing +in here that is new but I just occasionally like to wrap up the current state. +At the time of writing, which happens to be the \CONTEXT\ 2021 meeting, we're +somewhere between 0.9 and 1.0 and as usual it reflects a current state of mind. + +\stopsection + +\startsection[title=Introduction] + +The development on \LUAMETATEX\ took a bit more time than I had in planned when I +started with it. I presume that it also relates to the way the \TEX\ program is +looked at: a finished program that converges to a bugless state. But, with +version 1.0 near by it makes sense to reflect on the process. Before I go into +details I want to remark that when I wrote \CONTEXT\ I looked at this program +from the macro end. I had no real reason to look into the code, and figuring out +what happens in a black box is a challenge (and kind of game) in itself. At the +time I started using \TEX\ I had done my share of complex and relatively large +scale programming in \PASCAL\ and \MODULA\ so it's not that I was afraid of +languages. It was before the Internet took off and not being in academia and +connected one had to figure things out anyway. I did have Don's 5 volume \TEX\ +series but stuck to the \TEX\ book. Being on \MSDOS\ I couldn't compile the +program anyway, definitely not without the source at hand. I did read the first +chapters of the \METAFONT\ book, but apart from being intrigued by it, it was not +before I ran into \METAPOST\ that knowing that language took off. Of course I had +browsed \TEX\ the program but not in a systematic way. + +I was involved with \PDFTEX\ development but stayed at my end of the line: needs, +applications, testing and suggestions. With \LUATEX\ that line got crossed, +triggered by the \LUA\ interfaces, but while I focussed on the \TEX\ end, Taco +did the \CCODE, and we had pleasant and intense daily discussion on how to move +forward. I could not get away any longer with the abstraction but had to deal +with nodes and such, which was okay as we were hit the boundaries of convenience +programming solutions in \CONTEXT. + +When we started our \LUATEX\ journey the \TEX\ follow|-|up most widely used, +\PDFTEX, did have some \ETEX\ extensions but in retrospect only a few of those +were of relevance to us, like the concept of \type {\protected} macros \footnote +{In \CONTEXT\ we always had a protection mechanism and from the \LUATEX\ source I +learned that the macro bases solution was basically the same as the one used in +the engine.} and the larger set of registers. And the \ETEX\ project, in spite of +occasional discussions, never became a continuous effort. The \NTS\ project that +was related to \ETEX\ and had as objective an extensible successor produced a +\JAVA\ implementation but that one was never useful (as a starter, its +performance was such that it could not be used) and I didn't really look forward +to spending time on \JAVA\ anyway. Taco and I played with an extended \ETEX\ but +lack of time made that one end up in the archive. + +There were some programmatic additions to \PDFTEX\ but it's main attributes were +protrusion, expansion and a \PDF\ backend (\THANH's thesis subject). Features +like position tracking were handy but basically just a built|-|in variant of a +concept we already had come up with at the \DVI\ level (using a postprocessing +script that later became \type {dvipos}). There was \OMEGA\ with a directional +model but this engine was always more of an academic project, not a production +system. \footnote {\ALEPH\ was more reliable but never took off, if only because +\PDFTEX\ had a backend.} It was \XETEX\ that moved the \TEX\ world into the +\UNICODE\ domain and opened the engine up to new font technologies. Although +\UTF8\ was already doable in earlier engines (which is why \CONTEXT\ used it +already for some internals), native support was way more convenient. + +It was clear that if we wanted to move on we had to make more fundamental steps, +but in such a way that it still fit in with what people expect from \TEX. While +it started an a playground by embedding the \LUA\ interpreter, it quickly became +clear that we could open up the internals in fundamental ways, thereby also +getting around the discussion about to what extent \TEX\ could and should be +extended: that discussion could be and was postponed by the opening up. Because +we already foresaw some of possibilities it was decided to freeze \CONTEXT\ for +the older engines. It was around the first \CONTEXT\ meeting that the \MKII\ and +\MKIV\ tags showed up, around the same time that \LUATEX\ became useable. More +than a decade later, when \LUATEX\ basically had become frozen, at another +meeting it was decided to move on with \LUAMETATEX: the \LUATEX\ project was +pretty much a \CONTEXT\ projects and that follow up would be even more driven by +\CONTEXT\ users and usage. But how does it all feel 15 years later? I'll try to +summarize that below. It will also explain why I got more audacious in extending +the \LUATEX\ engine into what is now \LUAMETATEX. This also related to the fact +that at some point I realized that progress just demands taking decisions, and it +happens that we can make these in the perspective of \CONTEXT\ without side +effects for other \TEX\ usage. It is also fun to experiment. + +\stopsection + +\startsection[title=Extending necessary parts] + +The \PDFTEX\ program, having a backend built in already supports the usage of +wide \TRUETYPE\ but it was \XETEX\ that first provided using them directly in the +frontend. But that happened within the concept of traditional \TEX, especially +when it comes to math. There are some extra primitives to deal with scripts and +languages but (and this is personally) I decided that these didn't really fit in +the way \CONTEXT\ looks at things so \MKII\ doesn't support anything beyond the +fonts. The \XETEX\ program first was available on Apple computers and font +support was closely related to its technology as well as technologies that relate +to where the program originates. Later other operating systems became supported +too. + +We decided in \LUATEX\ to delegate \quote {everything fonts} to \LUA, for a good +reason: we didn't want to be platform dependent. And using libraries has the +danger of periodical enforced fundamental changes because in these times software +politics and fashion have short cycles. The fact that \XETEX\ later changed the +font engine proved that this was a good decision. At some point \LATEX\ decided +to use a special version of \LUATEX\ that uses a font library as alternative, +which is fine, but that also introduces a dependency (and frequent updating of +the binary). The \LUATEX\ engine has a slim variant of the \FONTFORGE\ library +built in for reading various font formats and its backend can embed subsets of +\OPENTYPE, \TYPEONE\ and traditional bitmap fonts. At some point \CONTEXT\ +switched to its own \LUA\ based font file interpreter and experimented with a +\LUA\ based backend that later became exclusive for \LUAMETATEX. It became clear +that we could do with less code in the engine and thereby less dependencies. + +In this perspective it is also good to notice that the \LUATEX\ engine has no +real concept of \UNICODE: it just expects \UTF8\ and that's it. All internals +provide enough granularity to support \UNICODE. The rest has to come from the +macro package, as we know that each one does it its own way. There are no +dependencies on \UNICODE\ libraries. You only have to look at what ends up on +your system when you install a program that just juggles bytes to notice that by +including one library a whole lot gets drawn in, most of which is not relevant to +the program and we don't want that. It might start small but who knows where +one ends up. If we want users to be able to compile the program, we don't want +to end up in dependency hell. + +The \LUATEX\ project was, apart from curiosity and potential usage in \CONTEXT, +initially also driven by the Oriental \TEX\ project that aimed at high quality +bidirectional typesetting. There the focus was on fonts as well as processing +paragraphs. That triggered all kinds of opening up of internals and once +\CONTEXT\ started swapping (and adding) mechanisms using \LUA\ more came to +fruit. In the end it took a decade to reach version 1.0 and we could have stopped +there knowing that we're quite prepared for the future. + +Although the whole \TEX\ concept didn't change, there were some fundamental +changes. From the documentation by Don Knuth it becomes clear that interpreting +is closely interwoven with typesetting: the so called main interpretation loop +calls out to font processing, ligature building, hyphenation, kerning, breaking +lines, processing pages, etc. In \LUATEX\ these steps became more independent +simply because the processing of fonts (via \LUA) came down to feeding a linked +list of nodes to a callback function. That list should be hyphenated if needed (a +now separated step) and if needed the traditional font processing could be +applied (ligature building and kerning). But, although one can say that we +already got away from the way \TEX\ works internally, most documentation to the +original program still applied, simply because the fundamental approach was the +same. We didn't feel too guilty about it and I don't think anyone objected. By +the way, the same is true for the math subsystem: we had to adapt it to +\OPENTYPE\ parameters and formula construction and although that was inspired by +\TEX\ it definitely was different, even to the extend that the math fonts that +evolved in the community are now a strange hybrid of old and new. + +\stopsection + +\startsection[title=Getting around the frozen machinery] + +So why did the \LUAMETATEX\ project started at all? There has been plenty written +on how \LUATEX\ evolved and the same is true for \LUAMETATEX\ so I'm not going to +repeat that here. It is enough to know that the demand for a stable and frozen +\LUATEX\ by other users than \CONTEXT\ simply doesn't go well with further +experiments and we still had plenty ideas. Because at some point Taco had no time +I was already responsible for quite some additions to the \LUATEX\ program so it +was no big deal to switch to a an even more extensive mix of working with +\quotation {\TEX\ the macro language} and \quotation {\TEX\ the program}. + +The first priorities were with some basic cleanup: remove unused font code, get +rid of some ever changing libraries and remove the backend related code. I could +do that because I already had a \LUA\ driven backend in \MKIV\ (which was removed +later on) and font handling was already all done in \LUA. The idea was to go lean +and mean, and indeed, even with all kind of extensions, the binary is much +smaller than its predecessor, which is nice because it is also a \LUA\ engine. +Simplifying the build so that users can easily compile themselves was also of +high priority because I considered the rather large and complex setup as a time +bomb. And I also had my doubts if we could prevent the \LUATEX\ engine to evolve +over time in a way that made it less useable for \CONTEXT. + +But, interestingly all this extending and pruning didn't feel like I was +violating the concept of a long term stable engine. In fact, original \TEX\ has +no backend either, just a simple binary serialization of output (\DVI). And by +removing some font related frontend code we actually came closer to the original. +I suppose that these decisions slowly made me aware of the fact that there was no +reason to not consider more drastic extensions. After all, wasn't the \ETEX\ +project also about extending. \footnote {Although non of the ideas that Taco and +I discussed on our numerous trips to meetings all over the world ever made it +into that engine.} + +When we look at \LUAMETATEX\ 1.0 we still see the expected machinery there but +many subsystems have been extended. Once I made the decision that it's now or +never, each subsystem got evaluated against my long term wish list and usage in +\CONTEXT. Now, let's be clear: I basically can do all I want in \LUATEX\ but that +doesn't mean it's always a pretty solution. And to make the \CONTEXT\ code base +better to understand for users, even if it is already rather consistent and set +up to be readable, is one of my objectives. I spend a lot of time on readability: +I cannot stand a bad looking source and over time the look and feel is also +determined by the way the \CONTEXT\ interfaces and related syntax highlighting +evolved, especially the \TEX, \METAPOST, \LUA\ mix. This is why \LUAMETATEX\ has +some extensions to the macro language. + +So, while some might argue that \quotation {It can already be done.} I decided to +ignore that argument when the actual solutions came too close to \quotation {See +how well I can do this using dirty tricks!}. If we can do better, without harming +the system, let's do it: \LUA\ did it, \CCODE\ did it and even Don Knuth switched +from \PASCAL\ to \CCODE . If we want we can put all the extensions under the +\quotation {\TEX\ is meant to be extended} umbrella, as long as we call it +different, which is what we do. But I admit that one has to (emotionally) cross a +boundary of feeling comfortable with fundamental additions to a program like +\TEX. But I've been around long enough to not feel guilty about it. + +So in the end that means that for instance marks were extended, inserts got more +options, glyphs and boxes have way more properties, (the result and handling of) +paragraphs can be better controlled, page breaking got hooks (and might be +extended), local boxes got redone, adjustments were extended, the math machinery +has been completely opened up, hyphenation became more powerful, the font +mechanism got more control and new scaling features, alignments got some +extensions, we can do more with boxes, etc. But often I still first had to +convince myself that it's okay to do so. After all, none of this had happened +before and to my knowledge also has not been considered in ways that resulted in +an implementation (but I might be wrong here). It helps that I can test out +experiments in production versions of \LMTX\ and that users are quite willing to +test. + +\stopsection + +\startsection[title=Extending the macro language] + +In the previous section some mechanisms were mentioned, but before \TEX\ even +ends up there macros and primitives come into play. The \LUATEX\ engine already +has some handy extras, like ways to prepend and append tokens and a limited so +called \quote {local control} mechanism (think of nested main loops). There are +some new look head and expansions related primitives and csname related tricks. +There are a few more conditionals too. Details can be found in manual and +articles. + +In \LUAMETATEX\ some more got added and some of these mechanism could be improved +and the reason again is that I aim at readable code. Most programming languages +for instance have conditionals with some kind of continuation (like \type +{elseif}) and so I added that to \TEX\ too \type {\orelse}. Actually, there are +even more new conditionals than in \LUATEX. Yes, we don't really need these, +especially because in \LUAMETATEX\ we can now extend the primitive language via +\LUA, but I wanted to improve readability deep down in \CONTEXT. It also reduces +the clutter when logging, although logging itself has been quite a bit +overhauled. There is less need for intermediate (often not that natural) +intermediate layers when we can do it properly in primitive \TEX\ lingua. + +More fundamental was extending the way \TEX\ deals with macro arguments. Although +the extensions to parsing them are using specifiers that make them upward +compatible I admit that even I have to consult a list of possibilities every now +and then but in the end they make things better (performance wise with less +code). As a side effect the macro machinery could be optimized a bit (expansion +as well as the save stacking). + +There are a few more ways to store integers and dimensions (these fit in nicely), +there are new into grouping, some primitives have more keywords and +therefore scanners have been extended, the \ETEX\ expression handlers have +alternative variants. + +Although this is a sensitive aspect of \TEX\ when it comes to compatibility, at +some point I decided that it made no sense to not expose more details about +nodes, input, and nesting states. The grouping and input related stacks had been +optimized in the meantime so reporting in that area was already not compatible. +Improving logging is an ongoing effort and I don't really loose sleep over it not +being compatible, as long as it gets better. There is now also some tracing for +marks, inserts, math and alignments. + +\stopsection + +\startsection[title=Refactoring the code base] + +This is again an emotionally laden decision: what to touch and keep. For sure we +keep the original comments but that doesn't make it literate. We started out with +a \CCODE\ base that came from converted \PASCAL\ \WEB. + +The input machinery is a bit different due to the fact that \LUA\ can (and often +has to) kick in. In \LUAMETATEX\ it's even more different because even more goes +via \LUA. We cannot even run the engine without a basic set of callbacks +assigned: if you don't like that, use \LUATEX. Does this violate the \TEX\ +concept? Not really, because system dependencies are explicitly mentioned as such +in the source code. We have to adapt to the way an operating system sees files +anyway (eight bit, \UTF8, \UTF16). + +We still have many global variables (a practical Knuth thing I guess) but now +they are grouped into structures so that we can more clearly see where they +belong. This involved quite a but of shuffling and editing but I got there. In +\LUAMETATEX\ all constants (coded in macros) became enumerations, and all hard +coded values too which was quite a bit of work too. Probably no one will notice +or realize that, but starting from an existing code base is more work than +starting from scratch, which is what I always did so far. When possible we use +case statements. Most macros became (inline) functions. Complex functions got +better variable names. All functions are in name spaces. This was (and is) a +stepwise process that takes lots of time, especially because \CONTEXT\ users +expect a reasonable stable system and changes like that are sensitive for errors. + +Talking of errors, the error and reporting system has been overhauled, so for +instance we have now a dedicated string formatter. This all happened in several +steps: normalization, consistency, abstraction, formatters, etc. Keep in mind +that we not only have the original messages but also new ones. And we have \TEX, +\LUA\ and \METAPOST\ communicating with the user. Where in \LUATEX\ we have to +conform more to the traditional engine, because that is what other macro packages +rely on, In \CONTEXT\ we have more freedom, so we can make it better and more +detailed. Of course it could all be controlled by configurations but at some +point I decided to kick out variables doing that because it made no sense to +complicate the code base. + +Memory management has been overhauled (more dynamic) as has dumping to the (more +efficient) format file. With what is mentioned in the previous paragraphs we can +safely say that in the meantime back porting to \LUATEX\ (which I had in mind) +makes no sense any longer. There is occasionally some pressure to let \LUATEX\ do +the same as other engines (new common features) and that doesn't always fit into +the model. There is no need for \LUAMETATEX\ to follow up on that because often +we already have plenty of possibilities. There is of course still work todo, for +instance I still have to make some variable names in functions more verbose but +that is not fundamental. I also have to go over the documentation in the code. I +might make some interfaces more consistent anyway, so that also would demand +adaptations. And of course the documentation in general always lags behind. + +So far I only mentioned dealing with \TEX, but keep in mind that in \LUAMETATEX\ +we also have an upgraded \METAPOST: only a \LUA\ backend (we can produce \PDF\ +from that other output), no font code, a couple of extensions, more callbacks, +\IO\ via \LUA. Scanners make extending the language possible and injectors make +for efficient piping back to \METAPOST. Such extensions are also possible in +\TEX\ and the \LUAMETATEX\ scanning interfaces have been improved and extended +too. We have extra callbacks (but some were dropped), more helpers (most +noticeable in the node namespace), libraries that improve dealing with binary +files, a reworked token library (which in turn lead to a reorganization of +command codes in the \TEX\ engine), a few more extensions if \LUA\ file handling +and string manipulations. We got decimal math, complex math, new compression +libraries, better (\LUA) memory management, a few optional library interfaces, +etc. Fortunately that all didn't bloat the binary. + +So, because in the meantime \LUAMETATEX\ is quite different from \LUATEX, we can +consider the last one to be a prototype for the real deal. + +\stopsection + +\startsection[title=Simplifying the build] + +This was one of the first things I did. It was a curious process of removing more +and more of the original build (all kind of dependencies) which is not entirely +trivial because of the way the \LUATEX\ build is set up. I admit that I did try +to stay within the regular source build concept but after a while I realized that +this made no sense so we (Mojca was involved in that) made the move to \CMAKE. +Shortly after that I started using Visual Studio as editing environment (which +saves time and is rather convenient) and native compilation under \MSWINDOWS\ +became possible without any special measures (in fact, setting up the build for +\ARM\ processors was more work). + +A side effect is that right from the start we could provide binaries for various +platforms via the compile farm on the \CONTEXT\ garden maintained by Mojca, who +also does daily \TEX\ live builds there. On my machine I use the Windows Linux +Subsystem for cross compilation but we can also do native builds. And, with my +laptop being a robust 2013 old timer I force myself to make sure that +\LUAMETATEX\ keeps performing well. + +\stopsection + +\startsection[title=Because it just makes sense] + +So, in the end \LUAMETATEX\ is likely the engine most different from the Knuthian +original but from the above one can conclude that this was a graduate process +where I got more audacious over time. In the end the only thing that matters (and +I believe that Don Knuth agrees with this) that you like writing the code, feel +confident that the code is all right, explore the possibilities, try to improve +the quality and understanding and that successive rewrites can reduce obscurity. +And in my opinion we didn't loose the \TEX\ look and feel and still can operate +well within the established boundaries of the \TEX\ ecosystem. The fact that most +\CONTEXT\ users in the meantime use \LUAMETATEX\ and the related \LMTX\ variant +is an indication that they are okay with it, and that is what matters most. + +\stopsection + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/ontarget/ontarget.tex b/doc/context/sources/general/manuals/ontarget/ontarget.tex index c66318030..201ed504e 100644 --- a/doc/context/sources/general/manuals/ontarget/ontarget.tex +++ b/doc/context/sources/general/manuals/ontarget/ontarget.tex @@ -14,6 +14,9 @@ \startbodymatter \component ontarget-introduction + \component ontarget-eventually + \component ontarget-dk + \component ontarget-anchoring \stopbodymatter \stopdocument diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 12645e462..2224345ea 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -9251,7 +9251,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24844, stripped down to: 16451 +-- original size: 24913, stripped down to: 16497 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -9309,11 +9309,12 @@ local nestedbrackets=P { lbracket*(nobracket+V(1))^0*rbracket } local spaces=space^0 local argument=Cs((lbrace/"")*((nobrace+nestedbraces)^0)*(rbrace/"")) local content=(1-endofstring)^0 -lpegpatterns.nestedbraces=nestedbraces -lpegpatterns.nestedparents=nestedparents -lpegpatterns.nested=nestedbraces -lpegpatterns.argument=argument -lpegpatterns.content=content +lpegpatterns.nestedbraces=nestedbraces +lpegpatterns.nestedparents=nestedparents +lpegpatterns.nestedbrackets=nestedbrackets +lpegpatterns.nested=nestedbraces +lpegpatterns.argument=argument +lpegpatterns.content=content local value=lbrace*C((nobrace+nestedbraces)^0)*rbrace+C((nestedbraces+(1-comma))^0) local key=C((1-equal-comma)^1) local pattern_a=(space+comma)^0*(key*equal*value+key*C("")) @@ -25948,8 +25949,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029803 --- stripped bytes : 405638 +-- original bytes : 1029872 +-- stripped bytes : 405661 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 12645e462..2224345ea 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -9251,7 +9251,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24844, stripped down to: 16451 +-- original size: 24913, stripped down to: 16497 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -9309,11 +9309,12 @@ local nestedbrackets=P { lbracket*(nobracket+V(1))^0*rbracket } local spaces=space^0 local argument=Cs((lbrace/"")*((nobrace+nestedbraces)^0)*(rbrace/"")) local content=(1-endofstring)^0 -lpegpatterns.nestedbraces=nestedbraces -lpegpatterns.nestedparents=nestedparents -lpegpatterns.nested=nestedbraces -lpegpatterns.argument=argument -lpegpatterns.content=content +lpegpatterns.nestedbraces=nestedbraces +lpegpatterns.nestedparents=nestedparents +lpegpatterns.nestedbrackets=nestedbrackets +lpegpatterns.nested=nestedbraces +lpegpatterns.argument=argument +lpegpatterns.content=content local value=lbrace*C((nobrace+nestedbraces)^0)*rbrace+C((nestedbraces+(1-comma))^0) local key=C((1-equal-comma)^1) local pattern_a=(space+comma)^0*(key*equal*value+key*C("")) @@ -25948,8 +25949,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029803 --- stripped bytes : 405638 +-- original bytes : 1029872 +-- stripped bytes : 405661 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 12645e462..2224345ea 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -9251,7 +9251,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24844, stripped down to: 16451 +-- original size: 24913, stripped down to: 16497 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -9309,11 +9309,12 @@ local nestedbrackets=P { lbracket*(nobracket+V(1))^0*rbracket } local spaces=space^0 local argument=Cs((lbrace/"")*((nobrace+nestedbraces)^0)*(rbrace/"")) local content=(1-endofstring)^0 -lpegpatterns.nestedbraces=nestedbraces -lpegpatterns.nestedparents=nestedparents -lpegpatterns.nested=nestedbraces -lpegpatterns.argument=argument -lpegpatterns.content=content +lpegpatterns.nestedbraces=nestedbraces +lpegpatterns.nestedparents=nestedparents +lpegpatterns.nestedbrackets=nestedbrackets +lpegpatterns.nested=nestedbraces +lpegpatterns.argument=argument +lpegpatterns.content=content local value=lbrace*C((nobrace+nestedbraces)^0)*rbrace+C((nestedbraces+(1-comma))^0) local key=C((1-equal-comma)^1) local pattern_a=(space+comma)^0*(key*equal*value+key*C("")) @@ -25948,8 +25949,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029803 --- stripped bytes : 405638 +-- original bytes : 1029872 +-- stripped bytes : 405661 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 12645e462..2224345ea 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -9251,7 +9251,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24844, stripped down to: 16451 +-- original size: 24913, stripped down to: 16497 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -9309,11 +9309,12 @@ local nestedbrackets=P { lbracket*(nobracket+V(1))^0*rbracket } local spaces=space^0 local argument=Cs((lbrace/"")*((nobrace+nestedbraces)^0)*(rbrace/"")) local content=(1-endofstring)^0 -lpegpatterns.nestedbraces=nestedbraces -lpegpatterns.nestedparents=nestedparents -lpegpatterns.nested=nestedbraces -lpegpatterns.argument=argument -lpegpatterns.content=content +lpegpatterns.nestedbraces=nestedbraces +lpegpatterns.nestedparents=nestedparents +lpegpatterns.nestedbrackets=nestedbrackets +lpegpatterns.nested=nestedbraces +lpegpatterns.argument=argument +lpegpatterns.content=content local value=lbrace*C((nobrace+nestedbraces)^0)*rbrace+C((nestedbraces+(1-comma))^0) local key=C((1-equal-comma)^1) local pattern_a=(space+comma)^0*(key*equal*value+key*C("")) @@ -25948,8 +25949,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1029803 --- stripped bytes : 405638 +-- original bytes : 1029872 +-- stripped bytes : 405661 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index f0147a089..907bf60cf 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.12.25 00:55} +\newcontextversion{2021.12.30 19:00} %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 6632c422d..6e89044ab 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.12.25 00:55} +\edef\contextversion{2021.12.30 19:00} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii index 65c52c639..cee725d43 100644 --- a/tex/context/base/mkii/mult-ro.mkii +++ b/tex/context/base/mkii/mult-ro.mkii @@ -300,6 +300,7 @@ \setinterfacevariable{july}{iulie} \setinterfacevariable{june}{iunie} \setinterfacevariable{keep}{mentine} +\setinterfacevariable{keeptogether}{keeptogether} \setinterfacevariable{kerncharacters}{kerncharacters} \setinterfacevariable{knockout}{knockout} \setinterfacevariable{label}{eticheta} @@ -1229,7 +1230,7 @@ \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} -\setinterfaceconstant{source}{sursa} +\setinterfaceconstant{source}{source} \setinterfaceconstant{space}{spatiu} \setinterfaceconstant{spaceafter}{spatiudupa} \setinterfaceconstant{spaceafterside}{spaceafterside} @@ -1280,6 +1281,7 @@ \setinterfaceconstant{synonymcommand}{synonymcommand} \setinterfaceconstant{synonymstyle}{stilsinonim} \setinterfaceconstant{tab}{tab} +\setinterfaceconstant{target}{target} \setinterfaceconstant{text}{text} \setinterfaceconstant{textalign}{textalign} \setinterfaceconstant{textalternative}{textalternative} diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 383351dd3..bdb0d03a6 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.12.25 00:55} +\newcontextversion{2021.12.30 19:00} %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 3d9e02e03..61f239979 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.12.25 00:55} +\edef\contextversion{2021.12.30 19:00} %D Kind of special: diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index 7389fa9d9..9992de8f6 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -12796,6 +12796,12 @@ return { ["pe"]="گام‌وای", ["ro"]="ystep", }, + ["source"]={ + ["en"]="source", + }, + ["target"]={ + ["en"]="target", + }, }, ["elements"]={ ["answerlines"]={ @@ -16460,6 +16466,10 @@ return { ["pe"]="نگهدار", ["ro"]="mentine", }, + ["keeptogether"]={ + ["en"]="keeptogether", + ["fr"]="conserverensemble", + }, ["kerncharacters"]={ ["en"]="kerncharacters", ["fr"]="approchercaracteres", diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua index 9c4c35037..979fef710 100644 --- a/tex/context/base/mkiv/mult-low.lua +++ b/tex/context/base/mkiv/mult-low.lua @@ -116,6 +116,14 @@ return { "vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode", "noalignparcontextcode", "spanparcontextcode", "resetparcontextcode", -- + "leftoriginlistanchorcode", "leftheightlistanchorcode", "leftdepthlistanchorcode", + "rightoriginlistanchorcode", "rightheightlistanchorcode", "rightdepthlistanchorcode", + "centeroriginlistanchorcode", "centerheightlistanchorcode", "centerdepthlistanchorcode", + "halfwaytotallistanchorcode", "halfwayheightlistanchorcode", "halfwaydepthlistanchorcode", + "halfwayleftlistanchorcode", "halfwayrightlistanchorcode", + -- + "negatexlistsigncode", "negateylistsigncode", "negatelistsigncode", + -- "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "mathexheight", "mathemwidth", diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 0249b906b..2803448d9 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -285,10 +285,15 @@ return { "begincsname", "beginlocalcontrol", "boundary", + "boxanchor", + "boxanchors", "boxattribute", "boxdirection", + "boxgeometry", "boxorientation", "boxshift", + "boxsource", + "boxtarget", "boxtotal", "boxxmove", "boxxoffset", @@ -496,6 +501,7 @@ return { "overloaded", "overloadmode", "pageboundary", + "pageboundarypenalty", "pagevsize", "parametercount", "parametermark", @@ -544,6 +550,7 @@ return { "tracinginserts", "tracingmarks", "tracingmath", + "tracingnodes", "undent", "unexpandedloop", "unletfrozen", diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv index e6c1be985..88e4fb116 100644 --- a/tex/context/base/mkiv/page-sid.mkiv +++ b/tex/context/base/mkiv/page-sid.mkiv @@ -292,7 +292,7 @@ \box\floatbox % somehow we need this \scratchbox magic, but at least it's the same as the % tracer now - \setbox\scratchbox\emptybox + \setbox\scratchbox\emptyhbox \wd\scratchbox\hsize \ht\scratchbox\d_page_sides_bottomtotal \box\scratchbox diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf Binary files differindex 94dd23ff5..5d46013f9 100644 --- a/tex/context/base/mkiv/status-files.pdf +++ b/tex/context/base/mkiv/status-files.pdf diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf Binary files differindex a9934cf42..03cb36fc9 100644 --- a/tex/context/base/mkiv/status-lua.pdf +++ b/tex/context/base/mkiv/status-lua.pdf diff --git a/tex/context/base/mkiv/util-prs.lua b/tex/context/base/mkiv/util-prs.lua index 438fa78bd..204611dbe 100644 --- a/tex/context/base/mkiv/util-prs.lua +++ b/tex/context/base/mkiv/util-prs.lua @@ -71,11 +71,12 @@ local spaces = space^0 local argument = Cs((lbrace/"") * ((nobrace + nestedbraces)^0) * (rbrace/"")) local content = (1-endofstring)^0 -lpegpatterns.nestedbraces = nestedbraces -- no capture -lpegpatterns.nestedparents = nestedparents -- no capture -lpegpatterns.nested = nestedbraces -- no capture -lpegpatterns.argument = argument -- argument after e.g. = -lpegpatterns.content = content -- rest after e.g = +lpegpatterns.nestedbraces = nestedbraces -- no capture +lpegpatterns.nestedparents = nestedparents -- no capture +lpegpatterns.nestedbrackets = nestedbrackets -- no capture +lpegpatterns.nested = nestedbraces -- no capture +lpegpatterns.argument = argument -- argument after e.g. = +lpegpatterns.content = content -- rest after e.g = local value = lbrace * C((nobrace + nestedbraces)^0) * rbrace + C((nestedbraces + (1-comma))^0) diff --git a/tex/context/base/mkxl/anch-loc.lmt b/tex/context/base/mkxl/anch-loc.lmt index 054d4dd07..14efab260 100644 --- a/tex/context/base/mkxl/anch-loc.lmt +++ b/tex/context/base/mkxl/anch-loc.lmt @@ -327,6 +327,7 @@ implement { context(new_usernode(whatever,{ name = name, kind = "sync", x = x, y = y })) end } + implement { name = "setlocalalignanchor", arguments = { "argument", "integerargument", "integerargument", "argument" }, diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index c7b619601..35e8bf03d 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.12.25 00:55} +\newcontextversion{2021.12.30 19:00} %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 91db54550..385a2c13a 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.12.25 00:55} +\immutable\edef\contextversion{2021.12.30 19:00} %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 0ab9dacc2..620c69484 100644 --- a/tex/context/base/mkxl/driv-shp.lmt +++ b/tex/context/base/mkxl/driv-shp.lmt @@ -7,7 +7,7 @@ if not modules then modules = { } end modules ['driv-shp'] = { license = "see context related readme files" } -local type, next = type, next +local type, next, rawget, rawset = type, next, rawget, rawset local setmetatableindex = table.setmetatableindex local formatters = string.formatters @@ -27,6 +27,8 @@ local getdirection = nuts.getdirection local getlist = nuts.getlist local getoffsets = nuts.getoffsets local getorientation = nuts.getorientation +local getanchors = nuts.getanchors +local getgeometry = nuts.getgeometry local getxyscales = nuts.getxyscales local getwhd = nuts.getwhd local getkern = nuts.getkern @@ -94,6 +96,9 @@ local drivers = drivers local report = logs.reporter("drivers") --------------------------------------------------------------------------------------- +-- For the moment rules need at least some height but maybe some day we let user rules +-- fall through or have some way to force a rule via some property. +--------------------------------------------------------------------------------------- local lastfont = nil local fontcharacters = nil @@ -609,23 +614,75 @@ end -- -- local dirstack = setmetatableindex(dirstackentry) -- --- local function reset_dir_stack() +-- local function reset_directions() -- dirstack = setmetatableindex(dirstackentry) -- end local dirstack = { } +local anchors = { } +----- befores = setmetatableindex("table") +----- afters = setmetatableindex("table") -local function reset_dir_stack() +local function reset_directions() dirstack = { } end +local function reset_anchors() + anchors = { } +end + +-- interfaces.implement { +-- name = "registeranchorbox", +-- arguments = { "integer", "integer", "box" }, +-- actions = function(anchor,where,box) +-- box = tonut(box) +-- if where < 0 then +-- table.insert(befores[anchor],box) +-- else +-- table.insert(afters[anchor],box) +-- end +-- end +-- } + local hlist_out, vlist_out do - local function applyanchor(orientation,x,y,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) - local ot = (orientation>> 0) & 0x0F - local ay = (orientation>> 4) & 0x0F - local ax = (orientation>> 8) & 0x0F - local of = (orientation>>12) & 0x0F + local finalize = nodes.handlers.finalizelist + -- local takebox = nuts.takebox + local flushnode = nuts.flushnode + + -- local function flushstored(current,source,before) + -- local s = nil + -- if before then + -- s = rawget(befores,source) + -- else + -- s = rawget(afters,source) + -- end + -- if s then + -- for i=1,#s do + -- local si = s[i] + -- if si then + -- finalize(si) -- tricky: we might need to group + -- if getid(si) == vlist_code then + -- vlist_out(current,si) + -- else + -- hlist_out(current,si) + -- end + -- flushnode(si) + -- s[i] = false + -- end + -- end + -- if before then + -- rawset(befores,source,nil) + -- else + -- rawset(afters,source,nil) + -- end + -- end + -- end + + local function applyorientation(orientation,x,y,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) + local ot = (orientation >> 0) & 0x0F + local ay = (orientation >> 4) & 0x0F + local ax = (orientation >> 8) & 0x0F if ot == 4 then ot, ay = 0, 1 elseif ot == 5 then @@ -663,7 +720,71 @@ local hlist_out, vlist_out do return ot, x + xoffset, y - yoffset end - drivers.applyanchor = applyanchor + local function applyanchor(anchor,shift,anchor_h,anchor_v,width,height,depth) + local h = 0 + local v = 0 + if shift then + anchor = (anchor & 0xFFFF0000) >> 16 + else + anchor = (anchor & 0x0000FFFF) + end + local a = anchor & 0x00FF + local s = anchor & 0x0F00 + if a == 0x02 then + v = height + elseif a == 0x03 then + v = - depth + elseif a == 0x04 then + h = width + elseif a == 0x05 then + h = width + v = height + elseif a == 0x06 then + h = width + v = - depth + elseif a == 0x07 then + h = width/2 + elseif a == 0x08 then + h = width/2 + v = height + elseif a == 0x09 then + h = width/2 + v = - depth + elseif a == 0x0A then -- halfway_total_anchor + h = width/2 + v = height/2 - depth/2 + elseif a == 0x0B then -- halfway_height_anchor + h = width/2 + v = height/2 + elseif a == 0x0C then -- halfway_depth_anchor + h = width/2 + v = - depth/2 + elseif a == 0x0D then -- halfway_left_anchor + v = height/2 - depth/2 + elseif a == 0x0E then -- halfway_right_anchor + h = width + v = height/2 - depth/2 + end + if not shift then + h = -h + v = -v + end + if s == 0x100 then + h = -h + elseif s == 0x200 then + v = -v + elseif s == 0x300 then + h = -h + v = -v + else + end + anchor_h = anchor_h + h + anchor_v = anchor_v + v + return anchor_h, anchor_v + end + + drivers.applyanchor = applyanchor + drivers.applyorientation = applyorientation -- to be checked: begin- or enddir kan nil zijn, weird @@ -745,12 +866,10 @@ local hlist_out, vlist_out do local save_h = cur_h if pos_r == righttoleft_code then cur_h = ref_h - shipbox_h + cur_h --- cur_h = width * (cur_h // width) cur_h = width * (cur_h / width) cur_h = ref_h - shipbox_h - cur_h else cur_h = ref_h - shipbox_h - cur_h --- cur_h = width * (cur_h // width) cur_h = width * (cur_h / width) cur_h = ref_h - shipbox_h - cur_h end @@ -759,7 +878,6 @@ local hlist_out, vlist_out do end elseif subtype == leaders_code then local save_h = cur_h --- cur_h = width * (cur_h // width) cur_h = width * (cur_h / width) if cur_h < save_h then cur_h = cur_h + width @@ -768,12 +886,9 @@ local hlist_out, vlist_out do lq = gluewidth / width lr = gluewidth % width if subtype == cleaders_code then --- cur_h = cur_h + lr // 2 cur_h = cur_h + lr / 2 else --- lx = lr // (lq + 1) lx = lr / (lq + 1) --- cur_h = cur_h + (lr - (lq - 1) * lx) // 2 cur_h = cur_h + (lr - (lq - 1) * lx) / 2 end end @@ -863,57 +978,42 @@ local hlist_out, vlist_out do local list = getlist(current) if list then local boxdir = getdirection(current) or lefttoright_code - local shift, orientation = getshift(current) - if not orientation then - local basepoint_h = boxdir ~= pos_r and width or 0 - -- local basepoint_v = shift - if pos_r == righttoleft_code then - pos_h = ref_h - (cur_h + basepoint_h) - else - pos_h = ref_h + (cur_h + basepoint_h) - end - pos_v = ref_v - shift - -- synced - if id == vlist_code then - vlist_out(current,list) - else - hlist_out(current,list) - end - elseif orientation == 0x1000 then - local orientation, xoffset, yoffset = getorientation(current) - local basepoint_h = boxdir ~= pos_r and width or 0 - -- local basepoint_v = shift - if pos_r == righttoleft_code then - pos_h = ref_h - (cur_h + basepoint_h + xoffset) - else - pos_h = ref_h + (cur_h + basepoint_h + xoffset) - end - pos_v = ref_v - (shift - yoffset) - -- pushorientation(orientation,pos_h,pos_v,pos_r) - -- synced - if id == vlist_code then - vlist_out(current,list) - else - hlist_out(current,list) - end - -- poporientation(orientation,pos_h,pos_v,pos_r) - else + local shift = getshift(current) + local geometry, hasoffset, hasorientation, hasanchor = getgeometry(current,true) + local anchor, source, target, targetdata + local anc_h, anc_v + local usedorientation = false + if hasanchor then + anchor, source, target = getanchors(current) + end + if hasorientation then local orientation, xoffset, yoffset, woffset, hoffset, doffset = getorientation(current) - local orientation, basepoint_h, basepoint_v = applyanchor(orientation,0,shift,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) + local orientation, basepoint_h, basepoint_v = applyorientation(orientation,0,shift,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) if orientation == 1 then basepoint_h = basepoint_h + doffset if boxdir == pos_r then basepoint_v = basepoint_v - height end + usedorientation = orientation elseif orientation == 2 then if boxdir == pos_r then basepoint_h = basepoint_h + width end + usedorientation = orientation elseif orientation == 3 then basepoint_h = basepoint_h + hoffset if boxdir ~= pos_r then basepoint_v = basepoint_v - height end + usedorientation = orientation + end + if target then + targetdata = anchors[target] + if targetdata then + anc_h = basepoint_h + anc_v = - basepoint_v + goto posdone + end end if pos_r == righttoleft_code then pos_h = ref_h - (cur_h + basepoint_h) @@ -922,14 +1022,88 @@ local hlist_out, vlist_out do end -- pos_v = ref_v - (cur_v + basepoint_v) pos_v = ref_v - basepoint_v - -- synced - pushorientation(orientation,pos_h,pos_v,pos_r) - if id == vlist_code then - vlist_out(current,list) + elseif hasoffset then + local orientation, xoffset, yoffset = getorientation(current) + local basepoint_h = boxdir ~= pos_r and width or 0 + local basepoint_v = shift + if target then + targetdata = anchors[target] + if targetdata then + anc_h = xoffset + basepoint_h + anc_v = yoffset - basepoint_v + goto posdone + end + end + if pos_r == righttoleft_code then + pos_h = ref_h - (cur_h + basepoint_h + xoffset) + else + pos_h = ref_h + (cur_h + basepoint_h + xoffset) + end + pos_v = ref_v - (basepoint_v - yoffset) + elseif hasanchor then + local basepoint_h = boxdir ~= pos_r and width or 0 + local basepoint_v = shift + if target then + targetdata = anchors[target] + if targetdata then + anc_h = basepoint_h + anc_v = - basepoint_v + goto posdone + end + end + if pos_r == righttoleft_code then + pos_h = ref_h - (cur_h + basepoint_h) else - hlist_out(current,list) + pos_h = ref_h + (cur_h + basepoint_h) end - poporientation(orientation,pos_h,pos_v,pos_r) + pos_v = ref_v - basepoint_v + else + local basepoint_h = boxdir ~= pos_r and width or 0 + local basepoint_v = shift + if pos_r == righttoleft_code then + pos_h = ref_h - (cur_h + basepoint_h) + else + pos_h = ref_h + (cur_h + basepoint_h) + end + pos_v = ref_v - basepoint_v + end + goto process + ::posdone:: + if pos_r == righttoleft_code then + pos_h = targetdata[1] - anc_h + else + pos_h = targetdata[1] + anc_h + end + pos_v = targetdata[2] + anc_v + if anchor and anchor > 0 then + pos_h, pos_v = applyanchor(anchor,true,pos_h,pos_v,targetdata[3],targetdata[4],targetdata[5]) + pos_h, pos_v = applyanchor(anchor,false,pos_h,pos_v,width,height,depth) + end + ::process:: + if source then + local anchor_h = pos_h + local anchor_v = pos_v + if usedorientation then + if usedorientation == 1 then + anchor_v = anchor_v - (width - height) + elseif usedorientation == 2 then + anchor_v = anchor_v - (depth - height) + elseif usedorientation == 3 then -- weird + anchor_v = anchor_v + (height - width) + end + end + anchors[source] = { anchor_h, anchor_v, width, height, depth } + end + if usedorientation then + pushorientation(usedorientation,pos_h,pos_v,pos_r) + end + if id == vlist_code then + vlist_out(current,list) + else + hlist_out(current,list) + end + if usedorientation then + poporientation(usedorientation,pos_h,pos_v,pos_r) end end cur_h = cur_h + width @@ -1183,70 +1357,146 @@ local hlist_out, vlist_out do local list = getlist(current) if list then local boxdir = getdirection(current) or lefttoright_code - local shift, orientation = getshift(current) - if not orientation then - -- local basepoint_h = shift - -- local basepoint_v = height - if boxdir ~= pos_r then - shift = shift + width + local shift = getshift(current) + local geometry, hasoffset, hasorientation, hasanchor = getgeometry(current,true) + local anchor, source, target, targetdata + local usedorientation = false + if hasanchor then + anchor, source, target = getanchors(current) + end + if hasorientation then + local orientation, xoffset, yoffset, woffset, hoffset, doffset = getorientation(current) + local orientation, basepoint_h, basepoint_v = applyorientation(orientation,shift,height,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) + if orientation == 1 then + basepoint_h = basepoint_h + width - height -- hm + basepoint_v = basepoint_v - height + usedorientation = orientation + elseif orientation == 2 then + basepoint_h = basepoint_h + width + basepoint_v = basepoint_v + depth - height + usedorientation = orientation + elseif orientation == 3 then -- weird + basepoint_h = basepoint_h + height + usedorientation = orientation end - if pos_r == righttoleft_code then - pos_h = ref_h - shift - else - pos_h = ref_h + shift + if target then + targetdata = anchors[target] + if targetdata then + if pos_r == righttoleft_code then + pos_h = targetdata[1] - basepoint_h + else + pos_h = targetdata[1] + basepoint_h + end + pos_v = targetdata[2] - basepoint_v + goto posdone + end end - pos_v = ref_v - (cur_v + height) - -- synced - if id == vlist_code then - vlist_out(current,list) + if pos_r == righttoleft_code then + pos_h = ref_h - basepoint_h else - hlist_out(current,list) + pos_h = ref_h + basepoint_h end - elseif orientation == 0x1000 then + pos_v = ref_v - (cur_v + basepoint_v) + elseif hasoffset then local orientation, xoffset, yoffset = getorientation(current) -- local basepoint_h = shift -- local basepoint_v = height if boxdir ~= pos_r then shift = shift + width end + if target then + targetdata = anchors[target] + if targetdata then + if pos_r == righttoleft_code then + pos_h = targetdata[1] - (shift + xoffset) + else + pos_h = targetdata[1] + (shift + xoffset) + end + pos_v = targetdata[2] - (height - yoffset) + goto posdone + end + end if pos_r == righttoleft_code then pos_h = ref_h - (shift + xoffset) else pos_h = ref_h + (shift + xoffset) end pos_v = ref_v - (cur_v + height - yoffset) - -- synced - if id == vlist_code then - vlist_out(current,list) + elseif hasanchor then + -- local basepoint_h = shift + -- local basepoint_v = height + if boxdir ~= pos_r then + shift = shift + width + end + if target then + local a = anchors[target] + if a then + if pos_r == righttoleft_code then + pos_h = targetdata[1] - shift + else + pos_h = targetdata[1] + shift + end + pos_v = targetdata[2] - height + goto posdone + end + end + if pos_r == righttoleft_code then + pos_h = ref_h - shift else - hlist_out(current,list) + pos_h = ref_h + shift end + pos_v = ref_v - (cur_v + height) else - local orientation, xoffset, yoffset, woffset, hoffset, doffset = getorientation(current) - local orientation, basepoint_h, basepoint_v = applyanchor(orientation,shift,height,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) - if orientation == 1 then - basepoint_h = basepoint_h + width - height - basepoint_v = basepoint_v - height - elseif orientation == 2 then - basepoint_h = basepoint_h + width - basepoint_v = basepoint_v + depth - height - elseif orientation == 3 then -- weird - basepoint_h = basepoint_h + height + -- local basepoint_h = shift + -- local basepoint_v = height + if boxdir ~= pos_r then + shift = shift + width end if pos_r == righttoleft_code then - pos_h = ref_h - basepoint_h + pos_h = ref_h - shift else - pos_h = ref_h + basepoint_h + pos_h = ref_h + shift end - pos_v = ref_v - (cur_v + basepoint_v) - -- synced - pushorientation(orientation,pos_h,pos_v,pos_r) - if id == vlist_code then - vlist_out(current,list) - else - hlist_out(current,list) + pos_v = ref_v - (cur_v + height) + end + goto process + ::posdone:: + if anchor and anchor > 0 then + pos_h, pos_v = applyanchor(anchor,true,pos_h,pos_v,targetdata[3],targetdata[4],targetdata[5]) + pos_h, pos_v = applyanchor(anchor,false,pos_h,pos_v,width,height,depth) + end + ::process:: + if source then + -- move this into apply_anchor + local anchor_h = pos_h + local anchor_v = pos_v + if usedorientation then + if usedorientation == 1 then + anchor_v = anchor_v - (width - height) + elseif usedorientation == 2 then + anchor_v = anchor_v - (depth - height) + elseif usedorientation == 3 then -- weird + anchor_v = anchor_v + (height - width) + end end - poporientation(orientation,pos_h,pos_v,pos_r) + anchors[source] = { anchor_h, anchor_v, width, height, depth } + end + if usedorientation then + pushorientation(usedorientation,pos_h,pos_v,pos_r) + end + -- if source then + -- flushstored(current,source,true) + -- end + if id == vlist_code then + vlist_out(current,list) + else + hlist_out(current,list) + end + -- if source then + -- flushstored(current,source,false) + -- end + if usedorientation then + poporientation(usedorientation,pos_h,pos_v,pos_r) end end cur_v = cur_v + height + depth @@ -1332,7 +1582,8 @@ function drivers.converters.lmtx(driver,box,smode,objnum,specification) flushliteral = flushers.literal flushwhatsit = flushers.whatsit - reset_dir_stack() + reset_directions() + reset_anchors() reset_state() shippingmode = smode diff --git a/tex/context/base/mkxl/driv-usr.lmt b/tex/context/base/mkxl/driv-usr.lmt index 2dc3cda73..5ff601f2a 100644 --- a/tex/context/base/mkxl/driv-usr.lmt +++ b/tex/context/base/mkxl/driv-usr.lmt @@ -14,6 +14,8 @@ local getdirection = nuts.getdirection local getlist = nuts.getlist local getoffsets = nuts.getoffsets local getorientation = nuts.getorientation +local getanchors = nuts.getanchors +local getgeometry = nuts.getgeometry local getwhd = nuts.getwhd local getkern = nuts.getkern local getwidth = nuts.getwidth @@ -67,6 +69,7 @@ local pos_h = 0 local pos_v = 0 local pos_r = lefttoright_code +local applyorientation = drivers.applyorientation local applyanchor = drivers.applyanchor local initialize @@ -119,42 +122,88 @@ hlist_out = function(this_box,current) local list = getlist(current) if list then local boxdir = getdirection(current) or lefttoright_code - local shift, orientation = getshift(current) - if not orientation then - local basepoint_h = boxdir ~= pos_r and width or 0 - if pos_r == righttoleft_code then - pos_h = ref_h - (cur_h + basepoint_h) - else - pos_h = ref_h + (cur_h + basepoint_h) - end - pos_v = ref_v - shift - elseif orientation == 0x1000 then - local orientation, xoffset, yoffset = getorientation(current) - local basepoint_h = boxdir ~= pos_r and width or 0 - if pos_r == righttoleft_code then - pos_h = ref_h - (cur_h + basepoint_h + xoffset) - else - pos_h = ref_h + (cur_h + basepoint_h + xoffset) - end - pos_v = ref_v - (shift - yoffset) - else + local shift = getshift(current) + local geometry, hasoffset, hasorientation, hasanchor = getgeometry(current,true) + local anchor, source, target, targetdata + local anc_h, anc_v + local usedorientation = false + if hasanchor then + anchor, source, target = getanchors(current) + end + if hasorientation then local orientation, xoffset, yoffset, woffset, hoffset, doffset = getorientation(current) - local orientation, basepoint_h, basepoint_v = applyanchor(orientation,0,shift,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) + local orientation, basepoint_h, basepoint_v = applyorientation(orientation,0,shift,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) if orientation == 1 then basepoint_h = basepoint_h + doffset if boxdir == pos_r then basepoint_v = basepoint_v - height end + usedorientation = orientation elseif orientation == 2 then if boxdir == pos_r then basepoint_h = basepoint_h + width end + usedorientation = orientation elseif orientation == 3 then basepoint_h = basepoint_h + hoffset if boxdir ~= pos_r then basepoint_v = basepoint_v - height end + usedorientation = orientation + end + if target then + targetdata = anchors[target] + if targetdata then + anc_h = basepoint_h + anc_v = - basepoint_v + goto posdone + end + end + if pos_r == righttoleft_code then + pos_h = ref_h - (cur_h + basepoint_h) + else + pos_h = ref_h + (cur_h + basepoint_h) + end + -- pos_v = ref_v - (cur_v + basepoint_v) + pos_v = ref_v - basepoint_v + elseif hasoffset then + local orientation, xoffset, yoffset = getorientation(current) + local basepoint_h = boxdir ~= pos_r and width or 0 + local basepoint_v = shift + if target then + targetdata = anchors[target] + if targetdata then + anc_h = xoffset + basepoint_h + anc_v = yoffset - basepoint_v + goto posdone + end + end + if pos_r == righttoleft_code then + pos_h = ref_h - (cur_h + basepoint_h + xoffset) + else + pos_h = ref_h + (cur_h + basepoint_h + xoffset) + end + pos_v = ref_v - (basepoint_v - yoffset) + elseif hasanchor then + local basepoint_h = boxdir ~= pos_r and width or 0 + local basepoint_v = shift + if target then + targetdata = anchors[target] + if targetdata then + anc_h = basepoint_h + anc_v = - basepoint_v + goto posdone + end + end + if pos_r == righttoleft_code then + pos_h = ref_h - (cur_h + basepoint_h) + else + pos_h = ref_h + (cur_h + basepoint_h) end + pos_v = ref_v - basepoint_v + else + local basepoint_h = boxdir ~= pos_r and width or 0 + local basepoint_v = shift if pos_r == righttoleft_code then pos_h = ref_h - (cur_h + basepoint_h) else @@ -162,13 +211,47 @@ hlist_out = function(this_box,current) end pos_v = ref_v - basepoint_v end + goto process + ::posdone:: + if pos_r == righttoleft_code then + pos_h = targetdata[1] - anc_h + else + pos_h = targetdata[1] + anc_h + end + pos_v = targetdata[2] + anc_v + if anchor and anchor > 0 then + pos_h, pos_v = applyanchor(anchor,true,pos_h,pos_v,targetdata[3],targetdata[4],targetdata[5]) + pos_h, pos_v = applyanchor(anchor,false,pos_h,pos_v,width,height,depth) + end + ::process:: + if source then + local anchor_h = pos_h + local anchor_v = pos_v + if usedorientation then + if usedorientation == 1 then + anchor_v = anchor_v - (width - height) + elseif usedorientation == 2 then + anchor_v = anchor_v - (depth - height) + elseif usedorientation == 3 then -- weird + anchor_v = anchor_v + (height - width) + end + end + anchors[source] = { anchor_h, anchor_v, width, height, depth } + end + -- if usedorientation then + -- pushorientation(usedorientation,pos_h,pos_v,pos_r) + -- end if id == vlist_code then vlist_out(current,list) else hlist_out(current,list) end + -- if usedorientation then + -- poporientation(usedorientation,pos_h,pos_v,pos_r) + -- end end cur_h = cur_h + width + elseif id == kern_code then local kern, factor = getkern(current,true) if kern ~= 0 then @@ -271,54 +354,150 @@ vlist_out = function(this_box,current) local list = getlist(current) if list then local boxdir = getdirection(current) or lefttoright_code - local shift, orientation = getshift(current) - if not orientation then - if boxdir ~= pos_r then - shift = shift + width + local shift = getshift(current) + local geometry, hasoffset, hasorientation, hasanchor = getgeometry(current,true) + local anchor, source, target, targetdata + local usedorientation = false + if hasanchor then + anchor, source, target = getanchors(current) + end + if hasorientation then + local orientation, xoffset, yoffset, woffset, hoffset, doffset = getorientation(current) + local orientation, basepoint_h, basepoint_v = applyorientation(orientation,shift,height,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) + if orientation == 1 then + basepoint_h = basepoint_h + width - height -- hm + basepoint_v = basepoint_v - height + usedorientation = orientation + elseif orientation == 2 then + basepoint_h = basepoint_h + width + basepoint_v = basepoint_v + depth - height + usedorientation = orientation + elseif orientation == 3 then -- weird + basepoint_h = basepoint_h + height + usedorientation = orientation + end + if target then + targetdata = anchors[target] + if targetdata then + if pos_r == righttoleft_code then + pos_h = targetdata[1] - basepoint_h + else + pos_h = targetdata[1] + basepoint_h + end + pos_v = targetdata[2] - basepoint_v + goto posdone + end end if pos_r == righttoleft_code then - pos_h = ref_h - shift + pos_h = ref_h - basepoint_h else - pos_h = ref_h + shift + pos_h = ref_h + basepoint_h end - pos_v = ref_v - (cur_v + height) - elseif orientation == 0x1000 then + pos_v = ref_v - (cur_v + basepoint_v) + elseif hasoffset then local orientation, xoffset, yoffset = getorientation(current) + -- local basepoint_h = shift + -- local basepoint_v = height if boxdir ~= pos_r then shift = shift + width end + if target then + targetdata = anchors[target] + if targetdata then + if pos_r == righttoleft_code then + pos_h = targetdata[1] - (shift + xoffset) + else + pos_h = targetdata[1] + (shift + xoffset) + end + pos_v = targetdata[2] - (height - yoffset) + goto posdone + end + end if pos_r == righttoleft_code then pos_h = ref_h - (shift + xoffset) else pos_h = ref_h + (shift + xoffset) end pos_v = ref_v - (cur_v + height - yoffset) + elseif hasanchor then + -- local basepoint_h = shift + -- local basepoint_v = height + if boxdir ~= pos_r then + shift = shift + width + end + if target then + local a = anchors[target] + if a then + if pos_r == righttoleft_code then + pos_h = targetdata[1] - shift + else + pos_h = targetdata[1] + shift + end + pos_v = targetdata[2] - height + goto posdone + end + end + if pos_r == righttoleft_code then + pos_h = ref_h - shift + else + pos_h = ref_h + shift + end + pos_v = ref_v - (cur_v + height) else - local orientation, xoffset, yoffset, woffset, hoffset, doffset = getorientation(current) - local orientation, basepoint_h, basepoint_v = applyanchor(orientation,shift,height,width,height,depth,woffset,hoffset,doffset,xoffset,yoffset) - if orientation == 1 then - basepoint_h = basepoint_h + width - height - basepoint_v = basepoint_v - height - elseif orientation == 2 then - basepoint_h = basepoint_h + width - basepoint_v = basepoint_v + depth - height - elseif orientation == 3 then -- weird - basepoint_h = basepoint_h + height + -- local basepoint_h = shift + -- local basepoint_v = height + if boxdir ~= pos_r then + shift = shift + width end if pos_r == righttoleft_code then - pos_h = ref_h - basepoint_h + pos_h = ref_h - shift else - pos_h = ref_h + basepoint_h + pos_h = ref_h + shift end - pos_v = ref_v - (cur_v + basepoint_v) + pos_v = ref_v - (cur_v + height) + end + goto process + ::posdone:: + if anchor and anchor > 0 then + pos_h, pos_v = applyanchor(anchor,true,pos_h,pos_v,targetdata[3],targetdata[4],targetdata[5]) + pos_h, pos_v = applyanchor(anchor,false,pos_h,pos_v,width,height,depth) + end + ::process:: + if source then + -- move this into apply_anchor + local anchor_h = pos_h + local anchor_v = pos_v + if usedorientation then + if usedorientation == 1 then + anchor_v = anchor_v - (width - height) + elseif usedorientation == 2 then + anchor_v = anchor_v - (depth - height) + elseif usedorientation == 3 then -- weird + anchor_v = anchor_v + (height - width) + end + end + anchors[source] = { anchor_h, anchor_v, width, height, depth } end + -- if usedorientation then + -- pushorientation(usedorientation,pos_h,pos_v,pos_r) + -- end + -- if source then + -- flushstored(current,source,true) + -- end if id == vlist_code then vlist_out(current,list) else hlist_out(current,list) end + -- if source then + -- flushstored(current,source,false) + -- end + -- if usedorientation then + -- poporientation(usedorientation,pos_h,pos_v,pos_r) + -- end end cur_v = cur_v + height + depth + elseif id == kern_code then cur_v = cur_v + getkern(current) elseif id == rule_code then diff --git a/tex/context/base/mkxl/grph-rul.lmt b/tex/context/base/mkxl/grph-rul.lmt index 50a40155e..b1de3a6a6 100644 --- a/tex/context/base/mkxl/grph-rul.lmt +++ b/tex/context/base/mkxl/grph-rul.lmt @@ -22,6 +22,8 @@ local tonode = nuts.tonode local getattribute = tex.getattribute +local direct_value = tokens.values.direct + local a_color = attributes.private('color') local a_transparency = attributes.private('transparency') local a_colormodel = attributes.private('colormodel') @@ -40,6 +42,8 @@ end) interfaces.implement { name = "frule", + public = true, + protected = true, arguments = { { { "width", "dimension" }, { "height", "dimension" }, @@ -52,7 +56,7 @@ interfaces.implement { { "radius", "dimension" }, { "corner", "string" }, } } , - actions = function(t) + actions = function(t,...) local rule = userrule(t) if t.type == "mp" then t.ma = getattribute(a_colormodel) or 1 @@ -61,7 +65,7 @@ interfaces.implement { else setattrlist(rule,true) end - context(tonode(rule)) -- will become context.nodes.flush + context(nuts.tonode(rule)) end } @@ -78,17 +82,19 @@ interfaces.implement { actions = function(t) local rule = outlinerule(t.width,t.height,t.depth,t.line) setattrlist(rule,true) - context(tonode(rule)) -- will become context.nodes.flush + context(tonode(rule)) end } interfaces.implement { name = "framedoutline", + -- public = true, + -- protected = true, arguments = { "dimension", "dimension", "dimension", "dimension" }, actions = function(w,h,d,l) local rule = outlinerule(w,h,d,l) setattrlist(rule,true) - context(tonode(rule)) -- will become context.nodes.flush + context(tonode(rule)) end } diff --git a/tex/context/base/mkxl/grph-rul.mkxl b/tex/context/base/mkxl/grph-rul.mkxl index 034e91734..5c192e345 100644 --- a/tex/context/base/mkxl/grph-rul.mkxl +++ b/tex/context/base/mkxl/grph-rul.mkxl @@ -17,7 +17,7 @@ \unprotect -\permanent\protected\def\frule{\relax\clf_frule} % will become a public implementer +% \permanent\protected\def\frule{\relax\clf_frule} % will become a public implementer % just for fun: diff --git a/tex/context/base/mkxl/lang-ini.lmt b/tex/context/base/mkxl/lang-ini.lmt index 2030fb697..7919df530 100644 --- a/tex/context/base/mkxl/lang-ini.lmt +++ b/tex/context/base/mkxl/lang-ini.lmt @@ -607,25 +607,25 @@ end do - local nuts = nodes.nuts - local nextglyph = nuts.traversers.glyph - local setoptions = nuts.setoptions - - local getnext = nuts.getnext - local getprev = nuts.getprev - local setchar = nuts.setchar - local setnext = nuts.setnext - local setlink = nuts.setlink - local setfield = nuts.setfield - local setdisc = nuts.setdisc - local getprop = nuts.getprop - local setprop = nuts.setprop - local setattrlist = nuts.setattrlist - - local new_disc = nuts.pool.disc - local new_glyph = nuts.pool.glyph - local copy_node = nuts.copy - local flushlist = nuts.flushlist + local nuts = nodes.nuts + local nextglyph = nuts.traversers.glyph + local setoptions = nuts.setoptions + + local getnext = nuts.getnext + local getprev = nuts.getprev + local setchar = nuts.setchar + local setnext = nuts.setnext + local setlink = nuts.setlink + local setfield = nuts.setfield + local setdisc = nuts.setdisc + local getprop = nuts.getprop + local setprop = nuts.setprop + local setattrlist = nuts.setattrlist + + local new_disc = nuts.pool.disc + local new_glyph = nuts.pool.glyph + local copy_node = nuts.copy + local flushlist = nuts.flushlist local glyphoptioncodes = tex.glyphoptioncodes @@ -794,6 +794,7 @@ do local sequencers = utilities.sequencers local newsequencer = sequencers.new local appendgroup = sequencers.appendgroup + local prependaction = sequencers.prependaction local appendaction = sequencers.appendaction local enableaction = sequencers.enableaction local disableaction = sequencers.disableaction diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index 321dea935..0861e0916 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -1429,15 +1429,13 @@ local flushimage do -- small sizes which is needed for inaccurate viewers. flushers.rule = function(current,pos_h,pos_v,pos_r,size_h,size_v,subtype) - if subtype == emptyrule_code then return elseif subtype == boxrule_code then return flushpdfxform(current,pos_h,pos_v,pos_r,size_h,size_v) elseif subtype == imagerule_code then return flushpdfximage(current,pos_h,pos_v,pos_r,size_h,size_v) - end - if subtype == userrule_code or subtype >= overrule_code and subtype <= radicalrule_code then + elseif subtype == userrule_code or (subtype >= overrule_code and subtype <= radicalrule_code) then pdf_goto_pagemode() b = b + 1 ; buffer[b] = s_b pdf_set_pos_temp(pos_h,pos_v) diff --git a/tex/context/base/mkxl/lpdf-rul.lmt b/tex/context/base/mkxl/lpdf-rul.lmt index 4c7bcf633..96b4597bb 100644 --- a/tex/context/base/mkxl/lpdf-rul.lmt +++ b/tex/context/base/mkxl/lpdf-rul.lmt @@ -101,12 +101,18 @@ def RuleColor = %color% enddef ; local initialized = false ; local function rule_mp(p,h,v,i,n) - local name = p.name or "fake:rest" - local code = (predefined[name] or predefined["fake:rest"]) { + local name = p.name or "fake:rest" + local ht = p.height or 0 + local dp = p.depth or 0 + local total = ht + dp + local code = (predefined[name] or predefined["fake:rest"]) { data = p.data or "", - width = p.width * bpfactor, - height = p.height * bpfactor, - depth = p.depth * bpfactor, + -- width = p.width * bpfactor, + -- height = p.height * bpfactor, + -- depth = p.depth * bpfactor, + width = h * bpfactor, + height = v * bpfactor * ht / total, + depth = v * bpfactor * dp / total, factor = (p.factor or 0) * bpfactor, -- needs checking offset = p.offset or 0, line = (p.line or 65536) * bpfactor, diff --git a/tex/context/base/mkxl/luat-log.lmt b/tex/context/base/mkxl/luat-log.lmt index 2b5b60dd9..dd6c1b990 100644 --- a/tex/context/base/mkxl/luat-log.lmt +++ b/tex/context/base/mkxl/luat-log.lmt @@ -626,6 +626,11 @@ if package.helpers.report then package.helpers.report = logs.reporter("package loader") -- when used outside mtxrun end +-- logs.errors=missing references,missing characters +-- logs.errors=characters +-- logs.errors=missing +-- logs.errors=* + do local finalactions = { } @@ -641,6 +646,9 @@ do loggingerrors = v if type(v) == "string" then fatalerrors = settings_to_hash(v) + for k, v in next, fatalerrors do + fatalerrors[k] = string.topattern(k) + end else fatalerrors = { } end @@ -704,6 +712,13 @@ do end if fatalerrors[w] then possiblefatal[w] = true + else + for k, v in next, fatalerrors do + if find(w,v) then + possiblefatal[w] = true + break + end + end end return startlogging("terminal",r,w,...) end diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl index 500d929c6..48a35e0b2 100644 --- a/tex/context/base/mkxl/mult-sys.mkxl +++ b/tex/context/base/mkxl/mult-sys.mkxl @@ -106,6 +106,7 @@ \definesystemconstant {action} \definesystemconstant {all} \definesystemconstant {ampersand} +\definesystemconstant {anchor} \definesystemconstant {ascii} \definesystemconstant {attribute} \definesystemconstant {attr} @@ -357,6 +358,7 @@ \definesystemconstant {smallcaps} \definesystemconstant {small} \definesystemconstant {somewhere} +\definesystemconstant {source} \definesystemconstant {special} \definesystemconstant {spec} \definesystemconstant {spot} @@ -375,6 +377,7 @@ \definesystemconstant {text} \definesystemconstant {tex} \definesystemconstant {tf} +\definesystemconstant {target} \definesystemconstant {third} \definesystemconstant {topfloat} \definesystemconstant {top} diff --git a/tex/context/base/mkxl/node-bck.lmt b/tex/context/base/mkxl/node-bck.lmt index ff48ff8b5..ad8f8d59e 100644 --- a/tex/context/base/mkxl/node-bck.lmt +++ b/tex/context/base/mkxl/node-bck.lmt @@ -65,7 +65,7 @@ local linefillers = nodes.linefillers local a_background = privateattributes("background") local a_alignbackground = privateattributes("alignbackground") local a_linefiller = privateattributes("linefiller") -local a_ruled = privateattributes("ruled") +----- a_ruled = privateattributes("ruled") local trace_alignment = false local report_alignment = logs.reporter("backgrounds","alignment") @@ -146,7 +146,7 @@ local function add_alignbackgrounds(head,list,data) for template in nexthlist, list do local background = getattr(template,a_alignbackground) if background then - local list = colored_a(current,list,template,data) + local list = colored_a(current,list,template,id,data) if list then setlist(current,list) end @@ -169,7 +169,7 @@ local function add_backgrounds(head,id,list,data) if list then for current, id, subtype, list in nextlist, list do if list then - if alignments and subtype == alignmentlist_code then + if data and alignments and subtype == alignmentlist_code then local l = add_alignbackgrounds(current,list,data) if l then list = l @@ -197,9 +197,9 @@ end function nodes.handlers.backgrounds(head) local data = attributes.values[a_linefiller] - if data then +-- if data then add_backgrounds(head,getid(head),getlist(head),data) - end +-- end return head end diff --git a/tex/context/base/mkxl/node-fin.lmt b/tex/context/base/mkxl/node-fin.lmt index 4bf8663be..7093638de 100644 --- a/tex/context/base/mkxl/node-fin.lmt +++ b/tex/context/base/mkxl/node-fin.lmt @@ -23,7 +23,7 @@ local getattr = nuts.getattr local getattrs = nuts.getattrs local getwidth = nuts.getwidth local getwhd = nuts.getwhd -local getorientation = nuts.getorientation +local hasgeometry = nuts.hasgeometry local hasdimensions = nuts.hasdimensions local getbox = nuts.getbox @@ -184,7 +184,7 @@ local function process(attribute,head,inheritance,default) -- one attribute elseif id == hlist_code or id == vlist_code then -- tricky checking local outer - if subtype == container_code or getorientation(stack) then + if subtype == container_code or hasgeometry(stack) then outer = getattr(stack,attribute) if outer then if default and outer == inheritance then @@ -271,7 +271,7 @@ local function simple(attribute,head) check = true leader = content elseif id == hlist_code or id == vlist_code then - if subtype == container_code or getorientation(stack) then + if subtype == container_code or hasgeometry(stack) then local outer = getattr(stack,attribute) if outer then if current ~= outer then @@ -349,7 +349,7 @@ local function selective(attribute,head,inheritance,default) -- two attributes leader = content elseif id == hlist_code or id == vlist_code then local outer, s - if subtype == container_code or getorientation(stack) then + if subtype == container_code or hasgeometry(stack) then outer, s = getattrs(stack,attribute,nsselector) if outer then if default and outer == inheritance then diff --git a/tex/context/base/mkxl/node-nut.lmt b/tex/context/base/mkxl/node-nut.lmt index dfa89e4ab..fa98d26fe 100644 --- a/tex/context/base/mkxl/node-nut.lmt +++ b/tex/context/base/mkxl/node-nut.lmt @@ -112,6 +112,8 @@ local nuts = { getnucleus = direct.getnucleus, getoffsets = direct.getoffsets, getoptions = direct.getoptions, + getanchors = direct.getanchors, + getgeometry = direct.getgeometry, getorientation = direct.getorientation, getpenalty = direct.getpenalty, getpost = direct.getpost, @@ -141,6 +143,7 @@ local nuts = { hasattribute = direct.hasattribute, hasdimensions = direct.hasdimensions, hasfield = direct.hasfield, + hasgeometry = direct.hasgeometry, hasglyph = direct.hasglyph, hasglyphoption = direct.hasglyphoption, hpack = direct.hpack, @@ -215,6 +218,8 @@ local nuts = { setnucleus = direct.setnucleus, setoffsets = direct.setoffsets, setoptions = direct.setoptions, + setanchors = direct.setanchors, + setgeometry = direct.setgeometry, setorientation = direct.setorientation, setpenalty = direct.setpenalty, setpost = direct.setpost, diff --git a/tex/context/base/mkxl/node-shp.lmt b/tex/context/base/mkxl/node-shp.lmt index 6cae39517..7848c623e 100644 --- a/tex/context/base/mkxl/node-shp.lmt +++ b/tex/context/base/mkxl/node-shp.lmt @@ -38,6 +38,10 @@ function handlers.finalizebox(box) actions(getbox(box)) -- nut end +function handlers.finalizelist(list) + actions(list) -- nut +end + do local flattendiscretionaries = nuts.flattendiscretionaries diff --git a/tex/context/base/mkxl/pack-box.mkxl b/tex/context/base/mkxl/pack-box.mkxl index 43934f7f7..9ed90a885 100644 --- a/tex/context/base/mkxl/pack-box.mkxl +++ b/tex/context/base/mkxl/pack-box.mkxl @@ -1118,4 +1118,130 @@ [\c!width=\overlaywidth,\c!height=\overlayheight] {\overlayimage{#1}}} +%D Here is an end December 2021 experimental feature: anchored boxes. This will move to +%D pack-box.mkxl + +\installcorenamespace{boxanchor} +\installcorenamespace{boxanchorid} +\installcorenamespace{boxanchorbox} +\installcorenamespace{boxpreset} + +\installparameterhandler \??boxanchor {boxanchor} +\installsetuphandler \??boxanchor {boxanchor} + +\setupboxanchor + [\c!xoffset=\zeropoint, + \c!yoffset=\zeropoint] + +\newcount\c_boxes_n_of_anchors + +\permanent\protected\def\defineanchorbox[#1]% + {\ifcsname\??boxanchorid#1\endcsname + \box\lastnamedcs\emptybox + \else + \global\advance\c_boxes_n_of_anchors\plusone + \expandafter\integerdef\csname\??boxanchorid #1\endcsname\c_boxes_n_of_anchors + \expandafter\newbox \csname\??boxanchorbox#1\endcsname + \fi} + +\permanent\protected\def\defineanchorboxoverlay[#1]% + {\defineanchorbox[#1:\v!background]% + \defineanchorbox[#1:\v!foreground]% + \defineoverlay[#1:\v!background][\overlayanchorbox{#1:\v!background}]% + \defineoverlay[#1:\v!foreground][\overlayanchorbox{#1:\v!foreground}]} + +\permanent\def\namedboxanchor#1% + {\csname\??boxanchorid#1\endcsname} % no checking + +% \permanent\protected\def\overlayanchorbox#1% +% {\begingroup +% \scratchcounter\csname\??boxanchorbox#1\endcsname +% \ifvoid\scratchcounter\else +% \setbox\scratchbox\hpack \s!source \namedboxanchor{#1}\bgroup +% % \setbox\scratchbox\hpack\bgroup +% \box\scratchcounter +% \egroup +% % \boxsource\scratchbox\namedboxanchor{#1}% +% \wd\scratchbox\overlaywidth +% \ht\scratchbox\overlayheight +% \dp\scratchbox\overlaydepth +% \box\scratchbox +% \fi +% \endgroup} + +\permanent\protected\def\overlayanchorbox#1% + {\begingroup + \scratchcounter\csname\??boxanchorbox#1\endcsname + \ifvoid\scratchcounter\else + \boxsource\scratchcounter\namedboxanchor{#1}% + \wd\scratchcounter\d_overlay_width + \ht\scratchcounter\d_overlay_height + \dp\scratchcounter\d_overlay_depth + \box\scratchcounter + \fi + \endgroup} + +\permanent\tolerant\protected\def\setanchorbox[#1]#*[#2]% + {\begingroup + \dowithnextbox + {\def\currentanchorbox{#1}% + \setupboxanchor[#2]% + \scratchcounterone\csname\??boxanchorbox#1\endcsname\relax + \scratchxoffset\boxanchorparameter\c!xoffset\relax + \scratchyoffset\boxanchorparameter\c!yoffset\relax + \boxtarget\nextbox \namedboxanchor {#1}\relax + \boxanchors\nextbox + % target + \ifcsname\??boxpreset\boxanchorparameter\c!target\endcsname + \lastnamedcs + \else + \halfwaytotallistanchorcode + \fi + % source + \ifcsname\??boxpreset\boxanchorparameter\c!source\endcsname + \lastnamedcs + \else + \halfwaytotallistanchorcode + \fi + \ifdim\scratchxoffset=\zeropoint\else + \boxxoffset\nextbox\scratchxoffset + \fi + \ifdim\scratchyoffset=\zeropoint\else + \boxyoffset\nextbox\scratchyoffset + \fi + \global\setbox\scratchcounterone\hpack\bgroup + \unhbox\scratchcounterone + \hskip-\wd\nextbox + \box\nextbox + \egroup + \endgroup}} + +\expandafter\integerdef\csname\??boxpreset\v!left \endcsname\leftoriginlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!left,\v!height \endcsname\leftheightlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!left,\v!top \endcsname\leftheightlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!left,\v!depth \endcsname\leftdepthlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!left,\v!bottom \endcsname\leftdepthlistanchorcode +% +\expandafter\integerdef\csname\??boxpreset\v!right \endcsname\rightoriginlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!right,\v!height \endcsname\rightheightlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!right,\v!top \endcsname\rightheightlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!right,\v!depth \endcsname\rightdepthlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!right,\v!bottom \endcsname\rightdepthlistanchorcode + +% \centeroriginlistanchorcode +% \centerheightlistanchorcode +% \centerdepthlistanchorcode + +\expandafter\integerdef\csname\??boxpreset\v!middle \endcsname\halfwaytotallistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!middle,\v!height\endcsname\halfwayheightlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!middle,\v!top \endcsname\halfwayheightlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!middle,\v!depth \endcsname\halfwaydepthlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!middle,\v!bottom\endcsname\halfwaydepthlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!middle,\v!left \endcsname\halfwayleftlistanchorcode +\expandafter\integerdef\csname\??boxpreset\v!middle,\v!right \endcsname\halfwayrightlistanchorcode + +% \negatexlistsigncode +% \negateylistsigncode +% \negatelistsigncode + \protect \endinput diff --git a/tex/context/base/mkxl/page-sid.mkxl b/tex/context/base/mkxl/page-sid.mkxl index fb1022c2a..1ff587120 100644 --- a/tex/context/base/mkxl/page-sid.mkxl +++ b/tex/context/base/mkxl/page-sid.mkxl @@ -46,6 +46,7 @@ \newdimen \d_page_sides_rightoffset %newbox \b_page_sides_bottom +\newbox \b_page_sides_spill_over \newcount \c_page_sides_lines_done \newcount \c_page_sides_checks_done @@ -57,6 +58,7 @@ \newconditional \c_page_sides_short \newconditional \c_page_sides_flag \newconditional \c_page_sides_shape_down +\newconditional \c_page_sides_keep_together \newdimen \d_page_sides_shift \newdimen \d_page_sides_extrashift @@ -294,7 +296,7 @@ \box\floatbox % somehow we need this \scratchbox magic, but at least it's the same as the % tracer now - \setbox\scratchbox\emptybox + \setbox\scratchbox\emptyhbox \wd\scratchbox\hsize \ht\scratchbox\d_page_sides_bottomtotal \box\scratchbox @@ -387,7 +389,6 @@ \fi \global\d_page_sides_downshift\zeropoint} - %D We have a few virtual dimensions. I'm not sure what to do with \type %D {\pagedepth} and \type {\pageshrink} in the next two. If we ever need %D that it will become options. @@ -448,7 +449,10 @@ \penalty\zerocount % works too \else %\tracingpages\plusone \tracingonline\plustwo + \begingroup + \pageboundarypenalty\plustenthousand \pageboundary % becomes a penalty (after triggering the callback) (experimental!) + \endgroup %\tracingpages\zerocount \fi \page_otr_command_set_vsize} % new, no longer really needed @@ -895,6 +899,40 @@ \prevdepth\strutdp} %\ignoreparskip} +% \def\page_sides_handle_float#1% +% {\page_sides_initialize_checker +% \page_sides_check_horizontal_skips +% \page_sides_check_vertical_skips +% \page_sides_apply_horizontal_shift +% \page_sides_check_previous_float +% \page_sides_inject_before +% \page_sides_inject_dummy_lines +% \page_sides_relocate_float{#1}% +% \page_sides_apply_vertical_shift +% \page_sides_analyse_space +% \ifconditional\c_page_floats_room +% \global\setfalse\c_page_sides_delayed +% % we're ok +% \else +% \global\settrue\c_page_sides_delayed +% \global\c_page_sides_m_of_lines\c_page_sides_n_of_lines +% \ifcase\c_page_sides_page_method +% \page_otr_fill_and_eject_page +% \or +% \page_otr_force_new_page_one +% \else +% \page_otr_fill_and_eject_page +% \fi +% \global\c_page_sides_n_of_lines\c_page_sides_m_of_lines +% \page_sides_analyse_space +% %\page_sides_inject_before +% \page_sides_inject_dummy_lines +% \fi +% \page_sides_place_float +% \global\setfalse\c_page_sides_delayed +% \page_sides_check_floats_reset +% \page_sides_wrapup} + \def\page_sides_handle_float#1% {\page_sides_initialize_checker \page_sides_check_horizontal_skips @@ -910,16 +948,21 @@ \global\setfalse\c_page_sides_delayed % we're ok \else + \ifconditional\c_page_sides_keep_together + \clf_interceptsamepagecontent\b_page_sides_spill_over + \fi \global\settrue\c_page_sides_delayed \global\c_page_sides_m_of_lines\c_page_sides_n_of_lines \ifcase\c_page_sides_page_method - \page_otr_fill_and_eject_page + \page_otr_fill_and_eject_page \or - \page_otr_force_new_page_one + \page_otr_force_new_page_one \else - \page_otr_fill_and_eject_page + \page_otr_fill_and_eject_page + \fi + \ifvoid\b_page_sides_spill_over\else + \box\b_page_sides_spill_over \fi - \global\c_page_sides_n_of_lines\c_page_sides_m_of_lines \page_sides_analyse_space %\page_sides_inject_before \page_sides_inject_dummy_lines diff --git a/tex/context/base/mkxl/page-txt.mklx b/tex/context/base/mkxl/page-txt.mklx index 27cf50773..4d80cfa76 100644 --- a/tex/context/base/mkxl/page-txt.mklx +++ b/tex/context/base/mkxl/page-txt.mklx @@ -495,10 +495,10 @@ \ifempty\p_text \kern\leftedgewidth \else - \hbox to \leftedgewidth\bgroup - \hss - \page_layouts_process_element_indeed#style#color#width% - \egroup + \hbox to \leftedgewidth\bgroup + \hss + \page_layouts_process_element_indeed#style#color#width% + \egroup \fi} \def\page_layouts_left_edge_element#text#style#color#width% diff --git a/tex/context/base/mkxl/spac-ver.lmt b/tex/context/base/mkxl/spac-ver.lmt index 955d65f4f..9d58ff167 100644 --- a/tex/context/base/mkxl/spac-ver.lmt +++ b/tex/context/base/mkxl/spac-ver.lmt @@ -33,7 +33,6 @@ if not modules then modules = { } end modules ['spac-ver'] = { local next, type, tonumber = next, type, tonumber local gmatch, concat = string.gmatch, table.concat -local ceil, floor, abs = math.ceil, math.floor, math.abs local lpegmatch = lpeg.match local unpack = unpack or table.unpack local allocate = utilities.storage.allocate @@ -147,6 +146,7 @@ local getheight = nuts.getheight local setdepth = nuts.setdepth local getdepth = nuts.getdepth local setnext = nuts.setnext +local setprev = nuts.setprev local find_node_tail = nuts.tail local flushnode = nuts.flushnode @@ -197,6 +197,8 @@ local splittopskip_code = gluecodes.splittopskip local linelist_code = nodes.listcodes.line +local setvisual = function(...) setvisual = nuts.setvisual return setvisual(...) end + local properties = nodes.properties.data local vspacing = builders.vspacing or { } @@ -355,6 +357,9 @@ end local snap_hlist do + local floor = math.floor + local ceil = math.ceil + local function fixedprofile(current) local profiling = builders.profiling return profiling and profiling.fixedprofile(current) @@ -749,6 +754,8 @@ local method = 1 -- better tracing -- local method = 3 -- local method = 4 +-- todo: not true but only visual a_visual,tex.getattribute(a_visual) + if method == 1 then local registervalue = attributes.registervalue @@ -939,6 +946,7 @@ do local function inject() local n = new_glue(b_amount,b_stretch,b_shrink) setspecification(n,b_category,b_penalty,b_order or 1) + setvisual(k) write_node(n) end @@ -1064,6 +1072,7 @@ do local n = new_glue() -- setattrs(n,false,a_skipcategory,categories.penalty,a_skippenalty,penalty,a_skiporder,1) setspecification(n,categories.penalty,penalty,1) + setvisual(k) write_node(n) end @@ -1071,6 +1080,7 @@ do local n = new_glue(amount) -- setattrs(n,false,a_skipcategory,categories.largest,a_skippenalty,false,a_skiporder,1) setspecification(n,categories.largest,false,1) + setvisual(k) write_node(n) end @@ -1078,6 +1088,7 @@ do local n = new_glue() -- setattrs(n,false,a_skipcategory,categories.disable,a_skippenalty,false,a_skiporder,1) setspecification(n,categories.disable,false,1) + setvisual(k) write_node(n) end @@ -1239,16 +1250,22 @@ do end if width == 0 then -- do nothing - elseif where == "after" then - head, current = insertnodeafter(head,current,new_rule(w,h,d)) - head, current = insertnodeafter(head,current,new_kern(width)) - head, current = insertnodeafter(head,current,new_rule(w,h,d)) else - local c = current - head, current = insertnodebefore(head,current,new_rule(w,h,d)) - head, current = insertnodebefore(head,current,new_kern(width)) - head, current = insertnodebefore(head,current,new_rule(w,h,d)) - current = c + local b = new_rule(w,h,d) + local k = new_kern(width) + local a = new_rule(w,h,d) + setvisual(k) + if where == "after" then + head, current = insertnodeafter(head,current,b) + head, current = insertnodeafter(head,current,k) + head, current = insertnodeafter(head,current,a) + else + local c = current + head, current = insertnodebefore(head,current,b) + head, current = insertnodebefore(head,current,k) + head, current = insertnodebefore(head,current,a) + current = c + end end if trace then report_vspacing("inserting forced skip of %p",width) @@ -1428,9 +1445,11 @@ do texsetdimen("global","d_spac_overlay",-delta) -- for tracing -- we should adapt pagetotal ! (need a hook for that) .. now we have the wrong pagebreak local k = new_kern(-delta) + setvisual(k) head = insertnodebefore(head,n,k) if n_ht > p_ht then local k = new_kern(n_ht-p_ht) + setvisual(k) head = insertnodebefore(head,p,k) end if trace_vspacing then @@ -1577,6 +1596,7 @@ do local d = g - t if d < -e then local penalty = new_penalty(1000000) + setvisual(penalty) setlink(penalty,head) head = penalty report_snapper("force pagebreak due to extra space at bottom: %p",e) @@ -1605,6 +1625,7 @@ do local function flush(why) if penalty_data then local p = new_penalty(penalty_data) + setvisual(p) if trace then trace_done("flushed due to " .. why,p) end @@ -2100,6 +2121,7 @@ do if penalty_data then tail = find_node_tail(head) local p = new_penalty(penalty_data) + setvisual(p) if trace then trace_done("result",p) end @@ -2372,6 +2394,7 @@ do end local trace = false + local abs = math.abs -- local last = nil local vmode_code = tex.modelevels.vertical local temp_code = nodecodes.temp @@ -2503,14 +2526,13 @@ do local trace = false trackers.register("otr.forcestrutdepth", function(v) trace = v and function(n) - nuts.setvisual(nuts.tonut(n),nodes.visualizers.modes.depth) + setvisual(nuts.tonut(n),nodes.visualizers.modes.depth) end end) local treversenode = nuts.treversers.node - function vspacing.forcestrutdepth() - -- check if in mvl + local function flushcontributions() if texgetnest("ptr") == 0 then -- this flushes the contributions local prev = nil @@ -2526,6 +2548,17 @@ do prev = head end end + return true + else + return false + end + end + + vspacing.flushcontributions = flushcontributions + + function vspacing.forcestrutdepth() + -- check if in mvl + if flushcontributions() then -- now we consult the last line (if present) local head, tail = getspeciallist("pagehead") if tail then @@ -2569,6 +2602,57 @@ do end end + -- highly experimental, only for m4all now; todo: tracing + + local setbox = nuts.setbox + + function vspacing.interceptsamepagecontent(box) + if vspacing.flushcontributions() then + -- now we consult the last line (if present) + local head, tail = getspeciallist("pagehead") + if tail and getid(tail) == glue_code then + local prev = getprev(tail) + if prev and getid(prev) == penalty_code then + if getpenalty(prev) >= 10000 then + local state = nil + local first = nil + local last = tail + local c = getprev(prev) + while c do + if getid(c) == glue_code then + local p = getprev(c) + if p and getid(p) == penalty_code then + if getpenalty(p) < 10000 then + state = 1 + end + else + state = 2 + break + end + end + first = c + c = getprev(c) + end + if first and first ~= head then + setnext(getprev(first)) + setprev(first) + local vbox = vpack_node(first) + setvisual(vbox) + setbox(box,vbox) + report_vspacing("same page intercept, case %i") + end + end + end + end + end + end + + interfaces.implement { + name = "interceptsamepagecontent", + arguments = "integer", + actions = vspacing.interceptsamepagecontent, + } + -- interfaces.implement { -- name = "removelastline", -- actions = function() diff --git a/tex/context/base/mkxl/strc-flt.mklx b/tex/context/base/mkxl/strc-flt.mklx index 94d06fd92..862aa7ff9 100644 --- a/tex/context/base/mkxl/strc-flt.mklx +++ b/tex/context/base/mkxl/strc-flt.mklx @@ -977,6 +977,9 @@ \doifelseinset\v!force\floatlocation {\global\settrue\c_page_sides_shape_down} {\global\setfalse\c_page_sides_shape_down}% + \doifelseinset\v!keeptogether\floatlocation + {\global\settrue\c_page_sides_keep_together} + {\global\setfalse\c_page_sides_keep_together}% \doifelseinset\v!nonumber\floatlocation {\global\nofloatnumbertrue}% {\doifelse{\floatcaptionparameter\c!number}\v!yes diff --git a/tex/context/base/mkxl/strc-reg.lmt b/tex/context/base/mkxl/strc-reg.lmt index ccb43bc28..a45f23bf0 100644 --- a/tex/context/base/mkxl/strc-reg.lmt +++ b/tex/context/base/mkxl/strc-reg.lmt @@ -9,7 +9,7 @@ if not modules then modules = { } end modules ['strc-reg'] = { local next, type, tonumber, rawget = next, type, tonumber, rawget local char, format, gmatch = string.char, string.format, string.gmatch local equal, concat, remove = table.are_equal, table.concat, table.remove -local lpegmatch, P, C, Ct = lpeg.match, lpeg.P, lpeg.C, lpeg.Ct +local lpegmatch, lpegpatterns, P, C, Ct, Cs = lpeg.match, lpeg.patterns, lpeg.P, lpeg.C, lpeg.Ct, lpeg.Cs local allocate = utilities.storage.allocate local trace_registers = false trackers.register("structures.registers", function(v) trace_registers = v end) @@ -442,13 +442,21 @@ implement { arguments = "2 strings", } - -local p_s = P("+") +local p_s = P("+") -- & obsolete in mkiv local p_e = P("&") * (1-P(";"))^0 * P(";") local p_r = C((p_e + (1-p_s))^0) +local p_t = Cs ( ( + lpegpatterns.nestedbraces +--+ lpegpatterns.nestedbrackets + + lpegpatterns.nestedparents + + P("$") * (1-P("$"))^1 * P("$") + + (1-p_s) + )^1) + local entrysplitter_xml = Ct(p_r * (p_s * p_r)^0) -- bah -local entrysplitter_tex = lpeg.tsplitat('+') -- & obsolete in mkiv +----- entrysplitter_tex = lpeg.tsplitat('+') +local entrysplitter_tex = Ct((p_t * p_s^-1)^0) local tagged = { } diff --git a/tex/context/base/mkxl/strc-ren.mkxl b/tex/context/base/mkxl/strc-ren.mkxl index f7a1ec686..012722f6e 100644 --- a/tex/context/base/mkxl/strc-ren.mkxl +++ b/tex/context/base/mkxl/strc-ren.mkxl @@ -395,6 +395,7 @@ \noindentation \else \ignoreparskip + \doindentation \fi} % nice testcase diff --git a/tex/context/base/mkxl/strc-sec.mkxl b/tex/context/base/mkxl/strc-sec.mkxl index ba250311e..0776249fa 100644 --- a/tex/context/base/mkxl/strc-sec.mkxl +++ b/tex/context/base/mkxl/strc-sec.mkxl @@ -1240,7 +1240,7 @@ \spac_vspacing_same_page\currentheadlevel\zerocount \fi \headparameter\c!before\relax - \indent + \indent % hm, not a clever one? \else \page_otr_command_flush_side_floats \ifconditional\c_strc_sectioning_auto_break @@ -1275,7 +1275,6 @@ \spac_vspacing_same_page\currentheadlevel\plustwo \fi} - % We do support negative numbers but it can have side effects that we won't catch: % % \chapter{some} \setupheadnumber[chapter][3] \chapter{more} diff --git a/tex/context/base/mkxl/supp-box.mkxl b/tex/context/base/mkxl/supp-box.mkxl index 8e5b38365..b980107e4 100644 --- a/tex/context/base/mkxl/supp-box.mkxl +++ b/tex/context/base/mkxl/supp-box.mkxl @@ -17,6 +17,11 @@ \registerctxluafile{supp-box}{autosuffix,optimize} +\permanent\integerdef\negatelistsigncode\numexpr + \negatexlistsigncode + +\negateylistsigncode +\relax + %D And some dimensions: \newdimen\givenwidth @@ -2893,6 +2898,15 @@ \untraced\permanent\protected\def\showboxhere{\showbox nolevels content online } +% % possible extra interface, currently disabled +% +% \permanent\tolerant\protected\def\registeranchorbox[#1]#*[#2]% +% {\dowithnextbox +% {\clf_registeranchorbox +% \namedboxanchor{#1}% +% \ifcstok{#2}\v!before\minusone\else\plusone\fi +% \box\nextbox}} + \protect \endinput % a bit of test code: diff --git a/tex/context/base/mkxl/toks-aux.lmt b/tex/context/base/mkxl/toks-aux.lmt index 1d48d8838..c7d2fb2fc 100644 --- a/tex/context/base/mkxl/toks-aux.lmt +++ b/tex/context/base/mkxl/toks-aux.lmt @@ -171,6 +171,8 @@ tex.normalizecodes = getthem(tex.getnormalizevalues, "normalizecode") tex.automigrationcodes = getthem(tex.getautomigrationvalues, "automigrationcode") -- only at lua end tex.parcontextcodes = getthem(tex.getparcontextvalues, "parcontextcode") tex.textcontrolcodes = getthem(tex.gettextcontrolvalues, "") -- only at lua end +tex.listanchorcodes = getthem(tex.getlistanchorvalues, "listanchorcode") +tex.listsigncodes = getthem(tex.getlistsignvalues, "listsigncode") function tex.stringtocodesbitmap(str,codes) local bitmap = 0 diff --git a/tex/context/base/mkxl/trac-vis.lmt b/tex/context/base/mkxl/trac-vis.lmt index 7f9341722..e2c4133b4 100644 --- a/tex/context/base/mkxl/trac-vis.lmt +++ b/tex/context/base/mkxl/trac-vis.lmt @@ -292,7 +292,14 @@ local function setvisual(n,a,what,list) -- this will become more efficient when end function nuts.setvisual(n,mode) - setattr(n,a_visual,setvisual(mode,getattr(n,a_visual),true)) + if mode then + setattr(n,a_visual,setvisual(mode,getattr(n,a_visual),true)) + else + local a = texgetattribute(a_visual) + if a ~= unsetvalue then + setattr(n,a_visual,a) + end + end end function nuts.setvisuals(n,mode) -- currently the same @@ -792,7 +799,6 @@ local ruledbox do local getshift = nuts.getshift local getorientation = nuts.getorientation - local setorientation = nuts.setorientation setmetatableindex(o_cache,function(t,size) local rule = new_rule(2*size,size,size) @@ -808,7 +814,7 @@ local ruledbox do local wd, ht, dp = getwhd(current) local force_origin = wd == 0 or (dp + ht) == 0 local shift = getshift(current) -local orientation, xoffset, yoffset = getorientation(current) + local orientation, xoffset, yoffset = getorientation(current) local next = getnext(current) local prev = previous setboth(current) @@ -884,7 +890,6 @@ local orientation, xoffset, yoffset = getorientation(current) end info = new_hlist(info,wd,ht,dp,shift) end --- setorientation(info,orientation,xoffset,yoffset) if next then setlink(info,next) end diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml index 3516282e1..824015281 100644 --- a/tex/context/interface/mkii/keys-ro.xml +++ b/tex/context/interface/mkii/keys-ro.xml @@ -303,6 +303,7 @@ <cd:variable name='july' value='iulie'/> <cd:variable name='june' value='iunie'/> <cd:variable name='keep' value='mentine'/> + <cd:variable name='keeptogether' value='keeptogether'/> <cd:variable name='kerncharacters' value='kerncharacters'/> <cd:variable name='knockout' value='knockout'/> <cd:variable name='label' value='eticheta'/> @@ -1235,7 +1236,7 @@ <cd:constant name='solution' value='solution'/> <cd:constant name='sort' value='sort'/> <cd:constant name='sorttype' value='sorttype'/> - <cd:constant name='source' value='sursa'/> + <cd:constant name='source' value='source'/> <cd:constant name='space' value='spatiu'/> <cd:constant name='spaceafter' value='spatiudupa'/> <cd:constant name='spaceafterside' value='spaceafterside'/> @@ -1286,6 +1287,7 @@ <cd:constant name='synonymcommand' value='synonymcommand'/> <cd:constant name='synonymstyle' value='stilsinonim'/> <cd:constant name='tab' value='tab'/> + <cd:constant name='target' value='target'/> <cd:constant name='text' value='text'/> <cd:constant name='textalign' value='textalign'/> <cd:constant name='textalternative' value='textalternative'/> diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index c42285235..f4d50e351 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-12-25 00:55 +-- merge date : 2021-12-30 19:00 do -- begin closure to overcome local limits and interference |