summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2019-01-03 20:16:56 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2019-01-03 20:16:56 +0100
commitb04dda4c73d0f71e78f1fd4979ef04c7e9a669ed (patch)
tree4a53c427af3bca27aa5dc47f4c06ee71fb2e8508
parentb28de538b3b4dc7acda5eb9eefc7a7d68c8fb49f (diff)
downloadcontext-b04dda4c73d0f71e78f1fd4979ef04c7e9a669ed.tar.gz
2019-01-03 19:35:00
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-context.lua2
-rw-r--r--context/data/scite/context/lexers/data/scite-context-data-metafun.lua4
-rw-r--r--context/data/scite/context/scite-context-data-context.properties247
-rw-r--r--context/data/scite/context/scite-context-data-metafun.properties16
-rw-r--r--context/data/textadept/context/data/scite-context-data-context.lua2
-rw-r--r--context/data/textadept/context/data/scite-context-data-metafun.lua4
-rw-r--r--doc/context/documents/general/manuals/luatex.pdfbin1515149 -> 1392317 bytes
-rw-r--r--doc/context/documents/general/manuals/tools-mkiv.pdfbin358708 -> 357263 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-cs.pdfbin857630 -> 857730 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-de.pdfbin858150 -> 858234 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-en.pdfbin864455 -> 864786 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-fr.pdfbin856242 -> 856401 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-it.pdfbin861556 -> 861580 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-cs.pdfbin348112 -> 348222 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-de.pdfbin432642 -> 432721 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-en.pdfbin345678 -> 346006 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-fr.pdfbin348765 -> 348927 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-it.pdfbin347299 -> 347327 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-nl.pdfbin346529 -> 346738 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-mapping-ro.pdfbin509899 -> 510034 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-nl.pdfbin851220 -> 851432 bytes
-rw-r--r--doc/context/documents/general/qrcs/setup-ro.pdfbin855459 -> 855593 bytes
-rw-r--r--doc/context/scripts/mkii/ctxtools.man2
-rw-r--r--doc/context/scripts/mkii/imgtopdf.man2
-rw-r--r--doc/context/scripts/mkii/mptopdf.man2
-rw-r--r--doc/context/scripts/mkii/pdftools.man2
-rw-r--r--doc/context/scripts/mkii/pstopdf.man2
-rw-r--r--doc/context/scripts/mkii/rlxtools.man2
-rw-r--r--doc/context/scripts/mkii/texexec.man2
-rw-r--r--doc/context/scripts/mkii/texmfstart.man2
-rw-r--r--doc/context/scripts/mkii/textools.man2
-rw-r--r--doc/context/scripts/mkii/texutil.man2
-rw-r--r--doc/context/scripts/mkii/tmftools.man2
-rw-r--r--doc/context/scripts/mkii/xmltools.man2
-rw-r--r--doc/context/scripts/mkiv/context.man2
-rw-r--r--doc/context/scripts/mkiv/luatools.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-babel.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-base.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-bibtex.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-cache.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-chars.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-check.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-colors.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-context.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-dvi.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-epub.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-evohome.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-fcd.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-flac.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-fonts.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-grep.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-interface.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-metapost.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-metatex.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-modules.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-package.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-pdf.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-plain.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-profile.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-rsync.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-scite.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-server.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-texworks.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-timing.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-tools.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-unicode.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-unzip.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-update.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-watch.man2
-rw-r--r--doc/context/scripts/mkiv/mtx-youless.man2
-rw-r--r--doc/context/scripts/mkiv/mtxrun.man2
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-enhancements.tex17
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-firstpage.tex2
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-fonts.tex20
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-lua.tex2
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-math.tex40
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex-titlepage.tex2
-rw-r--r--doc/context/sources/general/manuals/luatex/luatex.tex12
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-emoji.tex16
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-performance.tex523
-rw-r--r--doc/context/sources/general/manuals/onandon/onandon-variable.tex328
-rw-r--r--doc/context/sources/general/manuals/tools/tools-mkiv.tex921
-rw-r--r--metapost/context/base/mpiv/mp-mlib.mpiv68
-rw-r--r--metapost/context/base/mpiv/mp-tool.mpiv8
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkiv/anch-pgr.mkiv2
-rw-r--r--tex/context/base/mkiv/back-exp.lua171
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/font-nod.lua16
-rw-r--r--tex/context/base/mkiv/font-ots.lua23
-rw-r--r--tex/context/base/mkiv/grph-inc.mkiv65
-rw-r--r--tex/context/base/mkiv/grph-trf.mkiv29
-rw-r--r--tex/context/base/mkiv/lang-hyp.lua17
-rw-r--r--tex/context/base/mkiv/math-tag.lua12
-rw-r--r--tex/context/base/mkiv/mlib-lua.lua17
-rw-r--r--tex/context/base/mkiv/mult-fun.lua4
-rw-r--r--tex/context/base/mkiv/mult-low.lua2
-rw-r--r--tex/context/base/mkiv/node-met.lua1
-rw-r--r--tex/context/base/mkiv/node-nut.lua2
-rw-r--r--tex/context/base/mkiv/node-tex.lua43
-rw-r--r--tex/context/base/mkiv/page-box.mkvi18
-rw-r--r--tex/context/base/mkiv/page-ffl.mkiv2
-rw-r--r--tex/context/base/mkiv/page-imp.mkiv4
-rw-r--r--tex/context/base/mkiv/page-inf.mkiv6
-rw-r--r--tex/context/base/mkiv/page-ini.mkiv2
-rw-r--r--tex/context/base/mkiv/page-lay.mkiv2
-rw-r--r--tex/context/base/mkiv/page-one.mkiv15
-rw-r--r--tex/context/base/mkiv/page-spr.mkiv23
-rw-r--r--tex/context/base/mkiv/page-txt.mkvi22
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin26079 -> 26028 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin269027 -> 269920 bytes
-rw-r--r--tex/context/base/mkiv/syst-ini.mkiv4
-rw-r--r--tex/context/base/mkiv/task-ini.lua1
-rw-r--r--tex/context/base/mkiv/util-evo.lua16
-rw-r--r--tex/context/interface/mkiv/i-context.pdfbin864455 -> 864786 bytes
-rw-r--r--tex/context/interface/mkiv/i-readme.pdfbin60778 -> 60774 bytes
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua4
119 files changed, 1963 insertions, 900 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 f0fd500cf..3194e5402 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", "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", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "texenginefunctionality", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "spaceasciicode", "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", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vcentergroupcode", "mathchoicegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "vadjustgroupcode", "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", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "mathexheight", "mathemwidth", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathsupdisplay", "mathsupnormal", "mathsupcramped", "mathsubnormal", "mathsubcombined", "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" },
- ["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", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthargumenttrue", "sixthargumentfalse", "sixthargumenttrue", "seventhargumentfalse", "seventhargumenttrue", "vkern", "hkern", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "dontcomplain", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "startpickupmath", "stoppickupmath", "reqno", "mathortext", "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", "scratchcounter", "globalscratchcounter", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "groupedcommand", "groupedcommandcs", "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "pickupgroupedcommand", "normalbaselineskip", "normallineskip", "normallineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "next", "nexttoken", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "boxisempty", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "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", "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", "doiftext", "doifelsetext", "doiftextelse", "doifnottext", "tracingall", "tracingnone", "loggingall", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "everyendpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "emspace", "charspace", "nbsp", "crlf", "obeyspaces", "obeylines", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "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", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "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", "protected", "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", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "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", "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", "uncramped", "cramped", "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", "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", "lastlinewidth", "assumelongusagecs", "Umathbotaccent", "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", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalvtop", "naturalhpack", "naturalvpack", "naturaltpack", "reversehbox", "reversevbox", "reversevtop", "reversehpack", "reversevpack", "reversetpack", "frule", "compoundhyphenpenalty", "start", "stop" },
+ ["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", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthargumenttrue", "sixthargumentfalse", "sixthargumenttrue", "seventhargumentfalse", "seventhargumenttrue", "vkern", "hkern", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "dontcomplain", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "startpickupmath", "stoppickupmath", "reqno", "mathortext", "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", "scratchcounter", "globalscratchcounter", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "globalscratchcounterone", "globalscratchcountertwo", "globalscratchcounterthree", "groupedcommand", "groupedcommandcs", "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "pickupgroupedcommand", "normalbaselineskip", "normallineskip", "normallineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "next", "nexttoken", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "boxisempty", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "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", "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", "doiftext", "doifelsetext", "doiftextelse", "doifnottext", "tracingall", "tracingnone", "loggingall", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "everyendpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "emspace", "charspace", "nbsp", "crlf", "obeyspaces", "obeylines", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "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", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "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", "protected", "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", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "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", "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", "uncramped", "cramped", "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", "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", "lastlinewidth", "assumelongusagecs", "Umathbotaccent", "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", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalvtop", "naturalhpack", "naturalvpack", "naturaltpack", "reversehbox", "reversevbox", "reversevtop", "reversehpack", "reversevpack", "reversetpack", "frule", "compoundhyphenpenalty", "start", "stop" },
} \ No newline at end of file
diff --git a/context/data/scite/context/lexers/data/scite-context-data-metafun.lua b/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
index f8def4c52..4d18d3081 100644
--- a/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
+++ b/context/data/scite/context/lexers/data/scite-context-data-metafun.lua
@@ -1,4 +1,4 @@
return {
- ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "notcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "fillup", "eofillup", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "mp", "MP", "luacall" },
- ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "textextoffset", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "ahvariant", "ahdimple", "ahfactor", "ahscale", "metapostversion", "maxdimensions", "drawoptionsfactor", "dq", "sq", "crossingscale", "crossingoption" },
+ ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "notcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "fillup", "eofillup", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "mp", "MP", "luacall", "mirrored", "mirroredabout" },
+ ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "textextoffset", "textextanchor", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "ahvariant", "ahdimple", "ahfactor", "ahscale", "metapostversion", "maxdimensions", "drawoptionsfactor", "dq", "sq", "crossingscale", "crossingoption" },
} \ No newline at end of file
diff --git a/context/data/scite/context/scite-context-data-context.properties b/context/data/scite/context/scite-context-data-context.properties
index bc6a97dbc..30cf41d3e 100644
--- a/context/data/scite/context/scite-context-data-context.properties
+++ b/context/data/scite/context/scite-context-data-context.properties
@@ -112,127 +112,128 @@ filledhboxg filledhboxc filledhboxm filledhboxy filledhboxk \
scratchcounter globalscratchcounter privatescratchcounter scratchdimen globalscratchdimen \
privatescratchdimen scratchskip globalscratchskip privatescratchskip scratchmuskip \
globalscratchmuskip privatescratchmuskip scratchtoks globalscratchtoks privatescratchtoks \
-scratchbox globalscratchbox privatescratchbox groupedcommand groupedcommandcs \
-triggergroupedcommand triggergroupedcommandcs simplegroupedcommand pickupgroupedcommand normalbaselineskip \
-normallineskip normallineskiplimit availablehsize localhsize setlocalhsize \
-distributedhsize hsizefraction next nexttoken nextbox \
-dowithnextbox dowithnextboxcs dowithnextboxcontent dowithnextboxcontentcs flushnextbox \
-boxisempty scratchwidth scratchheight scratchdepth scratchoffset \
-scratchdistance 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 \
-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 doiftext doifelsetext doiftextelse \
-doifnottext tracingall tracingnone loggingall removetoks \
-appendtoks prependtoks appendtotoks prependtotoks to \
-endgraf endpar everyendpar reseteverypar finishpar \
-empty null space quad enspace \
-emspace charspace nbsp crlf obeyspaces \
-obeylines obeyedspace obeyedline obeyedtab obeyedpage \
-normalspace 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 installcorenamespace getvalue getuvalue setvalue \
-setevalue setgvalue setxvalue letvalue letgvalue \
-resetvalue undefinevalue ignorevalue setuvalue setuevalue \
-setugvalue setuxvalue globallet glet 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 protected 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 newconstant setnewconstant setconstant \
-setconstantvalue newconditional settrue setfalse settruevalue \
-setfalsevalue 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 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 uncramped \
-cramped 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 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 lastlinewidth \
-assumelongusagecs Umathbotaccent 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 lesshyphens morehyphens nohyphens dohyphens \
-Ucheckedstartdisplaymath Ucheckedstopdisplaymath break nobreak allowbreak \
-goodbreak nospace nospacing dospacing naturalhbox \
-naturalvbox naturalvtop naturalhpack naturalvpack naturaltpack \
-reversehbox reversevbox reversevtop reversehpack reversevpack \
-reversetpack frule compoundhyphenpenalty start stop
+scratchbox globalscratchbox privatescratchbox globalscratchcounterone globalscratchcountertwo \
+globalscratchcounterthree groupedcommand groupedcommandcs triggergroupedcommand triggergroupedcommandcs \
+simplegroupedcommand pickupgroupedcommand normalbaselineskip normallineskip normallineskiplimit \
+availablehsize localhsize setlocalhsize distributedhsize hsizefraction \
+next nexttoken nextbox dowithnextbox dowithnextboxcs \
+dowithnextboxcontent dowithnextboxcontentcs flushnextbox boxisempty scratchwidth \
+scratchheight scratchdepth scratchoffset scratchdistance 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 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 \
+doiftext doifelsetext doiftextelse doifnottext tracingall \
+tracingnone loggingall removetoks appendtoks prependtoks \
+appendtotoks prependtotoks to endgraf endpar \
+everyendpar reseteverypar finishpar empty null \
+space quad enspace emspace charspace \
+nbsp crlf obeyspaces obeylines obeyedspace \
+obeyedline obeyedtab obeyedpage normalspace 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 installcorenamespace \
+getvalue getuvalue setvalue setevalue setgvalue \
+setxvalue letvalue letgvalue resetvalue undefinevalue \
+ignorevalue setuvalue setuevalue setugvalue setuxvalue \
+globallet glet 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 \
+protected 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 \
+newconstant setnewconstant setconstant setconstantvalue newconditional \
+settrue setfalse settruevalue setfalsevalue 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 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 uncramped cramped 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 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 lastlinewidth assumelongusagecs Umathbotaccent \
+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 lesshyphens \
+morehyphens nohyphens dohyphens Ucheckedstartdisplaymath Ucheckedstopdisplaymath \
+break nobreak allowbreak goodbreak nospace \
+nospacing dospacing naturalhbox naturalvbox naturalvtop \
+naturalhpack naturalvpack naturaltpack reversehbox reversevbox \
+reversevtop reversehpack reversevpack reversetpack frule \
+compoundhyphenpenalty start stop
diff --git a/context/data/scite/context/scite-context-data-metafun.properties b/context/data/scite/context/scite-context-data-metafun.properties
index a0ac3eb58..8830da05c 100644
--- a/context/data/scite/context/scite-context-data-metafun.properties
+++ b/context/data/scite/context/scite-context-data-metafun.properties
@@ -71,14 +71,16 @@ positioninregion positionatanchor wdpart htpart dppart \
texvar texstr inpath pointof leftof \
rightof newhash disposehash inhash tohash \
isarray prefix isobject comment report \
-lua mp MP luacall
+lua mp MP luacall mirrored \
+mirroredabout
keywordclass.metafun.internals=\
nocolormodel greycolormodel graycolormodel rgbcolormodel \
-cmykcolormodel shadefactor textextoffset normaltransparent multiplytransparent \
-screentransparent overlaytransparent softlighttransparent hardlighttransparent colordodgetransparent \
-colorburntransparent darkentransparent lightentransparent differencetransparent exclusiontransparent \
-huetransparent saturationtransparent colortransparent luminositytransparent ahvariant \
-ahdimple ahfactor ahscale metapostversion maxdimensions \
-drawoptionsfactor dq sq crossingscale crossingoption
+cmykcolormodel shadefactor textextoffset textextanchor normaltransparent \
+multiplytransparent screentransparent overlaytransparent softlighttransparent hardlighttransparent \
+colordodgetransparent colorburntransparent darkentransparent lightentransparent differencetransparent \
+exclusiontransparent huetransparent saturationtransparent colortransparent luminositytransparent \
+ahvariant ahdimple ahfactor ahscale metapostversion \
+maxdimensions drawoptionsfactor dq sq crossingscale \
+crossingoption
diff --git a/context/data/textadept/context/data/scite-context-data-context.lua b/context/data/textadept/context/data/scite-context-data-context.lua
index f0fd500cf..3194e5402 100644
--- a/context/data/textadept/context/data/scite-context-data-context.lua
+++ b/context/data/textadept/context/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", "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", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "texenginefunctionality", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "spaceasciicode", "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", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vcentergroupcode", "mathchoicegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "vadjustgroupcode", "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", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "mathexheight", "mathemwidth", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathsupdisplay", "mathsupnormal", "mathsupcramped", "mathsubnormal", "mathsubcombined", "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" },
- ["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", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthargumenttrue", "sixthargumentfalse", "sixthargumenttrue", "seventhargumentfalse", "seventhargumenttrue", "vkern", "hkern", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "dontcomplain", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "startpickupmath", "stoppickupmath", "reqno", "mathortext", "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", "scratchcounter", "globalscratchcounter", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "groupedcommand", "groupedcommandcs", "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "pickupgroupedcommand", "normalbaselineskip", "normallineskip", "normallineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "next", "nexttoken", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "boxisempty", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "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", "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", "doiftext", "doifelsetext", "doiftextelse", "doifnottext", "tracingall", "tracingnone", "loggingall", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "everyendpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "emspace", "charspace", "nbsp", "crlf", "obeyspaces", "obeylines", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "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", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "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", "protected", "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", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "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", "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", "uncramped", "cramped", "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", "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", "lastlinewidth", "assumelongusagecs", "Umathbotaccent", "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", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalvtop", "naturalhpack", "naturalvpack", "naturaltpack", "reversehbox", "reversevbox", "reversevtop", "reversehpack", "reversevpack", "reversetpack", "frule", "compoundhyphenpenalty", "start", "stop" },
+ ["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", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthargumenttrue", "sixthargumentfalse", "sixthargumenttrue", "seventhargumentfalse", "seventhargumenttrue", "vkern", "hkern", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "dontcomplain", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "startpickupmath", "stoppickupmath", "reqno", "mathortext", "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", "scratchcounter", "globalscratchcounter", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "globalscratchcounterone", "globalscratchcountertwo", "globalscratchcounterthree", "groupedcommand", "groupedcommandcs", "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "pickupgroupedcommand", "normalbaselineskip", "normallineskip", "normallineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "next", "nexttoken", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "boxisempty", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "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", "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", "doiftext", "doifelsetext", "doiftextelse", "doifnottext", "tracingall", "tracingnone", "loggingall", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "everyendpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "emspace", "charspace", "nbsp", "crlf", "obeyspaces", "obeylines", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "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", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "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", "protected", "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", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "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", "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", "uncramped", "cramped", "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", "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", "lastlinewidth", "assumelongusagecs", "Umathbotaccent", "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", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalvtop", "naturalhpack", "naturalvpack", "naturaltpack", "reversehbox", "reversevbox", "reversevtop", "reversehpack", "reversevpack", "reversetpack", "frule", "compoundhyphenpenalty", "start", "stop" },
} \ No newline at end of file
diff --git a/context/data/textadept/context/data/scite-context-data-metafun.lua b/context/data/textadept/context/data/scite-context-data-metafun.lua
index f8def4c52..4d18d3081 100644
--- a/context/data/textadept/context/data/scite-context-data-metafun.lua
+++ b/context/data/textadept/context/data/scite-context-data-metafun.lua
@@ -1,4 +1,4 @@
return {
- ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "notcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "fillup", "eofillup", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "mp", "MP", "luacall" },
- ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "textextoffset", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "ahvariant", "ahdimple", "ahfactor", "ahscale", "metapostversion", "maxdimensions", "drawoptionsfactor", "dq", "sq", "crossingscale", "crossingoption" },
+ ["commands"]={ "loadfile", "loadimage", "loadmodule", "dispose", "nothing", "transparency", "tolist", "topath", "tocycle", "sqr", "log", "ln", "exp", "inv", "pow", "pi", "radian", "tand", "cotd", "sin", "cos", "tan", "cot", "atan", "asin", "acos", "invsin", "invcos", "invtan", "acosh", "asinh", "sinh", "cosh", "tanh", "zmod", "paired", "tripled", "unitcircle", "fulldiamond", "unitdiamond", "fullsquare", "unittriangle", "fulltriangle", "llcircle", "lrcircle", "urcircle", "ulcircle", "tcircle", "bcircle", "lcircle", "rcircle", "lltriangle", "lrtriangle", "urtriangle", "ultriangle", "uptriangle", "downtriangle", "lefttriangle", "righttriangle", "triangle", "smoothed", "cornered", "superellipsed", "randomized", "randomizedcontrols", "squeezed", "enlonged", "shortened", "punked", "curved", "unspiked", "simplified", "blownup", "stretched", "enlarged", "leftenlarged", "topenlarged", "rightenlarged", "bottomenlarged", "crossed", "laddered", "randomshifted", "interpolated", "perpendicular", "paralleled", "cutends", "peepholed", "llenlarged", "lrenlarged", "urenlarged", "ulenlarged", "llmoved", "lrmoved", "urmoved", "ulmoved", "rightarrow", "leftarrow", "centerarrow", "drawdoublearrows", "boundingbox", "innerboundingbox", "outerboundingbox", "pushboundingbox", "popboundingbox", "boundingradius", "boundingcircle", "boundingpoint", "crossingunder", "insideof", "outsideof", "bottomboundary", "leftboundary", "topboundary", "rightboundary", "xsized", "ysized", "xysized", "sized", "xyscaled", "intersection_point", "intersection_found", "penpoint", "bbwidth", "bbheight", "withshade", "withcircularshade", "withlinearshade", "defineshade", "shaded", "shadedinto", "withshadecolors", "withshadedomain", "withshademethod", "withshadefactor", "withshadevector", "withshadecenter", "withshadedirection", "withshaderadius", "withshadetransform", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "cmyk", "spotcolor", "multitonecolor", "namedcolor", "drawfill", "undrawfill", "inverted", "uncolored", "softened", "grayed", "greyed", "onlayer", "along", "graphictext", "loadfigure", "externalfigure", "figure", "register", "outlinetext", "filloutlinetext", "drawoutlinetext", "outlinetexttopath", "checkedbounds", "checkbounds", "strut", "rule", "withmask", "bitmapimage", "colordecimals", "ddecimal", "dddecimal", "ddddecimal", "colordecimalslist", "textext", "thetextext", "rawtextext", "textextoffset", "texbox", "thetexbox", "rawtexbox", "istextext", "notcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "property", "properties", "withproperties", "asgroup", "infont", "space", "crlf", "dquote", "percent", "SPACE", "CRLF", "DQUOTE", "PERCENT", "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", "clearxy", "unitvector", "center", "epsed", "anchored", "originpath", "infinite", "break", "xstretched", "ystretched", "snapped", "pathconnectors", "function", "constructedfunction", "constructedpath", "constructedpairs", "straightfunction", "straightpath", "straightpairs", "curvedfunction", "curvedpath", "curvedpairs", "evenly", "oddly", "condition", "pushcurrentpicture", "popcurrentpicture", "arrowpath", "resetarrows", "tensecircle", "roundedsquare", "colortype", "whitecolor", "blackcolor", "basiccolors", "complementary", "complemented", "resolvedcolor", "normalfill", "normaldraw", "visualizepaths", "detailpaths", "naturalizepaths", "drawboundary", "drawwholepath", "drawpathonly", "visualizeddraw", "visualizedfill", "detaileddraw", "draworigin", "drawboundingbox", "drawpath", "drawpoint", "drawpoints", "drawcontrolpoints", "drawcontrollines", "drawpointlabels", "drawlineoptions", "drawpointoptions", "drawcontroloptions", "drawlabeloptions", "draworiginoptions", "drawboundoptions", "drawpathoptions", "resetdrawoptions", "undashed", "pencilled", "decorated", "redecorated", "undecorated", "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", "eofill", "eoclip", "nofill", "fillup", "eofillup", "area", "addbackground", "shadedup", "shadeddown", "shadedleft", "shadedright", "sortlist", "copylist", "shapedlist", "listtocurves", "listtolines", "listsize", "listlast", "uniquelist", "circularpath", "squarepath", "linearpath", "theoffset", "texmode", "systemmode", "texvar", "texstr", "isarray", "prefix", "dimension", "getmacro", "getdimen", "getcount", "gettoks", "setmacro", "setdimen", "setcount", "settoks", "positionpath", "positioncurve", "positionxy", "positionpxy", "positionwhd", "positionpage", "positionregion", "positionbox", "positionanchor", "positioninregion", "positionatanchor", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "newhash", "disposehash", "inhash", "tohash", "isarray", "prefix", "isobject", "comment", "report", "lua", "mp", "MP", "luacall", "mirrored", "mirroredabout" },
+ ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "textextoffset", "textextanchor", "normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent", "softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent", "darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent", "huetransparent", "saturationtransparent", "colortransparent", "luminositytransparent", "ahvariant", "ahdimple", "ahfactor", "ahscale", "metapostversion", "maxdimensions", "drawoptionsfactor", "dq", "sq", "crossingscale", "crossingoption" },
} \ No newline at end of file
diff --git a/doc/context/documents/general/manuals/luatex.pdf b/doc/context/documents/general/manuals/luatex.pdf
index 94212215a..909511695 100644
--- a/doc/context/documents/general/manuals/luatex.pdf
+++ b/doc/context/documents/general/manuals/luatex.pdf
Binary files differ
diff --git a/doc/context/documents/general/manuals/tools-mkiv.pdf b/doc/context/documents/general/manuals/tools-mkiv.pdf
index 1da11dcb0..6cde31552 100644
--- a/doc/context/documents/general/manuals/tools-mkiv.pdf
+++ b/doc/context/documents/general/manuals/tools-mkiv.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
index d3d63e1d7..a4419cbac 100644
--- a/doc/context/documents/general/qrcs/setup-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf
index 61a014851..1307192cc 100644
--- a/doc/context/documents/general/qrcs/setup-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf
index 4d99b4f4d..870816228 100644
--- a/doc/context/documents/general/qrcs/setup-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf
index 91ffb38cb..a33afa9db 100644
--- a/doc/context/documents/general/qrcs/setup-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf
index 55eb43da2..b043eabf5 100644
--- a/doc/context/documents/general/qrcs/setup-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
index 798ce36bd..93b4b50a0 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-cs.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-de.pdf b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
index f735d49a7..731c4f84e 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-de.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-de.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-en.pdf b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
index 4397f2eca..524fff8a5 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-en.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-en.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
index d55722e0c..3ca020d87 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-fr.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-it.pdf b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
index 68d5c2b31..8e77b7749 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-it.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-it.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
index 64bd20d1c..700c20639 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
index 44ead9937..4a1cb0bf2 100644
--- a/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-mapping-ro.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
index 1acc51880..dd2098318 100644
--- a/doc/context/documents/general/qrcs/setup-nl.pdf
+++ b/doc/context/documents/general/qrcs/setup-nl.pdf
Binary files differ
diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf
index 85210819f..597703202 100644
--- a/doc/context/documents/general/qrcs/setup-ro.pdf
+++ b/doc/context/documents/general/qrcs/setup-ro.pdf
Binary files differ
diff --git a/doc/context/scripts/mkii/ctxtools.man b/doc/context/scripts/mkii/ctxtools.man
index 54a0a442c..374ffcc80 100644
--- a/doc/context/scripts/mkii/ctxtools.man
+++ b/doc/context/scripts/mkii/ctxtools.man
@@ -1,4 +1,4 @@
-.TH "ctxtools" "1" "01-01-2018" "version 1.3.5" "CtxTools"
+.TH "ctxtools" "1" "01-01-2019" "version 1.3.5" "CtxTools"
.SH NAME
.B ctxtools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/imgtopdf.man b/doc/context/scripts/mkii/imgtopdf.man
index 11cc46f95..033d5a1ab 100644
--- a/doc/context/scripts/mkii/imgtopdf.man
+++ b/doc/context/scripts/mkii/imgtopdf.man
@@ -1,4 +1,4 @@
-.TH "imgtopdf" "1" "01-01-2018" "version 1.1.2" "ImgToPdf"
+.TH "imgtopdf" "1" "01-01-2019" "version 1.1.2" "ImgToPdf"
.SH NAME
.B imgtopdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/mptopdf.man b/doc/context/scripts/mkii/mptopdf.man
index c6f4655e0..56be81806 100644
--- a/doc/context/scripts/mkii/mptopdf.man
+++ b/doc/context/scripts/mkii/mptopdf.man
@@ -1,4 +1,4 @@
-.TH "mptopdf" "1" "01-01-2018" "version 1.4.1" "convert MetaPost figures to PDF"
+.TH "mptopdf" "1" "01-01-2019" "version 1.4.1" "convert MetaPost figures to PDF"
.SH NAME
.B mptopdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/pdftools.man b/doc/context/scripts/mkii/pdftools.man
index 556035a0f..910bce660 100644
--- a/doc/context/scripts/mkii/pdftools.man
+++ b/doc/context/scripts/mkii/pdftools.man
@@ -1,4 +1,4 @@
-.TH "pdftools" "1" "01-01-2018" "version 1.2.1" "PDFTools"
+.TH "pdftools" "1" "01-01-2019" "version 1.2.1" "PDFTools"
.SH NAME
.B pdftools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/pstopdf.man b/doc/context/scripts/mkii/pstopdf.man
index 1502fa168..607fa1112 100644
--- a/doc/context/scripts/mkii/pstopdf.man
+++ b/doc/context/scripts/mkii/pstopdf.man
@@ -1,4 +1,4 @@
-.TH "pstopdf" "1" "01-01-2018" "version 2.0.1" "PStoPDF"
+.TH "pstopdf" "1" "01-01-2019" "version 2.0.1" "PStoPDF"
.SH NAME
.B pstopdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/rlxtools.man b/doc/context/scripts/mkii/rlxtools.man
index 56bc3c690..d2a128b41 100644
--- a/doc/context/scripts/mkii/rlxtools.man
+++ b/doc/context/scripts/mkii/rlxtools.man
@@ -1,4 +1,4 @@
-.TH "rlxtools" "1" "01-01-2018" "version 1.0.1" "RlxTools"
+.TH "rlxtools" "1" "01-01-2019" "version 1.0.1" "RlxTools"
.SH NAME
.B rlxtools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/texexec.man b/doc/context/scripts/mkii/texexec.man
index 8de194d39..d6b057b65 100644
--- a/doc/context/scripts/mkii/texexec.man
+++ b/doc/context/scripts/mkii/texexec.man
@@ -1,4 +1,4 @@
-.TH "texexec" "1" "01-01-2018" "version 6.2.1" "TeXExec"
+.TH "texexec" "1" "01-01-2019" "version 6.2.1" "TeXExec"
.SH NAME
.B texexec
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/texmfstart.man b/doc/context/scripts/mkii/texmfstart.man
index 581e1754c..70dd035c4 100644
--- a/doc/context/scripts/mkii/texmfstart.man
+++ b/doc/context/scripts/mkii/texmfstart.man
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2018" "version 1.33" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2019" "version 1.33" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/textools.man b/doc/context/scripts/mkii/textools.man
index d355ccf5d..8fad158af 100644
--- a/doc/context/scripts/mkii/textools.man
+++ b/doc/context/scripts/mkii/textools.man
@@ -1,4 +1,4 @@
-.TH "textools" "1" "01-01-2018" "version 1.3.1" "TeXTools"
+.TH "textools" "1" "01-01-2019" "version 1.3.1" "TeXTools"
.SH NAME
.B textools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/texutil.man b/doc/context/scripts/mkii/texutil.man
index 918660e45..cad1b72e8 100644
--- a/doc/context/scripts/mkii/texutil.man
+++ b/doc/context/scripts/mkii/texutil.man
@@ -1,4 +1,4 @@
-.TH "texutil" "1" "01-01-2018" "version 9.1.0" "TeXUtil"
+.TH "texutil" "1" "01-01-2019" "version 9.1.0" "TeXUtil"
.SH NAME
.B texutil
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/tmftools.man b/doc/context/scripts/mkii/tmftools.man
index 68550bb00..465579ded 100644
--- a/doc/context/scripts/mkii/tmftools.man
+++ b/doc/context/scripts/mkii/tmftools.man
@@ -1,4 +1,4 @@
-.TH "tmftools" "1" "01-01-2018" "version 1.1.0" "TMFTools"
+.TH "tmftools" "1" "01-01-2019" "version 1.1.0" "TMFTools"
.SH NAME
.B tmftools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkii/xmltools.man b/doc/context/scripts/mkii/xmltools.man
index aacd5ee78..d3ed28a7a 100644
--- a/doc/context/scripts/mkii/xmltools.man
+++ b/doc/context/scripts/mkii/xmltools.man
@@ -1,4 +1,4 @@
-.TH "xmltools" "1" "01-01-2018" "version 1.2.2" "XMLTools"
+.TH "xmltools" "1" "01-01-2019" "version 1.2.2" "XMLTools"
.SH NAME
.B xmltools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/context.man b/doc/context/scripts/mkiv/context.man
index de457caa9..eed6a5723 100644
--- a/doc/context/scripts/mkiv/context.man
+++ b/doc/context/scripts/mkiv/context.man
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2018" "version 1.01" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2019" "version 1.01" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/luatools.man b/doc/context/scripts/mkiv/luatools.man
index 8cdcf0fd6..6750af537 100644
--- a/doc/context/scripts/mkiv/luatools.man
+++ b/doc/context/scripts/mkiv/luatools.man
@@ -1,4 +1,4 @@
-.TH "luatools" "1" "01-01-2018" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "luatools" "1" "01-01-2019" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B luatools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-babel.man b/doc/context/scripts/mkiv/mtx-babel.man
index 712911333..68b94478d 100644
--- a/doc/context/scripts/mkiv/mtx-babel.man
+++ b/doc/context/scripts/mkiv/mtx-babel.man
@@ -1,4 +1,4 @@
-.TH "mtx-babel" "1" "01-01-2018" "version 1.20" "Babel Input To UTF Conversion"
+.TH "mtx-babel" "1" "01-01-2019" "version 1.20" "Babel Input To UTF Conversion"
.SH NAME
.B mtx-babel
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-base.man b/doc/context/scripts/mkiv/mtx-base.man
index c38347353..757537b1d 100644
--- a/doc/context/scripts/mkiv/mtx-base.man
+++ b/doc/context/scripts/mkiv/mtx-base.man
@@ -1,4 +1,4 @@
-.TH "mtx-base" "1" "01-01-2018" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
+.TH "mtx-base" "1" "01-01-2019" "version 1.35" "ConTeXt TDS Management Tool (aka luatools)"
.SH NAME
.B mtx-base
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-bibtex.man b/doc/context/scripts/mkiv/mtx-bibtex.man
index 9553b900d..a2ddce859 100644
--- a/doc/context/scripts/mkiv/mtx-bibtex.man
+++ b/doc/context/scripts/mkiv/mtx-bibtex.man
@@ -1,4 +1,4 @@
-.TH "mtx-bibtex" "1" "01-01-2018" "version 1.00" "bibtex helpers"
+.TH "mtx-bibtex" "1" "01-01-2019" "version 1.00" "bibtex helpers"
.SH NAME
.B mtx-bibtex
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-cache.man b/doc/context/scripts/mkiv/mtx-cache.man
index 188e72078..e659dd3b8 100644
--- a/doc/context/scripts/mkiv/mtx-cache.man
+++ b/doc/context/scripts/mkiv/mtx-cache.man
@@ -1,4 +1,4 @@
-.TH "mtx-cache" "1" "01-01-2018" "version 0.10" "ConTeXt & MetaTeX Cache Management"
+.TH "mtx-cache" "1" "01-01-2019" "version 0.10" "ConTeXt & MetaTeX Cache Management"
.SH NAME
.B mtx-cache
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-chars.man b/doc/context/scripts/mkiv/mtx-chars.man
index 8914c9ed5..dd6c3c6ca 100644
--- a/doc/context/scripts/mkiv/mtx-chars.man
+++ b/doc/context/scripts/mkiv/mtx-chars.man
@@ -1,4 +1,4 @@
-.TH "mtx-chars" "1" "01-01-2018" "version 0.10" "MkII Character Table Generators"
+.TH "mtx-chars" "1" "01-01-2019" "version 0.10" "MkII Character Table Generators"
.SH NAME
.B mtx-chars
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-check.man b/doc/context/scripts/mkiv/mtx-check.man
index 9c1f02a49..6331a2e53 100644
--- a/doc/context/scripts/mkiv/mtx-check.man
+++ b/doc/context/scripts/mkiv/mtx-check.man
@@ -1,4 +1,4 @@
-.TH "mtx-check" "1" "01-01-2018" "version 0.10" "Basic ConTeXt Syntax Checking"
+.TH "mtx-check" "1" "01-01-2019" "version 0.10" "Basic ConTeXt Syntax Checking"
.SH NAME
.B mtx-check
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-colors.man b/doc/context/scripts/mkiv/mtx-colors.man
index de271e01b..4ef9fab0b 100644
--- a/doc/context/scripts/mkiv/mtx-colors.man
+++ b/doc/context/scripts/mkiv/mtx-colors.man
@@ -1,4 +1,4 @@
-.TH "mtx-colors" "1" "01-01-2018" "version 0.10" "ConTeXt Color Management"
+.TH "mtx-colors" "1" "01-01-2019" "version 0.10" "ConTeXt Color Management"
.SH NAME
.B mtx-colors
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-context.man b/doc/context/scripts/mkiv/mtx-context.man
index de457caa9..eed6a5723 100644
--- a/doc/context/scripts/mkiv/mtx-context.man
+++ b/doc/context/scripts/mkiv/mtx-context.man
@@ -1,4 +1,4 @@
-.TH "mtx-context" "1" "01-01-2018" "version 1.01" "ConTeXt Process Management"
+.TH "mtx-context" "1" "01-01-2019" "version 1.01" "ConTeXt Process Management"
.SH NAME
.B mtx-context
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-dvi.man b/doc/context/scripts/mkiv/mtx-dvi.man
index 29c5dd772..e16f2d5b6 100644
--- a/doc/context/scripts/mkiv/mtx-dvi.man
+++ b/doc/context/scripts/mkiv/mtx-dvi.man
@@ -1,4 +1,4 @@
-.TH "mtx-dvi" "1" "01-01-2018" "version 0.01" "ConTeXt DVI Helpers"
+.TH "mtx-dvi" "1" "01-01-2019" "version 0.01" "ConTeXt DVI Helpers"
.SH NAME
.B mtx-dvi
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-epub.man b/doc/context/scripts/mkiv/mtx-epub.man
index 3e6875204..ffd6d78ed 100644
--- a/doc/context/scripts/mkiv/mtx-epub.man
+++ b/doc/context/scripts/mkiv/mtx-epub.man
@@ -1,4 +1,4 @@
-.TH "mtx-epub" "1" "01-01-2018" "version 1.10" "ConTeXt EPUB Helpers"
+.TH "mtx-epub" "1" "01-01-2019" "version 1.10" "ConTeXt EPUB Helpers"
.SH NAME
.B mtx-epub
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-evohome.man b/doc/context/scripts/mkiv/mtx-evohome.man
index 2bc272eda..61355fec1 100644
--- a/doc/context/scripts/mkiv/mtx-evohome.man
+++ b/doc/context/scripts/mkiv/mtx-evohome.man
@@ -1,4 +1,4 @@
-.TH "mtx-evohome" "1" "01-01-2018" "version 1.00" "Evohome Fetcher"
+.TH "mtx-evohome" "1" "01-01-2019" "version 1.00" "Evohome Fetcher"
.SH NAME
.B mtx-evohome
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-fcd.man b/doc/context/scripts/mkiv/mtx-fcd.man
index 7b668b091..65f21761d 100644
--- a/doc/context/scripts/mkiv/mtx-fcd.man
+++ b/doc/context/scripts/mkiv/mtx-fcd.man
@@ -1,4 +1,4 @@
-.TH "mtx-fcd" "1" "01-01-2018" "version 1.00" "Fast Directory Change"
+.TH "mtx-fcd" "1" "01-01-2019" "version 1.00" "Fast Directory Change"
.SH NAME
.B mtx-fcd
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-flac.man b/doc/context/scripts/mkiv/mtx-flac.man
index 02c977d76..26acb7e41 100644
--- a/doc/context/scripts/mkiv/mtx-flac.man
+++ b/doc/context/scripts/mkiv/mtx-flac.man
@@ -1,4 +1,4 @@
-.TH "mtx-flac" "1" "01-01-2018" "version 0.10" "ConTeXt Flac Helpers"
+.TH "mtx-flac" "1" "01-01-2019" "version 0.10" "ConTeXt Flac Helpers"
.SH NAME
.B mtx-flac
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-fonts.man b/doc/context/scripts/mkiv/mtx-fonts.man
index c27731e33..a65915e72 100644
--- a/doc/context/scripts/mkiv/mtx-fonts.man
+++ b/doc/context/scripts/mkiv/mtx-fonts.man
@@ -1,4 +1,4 @@
-.TH "mtx-fonts" "1" "01-01-2018" "version 1.00" "ConTeXt Font Database Management"
+.TH "mtx-fonts" "1" "01-01-2019" "version 1.00" "ConTeXt Font Database Management"
.SH NAME
.B mtx-fonts
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-grep.man b/doc/context/scripts/mkiv/mtx-grep.man
index 19675cc51..cd7d52735 100644
--- a/doc/context/scripts/mkiv/mtx-grep.man
+++ b/doc/context/scripts/mkiv/mtx-grep.man
@@ -1,4 +1,4 @@
-.TH "mtx-grep" "1" "01-01-2018" "version 0.10" "Simple Grepper"
+.TH "mtx-grep" "1" "01-01-2019" "version 0.10" "Simple Grepper"
.SH NAME
.B mtx-grep
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-interface.man b/doc/context/scripts/mkiv/mtx-interface.man
index 2dbba85df..026a5f67b 100644
--- a/doc/context/scripts/mkiv/mtx-interface.man
+++ b/doc/context/scripts/mkiv/mtx-interface.man
@@ -1,4 +1,4 @@
-.TH "mtx-interface" "1" "01-01-2018" "version 0.13" "ConTeXt Interface Related Goodies"
+.TH "mtx-interface" "1" "01-01-2019" "version 0.13" "ConTeXt Interface Related Goodies"
.SH NAME
.B mtx-interface
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-metapost.man b/doc/context/scripts/mkiv/mtx-metapost.man
index e8e7b465e..11586b727 100644
--- a/doc/context/scripts/mkiv/mtx-metapost.man
+++ b/doc/context/scripts/mkiv/mtx-metapost.man
@@ -1,4 +1,4 @@
-.TH "mtx-metapost" "1" "01-01-2018" "version 0.10" "MetaPost to PDF processor"
+.TH "mtx-metapost" "1" "01-01-2019" "version 0.10" "MetaPost to PDF processor"
.SH NAME
.B mtx-metapost
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-metatex.man b/doc/context/scripts/mkiv/mtx-metatex.man
index fd45e312f..d98207ba8 100644
--- a/doc/context/scripts/mkiv/mtx-metatex.man
+++ b/doc/context/scripts/mkiv/mtx-metatex.man
@@ -1,4 +1,4 @@
-.TH "mtx-metatex" "1" "01-01-2018" "version 0.10" "MetaTeX Process Management"
+.TH "mtx-metatex" "1" "01-01-2019" "version 0.10" "MetaTeX Process Management"
.SH NAME
.B mtx-metatex
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-modules.man b/doc/context/scripts/mkiv/mtx-modules.man
index 2ca40f90f..56172bd0d 100644
--- a/doc/context/scripts/mkiv/mtx-modules.man
+++ b/doc/context/scripts/mkiv/mtx-modules.man
@@ -1,4 +1,4 @@
-.TH "mtx-modules" "1" "01-01-2018" "version 1.00" "ConTeXt Module Documentation Generators"
+.TH "mtx-modules" "1" "01-01-2019" "version 1.00" "ConTeXt Module Documentation Generators"
.SH NAME
.B mtx-modules
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-package.man b/doc/context/scripts/mkiv/mtx-package.man
index 958e4a975..d0bbd6398 100644
--- a/doc/context/scripts/mkiv/mtx-package.man
+++ b/doc/context/scripts/mkiv/mtx-package.man
@@ -1,4 +1,4 @@
-.TH "mtx-package" "1" "01-01-2018" "version 0.10" "Distribution Related Goodies"
+.TH "mtx-package" "1" "01-01-2019" "version 0.10" "Distribution Related Goodies"
.SH NAME
.B mtx-package
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-pdf.man b/doc/context/scripts/mkiv/mtx-pdf.man
index 8da8b5ea3..8595fcbaf 100644
--- a/doc/context/scripts/mkiv/mtx-pdf.man
+++ b/doc/context/scripts/mkiv/mtx-pdf.man
@@ -1,4 +1,4 @@
-.TH "mtx-pdf" "1" "01-01-2018" "version 0.10" "ConTeXt PDF Helpers"
+.TH "mtx-pdf" "1" "01-01-2019" "version 0.10" "ConTeXt PDF Helpers"
.SH NAME
.B mtx-pdf
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-plain.man b/doc/context/scripts/mkiv/mtx-plain.man
index fbdf301f7..a242a4a24 100644
--- a/doc/context/scripts/mkiv/mtx-plain.man
+++ b/doc/context/scripts/mkiv/mtx-plain.man
@@ -1,4 +1,4 @@
-.TH "mtx-plain" "1" "01-01-2018" "version 1.00" "Plain TeX Runner"
+.TH "mtx-plain" "1" "01-01-2019" "version 1.00" "Plain TeX Runner"
.SH NAME
.B mtx-plain
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-profile.man b/doc/context/scripts/mkiv/mtx-profile.man
index fefc60e74..1e38a3b5a 100644
--- a/doc/context/scripts/mkiv/mtx-profile.man
+++ b/doc/context/scripts/mkiv/mtx-profile.man
@@ -1,4 +1,4 @@
-.TH "mtx-profile" "1" "01-01-2018" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
+.TH "mtx-profile" "1" "01-01-2019" "version 1.00" "ConTeXt MkIV LuaTeX Profiler"
.SH NAME
.B mtx-profile
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-rsync.man b/doc/context/scripts/mkiv/mtx-rsync.man
index 6b7e6e8bc..49a139cb4 100644
--- a/doc/context/scripts/mkiv/mtx-rsync.man
+++ b/doc/context/scripts/mkiv/mtx-rsync.man
@@ -1,4 +1,4 @@
-.TH "mtx-rsync" "1" "01-01-2018" "version 0.10" "Rsync Helpers"
+.TH "mtx-rsync" "1" "01-01-2019" "version 0.10" "Rsync Helpers"
.SH NAME
.B mtx-rsync
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-scite.man b/doc/context/scripts/mkiv/mtx-scite.man
index 58733624d..a37d38fde 100644
--- a/doc/context/scripts/mkiv/mtx-scite.man
+++ b/doc/context/scripts/mkiv/mtx-scite.man
@@ -1,4 +1,4 @@
-.TH "mtx-scite" "1" "01-01-2018" "version 1.00" "Scite Helper Script"
+.TH "mtx-scite" "1" "01-01-2019" "version 1.00" "Scite Helper Script"
.SH NAME
.B mtx-scite
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-server.man b/doc/context/scripts/mkiv/mtx-server.man
index dfda87e71..da0c4c05d 100644
--- a/doc/context/scripts/mkiv/mtx-server.man
+++ b/doc/context/scripts/mkiv/mtx-server.man
@@ -1,4 +1,4 @@
-.TH "mtx-server" "1" "01-01-2018" "version 0.10" "Simple Webserver For Helpers"
+.TH "mtx-server" "1" "01-01-2019" "version 0.10" "Simple Webserver For Helpers"
.SH NAME
.B mtx-server
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-texworks.man b/doc/context/scripts/mkiv/mtx-texworks.man
index 1e29cb7db..016aa1f7d 100644
--- a/doc/context/scripts/mkiv/mtx-texworks.man
+++ b/doc/context/scripts/mkiv/mtx-texworks.man
@@ -1,4 +1,4 @@
-.TH "mtx-texworks" "1" "01-01-2018" "version 1.00" "TeXworks Startup Script"
+.TH "mtx-texworks" "1" "01-01-2019" "version 1.00" "TeXworks Startup Script"
.SH NAME
.B mtx-texworks
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-timing.man b/doc/context/scripts/mkiv/mtx-timing.man
index 785c40d78..479506c70 100644
--- a/doc/context/scripts/mkiv/mtx-timing.man
+++ b/doc/context/scripts/mkiv/mtx-timing.man
@@ -1,4 +1,4 @@
-.TH "mtx-timing" "1" "01-01-2018" "version 0.10" "ConTeXt Timing Tools"
+.TH "mtx-timing" "1" "01-01-2019" "version 0.10" "ConTeXt Timing Tools"
.SH NAME
.B mtx-timing
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-tools.man b/doc/context/scripts/mkiv/mtx-tools.man
index d3a92138d..1cee94d9d 100644
--- a/doc/context/scripts/mkiv/mtx-tools.man
+++ b/doc/context/scripts/mkiv/mtx-tools.man
@@ -1,4 +1,4 @@
-.TH "mtx-tools" "1" "01-01-2018" "version 1.01" "Some File Related Goodies"
+.TH "mtx-tools" "1" "01-01-2019" "version 1.01" "Some File Related Goodies"
.SH NAME
.B mtx-tools
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-unicode.man b/doc/context/scripts/mkiv/mtx-unicode.man
index a4665374f..e82ee65ee 100644
--- a/doc/context/scripts/mkiv/mtx-unicode.man
+++ b/doc/context/scripts/mkiv/mtx-unicode.man
@@ -1,4 +1,4 @@
-.TH "mtx-unicode" "1" "01-01-2018" "version 1.02" "Checker for char-dat.lua"
+.TH "mtx-unicode" "1" "01-01-2019" "version 1.02" "Checker for char-dat.lua"
.SH NAME
.B mtx-unicode
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-unzip.man b/doc/context/scripts/mkiv/mtx-unzip.man
index f2a382ad1..f0243c38c 100644
--- a/doc/context/scripts/mkiv/mtx-unzip.man
+++ b/doc/context/scripts/mkiv/mtx-unzip.man
@@ -1,4 +1,4 @@
-.TH "mtx-unzip" "1" "01-01-2018" "version 0.10" "Simple Unzipper"
+.TH "mtx-unzip" "1" "01-01-2019" "version 0.10" "Simple Unzipper"
.SH NAME
.B mtx-unzip
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-update.man b/doc/context/scripts/mkiv/mtx-update.man
index 79743d7d5..4ec518b0d 100644
--- a/doc/context/scripts/mkiv/mtx-update.man
+++ b/doc/context/scripts/mkiv/mtx-update.man
@@ -1,4 +1,4 @@
-.TH "mtx-update" "1" "01-01-2018" "version 1.03" "ConTeXt Minimals Updater"
+.TH "mtx-update" "1" "01-01-2019" "version 1.03" "ConTeXt Minimals Updater"
.SH NAME
.B mtx-update
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-watch.man b/doc/context/scripts/mkiv/mtx-watch.man
index 82dccbb8e..8cc32f4a5 100644
--- a/doc/context/scripts/mkiv/mtx-watch.man
+++ b/doc/context/scripts/mkiv/mtx-watch.man
@@ -1,4 +1,4 @@
-.TH "mtx-watch" "1" "01-01-2018" "version 1.00" "ConTeXt Request Watchdog"
+.TH "mtx-watch" "1" "01-01-2019" "version 1.00" "ConTeXt Request Watchdog"
.SH NAME
.B mtx-watch
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtx-youless.man b/doc/context/scripts/mkiv/mtx-youless.man
index 043edd071..fa650a0b6 100644
--- a/doc/context/scripts/mkiv/mtx-youless.man
+++ b/doc/context/scripts/mkiv/mtx-youless.man
@@ -1,4 +1,4 @@
-.TH "mtx-youless" "1" "01-01-2018" "version 1.100" "youless Fetcher"
+.TH "mtx-youless" "1" "01-01-2019" "version 1.100" "youless Fetcher"
.SH NAME
.B mtx-youless
.SH SYNOPSIS
diff --git a/doc/context/scripts/mkiv/mtxrun.man b/doc/context/scripts/mkiv/mtxrun.man
index 581e1754c..70dd035c4 100644
--- a/doc/context/scripts/mkiv/mtxrun.man
+++ b/doc/context/scripts/mkiv/mtxrun.man
@@ -1,4 +1,4 @@
-.TH "mtxrun" "1" "01-01-2018" "version 1.33" "ConTeXt TDS Runner Tool"
+.TH "mtxrun" "1" "01-01-2019" "version 1.33" "ConTeXt TDS Runner Tool"
.SH NAME
.B mtxrun
.SH SYNOPSIS
diff --git a/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex b/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
index 6b84570e8..0af479dc8 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-enhancements.tex
@@ -53,7 +53,7 @@ chapters on fonts and math we discuss a few more new ones.
\startsubsection[title={Version information}]
-\startsubsubsection {\lpr {luatexbanner}, \lpr {luatexversion} and \lpr {luatexrevision}}
+\startsubsubsection[title={\lpr {luatexbanner}, \lpr {luatexversion} and \lpr {luatexrevision}}]
\topicindex{version}
\topicindex{banner}
@@ -99,7 +99,7 @@ The official \LUATEX\ version is defined as follows:
\stopsubsubsection
-\startsubsubsection{\lpr {formatname}}
+\startsubsubsection[title={\lpr {formatname}}]
\topicindex{format}
@@ -893,7 +893,8 @@ differences are:
\stopsubsection
-\startsubsection[title={\lpr {toksapp}, \lpr {tokspre}, \lpr {etoksapp} and \lpr {etokspre}}]
+\startsubsection[title={\lpr {toksapp}, \lpr {tokspre}, \lpr {etoksapp}, \lpr {etokspre},
+\lpr {gtoksapp}, \lpr {gtokspre}, \lpr {xtoksapp}, \lpr {xtokspre}}]
Instead of:
@@ -908,7 +909,7 @@ you can use:
\stoptyping
The \type {pre} variants prepend instead of append, and the \type {e} variants
-expand the passed general text.
+expand the passed general text. The \type {g} and \type {x} variants are global.
\stopsubsection
@@ -989,7 +990,9 @@ This primitive is similar to:
but faster (only measurable with millions of calls) and probably more convenient
(after all we also have \type {\gdef}).
-\subsubsection{\lpr {expanded}, \lpr {immediateassignment} and \lpr {immediateassigned}}
+\stopsubsection
+
+\startsubsection[title={\lpr {expanded}, \lpr {immediateassignment} and \lpr {immediateassigned}}]
\topicindex {expansion}
@@ -1084,7 +1087,9 @@ The possible error messages are the same as using assignments in preambles of
alignments and after the \prm {accent} command. The supported assignments are the
so called prefixed commands (except box assignments).
-\subsubsection{\lpr {ifcondition}}
+\stopsubsection
+
+\startsubsection[title={\lpr {ifcondition}}]
\topicindex {conditions}
diff --git a/doc/context/sources/general/manuals/luatex/luatex-firstpage.tex b/doc/context/sources/general/manuals/luatex/luatex-firstpage.tex
index aef3902a5..772fbb3fe 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-firstpage.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-firstpage.tex
@@ -6,7 +6,7 @@
\raggedleft
\definedfont[Bold*default at 48pt]
\setupinterlinespace
- \blue Lua\TeX \endgraf Reference \endgraf Manual \endgraf
+ \blue \documentvariable{manual} \endgraf Reference \endgraf Manual \endgraf
\stop
\vfill
diff --git a/doc/context/sources/general/manuals/luatex/luatex-fonts.tex b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
index 6f71877fb..d49c63afe 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-fonts.tex
@@ -6,7 +6,7 @@
\startchapter[reference=fonts,title={Font structure}]
-\section {The font tables}
+\startsection[title={The font tables}]
\topicindex {fonts}
\topicindex {fonts+tables}
@@ -324,7 +324,9 @@ indicates the final insertion point.
The \type {commands} array is explained below.
-\section {Real fonts}
+\stopsection
+
+\startsection[title={Real fonts}]
\topicindex {fonts+real}
\topicindex {fonts+virtual}
@@ -425,7 +427,9 @@ In order to make sure that cut and paste of the final document works okay you ca
best make sure that there is a \type {tounicode} vector enforced. Not all \PDF\
viewers handle this right so take \ACROBAT\ as reference.
-\section[virtualfonts]{Virtual fonts}
+\stopsection
+
+\startsection[reference=virtualfonts,title={Virtual fonts}]
\subsection{The structure}
@@ -632,7 +636,9 @@ Finally, here is a plain \TEX\ input file with a virtual font demonstration:
\typebuffer
-\section{The \type {vf} library}
+\stopsection
+
+\startsection[title={The \type {vf} library}]
The \type {vf} library can be used when \LUA\ code, as defined in the \type
{commands} of the font, is executed. The functions provided are similar as the
@@ -643,7 +649,9 @@ advertised and tested much, if only because it's easy to define an invalid font
(or mess up the \PDF\ stream). Keep in mind that the \LUA\ snippets are executed
each time when a character is output.
-\section{The \type {font} library}
+\stopsection
+
+\startsection[title={The \type {font} library}]
\topicindex {fonts+library}
@@ -843,6 +851,8 @@ value is the index in \type {font.fonts}, the second the font itself, as a \LUA\
table. The indices are listed incrementally, but they do not always form an array
of consecutive numbers: in some cases there can be holes in the sequence.
+\stopsection
+
\stopchapter
\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-lua.tex b/doc/context/sources/general/manuals/luatex/luatex-lua.tex
index 0f7cae3a3..27146d99b 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-lua.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-lua.tex
@@ -248,7 +248,7 @@ check \type {--progname}, or \type {--ini} and \type {--fmt}, if \type
\stopsection
-\startsection{\LUA\ behaviour}
+\startsection[title={\LUA\ behaviour}]
\startsubsection[title={The \LUA\ version}]
diff --git a/doc/context/sources/general/manuals/luatex/luatex-math.tex b/doc/context/sources/general/manuals/luatex/luatex-math.tex
index ad3ce2db3..4623ce706 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-math.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-math.tex
@@ -6,7 +6,7 @@
\startchapter[reference=math,title={Math}]
-\section {Traditional alongside \OPENTYPE}
+\startsection[title={Traditional alongside \OPENTYPE}]
\topicindex {math}
@@ -19,7 +19,9 @@ make it easier to use \OPENTYPE\ math fonts. And finally, there are some
extensions that have been proposed or considered in the past that are now added
to the engine.
-\section{Unicode math characters}
+\stopsection
+
+\startsection[title={Unicode math characters}]
\topicindex {math+\UNICODE}
\topicindex {\UNICODE+math}
@@ -128,7 +130,9 @@ sections:
\LL
\stoptabulate
-\section{Math styles}
+\stopsection
+
+\startsection[title={Math styles}]
\subsection{\lpr {mathstyle}}
@@ -350,7 +354,9 @@ Now we get:
\start\getbuffer[setup,demo]\stop
-\section{Math parameter settings}
+\stopsection
+
+\startsection[title={Math parameter settings}]
\subsection {Many new \lpr {Umath*} primitives}
@@ -568,7 +574,9 @@ Note 9: \type {FractionDelimiterDisplayStyleSize} and \type
{FractionDelimiterSize} do not actually exist in the \quote {standard} \OPENTYPE\
math font Cambria, but were useful enough to be added.
-\section {Math spacing}
+\stopsection
+
+\startsection[title={Math spacing}]
\subsection{Inline surrounding space}
@@ -997,7 +1005,9 @@ use a step to control the size. A value of zero will suppress the gap. The step
is divided by 1000 which is the usual way to mimmick floating point factors in
\TEX.
-\section {Math constructs}
+\stopsection
+
+\startsection[title={Math constructs}]
\subsection {Unscaled fences}
@@ -1337,7 +1347,9 @@ given the \type {noaxis} command can be used to prevent shifting over the axis.
You can influence the final class with the keyword \type {class} which will
influence the spacing. The numbers are the same as for character classes.
-\section {Extracting values}
+\stopsection
+
+\startsection[title={Extracting values}]
\subsection{Codes}
@@ -1394,7 +1406,9 @@ get the length of the last line, the following will often work too:
\relax}
\stoptyping
-\section {Math mode}
+\stopsection
+
+\startsection[title={Math mode}]
\subsection {Verbose versions of single|-|character math commands}
@@ -1454,7 +1468,7 @@ the result of \prm {mathchardef} or \lpr {Umathchardef} are also acceptable in
the horizontal and vertical modes. In those cases, the \prm {textfont} from the
requested math family is used.
-% \section{Math todo}
+% \startsection[title={Math todo}]
%
% The following items are still todo.
%
@@ -1475,8 +1489,12 @@ requested math family is used.
% Support for multi|-|line displays using \MATHML\ style alignment points.
% \stopitem
% \stopitemize
+%
+% \stopsection
-\section {Goodies}
+\stopsection
+
+\startsection[title={Goodies}]
\subsection {Flattening: \lpr {mathflattenmode}}
@@ -1622,6 +1640,8 @@ temporarily introduce with this command this feature is not meant for production
% This option has been introduced as solution for tracker item 604 for fuzzy cases
% around either or not present fraction related settings for new fonts.
+\stopsection
+
\stopchapter
\stopcomponent
diff --git a/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex b/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex
index 9f4913b54..d9ca4b3f9 100644
--- a/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex-titlepage.tex
@@ -22,7 +22,7 @@
[align=middle,
foregroundcolor=white,
frame=off]
- {Lua\TeX\crlf Reference\crlf Manual}
+ {\documentvariable{manual}\crlf Reference\crlf Manual}
\definedfont[Bold*default at 14pt] \setupinterlinespace
diff --git a/doc/context/sources/general/manuals/luatex/luatex.tex b/doc/context/sources/general/manuals/luatex/luatex.tex
index 0067f63f2..1486abd49 100644
--- a/doc/context/sources/general/manuals/luatex/luatex.tex
+++ b/doc/context/sources/general/manuals/luatex/luatex.tex
@@ -30,14 +30,12 @@
% "context --nodates --nocompression luatex" can be used for comparison
% runs, not that we do it
+% todo: all (sub)section to start/stop
+
% \enabledirectives[hyphenator.flatten]
% \setupsynctex[state=start,method=max] % adds 5 pct overhead
-% gtoksapp : looks okay
-% gtokspre : looks okay
-% xtoksapp : looks okay
-% xtokspre : looks okay
% compoundhyphenmode : looks okay
% endlocalcontrol : very experimental
% fixupboxesmode : very experimental
@@ -63,9 +61,9 @@
\stopmode
\startdocument
- [status=experimental,
- version=1.09]
-% [version=1.10]
+ [manual=Lua\TeX,
+ status=experimental,
+ version=1.10]
\startnotmode[*export]
\component luatex-titlepage
diff --git a/doc/context/sources/general/manuals/onandon/onandon-emoji.tex b/doc/context/sources/general/manuals/onandon/onandon-emoji.tex
index 1f67cc528..0a89727a1 100644
--- a/doc/context/sources/general/manuals/onandon/onandon-emoji.tex
+++ b/doc/context/sources/general/manuals/onandon/onandon-emoji.tex
@@ -75,8 +75,8 @@ mentions twice that amount. Currently in \CONTEXT\ we resolve such combinations
when requested.} so imagine what will happen in the future. But, instead of
making a picture for each variant, a different solution has been chosen. For
coloring this seguiemj font uses the (very flexible) stacking technology: a color
-shape is an overlay of colored symbols. The colors are organized in pallets and
-it's no big deal to add additional pallets if needed. Instead of adding
+shape is an overlay of colored symbols. The colors are organized in palettes and
+it's no big deal to add additional palettes if needed. Instead of adding
pre|-|composed shapes (as is needed with bitmaps and \SVG) snippets are used to
build alternative glyphs and these can be combined into new shapes by
substitution and positioning (for that kerns, mark anchoring and distance
@@ -186,11 +186,11 @@ account:
scale too.
\stopitem
\startitem
- How efficient is a shape constructed. In that respect a bitmap or \SVG\ image
+ How efficiently is a shape constructed? In that respect a bitmap or \SVG\ image
is just one entity.
\stopitem
\startitem
- How well can (semi) arbitrary combinations of emoji be provided. Here the
+ How well can a (semi)arbitrary combinations of emoji be provided? Here the
glyph approach wins.
\stopitem
\startitem
@@ -203,17 +203,17 @@ account:
social political reasons.
\stopitem
\startitem
- Are black and white shapes provided alongside color shapes.
+ Are black and white shapes provided alongside color shapes?
\stopitem
\stopitemize
Maybe an \SVG\ or bitmap image can have a lot of detail compared to a stacked
-glyph but, when we're just using pictographic representations, the later is the
+glyph but, when we're just using pictographic representations, the latter is the
best choice.
When I was playing a bit with the skin tone variants and other combinations that
should result in some composed shape, I used the \UNICODE\ test files but I got
-the impression that there are some errors in the test suite, for instance with
+the impression that there were some errors in the test suite, for instance with
respect to modifiers. Maybe the fonts are just doing the wrong thing or maybe
some implement these sequences a bit inconsistent. This will probably improve
over time but the question is if we should intercept issues. I'm not in favour of
@@ -409,7 +409,7 @@ In case you wonder how some of the details above were typeset, there is a module
\NC \type {\ShowEmojiSnippets} \NC show the snippets of a given emoji \NC \NR
\NC \type {\ShowEmojiSnippetsOverlay} \NC show the overlayed snippets of a given emoji \NC \NR
\NC \type {\ShowEmojiGlyphs} \NC show the snippets of a typeset emoji \NC \NR
-\NC \type {\ShowEmojiPalettes} \NC show the color pallets in the current font \NC \NR
+\NC \type {\ShowEmojiPalettes} \NC show the color palletes in the current font \NC \NR
\stoptabulate
Examples of usage are:
diff --git a/doc/context/sources/general/manuals/onandon/onandon-performance.tex b/doc/context/sources/general/manuals/onandon/onandon-performance.tex
index 279383a8c..b1b34443d 100644
--- a/doc/context/sources/general/manuals/onandon/onandon-performance.tex
+++ b/doc/context/sources/general/manuals/onandon/onandon-performance.tex
@@ -28,8 +28,8 @@ So what exactly does performance refer to? If you use \CONTEXT\ there are
probably only two things that matter:
\startitemize[packed]
-\startitem How long does one run take. \stopitem
-\startitem How many runs do I need. \stopitem
+\startitem How long does one run take? \stopitem
+\startitem How many runs do I need? \stopitem
\stopitemize
Processing speed is reported at the end of a run in terms of seconds spent on the
@@ -50,72 +50,74 @@ i7-3840QM as reference. A simple
\stoptext
\stoptyping
-document reports 0.4 seconds but as we wrap the run in an \type {mtxrun}
-management run we have an additional 0.3 overhead (auxiliary file handling, \PDF\
-viewer management, etc). This includes loading the Latin Modern font. With
-\LUAJITTEX\ these times are below 0.3 and 0.2 seconds. It might look like much
-overhead but in an edit|-|preview runs it feels snappy. One can try this:
+document reports 0.4 seconds but, as we wrap the run in an \type {mtxrun}
+management run, we have an additional 0.3 overhead (auxiliary file handling,
+\PDF\ viewer management, etc). This includes loading the Latin Modern font. With
+\LUAJITTEX, these times are below 0.3 and 0.2 seconds. It might look like a lot
+of overhead, but in an edit|-|preview runs it feels snappy. One can try this:
\starttyping
\stoptext
\stoptyping
-which bring down the time to about 0.2 seconds for both engines but as it doesn't
-do anything useful that is is no practice.
+which bring down the time to about 0.2 seconds for both engines but it doesn't
+do anything useful in practice.
-Finishing a document is not that demanding because most gets flushed as we go.
-The more (large) fonts we use, the longer it takes to finish a document but on
+Finishing a document is not that demanding, because most gets flushed as we go.
+The more (large) fonts we use, the longer it takes to finish a document, but, on
the average that time is not worth noticing. The main runtime contribution comes
from processing the pages.
Okay, this is not always true. For instance, if we process a 400 page book from
2500 small \XML\ files with multiple graphics per page, there is a little
-overhead in loading the files and constructing the \XML\ tree as well as in
-inserting the graphics but in such cases one expects a few seconds more runtime. The
-\METAFUN\ manual has some 450 pages with over 2500 runtime generated \METAPOST\
-graphics. It has color, uses quite some fonts, has lots of font switches
-(verbatim too) but still one run takes only 18 seconds in stock \LUATEX\ and less
-that 15 seconds with \LUAJITTEX. Keep these numbers in mind if a non|-|\CONTEXT\
-users barks against the performance tree that his few page mediocre document
-takes 10 seconds to compile: the content, styling, quality of macros and whatever
-one can come up with all plays a role. Personally I find any rate between 10 and
-30 pages per second acceptable, and if I get the lower rate then I normally know
-pretty well that the job is demanding in all kind of aspects.
-
-Over time the \CONTEXT||\LUATEX\ combination, in spite of the fact that more
+overhead in loading the files and in constructing the \XML\ tree as well as in
+inserting the graphics, but in such cases one expects a few seconds longer
+runtime. \METAFUN\ manual has some 450 pages with over 2500 runtime|-|generated
+\METAPOST\ graphics. It has color, uses quite some fonts, has lots of font
+switches (verbatim, too), but, still, one run takes only 18 seconds in stock
+\LUATEX\ and less and less that 15 seconds with \LUAJITTEX. Keep these numbers in
+mind if a non|-|\CONTEXT\ users bark against the performance tree that his few
+page mediocre document takes 10 seconds to compile: the content, styling, quality
+of macros and whatever one can come up with all play a role. Personally I find
+any rate between 10 and 30 pages per second acceptable, and, if I get the lower
+rate, then I normally know pretty well that the job is demanding in all kind of
+aspects.
+
+Over time, the \CONTEXT||\LUATEX\ combination, in spite of the fact that more
functionality has been added, has not become slower. In fact, some subsystems
-have been sped up. For instance font handling is very sensitive for adding
+have been sped up. For instance, font handling is very sensitive to adding
functionality. However, each version so far performed a bit better. Whenever some
neat new trickery was added, at the same time improvements were made thanks to
-more insight in the matter. In practice we're not talking of changes in speed by
+more insight in the matter. In practice, we're not talking of changes in speed by
large factors but more by small percentages. I'm pretty sure that most \CONTEXT\
-users never noticed. Recently a 15\endash30\% speed up (in font handling) was
-realized (for more complex fonts) but only when you use such complex fonts and
-pages full of text you will see a positive impact on the whole run.
+users never noticed. Recently, a 15\endash30\% speed up (in font handling) was
+realized (for more complex fonts), but only when you use such complex fonts and
+pages full of text will you see a positive impact on the whole run.
There is one important factor I didn't mention yet: the efficiency of the
console. You can best check that by making a format (\typ {context --make en}).
When that is done by piping the messages to a file, it takes 3.2 seconds on my
laptop and about the same when done from the editor (\SCITE), maybe because the
\LUATEX\ run and the log pane run on a different thread. When I use the standard
-console it takes 3.8 seconds in Windows 10 Creative update (in older versions it
+console, it takes 3.8 seconds in Windows 10 Creative update (in older versions it
took 4.3 and slightly less when using a console wrapper). The powershell takes
-3.2 seconds which is the same as piping to a file. Interesting is that in Bash on
-Windows it takes 2.8 seconds and 2.6 seconds when piped to a file. Normal runs
-are somewhat slower, but it looks like the 64 bit Linux binary is somewhat faster
-than the 64 bit mingw version. \footnote {Long ago we found that \LUATEX\ is very
-sensitive to for instance the \CPU\ cache so maybe there are some differences due
-to optimization flags and|/|or the fact that bash runs in one thread and all file
-\IO\ in the main windows instance. Who knows.} Anyway, it demonstrates that when
-someone yells a number you need to ask what the conditions where.
-
-At a \CONTEXT\ meeting there has been a presentation about possible speed|-|up of
-a run for instance by using a separate syntax checker to prevent a useless run.
-However, the use case concerned a document that took a minute on the machine
-used, while the same document took a few seconds on mine. At the same meeting we
-also did a comparison of speed for a \LATEX\ run using \PDFTEX\ and the same
-document migrated to \CONTEXT\ \MKIV\ using \LUATEX\ (Harald K\"onigs \XML\
-torture and compatibility test). Contrary to what one might expect, the
+3.2 seconds, which is the same as piping to a file. Interesting is that in Bash
+on Windows, it takes 2.8 seconds and 2.6 seconds when piped to a file. Normal
+runs are somewhat slower, but it looks like the 64 bit Linux binary is somewhat
+faster than the 64 bit mingw version. \footnote {Long ago, we found that \LUATEX\
+is very sensitive to for instance the \CPU\ cache, so maybe there are some
+differences due to optimization flags and|/|or the fact that bash runs in one
+thread, and all file \IO\ takes place in the main Windows instance. Who knows.}
+Anyway, it demonstrates that when someone yells a number you need to ask what the
+conditions were.
+
+At a \CONTEXT\ meeting, there has been a presentation about possible speed|-|up
+of of a run by using, for instance, a separate syntax checker to prevent a
+useless run. However, the use case concerned a document that took a minute on the
+machine used, while the same document took a few seconds on mine. At the same
+meeting, we also did a comparison of speed for a \LATEX\ run using \PDFTEX\ and
+the same document migrated to \CONTEXT\ \MKIV\ using \LUATEX\ (Harald K\"onigs
+\XML\ torture and compatibility test). Contrary to what one might expect, the
\CONTEXT\ run was significantly faster; the resulting document was a few
gigabytes in size.
@@ -126,76 +128,77 @@ gigabytes in size.
I will discuss a few potential bottlenecks next. A complex integrated system like
\CONTEXT\ has lots of components and some can be quite demanding. However, when
something is not used, it has no (or hardly any) impact on performance. Even when
-we spend a lot of time in \LUA\ that is not the reason for a slow|-|down.
+we spend a lot of time in \LUA, that is not the reason for a slow|-|down.
Sometimes using \LUA\ results in a speedup, sometimes it doesn't matter. Complex
-mechanisms like natural tables for instance will not suddenly become less
+mechanisms like natural tables, for instance, will not suddenly become less
complex. So, let's focus on the \quotation {aspects} that come up in those
complaints: fonts and \LUA. Because I only use \CONTEXT\ and occasionally test
with the plain \TEX\ version that we provide, I will not explore the potential
-impact of using truckloads of packages, styles and such, which I'm sure of plays
-a role, but one neglected in the discussion.
+impact of using truckloads of packages, styles, and such, which I'm sure of plays
+a role, but one neglected in my discussion.
\startsubsubject[title=Fonts]
-According to the principles of \LUATEX\ we process (\OPENTYPE) fonts using \LUA.
-That way we have complete control over any aspect of font handling, and can, as
+According to the principles of \LUATEX, we process (\OPENTYPE) fonts using \LUA.
+That way, we have complete control over any aspect of font handling, and can, as
to be expected in \TEX\ systems, provide users what they need, now and in the
-future. In fact, if we didn't had that freedom in \CONTEXT\ I'd probably already
+future. In fact, if we didn't had that freedom in \CONTEXT, I'd probably already
quit using \TEX\ a decade ago and found myself some other (programming) niche.
-After a font is loaded, part of the data gets passed to the \TEX\ engine so that
-it can do its work. For instance, in order to be able to typeset a paragraph,
-\TEX\ needs to know the dimensions of glyphs. Once a font has been loaded
-(that is, the binary blob) the next time it's fetched from a cache. Initial
-loading (and preparation) takes some time, depending on the complexity or size of
-the font. Loading from cache is close to instantaneous. After loading the
-dimensions are passed to \TEX\ but all data remains accessible for any desired
-usage. The \OPENTYPE\ feature processor for instance uses that data and \CONTEXT\
-for sure needs that data (fast accessible) for different purposes too.
-
-When a font is used in so called base mode, we let \TEX\ do the ligaturing and
+After a font has been loaded, part of the data gets passed to the \TEX\ engine,
+so that it can do its work. For instance, in order to be able to typeset a
+paragraph, \TEX\ needs to know the dimensions of glyphs. Once a font has been
+loaded (that is, the binary blob) it's fetched from a cache the next time.
+Initial loading (and preparation) takes some time, depending on the complexity
+and the size of the font. Loading from cache is close to instantaneous. After
+loading, the dimensions are passed to \TEX\ but all data remains accessible for
+any desired usage. The \OPENTYPE\ feature processor, for instance, uses that data
+and \CONTEXT, for sure, needs that data (quickly accessible) for different
+purposes, too.
+
+When a font is used in so|-|called base mode, we let \TEX\ do the ligaturing and
kerning. This is possible with simple fonts and features. If you have a critical
-workflow you might enable base mode, which can be done per font instance.
-Processing in node mode takes some time but how much depends on the font and
-script. Normally there is no difference between \CONTEXT\ and generic usage. In
-\CONTEXT\ we also have dynamic features, and the impact on performance depends on
-usage. In addition to base and node we also have plug mode but that is only used
+workflow, you might enable base mode, which can be done per font instance.
+Processing in node mode takes some time, but how much depends on the font and
+script. Normally, there is no difference between \CONTEXT\ and generic usage. In
+\CONTEXT, we also have dynamic features, and the impact on performance depends on
+usage. In addition to base and node, we also have plug mode, but that is only used
for testing and therefore not advertised.
Every \type {\hbox} and every paragraph goes through the font handler. Because
we support mixed modes, some analysis takes place, and because we do more in
-\CONTEXT, the generic analyzer is more light weight, which again can mean that a
+\CONTEXT, the generic analyzer is more lightweight, which again can mean that a
generic run is not slower than a similar \CONTEXT\ one.
Interesting is that added functionality for variable and|/|or color fonts had no
-impact on performance. Runtime added user features can have some impact but when
-defined well it can be neglected. I bet that when you add additional node list
-handling yourself, its impact on performance is larger. But in the end what
-counts is that the job gets done and the more you demand the higher the price you
-pay.
+impact on performance. Runtime|-|added user features can have some impact, but,
+when defined well, it can be neglected. I bet that when you add additional node
+list handling yourself, its impact on performance will be larger. But in the end
+what counts is that the job gets done and the more you demand the higher the
+price you pay.
\stopsubsubject
\startsubsubject[title=\LUA]
The second possible bottleneck when using \LUATEX\ can be in using \LUA\ code.
-However, using that as argument for slow runs is laughable. For instance
-\CONTEXT\ \MKIV\ can easily spend half its time in \LUA\ and that is not making
+However, using that is laughable as an argument for slow runs. For instance,
+\CONTEXT\ \MKIV\ can easily spend half its time in \LUA, and that is not making
it any slower than \MKII\ using \PDFTEX\ doing equally complex things. For
-instance the embedded \METAPOST\ library makes \MKIV\ way faster than \MKII, and
+instance, the embedded \METAPOST\ library makes \MKIV\ way faster than \MKII, and
the built|-|in \XML\ processing capabilities in \MKIV\ can easily beat \MKII\
\XML\ handling, apart from the fact that it can do more, like filtering by path
and expression. In fact, files that take, say, half a minute in \MKIV, could as
well have taken 15 minutes or more in \MKII\ (and imagine multiple runs then).
-So, for \CONTEXT\ using \LUA\ to achieve its objectives is mandate. The
+So, for \CONTEXT, using \LUA\ to achieve its objectives is mandatory. The
combination of \TEX, \METAPOST\ and \LUA\ is pretty powerful! Each of these
components is really fast. If \TEX\ is your bottleneck, review your macros! When
\LUA\ seems to be the bad, go over your code and make it better. Much of the
-\LUA\ code I see flying around doesn't look that efficient, which is okay because
+\LUA\ code I see flying around doesn't look that efficient, which is okay, because
the interpreter is really fast, but don't blame \LUA\ beforehand, blame your
coding (style) first. When \METAPOST\ is the bottleneck, well, sometimes not much
-can be done about it, but when you know that language well enough you can often
+can be done about it, but when you know that language well enough, you can often
make it perform better.
For the record: every additional mechanism that kicks in, like character spacing
@@ -210,26 +213,26 @@ gets pretty well obscured by other things happening, just that you know.
\startsection[title=Some timing]
-Next I will show some timings related to fonts. For this I use stock \LUATEX\
-(second column) as well as \LUAJITTEX\ (last column) which of course performs
-much better. The timings are given in 3 decimals but often (within a set of runs)
-and as the system load is normally consistent in a set of test runs the last two
-decimals only matter in relative comparison. So, for comparing runs over time
-round to the first decimal. Let's start with loading a bodyfont. This happens
-once per document and normally one has only one bodyfont active. Loading involves
-definitions as well as setting up math so a couple of fonts are actually loaded,
-even if they're not used later on. A setup normally involves a serif, sans, mono,
-and math setup (in \CONTEXT). \footnote {The timing for Latin Modern is so low
+Next, I will show some timings related to fonts. For this, I use stock \LUATEX\
+(second column) as well as \LUAJITTEX\ (last column), which, of course, performs
+much better. The timings are rounded to three decimal places, but, as the system
+load is usually only consistent in a set of test runs, the last two decimals only
+matter in relative comparison. So, for comparing runs over time, round to the
+first decimal. Let's start with loading a bodyfont. This happens once per
+document, and one usually only has one bodyfont active. Loading involves
+definitions as well as setting up math, so a couple of fonts are actually loaded
+even if they're not used later on. A setup normally involves a serif, sans, mono
+and math setup (in \CONTEXT). \footnote {The timing for Latin Modern is so low,
because that font is loaded already.}
\environment onandon-speed-000
\ShowSample{onandon-speed-000} % bodyfont
-There is a bit difference between the font sets but a safe average is 150 milli
-seconds and this is rather constant over runs.
+There is a bit of a difference between the font sets, but a safe average is 150
+milliseconds, and this is rather constant over runs.
-An actual font switch can result in loading a font but this is a one time overhead.
+An actual font switch can result in loading a font, but this is a one|-|time overhead.
Loading four variants (regular, bold, italic and bold italic) roughly takes the
following time:
@@ -239,34 +242,32 @@ Using them again later on takes no time:
\ShowSample{onandon-speed-002} % four variants
-Before we start timing the font handler, first a few baseline benchmarks are
-shown. When no font is applied and nothing else is done with the node list we
-get:
+Before we start timing the font handler, a few baseline benchmarks are shown.
+When no font is applied and nothing else is done with the node list, we get:
\ShowSample{onandon-speed-009}
-A simple monospaced, no features applied, run takes a bit more:
+A simple monospaced, no|-|features|-|applied, run takes a bit more:
\ShowSample{onandon-speed-010}
-Now we show a one font typesetting run. As the two benchmarks before, we just
-typeset a text in a \type {\hbox}, so no par builder interference happens. We use
-the \type {sapolsky} sample text and typeset it 100 times 4 (either of not with
-font switches).
+Now, we show a one|-|font typesetting run. As with the two benchmarks before, we
+just typeset a text in a \type {\hbox}, so no par builder interference happens.
+We use the \type {sapolsky} sample text and typeset it 100 times 4, first without
+font switches.
\ShowSample{onandon-speed-003}
-Much more runtime is needed when we typeset with four font switches. The garamond
-is most demanding. Actually we're not doing 4 fonts there because it has no bold,
-so the numbers are a bit lower than expected for this example. One reason for it
-being demanding is that it has lots of (contextual) lookups. The only comment I
-can make about that is that it also depends on the strategies of the font
-designer. Combining lookups saves space and time so complexity of a font is not
-always a good predictor for performance hits.
+Much more runtime is needed when we typeset with four font switches. Ebgaramond
+is the most demanding. Actually, we're not doing 4 fonts there because ebgaramond
+has no bold, so the numbers are a bit lower than expected for this example. One
+reason for it being demanding is that it has lots of (contextual) lookups.
+Combining lookups saves space and time, so complexity of a font is not always a
+good predictor for performance hits.
% \ShowSample{onandon-speed-004}
-If we typeset paragraphs we get this:
+If we typeset paragraphs, we get the following:
\ShowSample{onandon-speed-005}
@@ -274,11 +275,11 @@ We're talking of some 275 pages here.
\ShowSample{onandon-speed-006}
-There is of course overhead in handling paragraphs and pages:
+There is, of course overhead in handling paragraphs and pages:
\ShowSample{onandon-speed-011}
-Before I discuss these numbers in more details two more benchmarks are
+Before I discuss these numbers in more detail, two more benchmarks are
shown. The next table concerns a paragraph with only a few (bold) words.
\ShowSample{onandon-speed-007}
@@ -290,11 +291,11 @@ typeset using \type{\type}.
When a node list (hbox or paragraph) is processed, each glyph is looked at. One
important property of \LUATEX\ (compared to \PDFTEX) is that it hyphenates the
-whole text, not only the most feasible spots. For the \type {sapolsky} snippet
-this results in 200 potential breakpoints, registered in an equal number of
-discretionary nodes. The snippet has 688 characters grouped into 125 words and
-because it's an English quote we're not hampered with composed characters or
-complex script handling. And, when we mention 100 runs then we actually mean
+whole text, not only the most feasible spots. For the \type {sapolsky} snippet,
+this results in 200 potential breakpoints registered in an equal number of
+discretionary nodes. The snippet has 688 characters grouped into 125 words and,
+because it's an English quote, we're not hampered with composed characters or
+complex script handling. And, when we mention 100 runs, then we actually mean
400 ones when font switching and bodyfonts are compared
\startnarrower
@@ -302,7 +303,7 @@ complex script handling. And, when we mention 100 runs then we actually mean
\input sapolsky \wordright{Robert M. Sapolsky}
\stopnarrower
-In order to get substitutions and positioning right we need not only to consult
+In order to get substitutions and positioning right, we need not only to consult
streams of glyphs but also combinations with preceding pre or replace, or
trailing post and replace texts. When a font has a bit more complex substitutions,
as ebgaramond has, multiple (sometimes hundreds of) passes over the list are made.
@@ -312,15 +313,15 @@ Another factor, one you could easily deduce from the benchmarks, is intermediate
font switches. Even a few such switches (in the last benchmarks) already result
in a runtime penalty. The four switch benchmarks show an impressive increase of
runtime, but it's good to know that such a situation seldom happens. It's also
-important not to confuse for instance a verbatim snippet with a bold one. The
+important not to confuse, for instance, a verbatim snippet with a bold one. The
bold one is indeed leading to a pass over the list, but verbatim is normally
-skipped because it uses a font that needs no processing. That verbatim or bold
+skipped, because it uses a font that needs no processing. That verbatim or bold
have the same penalty is mainly due to the fact that verbatim itself is costly:
the text is picked up using a different catcode regime and travels through \TEX\
and \LUA\ before it finally gets typeset. This relates to special treatments of
-spacing and syntax highlighting and such.
+spacing, syntax highlighting, and such.
-Also keep in mind that the page examples are quite unreal. We use a layout with
+Also, keep in mind that the page examples are quite unreal. We use a layout with
no margins, just text from edge to edge.
\placefigure
@@ -343,19 +344,19 @@ no margins, just text from edge to edge.
{\SampleTitle{onandon-speed-011}}
{\externalfigure[onandon-speed-011][frame=on,orientation=90,width=.45\textheight]}
-So what is a realistic example? That is hard to say. Unfortunately no one ever
-asked us to typeset novels. They are rather brain dead products for a machinery
-so they process fast. On the mentioned laptop 350 word pages in Dejavu fonts can
-be processed at a rate of 75 pages per second with \LUATEX\ and over 100 pages
-per second with \LUAJITTEX . On a more modern laptop or professional server
-performance is of course better. And for automated flows batch mode is your
-friend. The rate is not much worse for a document in a language with a bit more
-complex character handling, take accents or ligatures. Of course \PDFTEX\ is
-faster on such a dumb document but kick in some more functionality and the
-advantage quickly disappears. So, if someone complains that \LUATEX\ needs 10 or
-more seconds for a simple few page document \unknown\ you can bet that when the
-fonts are seen as reason, that the setup is pretty bad. Personally I'd not waste
-time on such a complaint.
+So, what is a realistic example? That is hard to say. Unfortunately, no one has
+ever asked us to typeset novels. They are rather brain dead-products for a
+machinery, so they process fast. On the mentioned laptop, 350 word pages in
+Dejavu fonts can be processed at a rate of 75 pages per second with \LUATEX\ and
+over 100 pages per second with \LUAJITTEX . On a more modern laptop or a
+professional server, the performance is of course better. And, for automated
+flows, batch mode is your friend. The rate is not much worse for a document in a
+language with a bit more complex character handling, take accents or ligatures.
+Of course, \PDFTEX\ is faster on such a dumb document, but kick in some more
+functionality, and the advantage quickly disappears. So, if someone complains
+that \LUATEX\ needs 10 or more seconds for a simple few page document \unknown\
+you can bet that when the fonts are seen as reason, then the setup is pretty bad.
+Personally I would not waste time on such a complaint.
\stopsection
@@ -366,74 +367,75 @@ about the slowness of \LUATEX:
\startsubsubject[title={What engines do you compare?}]
-If you come from \PDFTEX\ you come from an 8~bit world: input and font handling
-are based on bytes and hyphenation is integrated into the par builder. If you use
-\UTF-8\ in \PDFTEX, the input is decoded by \TEX\ macros which carries a speed
+If you come from \PDFTEX, you come from an 8-bit world: input and font handling
+are based on bytes, and hyphenation is integrated into the par builder. If you use
+\UTF-8\ in \PDFTEX, the input is decoded by \TEX\ macros, which carries a speed
penalty. Because in the wide engines macro names can also be \UTF\ sequences,
construction of macro names is less efficient too.
-When you try to use wide fonts, again there is a penalty. Now, if you use \XETEX\
-or \LUATEX\ your input is \UTF-8 which becomes something 32 bit internally. Fonts
-are wide so more resources are needed, apart from these fonts being larger and in
-need of more processing due to feature handling. Where \XETEX\ uses a library,
-\LUATEX\ uses its own handler. Does that have a consequence for performance? Yes
-and no. First of all it depends on how much time is spent on fonts at all, but
-even then the difference is not that large. Sometimes \XETEX\ wins, sometimes
-\LUATEX. One thing is clear: \LUATEX\ is more flexible as we can roll out our own
-solutions and therefore do more advanced font magic. For \CONTEXT\ it doesn't
-matter as we use \LUATEX\ exclusively and rely on the flexible font handler, also
-for future extensions. If really needed you can kick in a library based handler
-but it's (currently) not distributed as we loose other functionality which in
-turn would result in complaints about that fact (apart from conflicting with the
-strive for independence).
-
-There is no doubt that \PDFTEX\ is faster but for \CONTEXT\ it's an obsolete
-engine. The hard coded solutions engine \XETEX\ is also not feasible for
-\CONTEXT\ either. So, in practice \CONTEXT\ users have no choice: \LUATEX\ is
-used, but users of other macro packages can use the alternatives if they are not
-satisfied with performance. The fact that \CONTEXT\ users don't complain about
-speed is a clear signal that this is no issue. And, if you want more speed you
-can use \LUAJITTEX. \footnote {In plug mode we can actually test a library and
-experiments have shown that performance on the average is much worse but it can
+When you try to use wide fonts, there is, again, a penalty. Now, if you use
+\XETEX\ or \LUATEX, your input is \UTF-8, which becomes something 32-bit
+internally. Fonts are wide, so more resources are needed, apart from these fonts
+being larger and in need of more processing due to feature handling. Where
+\XETEX\ uses a library, \LUATEX\ uses its own handler. Does that have a
+consequence for performance? Yes and no. First of all, it depends on how much
+time is spent on fonts at all, but even then, the difference is not that large.
+Sometimes \XETEX\ wins, sometimes it's \LUATEX. One thing is clear: \LUATEX\ is
+more flexible as we can roll out our own solutions and therefore do more advanced
+font magic. For \CONTEXT, it doesn't matter as we use \LUATEX\ exclusively, and
+we rely on the flexible font handler, also for future extensions. If really
+needed, you can kick in a library-based handler but it's (currently) not
+distributed as we lose other functionality, which would, in turn, result in
+complaints about that fact (apart from conflicting with the strive for
+independence).
+
+There is no doubt that \PDFTEX\ is faster, but, for \CONTEXT, it's an obsolete
+engine. The hard-coded-solutions engine \XETEX\ is not feasible for \CONTEXT\
+either. So, in practice, \CONTEXT\ users have no choice: \LUATEX\ is used, but
+users of other macro packages can use the alternatives if they are not satisfied
+with performance. The fact that \CONTEXT\ users don't complain about speed is a
+clear signal that this is a no|-|issue. And, if you want more speed, you can always
+use \LUAJITTEX. \footnote {In plug mode, we can actually test a library and
+experiments have shown that performance on the average is much worse, but it can
be a bit better for complex scripts, although a gain gets unnoticed in normal
documents. So, one can decide to use a library but at the cost of much other
-functionality that \CONTEXT\ offers, so we don't support it.} In the last section
+functionality that \CONTEXT\ offers, so we don't support it.} In the last section,
the different engines will be compared in more detail.
-Just that you know, when we do the four switches example in plain \TEX\ on my
-laptop I get a rate of 40 pages per second, and for one font 180 pages per
-second. There is of course a bit more going on in \CONTEXT\ in page building and
-so, but the difference between plain and \CONTEXT\ is not that large.
+Just that you know, when we do the four|-|switches example in plain \TEX\ on my
+laptop, I get a rate of 40 pages per second, and, for one font, 180 pages per
+second. There is, of course, a bit more going on in \CONTEXT\ in page building
+and so, but the difference between plain and \CONTEXT\ is not that large.
\stopsubsubject
\startsubsubject[title={What macro package is used?}]
-If the answer is that when plain \TEX\ is used, a follow up question is: what
-variant? The \CONTEXT\ distribution ships with \type {luatex-plain} and that is
-our benchmark. If there really is a bottleneck it is worth exploring. But keep in
-mind that in order to be plain, not that much can be done. The \LUATEX\ part is
-just an example of an implementation. We already discussed \CONTEXT, and for
-\LATEX\ I don't want to speculate where performance hits might come from. When
-we're talking fonts, \CONTEXT\ can actually a bit slower than the generic (or
-\LATEX) variant because we can kick in more functionality. Also, when you compare
-macro packages, keep in mind that when node list processing code is added in that
-package the impact depends on interaction with other functionality and depends on
-the efficiency of the code. You can't compare mechanisms or draw general
-conclusions when you don't know what else is done!
+When plain \TEX\ is used, a follow up question is: what variant? The \CONTEXT\
+distribution ships with \type {luatex-plain}, and that is our benchmark. If there
+really is a bottleneck, it is worth exploring, but keep in mind that, in order to
+be plain, not that much can be done. The \LUATEX\ part is just an example of an
+implementation. We already discussed \CONTEXT, and for \LATEX, I don't want to
+speculate where performance hits might come from. When we're talking fonts,
+\CONTEXT\ can actually be a bit slower than the generic (or \LATEX) variant, because
+we can kick in more functionality. Also, when you compare macro packages, keep in
+mind that, when node list processing code is added in that package, the impact
+depends on interaction with other functionality and depends on the efficiency of
+the code. You can't compare mechanisms or draw general conclusions when you don't
+know what else is done!
\stopsubsubject
\startsubsubject[title={What do you load?}]
-Most \CONTEXT\ modules are small and load fast. Of course there can be exceptions
-when we rely on third party code; for instance loading tikz takes a a bit of
-time. It makes no sense to look for ways to speed that system up because it is
-maintained elsewhere. There can probably be gained a bit but again, no user
-complained so far.
+Most \CONTEXT\ modules are small and load fast. Of course, there can be exceptions
+when we rely on third party code; for instance, loading tikz takes a bit of
+time. It makes no sense to look for ways to speed that system up, because it is
+maintained elsewhere. There can probably be gained a bit, but, again, no user
+has complained so far.
-If \CONTEXT\ is not used, one probably also uses a large \TEX\ installations.
-File lookup in \CONTEXT\ is done differently and can can be faster. Even loading
+If \CONTEXT\ is not used, one probably also uses a large \TEX\ installation.
+File lookup in \CONTEXT\ is done differently, and can be faster. Even loading
can be more efficient in \CONTEXT, but it's hard to generalize that conclusion.
If one complains about loading fonts being an issue, just try to measure how much
time is spent on loading other code.
@@ -443,36 +445,36 @@ time is spent on loading other code.
\startsubsubject[title={Did you patch macros?}]
Not everyone is a \TEX pert. So, coming up with macros that are expanded many
-times and|/|or have inefficient user interfacing can have some impact. If someone
-complains about one subsystem being slow, then honestly demands to complain about
+times and|/|or have inefficient user interfacing, can have some impact. If someone
+complains about one subsystem being slow, then honesty demands to complain about
other subsystems as well. You get what you ask for.
\stopsubsubject
\startsubsubject[title={How efficient is the code that you use?}]
-Writing super efficient code only makes sense when it's used frequently. In
-\CONTEXT\ most code is reasonable efficient. It can be that in one document fonts
-are responsible for most runtime, but in another document table construction can
+Writing super|-|efficient code only makes sense when it's used frequently. In
+\CONTEXT, most code is reasonable efficient. It can be that in one document fonts
+are responsible for most runtime, but in another document, table construction can
be more demanding while yet another document puts some stress on interactive
-features. When hz or protrusion is enabled then you run substantially slower
-anyway so when you are willing to sacrifice 10\% or more runtime don't complain
-about other components. The same is true for enabling \SYNCTEX: if you are
-willing to add more than 10\% runtime for that, don't wither about the same
-amount for font handling. \footnote {In \CONTEXT\ we use a \SYNCTEX\ alternative
-that is somewhat faster but it remains a fact that enabling more and more
-functionality will make the penalty of for instance font processing relatively
-small.}
+features. When hz or protrusion is enabled, then you run substantially slower
+anyway, so when you are willing to sacrifice 10 \% or more of runtime, don't
+complain about other components. The same is true for enabling \SYNCTEX: if you
+are willing to add more than 10 \% of runtime for that, don't wither about the
+same amount for font handling. \footnote {In \CONTEXT, we use a \SYNCTEX\
+alternative that is somewhat faster, but it remains a fact that enabling more and
+more functionality will make the penalty of, for instance, font processing
+relatively small.}
\stopsubsubject
\startsubsubject[title={How efficient is the styling that you use?}]
-Probably the most easily overseen optimization is in switching fonts and color.
-Although in \CONTEXT\ font switching is fast, I have no clue about it in other
-macro packages. But in a style you can decide to use inefficient (massive) font
+Probably the most easily overlooked optimization is in switching fonts and colors.
+Although in \CONTEXT, font switching is fast, I have no clue about it in other
+macro packages. But in a style, you can decide to use inefficient (massive) font
switches. The effects can easily be tested by commenting bit and pieces. For
-instance sometimes you need to do a full bodyfont switch when changing a style,
+instance, sometimes you need to do a full bodyfont switch when changing a style,
like assigning \type {\small\bf} to the \type {style} key in \type {\setuphead},
but often using e.g.\ \type {\tfd} is much more efficient and works quite as
well. Just try it.
@@ -481,24 +483,24 @@ well. Just try it.
\startsubsubject[title={Are fonts really the bottleneck?}]
-We already mentioned that one can look in the wrong direction. Maybe once someone
+We already mentioned that one can look in the wrong direction. Maybe, once someone
is convinced that fonts are the culprit, it gets hard to look at the real issue.
-If a similar job in different macro packages has a significant different runtime
+If a similar job in different macro packages has a significantly different runtime,
one can wonder what happens indeed.
It is good to keep in mind that the amount of text is often not as large as you
-think. It's easy to do a test with hundreds of paragraphs of text but in practice
+think. It's easy to do a test with hundreds of paragraphs of text, but, in practice,
we have whitespace, section titles, half empty pages, floats, itemize and similar
-constructs, etc. Often we don't mix many fonts in the running text either. So, in
-the end a real document is the best test.
+constructs, etc. Often, we don't mix many fonts in the running text either. So,
+in the end, a real document is your best test.
\stopsubsubject
\startsubsubject[title={If you use \LUA, is that code any good?}]
You can gain from the faster virtual machine of \LUAJITTEX. Don't expect wonders
-from the jitting as that only pays of for long runs with the same code used over
-and over again. If the gain is high you can even wonder how well written your
+from the jitting as that only pays off in long runs with the same code used over
+and over again. If the gain is high, you can even wonder how well-written your
\LUA\ code is anyway.
\stopsubsubject
@@ -506,18 +508,18 @@ and over again. If the gain is high you can even wonder how well written your
\startsubsubject[title={What if they don't believe you?}]
So, say that someone finds \LUATEX\ slow, what can be done about it? Just advice
-him or her to stick to tool used previously. Then, if arguments come that one
+them to stick to their previously|-|used tool. Then, if arguments come that one
also wants to use \UTF-8, \OPENTYPE\ fonts, a bit of \METAPOST, and is looking
forward to using \LUA\ runtime, the only answer is: take it or leave it. You pay
-a price for progress, but if you do your job well, the price is not that large.
-Tell them to spend time on learning and maybe adapting and bark against their own
+a price for progress, but, if you do your job well, the price is not that high.
+Tell them to spend time on learning and maybe adapting and to bark against their own
tree before barking against those who took that step a decade ago. Most \CONTEXT\
users took that step and someone still using \LUATEX\ after a decade can't be
that stupid. It's always best to first wonder what one actually asks from \LUATEX,
and if the benefit of having \LUA\ on board has an advantage. If not, one can
just use another engine.
-Also think of this. When a job is slow, for me it's no problem to identify where
+Also think of this: when a job is slow, for me it's no problem to identify where
the problem is. The question then is: can something be done about it? Well, I
happily keep the answer for myself. After all, some people always need room to
complain, maybe if only to hide their ignorance or incompetence. Who knows.
@@ -529,13 +531,13 @@ complain, maybe if only to hide their ignorance or incompetence. Who knows.
\startsection[title={Comparing engines}]
The next comparison is to be taken with a grain of salt and concerns the state of
-affairs mid 2017. First of all, you cannot really compare \MKII\ with \MKIV: the
-later has more functionality (or a more advanced implementation of
-functionality). And as mentioned you can also not really compare \PDFTEX\ and the
-wide engines. Anyway, here are some (useless) tests. First a bunch of loads. Keep
+affairs mid-2017. First of all, you cannot really compare \MKII\ with \MKIV: the
+latter has more functionality (or a more advanced implementation of
+functionality). And, as mentioned, you can also not really compare \PDFTEX\ and the
+wide engines. Anyway, here are some (useless) tests. First, a bunch of loads. Keep
in mind that different engines also deal differently with reading files. For
-instance \MKIV\ uses \LUATEX\ callbacks to normalize the input and has its own
-readers. There is a bit more overhead in starting up a \LUATEX\ run and some
+instance, \MKIV\ uses \LUATEX\ callbacks to normalize the input and has its own
+readers. There is a bit more overhead in starting up a \LUATEX\ run, and some
functionality is enabled that is not present in \MKII. The format is also larger,
if only because we preload a lot of useful font, character and script related
data.
@@ -549,7 +551,7 @@ data.
\stoptext
\stoptyping
-When looking at the numbers one should realize that the times include startup and
+When looking at the numbers, one should realize that the times include startup and
job management by the runner scripts. We also run in batchmode to avoid logging
to influence runtime. The average is calculated from 5 runs.
@@ -593,8 +595,7 @@ The second example does a few switches in a paragraph:
\HL
\stoptabulate
-The third examples does a few more, resulting in multiple subranges
-per style:
+The third example does more, resulting in multiple subranges per style:
\starttyping
\starttext
@@ -623,7 +624,7 @@ per style:
The last example adds some color. Enabling more functionality can have an impact
on performance. In fact, as \MKIV\ uses a lot of \LUA\ and is also more advanced
-that \MKII, one can expect a performance hit but in practice the opposite
+that \MKII, one can expect a performance hit, but, in practice, the opposite
happens, which can also be due to some fundamental differences deep down at the
macro level.
@@ -654,20 +655,20 @@ macro level.
\HL
\stoptabulate
-In these measurements the accuracy is a few decimals but a pattern is visible. As
-expected \PDFTEX\ wins on simple documents but starts loosing when things get
-more complex. For these tests I used 64 bit binaries. A 32 bit \XETEX\ with
-\MKII\ performs the same as \LUAJITTEX\ with \MKIV, but a 64 bit \XETEX\ is
-actually quite a bit slower. In that case the mingw cross compiled \LUATEX\
-version does pretty well. A 64 bit \PDFTEX\ is also slower (it looks) that a 32
-bit version. So in the end, there are more factors that play a role. Choosing
-between \LUATEX\ and \LUAJITTEX\ depends on how well the memory limited
+In these measurements, the accuracy is a few decimals, but a pattern is visible.
+As expected, \PDFTEX\ wins on simple documents but starts losing when things get
+more complex. For these tests, I used 64 bit binaries. A 32-bit \XETEX\ with
+\MKII\ performs the same as \LUAJITTEX\ with \MKIV, but a 64-bit \XETEX\ is
+actually quite a bit slower. In that case, the mingw cross|-|compiled \LUATEX\
+version does pretty well. A 64-bit \PDFTEX\ is also slower (it looks) than a
+32-bit version. So, in the end, there are more factors that play a role. Choosing
+between \LUATEX\ and \LUAJITTEX\ depends on how well the memory|-|limited
\LUAJITTEX\ variant can handle your documents and fonts.
Because in most of our recent styles we use \OPENTYPE\ fonts and (structural)
-features as well as recent \METAFUN\ extensions only present in \MKIV\ we cannot
+features as well as recent \METAFUN\ extensions only present in \MKIV, we cannot
compare engines using such documents. The mentioned performance of \LUATEX\ (or
-\LUAJITTEX) and \MKIV\ on the \METAFUN\ manual illustrate that in most cases this
+\LUAJITTEX) and \MKIV\ on the \METAFUN\ manual illustrate that, in most cases, this
combination is a clear winner.
\starttyping
@@ -703,8 +704,8 @@ That leaves the zero run:
\stoptext
\stoptyping
-This gives the following numbers. In longer runs the difference in overhead is
-neglectable.
+This gives the following numbers. In longer runs, the difference in overhead is
+negligible.
% sample 6, number of runs: 5
@@ -719,31 +720,31 @@ neglectable.
\HL
\stoptabulate
-It will be clear that when we use different fonts the numbers will also be
-different. And if you use a lot of runtime \METAPOST\ graphics (for instance for
-backgrounds), the \MKIV\ runs end up at the top. And when we process \XML\ it
+It will be clear that when we use different fonts, the numbers will also be
+different. And, if you use a lot of runtime \METAPOST\ graphics (for instance for
+backgrounds), the \MKIV\ runs end up at the top. And, when we process \XML, it
will be clear that going back to \MKII\ is no longer a realistic option. It must
-be noted that I occasionally manage to improve performance but we've now reached
+be noted that I occasionally manage to improve performance, but we've now reached
a state where there is not that much to gain. Some functionality is hard to
-compare. For instance in \CONTEXT\ we don't use much of the \PDF\ backend
-features because we implement them all in \LUA. In fact, even in \MKII\ already a
-done in \TEX, so in the end the speed difference there is not large and often in
+compare. For instance, in \CONTEXT, we don't use much of the \PDF\ backend
+features because we implement them all in \LUA. In fact, even in \MKII, already
+done in \TEX, so in the end, the speed difference there is not large and often in
favour of \MKIV.
-For the record I mention that shipping out the about 1250 pages has some overhead
-too: about 2 seconds. Here \LUAJITTEX\ is 20\% more efficient which is an
+For the record, I mention that shipping out the about 1250 pages has some overhead
+too: about 2 seconds. Here, \LUAJITTEX\ is 20\% more efficient, which is an
indication of quite some \LUA\ involvement. Loading the input files has an
-overhead of about half a second. Starting up \LUATEX\ takes more time that
+overhead of about half a second. Starting up \LUATEX\ takes more time than
\PDFTEX\ and \XETEX, but that disadvantage disappears with more pages. So, in the
-end there are quite some factors that blur the measurements. In practice what
-matters is convenience: does the runtime feel reasonable and in most cases it
+end, there are quite some factors that blur the measurements. In practice, what
+matters is convenience: does the runtime feel reasonable and, in most cases, it
does.
-If I would replace my laptop with a reasonable comparable alternative that one
+If I would replace my laptop with a reasonable comparable alternative, that one
would be some 35\% faster (single threads on processors don't gain much per year).
-I guess that this is about the same increase in performance that \CONTEXT\
-\MKIV\ got in that period. I don't expect such a gain in the coming years so
-at some point we're stuck with what we have.
+I guess that this is about the same increase in performance than \CONTEXT\
+\MKIV\ got in that period. I don't expect such a gain in the upcoming years, so,
+at some point, we're stuck with what we have.
\stopsection
@@ -754,29 +755,29 @@ go back in time to when the first wide engines showed up, \OMEGA\ was considered
to be slow, although I never tested that myself. Then, when \XETEX\ showed up,
there was not much talk about speed, just about the fact that we could use
\OPENTYPE\ fonts and native \UTF\ input. If you look at the numbers, for sure you
-can say that it was much slower than \PDFTEX. So how come that some people
+can say that it was much slower than \PDFTEX. So, how come that some people
complain about \LUATEX\ being so slow, especially when we take into account that
-it's not that much slower than \XETEX, and that \LUAJITTEX\ is often faster that
-\XETEX. Also, computers have become faster. With the wide engines you get more
+it's not that much slower than \XETEX, and that \LUAJITTEX\ is often faster than
+\XETEX. Also, computers have become faster. With the wide engines, you get more
functionality and that comes at a price. This was accepted for \XETEX\ and is
also acceptable for \LUATEX. But the price is nto that high if you take into
account that hardware performs better: you just need to compare \LUATEX\ (and
\XETEX) runtime with \PDFTEX\ runtime 15 years ago.
As a comparison, look at games and video. Resolution became much higher as did
-color depth. Higher frame rates were in demand. Therefore the hardware had to
-become faster and it did, and as a result the user experience kept up. No user
+color depth. Higher frame rates were in demand. Therefore, the hardware had to
+become faster, and it did, and, as a result, the user experience kept up. No user
will say that a modern game is slower than an old one, because the old one does
500 frames per second compared to some 50 for the new game on the modern
hardware. In a similar fashion, the demands for typesetting became higher:
\UNICODE, \OPENTYPE, graphics, \XML, advanced \PDF, more complex (niche)
typesetting, etc. This happened more or less in parallel with computers becoming
more powerful. So, as with games, the user experience didn't degrade with
-demands. Comparing \LUATEX\ with \PDFTEX\ is like comparing a low res, low frame
-rate, low color game with a modern one. You need to have up to date hardware and
-even then, the writer of such programs need to make sure it runs efficient,
-simply because hardware no longer scales like it did decades ago. You need to
-look at the larger picture.
+demands. Comparing \LUATEX\ with \PDFTEX\ is like comparing a low|-|res,
+low|-|framerate, low|-|color game with a modern one. You need to have
+up|-|to|-|date hardware and even then, the writer of such programs needs to make
+sure that they run efficiently, simply because hardware no longer scales like it
+did decades ago. You need to look at the bigger picture.
\stopsection
diff --git a/doc/context/sources/general/manuals/onandon/onandon-variable.tex b/doc/context/sources/general/manuals/onandon/onandon-variable.tex
index c73196cef..c308864e6 100644
--- a/doc/context/sources/general/manuals/onandon/onandon-variable.tex
+++ b/doc/context/sources/general/manuals/onandon/onandon-variable.tex
@@ -12,7 +12,7 @@
\startsubject[title=Introduction]
-History shows the tendency to recycle ideas. Often quite some effort is made by
+History shows the tendency to recycle ideas. Often, quite some effort is made by
historians to figure out what really happened, not just long ago, when nothing
was written down and we have to do with stories or pictures at most, but also in
recent times. Descriptions can be conflicting, puzzling, incomplete, partially
@@ -20,64 +20,64 @@ lost, biased, \unknown
Just as language was invented (or evolved) several times, so were scripts. The
same might be true for rendering scripts on a medium. Semaphores came and went
-within decades and how many people know now that they existed and that encryption
+within decades, and how many people know now that they existed and that encryption
was involved? Are the old printing presses truly the old ones, or are older
examples simply gone? One of the nice aspects of the internet is that one can now
-more easily discover similar solutions for the same problem, but with a different
+more easily discover similar solutions to the same problem but with a different
(and independent) origin.
-So, how about this \quotation {new big thing} in font technology: variable fonts.
-In this case, history shows that it's not that new. For most \TEX\ users the
-names \METAFONT\ and \METAPOST\ will ring bells. They have a very well documented
-history so there is not much left to speculation. There are articles, books,
+So, how about this \quotation {next big thing} in font technology: variable fonts?
+In this case, history shows that it's not that new. For most \TEX\ users, the
+names \METAFONT\ and \METAPOST\ will ring bells. They have a very well-documented
+history, so there is not much left to speculation. There are articles, books,
pictures, examples, sources, and more around for decades. So, the ability to
change the appearance of a glyph in a font depending on some parameters is not
new. What probably {\em is} new is that creating variable fonts is done in the
-natural environment where fonts are designed: an interactive program. The
-\METAFONT\ toolkit demands quite some insight in programming shapes in such a way
+natural environment, where fonts are designed: an interactive program. The
+\METAFONT\ toolkit demands quite some insight into programming shapes in such a way
that one can change look and feel depending on parameters. There are not that
-many meta fonts made and one reason is that making them requires a certain mind-
-and skill set. On the other hand, faster computers, interactive programs,
-evolving web technologies, where rea|l|-time rendering and therefore more or less
+many metafonts made, and one reason is that making them requires a certain mind-
+and skillset. On the other hand, faster computers, interactive programs,
+evolving web technologies, where real-time rendering and therefore more or less
real-time tweaking of fonts is a realistic option, all play a role in acceptance.
-But do interactive font design programs make this easier? You still need to be
-able to translate ideas into usable beautiful fonts. Taking the common shapes of
-glyphs, defining extremes and letting a program calculate some interpolations
-will not always bring good results. It's like morphing a picture of your baby's
-face into yours of old age (or that of your grandparent): not all intermediate
-results will look great. It's good to notice that variable fonts are a revival of
-existing techniques and ideas used in, for instance, multiple master fonts. The
-details might matter even more as they can now be exaggerated when some
-transformation is applied.
-
-There is currently (March 2017) not much information about these fonts so what I
+But do interactive font design programs make this easier? You still need to
+translate ideas into usable beautiful fonts. Taking the common shapes of glyphs,
+defining extremes and letting a program calculate some interpolations will not
+always give good results. It's like morphing a picture of your baby's face into
+yours of old age or that of your grandparent: not all intermediate results will
+look great. It's good to notice that variable fonts are a revival of existing
+techniques and ideas used in, for instance, multiple master fonts. The details
+might matter even more as they can now be exaggerated when transformations are
+applied.
+
+There is currently (March 2017) not much information about these fonts, so what I
say next may be partially wrong or at least different from what is intended. The
-perspective will be one from a \TEX\ user and coder. Whatever you think of them,
-these fonts will be out there and for sure there will be nice examples
-circulating soon. And so, when I ran into a few experimental fonts, with
+perspective will be one of a \TEX\ user and coder. Whatever you think of them,
+these fonts will be out there, and, for sure, there will be nice examples
+circulating soon. And so, when I ran into a few experimental fonts with
\POSTSCRIPT\ and \TRUETYPE\ outlines, I decided to have a look at what is inside.
-After all, because it's visual, it's also fun to play with. Let's stress that at
-the moment of this writing I only have a few simple fonts available, fonts that
-are designed for testing and not usage. Some recommended tables were missing and
-no complex \OPENTYPE\ features are used in these fonts.
+After all, because it's visual, it's also fun to play with. Let's stress that, at
+the moment of this writing, I only have a few simple fonts available, fonts that
+are designed for testing and not for usage. Some recommended tables were missing
+and no complex \OPENTYPE\ features were used in these fonts.
\stopsubject
\startsubject[title=The specification]
I'm not that good at reading specifications, first of all because I quickly fall
-asleep with such documents, but most of all because I prefer reading other stuff
+asleep with such documents, but mostly because I prefer reading other stuff
(I do have lots of books waiting to be read). I'm also someone who has to play
with something in order to understand it: trial and error is my modus operandi.
-Eventually it's my intended usage that drives the interface and that is when
+Eventually, it's my intended usage that drives the interface and that is when
everything comes together.
Exploring this technology comes down to: locate a font, get the \OPENTYPE\ 1.8
specification from the \MICROSOFT\ website, and try to figure out what is in the
-font. When I had a rough idea the next step was to get to the shapes and see if I
-could manipulate them. Of course it helped that in \CONTEXT\ we already can load
-fonts and play with shapes (using \METAPOST). I didn't have to install and learn
+font. When I had a rough idea, the next step was to get to the shapes and see if
+I could manipulate them. Of course, it helped that we can already load fonts and
+play with shapes in \CONTEXT using \METAPOST. I didn't have to install and learn
other programs. Once I could render them, in this case by creating a virtual font
with inline \PDF\ literals, a next step was to apply variation. Then came the
first experiments with a possible user interface. Seeing more variation then
@@ -88,18 +88,18 @@ The main extension to the data packaged in a font file concerns the (to be
discussed) axis along which variable fonts operate and deltas to be applied to
coordinates. The \type {gdef} table has been extended and contains information
that is used in \type {gpos} features. There are new \type {hvar}, \type {vvar}
-and \type {mvar} tables that influence the horizontal, vertical and general font
+and \type {mvar} tables that influence the horizontal, vertical, and general font
dimensions. The \type {gvar} table is used for \TRUETYPE\ variants, while the
\type {cff2} table replaces the \type {cff} table for \OPENTYPE\ \POSTSCRIPT\
outlines. The \type {avar} and \type {stat} tables contain some
-meta|-|information about the axes of variations.
+metainformation about the axes of variations.
-It must be said that because this is new technology the information in the
+It must be said that, because this is a new technology, the information in the
standard is not always easy to understand. The fact that we have two rendering
techniques, \POSTSCRIPT\ \type {cff} and \TRUETYPE\ \type {ttf}, also means that
we have different information and perspectives. But this situation is not much
-different from \OPENTYPE\ standards a few years ago: it takes time but in the end
-I will get there. And, after all, users also complain about the lack of
+different from \OPENTYPE\ standards a few years ago: it takes time, but, in the
+end, I will get there. And, after all, users also complain about the lack of
documentation for \CONTEXT, so who am I to complain? In fact, it will be those
\CONTEXT\ users who will provide feedback and make the implementation better in
the~end.
@@ -110,41 +110,41 @@ the~end.
Before we discuss some details, it will be useful to summarize what the font
loader does when a user requests a font at a certain size and with specific
-features enabled. When a font is used the first time, its binary format is
-converted into a form that makes it suitable for use within \CONTEXT\ and
-therefore \LUATEX. This conversion involves collecting properties of the font as
-a whole (official names, general dimensions like x-height and em-width, etc.), of
+features enabled. When a font is used for the first time, its binary format is
+converted into a form that makes it suitable for use in \CONTEXT\ and therefore
+in \LUATEX. This conversion involves collecting the properties of the font as a
+whole (official names, general dimensions like x-height and em-width, etc.), of
glyphs (dimensions, \UNICODE\ properties, optional math properties), and all
-kinds of information that relates to (contextual) replacements of glyphs (small
+kinds of information that relate to (contextual) replacements of glyphs (small
caps, oldstyle, scripts like Arabic) and positioning (kerning, anchoring marks,
-etc.). In the \CONTEXT\ font loader this conversion is done in \LUA.
+etc.). In the \CONTEXT\ font loader, this conversion is done in \LUA.
-The result is stored in a condensed format in a cache and the next time the font
-is needed it loads in an instant. In the cached version the dimensions are
-untouched, so a font at different sizes has just one copy in the cache. Often a
-font is needed at several sizes and for each size we create a copy with scaled
+The result is stored in a condensed format in a cache, and, the next time the font
+is needed, it loads in an instant. In the cached version, the dimensions are
+untouched, so a font at different sizes has just one copy in the cache. Often, a
+font is needed at several sizes, and for each size, we create a copy with scaled
glyph dimensions. The feature-related dimensions (kerning, anchoring, etc.)\ are
shared and scaled when needed. This happens when sequences of characters in the
node list get converted into sequences of glyphs. We could do the same with glyph
-dimensions but one reason for having a scaled copy is that this copy can also
-contain virtual glyphs and these have to be scaled beforehand. In practice there
+dimensions, but one reason for having a scaled copy is that this copy can also
+contain virtual glyphs, and these have to be scaled beforehand. In practice, there
are several layers of caching in order to keep the memory footprint within
-reasonable bounds. \footnote {In retrospect one can wonder if that makes sense;
+reasonable bounds. \footnote {In retrospect, one can wonder if that makes sense;
just look at how much memory a browser uses when it has been open for some time.
-In the beginning of \LUATEX\ users wondered about caching fonts, but again, just
+In the beginning of \LUATEX, users wondered about caching fonts, but again, just
look at what amounts browsers cache: it gets pretty close to the average amount
of writes that a \SSD\ can handle per day within its guarantee.}
When the font is actually used, interaction between characters is resolved using
-the feature|-|related information. When for instance two characters need to be
+the feature|-|related information. When, for instance, two characters need to be
kerned, a lookup results in the injection of a kern, scaled from general
dimensions to the current size of the font.
-When the outlines of glyphs are needed in \METAFUN\ the font is also converted
+When the outlines of glyphs are needed in \METAFUN, the font is also converted
from its binary form to something in \LUA, but this time we filter the shapes.
-For a \type {cff} this comes down to interpreting the \type {charstrings} and
-reducing the complexity to \type {moveto}, \type {lineto} and \type {curveto}
-operators. In the process subroutines are inlined. The result is something that
+For a \type {cff}, this comes down to interpreting the \type {charstrings} and
+reducing the complexity to \type {moveto}, \type {lineto}, and \type {curveto}
+operators. In the process, subroutines are inlined. The result is something that
\METAPOST\ is happy with but that also can be turned into a piece of a \PDF.
We now come to what a variable font actually is: a basic design which is
@@ -170,7 +170,7 @@ endfor ;
\stopMPcode
\stoplinecorrection
-Here we have a linear scaling but glyphs are not normally done that way. There
+Here we have linear scaling, but glyphs are not normally done that way. There
are font collections out there with lots of intermediate variants (say from light
to heavy) and it's more profitable to sell each variant independently. However,
there is often some logic behind it, probably supported by programs that
@@ -178,68 +178,69 @@ designers use, so why not build that logic into the font and have one file that
represents many intermediate forms. In fact, once we have multiple axes, even
when the designer has clear ideas of the intended usage, nothing will prevent
users from tinkering with the axis properties in ways that will fulfil their
-demands but hurt the designers eyes. We will not discuss that dilemma here.
+demands (and hurt the designer's eyes). I will not discuss that dilemma here.
When a variable font follows the route described above, we face a problem. When
-you load a \TRUETYPE\ font it will just work. The glyphs are packaged in the same
-format as static fonts. However, a variable font has axes and on each axis a
-value can be set. Each axis has a minimum, maximum and default. It can be that
-the default instance also assumes some transformations are applied. The standard
-recommends adding tables to describe these things but the fonts that I played
-with each lacked such tables. So that leaves some guesswork. But still, just
-loading a \TRUETYPE\ font gives some sort of outcome, although the dimensions
-(widths) might be weird due to lack of a (default) axis being applied.
+you load a \TRUETYPE\ font, it will just work. The glyphs are packaged in the
+same format as static fonts. However, a variable font has axes, and, on each
+axis, a value can be set. Each axis has a minimum, a maximum, and a default. It
+can be that the default instance also assumes some transformations are applied.
+The standard recommends adding tables to describe these things, but the fonts
+that I played with each lacked such tables. So that leaves some guesswork. But
+still, just loading a \TRUETYPE\ font gives some sort of outcome, although the
+dimensions (widths) might be weird due to the lack of a (default) axis being
+applied.
An \OPENTYPE\ font with \POSTSCRIPT\ outlines is different: the internal \type
-{cff} format has been upgraded to \type {cff2} which on the one hand is less
-complicated but on the other hand has a few new operators \emdash\ which results
-in programs that have not been adapted complaining or simply quitting on them.
+{cff} format has been upgraded to \type {cff2}, which on the one hand is less
+complicated, but on the other hand has a few new operators, which results
+in programs that have not been adapted complaining or simply crashing on them.
One could argue that a font is just a resource and that one only has to pass it
-along but that's not what works well in practice. Take \LUATEX. We can of course
-load the font and apply axis vales so that we can process the document as we
-normally do. But at some point we have to create a \PDF. We can simply embed the
-\TRUETYPE\ files but no axis values are applied. This is because, even if we add
-the relevant information, there is no way in current \PDF\ formats to deal with
-it. For that, we should be able to pass all relevant axis|-|related information
-as well as specify what values to use along these axes. And for \TRUETYPE\ fonts
-this information is not part of the shape description so then we in fact need to
-filter and pass more. An \OPENTYPE\ \POSTSCRIPT\ font is much cleaner because
-there we have the information needed to transform the shape mostly in the glyph
-description. There we only need to carry some extra information on how to apply
-these so|-|called blend values. The region|/|axis model used there only demands
-passing a relatively simple table (stripped down to what we need). But, as said
-above, \type {cff2} is not backward-compatible so a viewer will (currently)
-simply not show anything.
-
-Recalling how we load fonts, how does that translate with variable changes? If we
+along, but that's not what works well in practice. Take \LUATEX. We can, of
+course, load the font and apply axis vales, so that we can process the document
+as we normally do. But, at some point, we have to create a \PDF\ file. We can
+simply embed the \TRUETYPE\ files, but no axis values are applied. This is
+because, even if we add the relevant information, there is no way in the current
+\PDF\ formats to deal with it. For that, we should be able to pass all relevant
+axis|-|related information as well as specify what values to use along these
+axes. And, for \TRUETYPE\ fonts, this information is not part of the shape
+description so then we need to filter and pass more. An \OPENTYPE\ \POSTSCRIPT\
+font is much cleaner, because there we have the information needed to transform
+the shape mostly in the glyph description. There, we only need to carry some
+extra information on how to apply these so|-|called blend values. The
+region|/|axis model used there only demands passing a relatively simple table
+(stripped down to what we need). But, as said above, \type {cff2} is not
+backward-compatible, so a viewer will (currently) simply not show anything.
+
+Recalling how we load fonts, how does that change with variable changes? If we
have two characters with glyphs that get transformed and that have a kern between
them, the kern may or may not transform. So, when we choose values on an axis,
-then not only glyph properties change but also relations. We no longer can share
-positional information and scale afterwards because each instance can have
+then not only glyph properties change but also relations. We can no longer share
+positional information and scale afterwards, because each instance can have
different values to start with. We could carry all that information around and
-apply it at runtime but because we're typesetting documents with a static design
+apply it at runtime, but, because we're typesetting documents with a static design,
it's more convenient to just apply it once and create an instance. We can use the
-same caching as mentioned before but each chosen instance (provided by the font
+same caching as mentioned before, but each chosen instance (provided by the font
or made up by user specifications) is kept in the cache. As a consequence, using
a variable font has no overhead, apart from initial caching.
So, having dealt with that, how do we proceed? Processing a font is not different
from what we already had. However, I would not be surprised if users are not
-always satisfied with, for instance, kerning, because in such fonts a lot of care
-has to be given to this by the designer. Of course I can imagine that programs
+always satisfied with, for instance, kerning, because in such fonts, a lot of care
+has to be given to this by the designer. Of course, I can imagine that programs
used to create fonts deal with this, but even then, there is a visual aspect to
-it too. The good news is that in \CONTEXT\ we can manipulate features so in
-theory one can create a so|-|called font goodie file for a specific instance.
+it, too. The good news is that in \CONTEXT\ we can manipulate features, so, in
+theory, one can create a so|-|called font goodie file for a specific instance.
\stopsubject
\startsubject[title=Shapes]
-For \OPENTYPE\ \POSTSCRIPT\ shapes we always have to do a dummy rendering in
-order to get the right bounding box information. For \TRUETYPE\ this information
+For \OPENTYPE\ \POSTSCRIPT\ shapes, we always have to do a dummy rendering in
+order to get the right bounding box information. For \TRUETYPE, this information
is already present but not when we use a variable instance, so I had to do a bit
-of coding for that. Here we face a problem. For \TEX\ we need the width, height
+of coding for that. Here we face a problem. For \TEX, we need the width, height
and depth of a glyph. Consider the following case:
\startlinecorrection
@@ -259,16 +260,16 @@ draw boundingbox currentpicture
The shape has a bounding box that fits the shape. However, its left corner is not
at the origin. So, when we calculate a tight bounding box, we cannot use it for
actually positioning the glyph. We do use it (for horizontal scripts) to get the
-height and depth but for the width we depend on an explicit value. In \OPENTYPE\
-\POSTSCRIPT\ we have the width available and how the shape is positioned relative
-to the origin doesn't much matter. In a \TRUETYPE\ shape a bounding box is part
-of the specification, as is the width, but for a variable font one has to use
-so-called phantom points to recalculate the width and the test fonts I had were
+height and depth, but for the width, we depend on an explicit value. In \OPENTYPE\
+\POSTSCRIPT, we have the width available, and how the shape is positioned relative
+to the origin doesn't much matter. In a \TRUETYPE\ shape, a bounding box is part
+of the specification, as is the width, but for a variable font, one has to use
+so|-|called phantom points to recalculate the width, and the test fonts I had were
not suitable for investigating this.
At any rate, once I could generate documents with typeset text using variable
-fonts it became time to start thinking about a user interface. A variable font
-can have predefined instances but of course a user also wants to mess with axis
+fonts, it was time to start thinking about a user interface. A variable font
+can have predefined instances, but, of course, a user also wants to mess with axis
values. Take one of the test fonts: Adobe Variable Font Prototype. It has several
instances:
@@ -310,7 +311,7 @@ The Avenir Next variable demo font (currently) provides:
\SampleFont {avenirnextvariable} {heavy condensed} {heavycondensed}
\stoptabulate
-Before we continue I will show a few examples of variable shapes. Here we use some
+Before we continue, I will show a few examples of variable shapes. Here, we use some
\METAFUN\ magic. Just take these definitions for granted.
\startbuffer[a]
@@ -357,15 +358,15 @@ Before we continue I will show a few examples of variable shapes. Here we use so
\typebuffer[a,b,c,d]
The results are shown in \in {figure} [fig:whatever:1]. What we see here is that
-as long as we fill the shape everything will look as expected but using an
-outline only won't. The crucial (control) points are moved to different locations
-and as a result they can end up inside the shape. Giving up outlines is the price
-we evidently need to pay. Of course this is not unique for variable fonts
-although in practice static fonts behave better. To some extent we're back to
+as long as we fill the shape everything will look as expected, but only using an
+outline won't. The crucial (control) points are moved to different locations
+and, as a result, they can end up inside the shape. Giving up outlines is the price
+we evidently need to pay. Of course this is not unique for variable fonts,
+although, in practice, static fonts behave better. To some extent, we're back to
where we were with \METAFONT\ and (for instance) Computer Modern: because these
originate in bitmaps (and probably use similar design logic) we also can have
overlap and bits and pieces pasted together and no one will notice that. The
-first outline variants of Computer Modern also had such artifacts while in the
+first outline variants of Computer Modern also had such artifacts, while in the
static Latin Modern successors, outlines were cleaned up.
\startplacefigure[title=Four variants,reference=fig:whatever:1]
@@ -377,9 +378,10 @@ static Latin Modern successors, outlines were cleaned up.
\stopcombination
\stopplacefigure
-The fact that we need to preprocess an instance but only know how to do that when
-we have gotten the information about axis values from the font means that the
-font handler has to be adapted to keep caching correct. Another definition is:
+The fact that we need to preprocess an instance, but that we only know how to do
+that after we have retrieved information about axis values from the font means
+that the font handler has to be adapted to keep caching correct. Another
+definition is:
\starttyping
\definefontfeature
@@ -392,9 +394,9 @@ font handler has to be adapted to keep caching correct. Another definition is:
[name:adobevariablefontprototype*lightdefault]
\stoptyping
-Here the complication is that where normally features are dealt with after
+Here, the complication is that where normally features are dealt with after
loading, the axis feature is part of the preparation (and caching). If you want
-the virtual font solution you can do this:
+the virtual font solution, you can do this:
\starttyping
\definefontfeature
@@ -408,12 +410,12 @@ the virtual font solution you can do this:
[name:adobevariablefontprototype*inlinelightdefault]
\stoptyping
-When playing with these fonts it was hard to see if loading was done right. For
-instance not all values make sense. It is beyond the scope of this article, but
-axes like weight, width, contrast and italic values get applied differently to
-so|-|called regions (subspaces). So say that we have an $x$ coordinate with value
-$50$. This value can be adapted in, for instance, four subspaces (regions), so we
-actually get:
+When playing with these fonts, it was hard to see if loading was done right. For
+instance, not all values make sense. It is beyond the scope of this article, but
+axes like weight, width, contrast, and italic values get applied differently to
+so|-|called regions (subspaces). So, say that we have an $x$ coordinate with the
+value $50$. This value can be adapted in, for instance, four subspaces (regions),
+so we actually get:
\startformula
x^\prime = x
@@ -423,11 +425,11 @@ actually get:
+ s_4 \times x_4
\stopformula
-The (here) four scale factors $s_n$ are determined by the axis value. Each axis
+The (here four) scale factors $s_n$ are determined by the axis value. Each axis
has some rules about how to map the values $230$ for weight and $50$ for contrast
-to such a factor. And each region has its own translation from axis values to
-these factors. The deltas $x_1,\dots,x_4$ are provided by the font. For a
-\POSTSCRIPT|-|based font we find sequences like:
+to such a factor. Each region has its own translation from axis values to these
+factors. The deltas $x_1,\dots,x_4$ are provided by the font. In a
+\POSTSCRIPT|-|based font, we find sequences like:
\starttyping
1 <setvstore>
@@ -437,10 +439,10 @@ these factors. The deltas $x_1,\dots,x_4$ are provided by the font. For a
A store refers to a region specification. From there the factors are calculated
using the chosen values on the axis. The deltas are part of the glyphs
-specification. Officially there can be multiple region specifications, but how
+specification. Officially, there can be multiple region specifications, but how
likely it is that they will be used in real fonts is an open question.
-For \TRUETYPE\ fonts the deltas are not in the glyph specification but in a
+In \TRUETYPE\ fonts, the deltas are not in the glyph specification but in a
dedicated \type {gvar} table.
\starttyping
@@ -448,7 +450,7 @@ apply x deltas [10 -30 40 -60] to x 120
apply y deltas [30 -10 -30 20] to y 100
\stoptyping
-Here the deltas come from tables outside the glyph specification and their
+Here, the deltas come from tables outside the glyph specification and their
application is triggered by a combination of axis values and regions.
The following two examples use Avenir Next Variable and demonstrate that kerning
@@ -488,19 +490,19 @@ is adapted to the variant.
\startsubject[title=Embedding]
-Once we're done typesetting and a \PDF\ file has to be created there are three
+Once we're done typesetting and a \PDF\ file has to be created, there are three
possible routes:
\startitemize
\startitem
We can embed the shapes as \PDF\ images (inline literal) using virtual
- font technology. We cannot use so|-|called xforms here because we want to
+ font technology. We cannot use so|-|called xforms here, because we want to
support color selectively in text.
\stopitem
\startitem
- We can wait till the \PDF\ format supports such fonts, which might happen
- but even then we might be stuck for years with viewers getting there. Also
- documents need to get printed, and when printer support might
+ We can wait till the \PDF\ format supports such fonts, which might
+ happen, but even then we might be stuck for years with viewers getting
+ there. Also, documents need to be printed, and when printer support might
arrive is another unknown.
\stopitem
\startitem
@@ -512,43 +514,43 @@ possible routes:
Once I could interpret the right information in the font, the first route was the
way to go. A side effect of having a converter for both outline types meant that
it was trivial to create a virtual font at runtime. This option will stay in
-\CONTEXT\ as pseudo|-|feature \type {variableshapes}.
+\CONTEXT\ as a pseudo|-|feature \type {variableshapes}.
-When trying to support variable fonts I tried to limit the impact on the backend
+When trying to support variable fonts, I tried to limit the impact on the backend
code. Also, processing features and such was not touched. The inclusion of the
right shapes is done via a callback that requests the blob to be injected in the
-\type {cff} or \type {glyf} table. When implementing this I actually found out
-that the \LUATEX\ backend also does some juggling of charstrings, to serve the
-purpose of inlining subroutines. In retrospect I could have learned a few tricks
-faster by looking at that code but I never realized that it was there. Looking at
-the code again, it strikes me that the whole inclusion could be done with \LUA\
-code and some day I will give that a try.
+\type {cff} or \type {glyf} table. When implementing this, I actually found out
+that the \LUATEX\ backend also does some juggling of charstrings to inline
+subroutines. In retrospect, I could have learned a few tricks faster by looking
+at that code, but I never realized that it was there. Looking at the code again,
+it strikes me that the whole inclusion could be done with \LUA\ code, and, some
+day, I will give that a try.
\stopsubject
\startsubject[title=Conclusion]
-When I first heard about variable fonts I was confident that when they showed up
-they could be supported. Of course a specimen was needed to prove this. A first
-implementation demonstrates that indeed it's no big deal to let \CONTEXT\ with
-\LUATEX\ handle such fonts. Of course we need to fill in some gaps which can be
-done once we have complete fonts. And then of course users will demand more
-control. In the meantime the helper script that deals with identifying fonts by
-name has been extended and the relevant code has been added to the distribution.
-At some point the \CONTEXT\ Garden will provide the \LUATEX\ binary that has the
-callback.
-
-I end with a warning. On the one hand this technology looks promising but on the
-other hand one can easily get lost. Probably most such fonts operate over a
-well|-|defined domain of values but even then one should be aware of complex
+When I first heard about variable fonts, I was confident that when they showed
+up, they could be supported. Of course, a specimen was needed to prove this. A
+first implementation demonstrates that, indeed, it's no big deal to let \CONTEXT\
+with \LUATEX\ handle such fonts. Of course, we need to fill in some gaps, which
+can be done once we have complete fonts. And then, of course, users will demand
+more control. In the meantime, the helper script that deals with identifying
+fonts by name has been extended, and the relevant code has been added to the
+distribution. At some point, the \CONTEXT\ Garden will provide the \LUATEX\
+binary that has the callback.
+
+I end on a warning note. On the one hand, this technology looks promising, but on
+the other hand, one can easily get lost. Most such fonts probably operate over a
+well|-|defined domain of values, but, even then, one should be aware of complex
interactions with features like positioning or replacements. Not all combinations
-can be tested. It's probably best to stick to fonts that have all the relevant
+can be tested. It's probably best to stick with fonts that have all the relevant
tables and don't depend on properties of a specific rendering technology.
-Although support is now present in the core of \CONTEXT\ the official release
-will happen at the \CONTEXT\ meeting in 2017. By then I hope to have tested more
-fonts. Maybe the interface has also been extended by then because after all,
-\TEX\ is about control.
+Although support is now present in the core of \CONTEXT, the official release
+will happen at the \CONTEXT\ meeting in 2017. By then, I hope to have tested more
+fonts. Maybe the interface will also have been extended by then, because, after
+all, \TEX\ is about control.
\stopsubject
diff --git a/doc/context/sources/general/manuals/tools/tools-mkiv.tex b/doc/context/sources/general/manuals/tools/tools-mkiv.tex
index 481426756..949a878ca 100644
--- a/doc/context/sources/general/manuals/tools/tools-mkiv.tex
+++ b/doc/context/sources/general/manuals/tools/tools-mkiv.tex
@@ -37,11 +37,17 @@
\setuptyping
[color=DocumentColor]
-\usetypescript
- [iwona]
+\setupalign
+ [tolerant,stretch]
+
+% \usetypescript
+% [iwona]
+%
+% \setupbodyfont
+% [iwona]
\setupbodyfont
- [iwona]
+ [ibmplex,rm]
\setuphead
[chapter]
@@ -53,6 +59,11 @@
[style=\bfb,
color=DocumentColor]
+\setuphead
+ [sub section]
+ [style=\bfa,
+ color=DocumentColor]
+
\setupinteraction
[hidden]
@@ -130,7 +141,7 @@ This manual is work in progress. Feel free to submit additions or corrections.
Before you start reading, it is good to know that in order to get starting with
\CONTEXT, the easiest way to do that is to download the standalone distribution
from \type {contextgarden.net}. After that you only need to make sure that \type
-{luatex} is in your path. The main command you use is then \type {context} and
+{luatex} is in your path. The main command you use is then \sCONTEXT\ and
normally it does all the magic it needs itself.
\stopsection
@@ -488,9 +499,8 @@ You can copy \type {mtxrun.exe} to for instance \type {context.exe} and it will
still use \sMTXRUN\ for locating the right script. It also takes care of mapping
\sTEXMFSTART\ to \sMTXRUN. So we've removed the intermediate \type {cmd} step,
can not run the script as any program, and most of all, we're as efficient as can
-be.
-
-Of course this program is only meaningful for the \CONTEXT\ approach to tools.
+be. Of course this program is only meaningful for the \CONTEXT\ approach to
+tools.
It may all sound more complex than it is but once it works users will not notice
those details. Als, in practice not that much has changed in running the tools
@@ -498,12 +508,909 @@ between \MKII\ and \MKIV\ as we've seen no reason to change the methods.
\stopsection
+\startsection[title={A detailed look at \sMTXRUN}]
+
+This section is derived from Taco Hoekwaters presentation and article for the
+2018 \CONTEXT\ meeting. You might want to read this is you want to benefit from
+even the most obscure features. There is a bit of repetition with the previous
+sections but so be it.
+
+% macros specific to this section
+
+\def\highlighted#1#2#3%
+ {\testpage[4]
+ \dontleavehmode
+ \backgroundline[gray]{\tt\strut #1}
+ \nowhitespace
+ \startnarrower[left]
+ \veryraggedright
+ #2\par
+ \doifsomething{#3}{{\it #3}}
+ \stopnarrower}
+
+\definestartstop
+ [options]
+ [before=\blank,
+ after=\blank]
+
+\def\option#1#2%
+ {\highlighted{--#1}{#2}{}}
+
+\definestartstop
+ [mtxrunscripts]
+ [before=\blank,after=\blank]
+
+\def\mtxrunscriptv#1#2#3#4%
+ {\highlighted{#1}{#3}{#4}}
+
+\def\mtxrunscript#1#2#3%
+ {\highlighted{#1}{#3}{}}
+
+\definestartstop
+ [mtxrunenvironment]
+ [before=\blank,
+ after=\blank]
+
+\def\mtxrunenv#1#2%
+ {\highlighted{#1}{#2}{}}
+
+\startsubsection[title=Common flags]
+
+Much of the code inside \MKIV\ can alter its behaviour based on either \quote
+{trackers} (which add debugging information to the terminal and log output) or
+\quote {directives} or \quote {experiments} (for getting code to perform some
+alternate behaviour). Since this also affects the \LUA\ code within \sMTXRUN\
+itself, it makes sense to list these options first.
+
+Getting information on trackers, directives and experiments. Trackers enable more
+extensive status messages on the console or in \CONTEXT\ additional visual clues.
+Directives change behaviour that are not part of the official interface and have
+no corresponding commands. Experiments are like directives but not official
+(yet).
+
+\startoptions
+ \option
+ {trackers}
+ {show (known) trackers}
+ \option
+ {directives}
+ {show (known) directives}
+ \option
+ {experiments}
+ {show (known) experiments}
+\stopoptions
+
+Enabling directives, trackers and experiments:
+
+\startoptions
+ \option
+ {trackers=list}
+ {enable given trackers}
+ \option
+ {directives=list}
+ {enable given directives}
+ \option
+ {experiments=list}
+ {enable given experiments}
+\stopoptions
+
+The next tree (hidden) options are converted into \quote {directives} entries,
+that are then enabled. These are just syntactic sugar for the relevant directive.
+
+\startoptions
+ \option
+ {silent[=...]}
+ {sets \type {logs.blocked={\%s}}}
+ \option
+ {errors[=...]}
+ {sets \type {logs.errors={\%s}}}
+ \option
+ {noconsole}
+ {sets \type {logs.target=file}}
+\stopoptions
+
+As you can see here, various directives (and even some trackers) have optional
+arguments, which can make specifying such directives on the command line a bit of
+a challenge. Explaining the details of all the directives is outside of the scope
+of this article, but you can look them up in the \CONTEXT\ source by searching
+for \typ {directives.register} and \typ {trackers.register}.
+
+In verbose mode, \sMTXRUN\ itself gives more messages, and it also \typ
+{resolvers.locating}, which is a tracker itself:
+
+\startoptions
+ \option
+ {verbose}
+ {give a bit more info}
+\stopoptions
+
+The \type {--timedlog} (hidden) option starts the \sMTXRUN\ output with a
+timestamp line:
+
+\startoptions
+ \option
+ {timedlog}
+ {prepend output with a timestamp}
+\stopoptions
+
+\stopsubsection
+
+\startsubsection[title=Setup for finding files and configurations]
+
+The next block of options deals with the setup of \sMTXRUN\ itself. You do not
+need to deal with these options unless you are messing with the \CONTEXT\
+distribution yourself instead of relying on a prepackaged solution, or you need
+to use kpathsea for some reason (typically in a \MKII\ environment). In
+particular, \type {--progname} and \type {--tree} are often needed as well when
+using the \type {kpse} options.
+
+\startoptions
+ \option
+ {configurations}
+ {show configuration order, alias \type {--show-configurations}}
+ \option
+ {resolve}
+ {resolve prefixed arguments, see \type {--prefixes}, below}
+\stopoptions
+
+and:
+
+\startoptions
+ \option
+ {usekpse}
+ {use kpse as fallback (when no \MKIV\ and cache installed, often slower)}
+ \option
+ {forcekpse}
+ {force using kpse (handy when no \MKIV\ and cache installed but less
+ functionality)}
+ \option
+ {progname=str}
+ {format or backend}
+ \option
+ {tree=pathtotree}
+ {use given texmf tree (default file: \type {setuptex.tmf})}
+\stopoptions
+
+\stopsubsection
+
+\startsubsection[title=Options for finding files and reporting configurations]
+
+Once the configuration setup is done, it makes sense to have a bunch or options
+to use and|/|or query the configuration.
+
+\startoptions
+ \option
+ {locate}
+ {locate given filename in database (default) or system (uses the
+ sub||options \type {--first}, \type {--all} and \type {--detail})}
+ \option
+ {autogenerate}
+ {regenerate databases if needed (handy when used to run context in an
+ editor)}
+ \option
+ {generate}
+ {generate file database}
+ \option
+ {prefixes}
+ {show supported prefixes for file searches}
+ \option
+ {variables}
+ {show configuration variables (uses the sub||option \type {--pattern},
+ and an alias is \type {--show-variables})}
+ \option
+ {expansions}
+ {show configuration variable expansion (uses the sub||options
+ \type{--pattern}, alias \type {--show-expansions})}
+ \option
+ {expand-braces}
+ {expand complex variable}
+ \option
+ {resolve-path}
+ {expand variable (completely resolve paths)}
+ \option
+ {expand-path}
+ {expand variable (resolve paths)}
+ \option
+ {expand-var}
+ {expand variable (resolves references inside variables, alias
+ \type{--expand-variable})}
+ \option
+ {show-path}
+ {show path expansion of \type {...} (alias \type {--path-value})}
+ \option
+ {var-value}
+ {report value of variable (alias \type {--show-value})}
+ \option
+ {find-file}
+ {report file location; it uses the sub||options \type {--all}, \type
+ {--pattern}, and \type {--format}}
+ \option
+ {find-path}
+ {report path of file}
+\stopoptions
+
+Hidden option:
+
+\startoptions
+ \option
+ {format-path}
+ {report format path}
+\stopoptions
+
+\stopsubsection
+
+\startsubsection[title=Running code]
+
+Here we come to the core functionality of \sMTXRUN: running scripts. First
+there are few options that trigger how the running takes place:
+
+\startoptions
+ \option
+ {path=runpath}
+ {go to given path before execution}
+ \option
+ {ifchanged=filename}
+ {only execute when given file has changed (this loads and saves an md5
+ checksum from \type {filename.md5})}
+ \option
+ {iftouched=old,new}
+ {only execute when given file has changed (time stamp)}
+ \option
+ {timedrun}
+ {run a script or program and time its run (external)}
+\stopoptions
+
+Specifying both \type {--iftouched} and \type {--ifchanged} means both are
+tested, and when either one is false, nothing will happen. These options have to
+come before one of the next options:
+
+\startoptions
+ \option
+ {script}
+ {run an mtx script (where \LUA\ is the preferred method); it has the
+ sub||options \typ {--nofiledatabase}, \typ {--autogenerate}, \type
+ {--load}, and \type {--save}. The latter two are currently no|-|ops}
+ \option
+ {execute}
+ {run a script or program externally (\type {texmfstart} method); it has
+ sub||option \type {--noquotes}}
+ \option
+ {internal}
+ {run a script using built|-|in libraries (alias is \type {--ctxlua})}
+ \option
+ {direct}
+ {run an external program; it has the sub||option \type {--noquotes}}
+\stopoptions
+
+Since scripts potentially have their own options, any options intended for
+\sMTXRUN\ itself have to come {\it before} the option that specifies the script
+to run, and options for the script itself have to come {\it after} the option
+that gives the script name. This is especially true when using \type {--script},
+so it is important to check the order of your options.
+
+Of the four above options, \type {--script} is the most important one, since that
+is the one that finds and executes the \LUA\ \sMTXRUN\ scripts provided by the
+distribution. With \typ {--nofiledatabase}, it will not attempt to resolve any
+file names (which means you need either a local script or a full path name). On
+the opposite side, when you also provide \typ {--autogenerate}, it will not only
+attempt to resolve the file name, it will also regenerate the database if it
+cannot find the script on the first try. In a future version of \CONTEXT, the
+\type {--load} and \type {--save} will allow you to save|/|restore the current
+command line in a file for reuse.
+
+The shell return value of \sMTXRUN\ indicates whether the script was found. When
+you specify something like \type {--script base}, \sMTXRUN\ actually searches
+for \type {mtx-base.lua}, \type {mtx-bases.lua}, \type {mtx-t-base.lua}, \type
+{mtx-t-bases.lua}, and \type {base.lua}, in that order. The
+distribution||supplied scripts normally use \type {mtx-<name>.lua} as template.
+The template names with \type {mtx-t-} prefix is reserved for third||party
+scripts, and \type {<name>.lua} is just a last-ditch effort if nothing else
+works. Scripts are looked for in the local path, and in whatever directories the
+configuration variable \type {LUAINPUTS} points to.
+
+The \type {--execute} options exists mostly for the non||\LUA\ {\MKII} scripts
+that still exist in the distribution. It will try to find a matching interpreter
+for non||\LUA\ scripts, and it is aware of a number of distribution||supplied
+scripts so that if you specify \type {--execute texexec}, it knows that what you
+really want to execute is \type {ruby texexec.rb}. Support is present for \RUBY\
+(\type {.rb}, \LUA\ (\type {.lua}), python (\type {.py}) and \PERL\ (\type {.pl})
+scripts (tested in that order). File resolving uses \type {TEXMFSCRIPTS} from the
+configuration. The shell return value of \sMTXRUN\ indicates whether the script
+was found and executed.
+
+The \type {--internal} option uses the file search method of \type {--execute},
+but then assumes this is a \LUA\ script and executes it internally like \type
+{--script}. This is useful if you have a \LUA\ script in an odd location.
+
+The last of the four options, \type {--direct}, directly executes an external
+program. You need to give the full path for binaries not in the current shell
+\type {PATH}, because no searching is done at all. The shell return value of
+\sMTXRUN\ in this case is a boolean based on the return value of
+\type {os.exec()}.
+
+It is also possible to execute bare \LUA\ code directly:
+
+\startoptions
+ \option
+ {evaluate}
+ {run code passed on the command-line (between quotes)}
+\stopoptions
+
+\stopsubsection
+
+\startsubsection[title=Options for maintenance of \sMTXRUN\ itself]
+
+None of these are advertised. Normally developers should be the only ones needing
+them, but if you made a change to one of the distributed libraries (maybe because
+of a beta bug), you may need to run \type {--selfmerge} and \type {--selfupdate}.
+
+\startoptions
+ \option
+ {selfclean}
+ {remove embedded libraries}
+ \option
+ {selfmerge}
+ {update embedded libraries in \type {mtxrun.lua}}
+ \option
+ {selfupdate}
+ {copy \type {mtxlua.lua} to the executable directory, renamed \type
+ {mtxrun}}
+\stopoptions
+
+\stopsubsection
+
+\startsubsection[title=Creating stubs]
+
+Stubs are little shortcuts that live in some binaries directory. For example, the
+content of the \UNIX||style \sCONTEXT\ shell command is:
+
+\starttyping
+#!/bin/sh
+mtxrun --script context "$@"
+\stoptyping
+
+Apart from the \sCONTEXT\ command itself (which is provided by the distribution),
+use of stubs is discouraged. Still, the \sMTXRUN\ options are there because
+sometimes existing workflows depend on executable tool names like \type
+{ctxtools}.
+
+\startoptions
+ \option
+ {makestubs}
+ {create stubs for (context related) scripts}
+ \option
+ {removestubs}
+ {remove stubs (context related) scripts}
+ \option
+ {stubpath=binpath}
+ {paths where stubs will be written}
+ \option
+ {windows}
+ {create windows (mswin) stubs (alias \type {--mswin})}
+ \option
+ {unix}
+ {create unix (linux) stubs (alias \type {--linux})}
+\stopoptions
+
+\stopsubsection
+
+\startsubsection[title=Remaining options]
+
+The remaining options are hard to group into a subcategory. These are the
+advertised options:
+
+\startoptions
+ \option
+ {systeminfo}
+ {show current operating system, processor, et cetera}
+ \option
+ {edit}
+ {launch editor with found file; the editor is taken from the environment
+ variable \type {MTXRUN_EDITOR}, or \type {TEXMFSTART_EDITOR}, or
+ \type {EDITOR}, or as a last resort: \type {gvim}}
+ \option
+ {launch}
+ {launch files like manuals, assumes os support (uses the sub||options
+ \type {--all}, \type {--pattern} and \type {--list})}
+\stopoptions
+
+While these are sort of hidden options:
+
+\startoptions
+ \option
+ {ansi}
+ {colorize output to terminal using \ANSI\ escapes}
+ \option
+ {associate}
+ {launch files like manuals, assumes os support. this function does not do
+ any file searching, so you have to use either a local file or a full
+ path name}
+ \option
+ {exporthelp}
+ {output the \sMTXRUN\ \XML\ help blob (useful for creating man and \HTML\
+ help pages)}
+ \option
+ {fmt}
+ {shortcut for \type {--script base --fmt}}
+ \option
+ {gethelp}
+ {attempt to look up remote \sCONTEXT\ command help (uses the sub||options
+ \type{--command} and \type {--url})}
+ \option
+ {help}
+ {print the \sMTXRUN\ help screen}
+ \option
+ {locale}
+ {force setup of locale; unless you are certain you need this option, stay
+ away from it, because it can interfere massively with \CONTEXT's \LUA\
+ code}
+ \option
+ {make}
+ {(re)create format files (aliases are \type {--ini} and \type {--compile})}
+ \option
+ {platform}
+ {(alias is \type {--show-platform})}
+ \option
+ {run}
+ {shortcut for \type {--script base --run}}
+ \option
+ {version}
+ {print \sMTXRUN\ version}
+\stopoptions
+
+\stopsubsection
+
+\startsubsection[title=Known scripts]
+
+When you run \type {mtxrun --scripts}, it will output a list of \quote {known}
+scripts. The definition of \quote {known} is important here: the list comprises
+the scripts that are present in the same directory as \type {mtx-context.lua}
+that do not have an extra hyphen in the name (like \type {mtx-t-...}scripts would
+have). In a normal installation, this means it \quote {knows} almost all the
+scripts that are distributed with \CONTEXT. Note: it skips over any files from
+the distribution that do have an extra hyphen, like the \type {mtx-server}
+support scripts.
+
+Since this section is about \sMTXRUN, I'll just present the list of the scripts
+that are \quote {known} in the current \CONTEXT\ beta as output by \sMTXRUN\
+itself, and not get into detail about all of the script functionality (they all
+have \type {--help} options if you want to find out more). Where we still felt the
+need to explain something, there is an extra bit of text in italics.
+
+\startmtxrunscripts
+\mtxrunscript
+ {babel}
+ {1.20}
+ {Babel Input To UTF Conversion}
+\mtxrunscript
+ {base}
+ {1.35}
+ {ConTeXt TDS Management Tool (aka luatools)}
+\mtxrunscript
+ {bibtex}
+ {}
+ {bibtex helpers (obsolete)}
+\mtxrunscript
+ {cache}
+ {0.10}
+ {ConTeXt & MetaTeX Cache Management}
+\mtxrunscript
+ {chars}
+ {0.10}
+ {MkII Character Table Generators}
+\mtxrunscriptv
+ {check}
+ {0.10}
+ {Basic ConTeXt Syntax Checking}
+ {Occasionally useful on big projects, but be warned that it does not actually
+ run any \TEX\ engine, so it is not 100\% reliable.}
+\mtxrunscriptv
+ {colors}
+ {0.10}
+ {ConTeXt Color Management}
+ {This displays icc color tables by name}
+\mtxrunscriptv
+ {convert}
+ {0.10}
+ {ConTeXT Graphic Conversion Helpers}
+ {A wrapper around ghostscript and imagemagick that offers some extra (batch
+ processing) functionality.}
+\mtxrunscript
+ {dvi}
+ {0.10}
+ {ConTeXt DVI Helpers}
+\mtxrunscriptv
+ {epub}
+ {1.10}
+ {ConTeXt EPUB Helpers}
+ {The EPUB manual (\type {epub-mkiv.pdf}) explains how to use this script.}
+\mtxrunscriptv
+ {evohome}
+ {1.00}
+ {Evohome Fetcher}
+ {Evohome is a domotica system that controls your central heating}
+\mtxrunscript
+ {fcd}
+ {1.00}
+ {Fast Directory Change}
+\mtxrunscriptv
+ {flac}
+ {0.10}
+ {ConTeXt Flac Helpers}
+ {Extracts information from \type{.flac} audio files into an \XML\ index.}
+\mtxrunscript
+ {fonts}
+ {0.21}
+ {ConTeXt Font Database Management}
+\mtxrunscript
+ {grep}
+ {0.10}
+ {Simple Grepper}
+\mtxrunscript
+ {interface}
+ {0.13}
+ {ConTeXt Interface Related Goodies}
+\mtxrunscript
+ {metapost}
+ {0.10}
+ {MetaPost to PDF processor}
+\mtxrunscript
+ {metatex}
+ {0.10}
+ {MetaTeX Process Management (obsolete)}
+\mtxrunscript
+ {modules}
+ {1.00}
+ {ConTeXt Module Documentation Generators}
+\mtxrunscriptv
+ {package}
+ {0.10}
+ {Distribution Related Goodies}
+ {This script is used to create the generic \CONTEXT\ code used in
+ \LUA\LATEX~c.s.}
+\mtxrunscriptv
+ {patterns}
+ {0.20}
+ {ConTeXt Pattern File Management}
+ {Hyphenation patterns, that is \unknown}
+\mtxrunscript
+ {pdf}
+ {0.10}
+ {ConTeXt PDF Helpers}
+\mtxrunscript
+ {plain}
+ {1.00}
+ {Plain TeX Runner}
+\mtxrunscript
+ {profile}
+ {1.00}
+ {ConTeXt MkIV LuaTeX Profiler}
+\mtxrunscript
+ {rsync}
+ {0.10}
+ {Rsync Helpers}
+\mtxrunscript
+ {scite}
+ {1.00}
+ {Scite Helper Script}
+\mtxrunscriptv
+ {server}
+ {0.10}
+ {Simple Webserver For Helpers}
+ {There are some subscripts associated with this.}
+\mtxrunscript
+ {synctex}
+ {1.00}
+ {ConTeXt SyncTeX Checker}
+\mtxrunscript
+ {texworks}
+ {1.00}
+ {TeXworks Startup Script}
+\mtxrunscript
+ {timing}
+ {0.10}
+ {ConTeXt Timing Tools}
+\mtxrunscript
+ {tools}
+ {1.01}
+ {Some File Related Goodies}
+\mtxrunscript
+ {unicode}
+ {1.02}
+ {Checker for \type{char-def.lua}}
+\mtxrunscript
+ {unzip}
+ {0.10}
+ {Simple Unzipper}
+\mtxrunscript
+ {update}
+ {1.03}
+ {ConTeXt Minimals Updater}
+\mtxrunscript
+ {watch}
+ {1.00}
+ {ConTeXt Request Watchdog}
+\mtxrunscriptv
+ {youless}
+ {1.10}
+ {YouLess Fetcher}
+ {YouLess is a domotica system that tracks your home energy use.}
+\stopmtxrunscripts
+
+\stopsubsection
+
+\startsubsection[title=Writing your own]
+
+A well|-|written script has some required internal structure. It should start with
+a module definition block. This gives some information about the module, but more
+importantly, it prevents double|-|loading.
+
+Here is an example:
+
+\starttyping
+if not modules then modules = { } end
+
+modules ['mtx-envtest'] = {
+ version = 0.100,
+ comment = "companion to mtxrun.lua",
+ author = "Taco Hoekwater",
+ copyright = "Taco Hoekwater",
+ license = "bsd"
+}
+\stoptyping
+
+Next up is a variable containing the help information. The help information is actually
+a bit of \XML\ stored in \LUA\ string. In the full example listing at the end of this
+article, you can see what the internal structure is supposed to be like.
+
+\starttyping
+local helpinfo = [[
+<?xml version="1.0"?>
+<application>
+ ....
+</application>
+]]
+\stoptyping
+
+And this help information is then used to create an instance of an \type
+{application} table.
+
+\starttyping
+local application = logs.application {
+ name = "envtest",
+ banner = "Mtxrun environment demo",
+ helpinfo = helpinfo,
+}
+\stoptyping
+
+After this call, the \type {application} table contains (amongst some other
+things) three functions that are very useful:
+
+\startmtxrunenvironment
+\mtxrunenv
+ {identify()}
+ {Prints out a banner identifying the current script to the user.}
+\mtxrunenv
+ {report(str)}
+ {For printing information to the terminal with the script name as prefix.}
+\mtxrunenv
+ {export()}
+ {Prints the \type {helpinfo} to the terminal, so it can easily be used for
+ documentation purposes.}
+\stopmtxrunenvironment
+
+Next up, it is good to define your scripts' functionality in functions in a
+private table. This prevents namespace pollution, and looks like this:
+
+\starttyping
+scripts = scripts or { }
+scripts.envtest = scripts.envtest or { }
+
+function scripts.envtest.runtest()
+ application.report("script name is " .. environment.ownname)
+end
+\stoptyping
+
+An finally, identify the current script, followed by handling the provided
+options (usually with an \type {if}||\type {else} statement).
+
+\starttyping
+if environment.argument("exporthelp") then
+ application.export()
+elseif environment.argument('test') then
+ scripts.envtest.runtest()
+else
+ application.help()
+end
+\stoptyping
+
+\stopsubsection
+
+\startsubsection[title=Script environment]
+
+\sMTXRUN\ includes lots of the internal \LUA\ helper libraries from \CONTEXT. We
+actually maintains a version of the script without all those libraries included,
+and before every (beta) \CONTEXT\ release, an amalgamated version of \sMTXRUN\ is
+added to the distribution. In the merging process, most all comments are stripped
+from the embedded libraries, so if you want to know details, it is better to look
+in the original \LUA\ source file.
+
+Inside \sMTXRUN, the full list of embedded libraries can be queried via the array
+\type {own.libs}:
+
+\startalign[flushleft]
+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-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 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 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 util-lib.lua luat-sta.lua luat-fmt.lua
+\stopalign
+
+In fact, the \LUA\ table \type {own} contains some other useful stuff like the
+script's actual disk name and location (\type {own.name} and \type {own.path})
+and some internal variables like a list of all the locations it searches for its
+embedded libraries (\type {own.list}), which is used by the \type {--selfmerge}
+option and also allows the non||amalgamated version to run (since otherwise \type
+{--selfmerge} could not be bootstrapped).
+
+\sMTXRUN\ offers a programming environment that makes it easy to write \LUA\ a
+scripts. The most important element of that environment is a \LUA\ table that is
+conveniently called \type {environment} (\type {util-env} does the actual work of
+setting that up).
+
+The bulk of \type {environment} consists of functions and variables that deal
+with the command||line given by the user as \sMTXRUN\ does quite a bit of work on
+the given command||line. The goal is to safely tuck all the given options into
+the \type {arguments} and \type {files} tables. This work is done by two
+functions called \type {initializearguments()} and \type {splitarguments()}.
+These functions are part of the \type{environment} table, but you should not need
+them as they have been called already once control is passed on to your script.
+
+\startmtxrunenvironment
+\mtxrunenv
+ {arguments}
+ {These are the processed options to the current script. The keys are option
+ names (without the leading dashes) and the value is either \type {true} or a
+ string with one level of shell quotes removed.}
+\mtxrunenv
+ {files}
+ {This array holds all the non||option arguments to the current script.
+ Typically, those are supposed to be files, but they could be any text,
+ really.}
+\mtxrunenv
+ {getargument(name,partial)}
+ {Queries the \type {arguments} table using a function. Its main reason for
+ existence is the \type {partial} argument, which allows scripts to accept
+ shortened command||line options (alias: \type {argument()}).}
+\mtxrunenv
+ {setargument(name,value)}
+ {Sets a value in the \type {arguments} table. This can be useful in
+ complicated scripts with default options.}
+\stopmtxrunenvironment
+
+In case you need access to the full command||line, there are some possibilities:
+
+\startmtxrunenvironment
+\mtxrunenv
+ {arguments_after}
+ {These are the unquoted but otherwise unprocessed arguments to your script as
+ an array.}
+\mtxrunenv
+ {arguments_before}
+ {These are the unquoted but otherwise unprocessed arguments to \sMTXRUN\
+ before your scripts' name (so the last entry is usually \type {--script}).}
+\mtxrunenv
+ {rawarguments}
+ {This is the whole unprocessed command||line as an array.}
+\mtxrunenv
+ {originalarguments}
+ {Like \type{rawarguments}, but with some top||level quotes removed.}
+\mtxrunenv
+ {reconstructcommandline(arg,noquote)}
+ {Tries to reconstruct a command||line from its arguments. It uses \type
+ {originalarguments} if no \type {arg} is given. Take care: due to the
+ vagaries of shell command||line processing, this may or may not work when
+ quoting is involved.}
+\stopmtxrunenvironment
+
+\type{environment} also stores various bits of information you may find useful:
+
+\startmtxrunenvironment
+\mtxrunenv
+ {validengines}
+ {This table contains keys for \type {luatex} and \type {luajittex}. This is
+ only relevant when \sMTXRUN\ itself is called via \LUATEX's \type {luaonly}
+ option.}
+\mtxrunenv
+ {basicengines}
+ {This table maps executable names to \type{validengines} entries.}
+\mtxrunenv
+ {default_texmfcnf}
+ {This is the \type {texmfcnf} value from \type {kpathsea}, processed for use
+ with \MKIV\ in the unlikely event this is needed.}
+\mtxrunenv
+ {homedir}
+ {The user's home directory.}
+\mtxrunenv
+ {ownbin}
+ {The name of the binary used to call \sMTXRUN.}
+\mtxrunenv
+ {ownmain}
+ {The mapped version of \type {ownbin}.}
+\mtxrunenv
+ {ownname}
+ {Full name of this instance of \sMTXRUN.}
+\mtxrunenv
+ {ownpath}
+ {The path this instance of \sMTXRUN\ resides in.}
+\mtxrunenv
+ {texmfos}
+ {Operating system root directory path.}
+\mtxrunenv
+ {texos}
+ {Operating system root directory name.}
+\mtxrunenv
+ {texroot}
+ {\CONTEXT\ root directory path.}
+\stopmtxrunenvironment
+
+As well as some functions:
+
+\startmtxrunenvironment
+\mtxrunenv
+ {texfile(filename)}
+ {Locates a {\TEX} file.}
+\mtxrunenv
+ {luafile(filename)}
+ {Locates a \LUA\ file.}
+\mtxrunenv
+ {loadluafile(filename,version)}
+ {Locates, compiles and loads a \LUA\ file, possibly in compressed \type {.luc}
+ format. In the compressed case, it uses the \type {version} to make sure the
+ compressed form is up||to||date.}
+\mtxrunenv
+ {luafilechunk(filename,silent,macros)}
+ {Locates and compiles a \LUA\ file, returning its contents as data.}
+\mtxrunenv
+ {make_format(name,arguments)}
+ {Creates a format file and stores in in the \CONTEXT\ cache, used by \type
+ {mtxrun --make}.}
+\mtxrunenv
+ {relativepath(path,root)}
+ {Returns a modified version of \type {root} based on the relative path in
+ \type {path}.}
+\mtxrunenv
+ {run_format(name,data,more)}
+ {Run a \TEX\ format file.}
+\stopmtxrunenvironment
+
+\stopsubsection
+
+\startsubsection[title=Shell return values]
+
+As explained earlier, the shell return value of \sMTXRUN\ normally indicates
+whether the script was found. If you are running a \CONTEXT\ release newer than
+September 2018 and want to modify the shell return value from within your script,
+you can use \type {os.exitcode}. Whatever value you assign to that variable will
+be the shell return value of your script.
+
+\stopsubsection
+
+\stopsection
+
\startsubject[title={Colofon}]
\starttabulate[|B|p|]
\NC author \NC \documentvariable{author},
\documentvariable{affiliation},
\documentvariable{location} \NC \NR
+ \NC \NC Taco Hoekwater, extra \sMTXRUN\ section \NC \NR
\NC version \NC \currentdate \NC \NR
\NC website \NC \documentvariable{website} \endash\
\documentvariable{support} \NC \NR
diff --git a/metapost/context/base/mpiv/mp-mlib.mpiv b/metapost/context/base/mpiv/mp-mlib.mpiv
index 310a3d959..41ec64cf2 100644
--- a/metapost/context/base/mpiv/mp-mlib.mpiv
+++ b/metapost/context/base/mpiv/mp-mlib.mpiv
@@ -406,13 +406,25 @@ vardef installlabel@# (expr type, x, y, offset) =
numeric labyf @# ; labyf @# := y ;
enddef ;
+vardef mfun_labshift@#(expr p) =
+ (labxf@#*lrcorner p +
+ labyf@#*ulcorner p +
+ (1-labxf@#-labyf@#)*llcorner p)
+enddef ;
+
+vardef mfun_picshift@#(expr p) =
+ (labxf@#*ulcorner p +
+ labyf@#*lrcorner p +
+ (1-labxf@#-labyf@#)*urcorner p)
+enddef ;
+
% we save the plain variant
vardef plain_thelabel@#(expr p,z) =
if string p :
plain_thelabel@#(rawtextext("\definedfont[" & defaultfont & "]" & p) scaled defaultscale,z)
else :
- p shifted (z + labeloffset*laboff@# - (labxf@#*lrcorner p + labyf@#*ulcorner p + (1-labxf@#-labyf@#)*llcorner p))
+ p shifted (z + labeloffset*laboff@# - mfun_labshift@#(p))
fi
enddef;
@@ -441,18 +453,41 @@ enddef ;
plain_compatibility_data := plain_compatibility_data & "save label, thelabel ;" & "useplainlabels ;" ;
+% vardef thetextext@#(expr p,z) =
+% % interim labeloffset := textextoffset ;
+% if string p :
+% thetextext@#(rawtextext(p),z)
+% elseif numeric p :
+% thetextext@#(rawtextext(decimal p),z)
+% else :
+% p
+% if (mfun_labtype@# >= 10) :
+% shifted (0,ypart center p)
+% fi
+% shifted (z + textextoffset*mfun_laboff@# - mfun_labshift@#(p))
+% fi
+% enddef ;
+
+newinternal anchortextexts ; anchortextexts := 1 ; % so we can disable it
+
vardef thetextext@#(expr p,z) =
% interim labeloffset := textextoffset ;
if string p :
thetextext@#(rawtextext(p),z)
elseif numeric p :
thetextext@#(rawtextext(decimal p),z)
+ elseif pair p :
+ thetextext@#(rawtextext(ddecimal p),z)
else :
- p
- if (mfun_labtype@# >= 10) :
- shifted (0,ypart center p)
- fi
- shifted (z + textextoffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+ if anchortextexts = 1 :
+ image(draw p withprescript "tx_anchor=" & ddecimal z)
+ else :
+ p
+ fi
+ if (mfun_labtype@# >= 10) :
+ shifted (0,ypart center p)
+ fi
+ shifted (z + textextoffset*mfun_laboff@# - mfun_labshift@#(p))
fi
enddef ;
@@ -546,7 +581,7 @@ vardef thefmttext@#(text t) =
if (mfun_labtype@# >= 10) :
shifted (0,ypart center p)
fi
- shifted (mfun_tt_z + textextoffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+ shifted (mfun_tt_z + textextoffset*mfun_laboff@# - mfun_labshift@#(p))
enddef ;
vardef fmttext@#(text t) = % no draw here
@@ -568,7 +603,7 @@ vardef thetexbox@#(expr category, name, z) =
if (mfun_labtype@# >= 10) :
shifted (0,ypart center p)
fi
- shifted (z + textextoffset*mfun_laboff@# - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+ shifted (z + textextoffset*mfun_laboff@# - mfun_labshift@#(p))
enddef ;
vardef texbox@#(expr category, name) = % no draw here
@@ -589,17 +624,11 @@ vardef theoffset@#(expr z) =
elseif path z :
if mfun_laboff@# = origin :
center z
- elseif cycle z :
- ((center z )--
- (mfun_labxf@#*ulcorner z + mfun_labyf@#*lrcorner z + (1-mfun_labxf@#-mfun_labyf@#)*urcorner z))
- intersectionpoint z
else :
- ((center z)--
- (mfun_labxf@#*ulcorner z + mfun_labyf@#*lrcorner z + (1-mfun_labxf@#-mfun_labyf@#)*urcorner z))
- intersectionpoint (z--cycle)
+ ((center z)-- mfun_picshift@#(z)) intersectionpoint (z if not cycle z: --cycle fi)
fi
else : % picture
- (mfun_labxf@#*ulcorner z + mfun_labyf@#*lrcorner z + (1-mfun_labxf@#-mfun_labyf@#)*urcorner z)
+ mfun_picshift@#(z)
fi
enddef;
@@ -611,10 +640,7 @@ vardef thelabel@#(expr p,z) =
elseif pair p :
thelabel@#("(" & decimal(xpart p) & "," & decimal(ypart p) & ")",z)
else :
- p shifted (theoffset@#(z)
- + labeloffset*mfun_laboff@#
- - (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p +
- (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+ p shifted (theoffset@#(z) + labeloffset*mfun_laboff@# - mfun_labshift@#(p))
fi
enddef;
@@ -627,7 +653,7 @@ vardef anchored@#(expr p, z) = % beware: no "+ mfun_laboff@#" here (never!)
if (mfun_labtype@# >= 10) :
shifted (0,ypart center p)
fi
- shifted (z + (mfun_labxf@#*lrcorner p + mfun_labyf@#*ulcorner p + (1-mfun_labxf@#-mfun_labyf@#)*llcorner p))
+ shifted (z + mfun_labshift@#(p))
enddef ;
let normalinfont = infont ;
diff --git a/metapost/context/base/mpiv/mp-tool.mpiv b/metapost/context/base/mpiv/mp-tool.mpiv
index fc0e566df..01ea2521b 100644
--- a/metapost/context/base/mpiv/mp-tool.mpiv
+++ b/metapost/context/base/mpiv/mp-tool.mpiv
@@ -397,6 +397,14 @@ vardef boundingpoint@#(expr p) =
fi
enddef ;
+def mirrored primary a =
+ a scaled -1
+enddef ;
+
+primarydef a mirroredabout b =
+ (a shifted -b) scaled -1 shifted b
+enddef ;
+
%D Some missing functions can be implemented rather straightforward (thanks to
%D Taco and others):
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 3ad3147ce..603be7c3b 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{2018.12.30 19:28}
+\newcontextversion{2019.01.03 19:27}
%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 eb7d5d402..228265904 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{2018.12.30 19:28}
+\edef\contextversion{2019.01.03 19:27}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/anch-pgr.mkiv b/tex/context/base/mkiv/anch-pgr.mkiv
index 5300a9a9c..7fa378cd1 100644
--- a/tex/context/base/mkiv/anch-pgr.mkiv
+++ b/tex/context/base/mkiv/anch-pgr.mkiv
@@ -157,7 +157,7 @@
\endgroup}
\def\anch_positions_place_anchors_nop
- {\vskip\textheight}
+ {\vkern\textheight}
%D \macros
%D {positionoverlay,startpositionoverlay}
diff --git a/tex/context/base/mkiv/back-exp.lua b/tex/context/base/mkiv/back-exp.lua
index 71e2b89f8..24b7b11df 100644
--- a/tex/context/base/mkiv/back-exp.lua
+++ b/tex/context/base/mkiv/back-exp.lua
@@ -2898,7 +2898,6 @@ local collectresults do -- too many locals otherwise
local getnext = nuts.getnext
local getdisc = nuts.getdisc
- ----- getcomponents = nuts.getcomponents
local getlist = nuts.getlist
local getid = nuts.getid
local getattr = nuts.getattr
@@ -2960,103 +2959,92 @@ local collectresults do -- too many locals otherwise
--
-- report_export("skipping character: %C (no attribute)",n.char)
else
- -- we could add tonunicodes for ligatures (todo)
- -- local components = getcomponents(n)
- -- if components and (not characterdata[c] or overloads[c]) then -- we loose data
- -- collectresults(components,nil,at) -- this assumes that components have the same attribute as the glyph ... we should be more tolerant (see math)
- -- else
- if last ~= at then
- local tl = taglist[at]
- local ap = getattr(n,a_taggedpar) or pap
- if localparagraph and (not ap or ap < localparagraph) then
- maybewrong = addtomaybe(maybewrong,c,1)
- end
- pushcontent()
- currentnesting = tl
- currentparagraph = ap
- currentattribute = at
- last = at
+ if last ~= at then
+ local tl = taglist[at]
+ local ap = getattr(n,a_taggedpar) or pap
+ if localparagraph and (not ap or ap < localparagraph) then
+ maybewrong = addtomaybe(maybewrong,c,1)
+ end
+ pushcontent()
+ currentnesting = tl
+ currentparagraph = ap
+ currentattribute = at
+ last = at
+ pushentry(currentnesting)
+ if trace_export then
+ report_export("%w<!-- processing glyph %C tagged %a -->",currentdepth,c,at)
+ end
+ -- We need to intercept this here; maybe I will also move this
+ -- to a regular setter at the tex end.
+ local r = getattr(n,a_reference)
+ if r then
+ local t = tl.taglist
+ referencehash[t[#t]] = r -- fulltag
+ end
+ local d = getattr(n,a_destination)
+ if d then
+ local t = tl.taglist
+ destinationhash[t[#t]] = d -- fulltag
+ end
+ --
+ elseif last then
+ -- we can consider tagging the pars (lines) in the parbuilder but then we loose some
+ -- information unless we inject a special node (but even then we can run into nesting
+ -- issues)
+ local ap = getattr(n,a_taggedpar) or pap
+ if ap ~= currentparagraph then
+ pushcontent(currentparagraph,ap)
pushentry(currentnesting)
- if trace_export then
- report_export("%w<!-- processing glyph %C tagged %a -->",currentdepth,c,at)
- end
- -- We need to intercept this here; maybe I will also move this
- -- to a regular setter at the tex end.
- local r = getattr(n,a_reference)
- if r then
- local t = tl.taglist
- referencehash[t[#t]] = r -- fulltag
- end
- local d = getattr(n,a_destination)
- if d then
- local t = tl.taglist
- destinationhash[t[#t]] = d -- fulltag
- end
- --
- elseif last then
- -- we can consider tagging the pars (lines) in the parbuilder but then we loose some
- -- information unless we inject a special node (but even then we can run into nesting
- -- issues)
- local ap = getattr(n,a_taggedpar) or pap
- if ap ~= currentparagraph then
- pushcontent(currentparagraph,ap)
- pushentry(currentnesting)
- currentattribute = last
- currentparagraph = ap
- end
- if localparagraph and (not ap or ap < localparagraph) then
- maybewrong = addtomaybe(maybewrong,c,2)
- end
- if trace_export then
- report_export("%w<!-- processing glyph %C tagged %a -->",currentdepth,c,last)
- end
- else
- if trace_export then
- report_export("%w<!-- processing glyph %C tagged %a -->",currentdepth,c,at)
- end
+ currentattribute = last
+ currentparagraph = ap
end
- local s = getattr(n,a_exportstatus)
- if s then
- c = s
+ if localparagraph and (not ap or ap < localparagraph) then
+ maybewrong = addtomaybe(maybewrong,c,2)
end
- if c == 0 then
+ if trace_export then
+ report_export("%w<!-- processing glyph %C tagged %a -->",currentdepth,c,last)
+ end
+ else
+ if trace_export then
+ report_export("%w<!-- processing glyph %C tagged %a -->",currentdepth,c,at)
+ end
+ end
+ local s = getattr(n,a_exportstatus)
+ if s then
+ c = s
+ end
+ if c == 0 then
+ if trace_export then
+ report_export("%w<!-- skipping last glyph -->",currentdepth)
+ end
+ elseif c == 0x20 then
+ local a = getattr(n,a_characters)
+ nofcurrentcontent = nofcurrentcontent + 1
+ if a then
if trace_export then
- report_export("%w<!-- skipping last glyph -->",currentdepth)
- end
- elseif c == 0x20 then
- local a = getattr(n,a_characters)
- nofcurrentcontent = nofcurrentcontent + 1
- if a then
- if trace_export then
- report_export("%w<!-- turning last space into special space %U -->",currentdepth,a)
- end
- currentcontent[nofcurrentcontent] = specialspaces[a] -- special space
- else
- currentcontent[nofcurrentcontent] = " "
+ report_export("%w<!-- turning last space into special space %U -->",currentdepth,a)
end
+ currentcontent[nofcurrentcontent] = specialspaces[a] -- special space
else
- local fc = fontchar[f]
+ currentcontent[nofcurrentcontent] = " "
+ end
+ else
+ local fc = fontchar[f]
+ if fc then
+ fc = fc and fc[c]
if fc then
- fc = fc and fc[c]
- if fc then
- local u = fc.unicode
- if not u then
- nofcurrentcontent = nofcurrentcontent + 1
- currentcontent[nofcurrentcontent] = utfchar(c)
- elseif type(u) == "table" then
- for i=1,#u do
- nofcurrentcontent = nofcurrentcontent + 1
- currentcontent[nofcurrentcontent] = utfchar(u[i])
- end
- else
- nofcurrentcontent = nofcurrentcontent + 1
- currentcontent[nofcurrentcontent] = utfchar(u)
- end
- elseif c > 0 then
+ local u = fc.unicode
+ if not u then
nofcurrentcontent = nofcurrentcontent + 1
currentcontent[nofcurrentcontent] = utfchar(c)
+ elseif type(u) == "table" then
+ for i=1,#u do
+ nofcurrentcontent = nofcurrentcontent + 1
+ currentcontent[nofcurrentcontent] = utfchar(u[i])
+ end
else
- -- we can have -1 as side effect of an explicit hyphen (unless we expand)
+ nofcurrentcontent = nofcurrentcontent + 1
+ currentcontent[nofcurrentcontent] = utfchar(u)
end
elseif c > 0 then
nofcurrentcontent = nofcurrentcontent + 1
@@ -3064,8 +3052,13 @@ local collectresults do -- too many locals otherwise
else
-- we can have -1 as side effect of an explicit hyphen (unless we expand)
end
+ elseif c > 0 then
+ nofcurrentcontent = nofcurrentcontent + 1
+ currentcontent[nofcurrentcontent] = utfchar(c)
+ else
+ -- we can have -1 as side effect of an explicit hyphen (unless we expand)
end
- -- end
+ end
end
elseif id == disc_code then -- probably too late
local pre, post, replace = getdisc(n)
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 0a456e591..cf4113e3d 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2018.12.30 19:28}
+\newcontextversion{2019.01.03 19:27}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index a8a81ecef..4ec1d9d56 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -42,7 +42,7 @@
%D has to match \type {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2018.12.30 19:28}
+\edef\contextversion{2019.01.03 19:27}
\edef\contextkind {beta}
%D For those who want to use this:
diff --git a/tex/context/base/mkiv/font-nod.lua b/tex/context/base/mkiv/font-nod.lua
index 33bd6408b..561714601 100644
--- a/tex/context/base/mkiv/font-nod.lua
+++ b/tex/context/base/mkiv/font-nod.lua
@@ -65,7 +65,6 @@ local getsubtype = nuts.getsubtype
local getchar = nuts.getchar
local getlist = nuts.getlist
local getdisc = nuts.getdisc
------ getcomponents = nuts.getcomponents
local isglyph = nuts.isglyph
local getkern = nuts.getkern
local getdirection = nuts.getdirection
@@ -81,7 +80,7 @@ local flush_node_list = nuts.flush_list
local protect_glyphs = nuts.protect_glyphs
local nextnode = nuts.traversers.node
-local nextglyph = nuts.traversers.glyph
+----- nextglyph = nuts.traversers.glyph
local nodepool = nuts.pool
local new_glyph = nodepool.glyph
@@ -501,10 +500,7 @@ local function toutf(list,result,nofresult,stopcriterium,nostrip)
for n, id in nextnode, tonut(list) do
if id == glyph_code then
local c = getchar(n)
- -- local components = getcomponents(n)
- -- if components then
- -- result, nofresult = toutf(components,result,nofresult,false,true)
- -- elseif c > 0 then
+ if c > 0 then
local fc = fontcharacters[getfont(n)]
if fc then
local fcc = fc[c]
@@ -530,10 +526,10 @@ local function toutf(list,result,nofresult,stopcriterium,nostrip)
nofresult = nofresult + 1
result[nofresult] = f_unicode(c)
end
- -- else
- -- nofresult = nofresult + 1
- -- result[nofresult] = f_badcode(c)
- -- end
+ else
+ nofresult = nofresult + 1
+ result[nofresult] = f_badcode(c)
+ end
elseif id == disc_code then
result, nofresult = toutf(getfield(n,"replace"),result,nofresult,false,true) -- needed?
elseif id == hlist_code or id == vlist_code then
diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua
index 5c64ab8e5..ae54c390e 100644
--- a/tex/context/base/mkiv/font-ots.lua
+++ b/tex/context/base/mkiv/font-ots.lua
@@ -203,6 +203,7 @@ local getdir = nuts.getdir
local getwidth = nuts.getwidth
local ischar = nuts.is_char
+local isglyph = nuts.isglyph
local usesfont = nuts.uses_font
local insert_node_after = nuts.insert_after
@@ -457,28 +458,6 @@ local copy_only_glyphs = nuts.copy_only_glyphs
local set_components = setcomponents
local take_components = getcomponents
-local isglyph = nuts.isglyph
-
--- local function count_components(start,marks)
--- print("!")
--- if getid(start) ~= glyph_code then
--- return 0
--- elseif getsubtype(start) == ligatureglyph_code then
--- local i = 0
--- local components = getcomponents(start)
--- while components do
--- i = i + count_components(components,marks)
--- components = getnext(components)
--- end
--- return i
--- elseif not marks[getchar(start)] then
--- print("YES")
--- return 1
--- else
--- return 0
--- end
--- end
-
local function count_components(start,marks)
local char = isglyph(start)
if char then
diff --git a/tex/context/base/mkiv/grph-inc.mkiv b/tex/context/base/mkiv/grph-inc.mkiv
index ea5974d1f..15152e994 100644
--- a/tex/context/base/mkiv/grph-inc.mkiv
+++ b/tex/context/base/mkiv/grph-inc.mkiv
@@ -656,46 +656,47 @@
\unexpanded\def\docheckfiguremps #1{\global\setbox\foundexternalfigure\vpack{\convertMPtoPDF{#1}11}}
\unexpanded\def\docheckfiguremprun #1#2{\global\setbox\foundexternalfigure\vpack{\useMPrun{#1}{#2}}}
-\unexpanded\def\relocateexternalfigure % easier here than in lua
- {\global\setbox\foundexternalfigure\vpack to \ht\foundexternalfigure\bgroup
- \vss
- \ht\foundexternalfigure\zeropoint
- \hpack to \wd\foundexternalfigure\bgroup
- \box\foundexternalfigure
- \hss
- \egroup
- \egroup}
-
-% \unexpanded\def\relocateexternalfigure
+% \unexpanded\def\relocateexternalfigure % easier here than in lua
% {\global\setbox\foundexternalfigure\vpack to \ht\foundexternalfigure\bgroup
-% %
-% % The \vss can (!) introduce 1 sp excess visible in xform which in itself
-% % is not that important but some don't like these cosmetic side effects, for
-% % instance we can get:
-% %
-% % vss : \vbox(845.1575+0.0)x597.23125, glue set 845.15747fil, direction TLT
-% % vskip : \vbox(845.1575+0.0)x597.23125, direction TLT
-% %
-% % or
-% %
-% % 1 0 0 1 0 0.00003 cm
-% % 1 0 0 1 0 0 cm
-% %
-% % This is a known property of using glue and can even depend on the architecture
-% % (float implementation). Anyway, let's for now use a skip. Of course this can
-% % shift the issue elsewhere, as vss is used a lot elsewhere.
-% %
-% % \vss
-% \vskip\ht\foundexternalfigure
-% %
+% \vss
% \ht\foundexternalfigure\zeropoint
-% \dp\foundexternalfigure\zeropoint
% \hpack to \wd\foundexternalfigure\bgroup
% \box\foundexternalfigure
% \hss
% \egroup
% \egroup}
+\unexpanded\def\relocateexternalfigure
+ {\global\setbox\foundexternalfigure\vpack to \ht\foundexternalfigure\bgroup
+ %
+ % The \vss can (!) introduce 1 sp excess visible in xform which in itself
+ % is not that important but some don't like these cosmetic side effects, for
+ % instance we can get:
+ %
+ % vss : \vbox(845.1575+0.0)x597.23125, glue set 845.15747fil, direction TLT
+ % vskip : \vbox(845.1575+0.0)x597.23125, direction TLT
+ %
+ % or
+ %
+ % 1 0 0 1 0 0.00003 cm
+ % 1 0 0 1 0 0 cm
+ %
+ % This is a known property of using glue and can even depend on the architecture
+ % (float implementation). Anyway, let's for now use a skip. Of course this can
+ % shift the issue elsewhere, as vss is used a lot elsewhere.
+ %
+ % \vss
+ \vkern\ht\foundexternalfigure
+ %
+ % \parfillskip\zeropoint
+ \ht\foundexternalfigure\zeropoint
+ \dp\foundexternalfigure\zeropoint
+ \hpack to \wd\foundexternalfigure\bgroup
+ \box\foundexternalfigure
+ \hss
+ \egroup
+ \egroup}
+
\unexpanded\def\startfoundexternalfigure#1#2% ht wd
{\global\setbox\foundexternalfigure\vbox to #2\bgroup\vss\hbox to #1\bgroup}
diff --git a/tex/context/base/mkiv/grph-trf.mkiv b/tex/context/base/mkiv/grph-trf.mkiv
index 7b4b69b60..35e812b3e 100644
--- a/tex/context/base/mkiv/grph-trf.mkiv
+++ b/tex/context/base/mkiv/grph-trf.mkiv
@@ -164,11 +164,38 @@
\box\nextbox
\egroup}
+% \def\grph_scale_apply
+% {\d_grph_scale_wd\finalscaleboxxscale\d_grph_scale_wd
+% \d_grph_scale_ht\finalscaleboxyscale\d_grph_scale_ht
+% \d_grph_scale_dp\finalscaleboxyscale\d_grph_scale_dp
+% \setbox\nextbox\hpack
+% {\dostartscaling \finalscaleboxxscale \finalscaleboxyscale
+% \smashedbox\nextbox
+% \dostopscaling}%
+% \wd\nextbox\d_grph_scale_wd
+% \ht\nextbox\d_grph_scale_ht
+% \dp\nextbox\d_grph_scale_dp}
+
\def\grph_scale_apply
{\d_grph_scale_wd\finalscaleboxxscale\d_grph_scale_wd
\d_grph_scale_ht\finalscaleboxyscale\d_grph_scale_ht
\d_grph_scale_dp\finalscaleboxyscale\d_grph_scale_dp
- \setbox\nextbox\hpack
+ \ifdim\d_grph_scale_wd=\wd\nextbox
+ \ifdim\d_grph_scale_ht=\ht\nextbox
+ \ifdim\d_grph_scale_dp=\dp\nextbox
+ % \grph_scale_apply_nop
+ \else
+ \grph_scale_apply_yes
+ \fi
+ \else
+ \grph_scale_apply_yes
+ \fi
+ \else
+ \grph_scale_apply_yes
+ \fi}
+
+\def\grph_scale_apply_yes
+ {\setbox\nextbox\hpack
{\dostartscaling \finalscaleboxxscale \finalscaleboxyscale
\smashedbox\nextbox
\dostopscaling}%
diff --git a/tex/context/base/mkiv/lang-hyp.lua b/tex/context/base/mkiv/lang-hyp.lua
index 1684c0dac..92b400d4f 100644
--- a/tex/context/base/mkiv/lang-hyp.lua
+++ b/tex/context/base/mkiv/lang-hyp.lua
@@ -1611,16 +1611,23 @@ featureset.hyphenonly = hyphenonly == v_yes
-- local replaceaction = nodes.tasks.replaceaction -- no longer overload this way (too many local switches)
local hyphenate = lang.hyphenate
- local has_language = lang.has_language
+ local hyphenating = nuts.hyphenating
local methods = { }
local usedmethod = false
local stack = { }
- local function original(head) -- kernel.hyphenation(head)
- hyphenate(tonode(head))
- return head
- end
+ local original = hyphenating and
+ function(head)
+ return (hyphenating(head))
+ end
+ or
+ function(head)
+ hyphenate(tonode(head))
+ return head -- a nut
+ end
+ -- local has_language = lang.has_language
+ --
-- local function original(head) -- kernel.hyphenation(head)
-- local h = tonode(head)
-- if has_language(h) then
diff --git a/tex/context/base/mkiv/math-tag.lua b/tex/context/base/mkiv/math-tag.lua
index 72de3e660..07998eb08 100644
--- a/tex/context/base/mkiv/math-tag.lua
+++ b/tex/context/base/mkiv/math-tag.lua
@@ -338,25 +338,25 @@ process = function(start) -- we cannot use the processor as we have no finalizer
else
setattr(n,a_tagged,text)
end
-
if id == hlist_code or id == vlist_code then
runner(getlist(n),depth+1)
elseif id == glyph_code then
- -- this should not be needed (todo: use tounicode info)
- local components = getcomponents(n)
+ -- this should not be needed
+ local components = getcomponents(n) -- unlikely set
if components then
runner(getcomponent,depth+1)
end
elseif id == disc_code then
+ -- this should not be needed
local pre, post, replace = getdisc(n)
if pre then
- runner(pre,depth+1) -- idem
+ runner(pre,depth+1)
end
if post then
- runner(post,depth+1) -- idem
+ runner(post,depth+1)
end
if replace then
- runner(replace,depth+1) -- idem
+ runner(replace,depth+1)
end
end
if mth == 1 then
diff --git a/tex/context/base/mkiv/mlib-lua.lua b/tex/context/base/mkiv/mlib-lua.lua
index c155d7733..8074a6a4a 100644
--- a/tex/context/base/mkiv/mlib-lua.lua
+++ b/tex/context/base/mkiv/mlib-lua.lua
@@ -10,7 +10,7 @@ if not modules then modules = { } end modules ['mlib-lua'] = {
-- maybe we need mplib.model, but how with instances
-local type, tostring, select, loadstring = type, tostring, select, loadstring
+local type, tostring, tonumber, select, loadstring = type, tostring, tonumber, select, loadstring
local find, match, gsub, gmatch = string.find, string.match, string.gsub, string.gmatch
local concat, insert, remove = table.concat, table.insert, table.remove
@@ -863,6 +863,21 @@ end
do
+ local mppair = mp.pair
+
+ function mp.textextanchor(s)
+ local x, y = match(s,"tx_anchor=(%S+) (%S+)") -- todo: make an lpeg
+ if x and y then
+ x = tonumber(x)
+ y = tonumber(y)
+ end
+ mppair(x or 0,y or 0)
+ end
+
+end
+
+do
+
local mprint = mp.print
local qprint = mp.quoted
local getmacro = tokens.getters.macro
diff --git a/tex/context/base/mkiv/mult-fun.lua b/tex/context/base/mkiv/mult-fun.lua
index 8464e30ca..0776f36b4 100644
--- a/tex/context/base/mkiv/mult-fun.lua
+++ b/tex/context/base/mkiv/mult-fun.lua
@@ -3,7 +3,7 @@ return {
--
"nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel",
"shadefactor",
- "textextoffset",
+ "textextoffset", "textextanchor",
"normaltransparent", "multiplytransparent", "screentransparent", "overlaytransparent",
"softlighttransparent", "hardlighttransparent", "colordodgetransparent", "colorburntransparent",
"darkentransparent", "lightentransparent", "differencetransparent", "exclusiontransparent",
@@ -170,5 +170,7 @@ return {
"isarray", "prefix", "isobject",
--
"comment", "report", "lua", "mp", "MP", "luacall",
+ --
+ "mirrored", "mirroredabout",
},
}
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index 6cdbc61d7..b62ee35e6 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -225,6 +225,8 @@ return {
"scratchtoks", "globalscratchtoks", "privatescratchtoks",
"scratchbox", "globalscratchbox", "privatescratchbox",
--
+ "globalscratchcounterone", "globalscratchcountertwo", "globalscratchcounterthree",
+ --
"groupedcommand", "groupedcommandcs",
"triggergroupedcommand", "triggergroupedcommandcs",
"simplegroupedcommand", "pickupgroupedcommand",
diff --git a/tex/context/base/mkiv/node-met.lua b/tex/context/base/mkiv/node-met.lua
index 5c6a24c65..f5db4babd 100644
--- a/tex/context/base/mkiv/node-met.lua
+++ b/tex/context/base/mkiv/node-met.lua
@@ -125,6 +125,7 @@ nodes.unprotect_glyph = node.unprotect_glyph
nodes.unprotect_glyphs = node.unprotect_glyphs
nodes.kerning = node.kerning
nodes.ligaturing = node.ligaturing
+nodes.hyphenating = node.hyphenating
nodes.mlist_to_hlist = node.mlist_to_hlist
nodes.effective_glue = node.effective_glue
diff --git a/tex/context/base/mkiv/node-nut.lua b/tex/context/base/mkiv/node-nut.lua
index 54de799da..d65645f8c 100644
--- a/tex/context/base/mkiv/node-nut.lua
+++ b/tex/context/base/mkiv/node-nut.lua
@@ -173,12 +173,14 @@ nuts.is_direct = direct.is_direct
nuts.is_node = direct.is_node
nuts.is_nut = direct.is_direct
nuts.kerning = direct.kerning
+nuts.hyphenating = direct.hyphenating
nuts.last_node = direct.last_node
nuts.length = direct.length
nuts.ligaturing = direct.ligaturing
nuts.new = direct.new
nuts.protect_glyph = direct.protect_glyph
nuts.protect_glyphs = direct.protect_glyphs
+nuts.flush_components = direct.flush_components
nuts.protrusion_skippable = direct.protrusion_skippable
nuts.rangedimensions = direct.rangedimensions
nuts.set_attribute = direct.set_attribute
diff --git a/tex/context/base/mkiv/node-tex.lua b/tex/context/base/mkiv/node-tex.lua
index 81ed80d15..5857fd2e6 100644
--- a/tex/context/base/mkiv/node-tex.lua
+++ b/tex/context/base/mkiv/node-tex.lua
@@ -6,35 +6,40 @@ if not modules then modules = { } end modules ['node-tex'] = {
license = "see context related readme files"
}
-builders = builders or { }
-local kernel = builders.kernel or { }
-builders.kernel = kernel
+builders = builders or { }
+local kernel = builders.kernel or { }
+builders.kernel = kernel
-local nuts = nodes.nuts
+local nuts = nodes.nuts
-local hyphenate = lang.hyphenate
-local ligaturing = nuts.ligaturing
-local kerning = nuts.kerning
-
-kernel.originals = {
- hyphenate = hyphenate,
- ligaturing = ligaturing,
- kerning = kerning,
-}
+local hyphenate = lang.hyphenate
+local hyphenating = nuts.hyphenating
+local ligaturing = nuts.ligaturing
+local kerning = nuts.kerning
+local cleanup = nuts.flush_components
function kernel.hyphenation(head)
- hyphenate(head)
- return head
+ return (hyphenate(head)) -- nodes !
+end
+
+function kernel.hyphenating(head)
+ return (hyphenating(head))
end
function kernel.ligaturing(head)
- local head, tail = ligaturing(head)
- return head
+ return (ligaturing(head))
end
function kernel.kerning(head)
- local head, tail = kerning(head)
- return head
+ return (kerning(head))
+end
+
+if cleanup then
+
+ function kernel.cleanup(head)
+ return (cleanup(head))
+ end
+
end
callbacks.register('hyphenate' , false, "normal hyphenation routine, called elsewhere")
diff --git a/tex/context/base/mkiv/page-box.mkvi b/tex/context/base/mkiv/page-box.mkvi
index 6da75b781..10d591631 100644
--- a/tex/context/base/mkiv/page-box.mkvi
+++ b/tex/context/base/mkiv/page-box.mkvi
@@ -251,11 +251,25 @@
\def\page_boxes_apply_offsets#1%
{\setbox#1\vpack to \paperheight
{\hsize\paperwidth
- \vskip\topspace
- \hskip\doifbothsides\backspace\backspace{\dimexpr\paperwidth-\backspace-\makeupwidth\relax}%
+ \vkern\topspace
+% \parfillskip\zeropoint
+ \hkern\doifbothsides\backspace\backspace{\dimexpr\paperwidth-\backspace-\makeupwidth\relax}%
\box#1}%
\dp#1\zeropoint}
+% \def\page_boxes_apply_offset#box%
+% {\scratchwidth \wd#box%
+% \scratchheight\ht#box%
+% \scratchdepth \dp#box%
+% \setbox#box\vpack
+% {\offinterlineskip
+% \vkern\topoffset
+% \hkern\doifbothsides\backoffset\backoffset{-\backoffset}%
+% \box#box}%
+% \wd#box\scratchwidth
+% \ht#box\scratchheight
+% \dp#box\scratchdepth}
+
% \let\page_boxes_apply_clip_paper \gobbleoneargument
% \let\page_boxes_apply_clip_print_left \gobbleoneargument
% \let\page_boxes_apply_clip_print_right\gobbleoneargument
diff --git a/tex/context/base/mkiv/page-ffl.mkiv b/tex/context/base/mkiv/page-ffl.mkiv
index e94bffa64..414cae4ac 100644
--- a/tex/context/base/mkiv/page-ffl.mkiv
+++ b/tex/context/base/mkiv/page-ffl.mkiv
@@ -101,7 +101,7 @@
\fi
\fi
\directboxfromcache{\currentfacingfloat}{\number\c_strc_floats_flushed}%
- \vskip\s_page_one_between_top_insert
+ \vkern\s_page_one_between_top_insert
\egroup
\ifnum\c_strc_floats_saved=\c_strc_floats_flushed
\global\c_strc_floats_saved \zerocount
diff --git a/tex/context/base/mkiv/page-imp.mkiv b/tex/context/base/mkiv/page-imp.mkiv
index 359c120b0..7791d2b9a 100644
--- a/tex/context/base/mkiv/page-imp.mkiv
+++ b/tex/context/base/mkiv/page-imp.mkiv
@@ -190,8 +190,8 @@
\fi
\setbox\shipoutscratchbox\vpack
{\offinterlineskip
- \vskip\d_page_shipouts_offset
- \hskip\d_page_shipouts_offset
+ \vkern\d_page_shipouts_offset
+ \hkern\d_page_shipouts_offset
\hpack
{\page_otr_flush_every_stuff
\page_otr_flush_special_content
diff --git a/tex/context/base/mkiv/page-inf.mkiv b/tex/context/base/mkiv/page-inf.mkiv
index d6a7635f9..4519083bf 100644
--- a/tex/context/base/mkiv/page-inf.mkiv
+++ b/tex/context/base/mkiv/page-inf.mkiv
@@ -112,12 +112,12 @@
{\vfill
\settexthoffset
\hsize\dimexpr\scratchdimen-2\texthoffset\relax
- \hskip\texthoffset % brrrr
+ \hkern\texthoffset % brrrr
\vbox to \zeropoint{\vss\page_info_place_info}%
- \vskip\bodyfontsize}%
+ \vkern\bodyfontsize}%
\dp\b_page_versions\zeropoint
\wd\b_page_versions\scratchdimen
- \setbox#1\hpack{\box#1\hskip-\scratchdimen\box\b_page_versions}}
+ \setbox#1\hpack{\box#1\hkern-\scratchdimen\box\b_page_versions}}
\setupversion % resets
[\v!final]
diff --git a/tex/context/base/mkiv/page-ini.mkiv b/tex/context/base/mkiv/page-ini.mkiv
index 1a9968759..38477dc27 100644
--- a/tex/context/base/mkiv/page-ini.mkiv
+++ b/tex/context/base/mkiv/page-ini.mkiv
@@ -80,7 +80,7 @@
\fi}
\def\page_otr_flush_pending_content
- {\vskip\zeropoint\relax
+ {\vkern\zeropoint\relax
\ifvoid\normalpagebox \else
\unvbox\normalpagebox
\penalty\outputpenalty
diff --git a/tex/context/base/mkiv/page-lay.mkiv b/tex/context/base/mkiv/page-lay.mkiv
index 1f0476e9b..005910a79 100644
--- a/tex/context/base/mkiv/page-lay.mkiv
+++ b/tex/context/base/mkiv/page-lay.mkiv
@@ -1260,7 +1260,7 @@
% \to \everybeforeshipout
\def\goleftonpage % name will change (we could cache)
- {\hskip-\dimexpr\leftmargindistance+\leftmarginwidth+\leftedgedistance+\leftedgewidth\relax}
+ {\hkern-\dimexpr\leftmargindistance+\leftmarginwidth+\leftedgedistance+\leftedgewidth\relax}
\def\doifelsemarginswap#1#2%
{\doifbothsides{#1}{#1}{#2}}
diff --git a/tex/context/base/mkiv/page-one.mkiv b/tex/context/base/mkiv/page-one.mkiv
index 87783436f..64c4a7134 100644
--- a/tex/context/base/mkiv/page-one.mkiv
+++ b/tex/context/base/mkiv/page-one.mkiv
@@ -142,16 +142,17 @@
{\page_otr_command_flush_top_insertions
% this is messy ... we will provide a more tight area (no big deal as we can
% do that at the lua end)
+% \parfillskip\zeropoint
\page_one_registered_text_area_a#1#2% \unvbox <box>
%
\ifgridsnapping
- \vskip\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax
+ \vkern\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax
\prevdepth\openstrutdepth
\page_otr_command_flush_bottom_insertions
\vfil
\else\ifcase\bottomraggednessmode
% ragged (default)
- \vskip\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax
+ \vkern\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax
\prevdepth\openstrutdepth
\page_otr_command_flush_bottom_insertions
\vfil
@@ -160,7 +161,7 @@
\page_otr_command_flush_bottom_insertions
\or
% baseline
- \kern\dimexpr\maxdepth-\d_page_one_natural_depth\relax
+ \vkern\dimexpr\maxdepth-\d_page_one_natural_depth\relax
\page_otr_command_flush_bottom_insertions
\fi\fi
\fakepagenotes}%
@@ -323,15 +324,15 @@
\def\page_one_command_flush_top_insertions_indeed
{\ifgridsnapping
\box\namedinsertionnumber\s!topfloat
- \vskip-\topskip
- \vskip\strutheight % [xx] new: see icare topbleed
+ \vkern-\topskip
+ \vkern\strutheight % [xx] new: see icare topbleed
\else
\ifcase\c_page_floats_insertions_topskip_mode
% 0: default, do nothing
\or
% 1: no topskip (crossed fingers)
- \vskip-\topskip
- \vskip\strutheight
+ \vskip-\topskip % skip !
+ \vkern\strutheight
\fi
\unvbox\namedinsertionnumber\s!topfloat
\fi}
diff --git a/tex/context/base/mkiv/page-spr.mkiv b/tex/context/base/mkiv/page-spr.mkiv
index 6c8f4d187..bb95ee467 100644
--- a/tex/context/base/mkiv/page-spr.mkiv
+++ b/tex/context/base/mkiv/page-spr.mkiv
@@ -23,15 +23,32 @@
% beware, ugly overload, to be redone
+% \def\normalsettextpagecontent#1#2#3% #2 and #3 will disappear
+% {\setbox#1\hbox
+% {\setlayoutcomponentattribute{\v!page:\v!text}%
+% \vbox \layoutcomponentboxattribute to \textheight
+% {\offinterlineskip
+% \freezetextwidth
+% \hsize\textwidth % local variant of \sethsize
+% \boxmaxdepth\maxdepth
+% \noindent % content can be < \hsize
+% \page_otr_command_package_contents#2#3}}%
+% \dp#1\zeropoint
+% \ifconditional\c_page_spread_busy
+% \normalsettextpagecontent_spread{#1}%
+% \else
+% \normalsettextpagecontent_normal{#1}%
+% \fi}
+
\def\normalsettextpagecontent#1#2#3% #2 and #3 will disappear
- {\setbox#1\hbox
+ {\setbox#1\hpack
{\setlayoutcomponentattribute{\v!page:\v!text}%
- \vbox \layoutcomponentboxattribute to \textheight
+ \vpack \layoutcomponentboxattribute to \textheight
{\offinterlineskip
\freezetextwidth
\hsize\textwidth % local variant of \sethsize
\boxmaxdepth\maxdepth
- \noindent % content can be < \hsize
+ \noindent % content can be < \hsize
\page_otr_command_package_contents#2#3}}%
\dp#1\zeropoint
\ifconditional\c_page_spread_busy
diff --git a/tex/context/base/mkiv/page-txt.mkvi b/tex/context/base/mkiv/page-txt.mkvi
index 00e329c01..97668c143 100644
--- a/tex/context/base/mkiv/page-txt.mkvi
+++ b/tex/context/base/mkiv/page-txt.mkvi
@@ -527,10 +527,10 @@
\page_layouts_place_text_line_right
\page_layouts_place_text_line_left
\namedlayoutelementparameter\currentlayouttextline\c!after
- \kern\zeropoint}% keep the \dp, beware of \vtops, never change this!
+ \vkern\zeropoint}% keep the \dp, beware of \vtops, never change this!
\dp\b_page_layouts_element\zeropoint
\box\b_page_layouts_element
- \vskip-#height\relax}
+ \vkern-#height\relax}
\let\page_layouts_extra_at_margin_left \plusone
\let\page_layouts_extra_at_margin_right\plustwo
@@ -831,21 +831,21 @@
\calculatereducedvsizes
\swapmargins
\offinterlineskip
- \vskip\dimexpr-\topheight-\topdistance\relax
+ \vkern\dimexpr-\topheight-\topdistance\relax
\the\toptextcontent
- \vskip\dimexpr\topheight+\topdistance\relax
+ \vkern\dimexpr\topheight+\topdistance\relax
\the\headertextcontent
- \vskip\dimexpr\headerheight+\headerdistance+\textdistance\relax
+ \vkern\dimexpr\headerheight+\headerdistance+\textdistance\relax
\anch_positions_place_anchors
- \vskip\dimexpr-\textdistance-\textheight\relax
+ \vkern\dimexpr-\textdistance-\textheight\relax
\the\texttextcontent
- \vskip\textheight
+ \vkern\textheight
\the\everyendoftextbody
- \vskip\footerdistance
+ \vkern\footerdistance
\the\footertextcontent
- \vskip\dimexpr\footerheight+\bottomdistance\relax
+ \vkern\dimexpr\footerheight+\bottomdistance\relax
\the\bottomtextcontent
- \vskip\bottomheight
+ \vkern\bottomheight
\vfilll}%
\smashbox\b_page_layouts_element
\box\b_page_layouts_element}
@@ -864,7 +864,7 @@
\calculatereducedvsizes
\calculatehsizes
\swapmargins
- \vskip\dimexpr\headerheight+\headerdistance+\textdistance\relax
+ \vkern\dimexpr\headerheight+\headerdistance+\textdistance\relax
\dontleavehmode
%\page_prepare_backgrounds{#2}%
\hpack to \makeupwidth
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 138c84361..45dffcfaa 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 5609dc05a..de9be122c 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv
index 850b1fe6a..4e767b3ad 100644
--- a/tex/context/base/mkiv/syst-ini.mkiv
+++ b/tex/context/base/mkiv/syst-ini.mkiv
@@ -393,6 +393,10 @@
\newtoks \scratchtoksfour \newtoks \scratchtoksfive \newtoks \scratchtokssix
\newbox \scratchboxfour \newbox \scratchboxfive \newbox \scratchboxsix
+\newcount\globalscratchcounterone
+\newcount\globalscratchcountertwo
+\newcount\globalscratchcounterthree
+
%D \macros
%D {tempstring}
diff --git a/tex/context/base/mkiv/task-ini.lua b/tex/context/base/mkiv/task-ini.lua
index b7554c7cb..67bd26de6 100644
--- a/tex/context/base/mkiv/task-ini.lua
+++ b/tex/context/base/mkiv/task-ini.lua
@@ -53,6 +53,7 @@ appendaction("processors", "fonts", "typesetters.fontkerns.handler",
appendaction("processors", "fonts", "nodes.handlers.protectglyphs", nil, "nonut", "enabled" )
appendaction("processors", "fonts", "builders.kernel.ligaturing", nil, "nut", "disabled" )
appendaction("processors", "fonts", "builders.kernel.kerning", nil, "nut", "disabled" )
+appendaction("processors", "fonts", "builders.kernel.cleanup", nil, "nut", "enabled" )
appendaction("processors", "fonts", "nodes.handlers.stripping", nil, "nut", "disabled" )
appendaction("processors", "fonts", "nodes.handlers.flatten", nil, "nut", "disabled" )
appendaction("processors", "fonts", "fonts.goodies.colorschemes.coloring", nil, "nut", "disabled" )
diff --git a/tex/context/base/mkiv/util-evo.lua b/tex/context/base/mkiv/util-evo.lua
index b6d058e39..dfb395e08 100644
--- a/tex/context/base/mkiv/util-evo.lua
+++ b/tex/context/base/mkiv/util-evo.lua
@@ -379,6 +379,21 @@ local function findzone(presets,name)
return usedzones and usedzones[name]
end
+local function getzonenames(presets)
+ if not presets then
+ return { }
+ end
+ local data = presets.data
+ if not data then
+ return { }
+ end
+ local t = sortedkeys(data.zones or { })
+ for i=1,#t do
+ t[i] = lower(t[i])
+ end
+ return t
+end
+
local function gettargets(zone) -- maybe also for a day
local schedule = zone.schedule
local min = false
@@ -990,6 +1005,7 @@ evohome = {
setzonestate = setzonestate, -- presets, name, temperature
resetzonestate = resetzonestate, -- presets, name
getzonedata = findzone, -- presets, name
+ getzonenames = getzonenames, -- presets
--
loadpresets = loadpresets, -- filename
loadhistory = loadhistory, -- presets | filename
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index 4d99b4f4d..870816228 100644
--- a/tex/context/interface/mkiv/i-context.pdf
+++ b/tex/context/interface/mkiv/i-context.pdf
Binary files differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index f4672bd0c..5ac21feab 100644
--- a/tex/context/interface/mkiv/i-readme.pdf
+++ b/tex/context/interface/mkiv/i-readme.pdf
Binary files differ
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 9ae2c4882..accb0810d 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 : 12/30/18 19:28:22
+-- merge date : 01/03/19 19:27:26
do -- begin closure to overcome local limits and interference
@@ -25519,6 +25519,7 @@ local setcomponents=nuts.setcomponents
local getdir=nuts.getdir
local getwidth=nuts.getwidth
local ischar=nuts.is_char
+local isglyph=nuts.isglyph
local usesfont=nuts.uses_font
local insert_node_after=nuts.insert_after
local copy_node=nuts.copy
@@ -25707,7 +25708,6 @@ local copy_no_components=nuts.copy_no_components
local copy_only_glyphs=nuts.copy_only_glyphs
local set_components=setcomponents
local take_components=getcomponents
-local isglyph=nuts.isglyph
local function count_components(start,marks)
local char=isglyph(start)
if char then