From 82c674fdcf5bcff4ad0dc0936d638fc729145616 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Wed, 6 Jul 2022 22:05:18 +0200 Subject: 2022-07-06 21:35:00 --- .../lexers/data/scite-context-data-context.lua | 4 +- .../lexers/data/scite-context-data-interfaces.lua | 2 +- .../lexers/data/scite-context-data-metafun.lua | 2 +- .../lexers/data/scite-context-data-metapost.lua | 6 +- .../context/lexers/data/scite-context-data-tex.lua | 4 +- .../context/lexers/scite-context-lexer-xml.lua | 18 +- .../scite/context/lexers/scite-context-lexer.lua | 13 + .../context/scite-context-data-context.properties | 550 +++++---- .../scite-context-data-interfaces.properties | 1302 ++++++++++---------- .../context/scite-context-data-metafun.properties | 59 +- .../context/scite-context-data-metapost.properties | 80 +- .../context/scite-context-data-tex.properties | 274 ++-- .../context/syntaxes/context-syntax-mps.json | 8 +- .../context/syntaxes/context-syntax-tex.json | 4 +- .../documents/general/manuals/columnsets.pdf | Bin 4509576 -> 2404352 bytes doc/context/documents/general/manuals/ontarget.pdf | Bin 319134 -> 539819 bytes doc/context/scripts/mkiv/mtx-vscode.html | 1 + doc/context/scripts/mkiv/mtx-vscode.man | 3 + doc/context/scripts/mkiv/mtx-vscode.xml | 1 + .../general/manuals/columnsets/columnsets-004.tex | 2 - .../general/manuals/columnsets/columnsets-204.tex | 2 +- .../general/manuals/columnsets/columnsets-205.tex | 2 +- .../general/manuals/columnsets/columnsets-702.tex | 1 - .../manuals/luametatex/luametatex-differences.tex | 20 + .../manuals/luametatex/luametatex-introduction.tex | 33 +- .../general/manuals/manuals-xml-environment.tex | 3 - .../general/manuals/ontarget/ontarget-alsomath.tex | 90 ++ .../general/manuals/ontarget/ontarget-binary.tex | 99 ++ .../general/manuals/ontarget/ontarget-dk.tex | 2 +- .../manuals/ontarget/ontarget-makesnosense.tex | 213 ++++ .../manuals/ontarget/ontarget-makessense.tex | 110 ++ .../general/manuals/ontarget/ontarget-math.tex | 285 ++++- .../general/manuals/ontarget/ontarget-metapost.tex | 755 ++++++++++++ .../general/manuals/ontarget/ontarget-ridofjit.tex | 111 ++ .../sources/general/manuals/ontarget/ontarget.tex | 6 + metapost/context/base/mpxl/mp-base.mpxl | 17 +- metapost/context/base/mpxl/mp-lmtx.mpxl | 127 +- metapost/context/base/mpxl/mp-mlib.mpxl | 21 +- metapost/context/base/mpxl/mp-tool.mpxl | 495 ++++++-- scripts/context/lua/mtx-cache.lua | 3 +- scripts/context/lua/mtx-context.lua | 2 +- scripts/context/lua/mtx-patterns.lua | 4 +- scripts/context/lua/mtx-unicode.lua | 18 +- scripts/context/lua/mtx-vscode.lua | 280 ++++- scripts/context/lua/mtxrun.lua | 74 +- scripts/context/stubs/mswin/mtxrun.lua | 74 +- scripts/context/stubs/unix/mtxrun | 74 +- scripts/context/stubs/win64/mtxrun.lua | 74 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkii/mult-cs.mkii | 6 + tex/context/base/mkii/mult-en.mkii | 8 + tex/context/base/mkii/mult-pe.mkii | 8 + tex/context/base/mkii/mult-ro.mkii | 3 + tex/context/base/mkii/type-one.mkii | 31 +- tex/context/base/mkiv/char-def.lua | 55 +- tex/context/base/mkiv/char-ini.lua | 12 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/cont-run.mkiv | 4 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/core-dat.lua | 35 +- tex/context/base/mkiv/data-env.lua | 4 +- tex/context/base/mkiv/font-dsp.lua | 7 +- tex/context/base/mkiv/font-osd.lua | 18 +- tex/context/base/mkiv/l-math.lua | 14 +- tex/context/base/mkiv/lxml-aux.lua | 31 + tex/context/base/mkiv/lxml-tab.lua | 2 +- tex/context/base/mkiv/mult-def.lua | 26 + tex/context/base/mkiv/mult-fun.lua | 9 +- tex/context/base/mkiv/mult-low.lua | 19 +- tex/context/base/mkiv/mult-mps.lua | 16 +- tex/context/base/mkiv/mult-prm.lua | 25 +- tex/context/base/mkiv/page-pcl.mkiv | 4 +- tex/context/base/mkiv/publ-dat.lua | 31 +- tex/context/base/mkiv/publ-imp-cite.mkvi | 3 +- tex/context/base/mkiv/publ-ini.lua | 78 +- tex/context/base/mkiv/publ-sor.lua | 20 +- tex/context/base/mkiv/status-files.pdf | Bin 24628 -> 24614 bytes tex/context/base/mkiv/status-lua.pdf | Bin 257246 -> 258249 bytes tex/context/base/mkiv/strc-lst.lua | 30 +- tex/context/base/mkiv/strc-num.lua | 32 +- tex/context/base/mkiv/strc-ref.lua | 2 +- tex/context/base/mkiv/type-set.mkiv | 3 + tex/context/base/mkiv/typo-fkr.lua | 4 +- tex/context/base/mkiv/util-deb.lua | 22 + tex/context/base/mkiv/util-jsn.lua | 9 + tex/context/base/mkxl/back-res.lmt | 18 +- tex/context/base/mkxl/colo-ini.mkxl | 2 + tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/cont-run.mkxl | 8 + tex/context/base/mkxl/context.mkxl | 8 +- tex/context/base/mkxl/core-dat.mkxl | 21 +- tex/context/base/mkxl/driv-shp.lmt | 17 +- tex/context/base/mkxl/driv-usr.lmt | 9 +- tex/context/base/mkxl/enco-ini.mkxl | 5 +- tex/context/base/mkxl/font-con.lmt | 8 +- tex/context/base/mkxl/font-imp-effects.lmt | 17 +- tex/context/base/mkxl/font-imp-tracing.lmt | 19 +- tex/context/base/mkxl/font-ini.lmt | 63 +- tex/context/base/mkxl/good-mth.lmt | 284 +---- tex/context/base/mkxl/grph-inc.mkxl | 8 +- tex/context/base/mkxl/lang-def.mkxl | 21 +- tex/context/base/mkxl/lang-lab.lmt | 195 +++ tex/context/base/mkxl/lang-lab.mkxl | 20 +- tex/context/base/mkxl/libs-imp-zint.lmt | 39 +- tex/context/base/mkxl/lpdf-lmt.lmt | 158 ++- tex/context/base/mkxl/lpdf-rul.lmt | 45 +- tex/context/base/mkxl/math-acc.mklx | 1 + tex/context/base/mkxl/math-act.lmt | 636 +++++++--- tex/context/base/mkxl/math-ali.mkxl | 924 ++++++++------ tex/context/base/mkxl/math-com.mkxl | 89 ++ tex/context/base/mkxl/math-dif.mkxl | 39 + tex/context/base/mkxl/math-fen.mkxl | 88 +- tex/context/base/mkxl/math-fnt.lmt | 7 +- tex/context/base/mkxl/math-frc.mkxl | 29 - tex/context/base/mkxl/math-ini.lmt | 38 +- tex/context/base/mkxl/math-ini.mkxl | 1023 ++++++++------- tex/context/base/mkxl/math-int.mkxl | 3 +- tex/context/base/mkxl/math-lop.mkxl | 6 + tex/context/base/mkxl/math-map.lmt | 61 +- tex/context/base/mkxl/math-noa.lmt | 121 +- tex/context/base/mkxl/math-pln.mkxl | 132 +- tex/context/base/mkxl/math-rad.mklx | 8 +- tex/context/base/mkxl/math-spa.lmt | 172 ++- tex/context/base/mkxl/math-stc.mklx | 8 +- tex/context/base/mkxl/meta-imp-functions.lmt | 260 ++++ tex/context/base/mkxl/meta-imp-functions.mkxl | 342 +++++ tex/context/base/mkxl/mlib-cnt.lmt | 68 +- tex/context/base/mkxl/mlib-fio.lmt | 3 +- tex/context/base/mkxl/mlib-pdf.lmt | 27 +- tex/context/base/mkxl/mlib-pps.lmt | 4 +- tex/context/base/mkxl/mlib-run.lmt | 37 +- tex/context/base/mkxl/mult-aux.mkxl | 9 +- tex/context/base/mkxl/mult-sys.mkxl | 3 + tex/context/base/mkxl/node-ali.lmt | 818 ++++++++---- tex/context/base/mkxl/node-nut.lmt | 3 + tex/context/base/mkxl/node-pro.lmt | 5 +- tex/context/base/mkxl/node-tsk.lmt | 12 +- tex/context/base/mkxl/pack-box.mkxl | 32 +- tex/context/base/mkxl/pack-com.mkxl | 117 +- tex/context/base/mkxl/pack-mat.mkxl | 142 +++ tex/context/base/mkxl/pack-obj.lmt | 27 +- tex/context/base/mkxl/pack-obj.mkxl | 35 +- tex/context/base/mkxl/pack-rul.mkxl | 155 +-- tex/context/base/mkxl/page-blk.lmt | 98 ++ tex/context/base/mkxl/page-blk.mkxl | 192 +++ tex/context/base/mkxl/page-ini.mkxl | 1 + tex/context/base/mkxl/page-lay.mkxl | 31 +- tex/context/base/mkxl/page-pcl.mkxl | 4 +- tex/context/base/mkxl/phys-dim.mkxl | 34 +- tex/context/base/mkxl/publ-ini.mkxl | 19 +- tex/context/base/mkxl/spac-ali.mkxl | 58 +- tex/context/base/mkxl/spac-hor.mkxl | 4 +- tex/context/base/mkxl/spac-ver.mkxl | 20 +- tex/context/base/mkxl/strc-mat.mkxl | 1140 +++++++++++------ tex/context/base/mkxl/strc-not.mklx | 39 +- tex/context/base/mkxl/strc-num.mkxl | 17 +- tex/context/base/mkxl/strc-ref.lmt | 26 +- tex/context/base/mkxl/strc-ref.mklx | 5 + tex/context/base/mkxl/strc-sec.mkxl | 8 +- tex/context/base/mkxl/supp-mat.mkxl | 46 +- tex/context/base/mkxl/syst-ini.mkxl | 31 +- tex/context/base/mkxl/tabl-ntb.mkxl | 2 + tex/context/base/mkxl/tabl-tab.mkxl | 12 +- tex/context/base/mkxl/tabl-tbl.mkxl | 2 +- tex/context/base/mkxl/tabl-xtb.lmt | 2 +- tex/context/base/mkxl/task-ini.lmt | 4 +- tex/context/base/mkxl/toks-aux.lmt | 38 +- tex/context/base/mkxl/trac-vis.lmt | 251 ++-- tex/context/base/mkxl/type-set.mkxl | 4 + tex/context/base/mkxl/typo-bld.lmt | 4 +- tex/context/base/mkxl/typo-lbx.lmt | 2 +- tex/context/fonts/mkiv/asana-math.lfg | 88 +- tex/context/fonts/mkiv/bonum-math.lfg | 452 +++++-- tex/context/fonts/mkiv/cambria-math.lfg | 75 +- tex/context/fonts/mkiv/concrete-math.lfg | 9 +- tex/context/fonts/mkiv/dejavu-math.lfg | 19 +- tex/context/fonts/mkiv/erewhon-math.lfg | 18 +- tex/context/fonts/mkiv/euler-math.lfg | 4 + tex/context/fonts/mkiv/garamond-math.lfg | 134 +- tex/context/fonts/mkiv/generic-math.lfg | 7 +- tex/context/fonts/mkiv/kpfonts-math.lfg | 13 +- tex/context/fonts/mkiv/libertinus-math.lfg | 78 +- tex/context/fonts/mkiv/lm.lfg | 400 +++++- tex/context/fonts/mkiv/lucida-opentype-math.lfg | 39 +- tex/context/fonts/mkiv/minion-math.lfg | 4 + tex/context/fonts/mkiv/newcomputermodern-math.lfg | 11 +- tex/context/fonts/mkiv/pagella-math.lfg | 97 +- tex/context/fonts/mkiv/schola-math.lfg | 18 +- tex/context/fonts/mkiv/stix-two-math.lfg | 53 +- tex/context/fonts/mkiv/termes-math.lfg | 43 +- tex/context/fonts/mkiv/type-imp-alegreya.mkiv | 86 ++ tex/context/fonts/mkiv/type-imp-gentium.mkiv | 85 +- tex/context/fonts/mkiv/type-imp-latinmodern.mkiv | 2 +- tex/context/fonts/mkiv/type-imp-modernlatin.mkiv | 48 +- tex/context/fonts/mkiv/xits-math.lfg | 2 +- tex/context/interface/mkii/keys-cs.xml | 6 + tex/context/interface/mkii/keys-en.xml | 8 + tex/context/interface/mkii/keys-pe.xml | 8 + tex/context/interface/mkii/keys-ro.xml | 3 + tex/context/modules/mkiv/m-simulate.mkiv | 2 +- tex/context/modules/mkiv/m-zint.mkiv | 4 +- tex/context/modules/mkiv/s-math-characters.lua | 73 +- tex/context/modules/mkiv/s-math-repertoire.mkiv | 135 +- tex/context/modules/mkxl/m-barcodes.mkxl | 11 +- tex/context/modules/mkxl/m-json.mkxl | 2 +- tex/context/modules/mkxl/m-oldmath.mkxl | 142 +++ tex/context/modules/mkxl/s-layout-show.mkxl | 30 + tex/context/modules/mkxl/s-math-tweaks.mkxl | 182 ++- tex/context/modules/mkxl/x-mathml.lmt | 126 +- tex/context/modules/mkxl/x-mathml.mkxl | 13 +- tex/context/patterns/common/lang-gr.rme | 3 + tex/context/patterns/mkii/lang-gr.hyp | 8 + tex/context/patterns/mkii/lang-gr.pat | 579 +++++++++ tex/context/patterns/mkiv/lang-gr.lua | 20 + tex/generic/context/luatex/luatex-basics-chr.lua | 2 - tex/generic/context/luatex/luatex-fonts-merged.lua | 25 +- 217 files changed, 12687 insertions(+), 4932 deletions(-) create mode 100644 doc/context/sources/general/manuals/ontarget/ontarget-alsomath.tex create mode 100644 doc/context/sources/general/manuals/ontarget/ontarget-binary.tex create mode 100644 doc/context/sources/general/manuals/ontarget/ontarget-makesnosense.tex create mode 100644 doc/context/sources/general/manuals/ontarget/ontarget-makessense.tex create mode 100644 doc/context/sources/general/manuals/ontarget/ontarget-metapost.tex create mode 100644 doc/context/sources/general/manuals/ontarget/ontarget-ridofjit.tex create mode 100644 tex/context/base/mkxl/lang-lab.lmt create mode 100644 tex/context/base/mkxl/math-com.mkxl create mode 100644 tex/context/base/mkxl/math-dif.mkxl create mode 100644 tex/context/base/mkxl/meta-imp-functions.lmt create mode 100644 tex/context/base/mkxl/meta-imp-functions.mkxl create mode 100644 tex/context/base/mkxl/page-blk.lmt create mode 100644 tex/context/base/mkxl/page-blk.mkxl create mode 100644 tex/context/fonts/mkiv/type-imp-alegreya.mkiv create mode 100644 tex/context/modules/mkxl/m-oldmath.mkxl create mode 100644 tex/context/patterns/common/lang-gr.rme create mode 100644 tex/context/patterns/mkii/lang-gr.hyp create mode 100644 tex/context/patterns/mkii/lang-gr.pat create mode 100644 tex/context/patterns/mkiv/lang-gr.lua 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 aea130464..fa1e5da63 100644 --- a/context/data/scite/context/lexers/data/scite-context-data-context.lua +++ b/context/data/scite/context/lexers/data/scite-context-data-context.lua @@ -1,4 +1,4 @@ return { - ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "pluseleven", "plustwelve", "plussixteen", "plusfifty", "plushundred", "plusonehundred", "plustwohundred", "plusfivehundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxcount", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "binaryshiftedten", "binaryshiftedtwenty", "binaryshiftedthirty", "thickermuskip", "directionlefttoright", "directionrighttoleft", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "prerollrun", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "texenginefunctionality", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "contextformat", "contextversion", "contextlmtxmode", "contextmark", "mksuffix", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "statuswrite", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "rlncatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "commaasciicode", "spaceasciicode", "periodasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "leftparentasciicode", "rightparentasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", "hyphenasciicode", "percentasciicode", "leftbracketasciicode", "rightbracketasciicode", "hsizefrozenparcode", "skipfrozenparcode", "hangfrozenparcode", "indentfrozenparcode", "parfillfrozenparcode", "adjustfrozenparcode", "protrudefrozenparcode", "tolerancefrozenparcode", "stretchfrozenparcode", "loosenessfrozenparcode", "lastlinefrozenparcode", "linepenaltyfrozenparcode", "clubpenaltyfrozenparcode", "widowpenaltyfrozenparcode", "displaypenaltyfrozenparcode", "brokenpenaltyfrozenparcode", "demeritsfrozenparcode", "shapefrozenparcode", "linefrozenparcode", "hyphenationfrozenparcode", "shapingpenaltyfrozenparcode", "orphanpenaltyfrozenparcode", "allfrozenparcode", "mathpenaltyfrozenparcode", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vadjustgroupcode", "vcentergroupcode", "mathabovegroupcode", "mathchoicegroupcode", "alsosimplegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "localboxgroupcode", "splitoffgroupcode", "splitkeepgroupcode", "preamblegroupcode", "alignsetgroupcode", "finrowgroupcode", "discretionarygroupcode", "markautomigrationcode", "insertautomigrationcode", "adjustautomigrationcode", "preautomigrationcode", "postautomigrationcode", "charnodecode", "hlistnodecode", "vlistnodecode", "rulenodecode", "insertnodecode", "marknodecode", "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", "overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode", "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "checkligatureandkernmathcontrolcode", "applyverticalitalickernmathcontrolcode", "applyordinaryitalickernmathcontrolcode", "applycharitalickernmathcontrolcode", "reboxcharitalickernmathcontrolcode", "applyboxeditalickernmathcontrolcode", "staircasekernmathcontrolcode", "applytextitalickernmathcontrolcode", "applyscriptitalickernmathcontrolcode", "italicshapekernmathcontrolcode", "checkspaceitalickernmathcontrolcode", "checktextitalickernmathcontrolcode", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode", "noitaliccorrectionglyphoptioncode", "normalparcontextcode", "vmodeparcontextcode", "vboxparcontextcode", "vtopparcontextcode", "vcenterparcontextcode", "vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode", "noalignparcontextcode", "spanparcontextcode", "resetparcontextcode", "leftoriginlistanchorcode", "leftheightlistanchorcode", "leftdepthlistanchorcode", "rightoriginlistanchorcode", "rightheightlistanchorcode", "rightdepthlistanchorcode", "centeroriginlistanchorcode", "centerheightlistanchorcode", "centerdepthlistanchorcode", "halfwaytotallistanchorcode", "halfwayheightlistanchorcode", "halfwaydepthlistanchorcode", "halfwayleftlistanchorcode", "halfwayrightlistanchorcode", "negatexlistsigncode", "negateylistsigncode", "negatelistsigncode", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "mathexheight", "mathemwidth", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathaxisheight", "muquad", "startmode", "stopmode", "startnotmode", "stopnotmode", "startmodeset", "stopmodeset", "doifmode", "doifelsemode", "doifmodeelse", "doifnotmode", "startmodeset", "stopmodeset", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifelseallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startnotext", "stopnotext", "startdocument", "stopdocument", "documentvariable", "unexpandeddocumentvariable", "setupdocument", "presetdocument", "doifelsedocumentvariable", "doifdocumentvariableelse", "doifdocumentvariable", "doifnotdocumentvariable", "startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule", "setupmodule", "currentmoduleparameter", "moduleparameter", "everystarttext", "everystoptext", "startTEXpage", "stopTEXpage", "enablemode", "disablemode", "preventmode", "definemode", "globalenablemode", "globaldisablemode", "globalpreventmode", "pushmode", "popmode", "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", "mathordinarycode", "mathordcode", "mathoperatorcode", "mathopcode", "mathbinarycode", "mathbincode", "mathrelationcode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctuationcode", "mathpunctcode", "mathovercode", "mathundercode", "mathinnercode", "mathradicalcode", "mathfractioncode", "mathmiddlecode", "mathaccentcode", "mathfencedcode", "mathghostcode", "mathvariablecode", "mathactivecode", "mathvcentercode", "mathconstructcode", "mathwrappedcode", "mathbegincode", "mathendcode", "mathexplicitcode", "mathdivisioncode", "mathfactorialcode", "mathdimensioncode", "mathimaginarycode", "mathdifferentialcode", "mathexponentialcode", "mathfunctioncode", "mathdigitcode", "mathalphacode", "mathboxcode", "mathchoicecode", "mathnothingcode", "mathlimopcode", "mathnolopcode", "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", "continueifinputfile", "luastringsep", "!!bs", "!!es", "lefttorightmark", "righttoleftmark", "lrm", "rlm", "bidilre", "bidirle", "bidipop", "bidilro", "bidirlo", "breakablethinspace", "nobreakspace", "nonbreakablespace", "narrownobreakspace", "zerowidthnobreakspace", "ideographicspace", "ideographichalffillspace", "twoperemspace", "threeperemspace", "fourperemspace", "fiveperemspace", "sixperemspace", "figurespace", "punctuationspace", "hairspace", "enquad", "emquad", "zerowidthspace", "zerowidthnonjoiner", "zerowidthjoiner", "zwnj", "zwj", "optionalspace", "asciispacechar", "softhyphen", "Ux", "eUx", "Umathaccents", "parfillleftskip", "parfillrightskip", "startlmtxmode", "stoplmtxmode", "startmkivmode", "stopmkivmode", "wildcardsymbol", "normalhyphenationcode", "automatichyphenationcode", "explicithyphenationcode", "syllablehyphenationcode", "uppercasehyphenationcode", "collapsehyphenationcode", "compoundhyphenationcode", "strictstarthyphenationcode", "strictendhyphenationcode", "automaticpenaltyhyphenationcode", "explicitpenaltyhyphenationcode", "permitgluehyphenationcode", "permitallhyphenationcode", "permitmathreplacehyphenationcode", "forcecheckhyphenationcode", "lazyligatureshyphenationcode", "forcehandlerhyphenationcode", "feedbackcompoundhyphenationcode", "ignoreboundshyphenationcode", "partialhyphenationcode", "completehyphenationcode", "normalizelinenormalizecode", "parindentskipnormalizecode", "swaphangindentnormalizecode", "swapparsshapenormalizecode", "breakafterdirnormalizecode", "removemarginkernsnormalizecode", "clipwidthnormalizecode", "flattendiscretionariesnormalizecode", "discardzerotabskipsnormalizecode", "flattenhleadersnormalizecode", "normalizeparnormalizeparcode", "flattenvleadersnormalizeparcode", "nopreslackclassoptioncode", "nopostslackclassoptioncode", "lefttopkernclassoptioncode", "righttopkernclassoptioncode", "leftbottomkernclassoptioncode", "rightbottomkernclassoptioncode", "lookaheadforendclassoptioncode", "defaultmathclassoptions", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noitaliccorrectionglyphoptioncode", "nokerningcode", "noligaturingcode", "frozenflagcode", "tolerantflagcode", "protectedflagcode", "primitiveflagcode", "permanentflagcode", "noalignedflagcode", "immutableflagcode", "mutableflagcode", "globalflagcode", "overloadedflagcode", "immediateflagcode", "conditionalflagcode", "valueflagcode", "instanceflagcode", "ordmathflattencode", "binmathflattencode", "relmathflattencode", "punctmathflattencode", "innermathflattencode", "normalworddiscoptioncode", "preworddiscoptioncode", "postworddiscoptioncode", "continuewhenlmtxmode" }, - ["helpers"]={ "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "startluasetups", "stopluasetups", "starttexsetups", "stoptexsetups", "startrawsetups", "stoprawsetups", "startlocalsetups", "stoplocalsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "startcontextcode", "stopcontextcode", "startcontextdefinitioncode", "stopcontextdefinitioncode", "texdefinition", "doifelsesetups", "doifsetupselse", "doifsetups", "doifnotsetups", "setup", "setups", "texsetup", "xmlsetup", "luasetup", "directsetup", "fastsetup", "copysetups", "resetsetups", "doifelsecommandhandler", "doifcommandhandlerelse", "doifnotcommandhandler", "doifcommandhandler", "newmode", "setmode", "resetmode", "newsystemmode", "setsystemmode", "resetsystemmode", "pushsystemmode", "popsystemmode", "globalsetmode", "globalresetmode", "globalsetsystemmode", "globalresetsystemmode", "booleanmodevalue", "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", "then", "begcsname", "autorule", "strippedcsname", "checkedstrippedcsname", "nofarguments", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthargumenttrue", "sixthargumentfalse", "sixthargumenttrue", "seventhargumentfalse", "seventhargumenttrue", "vkern", "hkern", "vpenalty", "hpenalty", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "untraceddonothing", "dontcomplain", "moreboxtracing", "lessboxtracing", "noboxtracing", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "startpickupmath", "stoppickupmath", "reqno", "forceinlinemath", "mathortext", "thebox", "htdp", "unvoidbox", "hfilll", "vfilll", "mathbox", "mathlimop", "mathnolop", "mathnothing", "mathalpha", "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilll", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "normalhfilllneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilll", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "normalvfilllneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledmbox", "ruledhpack", "ruledvpack", "ruledtpack", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", "filledhboxb", "filledhboxr", "filledhboxg", "filledhboxc", "filledhboxm", "filledhboxy", "filledhboxk", "scratchstring", "scratchstringone", "scratchstringtwo", "tempstring", "scratchcounter", "globalscratchcounter", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "scratchmacro", "scratchmacroone", "scratchmacrotwo", "scratchconditiontrue", "scratchconditionfalse", "ifscratchcondition", "scratchconditiononetrue", "scratchconditiononefalse", "ifscratchconditionone", "scratchconditiontwotrue", "scratchconditiontwofalse", "ifscratchconditiontwo", "globalscratchcounterone", "globalscratchcountertwo", "globalscratchcounterthree", "groupedcommand", "groupedcommandcs", "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "simplegroupedcommandcs", "pickupgroupedcommand", "pickupgroupedcommandcs", "mathgroupedcommandcs", "usedbaselineskip", "usedlineskip", "usedlineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "next", "nexttoken", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "boxisempty", "boxtostring", "contentostring", "prerolltostring", "givenwidth", "givenheight", "givendepth", "scangivendimensions", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchtotal", "scratchhsize", "scratchvsize", "scratchxoffset", "scratchyoffset", "scratchhoffset", "scratchvoffset", "scratchxposition", "scratchyposition", "scratchtopoffset", "scratchbottomoffset", "scratchleftoffset", "scratchrightoffset", "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchcounterfour", "scratchcounterfive", "scratchcountersix", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchdimenfour", "scratchdimenfive", "scratchdimensix", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchskipfour", "scratchskipfive", "scratchskipsix", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchmuskipfour", "scratchmuskipfive", "scratchmuskipsix", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchtoksfour", "scratchtoksfive", "scratchtokssix", "scratchboxone", "scratchboxtwo", "scratchboxthree", "scratchboxfour", "scratchboxfive", "scratchboxsix", "scratchnx", "scratchny", "scratchmx", "scratchmy", "scratchunicode", "scratchmin", "scratchmax", "scratchleftskip", "scratchrightskip", "scratchtopskip", "scratchbottomskip", "doif", "doifnot", "doifelse", "firstinset", "doifinset", "doifnotinset", "doifelseinset", "doifinsetelse", "doifelsenextchar", "doifnextcharelse", "doifelsenextcharcs", "doifnextcharcselse", "doifelsenextoptional", "doifnextoptionalelse", "doifelsenextoptionalcs", "doifnextoptionalcselse", "doifelsefastoptionalcheck", "doiffastoptionalcheckelse", "doifelsefastoptionalcheckcs", "doiffastoptionalcheckcselse", "doifelsenextbgroup", "doifnextbgroupelse", "doifelsenextbgroupcs", "doifnextbgroupcselse", "doifelsenextparenthesis", "doifnextparenthesiselse", "doifelseundefined", "doifundefinedelse", "doifelsedefined", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifnothingelse", "doifelsesomething", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifvaluenothingelse", "doifelsedimension", "doifdimensionelse", "doifelsenumber", "doifnumberelse", "doifnumber", "doifnotnumber", "doifelsecommon", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifelseinstring", "doifinstringelse", "doifelseassignment", "doifassignmentelse", "docheckassignment", "doifelseassignmentcs", "doifassignmentelsecs", "validassignment", "novalidassignment", "doiftext", "doifelsetext", "doiftextelse", "doifnottext", "quitcondition", "truecondition", "falsecondition", "tracingall", "tracingnone", "loggingall", "tracingcatcodes", "showluatokens", "aliasmacro", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "emspace", "charspace", "nbsp", "crlf", "obeyspaces", "obeylines", "obeytabs", "obeypages", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "naturalspace", "controlspace", "normalspaces", "ignoretabs", "ignorelines", "ignorepages", "ignoreeofs", "setcontrolspaces", "executeifdefined", "singleexpandafter", "doubleexpandafter", "tripleexpandafter", "dontleavehmode", "removelastspace", "removeunwantedspaces", "keepunwantedspaces", "removepunctuation", "ignoreparskip", "forcestrutdepth", "onlynonbreakablespace", "wait", "writestatus", "define", "defineexpandable", "redefine", "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure", "measured", "directmeasure", "setquantity", "setequantity", "setgquantity", "setxquantity", "definequantity", "freezequantity", "quantity", "quantitied", "directquantity", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "udef", "ugdef", "uedef", "uxdef", "checked", "unique", "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "copyparameters", "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter", "setexpandeddummyparameter", "usedummystyleandcolor", "usedummystyleparameter", "usedummycolorparameter", "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", "unexpanded", "expanded", "startexpanded", "stopexpanded", "protect", "unprotect", "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", "firstofoneunexpanded", "firstoftwounexpanded", "secondoftwounexpanded", "firstofthreeunexpanded", "secondofthreeunexpanded", "thirdofthreeunexpanded", "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs", "fastloopindex", "fastloopfinal", "dowith", "doloopovermatch", "doloopovermatched", "doloopoverlist", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "setconditional", "newmacro", "setnewmacro", "newfraction", "newsignal", "newboundary", "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", "mathclassvalue", "startnointerference", "stopnointerference", "twodigits", "threedigits", "leftorright", "offinterlineskip", "oninterlineskip", "nointerlineskip", "strut", "halfstrut", "quarterstrut", "depthstrut", "halflinestrut", "noheightstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "strutgap", "begstrut", "endstrut", "lineheight", "leftboundary", "rightboundary", "signalcharacter", "aligncontentleft", "aligncontentmiddle", "aligncontentright", "shiftbox", "vpackbox", "hpackbox", "vpackedbox", "hpackedbox", "ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing", "ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing", "ordfracspacing", "ordradspacing", "ordmiddlespacing", "ordaccentspacing", "opordspacing", "opopspacing", "opbinspacing", "oprelspacing", "opopenspacing", "opclosespacing", "oppunctspacing", "opinnerspacing", "opfracspacing", "opradspacing", "opmiddlespacing", "opaccentspacing", "binordspacing", "binopspacing", "binbinspacing", "binrelspacing", "binopenspacing", "binclosespacing", "binpunctspacing", "bininnerspacing", "binfracspacing", "binradspacing", "binmiddlespacing", "binaccentspacing", "relordspacing", "relopspacing", "relbinspacing", "relrelspacing", "relopenspacing", "relclosespacing", "relpunctspacing", "relinnerspacing", "relfracspacing", "relradspacing", "relmiddlespacing", "relaccentspacing", "openordspacing", "openopspacing", "openbinspacing", "openrelspacing", "openopenspacing", "openclosespacing", "openpunctspacing", "openinnerspacing", "openfracspacing", "openradspacing", "openmiddlespacing", "openaccentspacing", "closeordspacing", "closeopspacing", "closebinspacing", "closerelspacing", "closeopenspacing", "closeclosespacing", "closepunctspacing", "closeinnerspacing", "closefracspacing", "closeradspacing", "closemiddlespacing", "closeaccentspacing", "punctordspacing", "punctopspacing", "punctbinspacing", "punctrelspacing", "punctopenspacing", "punctclosespacing", "punctpunctspacing", "punctinnerspacing", "punctfracspacing", "punctradspacing", "punctmiddlespacing", "punctaccentspacing", "innerordspacing", "inneropspacing", "innerbinspacing", "innerrelspacing", "inneropenspacing", "innerclosespacing", "innerpunctspacing", "innerinnerspacing", "innerfracspacing", "innerradspacing", "innermiddlespacing", "inneraccentspacing", "fracordspacing", "fracopspacing", "fracbinspacing", "fracrelspacing", "fracopenspacing", "fracclosespacing", "fracpunctspacing", "fracinnerspacing", "fracfracspacing", "fracradspacing", "fracmiddlespacing", "fracaccentspacing", "radordspacing", "radopspacing", "radbinspacing", "radrelspacing", "radopenspacing", "radclosespacing", "radpunctspacing", "radinnerspacing", "radfracspacing", "radradspacing", "radmiddlespacing", "radaccentspacing", "middleordspacing", "middleopspacing", "middlebinspacing", "middlerelspacing", "middleopenspacing", "middleclosespacing", "middlepunctspacing", "middleinnerspacing", "middlefracspacing", "middleradspacing", "middlemiddlespacing", "middleaccentspacing", "accentordspacing", "accentopspacing", "accentbinspacing", "accentrelspacing", "accentopenspacing", "accentclosespacing", "accentpunctspacing", "accentinnerspacing", "accentfracspacing", "accentradspacing", "accentmiddlespacing", "accentaccentspacing", "normalreqno", "startimath", "stopimath", "normalstartimath", "normalstopimath", "startdmath", "stopdmath", "normalstartdmath", "normalstopdmath", "normalsuperscript", "normalsubscript", "normalnosuperscript", "normalnosubscript", "normalprimescript", "superscript", "subscript", "nosuperscript", "nosubscript", "primescript", "superprescript", "subprescript", "nosuperprescript", "nosubsprecript", "uncramped", "cramped", "mathstyletrigger", "triggermathstyle", "triggeredmathstyle", "mathstylefont", "mathsmallstylefont", "mathstyleface", "mathsmallstyleface", "mathstylecommand", "mathpalette", "mathstylehbox", "mathstylevbox", "mathstylevcenter", "mathstylevcenteredhbox", "mathstylevcenteredvbox", "mathtext", "setmathsmalltextbox", "setmathtextbox", "pushmathstyle", "popmathstyle", "triggerdisplaystyle", "triggertextstyle", "triggerscriptstyle", "triggerscriptscriptstyle", "triggeruncrampedstyle", "triggercrampedstyle", "triggersmallstyle", "triggeruncrampedsmallstyle", "triggercrampedsmallstyle", "triggerbigstyle", "triggeruncrampedbigstyle", "triggercrampedbigstyle", "luaexpr", "expelsedoif", "expdoif", "expdoifnot", "expdoifelsecommon", "expdoifcommonelse", "expdoifelseinset", "expdoifinsetelse", "ctxdirectlua", "ctxlatelua", "ctxsprint", "ctxwrite", "ctxcommand", "ctxdirectcommand", "ctxlatecommand", "ctxreport", "ctxlua", "luacode", "lateluacode", "directluacode", "registerctxluafile", "ctxloadluafile", "luaversion", "luamajorversion", "luaminorversion", "ctxluacode", "luaconditional", "luaexpanded", "ctxluamatch", "startluaparameterset", "stopluaparameterset", "luaparameterset", "definenamedlua", "obeylualines", "obeyluatokens", "startluacode", "stopluacode", "startlua", "stoplua", "startctxfunction", "stopctxfunction", "ctxfunction", "startctxfunctiondefinition", "stopctxfunctiondefinition", "installctxfunction", "installprotectedctxfunction", "installprotectedctxscanner", "installctxscanner", "resetctxscanner", "cldprocessfile", "cldloadfile", "cldloadviafile", "cldcontext", "cldcommand", "carryoverpar", "freezeparagraphproperties", "defrostparagraphproperties", "setparagraphfreezing", "forgetparagraphfreezing", "updateparagraphproperties", "updateparagraphpenalties", "updateparagraphdemerits", "updateparagraphshapes", "updateparagraphlines", "lastlinewidth", "assumelongusagecs", "Umathbotaccent", "Umathtopaccent", "righttolefthbox", "lefttorighthbox", "righttoleftvbox", "lefttorightvbox", "righttoleftvtop", "lefttorightvtop", "rtlhbox", "ltrhbox", "rtlvbox", "ltrvbox", "rtlvtop", "ltrvtop", "autodirhbox", "autodirvbox", "autodirvtop", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "lefttoright", "righttoleft", "checkedlefttoright", "checkedrighttoleft", "synchronizelayoutdirection", "synchronizedisplaydirection", "synchronizeinlinedirection", "dirlre", "dirrle", "dirlro", "dirrlo", "rtltext", "ltrtext", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "dohyphencollapsing", "nohyphencollapsing", "compounddiscretionary", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalvtop", "naturalhpack", "naturalvpack", "naturaltpack", "reversehbox", "reversevbox", "reversevtop", "reversehpack", "reversevpack", "reversetpack", "hcontainer", "vcontainer", "tcontainer", "frule", "compoundhyphenpenalty", "start", "stop", "unsupportedcs", "openout", "closeout", "write", "openin", "closein", "read", "readline", "readfromterminal", "boxlines", "boxline", "setboxline", "copyboxline", "boxlinewd", "boxlineht", "boxlinedp", "boxlinenw", "boxlinenh", "boxlinend", "boxlinels", "boxliners", "boxlinelh", "boxlinerh", "boxlinelp", "boxlinerp", "boxlinein", "boxrangewd", "boxrangeht", "boxrangedp", "bitwiseset", "bitwiseand", "bitwiseor", "bitwisexor", "bitwisenot", "bitwisenil", "ifbitwiseand", "bitwise", "bitwiseshift", "bitwiseflip", "textdir", "linedir", "pardir", "boxdir", "prelistbox", "postlistbox", "prelistcopy", "postlistcopy", "setprelistbox", "setpostlistbox", "noligaturing", "nokerning", "noexpansion", "noprotrusion", "noleftkerning", "noleftligaturing", "norightkerning", "norightligaturing", "noitaliccorrection", "futureletnexttoken", "defbackslashbreak", "letbackslashbreak", "pushoverloadmode", "popoverloadmode", "pushrunstate", "poprunstate", "suggestedalias", "showboxhere", "discoptioncodestring", "flagcodestring", "frozenparcodestring", "glyphoptioncodestring", "groupcodestring", "hyphenationcodestring", "mathcontrolcodestring", "mathflattencodestring", "normalizecodestring", "parcontextcodestring", "newlocalcount", "newlocaldimen", "newlocalskip", "newlocalmuskip", "newlocaltoks", "newlocalbox", "newlocalwrite", "newlocalread", "setnewlocalcount", "setnewlocaldimen", "setnewlocalskip", "setnewlocalmuskip", "setnewlocaltoks", "setnewlocalbox", "ifexpression" }, + ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "pluseleven", "plustwelve", "plussixteen", "plusfifty", "plushundred", "plusonehundred", "plustwohundred", "plusfivehundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxcount", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "centeringskip", "stretchingskip", "shrinkingskip", "centeringfillskip", "stretchingfillskip", "shrinkingfillskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "binaryshiftedten", "binaryshiftedtwenty", "binaryshiftedthirty", "thickermuskip", "directionlefttoright", "directionrighttoleft", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "prerollrun", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "texenginefunctionality", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "contextformat", "contextversion", "contextlmtxmode", "contextmark", "mksuffix", "activecatcode", "bgroup", "egroup", "endline", "conditionaltrue", "conditionalfalse", "attributeunsetvalue", "statuswrite", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "ctdcatcodes", "rlncatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "commaasciicode", "spaceasciicode", "periodasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "leftparentasciicode", "rightparentasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "primeasciicode", "hyphenasciicode", "percentasciicode", "leftbracketasciicode", "rightbracketasciicode", "hsizefrozenparcode", "skipfrozenparcode", "hangfrozenparcode", "indentfrozenparcode", "parfillfrozenparcode", "adjustfrozenparcode", "protrudefrozenparcode", "tolerancefrozenparcode", "stretchfrozenparcode", "loosenessfrozenparcode", "lastlinefrozenparcode", "linepenaltyfrozenparcode", "clubpenaltyfrozenparcode", "widowpenaltyfrozenparcode", "displaypenaltyfrozenparcode", "brokenpenaltyfrozenparcode", "demeritsfrozenparcode", "shapefrozenparcode", "linefrozenparcode", "hyphenationfrozenparcode", "shapingpenaltyfrozenparcode", "orphanpenaltyfrozenparcode", "allfrozenparcode", "mathpenaltyfrozenparcode", "activemathcharcode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "batchmodecode", "nonstopmodecode", "scrollmodecode", "errorstopmodecode", "bottomlevelgroupcode", "simplegroupcode", "hboxgroupcode", "adjustedhboxgroupcode", "vboxgroupcode", "vtopgroupcode", "aligngroupcode", "noaligngroupcode", "outputgroupcode", "mathgroupcode", "discretionarygroupcode", "insertgroupcode", "vadjustgroupcode", "vcentergroupcode", "mathabovegroupcode", "mathchoicegroupcode", "alsosimplegroupcode", "semisimplegroupcode", "mathshiftgroupcode", "mathleftgroupcode", "localboxgroupcode", "splitoffgroupcode", "splitkeepgroupcode", "preamblegroupcode", "alignsetgroupcode", "finrowgroupcode", "discretionarygroupcode", "markautomigrationcode", "insertautomigrationcode", "adjustautomigrationcode", "preautomigrationcode", "postautomigrationcode", "charnodecode", "hlistnodecode", "vlistnodecode", "rulenodecode", "insertnodecode", "marknodecode", "adjustnodecode", "ligaturenodecode", "discretionarynodecode", "whatsitnodecode", "mathnodecode", "gluenodecode", "kernnodecode", "penaltynodecode", "unsetnodecode", "mathsnodecode", "charifcode", "catifcode", "numifcode", "dimifcode", "oddifcode", "vmodeifcode", "hmodeifcode", "mmodeifcode", "innerifcode", "voidifcode", "hboxifcode", "vboxifcode", "xifcode", "eofifcode", "trueifcode", "falseifcode", "caseifcode", "definedifcode", "csnameifcode", "fontcharifcode", "overrulemathcontrolcode", "underrulemathcontrolcode", "radicalrulemathcontrolcode", "fractionrulemathcontrolcode", "accentskewhalfmathcontrolcode", "accentskewapplymathcontrolcode", "checkligatureandkernmathcontrolcode", "applyverticalitalickernmathcontrolcode", "applyordinaryitalickernmathcontrolcode", "applycharitalickernmathcontrolcode", "reboxcharitalickernmathcontrolcode", "applyboxeditalickernmathcontrolcode", "staircasekernmathcontrolcode", "applytextitalickernmathcontrolcode", "applyscriptitalickernmathcontrolcode", "italicshapekernmathcontrolcode", "checkspaceitalickernmathcontrolcode", "checktextitalickernmathcontrolcode", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noleftkerningglyphoptioncode", "noleftligaturingglyphoptioncode", "norightkerningglyphoptioncode", "norightligaturingglyphoptioncode", "noitaliccorrectionglyphoptioncode", "normalparcontextcode", "vmodeparcontextcode", "vboxparcontextcode", "vtopparcontextcode", "vcenterparcontextcode", "vadjustparcontextcode", "insertparcontextcode", "outputparcontextcode", "alignparcontextcode", "noalignparcontextcode", "spanparcontextcode", "resetparcontextcode", "leftoriginlistanchorcode", "leftheightlistanchorcode", "leftdepthlistanchorcode", "rightoriginlistanchorcode", "rightheightlistanchorcode", "rightdepthlistanchorcode", "centeroriginlistanchorcode", "centerheightlistanchorcode", "centerdepthlistanchorcode", "halfwaytotallistanchorcode", "halfwayheightlistanchorcode", "halfwaydepthlistanchorcode", "halfwayleftlistanchorcode", "halfwayrightlistanchorcode", "negatexlistsigncode", "negateylistsigncode", "negatelistsigncode", "fontslantperpoint", "fontinterwordspace", "fontinterwordstretch", "fontinterwordshrink", "fontexheight", "fontemwidth", "fontextraspace", "slantperpoint", "mathexheight", "mathemwidth", "interwordspace", "interwordstretch", "interwordshrink", "exheight", "emwidth", "extraspace", "mathaxisheight", "muquad", "startmode", "stopmode", "startnotmode", "stopnotmode", "startmodeset", "stopmodeset", "doifmode", "doifelsemode", "doifmodeelse", "doifnotmode", "startmodeset", "stopmodeset", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifelseallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startnotext", "stopnotext", "startdocument", "stopdocument", "documentvariable", "unexpandeddocumentvariable", "setupdocument", "presetdocument", "doifelsedocumentvariable", "doifdocumentvariableelse", "doifdocumentvariable", "doifnotdocumentvariable", "startmodule", "stopmodule", "usemodule", "usetexmodule", "useluamodule", "setupmodule", "currentmoduleparameter", "moduleparameter", "everystarttext", "everystoptext", "startTEXpage", "stopTEXpage", "enablemode", "disablemode", "preventmode", "definemode", "globalenablemode", "globaldisablemode", "globalpreventmode", "pushmode", "popmode", "typescriptone", "typescripttwo", "typescriptthree", "mathsizesuffix", "mathordinarycode", "mathordcode", "mathoperatorcode", "mathopcode", "mathbinarycode", "mathbincode", "mathrelationcode", "mathrelcode", "mathopencode", "mathclosecode", "mathpunctuationcode", "mathpunctcode", "mathovercode", "mathundercode", "mathinnercode", "mathradicalcode", "mathfractioncode", "mathmiddlecode", "mathaccentcode", "mathfencedcode", "mathghostcode", "mathvariablecode", "mathactivecode", "mathvcentercode", "mathconstructcode", "mathwrappedcode", "mathbegincode", "mathendcode", "mathexplicitcode", "mathdivisioncode", "mathfactorialcode", "mathdimensioncode", "mathexperimentalcode", "mathtextpunctuationcode", "mathimaginarycode", "mathdifferentialcode", "mathexponentialcode", "mathellipsiscode", "mathfunctioncode", "mathdigitcode", "mathalphacode", "mathboxcode", "mathchoicecode", "mathnothingcode", "mathlimopcode", "mathnolopcode", "mathunsetcode", "mathunspacedcode", "mathallcode", "mathfakecode", "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", "luastringsep", "!!bs", "!!es", "lefttorightmark", "righttoleftmark", "lrm", "rlm", "bidilre", "bidirle", "bidipop", "bidilro", "bidirlo", "breakablethinspace", "nobreakspace", "nonbreakablespace", "narrownobreakspace", "zerowidthnobreakspace", "ideographicspace", "ideographichalffillspace", "twoperemspace", "threeperemspace", "fourperemspace", "fiveperemspace", "sixperemspace", "figurespace", "punctuationspace", "hairspace", "enquad", "emquad", "zerowidthspace", "zerowidthnonjoiner", "zerowidthjoiner", "zwnj", "zwj", "optionalspace", "asciispacechar", "softhyphen", "Ux", "eUx", "Umathaccents", "parfillleftskip", "parfillrightskip", "startlmtxmode", "stoplmtxmode", "startmkivmode", "stopmkivmode", "wildcardsymbol", "normalhyphenationcode", "automatichyphenationcode", "explicithyphenationcode", "syllablehyphenationcode", "uppercasehyphenationcode", "collapsehyphenationcode", "compoundhyphenationcode", "strictstarthyphenationcode", "strictendhyphenationcode", "automaticpenaltyhyphenationcode", "explicitpenaltyhyphenationcode", "permitgluehyphenationcode", "permitallhyphenationcode", "permitmathreplacehyphenationcode", "forcecheckhyphenationcode", "lazyligatureshyphenationcode", "forcehandlerhyphenationcode", "feedbackcompoundhyphenationcode", "ignoreboundshyphenationcode", "partialhyphenationcode", "completehyphenationcode", "normalizelinenormalizecode", "parindentskipnormalizecode", "swaphangindentnormalizecode", "swapparsshapenormalizecode", "breakafterdirnormalizecode", "removemarginkernsnormalizecode", "clipwidthnormalizecode", "flattendiscretionariesnormalizecode", "discardzerotabskipsnormalizecode", "flattenhleadersnormalizecode", "normalizeparnormalizeparcode", "flattenvleadersnormalizeparcode", "nopreslackclassoptioncode", "nopostslackclassoptioncode", "lefttopkernclassoptioncode", "righttopkernclassoptioncode", "leftbottomkernclassoptioncode", "rightbottomkernclassoptioncode", "lookaheadforendclassoptioncode", "noitaliccorrectionclassoptioncode", "defaultmathclassoptions", "checkligatureclassoptioncode", "flattenclassoptioncode", "omitpenaltyclassoptioncode", "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", "noexpansionglyphoptioncode", "noprotrusionglyphoptioncode", "noitaliccorrectionglyphoptioncode", "nokerningcode", "noligaturingcode", "frozenflagcode", "tolerantflagcode", "protectedflagcode", "primitiveflagcode", "permanentflagcode", "noalignedflagcode", "immutableflagcode", "mutableflagcode", "globalflagcode", "overloadedflagcode", "immediateflagcode", "conditionalflagcode", "valueflagcode", "instanceflagcode", "ordmathflattencode", "binmathflattencode", "relmathflattencode", "punctmathflattencode", "innermathflattencode", "normalworddiscoptioncode", "preworddiscoptioncode", "postworddiscoptioncode", "continueifinputfile", "continuewhenlmtxmode", "continuewhenmkivmode" }, + ["helpers"]={ "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "startluasetups", "stopluasetups", "starttexsetups", "stoptexsetups", "startrawsetups", "stoprawsetups", "startlocalsetups", "stoplocalsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "startcontextcode", "stopcontextcode", "startcontextdefinitioncode", "stopcontextdefinitioncode", "texdefinition", "doifelsesetups", "doifsetupselse", "doifsetups", "doifnotsetups", "setup", "setups", "texsetup", "xmlsetup", "luasetup", "directsetup", "fastsetup", "copysetups", "resetsetups", "doifelsecommandhandler", "doifcommandhandlerelse", "doifnotcommandhandler", "doifcommandhandler", "newmode", "setmode", "resetmode", "newsystemmode", "setsystemmode", "resetsystemmode", "pushsystemmode", "popsystemmode", "globalsetmode", "globalresetmode", "globalsetsystemmode", "globalresetsystemmode", "booleanmodevalue", "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", "then", "begcsname", "autorule", "strippedcsname", "checkedstrippedcsname", "nofarguments", "firstargumentfalse", "firstargumenttrue", "secondargumentfalse", "secondargumenttrue", "thirdargumentfalse", "thirdargumenttrue", "fourthargumentfalse", "fourthargumenttrue", "fifthargumentfalse", "fifthargumenttrue", "sixthargumentfalse", "sixthargumenttrue", "seventhargumentfalse", "seventhargumenttrue", "vkern", "hkern", "vpenalty", "hpenalty", "doglobal", "dodoglobal", "redoglobal", "resetglobal", "donothing", "untraceddonothing", "dontcomplain", "moreboxtracing", "lessboxtracing", "noboxtracing", "forgetall", "donetrue", "donefalse", "foundtrue", "foundfalse", "inlineordisplaymath", "indisplaymath", "forcedisplaymath", "startforceddisplaymath", "stopforceddisplaymath", "startpickupmath", "stoppickupmath", "reqno", "forceinlinemath", "mathortext", "thebox", "htdp", "unvoidbox", "hfilll", "vfilll", "mathbox", "mathlimop", "mathnolop", "mathnothing", "mathalpha", "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilll", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "normalhfilllneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilll", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "normalvfilllneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledmbox", "ruledhpack", "ruledvpack", "ruledtpack", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", "filledhboxb", "filledhboxr", "filledhboxg", "filledhboxc", "filledhboxm", "filledhboxy", "filledhboxk", "scratchstring", "scratchstringone", "scratchstringtwo", "tempstring", "scratchcounter", "globalscratchcounter", "privatescratchcounter", "scratchdimen", "globalscratchdimen", "privatescratchdimen", "scratchskip", "globalscratchskip", "privatescratchskip", "scratchmuskip", "globalscratchmuskip", "privatescratchmuskip", "scratchtoks", "globalscratchtoks", "privatescratchtoks", "scratchbox", "globalscratchbox", "privatescratchbox", "scratchmacro", "scratchmacroone", "scratchmacrotwo", "scratchconditiontrue", "scratchconditionfalse", "ifscratchcondition", "scratchconditiononetrue", "scratchconditiononefalse", "ifscratchconditionone", "scratchconditiontwotrue", "scratchconditiontwofalse", "ifscratchconditiontwo", "globalscratchcounterone", "globalscratchcountertwo", "globalscratchcounterthree", "groupedcommand", "groupedcommandcs", "triggergroupedcommand", "triggergroupedcommandcs", "simplegroupedcommand", "simplegroupedcommandcs", "pickupgroupedcommand", "pickupgroupedcommandcs", "mathgroupedcommandcs", "usedbaselineskip", "usedlineskip", "usedlineskiplimit", "availablehsize", "localhsize", "setlocalhsize", "distributedhsize", "hsizefraction", "next", "nexttoken", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "flushnextbox", "boxisempty", "boxtostring", "contentostring", "prerolltostring", "givenwidth", "givenheight", "givendepth", "scangivendimensions", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchtotal", "scratchitalic", "scratchhsize", "scratchvsize", "scratchxoffset", "scratchyoffset", "scratchhoffset", "scratchvoffset", "scratchxposition", "scratchyposition", "scratchtopoffset", "scratchbottomoffset", "scratchleftoffset", "scratchrightoffset", "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchcounterfour", "scratchcounterfive", "scratchcountersix", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchdimenfour", "scratchdimenfive", "scratchdimensix", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchskipfour", "scratchskipfive", "scratchskipsix", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchmuskipfour", "scratchmuskipfive", "scratchmuskipsix", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchtoksfour", "scratchtoksfive", "scratchtokssix", "scratchboxone", "scratchboxtwo", "scratchboxthree", "scratchboxfour", "scratchboxfive", "scratchboxsix", "scratchnx", "scratchny", "scratchmx", "scratchmy", "scratchunicode", "scratchmin", "scratchmax", "scratchleftskip", "scratchrightskip", "scratchtopskip", "scratchbottomskip", "doif", "doifnot", "doifelse", "firstinset", "doifinset", "doifnotinset", "doifelseinset", "doifinsetelse", "doifelsenextchar", "doifnextcharelse", "doifelsenextcharcs", "doifnextcharcselse", "doifelsenextoptional", "doifnextoptionalelse", "doifelsenextoptionalcs", "doifnextoptionalcselse", "doifelsefastoptionalcheck", "doiffastoptionalcheckelse", "doifelsefastoptionalcheckcs", "doiffastoptionalcheckcselse", "doifelsenextbgroup", "doifnextbgroupelse", "doifelsenextbgroupcs", "doifnextbgroupcselse", "doifelsenextparenthesis", "doifnextparenthesiselse", "doifelseundefined", "doifundefinedelse", "doifelsedefined", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifnothingelse", "doifelsesomething", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifvaluenothingelse", "doifelsedimension", "doifdimensionelse", "doifelsenumber", "doifnumberelse", "doifnumber", "doifnotnumber", "doifelsecommon", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifelseinstring", "doifinstringelse", "doifelseassignment", "doifassignmentelse", "docheckassignment", "doifelseassignmentcs", "doifassignmentelsecs", "validassignment", "novalidassignment", "doiftext", "doifelsetext", "doiftextelse", "doifnottext", "quitcondition", "truecondition", "falsecondition", "tracingall", "tracingnone", "loggingall", "tracingcatcodes", "showluatokens", "aliasmacro", "removetoks", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "endpar", "reseteverypar", "finishpar", "empty", "null", "space", "quad", "enspace", "emspace", "charspace", "nbsp", "crlf", "obeyspaces", "obeylines", "obeytabs", "obeypages", "obeyedspace", "obeyedline", "obeyedtab", "obeyedpage", "normalspace", "naturalspace", "controlspace", "normalspaces", "ignoretabs", "ignorelines", "ignorepages", "ignoreeofs", "setcontrolspaces", "executeifdefined", "singleexpandafter", "doubleexpandafter", "tripleexpandafter", "dontleavehmode", "removelastspace", "removeunwantedspaces", "keepunwantedspaces", "removepunctuation", "ignoreparskip", "forcestrutdepth", "onlynonbreakablespace", "wait", "writestatus", "define", "defineexpandable", "redefine", "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "freezemeasure", "measure", "measured", "directmeasure", "setquantity", "setequantity", "setgquantity", "setxquantity", "definequantity", "freezequantity", "quantity", "quantitied", "directquantity", "installcorenamespace", "getvalue", "getuvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "udef", "ugdef", "uedef", "uxdef", "checked", "unique", "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "copyparameters", "getdummyparameters", "dummyparameter", "directdummyparameter", "setdummyparameter", "letdummyparameter", "setexpandeddummyparameter", "usedummystyleandcolor", "usedummystyleparameter", "usedummycolorparameter", "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", "unexpanded", "expanded", "startexpanded", "stopexpanded", "protect", "unprotect", "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", "firstofoneunexpanded", "firstoftwounexpanded", "secondoftwounexpanded", "firstofthreeunexpanded", "secondofthreeunexpanded", "thirdofthreeunexpanded", "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "dofastloopcs", "fastloopindex", "fastloopfinal", "dowith", "doloopovermatch", "doloopovermatched", "doloopoverlist", "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "setconditional", "newmacro", "setnewmacro", "newfraction", "newsignal", "newboundary", "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", "mathclassvalue", "startnointerference", "stopnointerference", "twodigits", "threedigits", "leftorright", "offinterlineskip", "oninterlineskip", "nointerlineskip", "strut", "halfstrut", "quarterstrut", "depthstrut", "halflinestrut", "noheightstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "strutgap", "begstrut", "endstrut", "lineheight", "leftboundary", "rightboundary", "signalcharacter", "aligncontentleft", "aligncontentmiddle", "aligncontentright", "shiftbox", "vpackbox", "hpackbox", "vpackedbox", "hpackedbox", "ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing", "ordopenspacing", "ordclosespacing", "ordpunctspacing", "ordinnerspacing", "ordfracspacing", "ordradspacing", "ordmiddlespacing", "ordaccentspacing", "opordspacing", "opopspacing", "opbinspacing", "oprelspacing", "opopenspacing", "opclosespacing", "oppunctspacing", "opinnerspacing", "opfracspacing", "opradspacing", "opmiddlespacing", "opaccentspacing", "binordspacing", "binopspacing", "binbinspacing", "binrelspacing", "binopenspacing", "binclosespacing", "binpunctspacing", "bininnerspacing", "binfracspacing", "binradspacing", "binmiddlespacing", "binaccentspacing", "relordspacing", "relopspacing", "relbinspacing", "relrelspacing", "relopenspacing", "relclosespacing", "relpunctspacing", "relinnerspacing", "relfracspacing", "relradspacing", "relmiddlespacing", "relaccentspacing", "openordspacing", "openopspacing", "openbinspacing", "openrelspacing", "openopenspacing", "openclosespacing", "openpunctspacing", "openinnerspacing", "openfracspacing", "openradspacing", "openmiddlespacing", "openaccentspacing", "closeordspacing", "closeopspacing", "closebinspacing", "closerelspacing", "closeopenspacing", "closeclosespacing", "closepunctspacing", "closeinnerspacing", "closefracspacing", "closeradspacing", "closemiddlespacing", "closeaccentspacing", "punctordspacing", "punctopspacing", "punctbinspacing", "punctrelspacing", "punctopenspacing", "punctclosespacing", "punctpunctspacing", "punctinnerspacing", "punctfracspacing", "punctradspacing", "punctmiddlespacing", "punctaccentspacing", "innerordspacing", "inneropspacing", "innerbinspacing", "innerrelspacing", "inneropenspacing", "innerclosespacing", "innerpunctspacing", "innerinnerspacing", "innerfracspacing", "innerradspacing", "innermiddlespacing", "inneraccentspacing", "fracordspacing", "fracopspacing", "fracbinspacing", "fracrelspacing", "fracopenspacing", "fracclosespacing", "fracpunctspacing", "fracinnerspacing", "fracfracspacing", "fracradspacing", "fracmiddlespacing", "fracaccentspacing", "radordspacing", "radopspacing", "radbinspacing", "radrelspacing", "radopenspacing", "radclosespacing", "radpunctspacing", "radinnerspacing", "radfracspacing", "radradspacing", "radmiddlespacing", "radaccentspacing", "middleordspacing", "middleopspacing", "middlebinspacing", "middlerelspacing", "middleopenspacing", "middleclosespacing", "middlepunctspacing", "middleinnerspacing", "middlefracspacing", "middleradspacing", "middlemiddlespacing", "middleaccentspacing", "accentordspacing", "accentopspacing", "accentbinspacing", "accentrelspacing", "accentopenspacing", "accentclosespacing", "accentpunctspacing", "accentinnerspacing", "accentfracspacing", "accentradspacing", "accentmiddlespacing", "accentaccentspacing", "normalreqno", "startimath", "stopimath", "normalstartimath", "normalstopimath", "startdmath", "stopdmath", "normalstartdmath", "normalstopdmath", "normalsuperscript", "normalsubscript", "normalnosuperscript", "normalnosubscript", "normalprimescript", "superscript", "subscript", "nosuperscript", "nosubscript", "primescript", "superprescript", "subprescript", "nosuperprescript", "nosubsprecript", "uncramped", "cramped", "mathstyletrigger", "triggermathstyle", "triggeredmathstyle", "mathstylefont", "mathsmallstylefont", "mathstyleface", "mathsmallstyleface", "mathstylecommand", "mathpalette", "mathstylehbox", "mathstylevbox", "mathstylevcenter", "mathstylevcenteredhbox", "mathstylevcenteredvbox", "mathtext", "setmathsmalltextbox", "setmathtextbox", "pushmathstyle", "popmathstyle", "triggerdisplaystyle", "triggertextstyle", "triggerscriptstyle", "triggerscriptscriptstyle", "triggeruncrampedstyle", "triggercrampedstyle", "triggersmallstyle", "triggeruncrampedsmallstyle", "triggercrampedsmallstyle", "triggerbigstyle", "triggeruncrampedbigstyle", "triggercrampedbigstyle", "luaexpr", "expelsedoif", "expdoif", "expdoifnot", "expdoifelsecommon", "expdoifcommonelse", "expdoifelseinset", "expdoifinsetelse", "ctxdirectlua", "ctxlatelua", "ctxsprint", "ctxwrite", "ctxcommand", "ctxdirectcommand", "ctxlatecommand", "ctxreport", "ctxlua", "luacode", "lateluacode", "directluacode", "registerctxluafile", "ctxloadluafile", "luaversion", "luamajorversion", "luaminorversion", "ctxluacode", "luaconditional", "luaexpanded", "ctxluamatch", "startluaparameterset", "stopluaparameterset", "luaparameterset", "definenamedlua", "obeylualines", "obeyluatokens", "startluacode", "stopluacode", "startlua", "stoplua", "startctxfunction", "stopctxfunction", "ctxfunction", "startctxfunctiondefinition", "stopctxfunctiondefinition", "installctxfunction", "installprotectedctxfunction", "installprotectedctxscanner", "installctxscanner", "resetctxscanner", "cldprocessfile", "cldloadfile", "cldloadviafile", "cldcontext", "cldcommand", "carryoverpar", "freezeparagraphproperties", "defrostparagraphproperties", "setparagraphfreezing", "forgetparagraphfreezing", "updateparagraphproperties", "updateparagraphpenalties", "updateparagraphdemerits", "updateparagraphshapes", "updateparagraphlines", "lastlinewidth", "assumelongusagecs", "Umathbotaccent", "Umathtopaccent", "righttolefthbox", "lefttorighthbox", "righttoleftvbox", "lefttorightvbox", "righttoleftvtop", "lefttorightvtop", "rtlhbox", "ltrhbox", "rtlvbox", "ltrvbox", "rtlvtop", "ltrvtop", "autodirhbox", "autodirvbox", "autodirvtop", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "lefttoright", "righttoleft", "checkedlefttoright", "checkedrighttoleft", "synchronizelayoutdirection", "synchronizedisplaydirection", "synchronizeinlinedirection", "dirlre", "dirrle", "dirlro", "dirrlo", "rtltext", "ltrtext", "lesshyphens", "morehyphens", "nohyphens", "dohyphens", "dohyphencollapsing", "nohyphencollapsing", "compounddiscretionary", "Ucheckedstartdisplaymath", "Ucheckedstopdisplaymath", "break", "nobreak", "allowbreak", "goodbreak", "nospace", "nospacing", "dospacing", "naturalhbox", "naturalvbox", "naturalvtop", "naturalhpack", "naturalvpack", "naturaltpack", "reversehbox", "reversevbox", "reversevtop", "reversehpack", "reversevpack", "reversetpack", "hcontainer", "vcontainer", "tcontainer", "frule", "compoundhyphenpenalty", "start", "stop", "unsupportedcs", "openout", "closeout", "write", "openin", "closein", "read", "readline", "readfromterminal", "boxlines", "boxline", "setboxline", "copyboxline", "boxlinewd", "boxlineht", "boxlinedp", "boxlinenw", "boxlinenh", "boxlinend", "boxlinels", "boxliners", "boxlinelh", "boxlinerh", "boxlinelp", "boxlinerp", "boxlinein", "boxrangewd", "boxrangeht", "boxrangedp", "bitwiseset", "bitwiseand", "bitwiseor", "bitwisexor", "bitwisenot", "bitwisenil", "ifbitwiseand", "bitwise", "bitwiseshift", "bitwiseflip", "textdir", "linedir", "pardir", "boxdir", "prelistbox", "postlistbox", "prelistcopy", "postlistcopy", "setprelistbox", "setpostlistbox", "noligaturing", "nokerning", "noexpansion", "noprotrusion", "noleftkerning", "noleftligaturing", "norightkerning", "norightligaturing", "noitaliccorrection", "futureletnexttoken", "defbackslashbreak", "letbackslashbreak", "pushoverloadmode", "popoverloadmode", "pushrunstate", "poprunstate", "suggestedalias", "showboxhere", "discoptioncodestring", "flagcodestring", "frozenparcodestring", "glyphoptioncodestring", "groupcodestring", "hyphenationcodestring", "mathcontrolcodestring", "mathflattencodestring", "normalizecodestring", "parcontextcodestring", "newlocalcount", "newlocaldimen", "newlocalskip", "newlocalmuskip", "newlocaltoks", "newlocalbox", "newlocalwrite", "newlocalread", "setnewlocalcount", "setnewlocaldimen", "setnewlocalskip", "setnewlocalmuskip", "setnewlocaltoks", "setnewlocalbox", "ifexpression" }, } \ No newline at end of file diff --git a/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua b/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua index 742779d06..c54a563c5 100644 --- a/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua +++ b/context/data/scite/context/lexers/data/scite-context-data-interfaces.lua @@ -1,4 +1,4 @@ return { - ["common"]={ "AEacute", "AEligature", "AEmacron", "AMSTEX", "Aacute", "Abreve", "Abreveacute", "Abrevedotbelow", "Abrevegrave", "Abrevehook", "Abrevetilde", "Acaron", "Acircumflex", "Acircumflexacute", "Acircumflexdotbelow", "Acircumflexgrave", "Acircumflexhook", "Acircumflextilde", "Adiaeresis", "Adiaeresismacron", "Adotaccent", "Adotaccentmacron", "Adotbelow", "Adoublegrave", "AfterPar", "Agrave", "Ahook", "Ainvertedbreve", "Alpha", "Alphabeticnumerals", "AmSTeX", "Amacron", "And", "Angstrom", "Aogonek", "Aring", "Aringacute", "Arrowvert", "Astroke", "Atilde", "BeforePar", "Beta", "Bhook", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "Box", "Bumpeq", "CONTEXT", "Cacute", "Cap", "Caps", "Ccaron", "Ccedilla", "Ccircumflex", "Cdotaccent", "Character", "Characters", "Chi", "Chook", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "Cstroke", "Cup", "DAYLONG", "DAYSHORT", "DZcaronligature", "DZligature", "Dafrican", "Dcaron", "Dd", "Ddownarrow", "Delta", "Dhook", "Doteq", "Downarrow", "Dstroke", "Dzcaronligature", "Dzligature", "ETEX", "Eacute", "Ebreve", "Ecaron", "Ecedilla", "Ecircumflex", "Ecircumflexacute", "Ecircumflexdotbelow", "Ecircumflexgrave", "Ecircumflexhook", "Ecircumflextilde", "Ediaeresis", "Edotaccent", "Edotbelow", "Edoublegrave", "Egrave", "Ehook", "Einvertedbreve", "Emacron", "Eogonek", "Epsilon", "Eta", "Eth", "Etilde", "Eulerconst", "EveryLine", "EveryPar", "Fhook", "Finv", "Gacute", "Game", "Gamma", "Gbreve", "Gcaron", "Gcircumflex", "Gcommaaccent", "Gdotaccent", "GetPar", "Ghook", "GotoPar", "Greeknumerals", "Gstroke", "Hat", "Hcaron", "Hcircumflex", "Hstroke", "IJligature", "INRSTEX", "Iacute", "Ibreve", "Icaron", "Icircumflex", "Idiaeresis", "Idotaccent", "Idotbelow", "Idoublegrave", "Igrave", "Ihook", "Iinvertedbreve", "Im", "Imacron", "Iogonek", "Iota", "Istroke", "Itilde", "Jcircumflex", "Join", "Kappa", "Kcaron", "Kcommaaccent", "Khook", "LAMSTEX", "LATEX", "LJligature", "LUAJITTEX", "LUAMETATEX", "LUATEX", "LaTeX", "Lacute", "LamSTeX", "Lambda", "Lbar", "Lcaron", "Lcommaaccent", "Ldotmiddle", "Ldsh", "Leftarrow", "Leftrightarrow", "Ljligature", "Lleftarrow", "Longleftarrow", "Longleftrightarrow", "Longmapsfrom", "Longmapsto", "Longrightarrow", "Lsh", "Lstroke", "Lua", "LuaMetaTeX", "LuaTeX", "LuajitTeX", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKLX", "MKVI", "MKXI", "MKXL", "MONTH", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPLX", "MPVI", "MPXL", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPwhd", "MPx", "MPxy", "MPxywhd", "MPy", "Mapsfrom", "Mapsto", "MetaFont", "MetaFun", "MetaPost", "Mu", "NJligature", "Nacute", "Ncaron", "Ncommaaccent", "Nearrow", "Neng", "Ngrave", "Njligature", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "Ntilde", "Nu", "Numbers", "Nwarrow", "OEligature", "Oacute", "Obreve", "Ocaron", "Ocircumflex", "Ocircumflexacute", "Ocircumflexdotbelow", "Ocircumflexgrave", "Ocircumflexhook", "Ocircumflextilde", "Odiaeresis", "Odiaeresismacron", "Odotaccent", "Odotaccentmacron", "Odotbelow", "Odoublegrave", "Ograve", "Ohook", "Ohorn", "Ohornacute", "Ohorndotbelow", "Ohorngrave", "Ohornhook", "Ohorntilde", "Ohungarumlaut", "Oinvertedbreve", "Omacron", "Omega", "Omicron", "Oogonek", "Oogonekmacron", "Ostroke", "Ostrokeacute", "Otilde", "Otildemacron", "P", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "Phi", "Phook", "Pi", "PiCTeX", "Plankconst", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PropertyLine", "Psi", "PtToCm", "Racute", "Rcaron", "Rcommaaccent", "Rdoublegrave", "Rdsh", "Re", "ReadFile", "Relbar", "Rho", "Rightarrow", "Rinvertedbreve", "Romannumerals", "Rrightarrow", "Rsh", "S", "Sacute", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Scaron", "Scedilla", "Schwa", "Scircumflex", "Scommaaccent", "Searrow", "Sigma", "Smallcapped", "Subset", "Supset", "Swarrow", "TABLE", "TEX", "TaBlE", "Tau", "Tcaron", "Tcedilla", "Tcommaaccent", "TeX", "TheNormalizedFontSize", "Theta", "Thook", "Thorn", "TransparencyHack", "Tstroke", "Uacute", "Ubreve", "Ucaron", "Ucircumflex", "Udiaeresis", "Udiaeresisacute", "Udiaeresiscaron", "Udiaeresisgrave", "Udiaeresismacron", "Udotbelow", "Udoublegrave", "Ugrave", "Uhook", "Uhorn", "Uhornacute", "Uhorndotbelow", "Uhorngrave", "Uhornhook", "Uhorntilde", "Uhungarumlaut", "Uinvertedbreve", "Umacron", "Uogonek", "Uparrow", "Updownarrow", "Upsilon", "Uring", "Utilde", "Uuparrow", "VDash", "Vdash", "VerboseNumber", "Vert", "Vhook", "Vvdash", "WEEKDAY", "WORD", "WORDS", "Wcircumflex", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "Xi", "Yacute", "Ycircumflex", "Ydiaeresis", "Ydotbelow", "Ygrave", "Yhook", "Ymacron", "Ytilde", "Zacute", "Zcaron", "Zdotaccent", "Zeta", "Zhook", "Zstroke", "aacute", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "abreve", "abreveacute", "abrevedotbelow", "abrevegrave", "abrevehook", "abrevetilde", "acaron", "acircumflex", "acircumflexacute", "acircumflexdotbelow", "acircumflexgrave", "acircumflexhook", "acircumflextilde", "activatespacehandler", "actualday", "actualmonth", "actualyear", "actuarial", "acute", "acwopencirclearrow", "adaptcollector", "adaptfontfeature", "adaptlayout", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "adiaeresis", "adiaeresismacron", "adotaccent", "adotaccentmacron", "adotbelow", "adoublegrave", "aeacute", "aeligature", "aemacron", "afghanicurrency", "aftersplitstring", "aftertestandsplitstring", "agrave", "ahook", "ainvertedbreve", "aleph", "alignbottom", "aligned", "alignedbox", "alignedline", "alignhere", "alignmentcharacter", "allinputpaths", "alpha", "alphabeticnumerals", "alwayscitation", "alwayscite", "amacron", "amalg", "ampersand", "anchor", "angle", "aogonek", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyfunction", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "approx", "approxEq", "approxeq", "approxnEq", "arabicakbar", "arabicalayhe", "arabicallah", "arabicallallahou", "arabicasterisk", "arabicbasmalah", "arabiccomma", "arabiccuberoot", "arabicdateseparator", "arabicdecimals", "arabicdisputedendofayah", "arabicendofayah", "arabicexnumerals", "arabicfootnotemarker", "arabicfourthroot", "arabichighain", "arabichighalayheassallam", "arabichigheqala", "arabichighesala", "arabichighfootnotemarker", "arabichighjeem", "arabichighlamalef", "arabichighmadda", "arabichighmeemlong", "arabichighmeemshort", "arabichighnisf", "arabichighnoon", "arabichighnoonkasra", "arabichighqaf", "arabichighqif", "arabichighradiallahouanhu", "arabichighrahmatullahalayhe", "arabichighrubc", "arabichighsad", "arabichighsajda", "arabichighsakta", "arabichighsallallahou", "arabichighseen", "arabichighsmallsafha", "arabichightah", "arabichightakhallus", "arabichighthalatha", "arabichighwaqf", "arabichighyeh", "arabichighzain", "arabicjallajalalouhou", "arabiclettermark", "arabiclowmeemlong", "arabiclownoonkasra", "arabiclowseen", "arabicmisra", "arabicmuhammad", "arabicnumber", "arabicnumberabove", "arabicnumerals", "arabicparenleft", "arabicparenright", "arabicpercent", "arabicperiod", "arabicpermille", "arabicpertenthousand", "arabicpoeticverse", "arabicqala", "arabicquestion", "arabicrasoul", "arabicray", "arabicrialsign", "arabicsafha", "arabicsajdah", "arabicsalla", "arabicsamvat", "arabicsanah", "arabicsemicolon", "arabicshighthreedots", "arabicslcm", "arabicstartofrubc", "arabictripledot", "arabicvowelwaw", "arabicvowelyeh", "arabicwasallam", "arg", "aring", "aringacute", "arrowvert", "asciimode", "asciistr", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "ast", "astype", "asymp", "at", "atilde", "atleftmargin", "atpage", "atrightmargin", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "autointegral", "automathematics", "autoorientation", "autopagestaterealpage", "autopagestaterealpageorder", "autorule", "autosetups", "availablehsize", "averagecharwidth", "backepsilon", "background", "backgroundimage", "backgroundimagefill", "backgroundline", "backprime", "backsim", "backslash", "bar", "barleftarrow", "barleftarrowrightarrowbar", "barovernorthwestarrow", "barwedge", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbordermatrix", "bbox", "because", "beforesplitstring", "beforetestandsplitstring", "beta", "beth", "between", "bhook", "big", "bigbodyfont", "bigcap", "bigcirc", "bigcircle", "bigcup", "bigdiamond", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigodot", "bigoplus", "bigotimes", "bigr", "bigskip", "bigsqcap", "bigsqcup", "bigsquare", "bigstar", "bigtimes", "bigtriangledown", "bigtriangleup", "bigudot", "biguplus", "bigvee", "bigwedge", "binom", "bitmapimage", "blacklozenge", "blackrule", "blackrules", "blacksquare", "blacktriangle", "blacktriangledown", "blacktriangleleft", "blacktriangleright", "blank", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "blocksynctexfile", "blockuservariable", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bordermatrix", "bot", "bottombox", "bottomleftbox", "bottomrightbox", "bowtie", "boxcursor", "boxdot", "boxmarker", "boxminus", "boxofsize", "boxplus", "boxreference", "boxtimes", "bpos", "breakablethinspace", "breakhere", "breve", "bstroke", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhiddencitation", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "bullet", "button", "cacute", "calligraphic", "camel", "cap", "capital", "carriagereturn", "catcodetablename", "cbox", "ccaron", "ccedilla", "ccircumflex", "ccurl", "cdot", "cdotaccent", "cdotp", "cdots", "centeraligned", "centerbox", "centerdot", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "character", "characters", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedblank", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checkmark", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chi", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "chook", "circ", "circeq", "circlearrowleft", "circlearrowright", "circledR", "circledS", "circledast", "circledcirc", "circleddash", "circledequals", "circleonrightarrow", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clippedoverlayimage", "clonefield", "clubsuit", "collect", "collectedtext", "collectexpanded", "colon", "coloncolonequals", "colonequals", "color", "colorbar", "colorcomponents", "colored", "coloronly", "colorvalue", "column", "columnbreak", "columnsetspanwidth", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparecolorgroup", "comparedimension", "comparedimensioneps", "comparepalet", "complement", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completepagenumber", "completeregister", "complexes", "complexorsimple", "complexorsimpleempty", "component", "composedcollector", "composedlayer", "compounddiscretionary", "compresult", "cong", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertnumber", "convertvalue", "convertvboxtohbox", "coprod", "copyboxfromcache", "copybtxlabeltext", "copyfield", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copyright", "copysetups", "copysuffixtext", "copytaglabeltext", "copyunittext", "correctwhitespace", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "crlf", "crlfplaceholder", "cstroke", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "cup", "curlyeqprec", "curlyeqsucc", "curlyvee", "curlywedge", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentdate", "currentenvironment", "currentfeaturetest", "currentheadnumber", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "curvearrowleft", "curvearrowright", "cwopencirclearrow", "cyrillicA", "cyrillicAE", "cyrillicAbreve", "cyrillicAdiaeresis", "cyrillicB", "cyrillicBIGYUS", "cyrillicBIGYUSiotified", "cyrillicC", "cyrillicCH", "cyrillicCHEDC", "cyrillicCHEDCabkhasian", "cyrillicCHEabkhasian", "cyrillicCHEdiaeresis", "cyrillicCHEkhakassian", "cyrillicCHEvertstroke", "cyrillicD", "cyrillicDASIAPNEUMATA", "cyrillicDJE", "cyrillicDZE", "cyrillicDZEabkhasian", "cyrillicDZHE", "cyrillicE", "cyrillicELtail", "cyrillicEMtail", "cyrillicENDC", "cyrillicENGHE", "cyrillicENhook", "cyrillicENtail", "cyrillicEREV", "cyrillicERY", "cyrillicERtick", "cyrillicEbreve", "cyrillicEdiaeresis", "cyrillicEgrave", "cyrillicEiotified", "cyrillicF", "cyrillicFITA", "cyrillicG", "cyrillicGHEmidhook", "cyrillicGHEstroke", "cyrillicGHEupturn", "cyrillicGJE", "cyrillicH", "cyrillicHA", "cyrillicHADC", "cyrillicHRDSN", "cyrillicI", "cyrillicIE", "cyrillicII", "cyrillicISHRT", "cyrillicISHRTtail", "cyrillicIZHITSA", "cyrillicIZHITSAdoublegrave", "cyrillicIdiaeresis", "cyrillicIgrave", "cyrillicImacron", "cyrillicJE", "cyrillicK", "cyrillicKADC", "cyrillicKAbashkir", "cyrillicKAhook", "cyrillicKAstroke", "cyrillicKAvertstroke", "cyrillicKJE", "cyrillicKOPPA", "cyrillicKSI", "cyrillicL", "cyrillicLITTLEYUS", "cyrillicLITTLEYUSiotified", "cyrillicLJE", "cyrillicM", "cyrillicN", "cyrillicNJE", "cyrillicO", "cyrillicOMEGA", "cyrillicOMEGAround", "cyrillicOMEGAtitlo", "cyrillicOT", "cyrillicObarred", "cyrillicObarreddiaeresis", "cyrillicOdiaeresis", "cyrillicP", "cyrillicPALATALIZATION", "cyrillicPALOCHKA", "cyrillicPEmidhook", "cyrillicPSI", "cyrillicPSILIPNEUMATA", "cyrillicR", "cyrillicS", "cyrillicSCHWA", "cyrillicSCHWAdiaeresis", "cyrillicSDSC", "cyrillicSEMISOFT", "cyrillicSFTSN", "cyrillicSH", "cyrillicSHCH", "cyrillicSHHA", "cyrillicT", "cyrillicTEDC", "cyrillicTETSE", "cyrillicTITLO", "cyrillicTSHE", "cyrillicU", "cyrillicUK", "cyrillicUSHRT", "cyrillicUdiaeresis", "cyrillicUdoubleacute", "cyrillicUmacron", "cyrillicV", "cyrillicYA", "cyrillicYAT", "cyrillicYERUdiaeresis", "cyrillicYI", "cyrillicYO", "cyrillicYU", "cyrillicYstr", "cyrillicYstrstroke", "cyrillicZ", "cyrillicZDSC", "cyrillicZEdiaeresis", "cyrillicZH", "cyrillicZHEbreve", "cyrillicZHEdescender", "cyrillicZHEdiaeresis", "cyrillica", "cyrillicabreve", "cyrillicadiaeresis", "cyrillicae", "cyrillicb", "cyrillicbigyus", "cyrillicbigyusiotified", "cyrillicc", "cyrillicch", "cyrilliccheabkhasian", "cyrillicchedc", "cyrillicchedcabkhasian", "cyrillicchediaeresis", "cyrillicchekhakassian", "cyrillicchevertstroke", "cyrillicd", "cyrillicdje", "cyrillicdze", "cyrillicdzeabkhasian", "cyrillicdzhe", "cyrillice", "cyrillicebreve", "cyrillicediaeresis", "cyrillicegrave", "cyrilliceiotified", "cyrilliceltail", "cyrillicemtail", "cyrillicendc", "cyrillicenghe", "cyrillicenhook", "cyrillicentail", "cyrillicerev", "cyrillicertick", "cyrillicery", "cyrillicf", "cyrillicfita", "cyrillicg", "cyrillicghemidhook", "cyrillicghestroke", "cyrillicgheupturn", "cyrillicgje", "cyrillich", "cyrillicha", "cyrillichadc", "cyrillichrdsn", "cyrillici", "cyrillicidiaeresis", "cyrillicie", "cyrillicigrave", "cyrillicii", "cyrillicimacron", "cyrillicishrt", "cyrillicishrttail", "cyrillicizhitsa", "cyrillicizhitsadoublegrave", "cyrillicje", "cyrillick", "cyrillickabashkir", "cyrillickadc", "cyrillickahook", "cyrillickastroke", "cyrillickavertstroke", "cyrillickje", "cyrillickoppa", "cyrillicksi", "cyrillicl", "cyrilliclittleyus", "cyrilliclittleyusiotified", "cyrilliclje", "cyrillicm", "cyrillicn", "cyrillicnje", "cyrillico", "cyrillicobarred", "cyrillicobarreddiaeresis", "cyrillicodiaeresis", "cyrillicomega", "cyrillicomegaround", "cyrillicomegatitlo", "cyrillicot", "cyrillicp", "cyrillicpemidhook", "cyrillicpsi", "cyrillicr", "cyrillics", "cyrillicschwa", "cyrillicschwadiaeresis", "cyrillicsdsc", "cyrillicsemisoft", "cyrillicsftsn", "cyrillicsh", "cyrillicshch", "cyrillicshha", "cyrillict", "cyrillictedc", "cyrillictetse", "cyrillictshe", "cyrillicu", "cyrillicudiaeresis", "cyrillicudoubleacute", "cyrillicuk", "cyrillicumacron", "cyrillicushrt", "cyrillicv", "cyrillicya", "cyrillicyat", "cyrillicyerudiaeresis", "cyrillicyi", "cyrillicyo", "cyrillicystr", "cyrillicystrstroke", "cyrillicyu", "cyrillicz", "cyrilliczdsc", "cyrilliczediaeresis", "cyrilliczh", "cyrilliczhebreve", "cyrilliczhedescender", "cyrilliczhediaeresis", "d", "dag", "dagger", "daleth", "dasharrow", "dashedleftarrow", "dashedrightarrow", "dashv", "datasetvariable", "date", "daylong", "dayoftheweek", "dayshort", "dayspermonth", "dbinom", "dcaron", "dcurl", "dd", "ddag", "ddagger", "dddot", "ddot", "ddots", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "define", "defineMPinstance", "defineTABLEsetup", "defineaccent", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "defineblock", "definebodyfont", "definebodyfontenvironment", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebuffer", "definebutton", "definecapitals", "definecharacter", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolor", "definecolorgroup", "definecolumnbreak", "definecolumnset", "definecolumnsetarea", "definecolumnsetspan", "definecombination", "definecombinedlist", "definecommand", "definecomment", "definecomplexorsimple", "definecomplexorsimpleempty", "defineconversion", "defineconversionset", "definecounter", "definedataset", "definedate", "definedelimitedtext", "definedeq", "definedescription", "definedfont", "definedocument", "defineeffect", "defineenumeration", "defineexpandable", "defineexpansion", "defineexternalfigure", "definefacingfloat", "definefallbackfamily", "definefield", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefieldstack", "definefiguresymbol", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefloat", "definefont", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "definefontstyle", "definefontsynonym", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframed", "defineframedcontent", "defineframedtable", "defineframedtext", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "definehbox", "definehead", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehyphenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinteractionmenu", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabel", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelist", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemakeup", "definemarginblock", "definemargindata", "definemarker", "definemarking", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdouble", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathover", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunder", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemulticolumns", "definemultitonecolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineorientation", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "defineoverlay", "definepage", "definepagebreak", "definepagechecker", "definepagecolumns", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "definepalet", "definepapersize", "defineparagraph", "defineparagraphs", "defineparallel", "defineparbuilder", "defineperiodkerning", "defineplaceholder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "defineprofile", "defineprogram", "definepushbutton", "definepushsymbol", "definereference", "definereferenceformat", "defineregister", "definerenderingwindow", "defineresetset", "defineruby", "definescale", "definescript", "definesection", "definesectionblock", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definesorting", "definespotcolor", "definestartstop", "definestyle", "definestyleinstance", "definesubfield", "definesubformula", "definesymbol", "definesynonym", "definesynonyms", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabletemplate", "definetabulate", "definetext", "definetextbackground", "definetextflow", "definetextnote", "definetokenlist", "definetooltip", "definetransparency", "definetwopasslist", "definetype", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "definetyping", "defineunit", "defineuserdata", "defineuserdataalternative", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "defrostparagraphproperties", "delimited", "delimitedtext", "delta", "depthofstring", "depthonlybox", "depthspanningtext", "depthstrut", "determineheadnumber", "determinelistcharacteristics", "determinenoflines", "determineregistercharacteristics", "devanagarinumerals", "dfrac", "dhook", "diameter", "diamond", "diamondsuit", "differentialD", "differentiald", "digamma", "digits", "dimensiontocount", "directboxfromcache", "directcolor", "directcolored", "directconvertedcounter", "directcopyboxfromcache", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directparwrapper", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "disposeluatable", "distributedhsize", "div", "dividedsize", "divideontimes", "divides", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dofastloopcs", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "dohyphens", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifassignmentelsecs", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcheckedpagestate", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdocumentvariable", "doifdocumentvariableelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseassignmentcs", "doifelseblack", "doifelsebox", "doifelseboxincache", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedocumentvariable", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontfeature", "doifelsefontpresent", "doifelsefontsynonym", "doifelseframed", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseindented", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarkedcontent", "doifelsemarkedpage", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseorientation", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelseparwrapper", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpage", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetopofpage", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontfeatureelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotdocumentvariable", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoutervmode", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpageelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftopofpageelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifunknownfontfeature", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dosomebreak", "dostepwiserecurse", "dosubtractfeature", "dot", "doteq", "doteqdot", "dotfill", "dotfskip", "dotlessI", "dotlessJ", "dotlessi", "dotlessj", "dotlessjstroke", "dotminus", "dotoks", "dotplus", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "dots", "dottedcircle", "dottedrightarrow", "doublebar", "doublebond", "doublebrace", "doublebracket", "doublecap", "doublecup", "doubleparent", "doubleprime", "doubleverticalbar", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "downarrow", "downdasharrow", "downdownarrows", "downharpoonleft", "downharpoonright", "downuparrows", "downwhitearrow", "downzigzagarrow", "dpofstring", "dstroke", "dtail", "dummydigit", "dummyparameter", "dzcaronligature", "dzligature", "eTeX", "eacute", "ebreve", "ecaron", "ecedilla", "ecircumflex", "ecircumflexacute", "ecircumflexdotbelow", "ecircumflexgrave", "ecircumflexhook", "ecircumflextilde", "edefconvertedargument", "ediaeresis", "edotaccent", "edotbelow", "edoublegrave", "ee", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "egrave", "ehook", "einvertedbreve", "elapsedseconds", "elapsedsteptime", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "ell", "em", "emacron", "emdash", "emphasisboldface", "emphasistypeface", "emptylines", "emptyset", "emquad", "emspace", "enableasciimode", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endash", "endnote", "enquad", "enskip", "enspace", "env", "environment", "envvar", "eogonek", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "epsilon", "eq", "eqcirc", "eqeq", "eqeqeq", "eqgtr", "eqless", "eqsim", "eqslantgtr", "eqslantless", "equaldigits", "equalscolon", "equiv", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "eta", "eth", "ethiopic", "etilde", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "exclamdown", "executeifdefined", "exists", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandeddoif", "expandeddoifelse", "expandeddoifnot", "expandfontsynonym", "expdoif", "expdoifcommonelse", "expdoifelse", "expdoifelsecommon", "expdoifelseinset", "expdoifinsetelse", "expdoifnot", "exponentiale", "externalfigure", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "fakebox", "fallingdotseq", "fastdecrement", "fastincrement", "fastlocalframed", "fastloopfinal", "fastloopindex", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "ffiligature", "ffligature", "fflligature", "fhook", "field", "fieldbody", "fieldstack", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figurespace", "figuresymbol", "figurewidth", "filename", "filigature", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "fillinline", "fillinrules", "fillintext", "fillupto", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstinlist", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfield", "fitfieldframed", "fittopbaselinegrid", "fiveeighths", "fivesixths", "fixedspace", "fixedspaces", "flag", "flat", "flligature", "floatuserdataparameter", "flushbox", "flushboxregister", "flushcollector", "flushedrightlastline", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnote", "footnotetext", "forall", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparagraphfreezing", "forgetparameters", "forgetparskip", "forgetparwrapper", "forgetragged", "formula", "formulanumber", "foundbox", "fourfifths", "fourperemspace", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "framed", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "freezeparagraphproperties", "frenchspacing", "from", "fromlinenote", "frown", "frozenhbox", "frule", "gacute", "gamma", "gbreve", "gcaron", "gcircumflex", "gcommaaccent", "gdefconvertedargument", "gdefconvertedcommand", "gdotaccent", "ge", "geq", "geqq", "geqslant", "getMPdrawing", "getMPlayer", "getboxfromcache", "getboxllx", "getboxlly", "getbuffer", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdatavalue", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromluatable", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getinlineuserdata", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmarking", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getparwrapper", "getprivatechar", "getprivateslot", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "gets", "getsubstring", "gettokenlist", "gettwopassdata", "gettwopassdatalist", "getuserdata", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "gg", "ggg", "gggtr", "gimel", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gnapprox", "gneqq", "gnsim", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "godown", "goto", "gotobox", "gotopage", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "graycolor", "grayvalue", "greedysplitstring", "greekAlpha", "greekAlphadasia", "greekAlphadasiaperispomeni", "greekAlphadasiatonos", "greekAlphadasiavaria", "greekAlphaiotasub", "greekAlphaiotasubdasia", "greekAlphaiotasubdasiaperispomeni", "greekAlphaiotasubdasiatonos", "greekAlphaiotasubdasiavaria", "greekAlphaiotasubpsili", "greekAlphaiotasubpsiliperispomeni", "greekAlphaiotasubpsilitonos", "greekAlphaiotasubpsilivaria", "greekAlphamacron", "greekAlphapsili", "greekAlphapsiliperispomeni", "greekAlphapsilitonos", "greekAlphapsilivaria", "greekAlphatonos", "greekAlphavaria", "greekAlphavrachy", "greekBeta", "greekChi", "greekCoronis", "greekDelta", "greekEpsilon", "greekEpsilondasia", "greekEpsilondasiatonos", "greekEpsilondasiavaria", "greekEpsilonpsili", "greekEpsilonpsilitonos", "greekEpsilonpsilivaria", "greekEpsilontonos", "greekEpsilonvaria", "greekEta", "greekEtadasia", "greekEtadasiaperispomeni", "greekEtadasiatonos", "greekEtadasiavaria", "greekEtaiotasub", "greekEtaiotasubdasia", "greekEtaiotasubdasiaperispomeni", "greekEtaiotasubdasiatonos", "greekEtaiotasubdasiavaria", "greekEtaiotasubpsili", "greekEtaiotasubpsiliperispomeni", "greekEtaiotasubpsilitonos", "greekEtaiotasubpsilivaria", "greekEtapsili", "greekEtapsiliperispomeni", "greekEtapsilitonos", "greekEtapsilivaria", "greekEtatonos", "greekEtavaria", "greekGamma", "greekIota", "greekIotadasia", "greekIotadasiaperispomeni", "greekIotadasiatonos", "greekIotadasiavaria", "greekIotadialytika", "greekIotamacron", "greekIotapsili", "greekIotapsiliperispomeni", "greekIotapsilitonos", "greekIotapsilivaria", "greekIotatonos", "greekIotavaria", "greekIotavrachy", "greekKappa", "greekLambda", "greekMu", "greekNu", "greekOmega", "greekOmegadasia", "greekOmegadasiaperispomeni", "greekOmegadasiatonos", "greekOmegadasiavaria", "greekOmegaiotasub", "greekOmegaiotasubdasia", "greekOmegaiotasubdasiaperispomeni", "greekOmegaiotasubdasiatonos", "greekOmegaiotasubdasiavaria", "greekOmegaiotasubpsili", "greekOmegaiotasubpsiliperispomeni", "greekOmegaiotasubpsilitonos", "greekOmegaiotasubpsilivaria", "greekOmegapsili", "greekOmegapsiliperispomeni", "greekOmegapsilitonos", "greekOmegapsilivaria", "greekOmegatonos", "greekOmegavaria", "greekOmicron", "greekOmicrondasia", "greekOmicrondasiatonos", "greekOmicrondasiavaria", "greekOmicronpsili", "greekOmicronpsilitonos", "greekOmicronpsilivaria", "greekOmicrontonos", "greekOmicronvaria", "greekPhi", "greekPi", "greekPsi", "greekRho", "greekRhodasia", "greekSigma", "greekSigmalunate", "greekTau", "greekTheta", "greekUpsilon", "greekUpsilondasia", "greekUpsilondasiaperispomeni", "greekUpsilondasiatonos", "greekUpsilondasiavaria", "greekUpsilondialytika", "greekUpsilonmacron", "greekUpsilontonos", "greekUpsilonvaria", "greekUpsilonvrachy", "greekXi", "greekZeta", "greekalpha", "greekalphadasia", "greekalphadasiaperispomeni", "greekalphadasiatonos", "greekalphadasiavaria", "greekalphaiotasub", "greekalphaiotasubdasia", "greekalphaiotasubdasiaperispomeni", "greekalphaiotasubdasiatonos", "greekalphaiotasubdasiavaria", "greekalphaiotasubperispomeni", "greekalphaiotasubpsili", "greekalphaiotasubpsiliperispomeni", "greekalphaiotasubpsilitonos", "greekalphaiotasubpsilivaria", "greekalphaiotasubtonos", "greekalphaiotasubvaria", "greekalphamacron", "greekalphaoxia", "greekalphaperispomeni", "greekalphapsili", "greekalphapsiliperispomeni", "greekalphapsilitonos", "greekalphapsilivaria", "greekalphatonos", "greekalphavaria", "greekalphavrachy", "greekbeta", "greekbetaalt", "greekchi", "greekdasia", "greekdasiaperispomeni", "greekdasiavaria", "greekdelta", "greekdialytikaperispomeni", "greekdialytikatonos", "greekdialytikavaria", "greekdigamma", "greekepsilon", "greekepsilonalt", "greekepsilondasia", "greekepsilondasiatonos", "greekepsilondasiavaria", "greekepsilonoxia", "greekepsilonpsili", "greekepsilonpsilitonos", "greekepsilonpsilivaria", "greekepsilontonos", "greekepsilonvaria", "greeketa", "greeketadasia", "greeketadasiaperispomeni", "greeketadasiatonos", "greeketadasiavaria", "greeketaiotasub", "greeketaiotasubdasia", "greeketaiotasubdasiaperispomeni", "greeketaiotasubdasiatonos", "greeketaiotasubdasiavaria", "greeketaiotasubperispomeni", "greeketaiotasubpsili", "greeketaiotasubpsiliperispomeni", "greeketaiotasubpsilitonos", "greeketaiotasubpsilivaria", "greeketaiotasubtonos", "greeketaiotasubvaria", "greeketaoxia", "greeketaperispomeni", "greeketapsili", "greeketapsiliperispomeni", "greeketapsilitonos", "greeketapsilivaria", "greeketatonos", "greeketavaria", "greekfinalsigma", "greekgamma", "greekiota", "greekiotadasia", "greekiotadasiaperispomeni", "greekiotadasiatonos", "greekiotadasiavaria", "greekiotadialytika", "greekiotadialytikaperispomeni", "greekiotadialytikatonos", "greekiotadialytikavaria", "greekiotamacron", "greekiotaoxia", "greekiotaperispomeni", "greekiotapsili", "greekiotapsiliperispomeni", "greekiotapsilitonos", "greekiotapsilivaria", "greekiotatonos", "greekiotavaria", "greekiotavrachy", "greekkappa", "greekkoppa", "greeklambda", "greekmu", "greeknu", "greeknumerals", "greeknumkoppa", "greekomega", "greekomegadasia", "greekomegadasiaperispomeni", "greekomegadasiatonos", "greekomegadasiavaria", "greekomegaiotasub", "greekomegaiotasubdasia", "greekomegaiotasubdasiaperispomeni", "greekomegaiotasubdasiatonos", "greekomegaiotasubdasiavaria", "greekomegaiotasubperispomeni", "greekomegaiotasubpsili", "greekomegaiotasubpsiliperispomeni", "greekomegaiotasubpsilitonos", "greekomegaiotasubpsilivaria", "greekomegaiotasubtonos", "greekomegaiotasubvaria", "greekomegaoxia", "greekomegaperispomeni", "greekomegapsili", "greekomegapsiliperispomeni", "greekomegapsilitonos", "greekomegapsilivaria", "greekomegatonos", "greekomegavaria", "greekomicron", "greekomicrondasia", "greekomicrondasiatonos", "greekomicrondasiavaria", "greekomicronoxia", "greekomicronpsili", "greekomicronpsilitonos", "greekomicronpsilivaria", "greekomicrontonos", "greekomicronvaria", "greekoxia", "greekperispomeni", "greekphi", "greekphialt", "greekpi", "greekpialt", "greekprosgegrammeni", "greekpsi", "greekpsili", "greekpsiliperispomeni", "greekpsilivaria", "greekrho", "greekrhoalt", "greekrhodasia", "greekrhopsili", "greeksampi", "greeksigma", "greeksigmalunate", "greekstigma", "greektau", "greektheta", "greekthetaalt", "greektonos", "greekupsilon", "greekupsilondasia", "greekupsilondasiaperispomeni", "greekupsilondasiatonos", "greekupsilondasiavaria", "greekupsilondiaeresis", "greekupsilondialytikaperispomeni", "greekupsilondialytikatonos", "greekupsilondialytikavaria", "greekupsilonmacron", "greekupsilonoxia", "greekupsilonperispomeni", "greekupsilonpsili", "greekupsilonpsiliperispomeni", "greekupsilonpsilitonos", "greekupsilonpsilivaria", "greekupsilontonos", "greekupsilonvaria", "greekupsilonvrachy", "greekvaria", "greekxi", "greekzeta", "grid", "groupedcommand", "gsetboxllx", "gsetboxlly", "gstroke", "gt", "gtrapprox", "gtrdot", "gtreqless", "gtreqqless", "gtrless", "gtrsim", "guilsingleleft", "guilsingleright", "gujaratinumerals", "gurmurkhinumerals", "hairline", "hairspace", "halflinestrut", "halfstrut", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hbar", "hboxofvbox", "hboxreference", "hcaron", "hcircumflex", "hdofstring", "headhbox", "headlanguage", "headnumber", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtext", "headtextcontent", "headtextdistance", "headtexts", "headtextwidth", "headvbox", "headwidth", "heartsuit", "hebrewAlef", "hebrewAyin", "hebrewBet", "hebrewDalet", "hebrewGimel", "hebrewHe", "hebrewHet", "hebrewKaf", "hebrewKaffinal", "hebrewLamed", "hebrewMem", "hebrewMemfinal", "hebrewNun", "hebrewNunfinal", "hebrewPe", "hebrewPefinal", "hebrewQof", "hebrewResh", "hebrewSamekh", "hebrewShin", "hebrewTav", "hebrewTet", "hebrewTsadi", "hebrewTsadifinal", "hebrewVav", "hebrewYod", "hebrewZayin", "hebrewnumerals", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hexnumber", "hexstringtonumber", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "hideblocks", "high", "highlight", "highordinalstr", "hilo", "himilo", "hl", "hookleftarrow", "hookrightarrow", "horizontalgrowingbar", "horizontalpositionbar", "hpackbox", "hpackedbox", "hphantom", "hpos", "hsizefraction", "hslash", "hsmash", "hsmashbox", "hsmashed", "hspace", "hstroke", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "iacute", "ibox", "ibreve", "icaron", "icircumflex", "ideographichalffillspace", "ideographicspace", "idiaeresis", "idotaccent", "idotbelow", "idoublegrave", "idxfromluatable", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignoretagsinexport", "ignorevalue", "igrave", "ihook", "ii", "iiiint", "iiiintop", "iiint", "iiintop", "iint", "iintop", "iinvertedbreve", "ijligature", "imacron", "imaginaryi", "imaginaryj", "imath", "immediatesavetwopassdata", "impliedby", "implies", "imply", "in", "includemenu", "includesvgbuffer", "includesvgfile", "includeversioninfo", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "infofont", "infofontbold", "inframed", "infty", "infull", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "inleft", "inleftedge", "inleftmargin", "inline", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlineprettyprintbuffer", "inlinerange", "inmargin", "inmframed", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inright", "inrightedge", "inrightmargin", "insertpages", "inspectluatable", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installctxfunction", "installctxscanner", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installglobalmacrostack", "installlanguage", "installleftframerenderer", "installmacrostack", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installprotectedctxfunction", "installprotectedctxscanner", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "int", "intclockwise", "integerrounding", "integers", "interactionbar", "interactionbuttons", "interactionmenu", "intercal", "intertext", "interwordspaceafter", "interwordspacebefore", "interwordspaces", "interwordspacesafter", "interwordspacesbefore", "intop", "invisiblecomma", "invisibleplus", "invisibletimes", "invokepagehandler", "iogonek", "iota", "italic", "italicbold", "italiccorrection", "italicface", "item", "items", "itemtag", "itilde", "jcaron", "jcircumflex", "ji", "jmath", "jobfilename", "jobfilesuffix", "kap", "kappa", "kcaron", "kcommaaccent", "keepblocks", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "khook", "kkra", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "lVert", "labellanguage", "labeltext", "labeltexts", "lacute", "lambda", "lambdabar", "land", "langle", "language", "languageCharacters", "languagecharacters", "languagecharwidth", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastparwrapper", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbar", "lbox", "lbrace", "lbracket", "lcaron", "lceil", "lchexnumber", "lchexnumbers", "lcommaaccent", "lcurl", "ldotmiddle", "ldotp", "ldots", "le", "leadsto", "left", "leftaligned", "leftarrow", "leftarrowtail", "leftarrowtriangle", "leftbottombox", "leftbox", "leftdasharrow", "leftguillemot", "leftharpoondown", "leftharpoonup", "lefthbox", "leftheadtext", "leftlabeltext", "leftleftarrows", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftrightarrow", "leftrightarrows", "leftrightarrowtriangle", "leftrightharpoons", "leftrightsquigarrow", "leftskipadaption", "leftsquigarrow", "leftsubguillemot", "leftthreetimes", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "leftwavearrow", "leftwhitearrow", "leq", "leqq", "leqslant", "lessapprox", "lessdot", "lesseqgtr", "lesseqqgtr", "lessgtr", "lesssim", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterleftbracket", "letterleftparenthesis", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "letterrightbracket", "letterrightparenthesis", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lfloor", "lgroup", "lhbox", "lhooknwarrow", "lhooksearrow", "limitatefirstline", "limitatelines", "limitatetext", "line", "linebox", "linefeed", "linefillerhbox", "linefillervbox", "linefillervtop", "linenote", "linespanningtext", "linethickness", "linterval", "listcitation", "listcite", "listlength", "listnamespaces", "literalmode", "ljligature", "ll", "llangle", "llap", "llbracket", "llcorner", "lll", "llless", "llointerval", "lmoustache", "lnapprox", "lneq", "lneqq", "lnot", "lnsim", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lohi", "lointerval", "lomihi", "longleftarrow", "longleftrightarrow", "longmapsfrom", "longmapsto", "longrightarrow", "longrightsquigarrow", "looparrowleft", "looparrowright", "lor", "low", "lowerbox", "lowercased", "lowercasestring", "lowercasing", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lozenge", "lparent", "lrcorner", "lrointerval", "lrtbbox", "lstroke", "lt", "ltimes", "ltop", "ltrhbox", "ltrvbox", "ltrvtop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luaexpr", "luafunction", "luajitTeX", "luamajorversion", "luametaTeX", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "lvert", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "mainlanguage", "makecharacteractive", "makerawcommalist", "makestrutofbox", "maltese", "mapfontsize", "mapsdown", "mapsfrom", "mapsto", "mapsup", "margindata", "margintext", "markcontent", "markedpages", "marking", "markinjector", "markpage", "markreferencepage", "mat", "math", "mathampersand", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathdefault", "mathdollar", "mathdouble", "mathematics", "mathfraktur", "mathfunction", "mathhash", "mathhyphen", "mathit", "mathitalic", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathover", "mathpercent", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathunder", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "measuredangle", "measuredeq", "medskip", "medspace", "menubutton", "mequal", "message", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mho", "mhookleftarrow", "mhookrightarrow", "mid", "midaligned", "middle", "middlealigned", "middlebox", "midhbox", "midsubsentence", "minimalhbox", "minus", "minuscolon", "mirror", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "models", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "month", "monthlong", "monthshort", "mp", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "mu", "multimap", "nHdownarrow", "nHuparrow", "nLeftarrow", "nLeftrightarrow", "nRightarrow", "nVDash", "nVdash", "nVleftarrow", "nVleftrightarrow", "nVrightarrow", "nabla", "nacute", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "napostrophe", "napprox", "napproxEq", "narrownobreakspace", "nasymp", "natural", "naturalhbox", "naturalhpack", "naturalnumbers", "naturaltpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "ncaron", "ncommaaccent", "ncong", "ncurl", "ndivides", "ne", "nearrow", "neg", "negatecolorbox", "negated", "negativesign", "negemspace", "negenspace", "negthinspace", "neng", "neq", "nequiv", "neswarrow", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newluatable", "newmode", "newsignal", "newsystemmode", "nexists", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "ngeq", "ngrave", "ngtr", "ngtrless", "ngtrsim", "ni", "nihongo", "nin", "njligature", "nleftarrow", "nleftrightarrow", "nleq", "nless", "nlessgtr", "nlesssim", "nmid", "nni", "nobar", "nobreakspace", "nocap", "nocharacteralign", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflinesinbox", "noflocalfloats", "noheaderandfooterlines", "noheightstrut", "nohyphens", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "nonvalidassignment", "normal", "normalboldface", "normalframedwithsettings", "normalitalicface", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normalslantedface", "normaltypeface", "nospace", "not", "note", "notesymbol", "notin", "notopandbottomlines", "notragged", "nowns", "nparallel", "nprec", "npreccurlyeq", "nrightarrow", "nsim", "nsimeq", "nsqsubseteq", "nsqsupseteq", "nsubset", "nsubseteq", "nsucc", "nsucccurlyeq", "nsupset", "nsupseteq", "ntilde", "ntimes", "ntriangleleft", "ntrianglelefteq", "ntriangleright", "ntrianglerighteq", "nu", "numberofpoints", "numbers", "nvDash", "nvdash", "nvleftarrow", "nvleftrightarrow", "nvrightarrow", "nwarrow", "nwsearrow", "oacute", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obreve", "ocaron", "ocircumflex", "ocircumflexacute", "ocircumflexdotbelow", "ocircumflexgrave", "ocircumflexhook", "ocircumflextilde", "octnumber", "octstringtonumber", "odiaeresis", "odiaeresismacron", "odot", "odotaccent", "odotaccentmacron", "odotbelow", "odoublegrave", "oeligature", "offset", "offsetbox", "ograve", "ohm", "ohook", "ohorn", "ohornacute", "ohorndotbelow", "ohorngrave", "ohornhook", "ohorntilde", "ohungarumlaut", "oiiint", "oiint", "oint", "ointclockwise", "ointctrclockwise", "oinvertedbreve", "omacron", "omega", "omicron", "ominus", "onedigitrounding", "oneeighth", "onefifth", "onehalf", "onequarter", "onesixth", "onesuperior", "onethird", "oogonek", "oogonekmacron", "operatorlanguage", "operatortext", "oplus", "ordfeminine", "ordinaldaynumber", "ordinalstr", "ordmasculine", "ornamenttext", "oslash", "ostroke", "ostrokeacute", "otilde", "otildemacron", "otimes", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlayimage", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "owns", "page", "pagearea", "pagebreak", "pagefigure", "pageinjection", "pagenumber", "pagereference", "pagestaterealpage", "pagestaterealpageorder", "paletsize", "paragraphmark", "parallel", "part", "partial", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periodcentered", "periods", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "perp", "persiandecimals", "persiandecimalseparator", "persiannumerals", "persianthousandsseparator", "perthousand", "phantom", "phantombox", "phi", "phook", "pi", "pickupgroupedcommand", "pitchfork", "placeattachments", "placebookmarks", "placebtxrendering", "placechemical", "placecitation", "placecombinedlist", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloat", "placefloatcaption", "placefloatwithsetups", "placefootnotes", "placeformula", "placeframed", "placegraphic", "placeheadnumber", "placeheadtext", "placehelp", "placeholder", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelegend", "placelist", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalfootnotes", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placeongrid", "placeontopofeachother", "placepagenumber", "placepairedbox", "placeparallel", "placerawheaddata", "placerawheadnumber", "placerawheadtext", "placerawlist", "placeregister", "placerenderingwindow", "placesidebyside", "placesubformula", "placetable", "pm", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "positivesign", "postponenotes", "prec", "precapprox", "preccurlyeq", "preceq", "preceqq", "precnapprox", "precneq", "precneqq", "precnsim", "precsim", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "prerollblank", "presetbtxlabeltext", "presetdocument", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presetsuffixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prettyprintbuffer", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "prime", "primes", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processblocks", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "prod", "product", "profiledbox", "profilegivenbox", "program", "project", "propto", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psi", "punctuationspace", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "putboxincache", "putnextboxincache", "qquad", "quad", "quadrupleprime", "quads", "quarterstrut", "questiondown", "questionedeq", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "quotation", "quote", "quotedbl", "quotedblbase", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "quotesingle", "quotesinglebase", "rVert", "racute", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "randomizetext", "randomnumber", "rangle", "rationals", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "rbrace", "rbracket", "rcaron", "rceil", "rcommaaccent", "rdoublegrave", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "reals", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "reference", "referencecolumnnumber", "referencepagedetail", "referencepagestate", "referenceprefix", "referencerealpage", "referencesymbol", "referring", "registerattachment", "registerctxluafile", "registered", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registerparwrapper", "registerparwrapperreverse", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "relbar", "remainingcharacters", "remark", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "repeathead", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "resetboxesincache", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetctxscanner", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmarking", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetperiodkerning", "resetprofile", "resetrecurselevel", "resetreference", "resetreplacements", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettokenlist", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "restriction", "retestfeature", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "reverseddoubleprime", "reversedprime", "reversedtripleprime", "reversehbox", "reversehpack", "reversetpack", "reversevbox", "reversevboxcontent", "reversevpack", "reversevtop", "revivefeature", "rfence", "rfloor", "rgroup", "rhbox", "rho", "rhooknearrow", "rhookswarrow", "right", "rightaligned", "rightangle", "rightarrow", "rightarrowbar", "rightarrowtail", "rightarrowtriangle", "rightbottombox", "rightbox", "rightdasharrow", "rightguillemot", "rightharpoondown", "rightharpoonup", "righthbox", "rightheadtext", "rightlabeltext", "rightleftarrows", "rightleftharpoons", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightpageorder", "rightrightarrows", "rightskipadaption", "rightsquigarrow", "rightsubguillemot", "rightthreearrows", "rightthreetimes", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rightwavearrow", "rightwhitearrow", "ring", "rinterval", "rinvertedbreve", "risingdotseq", "rlap", "rlointerval", "rmoustache", "rneq", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rointerval", "rollbutton", "roman", "romanC", "romanD", "romanI", "romanII", "romanIII", "romanIV", "romanIX", "romanL", "romanM", "romanV", "romanVI", "romanVII", "romanVIII", "romanX", "romanXI", "romanXII", "romanc", "romand", "romani", "romanii", "romaniii", "romaniv", "romanix", "romanl", "romanm", "romannumerals", "romanv", "romanvi", "romanvii", "romanviii", "romanx", "romanxi", "romanxii", "rootradical", "rotate", "rparent", "rrangle", "rrbracket", "rrointerval", "rtimes", "rtlhbox", "rtlvbox", "rtlvtop", "rtop", "ruby", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "russianNumerals", "russiannumerals", "rvert", "sacute", "safechar", "samplefile", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scale", "scaron", "scedilla", "schwa", "schwahook", "scircumflex", "scommaaccent", "screen", "searrow", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "sectionmark", "seeindex", "select", "selectblocks", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setautopagestaterealpageno", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharacteraligndetail", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setctxluafunction", "setcurrentfontclass", "setdataset", "setdatavalue", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setexpansion", "setfirstline", "setfirstpasscharacteralign", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setfractions", "setglobalscript", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelement", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setlocalscript", "setluatable", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setminus", "setmode", "setnostrut", "setnote", "setnotetext", "setobject", "setoldstyle", "setpagereference", "setpagestate", "setpagestaterealpageno", "setparagraphfreezing", "setpenalties", "setpercentdimen", "setperiodkerning", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacements", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsecondpasscharacteralign", "setsectionblock", "setsimplecolumnshsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settestcrlf", "settextcontent", "settightobject", "settightreferencedobject", "settightstrut", "settightunreferencedobject", "settokenlist", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupalign", "setupalternativestyles", "setuparranging", "setupattachment", "setupattachments", "setupbackend", "setupbackground", "setupbackgrounds", "setupbar", "setupbars", "setupblackrules", "setupblank", "setupbleeding", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbookmark", "setupbottom", "setupbottomtexts", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbuffer", "setupbutton", "setupcapitals", "setupcaption", "setupcaptions", "setupcharacteralign", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupclipping", "setupcollector", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnset", "setupcolumnsetarea", "setupcolumnsetareatext", "setupcolumnsetlines", "setupcolumnsetspan", "setupcolumnsetstart", "setupcombination", "setupcombinedlist", "setupcomment", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdescriptions", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenumerations", "setupenv", "setupexpansion", "setupexport", "setupexternalfigure", "setupexternalfigures", "setupexternalsoundtracks", "setupfacingfloat", "setupfield", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfields", "setupfieldtotalframed", "setupfiller", "setupfillinlines", "setupfillinrules", "setupfirstline", "setupfittingpage", "setupfloat", "setupfloatframed", "setupfloats", "setupfloatsplitting", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupfooter", "setupfootertexts", "setupfootnotes", "setupforms", "setupformula", "setupformulae", "setupformulaframed", "setupframed", "setupframedcontent", "setupframedtable", "setupframedtablecolumn", "setupframedtablerow", "setupframedtext", "setupframedtexts", "setupglobalreferenceprefix", "setuphead", "setupheadalternative", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupindex", "setupinitial", "setupinsertion", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupitaliccorrection", "setupitemgroup", "setupitemizations", "setupitemize", "setupitems", "setuplabel", "setuplabeltext", "setuplanguage", "setuplayer", "setuplayeredtext", "setuplayout", "setuplayouttext", "setuplegend", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinenumbering", "setuplines", "setuplinetable", "setuplinewidth", "setuplist", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmakeup", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmarginrules", "setupmarking", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathfractions", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupmulticolumns", "setupnarrower", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoppositeplacing", "setuporientation", "setupoutput", "setupoutputroutine", "setuppagechecker", "setuppagecolumns", "setuppagecomment", "setuppageinjection", "setuppageinjectionalternative", "setuppagenumber", "setuppagenumbering", "setuppageshift", "setuppagestate", "setuppagetransitions", "setuppairedbox", "setuppalet", "setuppaper", "setuppapersize", "setupparagraph", "setupparagraphintro", "setupparagraphnumbering", "setupparagraphs", "setupparallel", "setupperiodkerning", "setupperiods", "setupplaceholder", "setupplacement", "setuppositionbar", "setuppositioning", "setupprefixtext", "setupprocessor", "setupprofile", "setupprograms", "setupquotation", "setupquote", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupreferencing", "setupregister", "setupregisters", "setuprenderingwindow", "setuprotate", "setupruby", "setups", "setupscale", "setupscript", "setupscripts", "setupsectionblock", "setupselector", "setupshift", "setupsidebar", "setupsorting", "setupspacing", "setupspellchecking", "setupstartstop", "setupstretched", "setupstrut", "setupstyle", "setupsubformula", "setupsubformulas", "setupsubpagenumber", "setupsuffixtext", "setupsymbols", "setupsymbolset", "setupsynctex", "setupsynonyms", "setupsystem", "setuptables", "setuptabulate", "setuptagging", "setuptaglabeltext", "setuptext", "setuptextbackground", "setuptextflow", "setuptextnote", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptooltip", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunit", "setupunittext", "setupurl", "setupuserdata", "setupuserdataalternative", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwhitespace", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "seveneighths", "sfrac", "shapedhbox", "sharp", "shiftbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showbodyfont", "showbodyfontenvironment", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolor", "showcolorbar", "showcolorcomponents", "showcolorgroup", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontexpansion", "showfontitalics", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showframe", "showglyphdata", "showglyphs", "showgrid", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayout", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showluatables", "showmakeup", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showpalet", "showparentchain", "showparwrapperstate", "showprint", "showsetups", "showsetupsdefinition", "showstruts", "showsymbolset", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "sigma", "signalrightpage", "sim", "simeq", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "singleverticalbar", "sixperemspace", "sixthofsixarguments", "slanted", "slantedbold", "slantedface", "slash", "slicepages", "slong", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smallcaps", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "smile", "snaptogrid", "softhyphen", "solidus", "someheadnumber", "somekindoftab", "someline", "somelocalfloat", "somenamedheadnumber", "someplace", "somewhere", "space", "spaceddigits", "spaceddigitsmethod", "spaceddigitsseparator", "spaceddigitssymbol", "spadesuit", "spanishNumerals", "spanishnumerals", "speech", "sphericalangle", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitatperiod", "splitdfrac", "splitfilename", "splitfloat", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqcap", "sqcup", "sqrt", "sqsubset", "sqsubseteq", "sqsubsetneq", "sqsupset", "sqsupseteq", "sqsupsetneq", "square", "squaredots", "ssharp", "stackrel", "stackscripts", "star", "stareq", "startJScode", "startJSpreamble", "startLUA", "startMP", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startPARSEDXML", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnested", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEX", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startXML", "startalign", "startalignment", "startallmodes", "startappendices", "startarrangedpages", "startasciimode", "startaside", "startattachment", "startbackground", "startbackmatter", "startbar", "startbbordermatrix", "startbitmapimage", "startblockquote", "startbodymatter", "startbordermatrix", "startboxedcolumns", "startbtxlabeltext", "startbtxrenderingdefinitions", "startbuffer", "startcases", "startcatcodetable", "startcenteraligned", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startchemicaltext", "startcollect", "startcollecting", "startcolor", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnset", "startcolumnsetspan", "startcombination", "startcomment", "startcomponent", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdelimited", "startdelimitedtext", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startelement", "startembeddedxtable", "startendnote", "startendofline", "startenvironment", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfacingfloat", "startfact", "startfigure", "startfiguretext", "startfittingpage", "startfixed", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startfootnote", "startformula", "startformulas", "startframed", "startframedcell", "startframedcontent", "startframedrow", "startframedtable", "startframedtext", "startfrontmatter", "startgoto", "startgraphictext", "startgridsnapping", "starthanging", "starthbox", "starthboxestohbox", "starthboxregister", "starthead", "startheadtext", "starthelptext", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinteraction", "startinteractionmenu", "startinterface", "startintermezzotext", "startintertext", "startitem", "startitemgroup", "startitemgroupcolumns", "startitemize", "startknockout", "startlabeltext", "startlanguage", "startlayout", "startleftaligned", "startlegend", "startline", "startlinealignment", "startlinecorrection", "startlinefiller", "startlinenote", "startlinenumbering", "startlines", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginblock", "startmarginrule", "startmarkedcontent", "startmarkpages", "startmathalignment", "startmathcases", "startmathlabeltext", "startmathmatrix", "startmathmode", "startmathstyle", "startmatrices", "startmatrix", "startmaxaligned", "startmdformula", "startmidaligned", "startmiddlealigned", "startmiddlemakeup", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startmulticolumns", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startoperatortext", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpacked", "startpagecolumns", "startpagecomment", "startpagefigure", "startpagelayout", "startpagemakeup", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpart", "startpath", "startplacechemical", "startplacefigure", "startplacefloat", "startplaceformula", "startplacegraphic", "startplaceintermezzo", "startplacelegend", "startplacepairedbox", "startplacetable", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startpostponingnotes", "startprefixtext", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startproduct", "startproject", "startprotect", "startprotectedcolors", "startpublication", "startpunctuation", "startquotation", "startquote", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startrightaligned", "startruby", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startsplitformula", "startsplittext", "startspread", "startstandardmakeup", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubject", "startsubjectlevel", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsuffixtext", "startsymbolset", "starttable", "starttablehead", "starttables", "starttabletail", "starttabletext", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttaglabeltext", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextmakeup", "starttextrule", "startthematrix", "starttitle", "starttokenlist", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "starttyping", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunittext", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startuserdata", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxcolumn", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "stligature", "stopJScode", "stopJSpreamble", "stopLUA", "stopMP", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopPARSEDXML", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnested", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEX", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopXML", "stopalign", "stopalignment", "stopallmodes", "stopappendices", "stoparrangedpages", "stopasciimode", "stopaside", "stopattachment", "stopbackground", "stopbackmatter", "stopbar", "stopbbordermatrix", "stopbitmapimage", "stopblockquote", "stopbodymatter", "stopbordermatrix", "stopboxedcolumns", "stopbtxlabeltext", "stopbtxrenderingdefinitions", "stopbuffer", "stopcases", "stopcatcodetable", "stopcenteraligned", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopchemicaltext", "stopcollect", "stopcollecting", "stopcolor", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnset", "stopcolumnsetspan", "stopcombination", "stopcomment", "stopcomponent", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdelimited", "stopdelimitedtext", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopelement", "stopembeddedxtable", "stopendnote", "stopendofline", "stopenvironment", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfacingfloat", "stopfact", "stopfigure", "stopfiguretext", "stopfittingpage", "stopfixed", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopfootnote", "stopformula", "stopformulas", "stopframed", "stopframedcell", "stopframedcontent", "stopframedrow", "stopframedtable", "stopframedtext", "stopfrontmatter", "stopgoto", "stopgraphictext", "stopgridsnapping", "stophanging", "stophbox", "stophboxestohbox", "stophboxregister", "stophead", "stopheadtext", "stophelptext", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinteraction", "stopinteractionmenu", "stopinterface", "stopintermezzotext", "stopintertext", "stopitem", "stopitemgroup", "stopitemgroupcolumns", "stopitemize", "stopknockout", "stoplabeltext", "stoplanguage", "stoplayout", "stopleftaligned", "stoplegend", "stopline", "stoplinealignment", "stoplinecorrection", "stoplinefiller", "stoplinenote", "stoplinenumbering", "stoplines", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopmarkedcontent", "stopmarkpages", "stopmathalignment", "stopmathcases", "stopmathlabeltext", "stopmathmatrix", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmatrix", "stopmaxaligned", "stopmdformula", "stopmidaligned", "stopmiddlealigned", "stopmiddlemakeup", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopmulticolumns", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopoperatortext", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppacked", "stoppagecolumns", "stoppagecomment", "stoppagefigure", "stoppagelayout", "stoppagemakeup", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppart", "stoppath", "stopplacechemical", "stopplacefigure", "stopplacefloat", "stopplaceformula", "stopplacegraphic", "stopplaceintermezzo", "stopplacelegend", "stopplacepairedbox", "stopplacetable", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stoppostponingnotes", "stopprefixtext", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopproduct", "stopproject", "stopprotect", "stopprotectedcolors", "stoppublication", "stoppunctuation", "stopquotation", "stopquote", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopreusableMPgraphic", "stoprightaligned", "stopruby", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopsplitformula", "stopsplittext", "stopspread", "stopstandardmakeup", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstrut", "stopstyle", "stopsubformulas", "stopsubject", "stopsubjectlevel", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsuffixtext", "stopsymbolset", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabletext", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptaglabeltext", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextmakeup", "stoptextrule", "stopthematrix", "stoptitle", "stoptokenlist", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stoptyping", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunittext", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopuserdata", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxcolumn", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stretched", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutgap", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subject", "subpagenumber", "subsection", "subsentence", "subset", "subseteq", "subseteqq", "subsetneq", "subsetneqq", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "succ", "succapprox", "succcurlyeq", "succeq", "succeqq", "succnapprox", "succneq", "succneqq", "succnsim", "succsim", "suffixlanguage", "suffixtext", "sum", "supset", "supseteq", "supseteqq", "supsetneq", "supsetneqq", "surd", "surdradical", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "swarrow", "switchstyleonly", "switchtobodyfont", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "synctexblockfilename", "synctexresetfilename", "synctexsetfilename", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tau", "tbinom", "tbox", "tcaron", "tcedilla", "tcommaaccent", "tcurl", "tequal", "test", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textAngstrom", "textacute", "textampersand", "textasciicircum", "textasciitilde", "textat", "textbackslash", "textbar", "textbottomcomma", "textbottomdot", "textbraceleft", "textbraceright", "textbreve", "textbrokenbar", "textbullet", "textcaron", "textcedilla", "textcelsius", "textcent", "textcircledP", "textcircumflex", "textcitation", "textcite", "textcomma", "textcontrolspace", "textcurrency", "textdag", "textddag", "textdegree", "textdiaeresis", "textdiv", "textdollar", "textdong", "textdotaccent", "textellipsis", "texteuro", "textflowcollector", "textfraction", "textgrave", "texthash", "texthorizontalbar", "texthungarumlaut", "texthyphen", "textkelvin", "textlognot", "textmacron", "textmath", "textmho", "textminus", "textmu", "textmultiply", "textnumero", "textogonek", "textohm", "textormathchar", "textormathchars", "textounce", "textpercent", "textperiod", "textplus", "textpm", "textreference", "textring", "textrule", "textslash", "textsterling", "texttilde", "textunderscore", "textvisiblespace", "textyen", "thai", "thainumerals", "thedatavalue", "thefirstcharacter", "thematrix", "thenormalizedbodyfontsize", "theorientation", "therefore", "theremainingcharacters", "theta", "thickspace", "thinrule", "thinrules", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thook", "thookleftarrow", "thookrightarrow", "thorn", "threedigitrounding", "threeeighths", "threefifths", "threeperemspace", "threequarter", "threesuperior", "tibetannumerals", "tightlayer", "tilde", "times", "tinyfont", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "to", "tochar", "tolinenote", "tooltip", "top", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "tracedpagestate", "traceoutputroutines", "tracepositions", "trademark", "translate", "transparencycomponents", "transparent", "trel", "triangle", "triangledown", "triangleleft", "triangleq", "triangleright", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "tripleprime", "tripleverticalbar", "truefilename", "truefontname", "tstroke", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "turnediota", "twodigitrounding", "twofifths", "twoheaddownarrow", "twoheadleftarrow", "twoheadrightarrow", "twoheadrightarrowtail", "twoheaduparrow", "twosuperior", "twothirds", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typeinlinebuffer", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetbufferonly", "typesetfile", "uacute", "ubreve", "ucaron", "uchexnumber", "uchexnumbers", "ucircumflex", "uconvertnumber", "udiaeresis", "udiaeresisacute", "udiaeresiscaron", "udiaeresisgrave", "udiaeresismacron", "udotbelow", "udots", "udoublegrave", "uedcatcodecommand", "ugrave", "uhook", "uhorn", "uhornacute", "uhorndotbelow", "uhorngrave", "uhornhook", "uhorntilde", "uhungarumlaut", "uinvertedbreve", "ulcorner", "umacron", "undefinevalue", "undepthed", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unexpandeddocumentvariable", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unitshigh", "unitslow", "unittext", "unknown", "unprotected", "unregisterhyphenationpattern", "unregisterparwrapper", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "unstackscripts", "untexargument", "untexcommand", "uogonek", "upand", "uparrow", "updasharrow", "updateparagraphdemerits", "updateparagraphpenalties", "updateparagraphproperties", "updateparagraphshapes", "updownarrow", "updownarrowbar", "updownarrows", "upharpoonleft", "upharpoonright", "uplus", "uppercased", "uppercasestring", "uppercasing", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "upsilon", "upuparrows", "upwhitearrow", "urcorner", "uring", "url", "useJSscripts", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useURL", "usealignparameter", "useblankparameter", "useblocks", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecitation", "usecolors", "usecomponent", "usedirectory", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternaldocument", "useexternalfigure", "useexternalrendering", "useexternalsoundtrack", "usefigurebase", "usefile", "usefontpath", "usegridparameter", "usehyphensparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "useluatable", "usemathstyleparameter", "usemodule", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usesymbols", "usetexmodule", "usetypescript", "usetypescriptfile", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilde", "utilityregisterlength", "vDash", "validassignment", "varTheta", "varepsilon", "varkappa", "varnothing", "varphi", "varpi", "varrho", "varsigma", "vartheta", "vboxreference", "vdash", "vdots", "vec", "vee", "veebar", "veeeq", "verbatim", "verbatimstring", "verbosenumber", "version", "vert", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vl", "vpackbox", "vpackedbox", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wcircumflex", "wdofstring", "wedge", "wedgeeq", "weekday", "whitearrowupfrombar", "widegrave", "widehat", "widetilde", "widthofstring", "widthspanningtext", "withoutpt", "word", "wordright", "words", "wordtonumber", "wp", "wr", "writebetweenlist", "writedatatolist", "writestatus", "writetolist", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xi", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldepth", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifatt", "xmldoifelse", "xmldoifelseatt", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotatt", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineprettyprint", "xmlinlineprettyprinttext", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmllastpar", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpar", "xmlparam", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprettyprinttext", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetatt", "xmlsetattribute", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetpar", "xmlsetparam", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos", "yacute", "ycircumflex", "ydiaeresis", "ydotbelow", "yen", "ygrave", "yhook", "yiddishnumerals", "ymacron", "ytilde", "zacute", "zcaron", "zdotaccent", "zeronumberconversion", "zerowidthnobreakspace", "zerowidthspace", "zeta", "zhook", "zstroke", "zwj", "zwnj" }, + ["common"]={ "AEacute", "AEligature", "AEmacron", "AMSTEX", "Aacute", "Abreve", "Abreveacute", "Abrevedotbelow", "Abrevegrave", "Abrevehook", "Abrevetilde", "Acaron", "Acircumflex", "Acircumflexacute", "Acircumflexdotbelow", "Acircumflexgrave", "Acircumflexhook", "Acircumflextilde", "Adiaeresis", "Adiaeresismacron", "Adotaccent", "Adotaccentmacron", "Adotbelow", "Adoublegrave", "AfterPar", "Agrave", "Ahook", "Ainvertedbreve", "Alpha", "Alphabeticnumerals", "AmSTeX", "Amacron", "And", "Angstrom", "Aogonek", "Aring", "Aringacute", "Arrowvert", "Astroke", "Atilde", "BeforePar", "Beta", "Bhook", "Big", "Bigg", "Biggl", "Biggm", "Biggr", "Bigl", "Bigm", "Bigr", "Box", "Bumpeq", "CONTEXT", "Cacute", "Cap", "Caps", "Ccaron", "Ccedilla", "Ccircumflex", "Cdotaccent", "Character", "Characters", "Chi", "Chook", "ConTeXt", "Context", "ConvertConstantAfter", "ConvertToConstant", "Cstroke", "Cup", "DAYLONG", "DAYSHORT", "DZcaronligature", "DZligature", "Dafrican", "Dcaron", "Dd", "Ddownarrow", "Delta", "Dhook", "Doteq", "Downarrow", "Dstroke", "Dzcaronligature", "Dzligature", "ETEX", "Eacute", "Ebreve", "Ecaron", "Ecedilla", "Ecircumflex", "Ecircumflexacute", "Ecircumflexdotbelow", "Ecircumflexgrave", "Ecircumflexhook", "Ecircumflextilde", "Ediaeresis", "Edotaccent", "Edotbelow", "Edoublegrave", "Egrave", "Ehook", "Einvertedbreve", "Emacron", "Eogonek", "Epsilon", "Eta", "Eth", "Etilde", "Eulerconst", "EveryLine", "EveryPar", "Fhook", "Finv", "Gacute", "Game", "Gamma", "Gbreve", "Gcaron", "Gcircumflex", "Gcommaaccent", "Gdotaccent", "GetPar", "Ghook", "GotoPar", "Greeknumerals", "Gstroke", "Hat", "Hcaron", "Hcircumflex", "Hstroke", "IJligature", "INRSTEX", "Iacute", "Ibreve", "Icaron", "Icircumflex", "Idiaeresis", "Idotaccent", "Idotbelow", "Idoublegrave", "Igrave", "Ihook", "Iinvertedbreve", "Im", "Imacron", "Iogonek", "Iota", "Istroke", "Itilde", "Jcircumflex", "Join", "Kappa", "Kcaron", "Kcommaaccent", "Khook", "LAMSTEX", "LATEX", "LJligature", "LUAJITTEX", "LUAMETATEX", "LUATEX", "LaTeX", "Lacute", "LamSTeX", "Lambda", "Lbar", "Lcaron", "Lcommaaccent", "Ldotmiddle", "Ldsh", "Leftarrow", "Leftrightarrow", "Ljligature", "Lleftarrow", "Longleftarrow", "Longleftrightarrow", "Longmapsfrom", "Longmapsto", "Longrightarrow", "Lsh", "Lstroke", "Lua", "LuaMetaTeX", "LuaTeX", "LuajitTeX", "METAFONT", "METAFUN", "METAPOST", "MKII", "MKIV", "MKIX", "MKLX", "MKVI", "MKXI", "MKXL", "MONTH", "MONTHLONG", "MONTHSHORT", "MPII", "MPIV", "MPLX", "MPVI", "MPXL", "MPanchor", "MPbetex", "MPc", "MPcode", "MPcolor", "MPcoloronly", "MPcolumn", "MPd", "MPdrawing", "MPfontsizehskip", "MPgetmultipars", "MPgetmultishape", "MPgetposboxes", "MPh", "MPinclusions", "MPleftskip", "MPll", "MPlr", "MPls", "MPmenubuttons", "MPn", "MPoptions", "MPoverlayanchor", "MPp", "MPpage", "MPpardata", "MPplus", "MPpos", "MPpositiongraphic", "MPposset", "MPr", "MPrawvar", "MPregion", "MPrest", "MPrightskip", "MPrs", "MPstring", "MPtext", "MPtransparency", "MPul", "MPur", "MPv", "MPvar", "MPvariable", "MPvv", "MPw", "MPwhd", "MPx", "MPxy", "MPxywhd", "MPy", "Mapsfrom", "Mapsto", "MetaFont", "MetaFun", "MetaPost", "Mu", "NJligature", "Nacute", "Ncaron", "Ncommaaccent", "Nearrow", "Neng", "Ngrave", "Njligature", "NormalizeFontHeight", "NormalizeFontWidth", "NormalizeTextHeight", "NormalizeTextWidth", "Ntilde", "Nu", "Numbers", "Nwarrow", "OEligature", "Oacute", "Obreve", "Ocaron", "Ocircumflex", "Ocircumflexacute", "Ocircumflexdotbelow", "Ocircumflexgrave", "Ocircumflexhook", "Ocircumflextilde", "Odiaeresis", "Odiaeresismacron", "Odotaccent", "Odotaccentmacron", "Odotbelow", "Odoublegrave", "Ograve", "Ohook", "Ohorn", "Ohornacute", "Ohorndotbelow", "Ohorngrave", "Ohornhook", "Ohorntilde", "Ohungarumlaut", "Oinvertedbreve", "Omacron", "Omega", "Omicron", "Oogonek", "Oogonekmacron", "Ostroke", "Ostrokeacute", "Otilde", "Otildemacron", "P", "PDFETEX", "PDFTEX", "PDFcolor", "PICTEX", "PPCHTEX", "PPCHTeX", "PRAGMA", "Phi", "Phook", "Pi", "PiCTeX", "Plankconst", "PointsToBigPoints", "PointsToReal", "PointsToWholeBigPoints", "PropertyLine", "Psi", "PtToCm", "Racute", "Rcaron", "Rcommaaccent", "Rdoublegrave", "Rdsh", "Re", "ReadFile", "Relbar", "Rho", "Rightarrow", "Rinvertedbreve", "Romannumerals", "Rrightarrow", "Rsh", "S", "Sacute", "ScaledPointsToBigPoints", "ScaledPointsToWholeBigPoints", "Scaron", "Scedilla", "Schwa", "Scircumflex", "Scommaaccent", "Searrow", "Sigma", "Smallcapped", "Subset", "Supset", "Swarrow", "TABLE", "TEX", "TaBlE", "Tau", "Tcaron", "Tcedilla", "Tcommaaccent", "TeX", "TheNormalizedFontSize", "Theta", "Thook", "Thorn", "TransparencyHack", "Tstroke", "Uacute", "Ubreve", "Ucaron", "Ucircumflex", "Udiaeresis", "Udiaeresisacute", "Udiaeresiscaron", "Udiaeresisgrave", "Udiaeresismacron", "Udotbelow", "Udoublegrave", "Ugrave", "Uhook", "Uhorn", "Uhornacute", "Uhorndotbelow", "Uhorngrave", "Uhornhook", "Uhorntilde", "Uhungarumlaut", "Uinvertedbreve", "Umacron", "Uogonek", "Uparrow", "Updownarrow", "Upsilon", "Uring", "Utilde", "Uuparrow", "VDash", "Vdash", "VerboseNumber", "Vert", "Vhook", "Vvdash", "WEEKDAY", "WORD", "WORDS", "Wcircumflex", "WidthSpanningText", "Word", "Words", "XETEX", "XeTeX", "Xi", "Yacute", "Ycircumflex", "Ydiaeresis", "Ydotbelow", "Ygrave", "Yhook", "Ymacron", "Ytilde", "Zacute", "Zcaron", "Zdotaccent", "Zeta", "Zhook", "Zstroke", "aacute", "abbreviation", "abjadnaivenumerals", "abjadnodotnumerals", "abjadnumerals", "about", "abreve", "abreveacute", "abrevedotbelow", "abrevegrave", "abrevehook", "abrevetilde", "acaron", "acircumflex", "acircumflexacute", "acircumflexdotbelow", "acircumflexgrave", "acircumflexhook", "acircumflextilde", "activatespacehandler", "actualday", "actualmonth", "actualyear", "actuarial", "acute", "acwopencirclearrow", "adaptcollector", "adaptfontfeature", "adaptlayout", "adaptpapersize", "addfeature", "addtoJSpreamble", "addtocommalist", "addvalue", "adiaeresis", "adiaeresismacron", "adotaccent", "adotaccentmacron", "adotbelow", "adoublegrave", "aeacute", "aeligature", "aemacron", "afghanicurrency", "aftersplitstring", "aftertestandsplitstring", "agrave", "ahook", "ainvertedbreve", "aleph", "alignbottom", "aligned", "alignedbox", "alignedline", "alignhere", "alignmentcharacter", "allinputpaths", "alpha", "alphabeticnumerals", "alwayscitation", "alwayscite", "amacron", "amalg", "ampersand", "anchor", "angle", "aogonek", "appendetoks", "appendgvalue", "appendtocommalist", "appendtoks", "appendtoksonce", "appendvalue", "apply", "applyalternativestyle", "applyfunction", "applyprocessor", "applytocharacters", "applytofirstcharacter", "applytosplitstringchar", "applytosplitstringcharspaced", "applytosplitstringline", "applytosplitstringlinespaced", "applytosplitstringword", "applytosplitstringwordspaced", "applytowords", "approx", "approxEq", "approxeq", "approxnEq", "arabicakbar", "arabicalayhe", "arabicallah", "arabicallallahou", "arabicasterisk", "arabicbasmalah", "arabiccomma", "arabiccuberoot", "arabicdateseparator", "arabicdecimals", "arabicdisputedendofayah", "arabicendofayah", "arabicexnumerals", "arabicfootnotemarker", "arabicfourthroot", "arabichighain", "arabichighalayheassallam", "arabichigheqala", "arabichighesala", "arabichighfootnotemarker", "arabichighjeem", "arabichighlamalef", "arabichighmadda", "arabichighmeemlong", "arabichighmeemshort", "arabichighnisf", "arabichighnoon", "arabichighnoonkasra", "arabichighqaf", "arabichighqif", "arabichighradiallahouanhu", "arabichighrahmatullahalayhe", "arabichighrubc", "arabichighsad", "arabichighsajda", "arabichighsakta", "arabichighsallallahou", "arabichighseen", "arabichighsmallsafha", "arabichightah", "arabichightakhallus", "arabichighthalatha", "arabichighwaqf", "arabichighyeh", "arabichighzain", "arabicjallajalalouhou", "arabiclettermark", "arabiclowmeemlong", "arabiclownoonkasra", "arabiclowseen", "arabicmisra", "arabicmuhammad", "arabicnumber", "arabicnumberabove", "arabicnumerals", "arabicparenleft", "arabicparenright", "arabicpercent", "arabicperiod", "arabicpermille", "arabicpertenthousand", "arabicpoeticverse", "arabicqala", "arabicquestion", "arabicrasoul", "arabicray", "arabicrialsign", "arabicsafha", "arabicsajdah", "arabicsalla", "arabicsamvat", "arabicsanah", "arabicsemicolon", "arabicshighthreedots", "arabicslcm", "arabicstartofrubc", "arabictripledot", "arabicvowelwaw", "arabicvowelyeh", "arabicwasallam", "arg", "aring", "aringacute", "arrowvert", "asciimode", "asciistr", "aside", "assignalfadimension", "assigndimen", "assigndimension", "assignifempty", "assigntranslation", "assignvalue", "assignwidth", "assumelongusagecs", "ast", "astype", "asymp", "at", "atilde", "atleftmargin", "atpage", "atrightmargin", "attachment", "autocap", "autodirhbox", "autodirvbox", "autodirvtop", "autoinsertnextspace", "autointegral", "automathematics", "autoorientation", "autopagestaterealpage", "autopagestaterealpageorder", "autorule", "autosetups", "availablehsize", "averagecharwidth", "backepsilon", "background", "backgroundimage", "backgroundimagefill", "backgroundline", "backprime", "backsim", "backslash", "bar", "barleftarrow", "barleftarrowrightarrowbar", "barovernorthwestarrow", "barwedge", "basegrid", "baselinebottom", "baselineleftbox", "baselinemiddlebox", "baselinerightbox", "bbordermatrix", "bbox", "because", "beforesplitstring", "beforetestandsplitstring", "beta", "beth", "between", "bhook", "big", "bigbodyfont", "bigcap", "bigcirc", "bigcircle", "bigcup", "bigdiamond", "bigg", "bigger", "biggl", "biggm", "biggr", "bigl", "bigm", "bigodot", "bigoplus", "bigotimes", "bigr", "bigskip", "bigsqcap", "bigsqcup", "bigsquare", "bigstar", "bigtimes", "bigtriangledown", "bigtriangleup", "bigudot", "biguplus", "bigvee", "bigwedge", "binom", "bitmapimage", "blacklozenge", "blackrule", "blackrules", "blacksquare", "blacktriangle", "blacktriangledown", "blacktriangleleft", "blacktriangleright", "blank", "blap", "bleed", "bleedheight", "bleedwidth", "blockligatures", "blockquote", "blocksynctexfile", "blockuservariable", "bodyfontenvironmentlist", "bodyfontsize", "bold", "boldface", "bolditalic", "boldslanted", "bookmark", "booleanmodevalue", "bordermatrix", "bot", "bottombox", "bottomleftbox", "bottomrightbox", "bowtie", "boxcursor", "boxdot", "boxmarker", "boxminus", "boxofsize", "boxplus", "boxreference", "boxtimes", "bpos", "breakablethinspace", "breakhere", "breve", "bstroke", "btxabbreviatedjournal", "btxaddjournal", "btxalwayscitation", "btxauthorfield", "btxdetail", "btxdirect", "btxdoif", "btxdoifcombiinlistelse", "btxdoifelse", "btxdoifelsecombiinlist", "btxdoifelsesameasprevious", "btxdoifelsesameaspreviouschecked", "btxdoifelseuservariable", "btxdoifnot", "btxdoifsameaspreviouscheckedelse", "btxdoifsameaspreviouselse", "btxdoifuservariableelse", "btxexpandedjournal", "btxfield", "btxfieldname", "btxfieldtype", "btxfirstofrange", "btxflush", "btxflushauthor", "btxflushauthorinverted", "btxflushauthorinvertedshort", "btxflushauthorname", "btxflushauthornormal", "btxflushauthornormalshort", "btxflushsuffix", "btxfoundname", "btxfoundtype", "btxhiddencitation", "btxhybridcite", "btxlabellanguage", "btxlabeltext", "btxlistcitation", "btxloadjournalist", "btxoneorrange", "btxremapauthor", "btxsavejournalist", "btxsetup", "btxsingularorplural", "btxsingularplural", "btxtextcitation", "buildmathaccent", "buildtextaccent", "buildtextbottomcomma", "buildtextbottomdot", "buildtextcedilla", "buildtextgrave", "buildtextmacron", "buildtextognek", "bullet", "button", "cacute", "calligraphic", "camel", "cap", "capital", "carriagereturn", "catcodetablename", "cbox", "ccaron", "ccedilla", "ccircumflex", "ccurl", "cdot", "cdotaccent", "cdotp", "cdots", "centeraligned", "centerbox", "centerdot", "centeredbox", "centeredlastline", "centerednextbox", "centerline", "cfrac", "chapter", "character", "characters", "chardescription", "charwidthlanguage", "check", "checkcharacteralign", "checkedblank", "checkedchar", "checkedfiller", "checkedstrippedcsname", "checkinjector", "checkmark", "checknextindentation", "checknextinjector", "checkpage", "checkparameters", "checkpreviousinjector", "checksoundtrack", "checktwopassdata", "checkvariables", "chem", "chemical", "chemicalbottext", "chemicalmidtext", "chemicalsymbol", "chemicaltext", "chemicaltoptext", "chi", "chineseallnumerals", "chinesecapnumerals", "chinesenumerals", "chook", "circ", "circeq", "circlearrowleft", "circlearrowright", "circledR", "circledS", "circledast", "circledcirc", "circleddash", "circledequals", "circleonrightarrow", "citation", "cite", "clap", "classfont", "cldcommand", "cldcontext", "cldloadfile", "cldprocessfile", "cleftarrow", "clip", "clippedoverlayimage", "clonefield", "clubsuit", "collect", "collectedtext", "collectexpanded", "colon", "coloncolonequals", "colonequals", "color", "colorbar", "colorcomponents", "colored", "coloronly", "colorvalue", "column", "columnbreak", "columnsetspanwidth", "combinepages", "commalistelement", "commalistsentence", "commalistsize", "comment", "comparecolorgroup", "comparedimension", "comparedimensioneps", "comparepalet", "complement", "completebtxrendering", "completecontent", "completeindex", "completelist", "completelistofabbreviations", "completelistofchemicals", "completelistoffigures", "completelistofgraphics", "completelistofintermezzi", "completelistoflogos", "completelistofpublications", "completelistofsorts", "completelistofsynonyms", "completelistoftables", "completepagenumber", "completeregister", "complexes", "complexorsimple", "complexorsimpleempty", "component", "composedcollector", "composedlayer", "compounddiscretionary", "compresult", "cong", "constantdimen", "constantdimenargument", "constantemptyargument", "constantnumber", "constantnumberargument", "contentreference", "continuednumber", "continueifinputfile", "convertargument", "convertcommand", "convertedcounter", "converteddimen", "convertedsubcounter", "convertmonth", "convertnumber", "convertvalue", "convertvboxtohbox", "coprod", "copyboxfromcache", "copybtxlabeltext", "copyfield", "copyheadtext", "copylabeltext", "copymathlabeltext", "copyoperatortext", "copypages", "copyparameters", "copyposition", "copyprefixtext", "copyright", "copysetups", "copysuffixtext", "copytaglabeltext", "copyunittext", "correctwhitespace", "countersubs", "counttoken", "counttokens", "cramped", "crampedclap", "crampedllap", "crampedrlap", "crightarrow", "crightoverleftarrow", "crlf", "crlfplaceholder", "cstroke", "ctop", "ctxcommand", "ctxdirectcommand", "ctxdirectlua", "ctxfunction", "ctxlatecommand", "ctxlatelua", "ctxloadluafile", "ctxlua", "ctxluabuffer", "ctxluacode", "ctxreport", "ctxsprint", "cup", "curlyeqprec", "curlyeqsucc", "curlyvee", "curlywedge", "currentassignmentlistkey", "currentassignmentlistvalue", "currentbtxuservariable", "currentcommalistitem", "currentcomponent", "currentdate", "currentenvironment", "currentfeaturetest", "currentheadnumber", "currentinterface", "currentlanguage", "currentlistentrydestinationattribute", "currentlistentrylimitedtext", "currentlistentrynumber", "currentlistentrypagenumber", "currentlistentryreferenceattribute", "currentlistentrytitle", "currentlistentrytitlerendered", "currentlistsymbol", "currentmainlanguage", "currentmessagetext", "currentmoduleparameter", "currentoutputstream", "currentproduct", "currentproject", "currentregime", "currentregisterpageuserdata", "currentresponses", "currenttime", "currentvalue", "currentxtablecolumn", "currentxtablerow", "curvearrowleft", "curvearrowright", "cwopencirclearrow", "cyrillicA", "cyrillicAE", "cyrillicAbreve", "cyrillicAdiaeresis", "cyrillicB", "cyrillicBIGYUS", "cyrillicBIGYUSiotified", "cyrillicC", "cyrillicCH", "cyrillicCHEDC", "cyrillicCHEDCabkhasian", "cyrillicCHEabkhasian", "cyrillicCHEdiaeresis", "cyrillicCHEkhakassian", "cyrillicCHEvertstroke", "cyrillicD", "cyrillicDASIAPNEUMATA", "cyrillicDJE", "cyrillicDZE", "cyrillicDZEabkhasian", "cyrillicDZHE", "cyrillicE", "cyrillicELtail", "cyrillicEMtail", "cyrillicENDC", "cyrillicENGHE", "cyrillicENhook", "cyrillicENtail", "cyrillicEREV", "cyrillicERY", "cyrillicERtick", "cyrillicEbreve", "cyrillicEdiaeresis", "cyrillicEgrave", "cyrillicEiotified", "cyrillicF", "cyrillicFITA", "cyrillicG", "cyrillicGHEmidhook", "cyrillicGHEstroke", "cyrillicGHEupturn", "cyrillicGJE", "cyrillicH", "cyrillicHA", "cyrillicHADC", "cyrillicHRDSN", "cyrillicI", "cyrillicIE", "cyrillicII", "cyrillicISHRT", "cyrillicISHRTtail", "cyrillicIZHITSA", "cyrillicIZHITSAdoublegrave", "cyrillicIdiaeresis", "cyrillicIgrave", "cyrillicImacron", "cyrillicJE", "cyrillicK", "cyrillicKADC", "cyrillicKAbashkir", "cyrillicKAhook", "cyrillicKAstroke", "cyrillicKAvertstroke", "cyrillicKJE", "cyrillicKOPPA", "cyrillicKSI", "cyrillicL", "cyrillicLITTLEYUS", "cyrillicLITTLEYUSiotified", "cyrillicLJE", "cyrillicM", "cyrillicN", "cyrillicNJE", "cyrillicO", "cyrillicOMEGA", "cyrillicOMEGAround", "cyrillicOMEGAtitlo", "cyrillicOT", "cyrillicObarred", "cyrillicObarreddiaeresis", "cyrillicOdiaeresis", "cyrillicP", "cyrillicPALATALIZATION", "cyrillicPALOCHKA", "cyrillicPEmidhook", "cyrillicPSI", "cyrillicPSILIPNEUMATA", "cyrillicR", "cyrillicS", "cyrillicSCHWA", "cyrillicSCHWAdiaeresis", "cyrillicSDSC", "cyrillicSEMISOFT", "cyrillicSFTSN", "cyrillicSH", "cyrillicSHCH", "cyrillicSHHA", "cyrillicT", "cyrillicTEDC", "cyrillicTETSE", "cyrillicTITLO", "cyrillicTSHE", "cyrillicU", "cyrillicUK", "cyrillicUSHRT", "cyrillicUdiaeresis", "cyrillicUdoubleacute", "cyrillicUmacron", "cyrillicV", "cyrillicYA", "cyrillicYAT", "cyrillicYERUdiaeresis", "cyrillicYI", "cyrillicYO", "cyrillicYU", "cyrillicYstr", "cyrillicYstrstroke", "cyrillicZ", "cyrillicZDSC", "cyrillicZEdiaeresis", "cyrillicZH", "cyrillicZHEbreve", "cyrillicZHEdescender", "cyrillicZHEdiaeresis", "cyrillica", "cyrillicabreve", "cyrillicadiaeresis", "cyrillicae", "cyrillicb", "cyrillicbigyus", "cyrillicbigyusiotified", "cyrillicc", "cyrillicch", "cyrilliccheabkhasian", "cyrillicchedc", "cyrillicchedcabkhasian", "cyrillicchediaeresis", "cyrillicchekhakassian", "cyrillicchevertstroke", "cyrillicd", "cyrillicdje", "cyrillicdze", "cyrillicdzeabkhasian", "cyrillicdzhe", "cyrillice", "cyrillicebreve", "cyrillicediaeresis", "cyrillicegrave", "cyrilliceiotified", "cyrilliceltail", "cyrillicemtail", "cyrillicendc", "cyrillicenghe", "cyrillicenhook", "cyrillicentail", "cyrillicerev", "cyrillicertick", "cyrillicery", "cyrillicf", "cyrillicfita", "cyrillicg", "cyrillicghemidhook", "cyrillicghestroke", "cyrillicgheupturn", "cyrillicgje", "cyrillich", "cyrillicha", "cyrillichadc", "cyrillichrdsn", "cyrillici", "cyrillicidiaeresis", "cyrillicie", "cyrillicigrave", "cyrillicii", "cyrillicimacron", "cyrillicishrt", "cyrillicishrttail", "cyrillicizhitsa", "cyrillicizhitsadoublegrave", "cyrillicje", "cyrillick", "cyrillickabashkir", "cyrillickadc", "cyrillickahook", "cyrillickastroke", "cyrillickavertstroke", "cyrillickje", "cyrillickoppa", "cyrillicksi", "cyrillicl", "cyrilliclittleyus", "cyrilliclittleyusiotified", "cyrilliclje", "cyrillicm", "cyrillicn", "cyrillicnje", "cyrillico", "cyrillicobarred", "cyrillicobarreddiaeresis", "cyrillicodiaeresis", "cyrillicomega", "cyrillicomegaround", "cyrillicomegatitlo", "cyrillicot", "cyrillicp", "cyrillicpemidhook", "cyrillicpsi", "cyrillicr", "cyrillics", "cyrillicschwa", "cyrillicschwadiaeresis", "cyrillicsdsc", "cyrillicsemisoft", "cyrillicsftsn", "cyrillicsh", "cyrillicshch", "cyrillicshha", "cyrillict", "cyrillictedc", "cyrillictetse", "cyrillictshe", "cyrillicu", "cyrillicudiaeresis", "cyrillicudoubleacute", "cyrillicuk", "cyrillicumacron", "cyrillicushrt", "cyrillicv", "cyrillicya", "cyrillicyat", "cyrillicyerudiaeresis", "cyrillicyi", "cyrillicyo", "cyrillicystr", "cyrillicystrstroke", "cyrillicyu", "cyrillicz", "cyrilliczdsc", "cyrilliczediaeresis", "cyrilliczh", "cyrilliczhebreve", "cyrilliczhedescender", "cyrilliczhediaeresis", "d", "dag", "dagger", "daleth", "dasharrow", "dashedleftarrow", "dashedrightarrow", "dashv", "datasetvariable", "date", "daylong", "dayoftheweek", "dayshort", "dayspermonth", "dbinom", "dcaron", "dcurl", "dd", "ddag", "ddagger", "dddot", "ddot", "ddots", "decrement", "decrementcounter", "decrementedcounter", "decrementpagenumber", "decrementsubpagenumber", "decrementvalue", "defaultinterface", "defaultobjectpage", "defaultobjectreference", "defcatcodecommand", "defconvertedargument", "defconvertedcommand", "defconvertedvalue", "define", "defineMPinstance", "defineTABLEsetup", "defineaccent", "defineactivecharacter", "definealternativestyle", "defineanchor", "defineattachment", "defineattribute", "definebackground", "definebar", "defineblock", "definebodyfont", "definebodyfontenvironment", "definebodyfontswitch", "definebreakpoint", "definebreakpoints", "definebtx", "definebtxdataset", "definebtxregister", "definebtxrendering", "definebuffer", "definebutton", "definecapitals", "definecharacter", "definecharacterkerning", "definecharacterspacing", "definechemical", "definechemicals", "definechemicalsymbol", "definecollector", "definecolor", "definecolorgroup", "definecolumnbreak", "definecolumnset", "definecolumnsetarea", "definecolumnsetspan", "definecombination", "definecombinedlist", "definecommand", "definecomment", "definecomplexorsimple", "definecomplexorsimpleempty", "defineconversion", "defineconversionset", "definecounter", "definedataset", "definedate", "definedelimitedtext", "definedeq", "definedescription", "definedfont", "definedocument", "defineeffect", "defineenumeration", "defineexpandable", "defineexpansion", "defineexternalfigure", "definefacingfloat", "definefallbackfamily", "definefield", "definefieldbody", "definefieldbodyset", "definefieldcategory", "definefieldstack", "definefiguresymbol", "definefileconstant", "definefilefallback", "definefilesynonym", "definefiller", "definefirstline", "definefittingpage", "definefloat", "definefont", "definefontalternative", "definefontfallback", "definefontfamily", "definefontfamilypreset", "definefontfeature", "definefontfile", "definefontsize", "definefontsolution", "definefontstyle", "definefontsynonym", "defineformula", "defineformulaalternative", "defineformulaframed", "defineframed", "defineframedcontent", "defineframedtable", "defineframedtext", "definefrozenfont", "defineglobalcolor", "definegraphictypesynonym", "definegridsnapping", "definehbox", "definehead", "defineheadalternative", "definehelp", "definehigh", "definehighlight", "definehspace", "definehyphenationfeatures", "defineindentedtext", "defineindenting", "defineinitial", "defineinsertion", "defineinteraction", "defineinteractionbar", "defineinteractionmenu", "defineinterfaceconstant", "defineinterfaceelement", "defineinterfacevariable", "defineinterlinespace", "defineintermediatecolor", "defineitemgroup", "defineitems", "definelabel", "definelabelclass", "definelayer", "definelayerpreset", "definelayout", "definelinefiller", "definelinenote", "definelinenumbering", "definelines", "definelist", "definelistalternative", "definelistextra", "definelow", "definelowhigh", "definelowmidhigh", "definemakeup", "definemarginblock", "definemargindata", "definemarker", "definemarking", "definemathaccent", "definemathalignment", "definemathcases", "definemathcommand", "definemathdouble", "definemathdoubleextensible", "definemathematics", "definemathextensible", "definemathfence", "definemathfraction", "definemathframed", "definemathmatrix", "definemathornament", "definemathover", "definemathoverextensible", "definemathovertextextensible", "definemathradical", "definemathstackers", "definemathstyle", "definemathtriplet", "definemathunder", "definemathunderextensible", "definemathundertextextensible", "definemathunstacked", "definemeasure", "definemessageconstant", "definemixedcolumns", "definemode", "definemulticolumns", "definemultitonecolor", "definenamedcolor", "definenamespace", "definenarrower", "definenote", "defineorientation", "defineornament", "defineoutputroutine", "defineoutputroutinecommand", "defineoverlay", "definepage", "definepagebreak", "definepagechecker", "definepagecolumns", "definepageinjection", "definepageinjectionalternative", "definepageshift", "definepagestate", "definepairedbox", "definepalet", "definepapersize", "defineparagraph", "defineparagraphs", "defineparallel", "defineparbuilder", "defineperiodkerning", "defineplaceholder", "defineplacement", "definepositioning", "defineprefixset", "defineprocesscolor", "defineprocessor", "defineprofile", "defineprogram", "definepushbutton", "definepushsymbol", "definereference", "definereferenceformat", "defineregister", "definerenderingwindow", "defineresetset", "defineruby", "definescale", "definescript", "definesection", "definesectionblock", "definesectionlevels", "defineselector", "defineseparatorset", "defineshift", "definesidebar", "definesort", "definesorting", "definespotcolor", "definestartstop", "definestyle", "definestyleinstance", "definesubfield", "definesubformula", "definesymbol", "definesynonym", "definesynonyms", "definesystemattribute", "definesystemconstant", "definesystemvariable", "definetabletemplate", "definetabulate", "definetext", "definetextbackground", "definetextflow", "definetextnote", "definetokenlist", "definetooltip", "definetransparency", "definetwopasslist", "definetype", "definetypeface", "definetypescriptprefix", "definetypescriptsynonym", "definetypesetting", "definetyping", "defineunit", "defineuserdata", "defineuserdataalternative", "defineviewerlayer", "definevspace", "definevspacing", "definevspacingamount", "definextable", "defrostparagraphproperties", "delimited", "delimitedtext", "delta", "depthofstring", "depthonlybox", "depthspanningtext", "depthstrut", "determineheadnumber", "determinelistcharacteristics", "determinenoflines", "determineregistercharacteristics", "devanagarinumerals", "dfrac", "dhook", "diameter", "diamond", "diamondsuit", "differentialD", "differentiald", "digamma", "digits", "dimensiontocount", "directboxfromcache", "directcolor", "directcolored", "directconvertedcounter", "directcopyboxfromcache", "directdummyparameter", "directgetboxllx", "directgetboxlly", "directhighlight", "directlocalframed", "directluacode", "directparwrapper", "directselect", "directsetbar", "directsetup", "directsymbol", "directvspacing", "dis", "disabledirectives", "disableexperiments", "disablemode", "disableoutputstream", "disableparpositions", "disableregime", "disabletrackers", "displaymath", "displaymathematics", "displaymessage", "disposeluatable", "distributedhsize", "div", "dividedsize", "divideontimes", "divides", "doadaptleftskip", "doadaptrightskip", "doaddfeature", "doassign", "doassignempty", "doboundtext", "docheckassignment", "docheckedpair", "documentvariable", "dodoubleargument", "dodoubleargumentwithset", "dodoubleempty", "dodoubleemptywithset", "dodoublegroupempty", "doeassign", "doexpandedrecurse", "dofastloopcs", "dogetattribute", "dogetattributeid", "dogetcommacommandelement", "dogobbledoubleempty", "dogobblesingleempty", "dohyphens", "doif", "doifMPgraphicelse", "doifallcommon", "doifallcommonelse", "doifalldefinedelse", "doifallmodes", "doifallmodeselse", "doifassignmentelse", "doifassignmentelsecs", "doifblackelse", "doifbothsides", "doifbothsidesoverruled", "doifboxelse", "doifbufferelse", "doifcheckedpagestate", "doifcolor", "doifcolorelse", "doifcommandhandler", "doifcommandhandlerelse", "doifcommon", "doifcommonelse", "doifcontent", "doifconversiondefinedelse", "doifconversionnumberelse", "doifcounter", "doifcounterelse", "doifcurrentfonthasfeatureelse", "doifdefined", "doifdefinedcounter", "doifdefinedcounterelse", "doifdefinedelse", "doifdimensionelse", "doifdimenstringelse", "doifdocumentargument", "doifdocumentargumentelse", "doifdocumentfilename", "doifdocumentfilenameelse", "doifdocumentvariable", "doifdocumentvariableelse", "doifdrawingblackelse", "doifelse", "doifelseMPgraphic", "doifelseallcommon", "doifelsealldefined", "doifelseallmodes", "doifelseassignment", "doifelseassignmentcs", "doifelseblack", "doifelsebox", "doifelseboxincache", "doifelsebuffer", "doifelsecolor", "doifelsecommandhandler", "doifelsecommon", "doifelseconversiondefined", "doifelseconversionnumber", "doifelsecounter", "doifelsecurrentfonthasfeature", "doifelsecurrentsortingused", "doifelsecurrentsynonymshown", "doifelsecurrentsynonymused", "doifelsedefined", "doifelsedefinedcounter", "doifelsedimension", "doifelsedimenstring", "doifelsedocumentargument", "doifelsedocumentfilename", "doifelsedocumentvariable", "doifelsedrawingblack", "doifelseempty", "doifelseemptyvalue", "doifelseemptyvariable", "doifelseenv", "doifelsefastoptionalcheck", "doifelsefastoptionalcheckcs", "doifelsefieldbody", "doifelsefieldcategory", "doifelsefigure", "doifelsefile", "doifelsefiledefined", "doifelsefileexists", "doifelsefirstchar", "doifelseflagged", "doifelsefontchar", "doifelsefontfeature", "doifelsefontpresent", "doifelsefontsynonym", "doifelseframed", "doifelsehasspace", "doifelsehelp", "doifelseincsname", "doifelseindented", "doifelseinelement", "doifelseinputfile", "doifelseinsertion", "doifelseinset", "doifelseinstring", "doifelseinsymbolset", "doifelseintoks", "doifelseintwopassdata", "doifelseitalic", "doifelselanguage", "doifelselayerdata", "doifelselayoutdefined", "doifelselayoutsomeline", "doifelselayouttextline", "doifelseleapyear", "doifelselist", "doifelselocation", "doifelselocfile", "doifelsemainfloatbody", "doifelsemarkedcontent", "doifelsemarkedpage", "doifelsemarking", "doifelsemeaning", "doifelsemessage", "doifelsemode", "doifelsenextbgroup", "doifelsenextbgroupcs", "doifelsenextchar", "doifelsenextoptional", "doifelsenextoptionalcs", "doifelsenextparenthesis", "doifelsenonzeropositive", "doifelsenoteonsamepage", "doifelsenothing", "doifelsenumber", "doifelseobjectfound", "doifelseobjectreferencefound", "doifelseoddpage", "doifelseoddpagefloat", "doifelseoldercontext", "doifelseolderversion", "doifelseorientation", "doifelseoverlapping", "doifelseoverlay", "doifelseparallel", "doifelseparentfile", "doifelseparwrapper", "doifelsepath", "doifelsepathexists", "doifelsepatterns", "doifelseposition", "doifelsepositionaction", "doifelsepositiononpage", "doifelsepositionsonsamepage", "doifelsepositionsonthispage", "doifelsepositionsused", "doifelsereferencefound", "doifelserightpage", "doifelserightpagefloat", "doifelserighttoleftinbox", "doifelsesamelinereference", "doifelsesamestring", "doifelsesetups", "doifelsesomebackground", "doifelsesomespace", "doifelsesomething", "doifelsesometoks", "doifelsestringinstring", "doifelsestructurelisthasnumber", "doifelsestructurelisthaspage", "doifelsesymboldefined", "doifelsesymbolset", "doifelsetext", "doifelsetextflow", "doifelsetextflowcollector", "doifelsetopofpage", "doifelsetypingfile", "doifelseundefined", "doifelseurldefined", "doifelsevalue", "doifelsevaluenothing", "doifelsevariable", "doifempty", "doifemptyelse", "doifemptytoks", "doifemptyvalue", "doifemptyvalueelse", "doifemptyvariable", "doifemptyvariableelse", "doifenv", "doifenvelse", "doiffastoptionalcheckcselse", "doiffastoptionalcheckelse", "doiffieldbodyelse", "doiffieldcategoryelse", "doiffigureelse", "doiffile", "doiffiledefinedelse", "doiffileelse", "doiffileexistselse", "doiffirstcharelse", "doifflaggedelse", "doiffontcharelse", "doiffontfeatureelse", "doiffontpresentelse", "doiffontsynonymelse", "doifhasspaceelse", "doifhelpelse", "doifincsnameelse", "doifinelementelse", "doifinputfileelse", "doifinsertionelse", "doifinset", "doifinsetelse", "doifinstring", "doifinstringelse", "doifinsymbolset", "doifinsymbolsetelse", "doifintokselse", "doifintwopassdataelse", "doifitalicelse", "doiflanguageelse", "doiflayerdataelse", "doiflayoutdefinedelse", "doiflayoutsomelineelse", "doiflayouttextlineelse", "doifleapyearelse", "doiflistelse", "doiflocationelse", "doiflocfileelse", "doifmainfloatbodyelse", "doifmarkingelse", "doifmeaningelse", "doifmessageelse", "doifmode", "doifmodeelse", "doifnextbgroupcselse", "doifnextbgroupelse", "doifnextcharelse", "doifnextoptionalcselse", "doifnextoptionalelse", "doifnextparenthesiselse", "doifnonzeropositiveelse", "doifnot", "doifnotallcommon", "doifnotallmodes", "doifnotcommandhandler", "doifnotcommon", "doifnotcounter", "doifnotdocumentargument", "doifnotdocumentfilename", "doifnotdocumentvariable", "doifnotempty", "doifnotemptyvalue", "doifnotemptyvariable", "doifnotenv", "doifnoteonsamepageelse", "doifnotescollected", "doifnotfile", "doifnotflagged", "doifnothing", "doifnothingelse", "doifnotinset", "doifnotinsidesplitfloat", "doifnotinstring", "doifnotmode", "doifnotnumber", "doifnotsamestring", "doifnotsetups", "doifnotvalue", "doifnotvariable", "doifnumber", "doifnumberelse", "doifobjectfoundelse", "doifobjectreferencefoundelse", "doifoddpageelse", "doifoddpagefloatelse", "doifoldercontextelse", "doifolderversionelse", "doifoutervmode", "doifoverlappingelse", "doifoverlayelse", "doifparallelelse", "doifparentfileelse", "doifpathelse", "doifpathexistselse", "doifpatternselse", "doifposition", "doifpositionaction", "doifpositionactionelse", "doifpositionelse", "doifpositiononpageelse", "doifpositionsonsamepageelse", "doifpositionsonthispageelse", "doifpositionsusedelse", "doifreferencefoundelse", "doifrightpageelse", "doifrightpagefloatelse", "doifrighttoleftinboxelse", "doifsamelinereferenceelse", "doifsamestring", "doifsamestringelse", "doifsetups", "doifsetupselse", "doifsomebackground", "doifsomebackgroundelse", "doifsomespaceelse", "doifsomething", "doifsomethingelse", "doifsometoks", "doifsometokselse", "doifstringinstringelse", "doifstructurelisthasnumberelse", "doifstructurelisthaspageelse", "doifsymboldefinedelse", "doifsymbolsetelse", "doiftext", "doiftextelse", "doiftextflowcollectorelse", "doiftextflowelse", "doiftopofpageelse", "doiftypingfileelse", "doifundefined", "doifundefinedcounter", "doifundefinedelse", "doifunknownfontfeature", "doifurldefinedelse", "doifvalue", "doifvalueelse", "doifvaluenothing", "doifvaluenothingelse", "doifvaluesomething", "doifvariable", "doifvariableelse", "doindentation", "dollar", "doloop", "doloopoverlist", "donothing", "dontconvertfont", "dontleavehmode", "dontpermitspacesbetweengroups", "dopositionaction", "doprocesslocalsetups", "doquadrupleargument", "doquadrupleempty", "doquadruplegroupempty", "doquintupleargument", "doquintupleempty", "doquintuplegroupempty", "dorechecknextindentation", "dorecurse", "dorepeatwithcommand", "doreplacefeature", "doresetandafffeature", "doresetattribute", "dorotatebox", "dosetattribute", "dosetleftskipadaption", "dosetrightskipadaption", "dosetupcheckedinterlinespace", "doseventupleargument", "doseventupleempty", "dosingleargument", "dosingleempty", "dosinglegroupempty", "dosixtupleargument", "dosixtupleempty", "dosomebreak", "dostepwiserecurse", "dosubtractfeature", "dot", "doteq", "doteqdot", "dotfill", "dotfskip", "dotlessI", "dotlessJ", "dotlessi", "dotlessj", "dotlessjstroke", "dotminus", "dotoks", "dotplus", "dotripleargument", "dotripleargumentwithset", "dotripleempty", "dotripleemptywithset", "dotriplegroupempty", "dots", "dottedcircle", "dottedrightarrow", "doublebar", "doublebond", "doublebrace", "doublebracket", "doublecap", "doublecup", "doubleparent", "doubleprime", "doubleverticalbar", "dowith", "dowithnextbox", "dowithnextboxcontent", "dowithnextboxcontentcs", "dowithnextboxcs", "dowithpargument", "dowithrange", "dowithwargument", "downarrow", "downdasharrow", "downdownarrows", "downharpoonleft", "downharpoonright", "downuparrows", "downwhitearrow", "downzigzagarrow", "dpofstring", "dstroke", "dtail", "dummydigit", "dummyparameter", "dzcaronligature", "dzligature", "eTeX", "eacute", "ebreve", "ecaron", "ecedilla", "ecircumflex", "ecircumflexacute", "ecircumflexdotbelow", "ecircumflexgrave", "ecircumflexhook", "ecircumflextilde", "edefconvertedargument", "ediaeresis", "edotaccent", "edotbelow", "edoublegrave", "ee", "efcmaxheight", "efcmaxwidth", "efcminheight", "efcminwidth", "efcparameter", "effect", "egrave", "ehook", "einvertedbreve", "elapsedseconds", "elapsedsteptime", "elapsedtime", "eleftarrowfill", "eleftharpoondownfill", "eleftharpoonupfill", "eleftrightarrowfill", "ell", "em", "emacron", "emdash", "emphasisboldface", "emphasistypeface", "emptylines", "emptyset", "emquad", "emspace", "enableasciimode", "enabledirectives", "enableexperiments", "enablemode", "enableoutputstream", "enableparpositions", "enableregime", "enabletrackers", "endash", "endnote", "enquad", "enskip", "enspace", "env", "environment", "envvar", "eogonek", "eoverbarfill", "eoverbracefill", "eoverbracketfill", "eoverparentfill", "epos", "epsilon", "eq", "eqcirc", "eqeq", "eqeqeq", "eqgtr", "eqless", "eqsim", "eqslantgtr", "eqslantless", "equaldigits", "equalscolon", "equiv", "erightarrowfill", "erightharpoondownfill", "erightharpoonupfill", "eta", "eth", "ethiopic", "etilde", "etwoheadrightarrowfill", "eunderbarfill", "eunderbracefill", "eunderbracketfill", "eunderparentfill", "exclamdown", "executeifdefined", "exists", "exitloop", "exitloopnow", "expandcheckedcsname", "expanded", "expandeddoif", "expandeddoifelse", "expandeddoifnot", "expandfontsynonym", "expdoif", "expdoifcommonelse", "expdoifelse", "expdoifelsecommon", "expdoifelseinset", "expdoifinsetelse", "expdoifnot", "exponentiale", "externalfigure", "externalfigurecollectionmaxheight", "externalfigurecollectionmaxwidth", "externalfigurecollectionminheight", "externalfigurecollectionminwidth", "externalfigurecollectionparameter", "fakebox", "fallingdotseq", "fastdecrement", "fastincrement", "fastlocalframed", "fastloopfinal", "fastloopindex", "fastscale", "fastsetup", "fastsetupwithargument", "fastsetupwithargumentswapped", "fastswitchtobodyfont", "fastsxsy", "feature", "fence", "fenced", "fetchallmarkings", "fetchallmarks", "fetchmark", "fetchmarking", "fetchonemark", "fetchonemarking", "fetchruntinecommand", "fetchtwomarkings", "fetchtwomarks", "ffiligature", "ffligature", "fflligature", "fhook", "field", "fieldbody", "fieldstack", "fifthoffivearguments", "fifthofsixarguments", "figurefilename", "figurefilepath", "figurefiletype", "figurefullname", "figureheight", "figurenaturalheight", "figurenaturalwidth", "figurespace", "figuresymbol", "figurewidth", "filename", "filigature", "filledhboxb", "filledhboxc", "filledhboxg", "filledhboxk", "filledhboxm", "filledhboxr", "filledhboxy", "filler", "fillinline", "fillinrules", "fillintext", "fillupto", "filterfromnext", "filterfromvalue", "filterpages", "filterreference", "findtwopassdata", "finishregisterentry", "firstcharacter", "firstcounter", "firstcountervalue", "firstinlist", "firstoffivearguments", "firstoffourarguments", "firstofoneargument", "firstofoneunexpanded", "firstofsixarguments", "firstofthreearguments", "firstofthreeunexpanded", "firstoftwoarguments", "firstoftwounexpanded", "firstrealpage", "firstrealpagenumber", "firstsubcountervalue", "firstsubpage", "firstsubpagenumber", "firstuserpage", "firstuserpagenumber", "fitfield", "fitfieldframed", "fittopbaselinegrid", "fiveeighths", "fivesixths", "fixedspace", "fixedspaces", "flag", "flat", "flligature", "floatuserdataparameter", "flushbox", "flushboxregister", "flushcollector", "flushedrightlastline", "flushlayer", "flushlocalfloats", "flushnextbox", "flushnotes", "flushoutputstream", "flushshapebox", "flushtextflow", "flushtokens", "flushtoks", "fontalternative", "fontbody", "fontchar", "fontcharbyindex", "fontclass", "fontclassname", "fontface", "fontfeaturelist", "fontsize", "fontstyle", "footnote", "footnotetext", "forall", "forcecharacterstripping", "forcelocalfloats", "forgeteverypar", "forgetparagraphfreezing", "forgetparameters", "forgetparskip", "forgetparwrapper", "forgetragged", "formula", "formulanumber", "foundbox", "fourfifths", "fourperemspace", "fourthoffivearguments", "fourthoffourarguments", "fourthofsixarguments", "frac", "framed", "frameddimension", "framedparameter", "framedtext", "freezedimenmacro", "freezemeasure", "freezeparagraphproperties", "frenchspacing", "from", "fromlinenote", "frown", "frozenhbox", "frule", "gacute", "gamma", "gbreve", "gcaron", "gcircumflex", "gcommaaccent", "gdefconvertedargument", "gdefconvertedcommand", "gdotaccent", "ge", "geq", "geqq", "geqslant", "getMPdrawing", "getMPlayer", "getboxfromcache", "getboxllx", "getboxlly", "getbuffer", "getbufferdata", "getcommacommandsize", "getcommalistsize", "getdatavalue", "getdayoftheweek", "getdayspermonth", "getdefinedbuffer", "getdocumentargument", "getdocumentargumentdefault", "getdocumentfilename", "getdummyparameters", "getemptyparameters", "geteparameters", "getexpandedparameters", "getfiguredimensions", "getfirstcharacter", "getfirsttwopassdata", "getfromcommacommand", "getfromcommalist", "getfromluatable", "getfromtwopassdata", "getglyphdirect", "getglyphstyled", "getgparameters", "getinlineuserdata", "getlasttwopassdata", "getlocalfloat", "getlocalfloats", "getmarking", "getmessage", "getnamedglyphdirect", "getnamedglyphstyled", "getnamedtwopassdatalist", "getnaturaldimensions", "getnoflines", "getobject", "getobjectdimensions", "getpaletsize", "getparameters", "getparwrapper", "getprivatechar", "getprivateslot", "getrandomcount", "getrandomdimen", "getrandomfloat", "getrandomnumber", "getrandomseed", "getraweparameters", "getrawgparameters", "getrawnoflines", "getrawparameters", "getrawxparameters", "getreference", "getreferenceentry", "getroundednoflines", "gets", "getsubstring", "gettokenlist", "gettwopassdata", "gettwopassdatalist", "getuserdata", "getuvalue", "getvalue", "getvariable", "getvariabledefault", "getxparameters", "gg", "ggg", "gggtr", "gimel", "globaldisablemode", "globalenablemode", "globalletempty", "globalpopbox", "globalpopmacro", "globalpreventmode", "globalprocesscommalist", "globalpushbox", "globalpushmacro", "globalswapcounts", "globalswapdimens", "globalswapmacros", "globalundefine", "glyphfontfile", "gnapprox", "gneqq", "gnsim", "gobbledoubleempty", "gobbleeightarguments", "gobblefivearguments", "gobblefiveoptionals", "gobblefourarguments", "gobblefouroptionals", "gobbleninearguments", "gobbleoneargument", "gobbleoneoptional", "gobblesevenarguments", "gobblesingleempty", "gobblesixarguments", "gobblespacetokens", "gobbletenarguments", "gobblethreearguments", "gobblethreeoptionals", "gobbletwoarguments", "gobbletwooptionals", "gobbleuntil", "gobbleuntilrelax", "godown", "goto", "gotobox", "gotopage", "grabbufferdata", "grabbufferdatadirect", "grabuntil", "grave", "graycolor", "grayvalue", "greedysplitstring", "greekAlpha", "greekAlphadasia", "greekAlphadasiaperispomeni", "greekAlphadasiatonos", "greekAlphadasiavaria", "greekAlphaiotasub", "greekAlphaiotasubdasia", "greekAlphaiotasubdasiaperispomeni", "greekAlphaiotasubdasiatonos", "greekAlphaiotasubdasiavaria", "greekAlphaiotasubpsili", "greekAlphaiotasubpsiliperispomeni", "greekAlphaiotasubpsilitonos", "greekAlphaiotasubpsilivaria", "greekAlphamacron", "greekAlphapsili", "greekAlphapsiliperispomeni", "greekAlphapsilitonos", "greekAlphapsilivaria", "greekAlphatonos", "greekAlphavaria", "greekAlphavrachy", "greekBeta", "greekChi", "greekCoronis", "greekDelta", "greekEpsilon", "greekEpsilondasia", "greekEpsilondasiatonos", "greekEpsilondasiavaria", "greekEpsilonpsili", "greekEpsilonpsilitonos", "greekEpsilonpsilivaria", "greekEpsilontonos", "greekEpsilonvaria", "greekEta", "greekEtadasia", "greekEtadasiaperispomeni", "greekEtadasiatonos", "greekEtadasiavaria", "greekEtaiotasub", "greekEtaiotasubdasia", "greekEtaiotasubdasiaperispomeni", "greekEtaiotasubdasiatonos", "greekEtaiotasubdasiavaria", "greekEtaiotasubpsili", "greekEtaiotasubpsiliperispomeni", "greekEtaiotasubpsilitonos", "greekEtaiotasubpsilivaria", "greekEtapsili", "greekEtapsiliperispomeni", "greekEtapsilitonos", "greekEtapsilivaria", "greekEtatonos", "greekEtavaria", "greekGamma", "greekIota", "greekIotadasia", "greekIotadasiaperispomeni", "greekIotadasiatonos", "greekIotadasiavaria", "greekIotadialytika", "greekIotamacron", "greekIotapsili", "greekIotapsiliperispomeni", "greekIotapsilitonos", "greekIotapsilivaria", "greekIotatonos", "greekIotavaria", "greekIotavrachy", "greekKappa", "greekLambda", "greekMu", "greekNu", "greekOmega", "greekOmegadasia", "greekOmegadasiaperispomeni", "greekOmegadasiatonos", "greekOmegadasiavaria", "greekOmegaiotasub", "greekOmegaiotasubdasia", "greekOmegaiotasubdasiaperispomeni", "greekOmegaiotasubdasiatonos", "greekOmegaiotasubdasiavaria", "greekOmegaiotasubpsili", "greekOmegaiotasubpsiliperispomeni", "greekOmegaiotasubpsilitonos", "greekOmegaiotasubpsilivaria", "greekOmegapsili", "greekOmegapsiliperispomeni", "greekOmegapsilitonos", "greekOmegapsilivaria", "greekOmegatonos", "greekOmegavaria", "greekOmicron", "greekOmicrondasia", "greekOmicrondasiatonos", "greekOmicrondasiavaria", "greekOmicronpsili", "greekOmicronpsilitonos", "greekOmicronpsilivaria", "greekOmicrontonos", "greekOmicronvaria", "greekPhi", "greekPi", "greekPsi", "greekRho", "greekRhodasia", "greekSigma", "greekSigmalunate", "greekTau", "greekTheta", "greekUpsilon", "greekUpsilondasia", "greekUpsilondasiaperispomeni", "greekUpsilondasiatonos", "greekUpsilondasiavaria", "greekUpsilondialytika", "greekUpsilonmacron", "greekUpsilontonos", "greekUpsilonvaria", "greekUpsilonvrachy", "greekXi", "greekZeta", "greekalpha", "greekalphadasia", "greekalphadasiaperispomeni", "greekalphadasiatonos", "greekalphadasiavaria", "greekalphaiotasub", "greekalphaiotasubdasia", "greekalphaiotasubdasiaperispomeni", "greekalphaiotasubdasiatonos", "greekalphaiotasubdasiavaria", "greekalphaiotasubperispomeni", "greekalphaiotasubpsili", "greekalphaiotasubpsiliperispomeni", "greekalphaiotasubpsilitonos", "greekalphaiotasubpsilivaria", "greekalphaiotasubtonos", "greekalphaiotasubvaria", "greekalphamacron", "greekalphaoxia", "greekalphaperispomeni", "greekalphapsili", "greekalphapsiliperispomeni", "greekalphapsilitonos", "greekalphapsilivaria", "greekalphatonos", "greekalphavaria", "greekalphavrachy", "greekbeta", "greekbetaalt", "greekchi", "greekdasia", "greekdasiaperispomeni", "greekdasiavaria", "greekdelta", "greekdialytikaperispomeni", "greekdialytikatonos", "greekdialytikavaria", "greekdigamma", "greekepsilon", "greekepsilonalt", "greekepsilondasia", "greekepsilondasiatonos", "greekepsilondasiavaria", "greekepsilonoxia", "greekepsilonpsili", "greekepsilonpsilitonos", "greekepsilonpsilivaria", "greekepsilontonos", "greekepsilonvaria", "greeketa", "greeketadasia", "greeketadasiaperispomeni", "greeketadasiatonos", "greeketadasiavaria", "greeketaiotasub", "greeketaiotasubdasia", "greeketaiotasubdasiaperispomeni", "greeketaiotasubdasiatonos", "greeketaiotasubdasiavaria", "greeketaiotasubperispomeni", "greeketaiotasubpsili", "greeketaiotasubpsiliperispomeni", "greeketaiotasubpsilitonos", "greeketaiotasubpsilivaria", "greeketaiotasubtonos", "greeketaiotasubvaria", "greeketaoxia", "greeketaperispomeni", "greeketapsili", "greeketapsiliperispomeni", "greeketapsilitonos", "greeketapsilivaria", "greeketatonos", "greeketavaria", "greekfinalsigma", "greekgamma", "greekiota", "greekiotadasia", "greekiotadasiaperispomeni", "greekiotadasiatonos", "greekiotadasiavaria", "greekiotadialytika", "greekiotadialytikaperispomeni", "greekiotadialytikatonos", "greekiotadialytikavaria", "greekiotamacron", "greekiotaoxia", "greekiotaperispomeni", "greekiotapsili", "greekiotapsiliperispomeni", "greekiotapsilitonos", "greekiotapsilivaria", "greekiotatonos", "greekiotavaria", "greekiotavrachy", "greekkappa", "greekkoppa", "greeklambda", "greekmu", "greeknu", "greeknumerals", "greeknumkoppa", "greekomega", "greekomegadasia", "greekomegadasiaperispomeni", "greekomegadasiatonos", "greekomegadasiavaria", "greekomegaiotasub", "greekomegaiotasubdasia", "greekomegaiotasubdasiaperispomeni", "greekomegaiotasubdasiatonos", "greekomegaiotasubdasiavaria", "greekomegaiotasubperispomeni", "greekomegaiotasubpsili", "greekomegaiotasubpsiliperispomeni", "greekomegaiotasubpsilitonos", "greekomegaiotasubpsilivaria", "greekomegaiotasubtonos", "greekomegaiotasubvaria", "greekomegaoxia", "greekomegaperispomeni", "greekomegapsili", "greekomegapsiliperispomeni", "greekomegapsilitonos", "greekomegapsilivaria", "greekomegatonos", "greekomegavaria", "greekomicron", "greekomicrondasia", "greekomicrondasiatonos", "greekomicrondasiavaria", "greekomicronoxia", "greekomicronpsili", "greekomicronpsilitonos", "greekomicronpsilivaria", "greekomicrontonos", "greekomicronvaria", "greekoxia", "greekperispomeni", "greekphi", "greekphialt", "greekpi", "greekpialt", "greekprosgegrammeni", "greekpsi", "greekpsili", "greekpsiliperispomeni", "greekpsilivaria", "greekrho", "greekrhoalt", "greekrhodasia", "greekrhopsili", "greeksampi", "greeksigma", "greeksigmalunate", "greekstigma", "greektau", "greektheta", "greekthetaalt", "greektonos", "greekupsilon", "greekupsilondasia", "greekupsilondasiaperispomeni", "greekupsilondasiatonos", "greekupsilondasiavaria", "greekupsilondiaeresis", "greekupsilondialytikaperispomeni", "greekupsilondialytikatonos", "greekupsilondialytikavaria", "greekupsilonmacron", "greekupsilonoxia", "greekupsilonperispomeni", "greekupsilonpsili", "greekupsilonpsiliperispomeni", "greekupsilonpsilitonos", "greekupsilonpsilivaria", "greekupsilontonos", "greekupsilonvaria", "greekupsilonvrachy", "greekvaria", "greekxi", "greekzeta", "grid", "groupedcommand", "gsetboxllx", "gsetboxlly", "gstroke", "gt", "gtrapprox", "gtrdot", "gtreqless", "gtreqqless", "gtrless", "gtrsim", "guilsingleleft", "guilsingleright", "gujaratinumerals", "gurmurkhinumerals", "hairline", "hairspace", "halflinestrut", "halfstrut", "halfwaybox", "handletokens", "handwritten", "hangul", "hanzi", "hash", "hat", "hbar", "hboxofvbox", "hboxreference", "hcaron", "hcircumflex", "hdofstring", "headhbox", "headlanguage", "headnumber", "headnumbercontent", "headnumberdistance", "headnumberwidth", "headreferenceattributes", "headsetupspacing", "headtext", "headtextcontent", "headtextdistance", "headtexts", "headtextwidth", "headvbox", "headwidth", "heartsuit", "hebrewAlef", "hebrewAyin", "hebrewBet", "hebrewDalet", "hebrewGimel", "hebrewHe", "hebrewHet", "hebrewKaf", "hebrewKaffinal", "hebrewLamed", "hebrewMem", "hebrewMemfinal", "hebrewNun", "hebrewNunfinal", "hebrewPe", "hebrewPefinal", "hebrewQof", "hebrewResh", "hebrewSamekh", "hebrewShin", "hebrewTav", "hebrewTet", "hebrewTsadi", "hebrewTsadifinal", "hebrewVav", "hebrewYod", "hebrewZayin", "hebrewnumerals", "heightanddepthofstring", "heightofstring", "heightspanningtext", "helptext", "hexnumber", "hexstringtonumber", "hglue", "hiddenbar", "hiddencitation", "hiddencite", "hideblocks", "high", "highlight", "highordinalstr", "hilo", "himilo", "hl", "hookleftarrow", "hookrightarrow", "horizontalgrowingbar", "horizontalpositionbar", "hpackbox", "hpackedbox", "hphantom", "hpos", "hsizefraction", "hslash", "hsmash", "hsmashbox", "hsmashed", "hspace", "hstroke", "htdpofstring", "htofstring", "hyphen", "hyphenatedcoloredword", "hyphenatedfile", "hyphenatedfilename", "hyphenatedhbox", "hyphenatedpar", "hyphenatedurl", "hyphenatedword", "iacute", "ibox", "ibreve", "icaron", "icircumflex", "ideographichalffillspace", "ideographicspace", "idiaeresis", "idotaccent", "idotbelow", "idoublegrave", "idxfromluatable", "ifassignment", "iff", "ifinobject", "ifinoutputstream", "ifparameters", "iftrialtypesetting", "ignoreimplicitspaces", "ignoretagsinexport", "ignorevalue", "igrave", "ihook", "ii", "iiiint", "iiiintop", "iiint", "iiintop", "iint", "iintop", "iinvertedbreve", "ijligature", "imacron", "imaginaryi", "imaginaryj", "imath", "immediatesavetwopassdata", "impliedby", "implies", "imply", "in", "includemenu", "includesvgbuffer", "includesvgfile", "includeversioninfo", "increment", "incrementcounter", "incrementedcounter", "incrementpagenumber", "incrementsubpagenumber", "incrementvalue", "indentation", "index", "infofont", "infofontbold", "inframed", "infty", "infull", "inheritparameter", "inhibitblank", "ininner", "ininneredge", "ininnermargin", "initializeboxstack", "inleft", "inleftedge", "inleftmargin", "inline", "inlinebuffer", "inlinedbox", "inlinemath", "inlinemathematics", "inlinemessage", "inlineordisplaymath", "inlineprettyprintbuffer", "inlinerange", "inmargin", "inmframed", "innerflushshapebox", "inother", "inouter", "inouteredge", "inoutermargin", "input", "inputfilebarename", "inputfilename", "inputfilerealsuffix", "inputfilesuffix", "inputgivenfile", "inright", "inrightedge", "inrightmargin", "insertpages", "inspectluatable", "installactionhandler", "installactivecharacter", "installanddefineactivecharacter", "installattributestack", "installautocommandhandler", "installautosetuphandler", "installbasicautosetuphandler", "installbasicparameterhandler", "installbottomframerenderer", "installcommandhandler", "installcorenamespace", "installctxfunction", "installctxscanner", "installdefinehandler", "installdefinitionset", "installdefinitionsetmember", "installdirectcommandhandler", "installdirectparameterhandler", "installdirectparametersethandler", "installdirectsetuphandler", "installdirectstyleandcolorhandler", "installframedautocommandhandler", "installframedcommandhandler", "installglobalmacrostack", "installlanguage", "installleftframerenderer", "installmacrostack", "installnamespace", "installoutputroutine", "installpagearrangement", "installparameterhandler", "installparameterhashhandler", "installparametersethandler", "installparentinjector", "installprotectedctxfunction", "installprotectedctxscanner", "installrightframerenderer", "installrootparameterhandler", "installsetuphandler", "installsetuponlycommandhandler", "installshipoutmethod", "installsimplecommandhandler", "installsimpleframedcommandhandler", "installstyleandcolorhandler", "installswitchcommandhandler", "installswitchsetuphandler", "installtexdirective", "installtextracker", "installtopframerenderer", "installunitsseparator", "installunitsspace", "installversioninfo", "int", "intclockwise", "integerrounding", "integers", "interactionbar", "interactionbuttons", "interactionmenu", "intercal", "intertext", "interwordspaceafter", "interwordspacebefore", "interwordspaces", "interwordspacesafter", "interwordspacesbefore", "intop", "invisiblecomma", "invisibleplus", "invisibletimes", "invokepagehandler", "iogonek", "iota", "italic", "italicbold", "italiccorrection", "italicface", "item", "items", "itemtag", "itilde", "jcaron", "jcircumflex", "ji", "jmath", "jobfilename", "jobfilesuffix", "kap", "kappa", "kcaron", "kcommaaccent", "keepblocks", "keeplinestogether", "keepunwantedspaces", "kerncharacters", "khook", "kkra", "koreancirclenumerals", "koreannumerals", "koreannumeralsc", "koreannumeralsp", "koreanparentnumerals", "lVert", "labellanguage", "labeltext", "labeltexts", "lacute", "lambda", "lambdabar", "land", "langle", "language", "languageCharacters", "languagecharacters", "languagecharwidth", "laplace", "lastcounter", "lastcountervalue", "lastdigit", "lastlinewidth", "lastnaturalboxdp", "lastnaturalboxht", "lastnaturalboxwd", "lastparwrapper", "lastpredefinedsymbol", "lastrealpage", "lastrealpagenumber", "lastsubcountervalue", "lastsubpage", "lastsubpagenumber", "lasttwodigits", "lastuserpage", "lastuserpagenumber", "lateluacode", "latin", "layeredtext", "layerheight", "layerwidth", "lazysavetaggedtwopassdata", "lazysavetwopassdata", "lbar", "lbox", "lbrace", "lbracket", "lcaron", "lceil", "lchexnumber", "lchexnumbers", "lcommaaccent", "lcurl", "ldotmiddle", "ldotp", "ldots", "le", "leadsto", "left", "leftaligned", "leftarrow", "leftarrowtail", "leftarrowtriangle", "leftbottombox", "leftbox", "leftdasharrow", "leftguillemot", "leftharpoondown", "leftharpoonup", "lefthbox", "leftheadtext", "leftlabeltext", "leftleftarrows", "leftline", "leftmathlabeltext", "leftorrighthbox", "leftorrightvbox", "leftorrightvtop", "leftrightarrow", "leftrightarrows", "leftrightarrowtriangle", "leftrightharpoons", "leftrightsquigarrow", "leftskipadaption", "leftsquigarrow", "leftsubguillemot", "leftthreetimes", "lefttopbox", "lefttoright", "lefttorighthbox", "lefttorightvbox", "lefttorightvtop", "leftwavearrow", "leftwhitearrow", "leq", "leqq", "leqslant", "lessapprox", "lessdot", "lesseqgtr", "lesseqqgtr", "lessgtr", "lesssim", "letbeundefined", "letcatcodecommand", "letcscsname", "letcsnamecs", "letcsnamecsname", "letdummyparameter", "letempty", "letgvalue", "letgvalueempty", "letgvalurelax", "letterampersand", "letterat", "letterbackslash", "letterbar", "letterbgroup", "letterclosebrace", "lettercolon", "letterdollar", "letterdoublequote", "letteregroup", "letterescape", "letterexclamationmark", "letterhash", "letterhat", "letterleftbrace", "letterleftbracket", "letterleftparenthesis", "letterless", "lettermore", "letteropenbrace", "letterpercent", "letterquestionmark", "letterrightbrace", "letterrightbracket", "letterrightparenthesis", "lettersinglequote", "letterslash", "letterspacing", "lettertilde", "letterunderscore", "letvalue", "letvalueempty", "letvaluerelax", "lfence", "lfloor", "lgroup", "lhbox", "lhooknwarrow", "lhooksearrow", "limitatefirstline", "limitatelines", "limitatetext", "line", "linebox", "linefeed", "linefillerhbox", "linefillervbox", "linefillervtop", "linenote", "linespanningtext", "linethickness", "linterval", "listcitation", "listcite", "listlength", "listnamespaces", "literalmode", "ljligature", "ll", "llangle", "llap", "llbracket", "llcorner", "lll", "llless", "llointerval", "lmoustache", "lnapprox", "lneq", "lneqq", "lnot", "lnsim", "loadanyfile", "loadanyfileonce", "loadbtxdefinitionfile", "loadbtxreplacementfile", "loadcldfile", "loadcldfileonce", "loadfontgoodies", "loadluafile", "loadluafileonce", "loadspellchecklist", "loadtexfile", "loadtexfileonce", "loadtypescriptfile", "localframed", "localframedwithsettings", "localhsize", "localpopbox", "localpopmacro", "localpushbox", "localpushmacro", "localundefine", "locatedfilepath", "locatefilepath", "locfilename", "logo", "lohi", "lointerval", "lomihi", "longleftarrow", "longleftrightarrow", "longmapsfrom", "longmapsto", "longrightarrow", "longrightsquigarrow", "looparrowleft", "looparrowright", "lor", "low", "lowerbox", "lowercased", "lowercasestring", "lowercasing", "lowerleftdoubleninequote", "lowerleftsingleninequote", "lowerrightdoubleninequote", "lowerrightsingleninequote", "lozenge", "lparent", "lrcorner", "lrointerval", "lrtbbox", "lstroke", "lt", "ltimes", "ltop", "ltrhbox", "ltrvbox", "ltrvtop", "luaTeX", "luacode", "luaconditional", "luaenvironment", "luaexpanded", "luaexpr", "luafunction", "luajitTeX", "luamajorversion", "luametaTeX", "luaminorversion", "luaparameterset", "luasetup", "luaversion", "lvert", "m", "mLeftarrow", "mLeftrightarrow", "mRightarrow", "mainlanguage", "makecharacteractive", "makerawcommalist", "makestrutofbox", "maltese", "mapfontsize", "mapsdown", "mapsfrom", "mapsto", "mapsup", "margindata", "margintext", "markcontent", "markedpages", "marking", "markinjector", "markpage", "markreferencepage", "mat", "math", "mathampersand", "mathbf", "mathbi", "mathblackboard", "mathbs", "mathdefault", "mathdollar", "mathdouble", "mathematics", "mathfraktur", "mathfunction", "mathhash", "mathhyphen", "mathit", "mathitalic", "mathlabellanguage", "mathlabeltext", "mathlabeltexts", "mathop", "mathover", "mathpercent", "mathrm", "mathscript", "mathsl", "mathss", "mathtext", "mathtextbf", "mathtextbi", "mathtextbs", "mathtextit", "mathtextsl", "mathtexttf", "mathtf", "mathtriplet", "mathtt", "mathunder", "mathupright", "mathword", "mathwordbf", "mathwordbi", "mathwordbs", "mathwordit", "mathwordsl", "mathwordtf", "maxaligned", "mbox", "mcframed", "measure", "measured", "measuredangle", "measuredeq", "medskip", "medspace", "menubutton", "mequal", "message", "mfence", "mframed", "mfunction", "mfunctionlabeltext", "mhbox", "mho", "mhookleftarrow", "mhookrightarrow", "mid", "midaligned", "middle", "middlealigned", "middlebox", "midhbox", "midsubsentence", "minimalhbox", "minus", "minuscolon", "mirror", "mixedcaps", "mkvibuffer", "mleftarrow", "mleftharpoondown", "mleftharpoonup", "mleftrightarrow", "mleftrightharpoons", "mmapsto", "models", "moduleparameter", "molecule", "mono", "monobold", "mononormal", "month", "monthlong", "monthshort", "mp", "mprandomnumber", "mrel", "mrightarrow", "mrightharpoondown", "mrightharpoonup", "mrightleftharpoons", "mrightoverleftarrow", "mtext", "mtriplerel", "mtwoheadleftarrow", "mtwoheadrightarrow", "mu", "multimap", "nHdownarrow", "nHuparrow", "nLeftarrow", "nLeftrightarrow", "nRightarrow", "nVDash", "nVdash", "nVleftarrow", "nVleftrightarrow", "nVrightarrow", "nabla", "nacute", "namedheadnumber", "namedstructureheadlocation", "namedstructureuservariable", "namedstructurevariable", "namedtaggedlabeltexts", "napostrophe", "napprox", "napproxEq", "narrownobreakspace", "nasymp", "natural", "naturalhbox", "naturalhpack", "naturalnumbers", "naturaltpack", "naturalvbox", "naturalvcenter", "naturalvpack", "naturalvtop", "naturalwd", "ncaron", "ncommaaccent", "ncong", "ncurl", "ndivides", "ne", "nearrow", "neg", "negatecolorbox", "negated", "negativesign", "negemspace", "negenspace", "negthinspace", "neng", "neq", "nequiv", "neswarrow", "newattribute", "newcatcodetable", "newcounter", "newevery", "newfrenchspacing", "newluatable", "newmode", "newsignal", "newsystemmode", "nexists", "nextbox", "nextboxdp", "nextboxht", "nextboxhtdp", "nextboxwd", "nextcounter", "nextcountervalue", "nextdepth", "nextparagraphs", "nextrealpage", "nextrealpagenumber", "nextsubcountervalue", "nextsubpage", "nextsubpagenumber", "nextuserpage", "nextuserpagenumber", "ngeq", "ngrave", "ngtr", "ngtrless", "ngtrsim", "ni", "nihongo", "nin", "njligature", "nleftarrow", "nleftrightarrow", "nleq", "nless", "nlessgtr", "nlesssim", "nmid", "nni", "nobar", "nobreakspace", "nocap", "nocharacteralign", "nocitation", "nocite", "nodetostring", "noffigurepages", "noflines", "noflinesinbox", "noflocalfloats", "noheaderandfooterlines", "noheightstrut", "nohyphens", "noindentation", "noitem", "nonfrenchspacing", "nonmathematics", "nonvalidassignment", "normal", "normalboldface", "normalframedwithsettings", "normalitalicface", "normalizebodyfontsize", "normalizedfontsize", "normalizefontdepth", "normalizefontheight", "normalizefontline", "normalizefontwidth", "normalizetextdepth", "normalizetextheight", "normalizetextline", "normalizetextwidth", "normalslantedface", "normaltypeface", "nospace", "not", "note", "notesymbol", "notin", "notopandbottomlines", "notragged", "nowns", "nparallel", "nprec", "npreccurlyeq", "nrightarrow", "nsim", "nsimeq", "nsqsubseteq", "nsqsupseteq", "nsubset", "nsubseteq", "nsucc", "nsucccurlyeq", "nsupset", "nsupseteq", "ntilde", "ntimes", "ntriangleleft", "ntrianglelefteq", "ntriangleright", "ntrianglerighteq", "nu", "numberofpoints", "numbers", "nvDash", "nvdash", "nvleftarrow", "nvleftrightarrow", "nvrightarrow", "nwarrow", "nwsearrow", "oacute", "obeydepth", "objectdepth", "objectheight", "objectmargin", "objectwidth", "obox", "obreve", "ocaron", "ocircumflex", "ocircumflexacute", "ocircumflexdotbelow", "ocircumflexgrave", "ocircumflexhook", "ocircumflextilde", "octnumber", "octstringtonumber", "odiaeresis", "odiaeresismacron", "odot", "odotaccent", "odotaccentmacron", "odotbelow", "odoublegrave", "oeligature", "offset", "offsetbox", "ograve", "ohm", "ohook", "ohorn", "ohornacute", "ohorndotbelow", "ohorngrave", "ohornhook", "ohorntilde", "ohungarumlaut", "oiiint", "oiint", "oint", "ointclockwise", "ointctrclockwise", "oinvertedbreve", "omacron", "omega", "omicron", "ominus", "onedigitrounding", "oneeighth", "onefifth", "onehalf", "onequarter", "onesixth", "onesuperior", "onethird", "oogonek", "oogonekmacron", "operatorlanguage", "operatortext", "oplus", "ordfeminine", "ordinaldaynumber", "ordinalstr", "ordmasculine", "ornamenttext", "oslash", "ostroke", "ostrokeacute", "otilde", "otildemacron", "otimes", "outputfilename", "outputstreambox", "outputstreamcopy", "outputstreamunvbox", "outputstreamunvcopy", "over", "overbar", "overbars", "overbartext", "overbarunderbar", "overbrace", "overbracetext", "overbraceunderbrace", "overbracket", "overbrackettext", "overbracketunderbracket", "overlaybutton", "overlaycolor", "overlaydepth", "overlayfigure", "overlayheight", "overlayimage", "overlaylinecolor", "overlaylinewidth", "overlayoffset", "overlayrollbutton", "overlaywidth", "overleftarrow", "overleftharpoondown", "overleftharpoonup", "overleftrightarrow", "overloaderror", "overparent", "overparenttext", "overparentunderparent", "overrightarrow", "overrightharpoondown", "overrightharpoonup", "overset", "overstrike", "overstrikes", "overtwoheadleftarrow", "overtwoheadrightarrow", "owns", "page", "pagearea", "pagebreak", "pagefigure", "pageinjection", "pagenumber", "pagereference", "pagestaterealpage", "pagestaterealpageorder", "paletsize", "paragraphmark", "parallel", "part", "partial", "pdfTeX", "pdfactualtext", "pdfbackendactualtext", "pdfbackendcurrentresources", "pdfbackendsetcatalog", "pdfbackendsetcolorspace", "pdfbackendsetextgstate", "pdfbackendsetinfo", "pdfbackendsetname", "pdfbackendsetpageattribute", "pdfbackendsetpageresource", "pdfbackendsetpagesattribute", "pdfbackendsetpattern", "pdfbackendsetshade", "pdfcolor", "pdfeTeX", "percent", "percentdimen", "periodcentered", "periods", "permitcaretescape", "permitcircumflexescape", "permitspacesbetweengroups", "perp", "persiandecimals", "persiandecimalseparator", "persiannumerals", "persianthousandsseparator", "perthousand", "phantom", "phantombox", "phi", "phook", "pi", "pickupgroupedcommand", "pitchfork", "placeattachments", "placebookmarks", "placebtxrendering", "placechemical", "placecitation", "placecombinedlist", "placecomments", "placecontent", "placecurrentformulanumber", "placedbox", "placefigure", "placefloat", "placefloatcaption", "placefloatwithsetups", "placefootnotes", "placeformula", "placeframed", "placegraphic", "placeheadnumber", "placeheadtext", "placehelp", "placeholder", "placeindex", "placeinitial", "placeintermezzo", "placelayer", "placelayeredtext", "placelegend", "placelist", "placelistofabbreviations", "placelistofchemicals", "placelistoffigures", "placelistofgraphics", "placelistofintermezzi", "placelistoflogos", "placelistofpublications", "placelistofsorts", "placelistofsynonyms", "placelistoftables", "placelocalfootnotes", "placelocalnotes", "placement", "placenamedfloat", "placenamedformula", "placenotes", "placeongrid", "placeontopofeachother", "placepagenumber", "placepairedbox", "placeparallel", "placerawheaddata", "placerawheadnumber", "placerawheadtext", "placerawlist", "placeregister", "placerenderingwindow", "placesidebyside", "placesubformula", "placetable", "pm", "popattribute", "popmacro", "popmode", "popsystemmode", "position", "positionoverlay", "positionregionoverlay", "positivesign", "postponenotes", "prec", "precapprox", "preccurlyeq", "preceq", "preceqq", "precnapprox", "precneq", "precneqq", "precnsim", "precsim", "predefinedfont", "predefinefont", "predefinesymbol", "prefixedpagenumber", "prefixlanguage", "prefixtext", "prependetoks", "prependgvalue", "prependtocommalist", "prependtoks", "prependtoksonce", "prependvalue", "prerollblank", "presetbtxlabeltext", "presetdocument", "presetfieldsymbols", "presetheadtext", "presetlabeltext", "presetmathlabeltext", "presetoperatortext", "presetprefixtext", "presetsuffixtext", "presettaglabeltext", "presetunittext", "pretocommalist", "prettyprintbuffer", "prevcounter", "prevcountervalue", "preventmode", "prevrealpage", "prevrealpagenumber", "prevsubcountervalue", "prevsubpage", "prevsubpagenumber", "prevuserpage", "prevuserpagenumber", "prime", "primes", "procent", "processMPbuffer", "processMPfigurefile", "processaction", "processallactionsinset", "processassignlist", "processassignmentcommand", "processassignmentlist", "processbetween", "processblocks", "processbodyfontenvironmentlist", "processcolorcomponents", "processcommacommand", "processcommalist", "processcommalistwithparameters", "processcontent", "processfile", "processfilemany", "processfilenone", "processfileonce", "processfirstactioninset", "processisolatedchars", "processisolatedwords", "processlinetablebuffer", "processlinetablefile", "processlist", "processmonth", "processranges", "processseparatedlist", "processtexbuffer", "processtokens", "processuntil", "processxtablebuffer", "processyear", "prod", "product", "profiledbox", "profilegivenbox", "program", "project", "propto", "pseudoMixedCapped", "pseudoSmallCapped", "pseudoSmallcapped", "pseudosmallcapped", "psi", "punctuationspace", "purenumber", "pushattribute", "pushbutton", "pushmacro", "pushmode", "pushoutputstream", "pushsystemmode", "putboxincache", "putnextboxincache", "qquad", "quad", "quadrupleprime", "quads", "quarterstrut", "questiondown", "questionedeq", "quitcommalist", "quitprevcommalist", "quittypescriptscanning", "quotation", "quote", "quotedbl", "quotedblbase", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "quotesingle", "quotesinglebase", "rVert", "racute", "raggedbottom", "raggedcenter", "raggedleft", "raggedright", "raggedwidecenter", "raisebox", "randomizetext", "randomnumber", "rangle", "rationals", "rawcounter", "rawcountervalue", "rawdate", "rawdoifelseinset", "rawdoifinset", "rawdoifinsetelse", "rawgetparameters", "rawprocessaction", "rawprocesscommacommand", "rawprocesscommalist", "rawstructurelistuservariable", "rawsubcountervalue", "rbox", "rbrace", "rbracket", "rcaron", "rceil", "rcommaaccent", "rdoublegrave", "readfile", "readfixfile", "readjobfile", "readlocfile", "readsetfile", "readsysfile", "readtexfile", "readxmlfile", "realSmallCapped", "realSmallcapped", "realpagenumber", "reals", "realsmallcapped", "recursedepth", "recurselevel", "recursestring", "redoconvertfont", "ref", "reference", "referencecolumnnumber", "referencepagedetail", "referencepagestate", "referenceprefix", "referencerealpage", "referencesymbol", "referring", "registerattachment", "registerctxluafile", "registered", "registerexternalfigure", "registerfontclass", "registerhyphenationexception", "registerhyphenationpattern", "registermenubuttons", "registerparwrapper", "registerparwrapperreverse", "registersort", "registersynonym", "registerunit", "regular", "relatemarking", "relateparameterhandlers", "relaxvalueifundefined", "relbar", "remainingcharacters", "remark", "removebottomthings", "removedepth", "removefromcommalist", "removelastskip", "removelastspace", "removemarkedcontent", "removepunctuation", "removesubstring", "removetoks", "removeunwantedspaces", "repeathead", "replacefeature", "replaceincommalist", "replaceword", "rescan", "rescanwithsetup", "resetMPdrawing", "resetMPenvironment", "resetMPinstance", "resetallattributes", "resetandaddfeature", "resetbar", "resetboxesincache", "resetbreakpoints", "resetbuffer", "resetcharacteralign", "resetcharacterkerning", "resetcharacterspacing", "resetcharacterstripping", "resetcollector", "resetcounter", "resetctxscanner", "resetdigitsmanipulation", "resetdirection", "resetfeature", "resetflag", "resetfontcolorsheme", "resetfontfallback", "resetfontsolution", "resethyphenationfeatures", "resetinjector", "resetinteractionmenu", "resetitaliccorrection", "resetlayer", "resetlocalfloats", "resetmarker", "resetmarking", "resetmode", "resetpagenumber", "resetparallel", "resetpath", "resetpenalties", "resetperiodkerning", "resetprofile", "resetrecurselevel", "resetreference", "resetreplacements", "resetscript", "resetsetups", "resetshownsynonyms", "resetsubpagenumber", "resetsymbolset", "resetsystemmode", "resettimer", "resettokenlist", "resettrackers", "resettrialtypesetting", "resetusedsortings", "resetusedsynonyms", "resetuserpagenumber", "resetvalue", "resetvisualizers", "reshapebox", "resolvedglyphdirect", "resolvedglyphstyled", "restartcounter", "restorebox", "restorecatcodes", "restorecounter", "restorecurrentattributes", "restoreendofline", "restoreglobalbodyfont", "restriction", "retestfeature", "reusableMPgraphic", "reuseMPgraphic", "reuserandomseed", "reverseddoubleprime", "reversedprime", "reversedtripleprime", "reversehbox", "reversehpack", "reversetpack", "reversevbox", "reversevboxcontent", "reversevpack", "reversevtop", "revivefeature", "rfence", "rfloor", "rgroup", "rhbox", "rho", "rhooknearrow", "rhookswarrow", "right", "rightaligned", "rightangle", "rightarrow", "rightarrowbar", "rightarrowtail", "rightarrowtriangle", "rightbottombox", "rightbox", "rightdasharrow", "rightguillemot", "rightharpoondown", "rightharpoonup", "righthbox", "rightheadtext", "rightlabeltext", "rightleftarrows", "rightleftharpoons", "rightline", "rightmathlabeltext", "rightorleftpageaction", "rightpageorder", "rightrightarrows", "rightskipadaption", "rightsquigarrow", "rightsubguillemot", "rightthreearrows", "rightthreetimes", "righttoleft", "righttolefthbox", "righttoleftvbox", "righttoleftvtop", "righttopbox", "rightwavearrow", "rightwhitearrow", "ring", "rinterval", "rinvertedbreve", "risingdotseq", "rlap", "rlointerval", "rmoustache", "rneq", "robustaddtocommalist", "robustdoifelseinset", "robustdoifinsetelse", "robustpretocommalist", "rointerval", "rollbutton", "roman", "romanC", "romanD", "romanI", "romanII", "romanIII", "romanIV", "romanIX", "romanL", "romanM", "romanV", "romanVI", "romanVII", "romanVIII", "romanX", "romanXI", "romanXII", "romanc", "romand", "romani", "romanii", "romaniii", "romaniv", "romanix", "romanl", "romanm", "romannumerals", "romanv", "romanvi", "romanvii", "romanviii", "romanx", "romanxi", "romanxii", "rootradical", "rotate", "rparent", "rrangle", "rrbracket", "rrointerval", "rtimes", "rtlhbox", "rtlvbox", "rtlvtop", "rtop", "ruby", "ruledhbox", "ruledhpack", "ruledmbox", "ruledtopv", "ruledtpack", "ruledvbox", "ruledvpack", "ruledvtop", "runMPbuffer", "runninghbox", "russianNumerals", "russiannumerals", "rvert", "sacute", "safechar", "samplefile", "sans", "sansbold", "sansnormal", "sansserif", "savebox", "savebtxdataset", "savebuffer", "savecounter", "savecurrentattributes", "savenormalmeaning", "savetaggedtwopassdata", "savetwopassdata", "sbox", "scale", "scaron", "scedilla", "schwa", "schwahook", "scircumflex", "scommaaccent", "screen", "searrow", "secondoffivearguments", "secondoffourarguments", "secondofsixarguments", "secondofthreearguments", "secondofthreeunexpanded", "secondoftwoarguments", "secondoftwounexpanded", "section", "sectionmark", "seeindex", "select", "selectblocks", "serializecommalist", "serializedcommalist", "serif", "serifbold", "serifnormal", "setJSpreamble", "setMPlayer", "setMPpositiongraphic", "setMPpositiongraphicrange", "setMPtext", "setMPvariable", "setMPvariables", "setautopagestaterealpageno", "setbar", "setbigbodyfont", "setboxllx", "setboxlly", "setbreakpoints", "setcapstrut", "setcatcodetable", "setcharacteralign", "setcharacteraligndetail", "setcharactercasing", "setcharactercleaning", "setcharacterkerning", "setcharacterspacing", "setcharacterstripping", "setcharstrut", "setcollector", "setcolormodell", "setcounter", "setcounterown", "setctxluafunction", "setcurrentfontclass", "setdataset", "setdatavalue", "setdefaultpenalties", "setdigitsmanipulation", "setdirection", "setdocumentargument", "setdocumentargumentdefault", "setdocumentfilename", "setdummyparameter", "setelementexporttag", "setemeasure", "setevalue", "setevariable", "setevariables", "setexpansion", "setfirstline", "setfirstpasscharacteralign", "setflag", "setfont", "setfontcolorsheme", "setfontfeature", "setfontsolution", "setfontstrut", "setfractions", "setglobalscript", "setgmeasure", "setgvalue", "setgvariable", "setgvariables", "sethboxregister", "sethyphenatedurlafter", "sethyphenatedurlbefore", "sethyphenatedurlnormal", "sethyphenationfeatures", "setinitial", "setinjector", "setinteraction", "setinterfacecommand", "setinterfaceconstant", "setinterfaceelement", "setinterfacemessage", "setinterfacevariable", "setinternalrendering", "setitaliccorrection", "setlayer", "setlayerframed", "setlayertext", "setlinefiller", "setlocalhsize", "setlocalscript", "setluatable", "setmainbodyfont", "setmainparbuilder", "setmarker", "setmarking", "setmathstyle", "setmeasure", "setmessagetext", "setminus", "setmode", "setnostrut", "setnote", "setnotetext", "setobject", "setoldstyle", "setpagereference", "setpagestate", "setpagestaterealpageno", "setparagraphfreezing", "setpenalties", "setpercentdimen", "setperiodkerning", "setposition", "setpositionbox", "setpositiondata", "setpositiondataplus", "setpositiononly", "setpositionplus", "setpositionstrut", "setprofile", "setrandomseed", "setreference", "setreferencedobject", "setregisterentry", "setreplacements", "setrigidcolumnbalance", "setrigidcolumnhsize", "setscript", "setsecondpasscharacteralign", "setsectionblock", "setsimplecolumnshsize", "setsmallbodyfont", "setsmallcaps", "setstackbox", "setstructurepageregister", "setstrut", "setsuperiors", "setsystemmode", "settabular", "settaggedmetadata", "settestcrlf", "settextcontent", "settightobject", "settightreferencedobject", "settightstrut", "settightunreferencedobject", "settokenlist", "settrialtypesetting", "setuevalue", "setugvalue", "setunreferencedobject", "setup", "setupMPgraphics", "setupMPinstance", "setupMPpage", "setupMPvariables", "setupTABLE", "setupTEXpage", "setupalign", "setupalternativestyles", "setuparranging", "setupattachment", "setupattachments", "setupbackend", "setupbackground", "setupbackgrounds", "setupbar", "setupbars", "setupblackrules", "setupblank", "setupbleeding", "setupblock", "setupbodyfont", "setupbodyfontenvironment", "setupbookmark", "setupbottom", "setupbottomtexts", "setupbtx", "setupbtxdataset", "setupbtxlabeltext", "setupbtxlist", "setupbtxregister", "setupbtxrendering", "setupbuffer", "setupbutton", "setupcapitals", "setupcaption", "setupcaptions", "setupcharacteralign", "setupcharacterkerning", "setupcharacterspacing", "setupchemical", "setupchemicalframed", "setupclipping", "setupcollector", "setupcolor", "setupcolors", "setupcolumns", "setupcolumnset", "setupcolumnsetarea", "setupcolumnsetareatext", "setupcolumnsetlines", "setupcolumnsetspan", "setupcolumnsetstart", "setupcombination", "setupcombinedlist", "setupcomment", "setupcontent", "setupcounter", "setupdataset", "setupdelimitedtext", "setupdescription", "setupdescriptions", "setupdirections", "setupdocument", "setupeffect", "setupenumeration", "setupenumerations", "setupenv", "setupexpansion", "setupexport", "setupexternalfigure", "setupexternalfigures", "setupexternalsoundtracks", "setupfacingfloat", "setupfield", "setupfieldbody", "setupfieldcategory", "setupfieldcontentframed", "setupfieldlabelframed", "setupfields", "setupfieldtotalframed", "setupfiller", "setupfillinlines", "setupfillinrules", "setupfirstline", "setupfittingpage", "setupfloat", "setupfloatframed", "setupfloats", "setupfloatsplitting", "setupfontexpansion", "setupfontprotrusion", "setupfonts", "setupfontsolution", "setupfooter", "setupfootertexts", "setupfootnotes", "setupforms", "setupformula", "setupformulae", "setupformulaframed", "setupframed", "setupframedcontent", "setupframedtable", "setupframedtablecolumn", "setupframedtablerow", "setupframedtext", "setupframedtexts", "setupglobalreferenceprefix", "setuphead", "setupheadalternative", "setupheader", "setupheadertexts", "setupheadnumber", "setupheads", "setupheadtext", "setuphelp", "setuphigh", "setuphighlight", "setuphyphenation", "setuphyphenmark", "setupindentedtext", "setupindenting", "setupindex", "setupinitial", "setupinsertion", "setupinteraction", "setupinteractionbar", "setupinteractionmenu", "setupinteractionscreen", "setupinterlinespace", "setupitaliccorrection", "setupitemgroup", "setupitemizations", "setupitemize", "setupitems", "setuplabel", "setuplabeltext", "setuplanguage", "setuplayer", "setuplayeredtext", "setuplayout", "setuplayouttext", "setuplegend", "setuplinefiller", "setuplinefillers", "setuplinenote", "setuplinenumbering", "setuplines", "setuplinetable", "setuplinewidth", "setuplist", "setuplistalternative", "setuplistextra", "setuplocalfloats", "setuplocalinterlinespace", "setuplow", "setuplowhigh", "setuplowmidhigh", "setupmakeup", "setupmarginblock", "setupmargindata", "setupmarginframed", "setupmarginrule", "setupmarginrules", "setupmarking", "setupmathalignment", "setupmathcases", "setupmathematics", "setupmathfence", "setupmathfraction", "setupmathfractions", "setupmathframed", "setupmathlabeltext", "setupmathmatrix", "setupmathornament", "setupmathradical", "setupmathstackers", "setupmathstyle", "setupmixedcolumns", "setupmodule", "setupmulticolumns", "setupnarrower", "setupnotation", "setupnotations", "setupnote", "setupnotes", "setupoffset", "setupoffsetbox", "setupoperatortext", "setupoppositeplacing", "setuporientation", "setupoutput", "setupoutputroutine", "setuppagechecker", "setuppagecolumns", "setuppagecomment", "setuppageinjection", "setuppageinjectionalternative", "setuppagenumber", "setuppagenumbering", "setuppageshift", "setuppagestate", "setuppagetransitions", "setuppairedbox", "setuppalet", "setuppaper", "setuppapersize", "setupparagraph", "setupparagraphintro", "setupparagraphnumbering", "setupparagraphs", "setupparallel", "setupperiodkerning", "setupperiods", "setupplaceholder", "setupplacement", "setuppositionbar", "setuppositioning", "setupprefixtext", "setupprocessor", "setupprofile", "setupprograms", "setupquotation", "setupquote", "setuprealpagenumber", "setupreferenceformat", "setupreferenceprefix", "setupreferencestructureprefix", "setupreferencing", "setupregister", "setupregisters", "setuprenderingwindow", "setuprotate", "setupruby", "setups", "setupscale", "setupscript", "setupscripts", "setupsectionblock", "setupselector", "setupshift", "setupsidebar", "setupsorting", "setupspacing", "setupspellchecking", "setupstartstop", "setupstretched", "setupstrut", "setupstyle", "setupsubformula", "setupsubformulas", "setupsubpagenumber", "setupsuffixtext", "setupsymbols", "setupsymbolset", "setupsynctex", "setupsynonyms", "setupsystem", "setuptables", "setuptabulate", "setuptagging", "setuptaglabeltext", "setuptext", "setuptextbackground", "setuptextflow", "setuptextnote", "setuptextrules", "setuptexttexts", "setupthinrules", "setuptolerance", "setuptooltip", "setuptop", "setuptoptexts", "setuptype", "setuptyping", "setupunit", "setupunittext", "setupurl", "setupuserdata", "setupuserdataalternative", "setupuserpagenumber", "setupversion", "setupviewerlayer", "setupvspacing", "setupwhitespace", "setupwithargument", "setupwithargumentswapped", "setupxml", "setupxtable", "setuvalue", "setuxvalue", "setvalue", "setvariable", "setvariables", "setvboxregister", "setvisualizerfont", "setvtopregister", "setwidthof", "setxmeasure", "setxvalue", "setxvariable", "setxvariables", "seveneighths", "sfrac", "shapedhbox", "sharp", "shiftbox", "shiftdown", "shiftup", "showallmakeup", "showattributes", "showbodyfont", "showbodyfontenvironment", "showboxes", "showbtxdatasetauthors", "showbtxdatasetcompleteness", "showbtxdatasetfields", "showbtxfields", "showbtxhashedauthors", "showbtxtables", "showchardata", "showcharratio", "showcolor", "showcolorbar", "showcolorcomponents", "showcolorgroup", "showcolorset", "showcolorstruts", "showcounter", "showdirectives", "showdirsinmargin", "showedebuginfo", "showexperiments", "showfont", "showfontdata", "showfontexpansion", "showfontitalics", "showfontkerns", "showfontparameters", "showfontstrip", "showfontstyle", "showframe", "showglyphdata", "showglyphs", "showgrid", "showgridsnapping", "showhelp", "showhyphenationtrace", "showhyphens", "showinjector", "showjustification", "showkerning", "showlayout", "showlayoutcomponents", "showligature", "showligatures", "showlogcategories", "showluatables", "showmakeup", "showmargins", "showmessage", "showminimalbaseline", "shownextbox", "showotfcomposition", "showpalet", "showparentchain", "showparwrapperstate", "showprint", "showsetups", "showsetupsdefinition", "showstruts", "showsymbolset", "showtimer", "showtokens", "showtrackers", "showvalue", "showvariable", "showwarning", "sigma", "signalrightpage", "sim", "simeq", "simplealignedbox", "simplealignedboxplus", "simplealignedspreadbox", "simplegroupedcommand", "simplereversealignedbox", "simplereversealignedboxplus", "singalcharacteralign", "singlebond", "singleverticalbar", "sixperemspace", "sixthofsixarguments", "slanted", "slantedbold", "slantedface", "slash", "slicepages", "slong", "slovenianNumerals", "sloveniannumerals", "small", "smallbodyfont", "smallbold", "smallbolditalic", "smallboldslanted", "smallcappedcharacters", "smallcappedromannumerals", "smallcaps", "smaller", "smallitalicbold", "smallnormal", "smallskip", "smallslanted", "smallslantedbold", "smalltype", "smash", "smashbox", "smashboxed", "smashedhbox", "smashedvbox", "smile", "snaptogrid", "softhyphen", "solidus", "someheadnumber", "somekindoftab", "someline", "somelocalfloat", "somenamedheadnumber", "someplace", "somewhere", "space", "spaceddigits", "spaceddigitsmethod", "spaceddigitsseparator", "spaceddigitssymbol", "spadesuit", "spanishNumerals", "spanishnumerals", "speech", "sphericalangle", "splitatasterisk", "splitatcolon", "splitatcolons", "splitatcomma", "splitatperiod", "splitdfrac", "splitfilename", "splitfloat", "splitfrac", "splitoffbase", "splitofffull", "splitoffkind", "splitoffname", "splitoffpath", "splitoffroot", "splitofftokens", "splitofftype", "splitstring", "spreadhbox", "sqcap", "sqcup", "sqrt", "sqsubset", "sqsubseteq", "sqsubsetneq", "sqsupset", "sqsupseteq", "sqsupsetneq", "square", "squaredots", "ssharp", "stackrel", "stackscripts", "star", "stareq", "startJScode", "startJSpreamble", "startLUA", "startMP", "startMPclip", "startMPcode", "startMPdefinitions", "startMPdrawing", "startMPenvironment", "startMPextensions", "startMPinclusions", "startMPinitializations", "startMPpage", "startMPpositiongraphic", "startMPpositionmethod", "startMPrun", "startPARSEDXML", "startTABLE", "startTABLEbody", "startTABLEfoot", "startTABLEhead", "startTABLEnested", "startTABLEnext", "startTC", "startTD", "startTDs", "startTEX", "startTEXpage", "startTH", "startTN", "startTR", "startTRs", "startTX", "startTY", "startXML", "startalign", "startalignment", "startallmodes", "startappendices", "startarrangedpages", "startasciimode", "startaside", "startattachment", "startbackground", "startbackmatter", "startbar", "startbbordermatrix", "startbitmapimage", "startblockquote", "startbodymatter", "startbordermatrix", "startboxedcolumns", "startbtxlabeltext", "startbtxrenderingdefinitions", "startbuffer", "startcases", "startcatcodetable", "startcenteraligned", "startchapter", "startcharacteralign", "startcheckedfences", "startchemical", "startchemicaltext", "startcollect", "startcollecting", "startcolor", "startcolorintent", "startcoloronly", "startcolorset", "startcolumns", "startcolumnset", "startcolumnsetspan", "startcombination", "startcomment", "startcomponent", "startcontextcode", "startcontextdefinitioncode", "startctxfunction", "startctxfunctiondefinition", "startcurrentcolor", "startcurrentlistentrywrapper", "startdelimited", "startdelimitedtext", "startdisplaymath", "startdmath", "startdocument", "starteffect", "startelement", "startembeddedxtable", "startendnote", "startendofline", "startenvironment", "startexceptions", "startexpanded", "startexpandedcollect", "startextendedcatcodetable", "startexternalfigurecollection", "startfacingfloat", "startfact", "startfigure", "startfiguretext", "startfittingpage", "startfixed", "startfloatcombination", "startfont", "startfontclass", "startfontsolution", "startfootnote", "startformula", "startformulas", "startframed", "startframedcell", "startframedcontent", "startframedrow", "startframedtable", "startframedtext", "startfrontmatter", "startgoto", "startgraphictext", "startgridsnapping", "starthanging", "starthbox", "starthboxestohbox", "starthboxregister", "starthead", "startheadtext", "starthelptext", "starthiding", "starthighlight", "starthyphenation", "startimath", "startindentation", "startindentedtext", "startinteraction", "startinteractionmenu", "startinterface", "startintermezzotext", "startintertext", "startitem", "startitemgroup", "startitemgroupcolumns", "startitemize", "startknockout", "startlabeltext", "startlanguage", "startlayout", "startleftaligned", "startlegend", "startline", "startlinealignment", "startlinecorrection", "startlinefiller", "startlinenote", "startlinenumbering", "startlines", "startlinetable", "startlinetablebody", "startlinetablecell", "startlinetablehead", "startlocalfootnotes", "startlocalheadsetup", "startlocallinecorrection", "startlocalnotes", "startlocalsetups", "startlua", "startluacode", "startluaparameterset", "startluasetups", "startmakeup", "startmarginblock", "startmarginrule", "startmarkedcontent", "startmarkpages", "startmathalignment", "startmathcases", "startmathlabeltext", "startmathmatrix", "startmathmode", "startmathstyle", "startmatrices", "startmatrix", "startmaxaligned", "startmdformula", "startmidaligned", "startmiddlealigned", "startmiddlemakeup", "startmixedcolumns", "startmode", "startmodeset", "startmodule", "startmoduletestsection", "startmpformula", "startmulticolumns", "startnamedsection", "startnamedsubformulas", "startnarrow", "startnarrower", "startnegative", "startnicelyfilledbox", "startnointerference", "startnotallmodes", "startnotext", "startnotmode", "startoperatortext", "startopposite", "startoutputstream", "startoverlay", "startoverprint", "startpacked", "startpagecolumns", "startpagecomment", "startpagefigure", "startpagelayout", "startpagemakeup", "startpar", "startparagraph", "startparagraphs", "startparagraphscell", "startparbuilder", "startpart", "startpath", "startplacechemical", "startplacefigure", "startplacefloat", "startplaceformula", "startplacegraphic", "startplaceintermezzo", "startplacelegend", "startplacepairedbox", "startplacetable", "startpositioning", "startpositionoverlay", "startpositive", "startpostponing", "startpostponingnotes", "startprefixtext", "startprocessassignmentcommand", "startprocessassignmentlist", "startprocesscommacommand", "startprocesscommalist", "startproduct", "startproject", "startprotect", "startprotectedcolors", "startpublication", "startpunctuation", "startquotation", "startquote", "startrandomized", "startrandomseed", "startrawsetups", "startreadingfile", "startreferenceprefix", "startregime", "startregister", "startreusableMPgraphic", "startrightaligned", "startruby", "startscript", "startsdformula", "startsection", "startsectionblock", "startsectionblockenvironment", "startsectionlevel", "startsetups", "startshapebox", "startshift", "startsidebar", "startsimplecolumns", "startspecialitem", "startspeech", "startspformula", "startsplitformula", "startsplittext", "startspread", "startstandardmakeup", "startstaticMPfigure", "startstaticMPgraphic", "startstrictinspectnextcharacter", "startstructurepageregister", "startstrut", "startstyle", "startsubformulas", "startsubject", "startsubjectlevel", "startsubsection", "startsubsentence", "startsubstack", "startsubsubject", "startsubsubsection", "startsubsubsubject", "startsubsubsubsection", "startsubsubsubsubject", "startsubsubsubsubsection", "startsubsubsubsubsubject", "startsuffixtext", "startsymbolset", "starttable", "starttablehead", "starttables", "starttabletail", "starttabletext", "starttabulate", "starttabulatehead", "starttabulatetail", "starttagged", "starttaglabeltext", "starttexcode", "starttexdefinition", "starttext", "starttextbackground", "starttextbackgroundmanual", "starttextcolor", "starttextcolorintent", "starttextflow", "starttextmakeup", "starttextrule", "startthematrix", "starttitle", "starttokenlist", "starttokens", "starttransparent", "starttypescript", "starttypescriptcollection", "starttyping", "startuniqueMPgraphic", "startuniqueMPpagegraphic", "startunittext", "startunpacked", "startusableMPgraphic", "startuseMPgraphic", "startusemathstyleparameter", "startuserdata", "startusingbtxspecification", "startvbox", "startvboxregister", "startvboxtohbox", "startvboxtohboxseparator", "startviewerlayer", "startvtop", "startvtopregister", "startxcell", "startxcellgroup", "startxcolumn", "startxgroup", "startxmldisplayverbatim", "startxmlinlineverbatim", "startxmlraw", "startxmlsetups", "startxrow", "startxrowgroup", "startxtable", "startxtablebody", "startxtablefoot", "startxtablehead", "startxtablenext", "stligature", "stopJScode", "stopJSpreamble", "stopLUA", "stopMP", "stopMPclip", "stopMPcode", "stopMPdefinitions", "stopMPdrawing", "stopMPenvironment", "stopMPextensions", "stopMPinclusions", "stopMPinitializations", "stopMPpage", "stopMPpositiongraphic", "stopMPpositionmethod", "stopMPrun", "stopPARSEDXML", "stopTABLE", "stopTABLEbody", "stopTABLEfoot", "stopTABLEhead", "stopTABLEnested", "stopTABLEnext", "stopTC", "stopTD", "stopTDs", "stopTEX", "stopTEXpage", "stopTH", "stopTN", "stopTR", "stopTRs", "stopTX", "stopTY", "stopXML", "stopalign", "stopalignment", "stopallmodes", "stopappendices", "stoparrangedpages", "stopasciimode", "stopaside", "stopattachment", "stopbackground", "stopbackmatter", "stopbar", "stopbbordermatrix", "stopbitmapimage", "stopblockquote", "stopbodymatter", "stopbordermatrix", "stopboxedcolumns", "stopbtxlabeltext", "stopbtxrenderingdefinitions", "stopbuffer", "stopcases", "stopcatcodetable", "stopcenteraligned", "stopchapter", "stopcharacteralign", "stopcheckedfences", "stopchemical", "stopchemicaltext", "stopcollect", "stopcollecting", "stopcolor", "stopcolorintent", "stopcoloronly", "stopcolorset", "stopcolumns", "stopcolumnset", "stopcolumnsetspan", "stopcombination", "stopcomment", "stopcomponent", "stopcontextcode", "stopcontextdefinitioncode", "stopctxfunction", "stopctxfunctiondefinition", "stopcurrentcolor", "stopcurrentlistentrywrapper", "stopdelimited", "stopdelimitedtext", "stopdisplaymath", "stopdmath", "stopdocument", "stopeffect", "stopelement", "stopembeddedxtable", "stopendnote", "stopendofline", "stopenvironment", "stopexceptions", "stopexpanded", "stopexpandedcollect", "stopextendedcatcodetable", "stopexternalfigurecollection", "stopfacingfloat", "stopfact", "stopfigure", "stopfiguretext", "stopfittingpage", "stopfixed", "stopfloatcombination", "stopfont", "stopfontclass", "stopfontsolution", "stopfootnote", "stopformula", "stopformulas", "stopframed", "stopframedcell", "stopframedcontent", "stopframedrow", "stopframedtable", "stopframedtext", "stopfrontmatter", "stopgoto", "stopgraphictext", "stopgridsnapping", "stophanging", "stophbox", "stophboxestohbox", "stophboxregister", "stophead", "stopheadtext", "stophelptext", "stophiding", "stophighlight", "stophyphenation", "stopimath", "stopindentation", "stopindentedtext", "stopinteraction", "stopinteractionmenu", "stopinterface", "stopintermezzotext", "stopintertext", "stopitem", "stopitemgroup", "stopitemgroupcolumns", "stopitemize", "stopknockout", "stoplabeltext", "stoplanguage", "stoplayout", "stopleftaligned", "stoplegend", "stopline", "stoplinealignment", "stoplinecorrection", "stoplinefiller", "stoplinenote", "stoplinenumbering", "stoplines", "stoplinetable", "stoplinetablebody", "stoplinetablecell", "stoplinetablehead", "stoplocalfootnotes", "stoplocalheadsetup", "stoplocallinecorrection", "stoplocalnotes", "stoplocalsetups", "stoplua", "stopluacode", "stopluaparameterset", "stopluasetups", "stopmakeup", "stopmarginblock", "stopmarginrule", "stopmarkedcontent", "stopmarkpages", "stopmathalignment", "stopmathcases", "stopmathlabeltext", "stopmathmatrix", "stopmathmode", "stopmathstyle", "stopmatrices", "stopmatrix", "stopmaxaligned", "stopmdformula", "stopmidaligned", "stopmiddlealigned", "stopmiddlemakeup", "stopmixedcolumns", "stopmode", "stopmodeset", "stopmodule", "stopmoduletestsection", "stopmpformula", "stopmulticolumns", "stopnamedsection", "stopnamedsubformulas", "stopnarrow", "stopnarrower", "stopnegative", "stopnicelyfilledbox", "stopnointerference", "stopnotallmodes", "stopnotext", "stopnotmode", "stopoperatortext", "stopopposite", "stopoutputstream", "stopoverlay", "stopoverprint", "stoppacked", "stoppagecolumns", "stoppagecomment", "stoppagefigure", "stoppagelayout", "stoppagemakeup", "stoppar", "stopparagraph", "stopparagraphs", "stopparagraphscell", "stopparbuilder", "stoppart", "stoppath", "stopplacechemical", "stopplacefigure", "stopplacefloat", "stopplaceformula", "stopplacegraphic", "stopplaceintermezzo", "stopplacelegend", "stopplacepairedbox", "stopplacetable", "stoppositioning", "stoppositionoverlay", "stoppositive", "stoppostponing", "stoppostponingnotes", "stopprefixtext", "stopprocessassignmentcommand", "stopprocessassignmentlist", "stopprocesscommacommand", "stopprocesscommalist", "stopproduct", "stopproject", "stopprotect", "stopprotectedcolors", "stoppublication", "stoppunctuation", "stopquotation", "stopquote", "stoprandomized", "stoprandomseed", "stoprawsetups", "stopreadingfile", "stopreferenceprefix", "stopregime", "stopreusableMPgraphic", "stoprightaligned", "stopruby", "stopscript", "stopsdformula", "stopsection", "stopsectionblock", "stopsectionblockenvironment", "stopsectionlevel", "stopsetups", "stopshapebox", "stopshift", "stopsidebar", "stopsimplecolumns", "stopspecialitem", "stopspeech", "stopspformula", "stopsplitformula", "stopsplittext", "stopspread", "stopstandardmakeup", "stopstaticMPfigure", "stopstaticMPgraphic", "stopstrictinspectnextcharacter", "stopstrut", "stopstyle", "stopsubformulas", "stopsubject", "stopsubjectlevel", "stopsubsection", "stopsubsentence", "stopsubstack", "stopsubsubject", "stopsubsubsection", "stopsubsubsubject", "stopsubsubsubsection", "stopsubsubsubsubject", "stopsubsubsubsubsection", "stopsubsubsubsubsubject", "stopsuffixtext", "stopsymbolset", "stoptable", "stoptablehead", "stoptables", "stoptabletail", "stoptabletext", "stoptabulate", "stoptabulatehead", "stoptabulatetail", "stoptagged", "stoptaglabeltext", "stoptexcode", "stoptexdefinition", "stoptext", "stoptextbackground", "stoptextbackgroundmanual", "stoptextcolor", "stoptextcolorintent", "stoptextflow", "stoptextmakeup", "stoptextrule", "stopthematrix", "stoptitle", "stoptokenlist", "stoptokens", "stoptransparent", "stoptypescript", "stoptypescriptcollection", "stoptyping", "stopuniqueMPgraphic", "stopuniqueMPpagegraphic", "stopunittext", "stopunpacked", "stopusableMPgraphic", "stopuseMPgraphic", "stopusemathstyleparameter", "stopuserdata", "stopusingbtxspecification", "stopvbox", "stopvboxregister", "stopvboxtohbox", "stopvboxtohboxseparator", "stopviewerlayer", "stopvtop", "stopvtopregister", "stopxcell", "stopxcellgroup", "stopxcolumn", "stopxgroup", "stopxmldisplayverbatim", "stopxmlinlineverbatim", "stopxmlraw", "stopxmlsetups", "stopxrow", "stopxrowgroup", "stopxtable", "stopxtablebody", "stopxtablefoot", "stopxtablehead", "stopxtablenext", "stretched", "strictdoifelsenextoptional", "strictdoifnextoptionalelse", "stripcharacter", "strippedcsname", "stripspaces", "structurelistuservariable", "structurenumber", "structuretitle", "structureuservariable", "structurevariable", "strut", "strutdp", "strutgap", "strutht", "struthtdp", "struttedbox", "strutwd", "style", "styleinstance", "subject", "subpagenumber", "subsection", "subsentence", "subset", "subseteq", "subseteqq", "subsetneq", "subsetneqq", "substituteincommalist", "subsubject", "subsubsection", "subsubsubject", "subsubsubsection", "subsubsubsubject", "subsubsubsubsection", "subsubsubsubsubject", "subtractfeature", "succ", "succapprox", "succcurlyeq", "succeq", "succeqq", "succnapprox", "succneq", "succneqq", "succnsim", "succsim", "suffixlanguage", "suffixtext", "sum", "supset", "supseteq", "supseteqq", "supsetneq", "supsetneqq", "surd", "surdradical", "swapcounts", "swapdimens", "swapface", "swapmacros", "swaptypeface", "swarrow", "switchstyleonly", "switchtobodyfont", "switchtocolor", "switchtointerlinespace", "symbol", "symbolreference", "synchronizeblank", "synchronizeindenting", "synchronizemarking", "synchronizeoutputstreams", "synchronizestrut", "synchronizewhitespace", "synctexblockfilename", "synctexresetfilename", "synctexsetfilename", "systemlog", "systemlogfirst", "systemloglast", "systemsetups", "tLeftarrow", "tLeftrightarrow", "tRightarrow", "tabulateautoline", "tabulateautorule", "tabulateline", "tabulaterule", "taggedctxcommand", "taggedlabeltexts", "taglabellanguage", "taglabeltext", "tau", "tbinom", "tbox", "tcaron", "tcedilla", "tcommaaccent", "tcurl", "tequal", "test", "testandsplitstring", "testcolumn", "testfeature", "testfeatureonce", "testpage", "testpageonly", "testpagesync", "testtokens", "tex", "texdefinition", "texsetup", "textAngstrom", "textacute", "textampersand", "textasciicircum", "textasciitilde", "textat", "textbackslash", "textbar", "textbottomcomma", "textbottomdot", "textbraceleft", "textbraceright", "textbreve", "textbrokenbar", "textbullet", "textcaron", "textcedilla", "textcelsius", "textcent", "textcircledP", "textcircumflex", "textcitation", "textcite", "textcomma", "textcontrolspace", "textcurrency", "textdag", "textddag", "textdegree", "textdiaeresis", "textdiv", "textdollar", "textdong", "textdotaccent", "textellipsis", "texteuro", "textflowcollector", "textfraction", "textgrave", "texthash", "texthorizontalbar", "texthungarumlaut", "texthyphen", "textkelvin", "textlognot", "textmacron", "textmath", "textmho", "textminus", "textmu", "textmultiply", "textnumero", "textogonek", "textohm", "textormathchar", "textormathchars", "textounce", "textpercent", "textperiod", "textplus", "textpm", "textreference", "textring", "textrule", "textslash", "textsterling", "texttilde", "textunderscore", "textvisiblespace", "textyen", "thai", "thainumerals", "thedatavalue", "thefirstcharacter", "thematrix", "thenormalizedbodyfontsize", "theorientation", "therefore", "theremainingcharacters", "theta", "thickspace", "thinrule", "thinrules", "thinspace", "thirdoffivearguments", "thirdoffourarguments", "thirdofsixarguments", "thirdofthreearguments", "thirdofthreeunexpanded", "thook", "thookleftarrow", "thookrightarrow", "thorn", "threedigitrounding", "threeeighths", "threefifths", "threeperemspace", "threequarter", "threesuperior", "tibetannumerals", "tightlayer", "tilde", "times", "tinyfont", "title", "tlap", "tleftarrow", "tleftharpoondown", "tleftharpoonup", "tleftrightarrow", "tleftrightharpoons", "tmapsto", "to", "tochar", "tolinenote", "tooltip", "top", "topbox", "topleftbox", "toplinebox", "toprightbox", "topskippedbox", "tracecatcodetables", "tracedfontname", "tracedpagestate", "traceoutputroutines", "tracepositions", "trademark", "translate", "transparencycomponents", "transparent", "trel", "triangle", "triangledown", "triangleleft", "triangleq", "triangleright", "trightarrow", "trightharpoondown", "trightharpoonup", "trightleftharpoons", "trightoverleftarrow", "triplebond", "tripleprime", "tripleverticalbar", "truefilename", "truefontname", "tstroke", "ttraggedright", "ttriplerel", "ttwoheadleftarrow", "ttwoheadrightarrow", "turnediota", "twodigitrounding", "twofifths", "twoheaddownarrow", "twoheadleftarrow", "twoheadrightarrow", "twoheadrightarrowtail", "twoheaduparrow", "twosuperior", "twothirds", "tx", "txx", "typ", "type", "typebuffer", "typedefinedbuffer", "typeface", "typefile", "typeinlinebuffer", "typescriptone", "typescriptprefix", "typescriptthree", "typescripttwo", "typesetbuffer", "typesetbufferonly", "typesetfile", "uacute", "ubreve", "ucaron", "uchexnumber", "uchexnumbers", "ucircumflex", "uconvertnumber", "udiaeresis", "udiaeresisacute", "udiaeresiscaron", "udiaeresisgrave", "udiaeresismacron", "udotbelow", "udots", "udoublegrave", "uedcatcodecommand", "ugrave", "uhook", "uhorn", "uhornacute", "uhorndotbelow", "uhorngrave", "uhornhook", "uhorntilde", "uhungarumlaut", "uinvertedbreve", "ulcorner", "umacron", "undefinevalue", "undepthed", "underbar", "underbars", "underbartext", "underbrace", "underbracetext", "underbracket", "underbrackettext", "underdash", "underdashes", "underdot", "underdots", "underleftarrow", "underleftharpoondown", "underleftharpoonup", "underleftrightarrow", "underparent", "underparenttext", "underrandom", "underrandoms", "underrightarrow", "underrightharpoondown", "underrightharpoonup", "underset", "understrike", "understrikes", "undertwoheadleftarrow", "undertwoheadrightarrow", "undoassign", "unexpandeddocumentvariable", "unframed", "unhhbox", "unihex", "uniqueMPgraphic", "uniqueMPpagegraphic", "unit", "unitlanguage", "unitshigh", "unitslow", "unittext", "unknown", "unprotected", "unregisterhyphenationpattern", "unregisterparwrapper", "unspaceafter", "unspaceargument", "unspaced", "unspacestring", "unstackscripts", "untexargument", "untexcommand", "uogonek", "upand", "uparrow", "updasharrow", "updateparagraphdemerits", "updateparagraphpenalties", "updateparagraphproperties", "updateparagraphshapes", "updownarrow", "updownarrowbar", "updownarrows", "upharpoonleft", "upharpoonright", "uplus", "uppercased", "uppercasestring", "uppercasing", "upperleftdoubleninequote", "upperleftdoublesixquote", "upperleftsingleninequote", "upperleftsinglesixquote", "upperrightdoubleninequote", "upperrightdoublesixquote", "upperrightsingleninequote", "upperrightsinglesixquote", "upsilon", "upuparrows", "upwhitearrow", "urcorner", "uring", "url", "useJSscripts", "useMPenvironmentbuffer", "useMPgraphic", "useMPlibrary", "useMPrun", "useMPvariables", "useURL", "usealignparameter", "useblankparameter", "useblocks", "usebodyfont", "usebodyfontparameter", "usebtxdataset", "usebtxdefinitions", "usecitation", "usecolors", "usecomponent", "usedirectory", "usedummycolorparameter", "usedummystyleandcolor", "usedummystyleparameter", "useenvironment", "useexternaldocument", "useexternalfigure", "useexternalrendering", "useexternalsoundtrack", "usefigurebase", "usefile", "usefontpath", "usegridparameter", "usehyphensparameter", "useindentingparameter", "useindentnextparameter", "useinterlinespaceparameter", "uselanguageparameter", "useluamodule", "useluatable", "usemathstyleparameter", "usemodule", "useproduct", "useprofileparameter", "useproject", "usereferenceparameter", "userpagenumber", "usesetupsparameter", "usestaticMPfigure", "usesubpath", "usesymbols", "usetexmodule", "usetypescript", "usetypescriptfile", "useurl", "usezipfile", "utfchar", "utflower", "utfupper", "utilde", "utilityregisterlength", "vDash", "validassignment", "varTheta", "varepsilon", "varkappa", "varnothing", "varphi", "varpi", "varrho", "varsigma", "vartheta", "vboxreference", "vdash", "vdots", "vec", "vee", "veebar", "veeeq", "verbatim", "verbatimstring", "verbosenumber", "version", "vert", "verticalgrowingbar", "verticalpositionbar", "veryraggedcenter", "veryraggedleft", "veryraggedright", "vglue", "viewerlayer", "vl", "vpackbox", "vpackedbox", "vphantom", "vpos", "vsmash", "vsmashbox", "vsmashed", "vspace", "vspacing", "wcircumflex", "wdofstring", "wedge", "wedgeeq", "weekday", "whitearrowupfrombar", "widegrave", "widehat", "widetilde", "widthofstring", "widthspanningtext", "withoutpt", "word", "wordright", "words", "wordtonumber", "wp", "wr", "writebetweenlist", "writedatatolist", "writestatus", "writetolist", "xLeftarrow", "xLeftrightarrow", "xRightarrow", "xdefconvertedargument", "xequal", "xfrac", "xhookleftarrow", "xhookrightarrow", "xi", "xleftarrow", "xleftharpoondown", "xleftharpoonup", "xleftrightarrow", "xleftrightharpoons", "xmapsto", "xmladdindex", "xmlafterdocumentsetup", "xmlaftersetup", "xmlall", "xmlappenddocumentsetup", "xmlappendsetup", "xmlapplyselectors", "xmlatt", "xmlattdef", "xmlattribute", "xmlattributedef", "xmlbadinclusions", "xmlbeforedocumentsetup", "xmlbeforesetup", "xmlchainatt", "xmlchainattdef", "xmlchecknamespace", "xmlcommand", "xmlconcat", "xmlconcatrange", "xmlcontext", "xmlcount", "xmldefaulttotext", "xmldepth", "xmldirectives", "xmldirectivesafter", "xmldirectivesbefore", "xmldisplayverbatim", "xmldoif", "xmldoifatt", "xmldoifelse", "xmldoifelseatt", "xmldoifelseempty", "xmldoifelseselfempty", "xmldoifelsetext", "xmldoifelsevalue", "xmldoifnot", "xmldoifnotatt", "xmldoifnotselfempty", "xmldoifnottext", "xmldoifselfempty", "xmldoiftext", "xmlelement", "xmlfilter", "xmlfirst", "xmlflush", "xmlflushcontext", "xmlflushdocumentsetups", "xmlflushlinewise", "xmlflushpure", "xmlflushspacewise", "xmlflushtext", "xmlinclude", "xmlinclusion", "xmlinclusions", "xmlinfo", "xmlinjector", "xmlinlineprettyprint", "xmlinlineprettyprinttext", "xmlinlineverbatim", "xmlinstalldirective", "xmllast", "xmllastatt", "xmllastmatch", "xmllastpar", "xmlloadbuffer", "xmlloaddata", "xmlloaddirectives", "xmlloadfile", "xmlloadonly", "xmlmain", "xmlmapvalue", "xmlname", "xmlnamespace", "xmlnonspace", "xmlpar", "xmlparam", "xmlpath", "xmlpos", "xmlposition", "xmlprependdocumentsetup", "xmlprependsetup", "xmlprettyprint", "xmlprettyprinttext", "xmlprocessbuffer", "xmlprocessdata", "xmlprocessfile", "xmlpure", "xmlraw", "xmlrefatt", "xmlregistereddocumentsetups", "xmlregisteredsetups", "xmlregisterns", "xmlremapname", "xmlremapnamespace", "xmlremovedocumentsetup", "xmlremovesetup", "xmlresetdocumentsetups", "xmlresetinjectors", "xmlresetsetups", "xmlsave", "xmlsetatt", "xmlsetattribute", "xmlsetentity", "xmlsetfunction", "xmlsetinjectors", "xmlsetpar", "xmlsetparam", "xmlsetsetup", "xmlsetup", "xmlshow", "xmlsnippet", "xmlstrip", "xmlstripnolines", "xmlstripped", "xmlstrippednolines", "xmltag", "xmltexentity", "xmltext", "xmltobuffer", "xmltobufferverbose", "xmltofile", "xmlvalue", "xmlverbatim", "xrel", "xrightarrow", "xrightharpoondown", "xrightharpoonup", "xrightleftharpoons", "xrightoverleftarrow", "xsplitstring", "xtriplerel", "xtwoheadleftarrow", "xtwoheadrightarrow", "xxfrac", "xypos", "yacute", "ycircumflex", "ydiaeresis", "ydotbelow", "yen", "ygrave", "yhook", "yiddishnumerals", "ymacron", "ytilde", "zacute", "zcaron", "zdotaccent", "zeronumberconversion", "zerowidthnobreakspace", "zerowidthspace", "zeta", "zhook", "zstroke", "zwj", "zwnj" }, ["en"]={}, } \ 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 3cb471ade..d2d5cec13 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", "withshadecenterone", "withshadecentertwo", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "shownshadedirection", "shownshadecenter", "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", "infotext", "rawmadetext", "validtexbox", "onetimetextext", "rawfmttext", "thefmttext", "fmttext", "onetimefmttext", "notcached", "keepcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "withopacity", "property", "properties", "withproperties", "asgroup", "withpattern", "withpatternscale", "withpatternfloat", "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", "dofill", "fillup", "eofillup", "nodraw", "dodraw", "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", "setglobalmacro", "setglobaldimen", "setglobalcount", "setglobaltoks", "positionpath", "positioncurve", "positionxy", "positionparagraph", "positioncolumn", "positionwhd", "positionpage", "positionregion", "positionbox", "positionx", "positiony", "positionanchor", "positioninregion", "positionatanchor", "positioncolumnbox", "overlaycolumnbox", "positioncolumnatx", "getposboxes", "getmultipars", "getpospage", "getposparagraph", "getposcolumn", "getposregion", "getposx", "getposy", "getposwidth", "getposheight", "getposdepth", "getposleftskip", "getposrightskip", "getposhsize", "getposparindent", "getposhangindent", "getposhangafter", "getposxy", "getposupperleft", "getposlowerleft", "getposupperright", "getposlowerright", "getposllx", "getposlly", "getposurx", "getposury", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "utfnum", "utflen", "utfsub", "newhash", "disposehash", "inhash", "tohash", "fromhash", "isarray", "prefix", "isobject", "comment", "report", "lua", "lualist", "mp", "MP", "luacall", "mirrored", "mirroredabout", "xslanted", "yslanted", "scriptindex", "newscriptindex", "newcolor", "newrgbcolor", "newcmykcolor", "newnumeric", "newboolean", "newtransform", "newpath", "newpicture", "newstring", "newpair", "mpvard", "mpvarn", "mpvars", "mpvar", "withtolerance", "hatched", "withdashes", "processpath", "pencilled", "sortedintersectiontimes", "intersectionpath", "firstintersectionpath", "secondintersectionpath", "intersectionsfound", "cutbeforefirst", "cutafterfirst", "cutbeforelast", "cutafterlast" }, + ["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", "withshadecenterone", "withshadecentertwo", "withshadestep", "withshadefraction", "withshadeorigin", "shownshadevector", "shownshadeorigin", "shownshadedirection", "shownshadecenter", "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", "infotext", "rawmadetext", "validtexbox", "onetimetextext", "rawfmttext", "thefmttext", "fmttext", "onetimefmttext", "notcached", "keepcached", "verbatim", "thelabel", "label", "autoalign", "transparent", "withtransparency", "withopacity", "property", "properties", "withproperties", "asgroup", "withpattern", "withpatternscale", "withpatternfloat", "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", "dofill", "fillup", "eofillup", "nodraw", "dodraw", "enfill", "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", "setglobalmacro", "setglobaldimen", "setglobalcount", "setglobaltoks", "positionpath", "positioncurve", "positionxy", "positionparagraph", "positioncolumn", "positionwhd", "positionpage", "positionregion", "positionbox", "positionx", "positiony", "positionanchor", "positioninregion", "positionatanchor", "positioncolumnbox", "overlaycolumnbox", "positioncolumnatx", "getposboxes", "getmultipars", "getpospage", "getposparagraph", "getposcolumn", "getposregion", "getposx", "getposy", "getposwidth", "getposheight", "getposdepth", "getposleftskip", "getposrightskip", "getposhsize", "getposparindent", "getposhangindent", "getposhangafter", "getposxy", "getposupperleft", "getposlowerleft", "getposupperright", "getposlowerright", "getposllx", "getposlly", "getposurx", "getposury", "wdpart", "htpart", "dppart", "texvar", "texstr", "inpath", "pointof", "leftof", "rightof", "utfnum", "utflen", "utfsub", "newhash", "disposehash", "inhash", "tohash", "fromhash", "isarray", "prefix", "isobject", "comment", "report", "lua", "lualist", "mp", "MP", "luacall", "mirrored", "mirroredabout", "xslanted", "yslanted", "scriptindex", "newscriptindex", "newcolor", "newrgbcolor", "newcmykcolor", "newnumeric", "newboolean", "newtransform", "newpath", "newpicture", "newstring", "newpair", "mpvard", "mpvarn", "mpvars", "mpvar", "withtolerance", "hatched", "withdashes", "processpath", "pencilled", "sortedintersectiontimes", "intersectionpath", "firstintersectionpath", "secondintersectionpath", "intersectionsfound", "cutbeforefirst", "cutafterfirst", "cutbeforelast", "cutafterlast", "xnormalized", "ynormalized", "xynormalized", "phantom", "scrutinized" }, ["internals"]={ "nocolormodel", "greycolormodel", "graycolormodel", "rgbcolormodel", "cmykcolormodel", "shadefactor", "shadeoffset", "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", "crossingdebug", "contextlmtxmode", "metafunversion", "minifunversion", "getparameters", "presetparameters", "hasparameter", "hasoption", "getparameter", "getparameterdefault", "getparametercount", "getmaxparametercount", "getparameterpath", "getparameterpen", "getparametertext", "applyparameters", "pushparameters", "popparameters", "setluaparameter", "definecolor", "record", "newrecord", "setrecord", "getrecord", "cntrecord", "anchorxy", "anchorx", "anchory", "anchorht", "anchordp", "anchorul", "anchorll", "anchorlr", "anchorur", "localanchorbox", "localanchorcell", "localanchorspan", "anchorbox", "anchorcell", "anchorspan", "matrixbox", "matrixcell", "matrixspan", "pensilcolor", "pensilstep" }, } \ No newline at end of file diff --git a/context/data/scite/context/lexers/data/scite-context-data-metapost.lua b/context/data/scite/context/lexers/data/scite-context-data-metapost.lua index 9de9f06ed..53271d674 100644 --- a/context/data/scite/context/lexers/data/scite-context-data-metapost.lua +++ b/context/data/scite/context/lexers/data/scite-context-data-metapost.lua @@ -1,9 +1,9 @@ return { - ["commands"]={ "on", "off", "interpath", "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "beginfont", "endfont", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "dk", "triplet", "quadruplet", "totransform", "bymatrix", "closedcurve", "closedlines", "primitive", "permanent", "immutable", "mutable", "frozen", "showproperty", "showhashentry" }, + ["commands"]={ "on", "off", "interpath", "upto", "downto", "beginfig", "endfig", "beginglyph", "endglyph", "beginfont", "endfont", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "undraw", "unfill", "unfilldraw", "buildcycle", "dashpattern", "decr", "dotlabel", "dotlabels", "drawoptions", "incr", "label", "labels", "max", "min", "thelabel", "z", "beginchar", "blacker", "capsule_end", "change_width", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "endchar", "extra_beginchar", "extra_endchar", "extra_setup", "font_coding_scheme", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "dk", "triplet", "quadruplet", "totransform", "bymatrix", "closedcurve", "closedlines", "primitive", "permanent", "immutable", "mutable", "frozen", "showproperty", "showhashentry", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt" }, ["disabled"]={ "verbatimtex", "troffmode" }, ["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "charscale", "inicatcoderegime", "texcatcoderegime", "luacatcoderegime", "notcatcoderegime", "vrbcatcoderegime", "prtcatcoderegime", "ctxcatcoderegime", "txtcatcoderegime", "catcoderegime", "ditto", "EOF", "pen_lft", "pen_rt", "pen_top", "pen_bot" }, ["metafont"]={ "autorounding", "beginchar", "blacker", "boundarychar", "capsule_def", "capsule_end", "change_width", "chardp", "chardx", "chardy", "charexists", "charext", "charht", "charic", "charlist", "charwd", "cull", "cullit", "currenttransform", "currentwindow", "define_blacker_pixels", "define_corrected_pixels", "define_good_x_pixels", "define_good_y_pixels", "define_horizontal_corrected_pixels", "define_pixels", "define_whole_blacker_pixels", "define_whole_pixels", "define_whole_vertical_blacker_pixels", "define_whole_vertical_pixels", "designsize", "display", "displaying", "endchar", "extensible", "extra_beginchar", "extra_endchar", "extra_setup", "fillin", "font_coding_scheme", "font_extra_space", "font_identifier", "font_normal_shrink", "font_normal_space", "font_normal_stretch", "font_quad", "font_size", "font_slant", "font_x_height", "fontdimen", "fontmaking", "gfcorners", "granularity", "grayfont", "headerbyte", "hppp", "hround", "imagerules", "italcorr", "kern", "labelfont", "ligtable", "lowres_fix", "makebox", "makegrid", "maketicks", "mode_def", "mode_setup", "nodisplays", "notransforms", "numspecial", "o_correction", "openit", "openwindow", "pixels_per_inch", "proofing", "proofoffset", "proofrule", "proofrulethickness", "rulepen", "screenchars", "screenrule", "screenstrokes", "screen_cols", "screen_rows", "showit", "slantfont", "smode", "smoothing", "titlefont", "totalweight", "tracingedges", "tracingpens", "turningcheck", "unitpixel", "vppp", "vround", "xoffset", "yoffset" }, - ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "stacking", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "void", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "setgroup", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "withstacking", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "closefrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stackingpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext", "numbersystem", "overloadmode", "setproperty", "intersectiontimeslist", "arcpoint", "arcpointlist", "subarclength", "maxknotpool", "nocycle" }, - ["shortcuts"]={ "..", "...", "--", "---", "&", "\\" }, + ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "stacking", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "penspec", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "hex", "infont", "intersectiontimes", "known", "void", "length", "llcorner", "lrcorner", "makepath", "makepen", "mexp", "mlog", "normaldeviate", "not", "numeric", "oct", "odd", "or", "path", "pair", "pen", "penoffset", "picture", "point", "postcontrol", "precontrol", "reverse", "rotated", "scaled", "shifted", "sind", "slanted", "sqrt", "str", "string", "subpath", "substring", "transform", "transformed", "ulcorner", "uniformdeviate", "unknown", "urcorner", "xpart", "xscaled", "xxpart", "xypart", "ypart", "yscaled", "yxpart", "yypart", "zscaled", "addto", "clip", "input", "interim", "let", "newinternal", "save", "setbounds", "setgroup", "shipout", "show", "showdependencies", "showtoken", "showvariable", "special", "begingroup", "endgroup", "of", "curl", "tension", "and", "controls", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "withstacking", "dashed", "envelope", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "forsuffixes", "step", "until", "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable", "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize", "fontmaking", "charexists", "cullit", "currenttransform", "gfcorners", "grayfont", "hround", "imagerules", "lowres_fix", "nodisplays", "notransforms", "openit", "displaying", "currentwindow", "screen_rows", "screen_cols", "pixels_per_inch", "cull", "display", "openwindow", "numspecial", "totalweight", "autorounding", "fillin", "proofing", "tracingpens", "xoffset", "chardx", "granularity", "smoothing", "turningcheck", "yoffset", "chardy", "hppp", "tracingedges", "vppp", "extra_beginfig", "extra_endfig", "mpxbreak", "endinput", "message", "delimiters", "turningnumber", "errmessage", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "closefrom", "withprescript", "withpostscript", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "colormodel", "graypart", "greypart", "greycolor", "graycolor", "dashpart", "penpart", "stackingpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode", "runscript", "maketext", "numbersystem", "overloadmode", "setproperty", "intersectiontimeslist", "arcpoint", "arcpointlist", "subarclength", "maxknotpool", "nocycle", "pathpoint", "pathprecontrol", "pathpostcontrol", "pathdirection", "deltapoint", "deltaprecontrol", "deltapostcontrol", "deltadirection", "corner", "xrange", "yrange", "convexed", "uncontrolled", "nep", "makenep", "withmiterlimit", "withlinejoin", "withlinecap", "centerof", "centerofmass" }, + ["shortcuts"]={ "..", "...", "--", "---", "&", "&&", "\\" }, ["tex"]={ "btex", "etex", "verbatimtex" }, } \ No newline at end of file diff --git a/context/data/scite/context/lexers/data/scite-context-data-tex.lua b/context/data/scite/context/lexers/data/scite-context-data-tex.lua index 89213778f..42d66790a 100644 --- a/context/data/scite/context/lexers/data/scite-context-data-tex.lua +++ b/context/data/scite/context/lexers/data/scite-context-data-tex.lua @@ -1,9 +1,9 @@ return { ["aleph"]={ "Alephminorversion", "Alephrevision", "Alephversion" }, ["etex"]={ "botmarks", "clubpenalties", "currentgrouplevel", "currentgrouptype", "currentifbranch", "currentiflevel", "currentiftype", "detokenize", "dimexpr", "displaywidowpenalties", "everyeof", "firstmarks", "fontchardp", "fontcharht", "fontcharic", "fontcharwd", "glueexpr", "glueshrink", "glueshrinkorder", "gluestretch", "gluestretchorder", "gluetomu", "ifcsname", "ifdefined", "iffontchar", "interactionmode", "interlinepenalties", "lastlinefit", "lastnodetype", "marks", "muexpr", "mutoglue", "numexpr", "pagediscards", "parshapedimen", "parshapeindent", "parshapelength", "predisplaydirection", "protected", "savinghyphcodes", "savingvdiscards", "scantokens", "showgroups", "showifs", "showtokens", "splitbotmarks", "splitdiscards", "splitfirstmarks", "topmarks", "tracingassigns", "tracinggroups", "tracingifs", "tracinglevels", "tracingnesting", "unexpanded", "unless", "widowpenalties" }, - ["luatex"]={ "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaccentbasedepth", "Umathaccentbaseheight", "Umathaccentbottomshiftdown", "Umathaccenttopshiftup", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubprespace", "Umathextrasubshift", "Umathextrasubspace", "Umathextrasuppreshift", "Umathextrasupprespace", "Umathextrasupshift", "Umathextrasupspace", "Umathflattenedaccentbasedepth", "Umathflattenedaccentbaseheight", "Umathflattenedaccentbottomshiftdown", "Umathflattenedaccenttopshiftup", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpresubshiftdistance", "Umathpresupshiftdistance", "Umathprimeraise", "Umathprimeshiftdrop", "Umathprimeshiftup", "Umathprimespaceafter", "Umathprimevariant", "Umathprimewidth", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathruledepth", "Umathruleheight", "Umathskeweddelimitertolerance", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathsource", "Umathspaceafterscript", "Umathspacebeforescript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdistance", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdistance", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathuseaxis", "Umathvextensiblevariant", "Umathvoid", "Umathxscale", "Umathyscale", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uoperator", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uprimescript", "Uradical", "Uright", "Uroot", "Ushiftedsubprescript", "Ushiftedsubscript", "Ushiftedsuperprescript", "Ushiftedsuperscript", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "alignmentcellsource", "alignmentwrapsource", "aligntab", "allcrampedstyles", "alldisplaystyles", "allmathstyles", "allscriptscriptstyles", "allscriptstyles", "allsplitstyles", "alltextstyles", "alluncrampedstyles", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "beginmathgroup", "beginsimplegroup", "boundary", "boxanchor", "boxanchors", "boxattribute", "boxdirection", "boxgeometry", "boxorientation", "boxshift", "boxsource", "boxtarget", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "copymathatomrule", "copymathparent", "copymathspacing", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentloopiterator", "currentloopnesting", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "endmathgroup", "endsimplegroup", "enforced", "etoks", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandedafter", "expandedloop", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecdef", "fontspecid", "fontspecifiedsize", "fontspecscale", "fontspecxscale", "fontspecyscale", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphyoffset", "glyphyscale", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "inherited", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmaxdepth", "insertmode", "insertmultiplier", "insertpenalty", "insertprogress", "insertstorage", "insertstoring", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastboundary", "lastchkdim", "lastchknum", "lastleftclass", "lastloopiterator", "lastnamedcs", "lastnodesubtype", "lastpageextra", "lastparcontext", "lastrightclass", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letmathatomrule", "letmathparent", "letmathspacing", "letprotected", "lettonothing", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localcontrolledloop", "localinterlinepenalty", "localleftbox", "localleftboxbox", "localmiddlebox", "localmiddleboxbox", "localrightbox", "localrightboxbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathaccent", "mathatom", "mathatomglue", "mathatomskip", "mathbackwardpenalties", "mathbeginclass", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "mathendclass", "matheqnogapstep", "mathfenced", "mathfencesmode", "mathfontcontrol", "mathforwardpenalties", "mathfrac", "mathghost", "mathleftclass", "mathlimitsmode", "mathmiddle", "mathnolimitsmode", "mathpenaltiesmode", "mathrad", "mathrightclass", "mathrulesfam", "mathrulesmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathslackmode", "mathspacingmode", "mathstackstyle", "mathstyle", "mathstylefontid", "mathsurroundmode", "mathsurroundskip", "maththreshold", "mugluespecdef", "mutable", "noaligned", "noatomruling", "noboundary", "nohrule", "norelax", "normalizelinemode", "normalizeparmode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orphanpenalties", "orphanpenalty", "orunless", "outputbox", "overloaded", "overloadmode", "pageboundary", "pageboundarypenalty", "pageextragoal", "pagevsize", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "postinlinepenalty", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "preinlinepenalty", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitloop", "quitvmode", "resetmathspacing", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scaledemwidth", "scaledexheight", "scaledextraspace", "scaledinterwordshrink", "scaledinterwordspace", "scaledinterwordstretch", "scaledslantperpoint", "scantextokens", "semiexpanded", "semiprotected", "setdefaultmathcodes", "setfontid", "setmathatomrule", "setmathignore", "setmathoptions", "setmathpostpenalty", "setmathprepenalty", "setmathspacing", "shapingpenaltiesmode", "shapingpenalty", "skewed", "skewedwithdelims", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "todimension", "tointeger", "tokenized", "toksapp", "tokspre", "tolerant", "tomathstyle", "toscaled", "tpack", "tracingadjusts", "tracingalignments", "tracingexpressions", "tracingfonts", "tracingfullboxes", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "tracingnodes", "uleaders", "undent", "unexpandedloop", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoks", "xtoksapp", "xtokspre" }, + ["luatex"]={ "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "UmathDelimiterPercent", "UmathDelimiterShortfall", "Umathaccent", "Umathaccentbasedepth", "Umathaccentbaseheight", "Umathaccentbottomoverschoot", "Umathaccentbottomshiftdown", "Umathaccentsuperscriptdrop", "Umathaccentsuperscriptpercent", "Umathaccenttopovershoot", "Umathaccenttopshiftup", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubprespace", "Umathextrasubshift", "Umathextrasubspace", "Umathextrasuppreshift", "Umathextrasupprespace", "Umathextrasupshift", "Umathextrasupspace", "Umathflattenedaccentbasedepth", "Umathflattenedaccentbaseheight", "Umathflattenedaccentbottomshiftdown", "Umathflattenedaccenttopshiftup", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpresubshiftdistance", "Umathpresupshiftdistance", "Umathprimeraise", "Umathprimeshiftdrop", "Umathprimeshiftup", "Umathprimespaceafter", "Umathprimevariant", "Umathprimewidth", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathruledepth", "Umathruleheight", "Umathskeweddelimitertolerance", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathsource", "Umathspaceafterscript", "Umathspacebeforescript", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdistance", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdistance", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathuseaxis", "Umathvextensiblevariant", "Umathvoid", "Umathxscale", "Umathyscale", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uoperator", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uprimescript", "Uradical", "Uright", "Uroot", "Ushiftedsubprescript", "Ushiftedsubscript", "Ushiftedsuperprescript", "Ushiftedsuperscript", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "alignmentcellsource", "alignmentwrapsource", "aligntab", "allcrampedstyles", "alldisplaystyles", "allmathstyles", "allscriptscriptstyles", "allscriptstyles", "allsplitstyles", "alltextstyles", "alluncrampedstyles", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "beginmathgroup", "beginsimplegroup", "boundary", "boxadapt", "boxanchor", "boxanchors", "boxattribute", "boxdirection", "boxfreeze", "boxgeometry", "boxorientation", "boxshift", "boxsource", "boxtarget", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "copymathatomrule", "copymathparent", "copymathspacing", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentloopiterator", "currentloopnesting", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "endmathgroup", "endsimplegroup", "enforced", "etoks", "etoksapp", "etokspre", "everybeforepar", "everymathatom", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandedafter", "expandedloop", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontcharta", "fontid", "fontmathcontrol", "fontspecdef", "fontspecid", "fontspecifiedsize", "fontspecscale", "fontspecxscale", "fontspecyscale", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphxscaled", "glyphyoffset", "glyphyscale", "glyphyscaled", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "inherited", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmaxdepth", "insertmode", "insertmultiplier", "insertpenalty", "insertprogress", "insertstorage", "insertstoring", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastboundary", "lastchkdim", "lastchknum", "lastleftclass", "lastloopiterator", "lastnamedcs", "lastnodesubtype", "lastpageextra", "lastparcontext", "lastrightclass", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letmathatomrule", "letmathparent", "letmathspacing", "letprotected", "lettonothing", "linebreakcriterium", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localcontrolledloop", "localinterlinepenalty", "localleftbox", "localleftboxbox", "localmiddlebox", "localmiddleboxbox", "localrightbox", "localrightboxbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathaccent", "mathatom", "mathatomglue", "mathatomskip", "mathbackwardpenalties", "mathbeginclass", "mathdelimitersmode", "mathdirection", "mathdisplaymode", "mathdisplayskipmode", "mathdoublescriptmode", "mathendclass", "matheqnogapstep", "mathfenced", "mathfencesmode", "mathfontcontrol", "mathforwardpenalties", "mathfrac", "mathghost", "mathgluemode", "mathgroupingmode", "mathleftclass", "mathlimitsmode", "mathmiddle", "mathnolimitsmode", "mathpenaltiesmode", "mathrad", "mathrightclass", "mathrulesfam", "mathrulesmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathslackmode", "mathspacingmode", "mathstackstyle", "mathstyle", "mathstylefontid", "mathsurroundmode", "mathsurroundskip", "maththreshold", "mugluespecdef", "mutable", "noaligned", "noatomruling", "noboundary", "nohrule", "norelax", "normalizelinemode", "normalizeparmode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orphanpenalties", "orphanpenalty", "orunless", "outputbox", "overloaded", "overloadmode", "pageboundary", "pageboundarypenalty", "pageextragoal", "pagevsize", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "pettymuskip", "postexhyphenchar", "posthyphenchar", "postinlinepenalty", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "preinlinepenalty", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitloop", "quitvmode", "resetmathspacing", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scaledemwidth", "scaledexheight", "scaledextraspace", "scaledinterwordshrink", "scaledinterwordspace", "scaledinterwordstretch", "scaledslantperpoint", "scantextokens", "semiexpanded", "semiprotected", "setdefaultmathcodes", "setfontid", "setmathatomrule", "setmathignore", "setmathoptions", "setmathpostpenalty", "setmathprepenalty", "setmathspacing", "shapingpenaltiesmode", "shapingpenalty", "skewed", "skewedwithdelims", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tinymuskip", "todimension", "tohexadecimal", "tointeger", "tokenized", "toksapp", "tokspre", "tolerant", "tomathstyle", "toscaled", "tosparsedimension", "tosparsescaled", "tpack", "tracingadjusts", "tracingalignments", "tracingexpressions", "tracingfonts", "tracingfullboxes", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "tracingnodes", "tracingpenalties", "uleaders", "undent", "unexpandedloop", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoks", "xtoksapp", "xtokspre" }, ["omega"]={ "Omegaminorversion", "Omegarevision", "Omegaversion" }, ["pdftex"]={ "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfignoreunknownimages", "pdfimageaddfilename", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinfoomitdate", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmajorversion", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfomitcharset", "pdfomitcidset", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkfixeddpi", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrecompress", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdfsuppressoptionalinfo", "pdfsuppressptexinfo", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdftrailerid", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformmargin", "pdfxformname", "pdfxformresources", "pdfximage" }, - ["tex"]={ " ", "-", "/", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "aligncontent", "atop", "atopwithdelims", "badness", "baselineskip", "batchmode", "begingroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "botmark", "box", "boxmaxdepth", "brokenpenalty", "catcode", "char", "chardef", "cleaders", "clubpenalty", "copy", "count", "countdef", "cr", "crcr", "csname", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "dimen", "dimendef", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "edef", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "fam", "fi", "finalhyphendemerits", "firstmark", "floatingpenalty", "font", "fontdimen", "fontname", "fontspecifiedname", "futurelet", "gdef", "global", "globaldefs", "glyph", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifcase", "ifcat", "ifdim", "iffalse", "ifhbox", "ifhmode", "ifinner", "ifmmode", "ifnum", "ifodd", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "indent", "input", "inputlineno", "insert", "insertpenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastpenalty", "lastskip", "lccode", "leaders", "left", "lefthyphenmin", "leftskip", "leqno", "let", "limits", "linepenalty", "lineskip", "lineskiplimit", "long", "looseness", "lower", "lowercase", "mark", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "meaningasis", "meaningfull", "meaningless", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "multiply", "muskip", "muskipdef", "newlinechar", "noalign", "noexpand", "noindent", "nolimits", "nonscript", "nonstopmode", "nulldelimiterspace", "nullfont", "number", "omit", "or", "outer", "output", "outputpenalty", "over", "overfullrule", "overline", "overshoot", "overwithdelims", "pagedepth", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageshrink", "pagestretch", "pagetotal", "par", "parfillleftskip", "parfillskip", "parindent", "parinitleftskip", "parinitrightskip", "parshape", "parskip", "patterns", "pausing", "penalty", "postdisplaypenalty", "predisplaypenalty", "predisplaysize", "pretolerance", "prevdepth", "prevgraf", "radical", "raise", "relax", "relpenalty", "right", "righthyphenmin", "rightskip", "romannumeral", "scaledfontdimen", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showlists", "shownodedetails", "showthe", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "splitbotmark", "splitfirstmark", "splitmaxdepth", "splittopskip", "srule", "string", "tabskip", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "tinymuskip", "toks", "toksdef", "tolerance", "topmark", "topskip", "tracingcommands", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingstats", "uccode", "uchyph", "unboundary", "underline", "unhbox", "unhcopy", "unhpack", "unkern", "unpenalty", "unskip", "unvbox", "unvcopy", "unvpack", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalty", "xdef", "xleaders", "xspaceskip", "year" }, + ["tex"]={ " ", "-", "/", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "aligncontent", "atop", "atopwithdelims", "badness", "baselineskip", "batchmode", "begingroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "botmark", "box", "boxmaxdepth", "brokenpenalty", "catcode", "char", "chardef", "cleaders", "clubpenalty", "copy", "count", "countdef", "cr", "crcr", "csname", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "dimen", "dimendef", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "edef", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "fam", "fi", "finalhyphendemerits", "firstmark", "floatingpenalty", "font", "fontdimen", "fontname", "fontspecifiedname", "futurelet", "gdef", "global", "globaldefs", "glyph", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "holdinginserts", "holdingmigrations", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifcase", "ifcat", "ifdim", "iffalse", "ifhbox", "ifhmode", "ifinner", "ifmmode", "ifnum", "ifodd", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "indent", "input", "inputlineno", "insert", "insertpenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastpenalty", "lastskip", "lccode", "leaders", "left", "lefthyphenmin", "leftskip", "leqno", "let", "limits", "linepenalty", "lineskip", "lineskiplimit", "long", "looseness", "lower", "lowercase", "mark", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "meaningasis", "meaningfull", "meaningless", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "multiply", "muskip", "muskipdef", "newlinechar", "noalign", "noexpand", "noindent", "nolimits", "nonscript", "nonstopmode", "nulldelimiterspace", "nullfont", "number", "omit", "or", "outer", "output", "outputpenalty", "over", "overfullrule", "overline", "overshoot", "overwithdelims", "pagedepth", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageshrink", "pagestretch", "pagetotal", "par", "parfillleftskip", "parfillskip", "parindent", "parinitleftskip", "parinitrightskip", "parshape", "parskip", "patterns", "pausing", "penalty", "postdisplaypenalty", "predisplaypenalty", "predisplaysize", "pretolerance", "prevdepth", "prevgraf", "radical", "raise", "relax", "relpenalty", "right", "righthyphenmin", "rightskip", "romannumeral", "scaledfontdimen", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showlists", "shownodedetails", "showthe", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "splitbotmark", "splitfirstmark", "splitmaxdepth", "splittopskip", "srule", "string", "tabskip", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "toks", "toksdef", "tolerance", "topmark", "topskip", "tracingcommands", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingstats", "uccode", "uchyph", "unboundary", "underline", "unhbox", "unhcopy", "unhpack", "unkern", "unpenalty", "unskip", "unvbox", "unvcopy", "unvpack", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalty", "xdef", "xleaders", "xspaceskip", "year" }, ["xetex"]={ "XeTeXversion" }, } \ No newline at end of file diff --git a/context/data/scite/context/lexers/scite-context-lexer-xml.lua b/context/data/scite/context/lexers/scite-context-lexer-xml.lua index e635d4019..f4ab8426d 100644 --- a/context/data/scite/context/lexers/scite-context-lexer-xml.lua +++ b/context/data/scite/context/lexers/scite-context-lexer-xml.lua @@ -41,7 +41,23 @@ local semicolon = P(";") local equal = P("=") local ampersand = P("&") -local name = (R("az","AZ","09") + S("_-."))^1 +-- NameStartChar ::= ":" | [A-Z] | "_" | [a-z] +-- | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] +-- | [#x370-#x37D] | [#x37F-#x1FFF] +-- | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] +-- | [#x3001-#xD7FF] +-- | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] +-- +-- NameChar ::= NameStartChar +-- | "-" | "." | [0-9] | #xB7 +-- | [#x203F-#x2040] +-- | [#x0300-#x036F] + +local name = ( -- We are a bit more tolerant here. + R("az","AZ","09") + + S("_-.") + + patterns.utf8two + patterns.utf8three + patterns.utf8four + )^1 local openbegin = P("<") local openend = P("") + P(">") diff --git a/context/data/scite/context/lexers/scite-context-lexer.lua b/context/data/scite/context/lexers/scite-context-lexer.lua index 7eafa1c31..2efe23916 100644 --- a/context/data/scite/context/lexers/scite-context-lexer.lua +++ b/context/data/scite/context/lexers/scite-context-lexer.lua @@ -193,6 +193,14 @@ do patterns.float = float patterns.cardinal = decimal + local utf8next = R("\128\191") + + patterns.utf8next = utf8next + patterns.utf8one = R("\000\127") + patterns.utf8two = R("\194\223") * utf8next + patterns.utf8three = R("\224\239") * utf8next * utf8next + patterns.utf8four = R("\240\244") * utf8next * utf8next * utf8next + patterns.signeddecimal = sign^-1 * decimal patterns.signedoctal = sign^-1 * octal patterns.signedhexadecimal = sign^-1 * hexadecimal @@ -269,6 +277,11 @@ do local utf8three = R("\224\239") * utf8next * utf8next local utf8four = R("\240\244") * utf8next * utf8next * utf8next + helpers.utf8one = utf8one + helpers.utf8two = utf8two + helpers.utf8three = utf8three + helpers.utf8four = utf8four + local utfidentifier = utf8two + utf8three + utf8four helpers.utfidentifier = (R("AZ","az","__") + utfidentifier) * (R("AZ","az","__","09") + utfidentifier)^0 diff --git a/context/data/scite/context/scite-context-data-context.properties b/context/data/scite/context/scite-context-data-context.properties index 4e245e347..d6c96b00d 100644 --- a/context/data/scite/context/scite-context-data-context.properties +++ b/context/data/scite/context/scite-context-data-context.properties @@ -6,114 +6,118 @@ plustwelve plussixteen plusfifty plushundred plusonehundred \ plustwohundred plusfivehundred plusthousand plustenthousand plustwentythousand \ medcard maxcard maxcardminusone zeropoint onepoint \ halfapoint onebasepoint maxcount maxdimen scaledpoint \ -thousandpoint points halfpoint zeroskip zeromuskip \ -onemuskip pluscxxvii pluscxxviii pluscclv pluscclvi \ -normalpagebox binaryshiftedten binaryshiftedtwenty binaryshiftedthirty thickermuskip \ -directionlefttoright directionrighttoleft endoflinetoken outputnewlinechar emptytoks \ -empty undefined prerollrun voidbox emptybox \ -emptyvbox emptyhbox bigskipamount medskipamount smallskipamount \ -fmtname fmtversion texengine texenginename texengineversion \ -texenginefunctionality luatexengine pdftexengine xetexengine unknownengine \ -contextformat contextversion contextlmtxmode contextmark mksuffix \ -activecatcode bgroup egroup endline conditionaltrue \ -conditionalfalse attributeunsetvalue statuswrite uprotationangle rightrotationangle \ -downrotationangle leftrotationangle inicatcodes ctxcatcodes texcatcodes \ -notcatcodes txtcatcodes vrbcatcodes prtcatcodes nilcatcodes \ -luacatcodes tpacatcodes tpbcatcodes xmlcatcodes ctdcatcodes \ -rlncatcodes escapecatcode begingroupcatcode endgroupcatcode mathshiftcatcode \ -alignmentcatcode endoflinecatcode parametercatcode superscriptcatcode subscriptcatcode \ -ignorecatcode spacecatcode lettercatcode othercatcode activecatcode \ -commentcatcode invalidcatcode tabasciicode newlineasciicode formfeedasciicode \ -endoflineasciicode endoffileasciicode commaasciicode spaceasciicode periodasciicode \ -hashasciicode dollarasciicode commentasciicode ampersandasciicode colonasciicode \ -backslashasciicode circumflexasciicode underscoreasciicode leftbraceasciicode barasciicode \ -rightbraceasciicode tildeasciicode delasciicode leftparentasciicode rightparentasciicode \ -lessthanasciicode morethanasciicode doublecommentsignal atsignasciicode exclamationmarkasciicode \ -questionmarkasciicode doublequoteasciicode singlequoteasciicode forwardslashasciicode primeasciicode \ -hyphenasciicode percentasciicode leftbracketasciicode rightbracketasciicode hsizefrozenparcode \ -skipfrozenparcode hangfrozenparcode indentfrozenparcode parfillfrozenparcode adjustfrozenparcode \ -protrudefrozenparcode tolerancefrozenparcode stretchfrozenparcode loosenessfrozenparcode lastlinefrozenparcode \ -linepenaltyfrozenparcode clubpenaltyfrozenparcode widowpenaltyfrozenparcode displaypenaltyfrozenparcode brokenpenaltyfrozenparcode \ -demeritsfrozenparcode shapefrozenparcode linefrozenparcode hyphenationfrozenparcode shapingpenaltyfrozenparcode \ -orphanpenaltyfrozenparcode allfrozenparcode mathpenaltyfrozenparcode activemathcharcode activetabtoken \ -activeformfeedtoken activeendoflinetoken batchmodecode nonstopmodecode scrollmodecode \ -errorstopmodecode bottomlevelgroupcode simplegroupcode hboxgroupcode adjustedhboxgroupcode \ -vboxgroupcode vtopgroupcode aligngroupcode noaligngroupcode outputgroupcode \ -mathgroupcode discretionarygroupcode insertgroupcode vadjustgroupcode vcentergroupcode \ -mathabovegroupcode mathchoicegroupcode alsosimplegroupcode semisimplegroupcode mathshiftgroupcode \ -mathleftgroupcode localboxgroupcode splitoffgroupcode splitkeepgroupcode preamblegroupcode \ -alignsetgroupcode finrowgroupcode discretionarygroupcode markautomigrationcode insertautomigrationcode \ -adjustautomigrationcode preautomigrationcode postautomigrationcode charnodecode hlistnodecode \ -vlistnodecode rulenodecode insertnodecode marknodecode adjustnodecode \ -ligaturenodecode discretionarynodecode whatsitnodecode mathnodecode gluenodecode \ -kernnodecode penaltynodecode unsetnodecode mathsnodecode charifcode \ -catifcode numifcode dimifcode oddifcode vmodeifcode \ -hmodeifcode mmodeifcode innerifcode voidifcode hboxifcode \ -vboxifcode xifcode eofifcode trueifcode falseifcode \ -caseifcode definedifcode csnameifcode fontcharifcode overrulemathcontrolcode \ -underrulemathcontrolcode radicalrulemathcontrolcode fractionrulemathcontrolcode accentskewhalfmathcontrolcode accentskewapplymathcontrolcode \ -checkligatureandkernmathcontrolcode applyverticalitalickernmathcontrolcode applyordinaryitalickernmathcontrolcode applycharitalickernmathcontrolcode reboxcharitalickernmathcontrolcode \ -applyboxeditalickernmathcontrolcode staircasekernmathcontrolcode applytextitalickernmathcontrolcode applyscriptitalickernmathcontrolcode italicshapekernmathcontrolcode \ -checkspaceitalickernmathcontrolcode checktextitalickernmathcontrolcode noligaturingglyphoptioncode nokerningglyphoptioncode noexpansionglyphoptioncode \ -noprotrusionglyphoptioncode noleftkerningglyphoptioncode noleftligaturingglyphoptioncode norightkerningglyphoptioncode norightligaturingglyphoptioncode \ -noitaliccorrectionglyphoptioncode normalparcontextcode vmodeparcontextcode vboxparcontextcode vtopparcontextcode \ -vcenterparcontextcode vadjustparcontextcode insertparcontextcode outputparcontextcode alignparcontextcode \ -noalignparcontextcode spanparcontextcode resetparcontextcode leftoriginlistanchorcode leftheightlistanchorcode \ -leftdepthlistanchorcode rightoriginlistanchorcode rightheightlistanchorcode rightdepthlistanchorcode centeroriginlistanchorcode \ -centerheightlistanchorcode centerdepthlistanchorcode halfwaytotallistanchorcode halfwayheightlistanchorcode halfwaydepthlistanchorcode \ -halfwayleftlistanchorcode halfwayrightlistanchorcode negatexlistsigncode negateylistsigncode negatelistsigncode \ -fontslantperpoint fontinterwordspace fontinterwordstretch fontinterwordshrink fontexheight \ -fontemwidth fontextraspace slantperpoint mathexheight mathemwidth \ -interwordspace interwordstretch interwordshrink exheight emwidth \ -extraspace mathaxisheight muquad startmode stopmode \ -startnotmode stopnotmode startmodeset stopmodeset doifmode \ -doifelsemode doifmodeelse doifnotmode startmodeset stopmodeset \ -startallmodes stopallmodes startnotallmodes stopnotallmodes doifallmodes \ -doifelseallmodes doifallmodeselse doifnotallmodes startenvironment stopenvironment \ -environment startcomponent stopcomponent component startproduct \ -stopproduct product startproject stopproject project \ -starttext stoptext startnotext stopnotext startdocument \ -stopdocument documentvariable unexpandeddocumentvariable setupdocument presetdocument \ -doifelsedocumentvariable doifdocumentvariableelse doifdocumentvariable doifnotdocumentvariable startmodule \ -stopmodule usemodule usetexmodule useluamodule setupmodule \ -currentmoduleparameter moduleparameter everystarttext everystoptext startTEXpage \ -stopTEXpage enablemode disablemode preventmode definemode \ -globalenablemode globaldisablemode globalpreventmode pushmode popmode \ -typescriptone typescripttwo typescriptthree mathsizesuffix mathordinarycode \ -mathordcode mathoperatorcode mathopcode mathbinarycode mathbincode \ -mathrelationcode mathrelcode mathopencode mathclosecode mathpunctuationcode \ -mathpunctcode mathovercode mathundercode mathinnercode mathradicalcode \ -mathfractioncode mathmiddlecode mathaccentcode mathfencedcode mathghostcode \ -mathvariablecode mathactivecode mathvcentercode mathconstructcode mathwrappedcode \ -mathbegincode mathendcode mathexplicitcode mathdivisioncode mathfactorialcode \ -mathdimensioncode mathimaginarycode mathdifferentialcode mathexponentialcode mathfunctioncode \ -mathdigitcode mathalphacode mathboxcode mathchoicecode mathnothingcode \ -mathlimopcode mathnolopcode constantnumber constantnumberargument constantdimen \ -constantdimenargument constantemptyargument continueifinputfile luastringsep !!bs \ -!!es lefttorightmark righttoleftmark lrm rlm \ -bidilre bidirle bidipop bidilro bidirlo \ -breakablethinspace nobreakspace nonbreakablespace narrownobreakspace zerowidthnobreakspace \ -ideographicspace ideographichalffillspace twoperemspace threeperemspace fourperemspace \ -fiveperemspace sixperemspace figurespace punctuationspace hairspace \ -enquad emquad zerowidthspace zerowidthnonjoiner zerowidthjoiner \ -zwnj zwj optionalspace asciispacechar softhyphen \ -Ux eUx Umathaccents parfillleftskip parfillrightskip \ -startlmtxmode stoplmtxmode startmkivmode stopmkivmode wildcardsymbol \ -normalhyphenationcode automatichyphenationcode explicithyphenationcode syllablehyphenationcode uppercasehyphenationcode \ -collapsehyphenationcode compoundhyphenationcode strictstarthyphenationcode strictendhyphenationcode automaticpenaltyhyphenationcode \ -explicitpenaltyhyphenationcode permitgluehyphenationcode permitallhyphenationcode permitmathreplacehyphenationcode forcecheckhyphenationcode \ -lazyligatureshyphenationcode forcehandlerhyphenationcode feedbackcompoundhyphenationcode ignoreboundshyphenationcode partialhyphenationcode \ -completehyphenationcode normalizelinenormalizecode parindentskipnormalizecode swaphangindentnormalizecode swapparsshapenormalizecode \ -breakafterdirnormalizecode removemarginkernsnormalizecode clipwidthnormalizecode flattendiscretionariesnormalizecode discardzerotabskipsnormalizecode \ -flattenhleadersnormalizecode normalizeparnormalizeparcode flattenvleadersnormalizeparcode nopreslackclassoptioncode nopostslackclassoptioncode \ -lefttopkernclassoptioncode righttopkernclassoptioncode leftbottomkernclassoptioncode rightbottomkernclassoptioncode lookaheadforendclassoptioncode \ -defaultmathclassoptions noligaturingglyphoptioncode nokerningglyphoptioncode noleftligatureglyphoptioncode noleftkernglyphoptioncode \ -norightligatureglyphoptioncode norightkernglyphoptioncode noexpansionglyphoptioncode noprotrusionglyphoptioncode noitaliccorrectionglyphoptioncode \ -nokerningcode noligaturingcode frozenflagcode tolerantflagcode protectedflagcode \ -primitiveflagcode permanentflagcode noalignedflagcode immutableflagcode mutableflagcode \ -globalflagcode overloadedflagcode immediateflagcode conditionalflagcode valueflagcode \ -instanceflagcode ordmathflattencode binmathflattencode relmathflattencode punctmathflattencode \ -innermathflattencode normalworddiscoptioncode preworddiscoptioncode postworddiscoptioncode continuewhenlmtxmode +thousandpoint points halfpoint zeroskip centeringskip \ +stretchingskip shrinkingskip centeringfillskip stretchingfillskip shrinkingfillskip \ +zeromuskip onemuskip pluscxxvii pluscxxviii pluscclv \ +pluscclvi normalpagebox binaryshiftedten binaryshiftedtwenty binaryshiftedthirty \ +thickermuskip directionlefttoright directionrighttoleft endoflinetoken outputnewlinechar \ +emptytoks empty undefined prerollrun voidbox \ +emptybox emptyvbox emptyhbox bigskipamount medskipamount \ +smallskipamount fmtname fmtversion texengine texenginename \ +texengineversion texenginefunctionality luatexengine pdftexengine xetexengine \ +unknownengine contextformat contextversion contextlmtxmode contextmark \ +mksuffix activecatcode bgroup egroup endline \ +conditionaltrue conditionalfalse attributeunsetvalue statuswrite uprotationangle \ +rightrotationangle downrotationangle leftrotationangle inicatcodes ctxcatcodes \ +texcatcodes notcatcodes txtcatcodes vrbcatcodes prtcatcodes \ +nilcatcodes luacatcodes tpacatcodes tpbcatcodes xmlcatcodes \ +ctdcatcodes rlncatcodes escapecatcode begingroupcatcode endgroupcatcode \ +mathshiftcatcode alignmentcatcode endoflinecatcode parametercatcode superscriptcatcode \ +subscriptcatcode ignorecatcode spacecatcode lettercatcode othercatcode \ +activecatcode commentcatcode invalidcatcode tabasciicode newlineasciicode \ +formfeedasciicode endoflineasciicode endoffileasciicode commaasciicode spaceasciicode \ +periodasciicode hashasciicode dollarasciicode commentasciicode ampersandasciicode \ +colonasciicode backslashasciicode circumflexasciicode underscoreasciicode leftbraceasciicode \ +barasciicode rightbraceasciicode tildeasciicode delasciicode leftparentasciicode \ +rightparentasciicode lessthanasciicode morethanasciicode doublecommentsignal atsignasciicode \ +exclamationmarkasciicode questionmarkasciicode doublequoteasciicode singlequoteasciicode forwardslashasciicode \ +primeasciicode hyphenasciicode percentasciicode leftbracketasciicode rightbracketasciicode \ +hsizefrozenparcode skipfrozenparcode hangfrozenparcode indentfrozenparcode parfillfrozenparcode \ +adjustfrozenparcode protrudefrozenparcode tolerancefrozenparcode stretchfrozenparcode loosenessfrozenparcode \ +lastlinefrozenparcode linepenaltyfrozenparcode clubpenaltyfrozenparcode widowpenaltyfrozenparcode displaypenaltyfrozenparcode \ +brokenpenaltyfrozenparcode demeritsfrozenparcode shapefrozenparcode linefrozenparcode hyphenationfrozenparcode \ +shapingpenaltyfrozenparcode orphanpenaltyfrozenparcode allfrozenparcode mathpenaltyfrozenparcode activemathcharcode \ +activetabtoken activeformfeedtoken activeendoflinetoken batchmodecode nonstopmodecode \ +scrollmodecode errorstopmodecode bottomlevelgroupcode simplegroupcode hboxgroupcode \ +adjustedhboxgroupcode vboxgroupcode vtopgroupcode aligngroupcode noaligngroupcode \ +outputgroupcode mathgroupcode discretionarygroupcode insertgroupcode vadjustgroupcode \ +vcentergroupcode mathabovegroupcode mathchoicegroupcode alsosimplegroupcode semisimplegroupcode \ +mathshiftgroupcode mathleftgroupcode localboxgroupcode splitoffgroupcode splitkeepgroupcode \ +preamblegroupcode alignsetgroupcode finrowgroupcode discretionarygroupcode markautomigrationcode \ +insertautomigrationcode adjustautomigrationcode preautomigrationcode postautomigrationcode charnodecode \ +hlistnodecode vlistnodecode rulenodecode insertnodecode marknodecode \ +adjustnodecode ligaturenodecode discretionarynodecode whatsitnodecode mathnodecode \ +gluenodecode kernnodecode penaltynodecode unsetnodecode mathsnodecode \ +charifcode catifcode numifcode dimifcode oddifcode \ +vmodeifcode hmodeifcode mmodeifcode innerifcode voidifcode \ +hboxifcode vboxifcode xifcode eofifcode trueifcode \ +falseifcode caseifcode definedifcode csnameifcode fontcharifcode \ +overrulemathcontrolcode underrulemathcontrolcode radicalrulemathcontrolcode fractionrulemathcontrolcode accentskewhalfmathcontrolcode \ +accentskewapplymathcontrolcode checkligatureandkernmathcontrolcode applyverticalitalickernmathcontrolcode applyordinaryitalickernmathcontrolcode applycharitalickernmathcontrolcode \ +reboxcharitalickernmathcontrolcode applyboxeditalickernmathcontrolcode staircasekernmathcontrolcode applytextitalickernmathcontrolcode applyscriptitalickernmathcontrolcode \ +italicshapekernmathcontrolcode checkspaceitalickernmathcontrolcode checktextitalickernmathcontrolcode noligaturingglyphoptioncode nokerningglyphoptioncode \ +noexpansionglyphoptioncode noprotrusionglyphoptioncode noleftkerningglyphoptioncode noleftligaturingglyphoptioncode norightkerningglyphoptioncode \ +norightligaturingglyphoptioncode noitaliccorrectionglyphoptioncode normalparcontextcode vmodeparcontextcode vboxparcontextcode \ +vtopparcontextcode vcenterparcontextcode vadjustparcontextcode insertparcontextcode outputparcontextcode \ +alignparcontextcode noalignparcontextcode spanparcontextcode resetparcontextcode leftoriginlistanchorcode \ +leftheightlistanchorcode leftdepthlistanchorcode rightoriginlistanchorcode rightheightlistanchorcode rightdepthlistanchorcode \ +centeroriginlistanchorcode centerheightlistanchorcode centerdepthlistanchorcode halfwaytotallistanchorcode halfwayheightlistanchorcode \ +halfwaydepthlistanchorcode halfwayleftlistanchorcode halfwayrightlistanchorcode negatexlistsigncode negateylistsigncode \ +negatelistsigncode fontslantperpoint fontinterwordspace fontinterwordstretch fontinterwordshrink \ +fontexheight fontemwidth fontextraspace slantperpoint mathexheight \ +mathemwidth interwordspace interwordstretch interwordshrink exheight \ +emwidth extraspace mathaxisheight muquad startmode \ +stopmode startnotmode stopnotmode startmodeset stopmodeset \ +doifmode doifelsemode doifmodeelse doifnotmode startmodeset \ +stopmodeset startallmodes stopallmodes startnotallmodes stopnotallmodes \ +doifallmodes doifelseallmodes doifallmodeselse doifnotallmodes startenvironment \ +stopenvironment environment startcomponent stopcomponent component \ +startproduct stopproduct product startproject stopproject \ +project starttext stoptext startnotext stopnotext \ +startdocument stopdocument documentvariable unexpandeddocumentvariable setupdocument \ +presetdocument doifelsedocumentvariable doifdocumentvariableelse doifdocumentvariable doifnotdocumentvariable \ +startmodule stopmodule usemodule usetexmodule useluamodule \ +setupmodule currentmoduleparameter moduleparameter everystarttext everystoptext \ +startTEXpage stopTEXpage enablemode disablemode preventmode \ +definemode globalenablemode globaldisablemode globalpreventmode pushmode \ +popmode typescriptone typescripttwo typescriptthree mathsizesuffix \ +mathordinarycode mathordcode mathoperatorcode mathopcode mathbinarycode \ +mathbincode mathrelationcode mathrelcode mathopencode mathclosecode \ +mathpunctuationcode mathpunctcode mathovercode mathundercode mathinnercode \ +mathradicalcode mathfractioncode mathmiddlecode mathaccentcode mathfencedcode \ +mathghostcode mathvariablecode mathactivecode mathvcentercode mathconstructcode \ +mathwrappedcode mathbegincode mathendcode mathexplicitcode mathdivisioncode \ +mathfactorialcode mathdimensioncode mathexperimentalcode mathtextpunctuationcode mathimaginarycode \ +mathdifferentialcode mathexponentialcode mathellipsiscode mathfunctioncode mathdigitcode \ +mathalphacode mathboxcode mathchoicecode mathnothingcode mathlimopcode \ +mathnolopcode mathunsetcode mathunspacedcode mathallcode mathfakecode \ +constantnumber constantnumberargument constantdimen constantdimenargument constantemptyargument \ +luastringsep !!bs !!es lefttorightmark righttoleftmark \ +lrm rlm bidilre bidirle bidipop \ +bidilro bidirlo breakablethinspace nobreakspace nonbreakablespace \ +narrownobreakspace zerowidthnobreakspace ideographicspace ideographichalffillspace twoperemspace \ +threeperemspace fourperemspace fiveperemspace sixperemspace figurespace \ +punctuationspace hairspace enquad emquad zerowidthspace \ +zerowidthnonjoiner zerowidthjoiner zwnj zwj optionalspace \ +asciispacechar softhyphen Ux eUx Umathaccents \ +parfillleftskip parfillrightskip startlmtxmode stoplmtxmode startmkivmode \ +stopmkivmode wildcardsymbol normalhyphenationcode automatichyphenationcode explicithyphenationcode \ +syllablehyphenationcode uppercasehyphenationcode collapsehyphenationcode compoundhyphenationcode strictstarthyphenationcode \ +strictendhyphenationcode automaticpenaltyhyphenationcode explicitpenaltyhyphenationcode permitgluehyphenationcode permitallhyphenationcode \ +permitmathreplacehyphenationcode forcecheckhyphenationcode lazyligatureshyphenationcode forcehandlerhyphenationcode feedbackcompoundhyphenationcode \ +ignoreboundshyphenationcode partialhyphenationcode completehyphenationcode normalizelinenormalizecode parindentskipnormalizecode \ +swaphangindentnormalizecode swapparsshapenormalizecode breakafterdirnormalizecode removemarginkernsnormalizecode clipwidthnormalizecode \ +flattendiscretionariesnormalizecode discardzerotabskipsnormalizecode flattenhleadersnormalizecode normalizeparnormalizeparcode flattenvleadersnormalizeparcode \ +nopreslackclassoptioncode nopostslackclassoptioncode lefttopkernclassoptioncode righttopkernclassoptioncode leftbottomkernclassoptioncode \ +rightbottomkernclassoptioncode lookaheadforendclassoptioncode noitaliccorrectionclassoptioncode defaultmathclassoptions checkligatureclassoptioncode \ +flattenclassoptioncode omitpenaltyclassoptioncode noligaturingglyphoptioncode nokerningglyphoptioncode noleftligatureglyphoptioncode \ +noleftkernglyphoptioncode norightligatureglyphoptioncode norightkernglyphoptioncode noexpansionglyphoptioncode noprotrusionglyphoptioncode \ +noitaliccorrectionglyphoptioncode nokerningcode noligaturingcode frozenflagcode tolerantflagcode \ +protectedflagcode primitiveflagcode permanentflagcode noalignedflagcode immutableflagcode \ +mutableflagcode globalflagcode overloadedflagcode immediateflagcode conditionalflagcode \ +valueflagcode instanceflagcode ordmathflattencode binmathflattencode relmathflattencode \ +punctmathflattencode innermathflattencode normalworddiscoptioncode preworddiscoptioncode postworddiscoptioncode \ +continueifinputfile continuewhenlmtxmode continuewhenmkivmode keywordclass.context.helpers=\ startsetups stopsetups startxmlsetups stopxmlsetups \ @@ -169,169 +173,169 @@ nextbox dowithnextbox dowithnextboxcs dowithnextboxcontent dowithnextboxcontentc flushnextbox boxisempty boxtostring contentostring prerolltostring \ givenwidth givenheight givendepth scangivendimensions scratchwidth \ scratchheight scratchdepth scratchoffset scratchdistance scratchtotal \ -scratchhsize scratchvsize scratchxoffset scratchyoffset scratchhoffset \ -scratchvoffset scratchxposition scratchyposition scratchtopoffset scratchbottomoffset \ -scratchleftoffset scratchrightoffset scratchcounterone scratchcountertwo scratchcounterthree \ -scratchcounterfour scratchcounterfive scratchcountersix scratchdimenone scratchdimentwo \ -scratchdimenthree scratchdimenfour scratchdimenfive scratchdimensix scratchskipone \ -scratchskiptwo scratchskipthree scratchskipfour scratchskipfive scratchskipsix \ -scratchmuskipone scratchmuskiptwo scratchmuskipthree scratchmuskipfour scratchmuskipfive \ -scratchmuskipsix scratchtoksone scratchtokstwo scratchtoksthree scratchtoksfour \ -scratchtoksfive scratchtokssix scratchboxone scratchboxtwo scratchboxthree \ -scratchboxfour scratchboxfive scratchboxsix scratchnx scratchny \ -scratchmx scratchmy scratchunicode scratchmin scratchmax \ -scratchleftskip scratchrightskip scratchtopskip scratchbottomskip doif \ -doifnot doifelse firstinset doifinset doifnotinset \ -doifelseinset doifinsetelse doifelsenextchar doifnextcharelse doifelsenextcharcs \ -doifnextcharcselse doifelsenextoptional doifnextoptionalelse doifelsenextoptionalcs doifnextoptionalcselse \ -doifelsefastoptionalcheck doiffastoptionalcheckelse doifelsefastoptionalcheckcs doiffastoptionalcheckcselse doifelsenextbgroup \ -doifnextbgroupelse doifelsenextbgroupcs doifnextbgroupcselse doifelsenextparenthesis doifnextparenthesiselse \ -doifelseundefined doifundefinedelse doifelsedefined doifdefinedelse doifundefined \ -doifdefined doifelsevalue doifvalue doifnotvalue doifnothing \ -doifsomething doifelsenothing doifnothingelse doifelsesomething doifsomethingelse \ -doifvaluenothing doifvaluesomething doifelsevaluenothing doifvaluenothingelse doifelsedimension \ -doifdimensionelse doifelsenumber doifnumberelse doifnumber doifnotnumber \ -doifelsecommon doifcommonelse doifcommon doifnotcommon doifinstring \ -doifnotinstring doifelseinstring doifinstringelse doifelseassignment doifassignmentelse \ -docheckassignment doifelseassignmentcs doifassignmentelsecs validassignment novalidassignment \ -doiftext doifelsetext doiftextelse doifnottext quitcondition \ -truecondition falsecondition tracingall tracingnone loggingall \ -tracingcatcodes showluatokens aliasmacro removetoks appendtoks \ -prependtoks appendtotoks prependtotoks to endgraf \ -endpar reseteverypar finishpar empty null \ -space quad enspace emspace charspace \ -nbsp crlf obeyspaces obeylines obeytabs \ -obeypages obeyedspace obeyedline obeyedtab obeyedpage \ -normalspace naturalspace controlspace normalspaces ignoretabs \ -ignorelines ignorepages ignoreeofs setcontrolspaces executeifdefined \ -singleexpandafter doubleexpandafter tripleexpandafter dontleavehmode removelastspace \ -removeunwantedspaces keepunwantedspaces removepunctuation ignoreparskip forcestrutdepth \ -onlynonbreakablespace wait writestatus define defineexpandable \ -redefine setmeasure setemeasure setgmeasure setxmeasure \ -definemeasure freezemeasure measure measured directmeasure \ -setquantity setequantity setgquantity setxquantity definequantity \ -freezequantity quantity quantitied directquantity installcorenamespace \ -getvalue getuvalue setvalue setevalue setgvalue \ -setxvalue letvalue letgvalue resetvalue undefinevalue \ -ignorevalue setuvalue setuevalue setugvalue setuxvalue \ -globallet udef ugdef uedef uxdef \ -checked unique getparameters geteparameters getgparameters \ -getxparameters forgetparameters copyparameters getdummyparameters dummyparameter \ -directdummyparameter setdummyparameter letdummyparameter setexpandeddummyparameter usedummystyleandcolor \ -usedummystyleparameter usedummycolorparameter processcommalist processcommacommand quitcommalist \ -quitprevcommalist processaction processallactions processfirstactioninset processallactionsinset \ -unexpanded expanded startexpanded stopexpanded protect \ -unprotect firstofoneargument firstoftwoarguments secondoftwoarguments firstofthreearguments \ -secondofthreearguments thirdofthreearguments firstoffourarguments secondoffourarguments thirdoffourarguments \ -fourthoffourarguments firstoffivearguments secondoffivearguments thirdoffivearguments fourthoffivearguments \ -fifthoffivearguments firstofsixarguments secondofsixarguments thirdofsixarguments fourthofsixarguments \ -fifthofsixarguments sixthofsixarguments firstofoneunexpanded firstoftwounexpanded secondoftwounexpanded \ -firstofthreeunexpanded secondofthreeunexpanded thirdofthreeunexpanded gobbleoneargument gobbletwoarguments \ -gobblethreearguments gobblefourarguments gobblefivearguments gobblesixarguments gobblesevenarguments \ -gobbleeightarguments gobbleninearguments gobbletenarguments gobbleoneoptional gobbletwooptionals \ -gobblethreeoptionals gobblefouroptionals gobblefiveoptionals dorecurse doloop \ -exitloop dostepwiserecurse recurselevel recursedepth dofastloopcs \ -fastloopindex fastloopfinal dowith doloopovermatch doloopovermatched \ -doloopoverlist newconstant setnewconstant setconstant setconstantvalue \ -newconditional settrue setfalse settruevalue setfalsevalue \ -setconditional newmacro setnewmacro newfraction newsignal \ -newboundary 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 mathclassvalue startnointerference stopnointerference \ -twodigits threedigits leftorright offinterlineskip oninterlineskip \ -nointerlineskip strut halfstrut quarterstrut depthstrut \ -halflinestrut noheightstrut setstrut strutbox strutht \ -strutdp strutwd struthtdp strutgap begstrut \ -endstrut lineheight leftboundary rightboundary signalcharacter \ -aligncontentleft aligncontentmiddle aligncontentright shiftbox vpackbox \ -hpackbox vpackedbox hpackedbox ordordspacing ordopspacing \ -ordbinspacing ordrelspacing ordopenspacing ordclosespacing ordpunctspacing \ -ordinnerspacing ordfracspacing ordradspacing ordmiddlespacing ordaccentspacing \ -opordspacing opopspacing opbinspacing oprelspacing opopenspacing \ -opclosespacing oppunctspacing opinnerspacing opfracspacing opradspacing \ -opmiddlespacing opaccentspacing binordspacing binopspacing binbinspacing \ -binrelspacing binopenspacing binclosespacing binpunctspacing bininnerspacing \ -binfracspacing binradspacing binmiddlespacing binaccentspacing relordspacing \ -relopspacing relbinspacing relrelspacing relopenspacing relclosespacing \ -relpunctspacing relinnerspacing relfracspacing relradspacing relmiddlespacing \ -relaccentspacing openordspacing openopspacing openbinspacing openrelspacing \ -openopenspacing openclosespacing openpunctspacing openinnerspacing openfracspacing \ -openradspacing openmiddlespacing openaccentspacing closeordspacing closeopspacing \ -closebinspacing closerelspacing closeopenspacing closeclosespacing closepunctspacing \ -closeinnerspacing closefracspacing closeradspacing closemiddlespacing closeaccentspacing \ -punctordspacing punctopspacing punctbinspacing punctrelspacing punctopenspacing \ -punctclosespacing punctpunctspacing punctinnerspacing punctfracspacing punctradspacing \ -punctmiddlespacing punctaccentspacing innerordspacing inneropspacing innerbinspacing \ -innerrelspacing inneropenspacing innerclosespacing innerpunctspacing innerinnerspacing \ -innerfracspacing innerradspacing innermiddlespacing inneraccentspacing fracordspacing \ -fracopspacing fracbinspacing fracrelspacing fracopenspacing fracclosespacing \ -fracpunctspacing fracinnerspacing fracfracspacing fracradspacing fracmiddlespacing \ -fracaccentspacing radordspacing radopspacing radbinspacing radrelspacing \ -radopenspacing radclosespacing radpunctspacing radinnerspacing radfracspacing \ -radradspacing radmiddlespacing radaccentspacing middleordspacing middleopspacing \ -middlebinspacing middlerelspacing middleopenspacing middleclosespacing middlepunctspacing \ -middleinnerspacing middlefracspacing middleradspacing middlemiddlespacing middleaccentspacing \ -accentordspacing accentopspacing accentbinspacing accentrelspacing accentopenspacing \ -accentclosespacing accentpunctspacing accentinnerspacing accentfracspacing accentradspacing \ -accentmiddlespacing accentaccentspacing normalreqno startimath stopimath \ -normalstartimath normalstopimath startdmath stopdmath normalstartdmath \ -normalstopdmath normalsuperscript normalsubscript normalnosuperscript normalnosubscript \ -normalprimescript superscript subscript nosuperscript nosubscript \ -primescript superprescript subprescript nosuperprescript nosubsprecript \ -uncramped cramped mathstyletrigger triggermathstyle triggeredmathstyle \ -mathstylefont mathsmallstylefont mathstyleface mathsmallstyleface mathstylecommand \ -mathpalette mathstylehbox mathstylevbox mathstylevcenter mathstylevcenteredhbox \ -mathstylevcenteredvbox mathtext setmathsmalltextbox setmathtextbox pushmathstyle \ -popmathstyle triggerdisplaystyle triggertextstyle triggerscriptstyle triggerscriptscriptstyle \ -triggeruncrampedstyle triggercrampedstyle triggersmallstyle triggeruncrampedsmallstyle triggercrampedsmallstyle \ -triggerbigstyle triggeruncrampedbigstyle triggercrampedbigstyle luaexpr expelsedoif \ -expdoif expdoifnot expdoifelsecommon expdoifcommonelse expdoifelseinset \ -expdoifinsetelse ctxdirectlua ctxlatelua ctxsprint ctxwrite \ -ctxcommand ctxdirectcommand ctxlatecommand ctxreport ctxlua \ -luacode lateluacode directluacode registerctxluafile ctxloadluafile \ -luaversion luamajorversion luaminorversion ctxluacode luaconditional \ -luaexpanded ctxluamatch startluaparameterset stopluaparameterset luaparameterset \ -definenamedlua obeylualines obeyluatokens startluacode stopluacode \ -startlua stoplua startctxfunction stopctxfunction ctxfunction \ -startctxfunctiondefinition stopctxfunctiondefinition installctxfunction installprotectedctxfunction installprotectedctxscanner \ -installctxscanner resetctxscanner cldprocessfile cldloadfile cldloadviafile \ -cldcontext cldcommand carryoverpar freezeparagraphproperties defrostparagraphproperties \ -setparagraphfreezing forgetparagraphfreezing updateparagraphproperties updateparagraphpenalties updateparagraphdemerits \ -updateparagraphshapes updateparagraphlines lastlinewidth assumelongusagecs Umathbotaccent \ -Umathtopaccent righttolefthbox lefttorighthbox righttoleftvbox lefttorightvbox \ -righttoleftvtop lefttorightvtop rtlhbox ltrhbox rtlvbox \ -ltrvbox rtlvtop ltrvtop autodirhbox autodirvbox \ -autodirvtop leftorrighthbox leftorrightvbox leftorrightvtop lefttoright \ -righttoleft checkedlefttoright checkedrighttoleft synchronizelayoutdirection synchronizedisplaydirection \ -synchronizeinlinedirection dirlre dirrle dirlro dirrlo \ -rtltext ltrtext lesshyphens morehyphens nohyphens \ -dohyphens dohyphencollapsing nohyphencollapsing compounddiscretionary Ucheckedstartdisplaymath \ -Ucheckedstopdisplaymath break nobreak allowbreak goodbreak \ -nospace nospacing dospacing naturalhbox naturalvbox \ -naturalvtop naturalhpack naturalvpack naturaltpack reversehbox \ -reversevbox reversevtop reversehpack reversevpack reversetpack \ -hcontainer vcontainer tcontainer frule compoundhyphenpenalty \ -start stop unsupportedcs openout closeout \ -write openin closein read readline \ -readfromterminal boxlines boxline setboxline copyboxline \ -boxlinewd boxlineht boxlinedp boxlinenw boxlinenh \ -boxlinend boxlinels boxliners boxlinelh boxlinerh \ -boxlinelp boxlinerp boxlinein boxrangewd boxrangeht \ -boxrangedp bitwiseset bitwiseand bitwiseor bitwisexor \ -bitwisenot bitwisenil ifbitwiseand bitwise bitwiseshift \ -bitwiseflip textdir linedir pardir boxdir \ -prelistbox postlistbox prelistcopy postlistcopy setprelistbox \ -setpostlistbox noligaturing nokerning noexpansion noprotrusion \ -noleftkerning noleftligaturing norightkerning norightligaturing noitaliccorrection \ -futureletnexttoken defbackslashbreak letbackslashbreak pushoverloadmode popoverloadmode \ -pushrunstate poprunstate suggestedalias showboxhere discoptioncodestring \ -flagcodestring frozenparcodestring glyphoptioncodestring groupcodestring hyphenationcodestring \ -mathcontrolcodestring mathflattencodestring normalizecodestring parcontextcodestring newlocalcount \ -newlocaldimen newlocalskip newlocalmuskip newlocaltoks newlocalbox \ -newlocalwrite newlocalread setnewlocalcount setnewlocaldimen setnewlocalskip \ -setnewlocalmuskip setnewlocaltoks setnewlocalbox ifexpression +scratchitalic scratchhsize scratchvsize scratchxoffset scratchyoffset \ +scratchhoffset scratchvoffset scratchxposition scratchyposition scratchtopoffset \ +scratchbottomoffset scratchleftoffset scratchrightoffset scratchcounterone scratchcountertwo \ +scratchcounterthree scratchcounterfour scratchcounterfive scratchcountersix scratchdimenone \ +scratchdimentwo scratchdimenthree scratchdimenfour scratchdimenfive scratchdimensix \ +scratchskipone scratchskiptwo scratchskipthree scratchskipfour scratchskipfive \ +scratchskipsix scratchmuskipone scratchmuskiptwo scratchmuskipthree scratchmuskipfour \ +scratchmuskipfive scratchmuskipsix scratchtoksone scratchtokstwo scratchtoksthree \ +scratchtoksfour scratchtoksfive scratchtokssix scratchboxone scratchboxtwo \ +scratchboxthree scratchboxfour scratchboxfive scratchboxsix scratchnx \ +scratchny scratchmx scratchmy scratchunicode scratchmin \ +scratchmax scratchleftskip scratchrightskip scratchtopskip scratchbottomskip \ +doif doifnot doifelse firstinset doifinset \ +doifnotinset doifelseinset doifinsetelse doifelsenextchar doifnextcharelse \ +doifelsenextcharcs doifnextcharcselse doifelsenextoptional doifnextoptionalelse doifelsenextoptionalcs \ +doifnextoptionalcselse doifelsefastoptionalcheck doiffastoptionalcheckelse doifelsefastoptionalcheckcs doiffastoptionalcheckcselse \ +doifelsenextbgroup doifnextbgroupelse doifelsenextbgroupcs doifnextbgroupcselse doifelsenextparenthesis \ +doifnextparenthesiselse doifelseundefined doifundefinedelse doifelsedefined doifdefinedelse \ +doifundefined doifdefined doifelsevalue doifvalue doifnotvalue \ +doifnothing doifsomething doifelsenothing doifnothingelse doifelsesomething \ +doifsomethingelse doifvaluenothing doifvaluesomething doifelsevaluenothing doifvaluenothingelse \ +doifelsedimension doifdimensionelse doifelsenumber doifnumberelse doifnumber \ +doifnotnumber doifelsecommon doifcommonelse doifcommon doifnotcommon \ +doifinstring doifnotinstring doifelseinstring doifinstringelse doifelseassignment \ +doifassignmentelse docheckassignment doifelseassignmentcs doifassignmentelsecs validassignment \ +novalidassignment doiftext doifelsetext doiftextelse doifnottext \ +quitcondition truecondition falsecondition tracingall tracingnone \ +loggingall tracingcatcodes showluatokens aliasmacro removetoks \ +appendtoks prependtoks appendtotoks prependtotoks to \ +endgraf endpar reseteverypar finishpar empty \ +null space quad enspace emspace \ +charspace nbsp crlf obeyspaces obeylines \ +obeytabs obeypages obeyedspace obeyedline obeyedtab \ +obeyedpage normalspace naturalspace controlspace normalspaces \ +ignoretabs ignorelines ignorepages ignoreeofs setcontrolspaces \ +executeifdefined singleexpandafter doubleexpandafter tripleexpandafter dontleavehmode \ +removelastspace removeunwantedspaces keepunwantedspaces removepunctuation ignoreparskip \ +forcestrutdepth onlynonbreakablespace wait writestatus define \ +defineexpandable redefine setmeasure setemeasure setgmeasure \ +setxmeasure definemeasure freezemeasure measure measured \ +directmeasure setquantity setequantity setgquantity setxquantity \ +definequantity freezequantity quantity quantitied directquantity \ +installcorenamespace getvalue getuvalue setvalue setevalue \ +setgvalue setxvalue letvalue letgvalue resetvalue \ +undefinevalue ignorevalue setuvalue setuevalue setugvalue \ +setuxvalue globallet udef ugdef uedef \ +uxdef checked unique getparameters geteparameters \ +getgparameters getxparameters forgetparameters copyparameters getdummyparameters \ +dummyparameter directdummyparameter setdummyparameter letdummyparameter setexpandeddummyparameter \ +usedummystyleandcolor usedummystyleparameter usedummycolorparameter processcommalist processcommacommand \ +quitcommalist quitprevcommalist processaction processallactions processfirstactioninset \ +processallactionsinset unexpanded expanded startexpanded stopexpanded \ +protect unprotect firstofoneargument firstoftwoarguments secondoftwoarguments \ +firstofthreearguments secondofthreearguments thirdofthreearguments firstoffourarguments secondoffourarguments \ +thirdoffourarguments fourthoffourarguments firstoffivearguments secondoffivearguments thirdoffivearguments \ +fourthoffivearguments fifthoffivearguments firstofsixarguments secondofsixarguments thirdofsixarguments \ +fourthofsixarguments fifthofsixarguments sixthofsixarguments firstofoneunexpanded firstoftwounexpanded \ +secondoftwounexpanded firstofthreeunexpanded secondofthreeunexpanded thirdofthreeunexpanded gobbleoneargument \ +gobbletwoarguments gobblethreearguments gobblefourarguments gobblefivearguments gobblesixarguments \ +gobblesevenarguments gobbleeightarguments gobbleninearguments gobbletenarguments gobbleoneoptional \ +gobbletwooptionals gobblethreeoptionals gobblefouroptionals gobblefiveoptionals dorecurse \ +doloop exitloop dostepwiserecurse recurselevel recursedepth \ +dofastloopcs fastloopindex fastloopfinal dowith doloopovermatch \ +doloopovermatched doloopoverlist newconstant setnewconstant setconstant \ +setconstantvalue newconditional settrue setfalse settruevalue \ +setfalsevalue setconditional newmacro setnewmacro newfraction \ +newsignal newboundary 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 mathclassvalue startnointerference \ +stopnointerference twodigits threedigits leftorright offinterlineskip \ +oninterlineskip nointerlineskip strut halfstrut quarterstrut \ +depthstrut halflinestrut noheightstrut setstrut strutbox \ +strutht strutdp strutwd struthtdp strutgap \ +begstrut endstrut lineheight leftboundary rightboundary \ +signalcharacter aligncontentleft aligncontentmiddle aligncontentright shiftbox \ +vpackbox hpackbox vpackedbox hpackedbox ordordspacing \ +ordopspacing ordbinspacing ordrelspacing ordopenspacing ordclosespacing \ +ordpunctspacing ordinnerspacing ordfracspacing ordradspacing ordmiddlespacing \ +ordaccentspacing opordspacing opopspacing opbinspacing oprelspacing \ +opopenspacing opclosespacing oppunctspacing opinnerspacing opfracspacing \ +opradspacing opmiddlespacing opaccentspacing binordspacing binopspacing \ +binbinspacing binrelspacing binopenspacing binclosespacing binpunctspacing \ +bininnerspacing binfracspacing binradspacing binmiddlespacing binaccentspacing \ +relordspacing relopspacing relbinspacing relrelspacing relopenspacing \ +relclosespacing relpunctspacing relinnerspacing relfracspacing relradspacing \ +relmiddlespacing relaccentspacing openordspacing openopspacing openbinspacing \ +openrelspacing openopenspacing openclosespacing openpunctspacing openinnerspacing \ +openfracspacing openradspacing openmiddlespacing openaccentspacing closeordspacing \ +closeopspacing closebinspacing closerelspacing closeopenspacing closeclosespacing \ +closepunctspacing closeinnerspacing closefracspacing closeradspacing closemiddlespacing \ +closeaccentspacing punctordspacing punctopspacing punctbinspacing punctrelspacing \ +punctopenspacing punctclosespacing punctpunctspacing punctinnerspacing punctfracspacing \ +punctradspacing punctmiddlespacing punctaccentspacing innerordspacing inneropspacing \ +innerbinspacing innerrelspacing inneropenspacing innerclosespacing innerpunctspacing \ +innerinnerspacing innerfracspacing innerradspacing innermiddlespacing inneraccentspacing \ +fracordspacing fracopspacing fracbinspacing fracrelspacing fracopenspacing \ +fracclosespacing fracpunctspacing fracinnerspacing fracfracspacing fracradspacing \ +fracmiddlespacing fracaccentspacing radordspacing radopspacing radbinspacing \ +radrelspacing radopenspacing radclosespacing radpunctspacing radinnerspacing \ +radfracspacing radradspacing radmiddlespacing radaccentspacing middleordspacing \ +middleopspacing middlebinspacing middlerelspacing middleopenspacing middleclosespacing \ +middlepunctspacing middleinnerspacing middlefracspacing middleradspacing middlemiddlespacing \ +middleaccentspacing accentordspacing accentopspacing accentbinspacing accentrelspacing \ +accentopenspacing accentclosespacing accentpunctspacing accentinnerspacing accentfracspacing \ +accentradspacing accentmiddlespacing accentaccentspacing normalreqno startimath \ +stopimath normalstartimath normalstopimath startdmath stopdmath \ +normalstartdmath normalstopdmath normalsuperscript normalsubscript normalnosuperscript \ +normalnosubscript normalprimescript superscript subscript nosuperscript \ +nosubscript primescript superprescript subprescript nosuperprescript \ +nosubsprecript uncramped cramped mathstyletrigger triggermathstyle \ +triggeredmathstyle mathstylefont mathsmallstylefont mathstyleface mathsmallstyleface \ +mathstylecommand mathpalette mathstylehbox mathstylevbox mathstylevcenter \ +mathstylevcenteredhbox mathstylevcenteredvbox mathtext setmathsmalltextbox setmathtextbox \ +pushmathstyle popmathstyle triggerdisplaystyle triggertextstyle triggerscriptstyle \ +triggerscriptscriptstyle triggeruncrampedstyle triggercrampedstyle triggersmallstyle triggeruncrampedsmallstyle \ +triggercrampedsmallstyle triggerbigstyle triggeruncrampedbigstyle triggercrampedbigstyle luaexpr \ +expelsedoif expdoif expdoifnot expdoifelsecommon expdoifcommonelse \ +expdoifelseinset expdoifinsetelse ctxdirectlua ctxlatelua ctxsprint \ +ctxwrite ctxcommand ctxdirectcommand ctxlatecommand ctxreport \ +ctxlua luacode lateluacode directluacode registerctxluafile \ +ctxloadluafile luaversion luamajorversion luaminorversion ctxluacode \ +luaconditional luaexpanded ctxluamatch startluaparameterset stopluaparameterset \ +luaparameterset definenamedlua obeylualines obeyluatokens startluacode \ +stopluacode startlua stoplua startctxfunction stopctxfunction \ +ctxfunction startctxfunctiondefinition stopctxfunctiondefinition installctxfunction installprotectedctxfunction \ +installprotectedctxscanner installctxscanner resetctxscanner cldprocessfile cldloadfile \ +cldloadviafile cldcontext cldcommand carryoverpar freezeparagraphproperties \ +defrostparagraphproperties setparagraphfreezing forgetparagraphfreezing updateparagraphproperties updateparagraphpenalties \ +updateparagraphdemerits updateparagraphshapes updateparagraphlines lastlinewidth assumelongusagecs \ +Umathbotaccent Umathtopaccent righttolefthbox lefttorighthbox righttoleftvbox \ +lefttorightvbox righttoleftvtop lefttorightvtop rtlhbox ltrhbox \ +rtlvbox ltrvbox rtlvtop ltrvtop autodirhbox \ +autodirvbox autodirvtop leftorrighthbox leftorrightvbox leftorrightvtop \ +lefttoright righttoleft checkedlefttoright checkedrighttoleft synchronizelayoutdirection \ +synchronizedisplaydirection synchronizeinlinedirection dirlre dirrle dirlro \ +dirrlo rtltext ltrtext lesshyphens morehyphens \ +nohyphens dohyphens dohyphencollapsing nohyphencollapsing compounddiscretionary \ +Ucheckedstartdisplaymath Ucheckedstopdisplaymath break nobreak allowbreak \ +goodbreak nospace nospacing dospacing naturalhbox \ +naturalvbox naturalvtop naturalhpack naturalvpack naturaltpack \ +reversehbox reversevbox reversevtop reversehpack reversevpack \ +reversetpack hcontainer vcontainer tcontainer frule \ +compoundhyphenpenalty start stop unsupportedcs openout \ +closeout write openin closein read \ +readline readfromterminal boxlines boxline setboxline \ +copyboxline boxlinewd boxlineht boxlinedp boxlinenw \ +boxlinenh boxlinend boxlinels boxliners boxlinelh \ +boxlinerh boxlinelp boxlinerp boxlinein boxrangewd \ +boxrangeht boxrangedp bitwiseset bitwiseand bitwiseor \ +bitwisexor bitwisenot bitwisenil ifbitwiseand bitwise \ +bitwiseshift bitwiseflip textdir linedir pardir \ +boxdir prelistbox postlistbox prelistcopy postlistcopy \ +setprelistbox setpostlistbox noligaturing nokerning noexpansion \ +noprotrusion noleftkerning noleftligaturing norightkerning norightligaturing \ +noitaliccorrection futureletnexttoken defbackslashbreak letbackslashbreak pushoverloadmode \ +popoverloadmode pushrunstate poprunstate suggestedalias showboxhere \ +discoptioncodestring flagcodestring frozenparcodestring glyphoptioncodestring groupcodestring \ +hyphenationcodestring mathcontrolcodestring mathflattencodestring normalizecodestring parcontextcodestring \ +newlocalcount newlocaldimen newlocalskip newlocalmuskip newlocaltoks \ +newlocalbox newlocalwrite newlocalread setnewlocalcount setnewlocaldimen \ +setnewlocalskip setnewlocalmuskip setnewlocaltoks setnewlocalbox ifexpression diff --git a/context/data/scite/context/scite-context-data-interfaces.properties b/context/data/scite/context/scite-context-data-interfaces.properties index 54acce1f1..3455dd44c 100644 --- a/context/data/scite/context/scite-context-data-interfaces.properties +++ b/context/data/scite/context/scite-context-data-interfaces.properties @@ -618,657 +618,657 @@ keepblocks keeplinestogether keepunwantedspaces kerncharacters khook \ kkra koreancirclenumerals koreannumerals koreannumeralsc koreannumeralsp \ koreanparentnumerals lVert labellanguage labeltext labeltexts \ lacute lambda lambdabar land langle \ -language languageCharacters languagecharacters languagecharwidth lastcounter \ -lastcountervalue lastdigit lastlinewidth lastnaturalboxdp lastnaturalboxht \ -lastnaturalboxwd lastparwrapper lastpredefinedsymbol lastrealpage lastrealpagenumber \ -lastsubcountervalue lastsubpage lastsubpagenumber lasttwodigits lastuserpage \ -lastuserpagenumber lateluacode latin layeredtext layerheight \ -layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbar lbox \ -lbrace lbracket lcaron lceil lchexnumber \ -lchexnumbers lcommaaccent lcurl ldotmiddle ldotp \ -ldots le leadsto left leftaligned \ -leftarrow leftarrowtail leftarrowtriangle leftbottombox leftbox \ -leftdasharrow leftguillemot leftharpoondown leftharpoonup lefthbox \ -leftheadtext leftlabeltext leftleftarrows leftline leftmathlabeltext \ -leftorrighthbox leftorrightvbox leftorrightvtop leftrightarrow leftrightarrows \ -leftrightarrowtriangle leftrightharpoons leftrightsquigarrow leftskipadaption leftsquigarrow \ -leftsubguillemot leftthreetimes lefttopbox lefttoright lefttorighthbox \ -lefttorightvbox lefttorightvtop leftwavearrow leftwhitearrow leq \ -leqq leqslant lessapprox lessdot lesseqgtr \ -lesseqqgtr lessgtr lesssim letbeundefined letcatcodecommand \ -letcscsname letcsnamecs letcsnamecsname letdummyparameter letempty \ -letgvalue letgvalueempty letgvalurelax letterampersand letterat \ -letterbackslash letterbar letterbgroup letterclosebrace lettercolon \ -letterdollar letterdoublequote letteregroup letterescape letterexclamationmark \ -letterhash letterhat letterleftbrace letterleftbracket letterleftparenthesis \ -letterless lettermore letteropenbrace letterpercent letterquestionmark \ -letterrightbrace letterrightbracket letterrightparenthesis lettersinglequote letterslash \ -letterspacing lettertilde letterunderscore letvalue letvalueempty \ -letvaluerelax lfence lfloor lgroup lhbox \ -lhooknwarrow lhooksearrow limitatefirstline limitatelines limitatetext \ -line linebox linefeed linefillerhbox linefillervbox \ -linefillervtop linenote linespanningtext linethickness linterval \ -listcitation listcite listlength listnamespaces literalmode \ -ljligature ll llangle llap llbracket \ -llcorner lll llless llointerval lmoustache \ -lnapprox lneq lneqq lnot lnsim \ -loadanyfile loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile loadcldfile \ -loadcldfileonce loadfontgoodies loadluafile loadluafileonce loadspellchecklist \ -loadtexfile loadtexfileonce loadtypescriptfile localframed localframedwithsettings \ -localhsize localpopbox localpopmacro localpushbox localpushmacro \ -localundefine locatedfilepath locatefilepath locfilename logo \ -lohi lointerval lomihi longleftarrow longleftrightarrow \ -longmapsfrom longmapsto longrightarrow longrightsquigarrow looparrowleft \ -looparrowright lor low lowerbox lowercased \ -lowercasestring lowercasing lowerleftdoubleninequote lowerleftsingleninequote lowerrightdoubleninequote \ -lowerrightsingleninequote lozenge lparent lrcorner lrointerval \ -lrtbbox lstroke lt ltimes ltop \ -ltrhbox ltrvbox ltrvtop luaTeX luacode \ -luaconditional luaenvironment luaexpanded luaexpr luafunction \ -luajitTeX luamajorversion luametaTeX luaminorversion luaparameterset \ -luasetup luaversion lvert m mLeftarrow \ -mLeftrightarrow mRightarrow mainlanguage makecharacteractive makerawcommalist \ -makestrutofbox maltese mapfontsize mapsdown mapsfrom \ -mapsto mapsup margindata margintext markcontent \ -markedpages marking markinjector markpage markreferencepage \ -mat math mathampersand mathbf mathbi \ -mathblackboard mathbs mathdefault mathdollar mathdouble \ -mathematics mathfraktur mathfunction mathhash mathhyphen \ -mathit mathitalic mathlabellanguage mathlabeltext mathlabeltexts \ -mathop mathover mathpercent mathrm mathscript \ -mathsl mathss mathtext mathtextbf mathtextbi \ -mathtextbs mathtextit mathtextsl mathtexttf mathtf \ -mathtriplet mathtt mathunder mathupright mathword \ -mathwordbf mathwordbi mathwordbs mathwordit mathwordsl \ -mathwordtf maxaligned mbox mcframed measure \ -measured measuredangle measuredeq medskip medspace \ -menubutton mequal message mfence mframed \ -mfunction mfunctionlabeltext mhbox mho mhookleftarrow \ -mhookrightarrow mid midaligned middle middlealigned \ -middlebox midhbox midsubsentence minimalhbox minus \ -minuscolon mirror mixedcaps mkvibuffer mleftarrow \ -mleftharpoondown mleftharpoonup mleftrightarrow mleftrightharpoons mmapsto \ -models moduleparameter molecule mono monobold \ -mononormal month monthlong monthshort mp \ -mprandomnumber mrel mrightarrow mrightharpoondown mrightharpoonup \ -mrightleftharpoons mrightoverleftarrow mtext mtriplerel mtwoheadleftarrow \ -mtwoheadrightarrow mu multimap nHdownarrow nHuparrow \ -nLeftarrow nLeftrightarrow nRightarrow nVDash nVdash \ -nVleftarrow nVleftrightarrow nVrightarrow nabla nacute \ -namedheadnumber namedstructureheadlocation namedstructureuservariable namedstructurevariable namedtaggedlabeltexts \ -napostrophe napprox napproxEq narrownobreakspace nasymp \ -natural naturalhbox naturalhpack naturalnumbers naturaltpack \ -naturalvbox naturalvcenter naturalvpack naturalvtop naturalwd \ -ncaron ncommaaccent ncong ncurl ndivides \ -ne nearrow neg negatecolorbox negated \ -negativesign negemspace negenspace negthinspace neng \ -neq nequiv neswarrow newattribute newcatcodetable \ -newcounter newevery newfrenchspacing newluatable newmode \ -newsignal newsystemmode nexists nextbox nextboxdp \ -nextboxht nextboxhtdp nextboxwd nextcounter nextcountervalue \ -nextdepth nextparagraphs nextrealpage nextrealpagenumber nextsubcountervalue \ -nextsubpage nextsubpagenumber nextuserpage nextuserpagenumber ngeq \ -ngrave ngtr ngtrless ngtrsim ni \ -nihongo nin njligature nleftarrow nleftrightarrow \ -nleq nless nlessgtr nlesssim nmid \ -nni nobar nobreakspace nocap nocharacteralign \ -nocitation nocite nodetostring noffigurepages noflines \ -noflinesinbox noflocalfloats noheaderandfooterlines noheightstrut nohyphens \ -noindentation noitem nonfrenchspacing nonmathematics nonvalidassignment \ -normal normalboldface normalframedwithsettings normalitalicface normalizebodyfontsize \ -normalizedfontsize normalizefontdepth normalizefontheight normalizefontline normalizefontwidth \ -normalizetextdepth normalizetextheight normalizetextline normalizetextwidth normalslantedface \ -normaltypeface nospace not note notesymbol \ -notin notopandbottomlines notragged nowns nparallel \ -nprec npreccurlyeq nrightarrow nsim nsimeq \ -nsqsubseteq nsqsupseteq nsubset nsubseteq nsucc \ -nsucccurlyeq nsupset nsupseteq ntilde ntimes \ -ntriangleleft ntrianglelefteq ntriangleright ntrianglerighteq nu \ -numberofpoints numbers nvDash nvdash nvleftarrow \ -nvleftrightarrow nvrightarrow nwarrow nwsearrow oacute \ -obeydepth objectdepth objectheight objectmargin objectwidth \ -obox obreve ocaron ocircumflex ocircumflexacute \ -ocircumflexdotbelow ocircumflexgrave ocircumflexhook ocircumflextilde octnumber \ -octstringtonumber odiaeresis odiaeresismacron odot odotaccent \ -odotaccentmacron odotbelow odoublegrave oeligature offset \ -offsetbox ograve ohm ohook ohorn \ -ohornacute ohorndotbelow ohorngrave ohornhook ohorntilde \ -ohungarumlaut oiiint oiint oint ointclockwise \ -ointctrclockwise oinvertedbreve omacron omega omicron \ -ominus onedigitrounding oneeighth onefifth onehalf \ -onequarter onesixth onesuperior onethird oogonek \ -oogonekmacron operatorlanguage operatortext oplus ordfeminine \ -ordinaldaynumber ordinalstr ordmasculine ornamenttext oslash \ -ostroke ostrokeacute otilde otildemacron otimes \ -outputfilename outputstreambox outputstreamcopy outputstreamunvbox outputstreamunvcopy \ -over overbar overbars overbartext overbarunderbar \ -overbrace overbracetext overbraceunderbrace overbracket overbrackettext \ -overbracketunderbracket overlaybutton overlaycolor overlaydepth overlayfigure \ -overlayheight overlayimage overlaylinecolor overlaylinewidth overlayoffset \ -overlayrollbutton overlaywidth overleftarrow overleftharpoondown overleftharpoonup \ -overleftrightarrow overloaderror overparent overparenttext overparentunderparent \ -overrightarrow overrightharpoondown overrightharpoonup overset overstrike \ -overstrikes overtwoheadleftarrow overtwoheadrightarrow owns page \ -pagearea pagebreak pagefigure pageinjection pagenumber \ -pagereference pagestaterealpage pagestaterealpageorder paletsize paragraphmark \ -parallel part partial pdfTeX pdfactualtext \ -pdfbackendactualtext pdfbackendcurrentresources pdfbackendsetcatalog pdfbackendsetcolorspace pdfbackendsetextgstate \ -pdfbackendsetinfo pdfbackendsetname pdfbackendsetpageattribute pdfbackendsetpageresource pdfbackendsetpagesattribute \ -pdfbackendsetpattern pdfbackendsetshade pdfcolor pdfeTeX percent \ -percentdimen periodcentered periods permitcaretescape permitcircumflexescape \ -permitspacesbetweengroups perp persiandecimals persiandecimalseparator persiannumerals \ -persianthousandsseparator perthousand phantom phantombox phi \ -phook pi pickupgroupedcommand pitchfork placeattachments \ -placebookmarks placebtxrendering placechemical placecitation placecombinedlist \ -placecomments placecontent placecurrentformulanumber placedbox placefigure \ -placefloat placefloatcaption placefloatwithsetups placefootnotes placeformula \ -placeframed placegraphic placeheadnumber placeheadtext placehelp \ -placeholder placeindex placeinitial placeintermezzo placelayer \ -placelayeredtext placelegend placelist placelistofabbreviations placelistofchemicals \ -placelistoffigures placelistofgraphics placelistofintermezzi placelistoflogos placelistofpublications \ -placelistofsorts placelistofsynonyms placelistoftables placelocalfootnotes placelocalnotes \ -placement placenamedfloat placenamedformula placenotes placeongrid \ -placeontopofeachother placepagenumber placepairedbox placeparallel placerawheaddata \ -placerawheadnumber placerawheadtext placerawlist placeregister placerenderingwindow \ -placesidebyside placesubformula placetable pm popattribute \ -popmacro popmode popsystemmode position positionoverlay \ -positionregionoverlay positivesign postponenotes prec precapprox \ -preccurlyeq preceq preceqq precnapprox precneq \ -precneqq precnsim precsim predefinedfont predefinefont \ -predefinesymbol prefixedpagenumber prefixlanguage prefixtext prependetoks \ -prependgvalue prependtocommalist prependtoks prependtoksonce prependvalue \ -prerollblank presetbtxlabeltext presetdocument presetfieldsymbols presetheadtext \ -presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext presetsuffixtext \ -presettaglabeltext presetunittext pretocommalist prettyprintbuffer prevcounter \ -prevcountervalue preventmode prevrealpage prevrealpagenumber prevsubcountervalue \ -prevsubpage prevsubpagenumber prevuserpage prevuserpagenumber prime \ -primes procent processMPbuffer processMPfigurefile processaction \ -processallactionsinset processassignlist processassignmentcommand processassignmentlist processbetween \ -processblocks processbodyfontenvironmentlist processcolorcomponents processcommacommand processcommalist \ -processcommalistwithparameters processcontent processfile processfilemany processfilenone \ -processfileonce processfirstactioninset processisolatedchars processisolatedwords processlinetablebuffer \ -processlinetablefile processlist processmonth processranges processseparatedlist \ -processtexbuffer processtokens processuntil processxtablebuffer processyear \ -prod product profiledbox profilegivenbox program \ -project propto pseudoMixedCapped pseudoSmallCapped pseudoSmallcapped \ -pseudosmallcapped psi punctuationspace purenumber pushattribute \ -pushbutton pushmacro pushmode pushoutputstream pushsystemmode \ -putboxincache putnextboxincache qquad quad quadrupleprime \ -quads quarterstrut questiondown questionedeq quitcommalist \ -quitprevcommalist quittypescriptscanning quotation quote quotedbl \ -quotedblbase quotedblleft quotedblright quoteleft quoteright \ -quotesingle quotesinglebase rVert racute raggedbottom \ -raggedcenter raggedleft raggedright raggedwidecenter raisebox \ -randomizetext randomnumber rangle rationals rawcounter \ -rawcountervalue rawdate rawdoifelseinset rawdoifinset rawdoifinsetelse \ -rawgetparameters rawprocessaction rawprocesscommacommand rawprocesscommalist rawstructurelistuservariable \ -rawsubcountervalue rbox rbrace rbracket rcaron \ -rceil rcommaaccent rdoublegrave readfile readfixfile \ -readjobfile readlocfile readsetfile readsysfile readtexfile \ -readxmlfile realSmallCapped realSmallcapped realpagenumber reals \ -realsmallcapped recursedepth recurselevel recursestring redoconvertfont \ -ref reference referencecolumnnumber referencepagedetail referencepagestate \ -referenceprefix referencerealpage referencesymbol referring registerattachment \ -registerctxluafile registered registerexternalfigure registerfontclass registerhyphenationexception \ -registerhyphenationpattern registermenubuttons registerparwrapper registerparwrapperreverse registersort \ -registersynonym registerunit regular relatemarking relateparameterhandlers \ -relaxvalueifundefined relbar remainingcharacters remark removebottomthings \ -removedepth removefromcommalist removelastskip removelastspace removemarkedcontent \ -removepunctuation removesubstring removetoks removeunwantedspaces repeathead \ -replacefeature replaceincommalist replaceword rescan rescanwithsetup \ -resetMPdrawing resetMPenvironment resetMPinstance resetallattributes resetandaddfeature \ -resetbar resetboxesincache resetbreakpoints resetbuffer resetcharacteralign \ -resetcharacterkerning resetcharacterspacing resetcharacterstripping resetcollector resetcounter \ -resetctxscanner resetdigitsmanipulation resetdirection resetfeature resetflag \ -resetfontcolorsheme resetfontfallback resetfontsolution resethyphenationfeatures resetinjector \ -resetinteractionmenu resetitaliccorrection resetlayer resetlocalfloats resetmarker \ -resetmarking resetmode resetpagenumber resetparallel resetpath \ -resetpenalties resetperiodkerning resetprofile resetrecurselevel resetreference \ -resetreplacements resetscript resetsetups resetshownsynonyms resetsubpagenumber \ -resetsymbolset resetsystemmode resettimer resettokenlist resettrackers \ -resettrialtypesetting resetusedsortings resetusedsynonyms resetuserpagenumber resetvalue \ -resetvisualizers reshapebox resolvedglyphdirect resolvedglyphstyled restartcounter \ -restorebox restorecatcodes restorecounter restorecurrentattributes restoreendofline \ -restoreglobalbodyfont restriction retestfeature reusableMPgraphic reuseMPgraphic \ -reuserandomseed reverseddoubleprime reversedprime reversedtripleprime reversehbox \ -reversehpack reversetpack reversevbox reversevboxcontent reversevpack \ -reversevtop revivefeature rfence rfloor rgroup \ -rhbox rho rhooknearrow rhookswarrow right \ -rightaligned rightangle rightarrow rightarrowbar rightarrowtail \ -rightarrowtriangle rightbottombox rightbox rightdasharrow rightguillemot \ -rightharpoondown rightharpoonup righthbox rightheadtext rightlabeltext \ -rightleftarrows rightleftharpoons rightline rightmathlabeltext rightorleftpageaction \ -rightpageorder rightrightarrows rightskipadaption rightsquigarrow rightsubguillemot \ -rightthreearrows rightthreetimes righttoleft righttolefthbox righttoleftvbox \ -righttoleftvtop righttopbox rightwavearrow rightwhitearrow ring \ -rinterval rinvertedbreve risingdotseq rlap rlointerval \ -rmoustache rneq robustaddtocommalist robustdoifelseinset robustdoifinsetelse \ -robustpretocommalist rointerval rollbutton roman romanC \ -romanD romanI romanII romanIII romanIV \ -romanIX romanL romanM romanV romanVI \ -romanVII romanVIII romanX romanXI romanXII \ -romanc romand romani romanii romaniii \ -romaniv romanix romanl romanm romannumerals \ -romanv romanvi romanvii romanviii romanx \ -romanxi romanxii rootradical rotate rparent \ -rrangle rrbracket rrointerval rtimes rtlhbox \ -rtlvbox rtlvtop rtop ruby ruledhbox \ -ruledhpack ruledmbox ruledtopv ruledtpack ruledvbox \ -ruledvpack ruledvtop runMPbuffer runninghbox russianNumerals \ -russiannumerals rvert sacute safechar samplefile \ -sans sansbold sansnormal sansserif savebox \ -savebtxdataset savebuffer savecounter savecurrentattributes savenormalmeaning \ -savetaggedtwopassdata savetwopassdata sbox scale scaron \ -scedilla schwa schwahook scircumflex scommaaccent \ -screen searrow secondoffivearguments secondoffourarguments secondofsixarguments \ -secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded section \ -sectionmark seeindex select selectblocks serializecommalist \ -serializedcommalist serif serifbold serifnormal setJSpreamble \ -setMPlayer setMPpositiongraphic setMPpositiongraphicrange setMPtext setMPvariable \ -setMPvariables setautopagestaterealpageno setbar setbigbodyfont setboxllx \ -setboxlly setbreakpoints setcapstrut setcatcodetable setcharacteralign \ -setcharacteraligndetail setcharactercasing setcharactercleaning setcharacterkerning setcharacterspacing \ -setcharacterstripping setcharstrut setcollector setcolormodell setcounter \ -setcounterown setctxluafunction setcurrentfontclass setdataset setdatavalue \ -setdefaultpenalties setdigitsmanipulation setdirection setdocumentargument setdocumentargumentdefault \ -setdocumentfilename setdummyparameter setelementexporttag setemeasure setevalue \ -setevariable setevariables setexpansion setfirstline setfirstpasscharacteralign \ -setflag setfont setfontcolorsheme setfontfeature setfontsolution \ -setfontstrut setfractions setglobalscript setgmeasure setgvalue \ -setgvariable setgvariables sethboxregister sethyphenatedurlafter sethyphenatedurlbefore \ -sethyphenatedurlnormal sethyphenationfeatures setinitial setinjector setinteraction \ -setinterfacecommand setinterfaceconstant setinterfaceelement setinterfacemessage setinterfacevariable \ -setinternalrendering setitaliccorrection setlayer setlayerframed setlayertext \ -setlinefiller setlocalhsize setlocalscript setluatable setmainbodyfont \ -setmainparbuilder setmarker setmarking setmathstyle setmeasure \ -setmessagetext setminus setmode setnostrut setnote \ -setnotetext setobject setoldstyle setpagereference setpagestate \ -setpagestaterealpageno setparagraphfreezing setpenalties setpercentdimen setperiodkerning \ -setposition setpositionbox setpositiondata setpositiondataplus setpositiononly \ -setpositionplus setpositionstrut setprofile setrandomseed setreference \ -setreferencedobject setregisterentry setreplacements setrigidcolumnbalance setrigidcolumnhsize \ -setscript setsecondpasscharacteralign setsectionblock setsimplecolumnshsize setsmallbodyfont \ -setsmallcaps setstackbox setstructurepageregister setstrut setsuperiors \ -setsystemmode settabular settaggedmetadata settestcrlf settextcontent \ -settightobject settightreferencedobject settightstrut settightunreferencedobject settokenlist \ -settrialtypesetting setuevalue setugvalue setunreferencedobject setup \ -setupMPgraphics setupMPinstance setupMPpage setupMPvariables setupTABLE \ -setupTEXpage setupalign setupalternativestyles setuparranging setupattachment \ -setupattachments setupbackend setupbackground setupbackgrounds setupbar \ -setupbars setupblackrules setupblank setupbleeding setupblock \ -setupbodyfont setupbodyfontenvironment setupbookmark setupbottom setupbottomtexts \ -setupbtx setupbtxdataset setupbtxlabeltext setupbtxlist setupbtxregister \ -setupbtxrendering setupbuffer setupbutton setupcapitals setupcaption \ -setupcaptions setupcharacteralign setupcharacterkerning setupcharacterspacing setupchemical \ -setupchemicalframed setupclipping setupcollector setupcolor setupcolors \ -setupcolumns setupcolumnset setupcolumnsetarea setupcolumnsetareatext setupcolumnsetlines \ -setupcolumnsetspan setupcolumnsetstart setupcombination setupcombinedlist setupcomment \ -setupcontent setupcounter setupdataset setupdelimitedtext setupdescription \ -setupdescriptions setupdirections setupdocument setupeffect setupenumeration \ -setupenumerations setupenv setupexpansion setupexport setupexternalfigure \ -setupexternalfigures setupexternalsoundtracks setupfacingfloat setupfield setupfieldbody \ -setupfieldcategory setupfieldcontentframed setupfieldlabelframed setupfields setupfieldtotalframed \ -setupfiller setupfillinlines setupfillinrules setupfirstline setupfittingpage \ -setupfloat setupfloatframed setupfloats setupfloatsplitting setupfontexpansion \ -setupfontprotrusion setupfonts setupfontsolution setupfooter setupfootertexts \ -setupfootnotes setupforms setupformula setupformulae setupformulaframed \ -setupframed setupframedcontent setupframedtable setupframedtablecolumn setupframedtablerow \ -setupframedtext setupframedtexts setupglobalreferenceprefix setuphead setupheadalternative \ -setupheader setupheadertexts setupheadnumber setupheads setupheadtext \ -setuphelp setuphigh setuphighlight setuphyphenation setuphyphenmark \ -setupindentedtext setupindenting setupindex setupinitial setupinsertion \ -setupinteraction setupinteractionbar setupinteractionmenu setupinteractionscreen setupinterlinespace \ -setupitaliccorrection setupitemgroup setupitemizations setupitemize setupitems \ -setuplabel setuplabeltext setuplanguage setuplayer setuplayeredtext \ -setuplayout setuplayouttext setuplegend setuplinefiller setuplinefillers \ -setuplinenote setuplinenumbering setuplines setuplinetable setuplinewidth \ -setuplist setuplistalternative setuplistextra setuplocalfloats setuplocalinterlinespace \ -setuplow setuplowhigh setuplowmidhigh setupmakeup setupmarginblock \ -setupmargindata setupmarginframed setupmarginrule setupmarginrules setupmarking \ -setupmathalignment setupmathcases setupmathematics setupmathfence setupmathfraction \ -setupmathfractions setupmathframed setupmathlabeltext setupmathmatrix setupmathornament \ -setupmathradical setupmathstackers setupmathstyle setupmixedcolumns setupmodule \ -setupmulticolumns setupnarrower setupnotation setupnotations setupnote \ -setupnotes setupoffset setupoffsetbox setupoperatortext setupoppositeplacing \ -setuporientation setupoutput setupoutputroutine setuppagechecker setuppagecolumns \ -setuppagecomment setuppageinjection setuppageinjectionalternative setuppagenumber setuppagenumbering \ -setuppageshift setuppagestate setuppagetransitions setuppairedbox setuppalet \ -setuppaper setuppapersize setupparagraph setupparagraphintro setupparagraphnumbering \ -setupparagraphs setupparallel setupperiodkerning setupperiods setupplaceholder \ -setupplacement setuppositionbar setuppositioning setupprefixtext setupprocessor \ -setupprofile setupprograms setupquotation setupquote setuprealpagenumber \ -setupreferenceformat setupreferenceprefix setupreferencestructureprefix setupreferencing setupregister \ -setupregisters setuprenderingwindow setuprotate setupruby setups \ -setupscale setupscript setupscripts setupsectionblock setupselector \ -setupshift setupsidebar setupsorting setupspacing setupspellchecking \ -setupstartstop setupstretched setupstrut setupstyle setupsubformula \ -setupsubformulas setupsubpagenumber setupsuffixtext setupsymbols setupsymbolset \ -setupsynctex setupsynonyms setupsystem setuptables setuptabulate \ -setuptagging setuptaglabeltext setuptext setuptextbackground setuptextflow \ -setuptextnote setuptextrules setuptexttexts setupthinrules setuptolerance \ -setuptooltip setuptop setuptoptexts setuptype setuptyping \ -setupunit setupunittext setupurl setupuserdata setupuserdataalternative \ -setupuserpagenumber setupversion setupviewerlayer setupvspacing setupwhitespace \ -setupwithargument setupwithargumentswapped setupxml setupxtable setuvalue \ -setuxvalue setvalue setvariable setvariables setvboxregister \ -setvisualizerfont setvtopregister setwidthof setxmeasure setxvalue \ -setxvariable setxvariables seveneighths sfrac shapedhbox \ -sharp shiftbox shiftdown shiftup showallmakeup \ -showattributes showbodyfont showbodyfontenvironment showboxes showbtxdatasetauthors \ -showbtxdatasetcompleteness showbtxdatasetfields showbtxfields showbtxhashedauthors showbtxtables \ -showchardata showcharratio showcolor showcolorbar showcolorcomponents \ -showcolorgroup showcolorset showcolorstruts showcounter showdirectives \ -showdirsinmargin showedebuginfo showexperiments showfont showfontdata \ -showfontexpansion showfontitalics showfontkerns showfontparameters showfontstrip \ -showfontstyle showframe showglyphdata showglyphs showgrid \ -showgridsnapping showhelp showhyphenationtrace showhyphens showinjector \ -showjustification showkerning showlayout showlayoutcomponents showligature \ -showligatures showlogcategories showluatables showmakeup showmargins \ -showmessage showminimalbaseline shownextbox showotfcomposition showpalet \ -showparentchain showparwrapperstate showprint showsetups showsetupsdefinition \ -showstruts showsymbolset showtimer showtokens showtrackers \ -showvalue showvariable showwarning sigma signalrightpage \ -sim simeq simplealignedbox simplealignedboxplus simplealignedspreadbox \ -simplegroupedcommand simplereversealignedbox simplereversealignedboxplus singalcharacteralign singlebond \ -singleverticalbar sixperemspace sixthofsixarguments slanted slantedbold \ -slantedface slash slicepages slong slovenianNumerals \ -sloveniannumerals small smallbodyfont smallbold smallbolditalic \ -smallboldslanted smallcappedcharacters smallcappedromannumerals smallcaps smaller \ -smallitalicbold smallnormal smallskip smallslanted smallslantedbold \ -smalltype smash smashbox smashboxed smashedhbox \ -smashedvbox smile snaptogrid softhyphen solidus \ -someheadnumber somekindoftab someline somelocalfloat somenamedheadnumber \ -someplace somewhere space spaceddigits spaceddigitsmethod \ -spaceddigitsseparator spaceddigitssymbol spadesuit spanishNumerals spanishnumerals \ -speech sphericalangle splitatasterisk splitatcolon splitatcolons \ -splitatcomma splitatperiod splitdfrac splitfilename splitfloat \ -splitfrac splitoffbase splitofffull splitoffkind splitoffname \ -splitoffpath splitoffroot splitofftokens splitofftype splitstring \ -spreadhbox sqcap sqcup sqrt sqsubset \ -sqsubseteq sqsubsetneq sqsupset sqsupseteq sqsupsetneq \ -square squaredots ssharp stackrel stackscripts \ -star stareq startJScode startJSpreamble startLUA \ -startMP startMPclip startMPcode startMPdefinitions startMPdrawing \ -startMPenvironment startMPextensions startMPinclusions startMPinitializations startMPpage \ -startMPpositiongraphic startMPpositionmethod startMPrun startPARSEDXML startTABLE \ -startTABLEbody startTABLEfoot startTABLEhead startTABLEnested startTABLEnext \ -startTC startTD startTDs startTEX startTEXpage \ -startTH startTN startTR startTRs startTX \ -startTY startXML startalign startalignment startallmodes \ -startappendices startarrangedpages startasciimode startaside startattachment \ -startbackground startbackmatter startbar startbbordermatrix startbitmapimage \ -startblockquote startbodymatter startbordermatrix startboxedcolumns startbtxlabeltext \ -startbtxrenderingdefinitions startbuffer startcases startcatcodetable startcenteraligned \ -startchapter startcharacteralign startcheckedfences startchemical startchemicaltext \ -startcollect startcollecting startcolor startcolorintent startcoloronly \ -startcolorset startcolumns startcolumnset startcolumnsetspan startcombination \ -startcomment startcomponent startcontextcode startcontextdefinitioncode startctxfunction \ -startctxfunctiondefinition startcurrentcolor startcurrentlistentrywrapper startdelimited startdelimitedtext \ -startdisplaymath startdmath startdocument starteffect startelement \ -startembeddedxtable startendnote startendofline startenvironment startexceptions \ -startexpanded startexpandedcollect startextendedcatcodetable startexternalfigurecollection startfacingfloat \ -startfact startfigure startfiguretext startfittingpage startfixed \ -startfloatcombination startfont startfontclass startfontsolution startfootnote \ -startformula startformulas startframed startframedcell startframedcontent \ -startframedrow startframedtable startframedtext startfrontmatter startgoto \ -startgraphictext startgridsnapping starthanging starthbox starthboxestohbox \ -starthboxregister starthead startheadtext starthelptext starthiding \ -starthighlight starthyphenation startimath startindentation startindentedtext \ -startinteraction startinteractionmenu startinterface startintermezzotext startintertext \ -startitem startitemgroup startitemgroupcolumns startitemize startknockout \ -startlabeltext startlanguage startlayout startleftaligned startlegend \ -startline startlinealignment startlinecorrection startlinefiller startlinenote \ -startlinenumbering startlines startlinetable startlinetablebody startlinetablecell \ -startlinetablehead startlocalfootnotes startlocalheadsetup startlocallinecorrection startlocalnotes \ -startlocalsetups startlua startluacode startluaparameterset startluasetups \ -startmakeup startmarginblock startmarginrule startmarkedcontent startmarkpages \ -startmathalignment startmathcases startmathlabeltext startmathmatrix startmathmode \ -startmathstyle startmatrices startmatrix startmaxaligned startmdformula \ -startmidaligned startmiddlealigned startmiddlemakeup startmixedcolumns startmode \ -startmodeset startmodule startmoduletestsection startmpformula startmulticolumns \ -startnamedsection startnamedsubformulas startnarrow startnarrower startnegative \ -startnicelyfilledbox startnointerference startnotallmodes startnotext startnotmode \ -startoperatortext startopposite startoutputstream startoverlay startoverprint \ -startpacked startpagecolumns startpagecomment startpagefigure startpagelayout \ -startpagemakeup startpar startparagraph startparagraphs startparagraphscell \ -startparbuilder startpart startpath startplacechemical startplacefigure \ -startplacefloat startplaceformula startplacegraphic startplaceintermezzo startplacelegend \ -startplacepairedbox startplacetable startpositioning startpositionoverlay startpositive \ -startpostponing startpostponingnotes startprefixtext startprocessassignmentcommand startprocessassignmentlist \ -startprocesscommacommand startprocesscommalist startproduct startproject startprotect \ -startprotectedcolors startpublication startpunctuation startquotation startquote \ -startrandomized startrandomseed startrawsetups startreadingfile startreferenceprefix \ -startregime startregister startreusableMPgraphic startrightaligned startruby \ -startscript startsdformula startsection startsectionblock startsectionblockenvironment \ -startsectionlevel startsetups startshapebox startshift startsidebar \ -startsimplecolumns startspecialitem startspeech startspformula startsplitformula \ -startsplittext startspread startstandardmakeup startstaticMPfigure startstaticMPgraphic \ -startstrictinspectnextcharacter startstructurepageregister startstrut startstyle startsubformulas \ -startsubject startsubjectlevel startsubsection startsubsentence startsubstack \ -startsubsubject startsubsubsection startsubsubsubject startsubsubsubsection startsubsubsubsubject \ -startsubsubsubsubsection startsubsubsubsubsubject startsuffixtext startsymbolset starttable \ -starttablehead starttables starttabletail starttabletext starttabulate \ -starttabulatehead starttabulatetail starttagged starttaglabeltext starttexcode \ -starttexdefinition starttext starttextbackground starttextbackgroundmanual starttextcolor \ -starttextcolorintent starttextflow starttextmakeup starttextrule startthematrix \ -starttitle starttokenlist starttokens starttransparent starttypescript \ -starttypescriptcollection starttyping startuniqueMPgraphic startuniqueMPpagegraphic startunittext \ -startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter startuserdata \ -startusingbtxspecification startvbox startvboxregister startvboxtohbox startvboxtohboxseparator \ -startviewerlayer startvtop startvtopregister startxcell startxcellgroup \ -startxcolumn startxgroup startxmldisplayverbatim startxmlinlineverbatim startxmlraw \ -startxmlsetups startxrow startxrowgroup startxtable startxtablebody \ -startxtablefoot startxtablehead startxtablenext stligature stopJScode \ -stopJSpreamble stopLUA stopMP stopMPclip stopMPcode \ -stopMPdefinitions stopMPdrawing stopMPenvironment stopMPextensions stopMPinclusions \ -stopMPinitializations stopMPpage stopMPpositiongraphic stopMPpositionmethod stopMPrun \ -stopPARSEDXML stopTABLE stopTABLEbody stopTABLEfoot stopTABLEhead \ -stopTABLEnested stopTABLEnext stopTC stopTD stopTDs \ -stopTEX stopTEXpage stopTH stopTN stopTR \ -stopTRs stopTX stopTY stopXML stopalign \ -stopalignment stopallmodes stopappendices stoparrangedpages stopasciimode \ -stopaside stopattachment stopbackground stopbackmatter stopbar \ -stopbbordermatrix stopbitmapimage stopblockquote stopbodymatter stopbordermatrix \ -stopboxedcolumns stopbtxlabeltext stopbtxrenderingdefinitions stopbuffer stopcases \ -stopcatcodetable stopcenteraligned stopchapter stopcharacteralign stopcheckedfences \ -stopchemical stopchemicaltext stopcollect stopcollecting stopcolor \ -stopcolorintent stopcoloronly stopcolorset stopcolumns stopcolumnset \ -stopcolumnsetspan stopcombination stopcomment stopcomponent stopcontextcode \ -stopcontextdefinitioncode stopctxfunction stopctxfunctiondefinition stopcurrentcolor stopcurrentlistentrywrapper \ -stopdelimited stopdelimitedtext stopdisplaymath stopdmath stopdocument \ -stopeffect stopelement stopembeddedxtable stopendnote stopendofline \ -stopenvironment stopexceptions stopexpanded stopexpandedcollect stopextendedcatcodetable \ -stopexternalfigurecollection stopfacingfloat stopfact stopfigure stopfiguretext \ -stopfittingpage stopfixed stopfloatcombination stopfont stopfontclass \ -stopfontsolution stopfootnote stopformula stopformulas stopframed \ -stopframedcell stopframedcontent stopframedrow stopframedtable stopframedtext \ -stopfrontmatter stopgoto stopgraphictext stopgridsnapping stophanging \ -stophbox stophboxestohbox stophboxregister stophead stopheadtext \ -stophelptext stophiding stophighlight stophyphenation stopimath \ -stopindentation stopindentedtext stopinteraction stopinteractionmenu stopinterface \ -stopintermezzotext stopintertext stopitem stopitemgroup stopitemgroupcolumns \ -stopitemize stopknockout stoplabeltext stoplanguage stoplayout \ -stopleftaligned stoplegend stopline stoplinealignment stoplinecorrection \ -stoplinefiller stoplinenote stoplinenumbering stoplines stoplinetable \ -stoplinetablebody stoplinetablecell stoplinetablehead stoplocalfootnotes stoplocalheadsetup \ -stoplocallinecorrection stoplocalnotes stoplocalsetups stoplua stopluacode \ -stopluaparameterset stopluasetups stopmakeup stopmarginblock stopmarginrule \ -stopmarkedcontent stopmarkpages stopmathalignment stopmathcases stopmathlabeltext \ -stopmathmatrix stopmathmode stopmathstyle stopmatrices stopmatrix \ -stopmaxaligned stopmdformula stopmidaligned stopmiddlealigned stopmiddlemakeup \ -stopmixedcolumns stopmode stopmodeset stopmodule stopmoduletestsection \ -stopmpformula stopmulticolumns stopnamedsection stopnamedsubformulas stopnarrow \ -stopnarrower stopnegative stopnicelyfilledbox stopnointerference stopnotallmodes \ -stopnotext stopnotmode stopoperatortext stopopposite stopoutputstream \ -stopoverlay stopoverprint stoppacked stoppagecolumns stoppagecomment \ -stoppagefigure stoppagelayout stoppagemakeup stoppar stopparagraph \ -stopparagraphs stopparagraphscell stopparbuilder stoppart stoppath \ -stopplacechemical stopplacefigure stopplacefloat stopplaceformula stopplacegraphic \ -stopplaceintermezzo stopplacelegend stopplacepairedbox stopplacetable stoppositioning \ -stoppositionoverlay stoppositive stoppostponing stoppostponingnotes stopprefixtext \ -stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist stopproduct \ -stopproject stopprotect stopprotectedcolors stoppublication stoppunctuation \ -stopquotation stopquote stoprandomized stoprandomseed stoprawsetups \ -stopreadingfile stopreferenceprefix stopregime stopreusableMPgraphic stoprightaligned \ -stopruby stopscript stopsdformula stopsection stopsectionblock \ -stopsectionblockenvironment stopsectionlevel stopsetups stopshapebox stopshift \ -stopsidebar stopsimplecolumns stopspecialitem stopspeech stopspformula \ -stopsplitformula stopsplittext stopspread stopstandardmakeup stopstaticMPfigure \ -stopstaticMPgraphic stopstrictinspectnextcharacter stopstrut stopstyle stopsubformulas \ -stopsubject stopsubjectlevel stopsubsection stopsubsentence stopsubstack \ -stopsubsubject stopsubsubsection stopsubsubsubject stopsubsubsubsection stopsubsubsubsubject \ -stopsubsubsubsubsection stopsubsubsubsubsubject stopsuffixtext stopsymbolset stoptable \ -stoptablehead stoptables stoptabletail stoptabletext stoptabulate \ -stoptabulatehead stoptabulatetail stoptagged stoptaglabeltext stoptexcode \ -stoptexdefinition stoptext stoptextbackground stoptextbackgroundmanual stoptextcolor \ -stoptextcolorintent stoptextflow stoptextmakeup stoptextrule stopthematrix \ -stoptitle stoptokenlist stoptokens stoptransparent stoptypescript \ -stoptypescriptcollection stoptyping stopuniqueMPgraphic stopuniqueMPpagegraphic stopunittext \ -stopunpacked stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter stopuserdata \ -stopusingbtxspecification stopvbox stopvboxregister stopvboxtohbox stopvboxtohboxseparator \ -stopviewerlayer stopvtop stopvtopregister stopxcell stopxcellgroup \ -stopxcolumn stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim stopxmlraw \ -stopxmlsetups stopxrow stopxrowgroup stopxtable stopxtablebody \ -stopxtablefoot stopxtablehead stopxtablenext stretched strictdoifelsenextoptional \ -strictdoifnextoptionalelse stripcharacter strippedcsname stripspaces structurelistuservariable \ -structurenumber structuretitle structureuservariable structurevariable strut \ -strutdp strutgap strutht struthtdp struttedbox \ -strutwd style styleinstance subject subpagenumber \ -subsection subsentence subset subseteq subseteqq \ -subsetneq subsetneqq substituteincommalist subsubject subsubsection \ -subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection subsubsubsubsubject \ -subtractfeature succ succapprox succcurlyeq succeq \ -succeqq succnapprox succneq succneqq succnsim \ -succsim suffixlanguage suffixtext sum supset \ -supseteq supseteqq supsetneq supsetneqq surd \ -surdradical swapcounts swapdimens swapface swapmacros \ -swaptypeface swarrow switchstyleonly switchtobodyfont switchtocolor \ -switchtointerlinespace symbol symbolreference synchronizeblank synchronizeindenting \ -synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace synctexblockfilename \ -synctexresetfilename synctexsetfilename systemlog systemlogfirst systemloglast \ -systemsetups tLeftarrow tLeftrightarrow tRightarrow tabulateautoline \ -tabulateautorule tabulateline tabulaterule taggedctxcommand taggedlabeltexts \ -taglabellanguage taglabeltext tau tbinom tbox \ -tcaron tcedilla tcommaaccent tcurl tequal \ -test testandsplitstring testcolumn testfeature testfeatureonce \ -testpage testpageonly testpagesync testtokens tex \ -texdefinition texsetup textAngstrom textacute textampersand \ -textasciicircum textasciitilde textat textbackslash textbar \ -textbottomcomma textbottomdot textbraceleft textbraceright textbreve \ -textbrokenbar textbullet textcaron textcedilla textcelsius \ -textcent textcircledP textcircumflex textcitation textcite \ -textcomma textcontrolspace textcurrency textdag textddag \ -textdegree textdiaeresis textdiv textdollar textdong \ -textdotaccent textellipsis texteuro textflowcollector textfraction \ -textgrave texthash texthorizontalbar texthungarumlaut texthyphen \ -textkelvin textlognot textmacron textmath textmho \ -textminus textmu textmultiply textnumero textogonek \ -textohm textormathchar textormathchars textounce textpercent \ -textperiod textplus textpm textreference textring \ -textrule textslash textsterling texttilde textunderscore \ -textvisiblespace textyen thai thainumerals thedatavalue \ -thefirstcharacter thematrix thenormalizedbodyfontsize theorientation therefore \ -theremainingcharacters theta thickspace thinrule thinrules \ -thinspace thirdoffivearguments thirdoffourarguments thirdofsixarguments thirdofthreearguments \ -thirdofthreeunexpanded thook thookleftarrow thookrightarrow thorn \ -threedigitrounding threeeighths threefifths threeperemspace threequarter \ -threesuperior tibetannumerals tightlayer tilde times \ -tinyfont title tlap tleftarrow tleftharpoondown \ -tleftharpoonup tleftrightarrow tleftrightharpoons tmapsto to \ -tochar tolinenote tooltip top topbox \ -topleftbox toplinebox toprightbox topskippedbox tracecatcodetables \ -tracedfontname tracedpagestate traceoutputroutines tracepositions trademark \ -translate transparencycomponents transparent trel triangle \ -triangledown triangleleft triangleq triangleright trightarrow \ -trightharpoondown trightharpoonup trightleftharpoons trightoverleftarrow triplebond \ -tripleprime tripleverticalbar truefilename truefontname tstroke \ -ttraggedright ttriplerel ttwoheadleftarrow ttwoheadrightarrow turnediota \ -twodigitrounding twofifths twoheaddownarrow twoheadleftarrow twoheadrightarrow \ -twoheadrightarrowtail twoheaduparrow twosuperior twothirds tx \ -txx typ type typebuffer typedefinedbuffer \ -typeface typefile typeinlinebuffer typescriptone typescriptprefix \ -typescriptthree typescripttwo typesetbuffer typesetbufferonly typesetfile \ -uacute ubreve ucaron uchexnumber uchexnumbers \ -ucircumflex uconvertnumber udiaeresis udiaeresisacute udiaeresiscaron \ -udiaeresisgrave udiaeresismacron udotbelow udots udoublegrave \ -uedcatcodecommand ugrave uhook uhorn uhornacute \ -uhorndotbelow uhorngrave uhornhook uhorntilde uhungarumlaut \ -uinvertedbreve ulcorner umacron undefinevalue undepthed \ -underbar underbars underbartext underbrace underbracetext \ -underbracket underbrackettext underdash underdashes underdot \ -underdots underleftarrow underleftharpoondown underleftharpoonup underleftrightarrow \ -underparent underparenttext underrandom underrandoms underrightarrow \ -underrightharpoondown underrightharpoonup underset understrike understrikes \ -undertwoheadleftarrow undertwoheadrightarrow undoassign unexpandeddocumentvariable unframed \ -unhhbox unihex uniqueMPgraphic uniqueMPpagegraphic unit \ -unitlanguage unitshigh unitslow unittext unknown \ -unprotected unregisterhyphenationpattern unregisterparwrapper unspaceafter unspaceargument \ -unspaced unspacestring unstackscripts untexargument untexcommand \ -uogonek upand uparrow updasharrow updateparagraphdemerits \ -updateparagraphpenalties updateparagraphproperties updateparagraphshapes updownarrow updownarrowbar \ -updownarrows upharpoonleft upharpoonright uplus uppercased \ -uppercasestring uppercasing upperleftdoubleninequote upperleftdoublesixquote upperleftsingleninequote \ -upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote upperrightsingleninequote upperrightsinglesixquote \ -upsilon upuparrows upwhitearrow urcorner uring \ -url useJSscripts useMPenvironmentbuffer useMPgraphic useMPlibrary \ -useMPrun useMPvariables useURL usealignparameter useblankparameter \ -useblocks usebodyfont usebodyfontparameter usebtxdataset usebtxdefinitions \ -usecitation usecolors usecomponent usedirectory usedummycolorparameter \ -usedummystyleandcolor usedummystyleparameter useenvironment useexternaldocument useexternalfigure \ -useexternalrendering useexternalsoundtrack usefigurebase usefile usefontpath \ -usegridparameter usehyphensparameter useindentingparameter useindentnextparameter useinterlinespaceparameter \ -uselanguageparameter useluamodule useluatable usemathstyleparameter usemodule \ -useproduct useprofileparameter useproject usereferenceparameter userpagenumber \ -usesetupsparameter usestaticMPfigure usesubpath usesymbols usetexmodule \ -usetypescript usetypescriptfile useurl usezipfile utfchar \ -utflower utfupper utilde utilityregisterlength vDash \ -validassignment varTheta varepsilon varkappa varnothing \ -varphi varpi varrho varsigma vartheta \ -vboxreference vdash vdots vec vee \ -veebar veeeq verbatim verbatimstring verbosenumber \ -version vert verticalgrowingbar verticalpositionbar veryraggedcenter \ -veryraggedleft veryraggedright vglue viewerlayer vl \ -vpackbox vpackedbox vphantom vpos vsmash \ -vsmashbox vsmashed vspace vspacing wcircumflex \ -wdofstring wedge wedgeeq weekday whitearrowupfrombar \ -widegrave widehat widetilde widthofstring widthspanningtext \ -withoutpt word wordright words wordtonumber \ -wp wr writebetweenlist writedatatolist writestatus \ -writetolist xLeftarrow xLeftrightarrow xRightarrow xdefconvertedargument \ -xequal xfrac xhookleftarrow xhookrightarrow xi \ -xleftarrow xleftharpoondown xleftharpoonup xleftrightarrow xleftrightharpoons \ -xmapsto xmladdindex xmlafterdocumentsetup xmlaftersetup xmlall \ -xmlappenddocumentsetup xmlappendsetup xmlapplyselectors xmlatt xmlattdef \ -xmlattribute xmlattributedef xmlbadinclusions xmlbeforedocumentsetup xmlbeforesetup \ -xmlchainatt xmlchainattdef xmlchecknamespace xmlcommand xmlconcat \ -xmlconcatrange xmlcontext xmlcount xmldefaulttotext xmldepth \ -xmldirectives xmldirectivesafter xmldirectivesbefore xmldisplayverbatim xmldoif \ -xmldoifatt xmldoifelse xmldoifelseatt xmldoifelseempty xmldoifelseselfempty \ -xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotatt xmldoifnotselfempty \ -xmldoifnottext xmldoifselfempty xmldoiftext xmlelement xmlfilter \ -xmlfirst xmlflush xmlflushcontext xmlflushdocumentsetups xmlflushlinewise \ -xmlflushpure xmlflushspacewise xmlflushtext xmlinclude xmlinclusion \ -xmlinclusions xmlinfo xmlinjector xmlinlineprettyprint xmlinlineprettyprinttext \ -xmlinlineverbatim xmlinstalldirective xmllast xmllastatt xmllastmatch \ -xmllastpar xmlloadbuffer xmlloaddata xmlloaddirectives xmlloadfile \ -xmlloadonly xmlmain xmlmapvalue xmlname xmlnamespace \ -xmlnonspace xmlpar xmlparam xmlpath xmlpos \ -xmlposition xmlprependdocumentsetup xmlprependsetup xmlprettyprint xmlprettyprinttext \ -xmlprocessbuffer xmlprocessdata xmlprocessfile xmlpure xmlraw \ -xmlrefatt xmlregistereddocumentsetups xmlregisteredsetups xmlregisterns xmlremapname \ -xmlremapnamespace xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups xmlresetinjectors \ -xmlresetsetups xmlsave xmlsetatt xmlsetattribute xmlsetentity \ -xmlsetfunction xmlsetinjectors xmlsetpar xmlsetparam xmlsetsetup \ -xmlsetup xmlshow xmlsnippet xmlstrip xmlstripnolines \ -xmlstripped xmlstrippednolines xmltag xmltexentity xmltext \ -xmltobuffer xmltobufferverbose xmltofile xmlvalue xmlverbatim \ -xrel xrightarrow xrightharpoondown xrightharpoonup xrightleftharpoons \ -xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow xtwoheadrightarrow \ -xxfrac xypos yacute ycircumflex ydiaeresis \ -ydotbelow yen ygrave yhook yiddishnumerals \ -ymacron ytilde zacute zcaron zdotaccent \ -zeronumberconversion zerowidthnobreakspace zerowidthspace zeta zhook \ -zstroke zwj zwnj +language languageCharacters languagecharacters languagecharwidth laplace \ +lastcounter lastcountervalue lastdigit lastlinewidth lastnaturalboxdp \ +lastnaturalboxht lastnaturalboxwd lastparwrapper lastpredefinedsymbol lastrealpage \ +lastrealpagenumber lastsubcountervalue lastsubpage lastsubpagenumber lasttwodigits \ +lastuserpage lastuserpagenumber lateluacode latin layeredtext \ +layerheight layerwidth lazysavetaggedtwopassdata lazysavetwopassdata lbar \ +lbox lbrace lbracket lcaron lceil \ +lchexnumber lchexnumbers lcommaaccent lcurl ldotmiddle \ +ldotp ldots le leadsto left \ +leftaligned leftarrow leftarrowtail leftarrowtriangle leftbottombox \ +leftbox leftdasharrow leftguillemot leftharpoondown leftharpoonup \ +lefthbox leftheadtext leftlabeltext leftleftarrows leftline \ +leftmathlabeltext leftorrighthbox leftorrightvbox leftorrightvtop leftrightarrow \ +leftrightarrows leftrightarrowtriangle leftrightharpoons leftrightsquigarrow leftskipadaption \ +leftsquigarrow leftsubguillemot leftthreetimes lefttopbox lefttoright \ +lefttorighthbox lefttorightvbox lefttorightvtop leftwavearrow leftwhitearrow \ +leq leqq leqslant lessapprox lessdot \ +lesseqgtr lesseqqgtr lessgtr lesssim letbeundefined \ +letcatcodecommand letcscsname letcsnamecs letcsnamecsname letdummyparameter \ +letempty letgvalue letgvalueempty letgvalurelax letterampersand \ +letterat letterbackslash letterbar letterbgroup letterclosebrace \ +lettercolon letterdollar letterdoublequote letteregroup letterescape \ +letterexclamationmark letterhash letterhat letterleftbrace letterleftbracket \ +letterleftparenthesis letterless lettermore letteropenbrace letterpercent \ +letterquestionmark letterrightbrace letterrightbracket letterrightparenthesis lettersinglequote \ +letterslash letterspacing lettertilde letterunderscore letvalue \ +letvalueempty letvaluerelax lfence lfloor lgroup \ +lhbox lhooknwarrow lhooksearrow limitatefirstline limitatelines \ +limitatetext line linebox linefeed linefillerhbox \ +linefillervbox linefillervtop linenote linespanningtext linethickness \ +linterval listcitation listcite listlength listnamespaces \ +literalmode ljligature ll llangle llap \ +llbracket llcorner lll llless llointerval \ +lmoustache lnapprox lneq lneqq lnot \ +lnsim loadanyfile loadanyfileonce loadbtxdefinitionfile loadbtxreplacementfile \ +loadcldfile loadcldfileonce loadfontgoodies loadluafile loadluafileonce \ +loadspellchecklist loadtexfile loadtexfileonce loadtypescriptfile localframed \ +localframedwithsettings localhsize localpopbox localpopmacro localpushbox \ +localpushmacro localundefine locatedfilepath locatefilepath locfilename \ +logo lohi lointerval lomihi longleftarrow \ +longleftrightarrow longmapsfrom longmapsto longrightarrow longrightsquigarrow \ +looparrowleft looparrowright lor low lowerbox \ +lowercased lowercasestring lowercasing lowerleftdoubleninequote lowerleftsingleninequote \ +lowerrightdoubleninequote lowerrightsingleninequote lozenge lparent lrcorner \ +lrointerval lrtbbox lstroke lt ltimes \ +ltop ltrhbox ltrvbox ltrvtop luaTeX \ +luacode luaconditional luaenvironment luaexpanded luaexpr \ +luafunction luajitTeX luamajorversion luametaTeX luaminorversion \ +luaparameterset luasetup luaversion lvert m \ +mLeftarrow mLeftrightarrow mRightarrow mainlanguage makecharacteractive \ +makerawcommalist makestrutofbox maltese mapfontsize mapsdown \ +mapsfrom mapsto mapsup margindata margintext \ +markcontent markedpages marking markinjector markpage \ +markreferencepage mat math mathampersand mathbf \ +mathbi mathblackboard mathbs mathdefault mathdollar \ +mathdouble mathematics mathfraktur mathfunction mathhash \ +mathhyphen mathit mathitalic mathlabellanguage mathlabeltext \ +mathlabeltexts mathop mathover mathpercent mathrm \ +mathscript mathsl mathss mathtext mathtextbf \ +mathtextbi mathtextbs mathtextit mathtextsl mathtexttf \ +mathtf mathtriplet mathtt mathunder mathupright \ +mathword mathwordbf mathwordbi mathwordbs mathwordit \ +mathwordsl mathwordtf maxaligned mbox mcframed \ +measure measured measuredangle measuredeq medskip \ +medspace menubutton mequal message mfence \ +mframed mfunction mfunctionlabeltext mhbox mho \ +mhookleftarrow mhookrightarrow mid midaligned middle \ +middlealigned middlebox midhbox midsubsentence minimalhbox \ +minus minuscolon mirror mixedcaps mkvibuffer \ +mleftarrow mleftharpoondown mleftharpoonup mleftrightarrow mleftrightharpoons \ +mmapsto models moduleparameter molecule mono \ +monobold mononormal month monthlong monthshort \ +mp mprandomnumber mrel mrightarrow mrightharpoondown \ +mrightharpoonup mrightleftharpoons mrightoverleftarrow mtext mtriplerel \ +mtwoheadleftarrow mtwoheadrightarrow mu multimap nHdownarrow \ +nHuparrow nLeftarrow nLeftrightarrow nRightarrow nVDash \ +nVdash nVleftarrow nVleftrightarrow nVrightarrow nabla \ +nacute namedheadnumber namedstructureheadlocation namedstructureuservariable namedstructurevariable \ +namedtaggedlabeltexts napostrophe napprox napproxEq narrownobreakspace \ +nasymp natural naturalhbox naturalhpack naturalnumbers \ +naturaltpack naturalvbox naturalvcenter naturalvpack naturalvtop \ +naturalwd ncaron ncommaaccent ncong ncurl \ +ndivides ne nearrow neg negatecolorbox \ +negated negativesign negemspace negenspace negthinspace \ +neng neq nequiv neswarrow newattribute \ +newcatcodetable newcounter newevery newfrenchspacing newluatable \ +newmode newsignal newsystemmode nexists nextbox \ +nextboxdp nextboxht nextboxhtdp nextboxwd nextcounter \ +nextcountervalue nextdepth nextparagraphs nextrealpage nextrealpagenumber \ +nextsubcountervalue nextsubpage nextsubpagenumber nextuserpage nextuserpagenumber \ +ngeq ngrave ngtr ngtrless ngtrsim \ +ni nihongo nin njligature nleftarrow \ +nleftrightarrow nleq nless nlessgtr nlesssim \ +nmid nni nobar nobreakspace nocap \ +nocharacteralign nocitation nocite nodetostring noffigurepages \ +noflines noflinesinbox noflocalfloats noheaderandfooterlines noheightstrut \ +nohyphens noindentation noitem nonfrenchspacing nonmathematics \ +nonvalidassignment normal normalboldface normalframedwithsettings normalitalicface \ +normalizebodyfontsize normalizedfontsize normalizefontdepth normalizefontheight normalizefontline \ +normalizefontwidth normalizetextdepth normalizetextheight normalizetextline normalizetextwidth \ +normalslantedface normaltypeface nospace not note \ +notesymbol notin notopandbottomlines notragged nowns \ +nparallel nprec npreccurlyeq nrightarrow nsim \ +nsimeq nsqsubseteq nsqsupseteq nsubset nsubseteq \ +nsucc nsucccurlyeq nsupset nsupseteq ntilde \ +ntimes ntriangleleft ntrianglelefteq ntriangleright ntrianglerighteq \ +nu numberofpoints numbers nvDash nvdash \ +nvleftarrow nvleftrightarrow nvrightarrow nwarrow nwsearrow \ +oacute obeydepth objectdepth objectheight objectmargin \ +objectwidth obox obreve ocaron ocircumflex \ +ocircumflexacute ocircumflexdotbelow ocircumflexgrave ocircumflexhook ocircumflextilde \ +octnumber octstringtonumber odiaeresis odiaeresismacron odot \ +odotaccent odotaccentmacron odotbelow odoublegrave oeligature \ +offset offsetbox ograve ohm ohook \ +ohorn ohornacute ohorndotbelow ohorngrave ohornhook \ +ohorntilde ohungarumlaut oiiint oiint oint \ +ointclockwise ointctrclockwise oinvertedbreve omacron omega \ +omicron ominus onedigitrounding oneeighth onefifth \ +onehalf onequarter onesixth onesuperior onethird \ +oogonek oogonekmacron operatorlanguage operatortext oplus \ +ordfeminine ordinaldaynumber ordinalstr ordmasculine ornamenttext \ +oslash ostroke ostrokeacute otilde otildemacron \ +otimes outputfilename outputstreambox outputstreamcopy outputstreamunvbox \ +outputstreamunvcopy over overbar overbars overbartext \ +overbarunderbar overbrace overbracetext overbraceunderbrace overbracket \ +overbrackettext overbracketunderbracket overlaybutton overlaycolor overlaydepth \ +overlayfigure overlayheight overlayimage overlaylinecolor overlaylinewidth \ +overlayoffset overlayrollbutton overlaywidth overleftarrow overleftharpoondown \ +overleftharpoonup overleftrightarrow overloaderror overparent overparenttext \ +overparentunderparent overrightarrow overrightharpoondown overrightharpoonup overset \ +overstrike overstrikes overtwoheadleftarrow overtwoheadrightarrow owns \ +page pagearea pagebreak pagefigure pageinjection \ +pagenumber pagereference pagestaterealpage pagestaterealpageorder paletsize \ +paragraphmark parallel part partial pdfTeX \ +pdfactualtext pdfbackendactualtext pdfbackendcurrentresources pdfbackendsetcatalog pdfbackendsetcolorspace \ +pdfbackendsetextgstate pdfbackendsetinfo pdfbackendsetname pdfbackendsetpageattribute pdfbackendsetpageresource \ +pdfbackendsetpagesattribute pdfbackendsetpattern pdfbackendsetshade pdfcolor pdfeTeX \ +percent percentdimen periodcentered periods permitcaretescape \ +permitcircumflexescape permitspacesbetweengroups perp persiandecimals persiandecimalseparator \ +persiannumerals persianthousandsseparator perthousand phantom phantombox \ +phi phook pi pickupgroupedcommand pitchfork \ +placeattachments placebookmarks placebtxrendering placechemical placecitation \ +placecombinedlist placecomments placecontent placecurrentformulanumber placedbox \ +placefigure placefloat placefloatcaption placefloatwithsetups placefootnotes \ +placeformula placeframed placegraphic placeheadnumber placeheadtext \ +placehelp placeholder placeindex placeinitial placeintermezzo \ +placelayer placelayeredtext placelegend placelist placelistofabbreviations \ +placelistofchemicals placelistoffigures placelistofgraphics placelistofintermezzi placelistoflogos \ +placelistofpublications placelistofsorts placelistofsynonyms placelistoftables placelocalfootnotes \ +placelocalnotes placement placenamedfloat placenamedformula placenotes \ +placeongrid placeontopofeachother placepagenumber placepairedbox placeparallel \ +placerawheaddata placerawheadnumber placerawheadtext placerawlist placeregister \ +placerenderingwindow placesidebyside placesubformula placetable pm \ +popattribute popmacro popmode popsystemmode position \ +positionoverlay positionregionoverlay positivesign postponenotes prec \ +precapprox preccurlyeq preceq preceqq precnapprox \ +precneq precneqq precnsim precsim predefinedfont \ +predefinefont predefinesymbol prefixedpagenumber prefixlanguage prefixtext \ +prependetoks prependgvalue prependtocommalist prependtoks prependtoksonce \ +prependvalue prerollblank presetbtxlabeltext presetdocument presetfieldsymbols \ +presetheadtext presetlabeltext presetmathlabeltext presetoperatortext presetprefixtext \ +presetsuffixtext presettaglabeltext presetunittext pretocommalist prettyprintbuffer \ +prevcounter prevcountervalue preventmode prevrealpage prevrealpagenumber \ +prevsubcountervalue prevsubpage prevsubpagenumber prevuserpage prevuserpagenumber \ +prime primes procent processMPbuffer processMPfigurefile \ +processaction processallactionsinset processassignlist processassignmentcommand processassignmentlist \ +processbetween processblocks processbodyfontenvironmentlist processcolorcomponents processcommacommand \ +processcommalist processcommalistwithparameters processcontent processfile processfilemany \ +processfilenone processfileonce processfirstactioninset processisolatedchars processisolatedwords \ +processlinetablebuffer processlinetablefile processlist processmonth processranges \ +processseparatedlist processtexbuffer processtokens processuntil processxtablebuffer \ +processyear prod product profiledbox profilegivenbox \ +program project propto pseudoMixedCapped pseudoSmallCapped \ +pseudoSmallcapped pseudosmallcapped psi punctuationspace purenumber \ +pushattribute pushbutton pushmacro pushmode pushoutputstream \ +pushsystemmode putboxincache putnextboxincache qquad quad \ +quadrupleprime quads quarterstrut questiondown questionedeq \ +quitcommalist quitprevcommalist quittypescriptscanning quotation quote \ +quotedbl quotedblbase quotedblleft quotedblright quoteleft \ +quoteright quotesingle quotesinglebase rVert racute \ +raggedbottom raggedcenter raggedleft raggedright raggedwidecenter \ +raisebox randomizetext randomnumber rangle rationals \ +rawcounter rawcountervalue rawdate rawdoifelseinset rawdoifinset \ +rawdoifinsetelse rawgetparameters rawprocessaction rawprocesscommacommand rawprocesscommalist \ +rawstructurelistuservariable rawsubcountervalue rbox rbrace rbracket \ +rcaron rceil rcommaaccent rdoublegrave readfile \ +readfixfile readjobfile readlocfile readsetfile readsysfile \ +readtexfile readxmlfile realSmallCapped realSmallcapped realpagenumber \ +reals realsmallcapped recursedepth recurselevel recursestring \ +redoconvertfont ref reference referencecolumnnumber referencepagedetail \ +referencepagestate referenceprefix referencerealpage referencesymbol referring \ +registerattachment registerctxluafile registered registerexternalfigure registerfontclass \ +registerhyphenationexception registerhyphenationpattern registermenubuttons registerparwrapper registerparwrapperreverse \ +registersort registersynonym registerunit regular relatemarking \ +relateparameterhandlers relaxvalueifundefined relbar remainingcharacters remark \ +removebottomthings removedepth removefromcommalist removelastskip removelastspace \ +removemarkedcontent removepunctuation removesubstring removetoks removeunwantedspaces \ +repeathead replacefeature replaceincommalist replaceword rescan \ +rescanwithsetup resetMPdrawing resetMPenvironment resetMPinstance resetallattributes \ +resetandaddfeature resetbar resetboxesincache resetbreakpoints resetbuffer \ +resetcharacteralign resetcharacterkerning resetcharacterspacing resetcharacterstripping resetcollector \ +resetcounter resetctxscanner resetdigitsmanipulation resetdirection resetfeature \ +resetflag resetfontcolorsheme resetfontfallback resetfontsolution resethyphenationfeatures \ +resetinjector resetinteractionmenu resetitaliccorrection resetlayer resetlocalfloats \ +resetmarker resetmarking resetmode resetpagenumber resetparallel \ +resetpath resetpenalties resetperiodkerning resetprofile resetrecurselevel \ +resetreference resetreplacements resetscript resetsetups resetshownsynonyms \ +resetsubpagenumber resetsymbolset resetsystemmode resettimer resettokenlist \ +resettrackers resettrialtypesetting resetusedsortings resetusedsynonyms resetuserpagenumber \ +resetvalue resetvisualizers reshapebox resolvedglyphdirect resolvedglyphstyled \ +restartcounter restorebox restorecatcodes restorecounter restorecurrentattributes \ +restoreendofline restoreglobalbodyfont restriction retestfeature reusableMPgraphic \ +reuseMPgraphic reuserandomseed reverseddoubleprime reversedprime reversedtripleprime \ +reversehbox reversehpack reversetpack reversevbox reversevboxcontent \ +reversevpack reversevtop revivefeature rfence rfloor \ +rgroup rhbox rho rhooknearrow rhookswarrow \ +right rightaligned rightangle rightarrow rightarrowbar \ +rightarrowtail rightarrowtriangle rightbottombox rightbox rightdasharrow \ +rightguillemot rightharpoondown rightharpoonup righthbox rightheadtext \ +rightlabeltext rightleftarrows rightleftharpoons rightline rightmathlabeltext \ +rightorleftpageaction rightpageorder rightrightarrows rightskipadaption rightsquigarrow \ +rightsubguillemot rightthreearrows rightthreetimes righttoleft righttolefthbox \ +righttoleftvbox righttoleftvtop righttopbox rightwavearrow rightwhitearrow \ +ring rinterval rinvertedbreve risingdotseq rlap \ +rlointerval rmoustache rneq robustaddtocommalist robustdoifelseinset \ +robustdoifinsetelse robustpretocommalist rointerval rollbutton roman \ +romanC romanD romanI romanII romanIII \ +romanIV romanIX romanL romanM romanV \ +romanVI romanVII romanVIII romanX romanXI \ +romanXII romanc romand romani romanii \ +romaniii romaniv romanix romanl romanm \ +romannumerals romanv romanvi romanvii romanviii \ +romanx romanxi romanxii rootradical rotate \ +rparent rrangle rrbracket rrointerval rtimes \ +rtlhbox rtlvbox rtlvtop rtop ruby \ +ruledhbox ruledhpack ruledmbox ruledtopv ruledtpack \ +ruledvbox ruledvpack ruledvtop runMPbuffer runninghbox \ +russianNumerals russiannumerals rvert sacute safechar \ +samplefile sans sansbold sansnormal sansserif \ +savebox savebtxdataset savebuffer savecounter savecurrentattributes \ +savenormalmeaning savetaggedtwopassdata savetwopassdata sbox scale \ +scaron scedilla schwa schwahook scircumflex \ +scommaaccent screen searrow secondoffivearguments secondoffourarguments \ +secondofsixarguments secondofthreearguments secondofthreeunexpanded secondoftwoarguments secondoftwounexpanded \ +section sectionmark seeindex select selectblocks \ +serializecommalist serializedcommalist serif serifbold serifnormal \ +setJSpreamble setMPlayer setMPpositiongraphic setMPpositiongraphicrange setMPtext \ +setMPvariable setMPvariables setautopagestaterealpageno setbar setbigbodyfont \ +setboxllx setboxlly setbreakpoints setcapstrut setcatcodetable \ +setcharacteralign setcharacteraligndetail setcharactercasing setcharactercleaning setcharacterkerning \ +setcharacterspacing setcharacterstripping setcharstrut setcollector setcolormodell \ +setcounter setcounterown setctxluafunction setcurrentfontclass setdataset \ +setdatavalue setdefaultpenalties setdigitsmanipulation setdirection setdocumentargument \ +setdocumentargumentdefault setdocumentfilename setdummyparameter setelementexporttag setemeasure \ +setevalue setevariable setevariables setexpansion setfirstline \ +setfirstpasscharacteralign setflag setfont setfontcolorsheme setfontfeature \ +setfontsolution setfontstrut setfractions setglobalscript setgmeasure \ +setgvalue setgvariable setgvariables sethboxregister sethyphenatedurlafter \ +sethyphenatedurlbefore sethyphenatedurlnormal sethyphenationfeatures setinitial setinjector \ +setinteraction setinterfacecommand setinterfaceconstant setinterfaceelement setinterfacemessage \ +setinterfacevariable setinternalrendering setitaliccorrection setlayer setlayerframed \ +setlayertext setlinefiller setlocalhsize setlocalscript setluatable \ +setmainbodyfont setmainparbuilder setmarker setmarking setmathstyle \ +setmeasure setmessagetext setminus setmode setnostrut \ +setnote setnotetext setobject setoldstyle setpagereference \ +setpagestate setpagestaterealpageno setparagraphfreezing setpenalties setpercentdimen \ +setperiodkerning setposition setpositionbox setpositiondata setpositiondataplus \ +setpositiononly setpositionplus setpositionstrut setprofile setrandomseed \ +setreference setreferencedobject setregisterentry setreplacements setrigidcolumnbalance \ +setrigidcolumnhsize setscript setsecondpasscharacteralign setsectionblock setsimplecolumnshsize \ +setsmallbodyfont setsmallcaps setstackbox setstructurepageregister setstrut \ +setsuperiors setsystemmode settabular settaggedmetadata settestcrlf \ +settextcontent settightobject settightreferencedobject settightstrut settightunreferencedobject \ +settokenlist settrialtypesetting setuevalue setugvalue setunreferencedobject \ +setup setupMPgraphics setupMPinstance setupMPpage setupMPvariables \ +setupTABLE setupTEXpage setupalign setupalternativestyles setuparranging \ +setupattachment setupattachments setupbackend setupbackground setupbackgrounds \ +setupbar setupbars setupblackrules setupblank setupbleeding \ +setupblock setupbodyfont setupbodyfontenvironment setupbookmark setupbottom \ +setupbottomtexts setupbtx setupbtxdataset setupbtxlabeltext setupbtxlist \ +setupbtxregister setupbtxrendering setupbuffer setupbutton setupcapitals \ +setupcaption setupcaptions setupcharacteralign setupcharacterkerning setupcharacterspacing \ +setupchemical setupchemicalframed setupclipping setupcollector setupcolor \ +setupcolors setupcolumns setupcolumnset setupcolumnsetarea setupcolumnsetareatext \ +setupcolumnsetlines setupcolumnsetspan setupcolumnsetstart setupcombination setupcombinedlist \ +setupcomment setupcontent setupcounter setupdataset setupdelimitedtext \ +setupdescription setupdescriptions setupdirections setupdocument setupeffect \ +setupenumeration setupenumerations setupenv setupexpansion setupexport \ +setupexternalfigure setupexternalfigures setupexternalsoundtracks setupfacingfloat setupfield \ +setupfieldbody setupfieldcategory setupfieldcontentframed setupfieldlabelframed setupfields \ +setupfieldtotalframed setupfiller setupfillinlines setupfillinrules setupfirstline \ +setupfittingpage setupfloat setupfloatframed setupfloats setupfloatsplitting \ +setupfontexpansion setupfontprotrusion setupfonts setupfontsolution setupfooter \ +setupfootertexts setupfootnotes setupforms setupformula setupformulae \ +setupformulaframed setupframed setupframedcontent setupframedtable setupframedtablecolumn \ +setupframedtablerow setupframedtext setupframedtexts setupglobalreferenceprefix setuphead \ +setupheadalternative setupheader setupheadertexts setupheadnumber setupheads \ +setupheadtext setuphelp setuphigh setuphighlight setuphyphenation \ +setuphyphenmark setupindentedtext setupindenting setupindex setupinitial \ +setupinsertion setupinteraction setupinteractionbar setupinteractionmenu setupinteractionscreen \ +setupinterlinespace setupitaliccorrection setupitemgroup setupitemizations setupitemize \ +setupitems setuplabel setuplabeltext setuplanguage setuplayer \ +setuplayeredtext setuplayout setuplayouttext setuplegend setuplinefiller \ +setuplinefillers setuplinenote setuplinenumbering setuplines setuplinetable \ +setuplinewidth setuplist setuplistalternative setuplistextra setuplocalfloats \ +setuplocalinterlinespace setuplow setuplowhigh setuplowmidhigh setupmakeup \ +setupmarginblock setupmargindata setupmarginframed setupmarginrule setupmarginrules \ +setupmarking setupmathalignment setupmathcases setupmathematics setupmathfence \ +setupmathfraction setupmathfractions setupmathframed setupmathlabeltext setupmathmatrix \ +setupmathornament setupmathradical setupmathstackers setupmathstyle setupmixedcolumns \ +setupmodule setupmulticolumns setupnarrower setupnotation setupnotations \ +setupnote setupnotes setupoffset setupoffsetbox setupoperatortext \ +setupoppositeplacing setuporientation setupoutput setupoutputroutine setuppagechecker \ +setuppagecolumns setuppagecomment setuppageinjection setuppageinjectionalternative setuppagenumber \ +setuppagenumbering setuppageshift setuppagestate setuppagetransitions setuppairedbox \ +setuppalet setuppaper setuppapersize setupparagraph setupparagraphintro \ +setupparagraphnumbering setupparagraphs setupparallel setupperiodkerning setupperiods \ +setupplaceholder setupplacement setuppositionbar setuppositioning setupprefixtext \ +setupprocessor setupprofile setupprograms setupquotation setupquote \ +setuprealpagenumber setupreferenceformat setupreferenceprefix setupreferencestructureprefix setupreferencing \ +setupregister setupregisters setuprenderingwindow setuprotate setupruby \ +setups setupscale setupscript setupscripts setupsectionblock \ +setupselector setupshift setupsidebar setupsorting setupspacing \ +setupspellchecking setupstartstop setupstretched setupstrut setupstyle \ +setupsubformula setupsubformulas setupsubpagenumber setupsuffixtext setupsymbols \ +setupsymbolset setupsynctex setupsynonyms setupsystem setuptables \ +setuptabulate setuptagging setuptaglabeltext setuptext setuptextbackground \ +setuptextflow setuptextnote setuptextrules setuptexttexts setupthinrules \ +setuptolerance setuptooltip setuptop setuptoptexts setuptype \ +setuptyping setupunit setupunittext setupurl setupuserdata \ +setupuserdataalternative setupuserpagenumber setupversion setupviewerlayer setupvspacing \ +setupwhitespace setupwithargument setupwithargumentswapped setupxml setupxtable \ +setuvalue setuxvalue setvalue setvariable setvariables \ +setvboxregister setvisualizerfont setvtopregister setwidthof setxmeasure \ +setxvalue setxvariable setxvariables seveneighths sfrac \ +shapedhbox sharp shiftbox shiftdown shiftup \ +showallmakeup showattributes showbodyfont showbodyfontenvironment showboxes \ +showbtxdatasetauthors showbtxdatasetcompleteness showbtxdatasetfields showbtxfields showbtxhashedauthors \ +showbtxtables showchardata showcharratio showcolor showcolorbar \ +showcolorcomponents showcolorgroup showcolorset showcolorstruts showcounter \ +showdirectives showdirsinmargin showedebuginfo showexperiments showfont \ +showfontdata showfontexpansion showfontitalics showfontkerns showfontparameters \ +showfontstrip showfontstyle showframe showglyphdata showglyphs \ +showgrid showgridsnapping showhelp showhyphenationtrace showhyphens \ +showinjector showjustification showkerning showlayout showlayoutcomponents \ +showligature showligatures showlogcategories showluatables showmakeup \ +showmargins showmessage showminimalbaseline shownextbox showotfcomposition \ +showpalet showparentchain showparwrapperstate showprint showsetups \ +showsetupsdefinition showstruts showsymbolset showtimer showtokens \ +showtrackers showvalue showvariable showwarning sigma \ +signalrightpage sim simeq simplealignedbox simplealignedboxplus \ +simplealignedspreadbox simplegroupedcommand simplereversealignedbox simplereversealignedboxplus singalcharacteralign \ +singlebond singleverticalbar sixperemspace sixthofsixarguments slanted \ +slantedbold slantedface slash slicepages slong \ +slovenianNumerals sloveniannumerals small smallbodyfont smallbold \ +smallbolditalic smallboldslanted smallcappedcharacters smallcappedromannumerals smallcaps \ +smaller smallitalicbold smallnormal smallskip smallslanted \ +smallslantedbold smalltype smash smashbox smashboxed \ +smashedhbox smashedvbox smile snaptogrid softhyphen \ +solidus someheadnumber somekindoftab someline somelocalfloat \ +somenamedheadnumber someplace somewhere space spaceddigits \ +spaceddigitsmethod spaceddigitsseparator spaceddigitssymbol spadesuit spanishNumerals \ +spanishnumerals speech sphericalangle splitatasterisk splitatcolon \ +splitatcolons splitatcomma splitatperiod splitdfrac splitfilename \ +splitfloat splitfrac splitoffbase splitofffull splitoffkind \ +splitoffname splitoffpath splitoffroot splitofftokens splitofftype \ +splitstring spreadhbox sqcap sqcup sqrt \ +sqsubset sqsubseteq sqsubsetneq sqsupset sqsupseteq \ +sqsupsetneq square squaredots ssharp stackrel \ +stackscripts star stareq startJScode startJSpreamble \ +startLUA startMP startMPclip startMPcode startMPdefinitions \ +startMPdrawing startMPenvironment startMPextensions startMPinclusions startMPinitializations \ +startMPpage startMPpositiongraphic startMPpositionmethod startMPrun startPARSEDXML \ +startTABLE startTABLEbody startTABLEfoot startTABLEhead startTABLEnested \ +startTABLEnext startTC startTD startTDs startTEX \ +startTEXpage startTH startTN startTR startTRs \ +startTX startTY startXML startalign startalignment \ +startallmodes startappendices startarrangedpages startasciimode startaside \ +startattachment startbackground startbackmatter startbar startbbordermatrix \ +startbitmapimage startblockquote startbodymatter startbordermatrix startboxedcolumns \ +startbtxlabeltext startbtxrenderingdefinitions startbuffer startcases startcatcodetable \ +startcenteraligned startchapter startcharacteralign startcheckedfences startchemical \ +startchemicaltext startcollect startcollecting startcolor startcolorintent \ +startcoloronly startcolorset startcolumns startcolumnset startcolumnsetspan \ +startcombination startcomment startcomponent startcontextcode startcontextdefinitioncode \ +startctxfunction startctxfunctiondefinition startcurrentcolor startcurrentlistentrywrapper startdelimited \ +startdelimitedtext startdisplaymath startdmath startdocument starteffect \ +startelement startembeddedxtable startendnote startendofline startenvironment \ +startexceptions startexpanded startexpandedcollect startextendedcatcodetable startexternalfigurecollection \ +startfacingfloat startfact startfigure startfiguretext startfittingpage \ +startfixed startfloatcombination startfont startfontclass startfontsolution \ +startfootnote startformula startformulas startframed startframedcell \ +startframedcontent startframedrow startframedtable startframedtext startfrontmatter \ +startgoto startgraphictext startgridsnapping starthanging starthbox \ +starthboxestohbox starthboxregister starthead startheadtext starthelptext \ +starthiding starthighlight starthyphenation startimath startindentation \ +startindentedtext startinteraction startinteractionmenu startinterface startintermezzotext \ +startintertext startitem startitemgroup startitemgroupcolumns startitemize \ +startknockout startlabeltext startlanguage startlayout startleftaligned \ +startlegend startline startlinealignment startlinecorrection startlinefiller \ +startlinenote startlinenumbering startlines startlinetable startlinetablebody \ +startlinetablecell startlinetablehead startlocalfootnotes startlocalheadsetup startlocallinecorrection \ +startlocalnotes startlocalsetups startlua startluacode startluaparameterset \ +startluasetups startmakeup startmarginblock startmarginrule startmarkedcontent \ +startmarkpages startmathalignment startmathcases startmathlabeltext startmathmatrix \ +startmathmode startmathstyle startmatrices startmatrix startmaxaligned \ +startmdformula startmidaligned startmiddlealigned startmiddlemakeup startmixedcolumns \ +startmode startmodeset startmodule startmoduletestsection startmpformula \ +startmulticolumns startnamedsection startnamedsubformulas startnarrow startnarrower \ +startnegative startnicelyfilledbox startnointerference startnotallmodes startnotext \ +startnotmode startoperatortext startopposite startoutputstream startoverlay \ +startoverprint startpacked startpagecolumns startpagecomment startpagefigure \ +startpagelayout startpagemakeup startpar startparagraph startparagraphs \ +startparagraphscell startparbuilder startpart startpath startplacechemical \ +startplacefigure startplacefloat startplaceformula startplacegraphic startplaceintermezzo \ +startplacelegend startplacepairedbox startplacetable startpositioning startpositionoverlay \ +startpositive startpostponing startpostponingnotes startprefixtext startprocessassignmentcommand \ +startprocessassignmentlist startprocesscommacommand startprocesscommalist startproduct startproject \ +startprotect startprotectedcolors startpublication startpunctuation startquotation \ +startquote startrandomized startrandomseed startrawsetups startreadingfile \ +startreferenceprefix startregime startregister startreusableMPgraphic startrightaligned \ +startruby startscript startsdformula startsection startsectionblock \ +startsectionblockenvironment startsectionlevel startsetups startshapebox startshift \ +startsidebar startsimplecolumns startspecialitem startspeech startspformula \ +startsplitformula startsplittext startspread startstandardmakeup startstaticMPfigure \ +startstaticMPgraphic startstrictinspectnextcharacter startstructurepageregister startstrut startstyle \ +startsubformulas startsubject startsubjectlevel startsubsection startsubsentence \ +startsubstack startsubsubject startsubsubsection startsubsubsubject startsubsubsubsection \ +startsubsubsubsubject startsubsubsubsubsection startsubsubsubsubsubject startsuffixtext startsymbolset \ +starttable starttablehead starttables starttabletail starttabletext \ +starttabulate starttabulatehead starttabulatetail starttagged starttaglabeltext \ +starttexcode starttexdefinition starttext starttextbackground starttextbackgroundmanual \ +starttextcolor starttextcolorintent starttextflow starttextmakeup starttextrule \ +startthematrix starttitle starttokenlist starttokens starttransparent \ +starttypescript starttypescriptcollection starttyping startuniqueMPgraphic startuniqueMPpagegraphic \ +startunittext startunpacked startusableMPgraphic startuseMPgraphic startusemathstyleparameter \ +startuserdata startusingbtxspecification startvbox startvboxregister startvboxtohbox \ +startvboxtohboxseparator startviewerlayer startvtop startvtopregister startxcell \ +startxcellgroup startxcolumn startxgroup startxmldisplayverbatim startxmlinlineverbatim \ +startxmlraw startxmlsetups startxrow startxrowgroup startxtable \ +startxtablebody startxtablefoot startxtablehead startxtablenext stligature \ +stopJScode stopJSpreamble stopLUA stopMP stopMPclip \ +stopMPcode stopMPdefinitions stopMPdrawing stopMPenvironment stopMPextensions \ +stopMPinclusions stopMPinitializations stopMPpage stopMPpositiongraphic stopMPpositionmethod \ +stopMPrun stopPARSEDXML stopTABLE stopTABLEbody stopTABLEfoot \ +stopTABLEhead stopTABLEnested stopTABLEnext stopTC stopTD \ +stopTDs stopTEX stopTEXpage stopTH stopTN \ +stopTR stopTRs stopTX stopTY stopXML \ +stopalign stopalignment stopallmodes stopappendices stoparrangedpages \ +stopasciimode stopaside stopattachment stopbackground stopbackmatter \ +stopbar stopbbordermatrix stopbitmapimage stopblockquote stopbodymatter \ +stopbordermatrix stopboxedcolumns stopbtxlabeltext stopbtxrenderingdefinitions stopbuffer \ +stopcases stopcatcodetable stopcenteraligned stopchapter stopcharacteralign \ +stopcheckedfences stopchemical stopchemicaltext stopcollect stopcollecting \ +stopcolor stopcolorintent stopcoloronly stopcolorset stopcolumns \ +stopcolumnset stopcolumnsetspan stopcombination stopcomment stopcomponent \ +stopcontextcode stopcontextdefinitioncode stopctxfunction stopctxfunctiondefinition stopcurrentcolor \ +stopcurrentlistentrywrapper stopdelimited stopdelimitedtext stopdisplaymath stopdmath \ +stopdocument stopeffect stopelement stopembeddedxtable stopendnote \ +stopendofline stopenvironment stopexceptions stopexpanded stopexpandedcollect \ +stopextendedcatcodetable stopexternalfigurecollection stopfacingfloat stopfact stopfigure \ +stopfiguretext stopfittingpage stopfixed stopfloatcombination stopfont \ +stopfontclass stopfontsolution stopfootnote stopformula stopformulas \ +stopframed stopframedcell stopframedcontent stopframedrow stopframedtable \ +stopframedtext stopfrontmatter stopgoto stopgraphictext stopgridsnapping \ +stophanging stophbox stophboxestohbox stophboxregister stophead \ +stopheadtext stophelptext stophiding stophighlight stophyphenation \ +stopimath stopindentation stopindentedtext stopinteraction stopinteractionmenu \ +stopinterface stopintermezzotext stopintertext stopitem stopitemgroup \ +stopitemgroupcolumns stopitemize stopknockout stoplabeltext stoplanguage \ +stoplayout stopleftaligned stoplegend stopline stoplinealignment \ +stoplinecorrection stoplinefiller stoplinenote stoplinenumbering stoplines \ +stoplinetable stoplinetablebody stoplinetablecell stoplinetablehead stoplocalfootnotes \ +stoplocalheadsetup stoplocallinecorrection stoplocalnotes stoplocalsetups stoplua \ +stopluacode stopluaparameterset stopluasetups stopmakeup stopmarginblock \ +stopmarginrule stopmarkedcontent stopmarkpages stopmathalignment stopmathcases \ +stopmathlabeltext stopmathmatrix stopmathmode stopmathstyle stopmatrices \ +stopmatrix stopmaxaligned stopmdformula stopmidaligned stopmiddlealigned \ +stopmiddlemakeup stopmixedcolumns stopmode stopmodeset stopmodule \ +stopmoduletestsection stopmpformula stopmulticolumns stopnamedsection stopnamedsubformulas \ +stopnarrow stopnarrower stopnegative stopnicelyfilledbox stopnointerference \ +stopnotallmodes stopnotext stopnotmode stopoperatortext stopopposite \ +stopoutputstream stopoverlay stopoverprint stoppacked stoppagecolumns \ +stoppagecomment stoppagefigure stoppagelayout stoppagemakeup stoppar \ +stopparagraph stopparagraphs stopparagraphscell stopparbuilder stoppart \ +stoppath stopplacechemical stopplacefigure stopplacefloat stopplaceformula \ +stopplacegraphic stopplaceintermezzo stopplacelegend stopplacepairedbox stopplacetable \ +stoppositioning stoppositionoverlay stoppositive stoppostponing stoppostponingnotes \ +stopprefixtext stopprocessassignmentcommand stopprocessassignmentlist stopprocesscommacommand stopprocesscommalist \ +stopproduct stopproject stopprotect stopprotectedcolors stoppublication \ +stoppunctuation stopquotation stopquote stoprandomized stoprandomseed \ +stoprawsetups stopreadingfile stopreferenceprefix stopregime stopreusableMPgraphic \ +stoprightaligned stopruby stopscript stopsdformula stopsection \ +stopsectionblock stopsectionblockenvironment stopsectionlevel stopsetups stopshapebox \ +stopshift stopsidebar stopsimplecolumns stopspecialitem stopspeech \ +stopspformula stopsplitformula stopsplittext stopspread stopstandardmakeup \ +stopstaticMPfigure stopstaticMPgraphic stopstrictinspectnextcharacter stopstrut stopstyle \ +stopsubformulas stopsubject stopsubjectlevel stopsubsection stopsubsentence \ +stopsubstack stopsubsubject stopsubsubsection stopsubsubsubject stopsubsubsubsection \ +stopsubsubsubsubject stopsubsubsubsubsection stopsubsubsubsubsubject stopsuffixtext stopsymbolset \ +stoptable stoptablehead stoptables stoptabletail stoptabletext \ +stoptabulate stoptabulatehead stoptabulatetail stoptagged stoptaglabeltext \ +stoptexcode stoptexdefinition stoptext stoptextbackground stoptextbackgroundmanual \ +stoptextcolor stoptextcolorintent stoptextflow stoptextmakeup stoptextrule \ +stopthematrix stoptitle stoptokenlist stoptokens stoptransparent \ +stoptypescript stoptypescriptcollection stoptyping stopuniqueMPgraphic stopuniqueMPpagegraphic \ +stopunittext stopunpacked stopusableMPgraphic stopuseMPgraphic stopusemathstyleparameter \ +stopuserdata stopusingbtxspecification stopvbox stopvboxregister stopvboxtohbox \ +stopvboxtohboxseparator stopviewerlayer stopvtop stopvtopregister stopxcell \ +stopxcellgroup stopxcolumn stopxgroup stopxmldisplayverbatim stopxmlinlineverbatim \ +stopxmlraw stopxmlsetups stopxrow stopxrowgroup stopxtable \ +stopxtablebody stopxtablefoot stopxtablehead stopxtablenext stretched \ +strictdoifelsenextoptional strictdoifnextoptionalelse stripcharacter strippedcsname stripspaces \ +structurelistuservariable structurenumber structuretitle structureuservariable structurevariable \ +strut strutdp strutgap strutht struthtdp \ +struttedbox strutwd style styleinstance subject \ +subpagenumber subsection subsentence subset subseteq \ +subseteqq subsetneq subsetneqq substituteincommalist subsubject \ +subsubsection subsubsubject subsubsubsection subsubsubsubject subsubsubsubsection \ +subsubsubsubsubject subtractfeature succ succapprox succcurlyeq \ +succeq succeqq succnapprox succneq succneqq \ +succnsim succsim suffixlanguage suffixtext sum \ +supset supseteq supseteqq supsetneq supsetneqq \ +surd surdradical swapcounts swapdimens swapface \ +swapmacros swaptypeface swarrow switchstyleonly switchtobodyfont \ +switchtocolor switchtointerlinespace symbol symbolreference synchronizeblank \ +synchronizeindenting synchronizemarking synchronizeoutputstreams synchronizestrut synchronizewhitespace \ +synctexblockfilename synctexresetfilename synctexsetfilename systemlog systemlogfirst \ +systemloglast systemsetups tLeftarrow tLeftrightarrow tRightarrow \ +tabulateautoline tabulateautorule tabulateline tabulaterule taggedctxcommand \ +taggedlabeltexts taglabellanguage taglabeltext tau tbinom \ +tbox tcaron tcedilla tcommaaccent tcurl \ +tequal test testandsplitstring testcolumn testfeature \ +testfeatureonce testpage testpageonly testpagesync testtokens \ +tex texdefinition texsetup textAngstrom textacute \ +textampersand textasciicircum textasciitilde textat textbackslash \ +textbar textbottomcomma textbottomdot textbraceleft textbraceright \ +textbreve textbrokenbar textbullet textcaron textcedilla \ +textcelsius textcent textcircledP textcircumflex textcitation \ +textcite textcomma textcontrolspace textcurrency textdag \ +textddag textdegree textdiaeresis textdiv textdollar \ +textdong textdotaccent textellipsis texteuro textflowcollector \ +textfraction textgrave texthash texthorizontalbar texthungarumlaut \ +texthyphen textkelvin textlognot textmacron textmath \ +textmho textminus textmu textmultiply textnumero \ +textogonek textohm textormathchar textormathchars textounce \ +textpercent textperiod textplus textpm textreference \ +textring textrule textslash textsterling texttilde \ +textunderscore textvisiblespace textyen thai thainumerals \ +thedatavalue thefirstcharacter thematrix thenormalizedbodyfontsize theorientation \ +therefore theremainingcharacters theta thickspace thinrule \ +thinrules thinspace thirdoffivearguments thirdoffourarguments thirdofsixarguments \ +thirdofthreearguments thirdofthreeunexpanded thook thookleftarrow thookrightarrow \ +thorn threedigitrounding threeeighths threefifths threeperemspace \ +threequarter threesuperior tibetannumerals tightlayer tilde \ +times tinyfont title tlap tleftarrow \ +tleftharpoondown tleftharpoonup tleftrightarrow tleftrightharpoons tmapsto \ +to tochar tolinenote tooltip top \ +topbox topleftbox toplinebox toprightbox topskippedbox \ +tracecatcodetables tracedfontname tracedpagestate traceoutputroutines tracepositions \ +trademark translate transparencycomponents transparent trel \ +triangle triangledown triangleleft triangleq triangleright \ +trightarrow trightharpoondown trightharpoonup trightleftharpoons trightoverleftarrow \ +triplebond tripleprime tripleverticalbar truefilename truefontname \ +tstroke ttraggedright ttriplerel ttwoheadleftarrow ttwoheadrightarrow \ +turnediota twodigitrounding twofifths twoheaddownarrow twoheadleftarrow \ +twoheadrightarrow twoheadrightarrowtail twoheaduparrow twosuperior twothirds \ +tx txx typ type typebuffer \ +typedefinedbuffer typeface typefile typeinlinebuffer typescriptone \ +typescriptprefix typescriptthree typescripttwo typesetbuffer typesetbufferonly \ +typesetfile uacute ubreve ucaron uchexnumber \ +uchexnumbers ucircumflex uconvertnumber udiaeresis udiaeresisacute \ +udiaeresiscaron udiaeresisgrave udiaeresismacron udotbelow udots \ +udoublegrave uedcatcodecommand ugrave uhook uhorn \ +uhornacute uhorndotbelow uhorngrave uhornhook uhorntilde \ +uhungarumlaut uinvertedbreve ulcorner umacron undefinevalue \ +undepthed underbar underbars underbartext underbrace \ +underbracetext underbracket underbrackettext underdash underdashes \ +underdot underdots underleftarrow underleftharpoondown underleftharpoonup \ +underleftrightarrow underparent underparenttext underrandom underrandoms \ +underrightarrow underrightharpoondown underrightharpoonup underset understrike \ +understrikes undertwoheadleftarrow undertwoheadrightarrow undoassign unexpandeddocumentvariable \ +unframed unhhbox unihex uniqueMPgraphic uniqueMPpagegraphic \ +unit unitlanguage unitshigh unitslow unittext \ +unknown unprotected unregisterhyphenationpattern unregisterparwrapper unspaceafter \ +unspaceargument unspaced unspacestring unstackscripts untexargument \ +untexcommand uogonek upand uparrow updasharrow \ +updateparagraphdemerits updateparagraphpenalties updateparagraphproperties updateparagraphshapes updownarrow \ +updownarrowbar updownarrows upharpoonleft upharpoonright uplus \ +uppercased uppercasestring uppercasing upperleftdoubleninequote upperleftdoublesixquote \ +upperleftsingleninequote upperleftsinglesixquote upperrightdoubleninequote upperrightdoublesixquote upperrightsingleninequote \ +upperrightsinglesixquote upsilon upuparrows upwhitearrow urcorner \ +uring url useJSscripts useMPenvironmentbuffer useMPgraphic \ +useMPlibrary useMPrun useMPvariables useURL usealignparameter \ +useblankparameter useblocks usebodyfont usebodyfontparameter usebtxdataset \ +usebtxdefinitions usecitation usecolors usecomponent usedirectory \ +usedummycolorparameter usedummystyleandcolor usedummystyleparameter useenvironment useexternaldocument \ +useexternalfigure useexternalrendering useexternalsoundtrack usefigurebase usefile \ +usefontpath usegridparameter usehyphensparameter useindentingparameter useindentnextparameter \ +useinterlinespaceparameter uselanguageparameter useluamodule useluatable usemathstyleparameter \ +usemodule useproduct useprofileparameter useproject usereferenceparameter \ +userpagenumber usesetupsparameter usestaticMPfigure usesubpath usesymbols \ +usetexmodule usetypescript usetypescriptfile useurl usezipfile \ +utfchar utflower utfupper utilde utilityregisterlength \ +vDash validassignment varTheta varepsilon varkappa \ +varnothing varphi varpi varrho varsigma \ +vartheta vboxreference vdash vdots vec \ +vee veebar veeeq verbatim verbatimstring \ +verbosenumber version vert verticalgrowingbar verticalpositionbar \ +veryraggedcenter veryraggedleft veryraggedright vglue viewerlayer \ +vl vpackbox vpackedbox vphantom vpos \ +vsmash vsmashbox vsmashed vspace vspacing \ +wcircumflex wdofstring wedge wedgeeq weekday \ +whitearrowupfrombar widegrave widehat widetilde widthofstring \ +widthspanningtext withoutpt word wordright words \ +wordtonumber wp wr writebetweenlist writedatatolist \ +writestatus writetolist xLeftarrow xLeftrightarrow xRightarrow \ +xdefconvertedargument xequal xfrac xhookleftarrow xhookrightarrow \ +xi xleftarrow xleftharpoondown xleftharpoonup xleftrightarrow \ +xleftrightharpoons xmapsto xmladdindex xmlafterdocumentsetup xmlaftersetup \ +xmlall xmlappenddocumentsetup xmlappendsetup xmlapplyselectors xmlatt \ +xmlattdef xmlattribute xmlattributedef xmlbadinclusions xmlbeforedocumentsetup \ +xmlbeforesetup xmlchainatt xmlchainattdef xmlchecknamespace xmlcommand \ +xmlconcat xmlconcatrange xmlcontext xmlcount xmldefaulttotext \ +xmldepth xmldirectives xmldirectivesafter xmldirectivesbefore xmldisplayverbatim \ +xmldoif xmldoifatt xmldoifelse xmldoifelseatt xmldoifelseempty \ +xmldoifelseselfempty xmldoifelsetext xmldoifelsevalue xmldoifnot xmldoifnotatt \ +xmldoifnotselfempty xmldoifnottext xmldoifselfempty xmldoiftext xmlelement \ +xmlfilter xmlfirst xmlflush xmlflushcontext xmlflushdocumentsetups \ +xmlflushlinewise xmlflushpure xmlflushspacewise xmlflushtext xmlinclude \ +xmlinclusion xmlinclusions xmlinfo xmlinjector xmlinlineprettyprint \ +xmlinlineprettyprinttext xmlinlineverbatim xmlinstalldirective xmllast xmllastatt \ +xmllastmatch xmllastpar xmlloadbuffer xmlloaddata xmlloaddirectives \ +xmlloadfile xmlloadonly xmlmain xmlmapvalue xmlname \ +xmlnamespace xmlnonspace xmlpar xmlparam xmlpath \ +xmlpos xmlposition xmlprependdocumentsetup xmlprependsetup xmlprettyprint \ +xmlprettyprinttext xmlprocessbuffer xmlprocessdata xmlprocessfile xmlpure \ +xmlraw xmlrefatt xmlregistereddocumentsetups xmlregisteredsetups xmlregisterns \ +xmlremapname xmlremapnamespace xmlremovedocumentsetup xmlremovesetup xmlresetdocumentsetups \ +xmlresetinjectors xmlresetsetups xmlsave xmlsetatt xmlsetattribute \ +xmlsetentity xmlsetfunction xmlsetinjectors xmlsetpar xmlsetparam \ +xmlsetsetup xmlsetup xmlshow xmlsnippet xmlstrip \ +xmlstripnolines xmlstripped xmlstrippednolines xmltag xmltexentity \ +xmltext xmltobuffer xmltobufferverbose xmltofile xmlvalue \ +xmlverbatim xrel xrightarrow xrightharpoondown xrightharpoonup \ +xrightleftharpoons xrightoverleftarrow xsplitstring xtriplerel xtwoheadleftarrow \ +xtwoheadrightarrow xxfrac xypos yacute ycircumflex \ +ydiaeresis ydotbelow yen ygrave yhook \ +yiddishnumerals ymacron ytilde zacute zcaron \ +zdotaccent zeronumberconversion zerowidthnobreakspace zerowidthspace zeta \ +zhook zstroke zwj zwnj keywordclass.context.en=\ diff --git a/context/data/scite/context/scite-context-data-metafun.properties b/context/data/scite/context/scite-context-data-metafun.properties index ea5890ef9..38c17f2f3 100644 --- a/context/data/scite/context/scite-context-data-metafun.properties +++ b/context/data/scite/context/scite-context-data-metafun.properties @@ -62,35 +62,36 @@ undashed pencilled decorated redecorated undecorated \ passvariable passarrayvariable tostring topair format \ formatted quotation quote startpassingvariable stoppassingvariable \ eofill eoclip nofill dofill fillup \ -eofillup nodraw dodraw 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 setglobalmacro setglobaldimen setglobalcount setglobaltoks \ -positionpath positioncurve positionxy positionparagraph positioncolumn \ -positionwhd positionpage positionregion positionbox positionx \ -positiony positionanchor positioninregion positionatanchor positioncolumnbox \ -overlaycolumnbox positioncolumnatx getposboxes getmultipars getpospage \ -getposparagraph getposcolumn getposregion getposx getposy \ -getposwidth getposheight getposdepth getposleftskip getposrightskip \ -getposhsize getposparindent getposhangindent getposhangafter getposxy \ -getposupperleft getposlowerleft getposupperright getposlowerright getposllx \ -getposlly getposurx getposury wdpart htpart \ -dppart texvar texstr inpath pointof \ -leftof rightof utfnum utflen utfsub \ -newhash disposehash inhash tohash fromhash \ -isarray prefix isobject comment report \ -lua lualist mp MP luacall \ -mirrored mirroredabout xslanted yslanted scriptindex \ -newscriptindex newcolor newrgbcolor newcmykcolor newnumeric \ -newboolean newtransform newpath newpicture newstring \ -newpair mpvard mpvarn mpvars mpvar \ -withtolerance hatched withdashes processpath pencilled \ -sortedintersectiontimes intersectionpath firstintersectionpath secondintersectionpath intersectionsfound \ -cutbeforefirst cutafterfirst cutbeforelast cutafterlast +eofillup nodraw dodraw enfill 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 setglobalmacro setglobaldimen setglobalcount \ +setglobaltoks positionpath positioncurve positionxy positionparagraph \ +positioncolumn positionwhd positionpage positionregion positionbox \ +positionx positiony positionanchor positioninregion positionatanchor \ +positioncolumnbox overlaycolumnbox positioncolumnatx getposboxes getmultipars \ +getpospage getposparagraph getposcolumn getposregion getposx \ +getposy getposwidth getposheight getposdepth getposleftskip \ +getposrightskip getposhsize getposparindent getposhangindent getposhangafter \ +getposxy getposupperleft getposlowerleft getposupperright getposlowerright \ +getposllx getposlly getposurx getposury wdpart \ +htpart dppart texvar texstr inpath \ +pointof leftof rightof utfnum utflen \ +utfsub newhash disposehash inhash tohash \ +fromhash isarray prefix isobject comment \ +report lua lualist mp MP \ +luacall mirrored mirroredabout xslanted yslanted \ +scriptindex newscriptindex newcolor newrgbcolor newcmykcolor \ +newnumeric newboolean newtransform newpath newpicture \ +newstring newpair mpvard mpvarn mpvars \ +mpvar withtolerance hatched withdashes processpath \ +pencilled sortedintersectiontimes intersectionpath firstintersectionpath secondintersectionpath \ +intersectionsfound cutbeforefirst cutafterfirst cutbeforelast cutafterlast \ +xnormalized ynormalized xynormalized phantom scrutinized keywordclass.metafun.internals=\ nocolormodel greycolormodel graycolormodel rgbcolormodel \ diff --git a/context/data/scite/context/scite-context-data-metapost.properties b/context/data/scite/context/scite-context-data-metapost.properties index 9ebe0fd28..0dff1ccd5 100644 --- a/context/data/scite/context/scite-context-data-metapost.properties +++ b/context/data/scite/context/scite-context-data-metapost.properties @@ -7,31 +7,32 @@ extra_endfig down evenly fullcircle halfcircle \ identity in left pensquare penrazor \ penspec origin quartercircle right unitsquare \ up withdots abs bbox ceiling \ -center cutafter cutbefore dir directionpoint \ -div dotprod intersectionpoint inverse mod \ -round unitvector whatever cutdraw draw \ -drawarrow drawdblarrow fill filldraw drawdot \ -loggingall interact tracingall tracingnone pickup \ -undraw unfill unfilldraw buildcycle dashpattern \ -decr dotlabel dotlabels drawoptions incr \ -label labels max min thelabel \ -z beginchar blacker capsule_end change_width \ -define_blacker_pixels define_corrected_pixels define_good_x_pixels define_good_y_pixels define_horizontal_corrected_pixels \ -define_pixels define_whole_blacker_pixels define_whole_pixels define_whole_vertical_blacker_pixels define_whole_vertical_pixels \ -endchar extra_beginchar extra_endchar extra_setup font_coding_scheme \ -clearxy clearit clearpen shipit font_extra_space \ -exitunless relax hide gobble gobbled \ -stop blankpicture counterclockwise tensepath takepower \ -direction softjoin makelabel rotatedabout flex \ -superellipse image nullpen savepen clearpen \ -penpos penlabels range thru z \ -laboff bye red green blue \ -cyan magenta yellow black white \ -background mm pt dd bp \ -cm pc cc in dk \ -triplet quadruplet totransform bymatrix closedcurve \ -closedlines primitive permanent immutable mutable \ -frozen showproperty showhashentry +cutafter cutbefore dir directionpoint div \ +dotprod intersectionpoint inverse mod round \ +unitvector whatever cutdraw draw drawarrow \ +drawdblarrow fill filldraw drawdot loggingall \ +interact tracingall tracingnone pickup undraw \ +unfill unfilldraw buildcycle dashpattern decr \ +dotlabel dotlabels drawoptions incr label \ +labels max min thelabel z \ +beginchar blacker capsule_end change_width define_blacker_pixels \ +define_corrected_pixels define_good_x_pixels define_good_y_pixels define_horizontal_corrected_pixels define_pixels \ +define_whole_blacker_pixels define_whole_pixels define_whole_vertical_blacker_pixels define_whole_vertical_pixels endchar \ +extra_beginchar extra_endchar extra_setup font_coding_scheme clearxy \ +clearit clearpen shipit font_extra_space exitunless \ +relax hide gobble gobbled stop \ +blankpicture counterclockwise tensepath takepower direction \ +softjoin makelabel rotatedabout flex superellipse \ +image nullpen savepen clearpen penpos \ +penlabels range thru z laboff \ +bye red green blue cyan \ +magenta yellow black white background \ +mm pt dd bp cm \ +pc cc in dk triplet \ +quadruplet totransform bymatrix closedcurve closedlines \ +primitive permanent immutable mutable frozen \ +showproperty showhashentry top bot lft \ +rt ulft urt llft lrt keywordclass.metapost.disabled=\ verbatimtex troffmode @@ -112,22 +113,25 @@ yoffset chardy hppp tracingedges vppp \ extra_beginfig extra_endfig mpxbreak endinput message \ delimiters turningnumber errmessage scantokens end \ outer inner write to readfrom \ -closefrom withprescript withpostscript top bot \ -lft rt ulft urt llft \ -lrt redpart greenpart bluepart cyanpart \ -magentapart yellowpart blackpart prescriptpart postscriptpart \ -rgbcolor cmykcolor colormodel graypart greypart \ -greycolor graycolor dashpart penpart stackingpart \ -stroked filled textual clipped bounded \ -pathpart expandafter minute hour outputformat \ -outputtemplate filenametemplate fontmapfile fontmapline fontpart \ -fontsize glyph restoreclipcolor troffmode runscript \ -maketext numbersystem overloadmode setproperty intersectiontimeslist \ -arcpoint arcpointlist subarclength maxknotpool nocycle +closefrom withprescript withpostscript redpart greenpart \ +bluepart cyanpart magentapart yellowpart blackpart \ +prescriptpart postscriptpart rgbcolor cmykcolor colormodel \ +graypart greypart greycolor graycolor dashpart \ +penpart stackingpart stroked filled textual \ +clipped bounded pathpart expandafter minute \ +hour outputformat outputtemplate filenametemplate fontmapfile \ +fontmapline fontpart fontsize glyph restoreclipcolor \ +troffmode runscript maketext numbersystem overloadmode \ +setproperty intersectiontimeslist arcpoint arcpointlist subarclength \ +maxknotpool nocycle pathpoint pathprecontrol pathpostcontrol \ +pathdirection deltapoint deltaprecontrol deltapostcontrol deltadirection \ +corner xrange yrange convexed uncontrolled \ +nep makenep withmiterlimit withlinejoin withlinecap \ +centerof centerofmass keywordclass.metapost.shortcuts=\ .. ... -- --- \ -& \ +& && \ keywordclass.metapost.tex=\ btex etex verbatimtex diff --git a/context/data/scite/context/scite-context-data-tex.properties b/context/data/scite/context/scite-context-data-tex.properties index 256227972..4f38df4a8 100644 --- a/context/data/scite/context/scite-context-data-tex.properties +++ b/context/data/scite/context/scite-context-data-tex.properties @@ -18,112 +18,116 @@ unexpanded unless widowpenalties keywordclass.tex.luatex=\ Uabove Uabovewithdelims Uatop Uatopwithdelims \ Uchar Udelcode Udelcodenum Udelimiter Udelimiterover \ -Udelimiterunder Uhextensible Uleft Umathaccent Umathaccentbasedepth \ -Umathaccentbaseheight Umathaccentbottomshiftdown Umathaccenttopshiftup Umathaccentvariant Umathadapttoleft \ -Umathadapttoright Umathaxis Umathbotaccentvariant Umathchar Umathcharclass \ -Umathchardef Umathcharfam Umathcharnum Umathcharnumdef Umathcharslot \ -Umathclass Umathcode Umathcodenum Umathconnectoroverlapmin Umathdegreevariant \ -Umathdelimiterovervariant Umathdelimiterundervariant Umathdenominatorvariant Umathextrasubpreshift Umathextrasubprespace \ -Umathextrasubshift Umathextrasubspace Umathextrasuppreshift Umathextrasupprespace Umathextrasupshift \ -Umathextrasupspace Umathflattenedaccentbasedepth Umathflattenedaccentbaseheight Umathflattenedaccentbottomshiftdown Umathflattenedaccenttopshiftup \ -Umathfractiondelsize Umathfractiondenomdown Umathfractiondenomvgap Umathfractionnumup Umathfractionnumvgap \ -Umathfractionrule Umathfractionvariant Umathhextensiblevariant Umathlimitabovebgap Umathlimitabovekern \ -Umathlimitabovevgap Umathlimitbelowbgap Umathlimitbelowkern Umathlimitbelowvgap Umathlimits \ -Umathnoaxis Umathnolimits Umathnolimitsubfactor Umathnolimitsupfactor Umathnumeratorvariant \ -Umathopenupdepth Umathopenupheight Umathoperatorsize Umathoverbarkern Umathoverbarrule \ -Umathoverbarvgap Umathoverdelimiterbgap Umathoverdelimitervariant Umathoverdelimitervgap Umathoverlayaccentvariant \ -Umathoverlinevariant Umathphantom Umathpresubshiftdistance Umathpresupshiftdistance Umathprimeraise \ -Umathprimeshiftdrop Umathprimeshiftup Umathprimespaceafter Umathprimevariant Umathprimewidth \ -Umathquad Umathradicaldegreeafter Umathradicaldegreebefore Umathradicaldegreeraise Umathradicalkern \ -Umathradicalrule Umathradicalvariant Umathradicalvgap Umathruledepth Umathruleheight \ -Umathskeweddelimitertolerance Umathskewedfractionhgap Umathskewedfractionvgap Umathsource Umathspaceafterscript \ -Umathspacebeforescript Umathstackdenomdown Umathstacknumup Umathstackvariant Umathstackvgap \ -Umathsubscriptvariant Umathsubshiftdistance Umathsubshiftdown Umathsubshiftdrop Umathsubsupshiftdown \ -Umathsubsupvgap Umathsubtopmax Umathsupbottommin Umathsuperscriptvariant Umathsupshiftdistance \ -Umathsupshiftdrop Umathsupshiftup Umathsupsubbottommax Umathtopaccentvariant Umathunderbarkern \ -Umathunderbarrule Umathunderbarvgap Umathunderdelimiterbgap Umathunderdelimitervariant Umathunderdelimitervgap \ -Umathunderlinevariant Umathuseaxis Umathvextensiblevariant Umathvoid Umathxscale \ -Umathyscale Umiddle Unosubprescript Unosubscript Unosuperprescript \ -Unosuperscript Uoperator Uover Uoverdelimiter Uoverwithdelims \ -Uprimescript Uradical Uright Uroot Ushiftedsubprescript \ -Ushiftedsubscript Ushiftedsuperprescript Ushiftedsuperscript Uskewed Uskewedwithdelims \ -Ustack Ustartdisplaymath Ustartmath Ustopdisplaymath Ustopmath \ -Ustyle Usubprescript Usubscript Usuperprescript Usuperscript \ -Uunderdelimiter Uvextensible adjustspacing adjustspacingshrink adjustspacingstep \ -adjustspacingstretch afterassigned aftergrouped aliased alignmark \ -alignmentcellsource alignmentwrapsource aligntab allcrampedstyles alldisplaystyles \ -allmathstyles allscriptscriptstyles allscriptstyles allsplitstyles alltextstyles \ -alluncrampedstyles atendofgroup atendofgrouped attribute attributedef \ -automaticdiscretionary automatichyphenpenalty automigrationmode autoparagraphmode begincsname \ -beginlocalcontrol beginmathgroup beginsimplegroup boundary boxanchor \ -boxanchors boxattribute boxdirection boxgeometry boxorientation \ -boxshift boxsource boxtarget boxtotal boxxmove \ -boxxoffset boxymove boxyoffset catcodetable clearmarks \ -copymathatomrule copymathparent copymathspacing crampeddisplaystyle crampedscriptscriptstyle \ -crampedscriptstyle crampedtextstyle csstring currentloopiterator currentloopnesting \ -currentmarks defcsname dimensiondef dimexpression directlua \ -edefcsname efcode endlocalcontrol endmathgroup endsimplegroup \ -enforced etoks etoksapp etokspre everybeforepar \ -everytab exceptionpenalty expand expandafterpars expandafterspaces \ -expandcstoken expanded expandedafter expandedloop expandtoken \ -explicitdiscretionary explicithyphenpenalty firstvalidlanguage flushmarks fontid \ +Udelimiterunder Uhextensible Uleft UmathDelimiterPercent UmathDelimiterShortfall \ +Umathaccent Umathaccentbasedepth Umathaccentbaseheight Umathaccentbottomoverschoot Umathaccentbottomshiftdown \ +Umathaccentsuperscriptdrop Umathaccentsuperscriptpercent Umathaccenttopovershoot Umathaccenttopshiftup Umathaccentvariant \ +Umathadapttoleft Umathadapttoright Umathaxis Umathbotaccentvariant Umathchar \ +Umathcharclass Umathchardef Umathcharfam Umathcharnum Umathcharnumdef \ +Umathcharslot Umathclass Umathcode Umathcodenum Umathconnectoroverlapmin \ +Umathdegreevariant Umathdelimiterovervariant Umathdelimiterundervariant Umathdenominatorvariant Umathextrasubpreshift \ +Umathextrasubprespace Umathextrasubshift Umathextrasubspace Umathextrasuppreshift Umathextrasupprespace \ +Umathextrasupshift Umathextrasupspace Umathflattenedaccentbasedepth Umathflattenedaccentbaseheight Umathflattenedaccentbottomshiftdown \ +Umathflattenedaccenttopshiftup Umathfractiondelsize Umathfractiondenomdown Umathfractiondenomvgap Umathfractionnumup \ +Umathfractionnumvgap Umathfractionrule Umathfractionvariant Umathhextensiblevariant Umathlimitabovebgap \ +Umathlimitabovekern Umathlimitabovevgap Umathlimitbelowbgap Umathlimitbelowkern Umathlimitbelowvgap \ +Umathlimits Umathnoaxis Umathnolimits Umathnolimitsubfactor Umathnolimitsupfactor \ +Umathnumeratorvariant Umathopenupdepth Umathopenupheight Umathoperatorsize Umathoverbarkern \ +Umathoverbarrule Umathoverbarvgap Umathoverdelimiterbgap Umathoverdelimitervariant Umathoverdelimitervgap \ +Umathoverlayaccentvariant Umathoverlinevariant Umathphantom Umathpresubshiftdistance Umathpresupshiftdistance \ +Umathprimeraise Umathprimeshiftdrop Umathprimeshiftup Umathprimespaceafter Umathprimevariant \ +Umathprimewidth Umathquad Umathradicaldegreeafter Umathradicaldegreebefore Umathradicaldegreeraise \ +Umathradicalkern Umathradicalrule Umathradicalvariant Umathradicalvgap Umathruledepth \ +Umathruleheight Umathskeweddelimitertolerance Umathskewedfractionhgap Umathskewedfractionvgap Umathsource \ +Umathspaceafterscript Umathspacebeforescript Umathstackdenomdown Umathstacknumup Umathstackvariant \ +Umathstackvgap Umathsubscriptvariant Umathsubshiftdistance Umathsubshiftdown Umathsubshiftdrop \ +Umathsubsupshiftdown Umathsubsupvgap Umathsubtopmax Umathsupbottommin Umathsuperscriptvariant \ +Umathsupshiftdistance Umathsupshiftdrop Umathsupshiftup Umathsupsubbottommax Umathtopaccentvariant \ +Umathunderbarkern Umathunderbarrule Umathunderbarvgap Umathunderdelimiterbgap Umathunderdelimitervariant \ +Umathunderdelimitervgap Umathunderlinevariant Umathuseaxis Umathvextensiblevariant Umathvoid \ +Umathxscale Umathyscale Umiddle Unosubprescript Unosubscript \ +Unosuperprescript Unosuperscript Uoperator Uover Uoverdelimiter \ +Uoverwithdelims Uprimescript Uradical Uright Uroot \ +Ushiftedsubprescript Ushiftedsubscript Ushiftedsuperprescript Ushiftedsuperscript Uskewed \ +Uskewedwithdelims Ustack Ustartdisplaymath Ustartmath Ustopdisplaymath \ +Ustopmath Ustyle Usubprescript Usubscript Usuperprescript \ +Usuperscript Uunderdelimiter Uvextensible adjustspacing adjustspacingshrink \ +adjustspacingstep adjustspacingstretch afterassigned aftergrouped aliased \ +alignmark alignmentcellsource alignmentwrapsource aligntab allcrampedstyles \ +alldisplaystyles allmathstyles allscriptscriptstyles allscriptstyles allsplitstyles \ +alltextstyles alluncrampedstyles atendofgroup atendofgrouped attribute \ +attributedef automaticdiscretionary automatichyphenpenalty automigrationmode autoparagraphmode \ +begincsname beginlocalcontrol beginmathgroup beginsimplegroup boundary \ +boxadapt boxanchor boxanchors boxattribute boxdirection \ +boxfreeze boxgeometry boxorientation boxshift boxsource \ +boxtarget boxtotal boxxmove boxxoffset boxymove \ +boxyoffset catcodetable clearmarks copymathatomrule copymathparent \ +copymathspacing crampeddisplaystyle crampedscriptscriptstyle crampedscriptstyle crampedtextstyle \ +csstring currentloopiterator currentloopnesting currentmarks defcsname \ +dimensiondef dimexpression directlua edefcsname efcode \ +endlocalcontrol endmathgroup endsimplegroup enforced etoks \ +etoksapp etokspre everybeforepar everymathatom everytab \ +exceptionpenalty expand expandafterpars expandafterspaces expandcstoken \ +expanded expandedafter expandedloop expandtoken explicitdiscretionary \ +explicithyphenpenalty firstvalidlanguage flushmarks fontcharta fontid \ fontmathcontrol fontspecdef fontspecid fontspecifiedsize fontspecscale \ fontspecxscale fontspecyscale fonttextcontrol formatname frozen \ futurecsname futuredef futureexpand futureexpandis futureexpandisap \ gdefcsname gleaders glet gletcsname glettonothing \ gluespecdef glyphdatafield glyphoptions glyphscale glyphscriptfield \ glyphscriptscale glyphscriptscriptscale glyphstatefield glyphtextscale glyphxoffset \ -glyphxscale glyphyoffset glyphyscale gtoksapp gtokspre \ -hccode hjcode hpack hyphenationmin hyphenationmode \ -ifabsdim ifabsnum ifarguments ifboolean ifchkdim \ -ifchknum ifcmpdim ifcmpnum ifcondition ifcstok \ -ifdimexpression ifdimval ifempty ifflags ifhaschar \ -ifhastok ifhastoks ifhasxtoks ifincsname ifinsert \ -ifmathparameter ifmathstyle ifnumexpression ifnumval ifparameter \ -ifparameters ifrelax iftok ignorearguments ignorepars \ -immediate immutable inherited initcatcodetable insertbox \ -insertcopy insertdepth insertdistance insertheight insertheights \ -insertlimit insertmaxdepth insertmode insertmultiplier insertpenalty \ -insertprogress insertstorage insertstoring insertunbox insertuncopy \ -insertwidth instance integerdef lastarguments lastboundary \ -lastchkdim lastchknum lastleftclass lastloopiterator lastnamedcs \ -lastnodesubtype lastpageextra lastparcontext lastrightclass leftmarginkern \ -letcharcode letcsname letfrozen letmathatomrule letmathparent \ -letmathspacing letprotected lettonothing linedirection localbrokenpenalty \ -localcontrol localcontrolled localcontrolledloop localinterlinepenalty localleftbox \ -localleftboxbox localmiddlebox localmiddleboxbox localrightbox localrightboxbox \ -lpcode luabytecode luabytecodecall luacopyinputnodes luadef \ -luaescapestring luafunction luafunctioncall luatexbanner luatexrevision \ -luatexversion mathaccent mathatom mathatomglue mathatomskip \ -mathbackwardpenalties mathbeginclass mathdelimitersmode mathdirection mathdisplayskipmode \ +glyphxscale glyphxscaled glyphyoffset glyphyscale glyphyscaled \ +gtoksapp gtokspre hccode hjcode hpack \ +hyphenationmin hyphenationmode ifabsdim ifabsnum ifarguments \ +ifboolean ifchkdim ifchknum ifcmpdim ifcmpnum \ +ifcondition ifcstok ifdimexpression ifdimval ifempty \ +ifflags ifhaschar ifhastok ifhastoks ifhasxtoks \ +ifincsname ifinsert ifmathparameter ifmathstyle ifnumexpression \ +ifnumval ifparameter ifparameters ifrelax iftok \ +ignorearguments ignorepars immediate immutable inherited \ +initcatcodetable insertbox insertcopy insertdepth insertdistance \ +insertheight insertheights insertlimit insertmaxdepth insertmode \ +insertmultiplier insertpenalty insertprogress insertstorage insertstoring \ +insertunbox insertuncopy insertwidth instance integerdef \ +lastarguments lastboundary lastchkdim lastchknum lastleftclass \ +lastloopiterator lastnamedcs lastnodesubtype lastpageextra lastparcontext \ +lastrightclass leftmarginkern letcharcode letcsname letfrozen \ +letmathatomrule letmathparent letmathspacing letprotected lettonothing \ +linebreakcriterium linedirection localbrokenpenalty localcontrol localcontrolled \ +localcontrolledloop localinterlinepenalty localleftbox localleftboxbox localmiddlebox \ +localmiddleboxbox localrightbox localrightboxbox lpcode luabytecode \ +luabytecodecall luacopyinputnodes luadef luaescapestring luafunction \ +luafunctioncall luatexbanner luatexrevision luatexversion mathaccent \ +mathatom mathatomglue mathatomskip mathbackwardpenalties mathbeginclass \ +mathdelimitersmode mathdirection mathdisplaymode mathdisplayskipmode mathdoublescriptmode \ mathendclass matheqnogapstep mathfenced mathfencesmode mathfontcontrol \ -mathforwardpenalties mathfrac mathghost mathleftclass mathlimitsmode \ -mathmiddle mathnolimitsmode mathpenaltiesmode mathrad mathrightclass \ -mathrulesfam mathrulesmode mathscale mathscriptboxmode mathscriptcharmode \ -mathscriptsmode mathslackmode mathspacingmode mathstackstyle mathstyle \ -mathstylefontid mathsurroundmode mathsurroundskip maththreshold mugluespecdef \ -mutable noaligned noatomruling noboundary nohrule \ -norelax normalizelinemode normalizeparmode nospaces novrule \ -numericscale numexpression orelse orphanpenalties orphanpenalty \ -orunless outputbox overloaded overloadmode pageboundary \ -pageboundarypenalty pageextragoal pagevsize parametercount parametermark \ -parattribute pardirection permanent postexhyphenchar posthyphenchar \ -postinlinepenalty prebinoppenalty predisplaygapfactor preexhyphenchar prehyphenchar \ -preinlinepenalty prerelpenalty protrudechars protrusionboundary pxdimen \ -quitloop quitvmode resetmathspacing retokenized rightmarginkern \ -rpcode savecatcodetable scaledemwidth scaledexheight scaledextraspace \ -scaledinterwordshrink scaledinterwordspace scaledinterwordstretch scaledslantperpoint scantextokens \ -semiexpanded semiprotected setdefaultmathcodes setfontid setmathatomrule \ -setmathignore setmathoptions setmathpostpenalty setmathprepenalty setmathspacing \ -shapingpenaltiesmode shapingpenalty skewed skewedwithdelims snapshotpar \ -supmarkmode swapcsvalues tabsize textdirection thewithoutunit \ -todimension tointeger tokenized toksapp tokspre \ -tolerant tomathstyle toscaled tpack tracingadjusts \ -tracingalignments tracingexpressions tracingfonts tracingfullboxes tracinghyphenation \ -tracinginserts tracingmarks tracingmath tracingnodes uleaders \ -undent unexpandedloop unletfrozen unletprotected untraced \ -vpack wordboundary wrapuppar xdefcsname xtoks \ -xtoksapp xtokspre +mathforwardpenalties mathfrac mathghost mathgluemode mathgroupingmode \ +mathleftclass mathlimitsmode mathmiddle mathnolimitsmode mathpenaltiesmode \ +mathrad mathrightclass mathrulesfam mathrulesmode mathscale \ +mathscriptboxmode mathscriptcharmode mathscriptsmode mathslackmode mathspacingmode \ +mathstackstyle mathstyle mathstylefontid mathsurroundmode mathsurroundskip \ +maththreshold mugluespecdef mutable noaligned noatomruling \ +noboundary nohrule norelax normalizelinemode normalizeparmode \ +nospaces novrule numericscale numexpression orelse \ +orphanpenalties orphanpenalty orunless outputbox overloaded \ +overloadmode pageboundary pageboundarypenalty pageextragoal pagevsize \ +parametercount parametermark parattribute pardirection permanent \ +pettymuskip postexhyphenchar posthyphenchar postinlinepenalty prebinoppenalty \ +predisplaygapfactor preexhyphenchar prehyphenchar preinlinepenalty prerelpenalty \ +protrudechars protrusionboundary pxdimen quitloop quitvmode \ +resetmathspacing retokenized rightmarginkern rpcode savecatcodetable \ +scaledemwidth scaledexheight scaledextraspace scaledinterwordshrink scaledinterwordspace \ +scaledinterwordstretch scaledslantperpoint scantextokens semiexpanded semiprotected \ +setdefaultmathcodes setfontid setmathatomrule setmathignore setmathoptions \ +setmathpostpenalty setmathprepenalty setmathspacing shapingpenaltiesmode shapingpenalty \ +skewed skewedwithdelims snapshotpar supmarkmode swapcsvalues \ +tabsize textdirection thewithoutunit tinymuskip todimension \ +tohexadecimal tointeger tokenized toksapp tokspre \ +tolerant tomathstyle toscaled tosparsedimension tosparsescaled \ +tpack tracingadjusts tracingalignments tracingexpressions tracingfonts \ +tracingfullboxes tracinghyphenation tracinginserts tracingmarks tracingmath \ +tracingnodes tracingpenalties uleaders undent unexpandedloop \ +unletfrozen unletprotected untraced vpack wordboundary \ +wrapuppar xdefcsname xtoks xtoksapp xtokspre keywordclass.tex.omega=\ Omegaminorversion Omegarevision Omegaversion @@ -175,42 +179,42 @@ finalhyphendemerits firstmark floatingpenalty font fontdimen \ fontname fontspecifiedname futurelet gdef global \ globaldefs glyph halign hangafter hangindent \ hbadness hbox hfil hfill hfilneg \ -hfuzz holdinginserts hrule hsize hskip \ -hss ht hyphenation hyphenchar hyphenpenalty \ -if ifcase ifcat ifdim iffalse \ -ifhbox ifhmode ifinner ifmmode ifnum \ -ifodd iftrue ifvbox ifvmode ifvoid \ -ifx ignorespaces indent input inputlineno \ -insert insertpenalties interlinepenalty jobname kern \ -language lastbox lastkern lastpenalty lastskip \ -lccode leaders left lefthyphenmin leftskip \ -leqno let limits linepenalty lineskip \ -lineskiplimit long looseness lower lowercase \ -mark mathbin mathchar mathchardef mathchoice \ -mathclose mathcode mathinner mathop mathopen \ -mathord mathpunct mathrel mathsurround maxdeadcycles \ -maxdepth meaning meaningasis meaningfull meaningless \ -medmuskip message middle mkern month \ -moveleft moveright mskip multiply muskip \ -muskipdef newlinechar noalign noexpand noindent \ -nolimits nonscript nonstopmode nulldelimiterspace nullfont \ -number omit or outer output \ -outputpenalty over overfullrule overline overshoot \ -overwithdelims pagedepth pagefilllstretch pagefillstretch pagefilstretch \ -pagegoal pageshrink pagestretch pagetotal par \ -parfillleftskip parfillskip parindent parinitleftskip parinitrightskip \ -parshape parskip patterns pausing penalty \ -postdisplaypenalty predisplaypenalty predisplaysize pretolerance prevdepth \ -prevgraf radical raise relax relpenalty \ -right righthyphenmin rightskip romannumeral scaledfontdimen \ -scriptfont scriptscriptfont scriptscriptstyle scriptspace scriptstyle \ -scrollmode setbox setlanguage sfcode shipout \ -show showbox showboxbreadth showboxdepth showlists \ -shownodedetails showthe skewchar skip skipdef \ -spacefactor spaceskip span splitbotmark splitfirstmark \ -splitmaxdepth splittopskip srule string tabskip \ -textfont textstyle the thickmuskip thinmuskip \ -time tinymuskip toks toksdef tolerance \ +hfuzz holdinginserts holdingmigrations hrule hsize \ +hskip hss ht hyphenation hyphenchar \ +hyphenpenalty if ifcase ifcat ifdim \ +iffalse ifhbox ifhmode ifinner ifmmode \ +ifnum ifodd iftrue ifvbox ifvmode \ +ifvoid ifx ignorespaces indent input \ +inputlineno insert insertpenalties interlinepenalty jobname \ +kern language lastbox lastkern lastpenalty \ +lastskip lccode leaders left lefthyphenmin \ +leftskip leqno let limits linepenalty \ +lineskip lineskiplimit long looseness lower \ +lowercase mark mathbin mathchar mathchardef \ +mathchoice mathclose mathcode mathinner mathop \ +mathopen mathord mathpunct mathrel mathsurround \ +maxdeadcycles maxdepth meaning meaningasis meaningfull \ +meaningless medmuskip message middle mkern \ +month moveleft moveright mskip multiply \ +muskip muskipdef newlinechar noalign noexpand \ +noindent nolimits nonscript nonstopmode nulldelimiterspace \ +nullfont number omit or outer \ +output outputpenalty over overfullrule overline \ +overshoot overwithdelims pagedepth pagefilllstretch pagefillstretch \ +pagefilstretch pagegoal pageshrink pagestretch pagetotal \ +par parfillleftskip parfillskip parindent parinitleftskip \ +parinitrightskip parshape parskip patterns pausing \ +penalty postdisplaypenalty predisplaypenalty predisplaysize pretolerance \ +prevdepth prevgraf radical raise relax \ +relpenalty right righthyphenmin rightskip romannumeral \ +scaledfontdimen scriptfont scriptscriptfont scriptscriptstyle scriptspace \ +scriptstyle scrollmode setbox setlanguage sfcode \ +shipout show showbox showboxbreadth showboxdepth \ +showlists shownodedetails showthe skewchar skip \ +skipdef spacefactor spaceskip span splitbotmark \ +splitfirstmark splitmaxdepth splittopskip srule string \ +tabskip textfont textstyle the thickmuskip \ +thinmuskip time toks toksdef tolerance \ topmark topskip tracingcommands tracinglostchars tracingmacros \ tracingonline tracingoutput tracingpages tracingparagraphs tracingrestores \ tracingstats uccode uchyph unboundary underline \ diff --git a/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json b/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json index dd6c8f914..3f9083e06 100644 --- a/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json +++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-mps.json @@ -60,7 +60,7 @@ "name" : "context.extra" }, "helper" : { - "match" : "(zmod|ystretched|yslanted|ysized|xysized|xyscaled|xstretched|xslanted|xsized|withtransparency|withtolerance|withshadevector|withshadetransform|withshadestep|withshaderadius|withshadeorigin|withshademethod|withshadefraction|withshadefactor|withshadedomain|withshadedirection|withshadecolors|withshadecentertwo|withshadecenterone|withshadecenter|withshade|withproperties|withpatternscale|withpatternfloat|withpattern|withopacity|withmask|withlinearshade|withgrey|withgray|withdashes|withcircularshade|whitecolor|wdpart|visualizepaths|visualizedfill|visualizeddraw|verbatim|validtexbox|utfsub|utfnum|utflen|urtriangle|urmoved|urenlarged|urcircle|uptriangle|unspiked|unitvector|unittriangle|unitdiamond|unitcircle|uniquelist|undrawfill|undecorated|undashed|uncolored|ultriangle|ulmoved|ulenlarged|ulcircle|tripled|triangle|transparent|transparency|tostring|topenlarged|topboundary|topath|topair|tolist|tohash|tocycle|thetextext|thetexbox|theoffset|thelabel|thefmttext|texvar|texvar|textextoffset|textext|texstr|texstr|texmode|texbox|tensecircle|tcircle|tanh|tand|tan|systemmode|superellipsed|strut|stretched|straightpath|straightpairs|straightfunction|stoppassingvariable|startpassingvariable|squeezed|squarepath|sqr|spotcolor|space|sortlist|sortedintersectiontimes|softened|snapped|smoothed|sized|sinh|sin|simplified|shownshadevector|shownshadeorigin|shownshadedirection|shownshadecenter|shortened|shapedlist|shadedup|shadedright|shadedleft|shadedinto|shadeddown|shaded|settoks|setmacro|setglobaltoks|setglobalmacro|setglobaldimen|setglobalcount|setdimen|setcount|secondintersectionpath|scriptindex|rule|roundedsquare|righttriangle|rightof|rightenlarged|rightboundary|rightarrow|resolvedcolor|resetdrawoptions|resetarrows|report|register|redecorated|readfile|rcircle|rawtextext|rawtexbox|rawmadetext|rawfmttext|randomshifted|randomizedcontrols|randomized|radian|quote|quotation|pushcurrentpicture|pushboundingbox|punked|property|properties|processpath|prefix|prefix|pow|positiony|positionxy|positionx|positionwhd|positionregion|positionpath|positionparagraph|positionpage|positioninregion|positioncurve|positioncolumnbox|positioncolumnatx|positioncolumn|positionbox|positionatanchor|positionanchor|popcurrentpicture|popboundingbox|pointof|pi|perpendicular|percent|penpoint|pencilled|pencilled|peepholed|pathconnectors|passvariable|passarrayvariable|paralleled|paired|overlaycolumnbox|outsideof|outlinetexttopath|outlinetext|outerboundingbox|originpath|onlayer|onetimetextext|onetimefmttext|oddly|nothing|notcached|normalfill|normaldraw|nofill|nodraw|newtransform|newstring|newscriptindex|newrgbcolor|newpicture|newpath|newpair|newnumeric|newhash|newcolor|newcmykcolor|newboolean|naturalizepaths|namedcolor|multitonecolor|mpvars|mpvarn|mpvard|mpvar|mp|mirroredabout|mirrored|lualist|luacall|lua|lrtriangle|lrmoved|lrenlarged|lrcircle|log|loadmodule|loadimage|loadfile|loadfigure|ln|lltriangle|llmoved|llenlarged|llcircle|listtolines|listtocurves|listsize|listlast|linearpath|lefttriangle|leftof|leftenlarged|leftboundary|leftarrow|lcircle|laddered|label|keepcached|istextext|isobject|isarray|isarray|invtan|invsin|inverted|invcos|inv|intersectionsfound|intersectionpath|intersection_point|intersection_found|interpolated|insideof|inpath|innerboundingbox|inhash|infotext|infont|infinite|htpart|hatched|greyscale|greyed|grayscale|grayed|graphictext|gettoks|getposy|getposxy|getposx|getposwidth|getposury|getposurx|getposupperright|getposupperleft|getposrightskip|getposregion|getposparindent|getposparagraph|getpospage|getposlowerright|getposlowerleft|getposlly|getposllx|getposleftskip|getposhsize|getposheight|getposhangindent|getposhangafter|getposdepth|getposcolumn|getposboxes|getmultipars|getmacro|getdimen|getcount|function|fulltriangle|fullsquare|fulldiamond|fromhash|formatted|format|fmttext|firstintersectionpath|fillup|filloutlinetext|figure|externalfigure|exp|evenly|epsed|eofillup|eofill|eoclip|enlonged|enlarged|drawwholepath|drawpoints|drawpointoptions|drawpointlabels|drawpoint|drawpathoptions|drawpathonly|drawpath|drawoutlinetext|draworiginoptions|draworigin|drawlineoptions|drawlabeloptions|drawfill|drawdoublearrows|drawcontrolpoints|drawcontroloptions|drawcontrollines|drawboundoptions|drawboundingbox|drawboundary|dquote|dppart|downtriangle|dofill|dodraw|disposehash|dispose|dimension|detailpaths|detaileddraw|defineshade|decorated|ddecimal|dddecimal|ddddecimal|cutends|cutbeforelast|cutbeforefirst|cutafterlast|cutafterfirst|curvedpath|curvedpairs|curvedfunction|curved|crossingunder|crossed|crlf|cotd|cot|cosh|cos|cornered|copylist|constructedpath|constructedpairs|constructedfunction|condition|complemented|complementary|comment|colortype|colorpart|colorlike|colordecimalslist|colordecimals|cmyk|clearxy|circularpath|checkedbounds|checkbounds|centerarrow|center|break|boundingradius|boundingpoint|boundingcircle|boundingbox|bottomenlarged|bottomboundary|blownup|blackcolor|bitmapimage|bcircle|bbwidth|bbheight|basiccolors|autoalign|atan|asinh|asin|asgroup|arrowpath|area|anchored|along|addbackground|acosh|acos|SPACE|PERCENT|MP|DQUOTE|CRLF)(?=[^a-zA-Z\u005C_@!?-])", + "match" : "(zmod|ystretched|yslanted|ysized|ynormalized|xysized|xyscaled|xynormalized|xstretched|xslanted|xsized|xnormalized|withtransparency|withtolerance|withshadevector|withshadetransform|withshadestep|withshaderadius|withshadeorigin|withshademethod|withshadefraction|withshadefactor|withshadedomain|withshadedirection|withshadecolors|withshadecentertwo|withshadecenterone|withshadecenter|withshade|withproperties|withpatternscale|withpatternfloat|withpattern|withopacity|withmask|withlinearshade|withgrey|withgray|withdashes|withcircularshade|whitecolor|wdpart|visualizepaths|visualizedfill|visualizeddraw|verbatim|validtexbox|utfsub|utfnum|utflen|urtriangle|urmoved|urenlarged|urcircle|uptriangle|unspiked|unitvector|unittriangle|unitdiamond|unitcircle|uniquelist|undrawfill|undecorated|undashed|uncolored|ultriangle|ulmoved|ulenlarged|ulcircle|tripled|triangle|transparent|transparency|tostring|topenlarged|topboundary|topath|topair|tolist|tohash|tocycle|thetextext|thetexbox|theoffset|thelabel|thefmttext|texvar|texvar|textextoffset|textext|texstr|texstr|texmode|texbox|tensecircle|tcircle|tanh|tand|tan|systemmode|superellipsed|strut|stretched|straightpath|straightpairs|straightfunction|stoppassingvariable|startpassingvariable|squeezed|squarepath|sqr|spotcolor|space|sortlist|sortedintersectiontimes|softened|snapped|smoothed|sized|sinh|sin|simplified|shownshadevector|shownshadeorigin|shownshadedirection|shownshadecenter|shortened|shapedlist|shadedup|shadedright|shadedleft|shadedinto|shadeddown|shaded|settoks|setmacro|setglobaltoks|setglobalmacro|setglobaldimen|setglobalcount|setdimen|setcount|secondintersectionpath|scrutinized|scriptindex|rule|roundedsquare|righttriangle|rightof|rightenlarged|rightboundary|rightarrow|resolvedcolor|resetdrawoptions|resetarrows|report|register|redecorated|readfile|rcircle|rawtextext|rawtexbox|rawmadetext|rawfmttext|randomshifted|randomizedcontrols|randomized|radian|quote|quotation|pushcurrentpicture|pushboundingbox|punked|property|properties|processpath|prefix|prefix|pow|positiony|positionxy|positionx|positionwhd|positionregion|positionpath|positionparagraph|positionpage|positioninregion|positioncurve|positioncolumnbox|positioncolumnatx|positioncolumn|positionbox|positionatanchor|positionanchor|popcurrentpicture|popboundingbox|pointof|pi|phantom|perpendicular|percent|penpoint|pencilled|pencilled|peepholed|pathconnectors|passvariable|passarrayvariable|paralleled|paired|overlaycolumnbox|outsideof|outlinetexttopath|outlinetext|outerboundingbox|originpath|onlayer|onetimetextext|onetimefmttext|oddly|nothing|notcached|normalfill|normaldraw|nofill|nodraw|newtransform|newstring|newscriptindex|newrgbcolor|newpicture|newpath|newpair|newnumeric|newhash|newcolor|newcmykcolor|newboolean|naturalizepaths|namedcolor|multitonecolor|mpvars|mpvarn|mpvard|mpvar|mp|mirroredabout|mirrored|lualist|luacall|lua|lrtriangle|lrmoved|lrenlarged|lrcircle|log|loadmodule|loadimage|loadfile|loadfigure|ln|lltriangle|llmoved|llenlarged|llcircle|listtolines|listtocurves|listsize|listlast|linearpath|lefttriangle|leftof|leftenlarged|leftboundary|leftarrow|lcircle|laddered|label|keepcached|istextext|isobject|isarray|isarray|invtan|invsin|inverted|invcos|inv|intersectionsfound|intersectionpath|intersection_point|intersection_found|interpolated|insideof|inpath|innerboundingbox|inhash|infotext|infont|infinite|htpart|hatched|greyscale|greyed|grayscale|grayed|graphictext|gettoks|getposy|getposxy|getposx|getposwidth|getposury|getposurx|getposupperright|getposupperleft|getposrightskip|getposregion|getposparindent|getposparagraph|getpospage|getposlowerright|getposlowerleft|getposlly|getposllx|getposleftskip|getposhsize|getposheight|getposhangindent|getposhangafter|getposdepth|getposcolumn|getposboxes|getmultipars|getmacro|getdimen|getcount|function|fulltriangle|fullsquare|fulldiamond|fromhash|formatted|format|fmttext|firstintersectionpath|fillup|filloutlinetext|figure|externalfigure|exp|evenly|epsed|eofillup|eofill|eoclip|enlonged|enlarged|enfill|drawwholepath|drawpoints|drawpointoptions|drawpointlabels|drawpoint|drawpathoptions|drawpathonly|drawpath|drawoutlinetext|draworiginoptions|draworigin|drawlineoptions|drawlabeloptions|drawfill|drawdoublearrows|drawcontrolpoints|drawcontroloptions|drawcontrollines|drawboundoptions|drawboundingbox|drawboundary|dquote|dppart|downtriangle|dofill|dodraw|disposehash|dispose|dimension|detailpaths|detaileddraw|defineshade|decorated|ddecimal|dddecimal|ddddecimal|cutends|cutbeforelast|cutbeforefirst|cutafterlast|cutafterfirst|curvedpath|curvedpairs|curvedfunction|curved|crossingunder|crossed|crlf|cotd|cot|cosh|cos|cornered|copylist|constructedpath|constructedpairs|constructedfunction|condition|complemented|complementary|comment|colortype|colorpart|colorlike|colordecimalslist|colordecimals|cmyk|clearxy|circularpath|checkedbounds|checkbounds|centerarrow|center|break|boundingradius|boundingpoint|boundingcircle|boundingbox|bottomenlarged|bottomboundary|blownup|blackcolor|bitmapimage|bcircle|bbwidth|bbheight|basiccolors|autoalign|atan|asinh|asin|asgroup|arrowpath|area|anchored|along|addbackground|acosh|acos|SPACE|PERCENT|MP|DQUOTE|CRLF)(?=[^a-zA-Z\u005C_@!?-])", "name" : "context.command.metafun.helper.mps" }, "identifier" : { @@ -68,7 +68,7 @@ "name" : "context.default.identifier.mps" }, "internal" : { - "match" : "\u005C\u005C|\u005C.\u005C.\u005C.|\u005C.\u005C.|\u005C-\u005C-\u005C-|\u005C-\u005C-|\u005C&", + "match" : "\u005C\u005C|\u005C.\u005C.\u005C.|\u005C.\u005C.|\u005C-\u005C-\u005C-|\u005C-\u005C-|\u005C&\u005C&|\u005C&", "name" : "context.reserved.internal.mps" }, "luacall" : { @@ -115,11 +115,11 @@ "name" : "context.number.number.mps" }, "plain" : { - "match" : "(z|z|yellow|withdots|white|whatever|upto|up|unitvector|unitsquare|unfilldraw|unfill|undraw|triplet|tracingnone|tracingall|totransform|thru|thelabel|tensepath|takepower|superellipse|stop|softjoin|showproperty|showhashentry|shipit|savepen|round|rotatedaround|rotatedabout|right|relax|reflectedabout|red|range|quartercircle|quadruplet|pt|primitive|pickup|permanent|pensquare|penspec|penrazor|penpos|penlabels|pc|origin|on|off|nullpen|mutable|mod|mm|min|max|makelabel|magenta|loggingall|left|laboff|labels|label|inverse|intersectionpoint|interpath|interact|incr|in|in|immutable|image|identity|hide|halfcircle|green|gobbled|gobble|fullcircle|frozen|font_extra_space|font_coding_scheme|flex|filldraw|fill|extra_setup|extra_endfig|extra_endchar|extra_beginfig|extra_beginchar|exitunless|evenly|endglyph|endfont|endfig|endchar|drawoptions|drawdot|drawdblarrow|drawarrow|draw|downto|down|dotprod|dotlabels|dotlabel|dk|div|directionpoint|direction|dir|define_whole_vertical_pixels|define_whole_vertical_blacker_pixels|define_whole_pixels|define_whole_blacker_pixels|define_pixels|define_horizontal_corrected_pixels|define_good_y_pixels|define_good_x_pixels|define_corrected_pixels|define_blacker_pixels|defaultfont|decr|dd|dashpattern|cyan|cuttings|cutdraw|cutbefore|cutafter|currentpicture|currentpen|counterclockwise|cm|closedlines|closedcurve|clearxy|clearpen|clearpen|clearit|change_width|center|ceiling|cc|capsule_end|bymatrix|bye|buildcycle|bp|blue|blankpicture|blacker|black|beginglyph|beginfont|beginfig|beginchar|bbox|background|arrowhead|abs)(?=[^a-zA-Z\u005C_@!?-])", + "match" : "(z|z|yellow|withdots|white|whatever|urt|upto|up|unitvector|unitsquare|unfilldraw|unfill|undraw|ulft|triplet|tracingnone|tracingall|totransform|top|thru|thelabel|tensepath|takepower|superellipse|stop|softjoin|showproperty|showhashentry|shipit|savepen|rt|round|rotatedaround|rotatedabout|right|relax|reflectedabout|red|range|quartercircle|quadruplet|pt|primitive|pickup|permanent|pensquare|penspec|penrazor|penpos|penlabels|pc|origin|on|off|nullpen|mutable|mod|mm|min|max|makelabel|magenta|lrt|loggingall|llft|lft|left|laboff|labels|label|inverse|intersectionpoint|interpath|interact|incr|in|in|immutable|image|identity|hide|halfcircle|green|gobbled|gobble|fullcircle|frozen|font_extra_space|font_coding_scheme|flex|filldraw|fill|extra_setup|extra_endfig|extra_endchar|extra_beginfig|extra_beginchar|exitunless|evenly|endglyph|endfont|endfig|endchar|drawoptions|drawdot|drawdblarrow|drawarrow|draw|downto|down|dotprod|dotlabels|dotlabel|dk|div|directionpoint|direction|dir|define_whole_vertical_pixels|define_whole_vertical_blacker_pixels|define_whole_pixels|define_whole_blacker_pixels|define_pixels|define_horizontal_corrected_pixels|define_good_y_pixels|define_good_x_pixels|define_corrected_pixels|define_blacker_pixels|defaultfont|decr|dd|dashpattern|cyan|cuttings|cutdraw|cutbefore|cutafter|currentpicture|currentpen|counterclockwise|cm|closedlines|closedcurve|clearxy|clearpen|clearpen|clearit|change_width|ceiling|cc|capsule_end|bymatrix|bye|buildcycle|bp|bot|blue|blankpicture|blacker|black|beginglyph|beginfont|beginfig|beginchar|bbox|background|arrowhead|abs)(?=[^a-zA-Z\u005C_@!?-])", "name" : "context.plain.plain.mps" }, "primitive" : { - "match" : "(zscaled|yypart|yxpart|yscaled|ypart|yoffset|yellowpart|year|xypart|xxpart|xscaled|xpart|xoffset|write|withstacking|withprescript|withpostscript|withpen|within|withcolor|withcmykcolor|warningcheck|vppp|void|vardef|urt|urcorner|until|unknown|uniformdeviate|ulft|ulcorner|turningnumber|turningcheck|truecorners|true|troffmode|transformed|transform|tracingtitles|tracingstats|tracingspecs|tracingrestores|tracingpens|tracingoutput|tracingonline|tracingmacros|tracinglostchars|tracingequations|tracingedges|tracingcommands|tracingchoices|tracingcapsules|totalweight|top|to|time|textual|text|tertiarydef|tertiary|tension|suffix|substring|subpath|subarclength|stroked|string|str|step|stackingpart|stacking|sqrt|special|smoothing|slanted|sind|showvariable|showtoken|showstopping|showdependencies|show|shipout|shifted|setproperty|setgroup|setbounds|secondarydef|secondary|screen_rows|screen_cols|scantokens|scaled|save|runscript|rt|rotated|rgbcolor|reverse|restoreclipcolor|redpart|readfrom|randomseed|proofing|prologues|primarydef|primary|prescriptpart|precontrol|postscriptpart|postcontrol|point|pixels_per_inch|picture|penspec|penpart|penoffset|pencircle|pen|pausing|pathpart|path|pair|overloadmode|outputtemplate|outputformat|outer|or|openwindow|openit|of|odd|oct|numspecial|numeric|numbersystem|nullpicture|notransforms|not|normaldeviate|nodisplays|nocycle|newinternal|mpxbreak|mpprocset|month|mlog|miterlimit|minute|mexp|message|maxknotpool|maketext|makepen|makepath|magentapart|lrt|lrcorner|lowres_fix|llft|llcorner|linejoin|linecap|ligtable|lft|let|length|known|kern|intersectiontimeslist|intersectiontimes|interim|input|inner|infont|imagerules|if|hround|hppp|hour|hex|headerbyte|greypart|greycolor|greenpart|graypart|grayfont|graycolor|granularity|glyph|gfcorners|forsuffixes|forever|for|fontsize|fontsize|fontpart|fontmapline|fontmapfile|fontmaking|fontdimen|floor|fillin|filled|filenametemplate|fi|false|extra_endfig|extra_beginfig|extensible|expr|expandafter|exitif|errmessage|envelope|endinput|endgroup|endfor|enddef|end|elseif|else|doublepath|displaying|display|directiontime|designsize|delimiters|def|decimal|day|dashpart|dashed|cycle|cyanpart|currentwindow|currenttransform|curl|cullit|cull|cosd|controls|contour|colormodel|color|cmykcolor|closefrom|clipped|clip|charwd|charlist|charic|charht|charext|charexists|chardy|chardx|chardp|charcode|char|bounded|boundarychar|bot|bot|boolean|bluepart|blackpart|begingroup|autorounding|arctime|arcpointlist|arcpoint|arclength|angle|and|and|also|addto|ASCII)(?=[^a-zA-Z\u005C_@!?-])", + "match" : "(zscaled|yypart|yxpart|yscaled|yrange|ypart|yoffset|yellowpart|year|xypart|xxpart|xscaled|xrange|xpart|xoffset|write|withstacking|withprescript|withpostscript|withpen|withmiterlimit|withlinejoin|withlinecap|within|withcolor|withcmykcolor|warningcheck|vppp|void|vardef|urcorner|until|unknown|uniformdeviate|uncontrolled|ulcorner|turningnumber|turningcheck|truecorners|true|troffmode|transformed|transform|tracingtitles|tracingstats|tracingspecs|tracingrestores|tracingpens|tracingoutput|tracingonline|tracingmacros|tracinglostchars|tracingequations|tracingedges|tracingcommands|tracingchoices|tracingcapsules|totalweight|to|time|textual|text|tertiarydef|tertiary|tension|suffix|substring|subpath|subarclength|stroked|string|str|step|stackingpart|stacking|sqrt|special|smoothing|slanted|sind|showvariable|showtoken|showstopping|showdependencies|show|shipout|shifted|setproperty|setgroup|setbounds|secondarydef|secondary|screen_rows|screen_cols|scantokens|scaled|save|runscript|rotated|rgbcolor|reverse|restoreclipcolor|redpart|readfrom|randomseed|proofing|prologues|primarydef|primary|prescriptpart|precontrol|postscriptpart|postcontrol|point|pixels_per_inch|picture|penspec|penpart|penoffset|pencircle|pen|pausing|pathprecontrol|pathpostcontrol|pathpoint|pathpart|pathdirection|path|pair|overloadmode|outputtemplate|outputformat|outer|or|openwindow|openit|of|odd|oct|numspecial|numeric|numbersystem|nullpicture|notransforms|not|normaldeviate|nodisplays|nocycle|newinternal|nep|mpxbreak|mpprocset|month|mlog|miterlimit|minute|mexp|message|maxknotpool|maketext|makepen|makepath|makenep|magentapart|lrcorner|lowres_fix|llcorner|linejoin|linecap|ligtable|let|length|known|kern|intersectiontimeslist|intersectiontimes|interim|input|inner|infont|imagerules|if|hround|hppp|hour|hex|headerbyte|greypart|greycolor|greenpart|graypart|grayfont|graycolor|granularity|glyph|gfcorners|forsuffixes|forever|for|fontsize|fontsize|fontpart|fontmapline|fontmapfile|fontmaking|fontdimen|floor|fillin|filled|filenametemplate|fi|false|extra_endfig|extra_beginfig|extensible|expr|expandafter|exitif|errmessage|envelope|endinput|endgroup|endfor|enddef|end|elseif|else|doublepath|displaying|display|directiontime|designsize|deltaprecontrol|deltapostcontrol|deltapoint|deltadirection|delimiters|def|decimal|day|dashpart|dashed|cycle|cyanpart|currentwindow|currenttransform|curl|cullit|cull|cosd|corner|convexed|controls|contour|colormodel|color|cmykcolor|closefrom|clipped|clip|charwd|charlist|charic|charht|charext|charexists|chardy|chardx|chardp|charcode|char|centerofmass|centerof|bounded|boundarychar|bot|boolean|bluepart|blackpart|begingroup|autorounding|arctime|arcpointlist|arcpoint|arclength|angle|and|and|also|addto|ASCII)(?=[^a-zA-Z\u005C_@!?-])", "name" : "context.primitive.primitive.mps" }, "quoted" : { diff --git a/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json b/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json index 5ed620e9b..6cc1294d4 100644 --- a/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json +++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json @@ -69,7 +69,7 @@ "name" : "context.comment.comment.tex" }, "constant" : { - "match" : "\u005C\u005C(zwnj|zwj|zerowidthspace|zerowidthnonjoiner|zerowidthnobreakspace|zerowidthjoiner|zeroskip|zeropoint|zeromuskip|zerocount|xmlcatcodes|xifcode|xetexengine|wildcardsymbol|widowpenaltyfrozenparcode|whatsitnodecode|vtopparcontextcode|vtopgroupcode|vrbcatcodes|voidifcode|voidbox|vmodeparcontextcode|vmodeifcode|vlistnodecode|vcenterparcontextcode|vcentergroupcode|vboxparcontextcode|vboxifcode|vboxgroupcode|valueflagcode|vadjustparcontextcode|vadjustgroupcode|usetexmodule|usemodule|useluamodule|uprotationangle|uppercasehyphenationcode|unsetnodecode|unknownengine|unexpandeddocumentvariable|underscoreasciicode|underrulemathcontrolcode|undefined|typescripttwo|typescriptthree|typescriptone|txtcatcodes|twoperemspace|trueifcode|tpbcatcodes|tpacatcodes|tolerantflagcode|tolerancefrozenparcode|tildeasciicode|threeperemspace|thousandpoint|thickermuskip|texengineversion|texenginename|texenginefunctionality|texengine|texcatcodes|tabasciicode|syllablehyphenationcode|swapparsshapenormalizecode|swaphangindentnormalizecode|superscriptcatcode|subscriptcatcode|strictstarthyphenationcode|strictendhyphenationcode|stretchfrozenparcode|stoptext|stopproject|stopproduct|stopnotmode|stopnotext|stopnotallmodes|stopmodule|stopmodeset|stopmodeset|stopmode|stopmkivmode|stoplmtxmode|stopenvironment|stopdocument|stopcomponent|stopallmodes|stopTEXpage|statuswrite|starttext|startproject|startproduct|startnotmode|startnotext|startnotallmodes|startmodule|startmodeset|startmodeset|startmode|startmkivmode|startlmtxmode|startenvironment|startdocument|startcomponent|startallmodes|startTEXpage|staircasekernmathcontrolcode|splitoffgroupcode|splitkeepgroupcode|spanparcontextcode|spacecatcode|spaceasciicode|softhyphen|smallskipamount|slantperpoint|skipfrozenparcode|sixperemspace|singlequoteasciicode|simplegroupcode|shapingpenaltyfrozenparcode|shapefrozenparcode|setupmodule|setupdocument|semisimplegroupcode|scrollmodecode|scaledpoint|rulenodecode|rlncatcodes|rlm|righttopkernclassoptioncode|righttoleftmark|rightrotationangle|rightparentasciicode|rightoriginlistanchorcode|rightheightlistanchorcode|rightdepthlistanchorcode|rightbracketasciicode|rightbraceasciicode|rightbottomkernclassoptioncode|resetparcontextcode|removemarginkernsnormalizecode|relmathflattencode|reboxcharitalickernmathcontrolcode|radicalrulemathcontrolcode|questionmarkasciicode|pushmode|punctuationspace|punctmathflattencode|prtcatcodes|protrudefrozenparcode|protectedflagcode|project|product|primitiveflagcode|primeasciicode|preworddiscoptioncode|preventmode|presetdocument|prerollrun|preautomigrationcode|preamblegroupcode|postworddiscoptioncode|postautomigrationcode|popmode|points|plustwohundred|plustwo|plustwentythousand|plustwelve|plusthree|plusthousand|plustenthousand|plusten|plussixteen|plussix|plusseven|plusonehundred|plusone|plusnine|plushundred|plusfour|plusfivehundred|plusfive|plusfifty|pluseleven|pluseight|pluscxxviii|pluscxxvii|pluscclvi|pluscclv|permitmathreplacehyphenationcode|permitgluehyphenationcode|permitallhyphenationcode|permanentflagcode|periodasciicode|percentasciicode|penaltynodecode|pdftexengine|partialhyphenationcode|parindentskipnormalizecode|parfillrightskip|parfillleftskip|parfillfrozenparcode|parametercatcode|overrulemathcontrolcode|overloadedflagcode|outputparcontextcode|outputnewlinechar|outputgroupcode|othercatcode|orphanpenaltyfrozenparcode|ordmathflattencode|optionalspace|onepoint|onemuskip|onebasepoint|oddifcode|numifcode|notcatcodes|normalworddiscoptioncode|normalparcontextcode|normalpagebox|normalizeparnormalizeparcode|normalizelinenormalizecode|normalhyphenationcode|norightligaturingglyphoptioncode|norightligatureglyphoptioncode|norightkerningglyphoptioncode|norightkernglyphoptioncode|noprotrusionglyphoptioncode|noprotrusionglyphoptioncode|nopreslackclassoptioncode|nopostslackclassoptioncode|nonstopmodecode|nonbreakablespace|noligaturingglyphoptioncode|noligaturingglyphoptioncode|noligaturingcode|noleftligaturingglyphoptioncode|noleftligatureglyphoptioncode|noleftkerningglyphoptioncode|noleftkernglyphoptioncode|nokerningglyphoptioncode|nokerningglyphoptioncode|nokerningcode|noitaliccorrectionglyphoptioncode|noitaliccorrectionglyphoptioncode|noexpansionglyphoptioncode|noexpansionglyphoptioncode|nobreakspace|noalignparcontextcode|noaligngroupcode|noalignedflagcode|nilcatcodes|newlineasciicode|negateylistsigncode|negatexlistsigncode|negatelistsigncode|narrownobreakspace|mutableflagcode|muquad|morethanasciicode|moduleparameter|mmodeifcode|mksuffix|minustwo|minusone|medskipamount|medcard|maxdimen|maxcount|maxcardminusone|maxcard|mathwrappedcode|mathvcentercode|mathvariablecode|mathundercode|mathsnodecode|mathsizesuffix|mathshiftgroupcode|mathshiftcatcode|mathrelcode|mathrelationcode|mathradicalcode|mathpunctuationcode|mathpunctcode|mathpenaltyfrozenparcode|mathovercode|mathordinarycode|mathordcode|mathoperatorcode|mathopencode|mathopcode|mathnothingcode|mathnolopcode|mathnodecode|mathmiddlecode|mathlimopcode|mathleftgroupcode|mathinnercode|mathimaginarycode|mathgroupcode|mathghostcode|mathfunctioncode|mathfractioncode|mathfencedcode|mathfactorialcode|mathexponentialcode|mathexplicitcode|mathexheight|mathendcode|mathemwidth|mathdivisioncode|mathdimensioncode|mathdigitcode|mathdifferentialcode|mathconstructcode|mathclosecode|mathchoicegroupcode|mathchoicecode|mathboxcode|mathbincode|mathbinarycode|mathbegincode|mathaxisheight|mathalphacode|mathactivecode|mathaccentcode|mathabovegroupcode|marknodecode|markautomigrationcode|luatexengine|luastringsep|luacatcodes|lrm|loosenessfrozenparcode|lookaheadforendclassoptioncode|localboxgroupcode|linepenaltyfrozenparcode|linefrozenparcode|ligaturenodecode|lettercatcode|lessthanasciicode|lefttorightmark|lefttopkernclassoptioncode|leftrotationangle|leftparentasciicode|leftoriginlistanchorcode|leftheightlistanchorcode|leftdepthlistanchorcode|leftbracketasciicode|leftbraceasciicode|leftbottomkernclassoptioncode|lazyligatureshyphenationcode|lastlinefrozenparcode|kernnodecode|italicshapekernmathcontrolcode|invalidcatcode|interwordstretch|interwordspace|interwordshrink|instanceflagcode|insertparcontextcode|insertnodecode|insertgroupcode|insertautomigrationcode|innermathflattencode|innerifcode|inicatcodes|indentfrozenparcode|immutableflagcode|immediateflagcode|ignorecatcode|ignoreboundshyphenationcode|ideographicspace|ideographichalffillspace|hyphenationfrozenparcode|hyphenasciicode|hsizefrozenparcode|hmodeifcode|hlistnodecode|hboxifcode|hboxgroupcode|hashasciicode|hangfrozenparcode|halfwaytotallistanchorcode|halfwayrightlistanchorcode|halfwayleftlistanchorcode|halfwayheightlistanchorcode|halfwaydepthlistanchorcode|halfpoint|halfapoint|hairspace|gluenodecode|globalpreventmode|globalflagcode|globalenablemode|globaldisablemode|frozenflagcode|fractionrulemathcontrolcode|fourperemspace|forwardslashasciicode|formfeedasciicode|forcehandlerhyphenationcode|forcecheckhyphenationcode|fontslantperpoint|fontinterwordstretch|fontinterwordspace|fontinterwordshrink|fontextraspace|fontexheight|fontemwidth|fontcharifcode|fmtversion|fmtname|flattenvleadersnormalizeparcode|flattenhleadersnormalizecode|flattendiscretionariesnormalizecode|fiveperemspace|finrowgroupcode|figurespace|feedbackcompoundhyphenationcode|falseifcode|extraspace|explicitpenaltyhyphenationcode|explicithyphenationcode|exheight|exclamationmarkasciicode|everystoptext|everystarttext|escapecatcode|errorstopmodecode|eofifcode|environment|enquad|endoflinetoken|endoflinecatcode|endoflineasciicode|endoffileasciicode|endline|endgroupcatcode|enablemode|emwidth|emquad|emptyvbox|emptytoks|emptyhbox|emptybox|empty|egroup|eUx|downrotationangle|doublequoteasciicode|doublecommentsignal|dollarasciicode|doifnotmode|doifnotdocumentvariable|doifnotallmodes|doifmodeelse|doifmode|doifelsemode|doifelsedocumentvariable|doifelseallmodes|doifdocumentvariableelse|doifdocumentvariable|doifallmodeselse|doifallmodes|documentvariable|displaypenaltyfrozenparcode|discretionarynodecode|discretionarygroupcode|discretionarygroupcode|discardzerotabskipsnormalizecode|disablemode|directionrighttoleft|directionlefttoright|dimifcode|demeritsfrozenparcode|delasciicode|definemode|definedifcode|defaultmathclassoptions|currentmoduleparameter|ctxcatcodes|ctdcatcodes|csnameifcode|continuewhenlmtxmode|continueifinputfile|contextversion|contextmark|contextlmtxmode|contextformat|constantnumberargument|constantnumber|constantemptyargument|constantdimenargument|constantdimen|conditionaltrue|conditionalflagcode|conditionalfalse|compoundhyphenationcode|component|completehyphenationcode|commentcatcode|commentasciicode|commaasciicode|colonasciicode|collapsehyphenationcode|clubpenaltyfrozenparcode|clipwidthnormalizecode|circumflexasciicode|checktextitalickernmathcontrolcode|checkspaceitalickernmathcontrolcode|checkligatureandkernmathcontrolcode|charnodecode|charifcode|centeroriginlistanchorcode|centerheightlistanchorcode|centerdepthlistanchorcode|catifcode|caseifcode|brokenpenaltyfrozenparcode|breakafterdirnormalizecode|breakablethinspace|bottomlevelgroupcode|binmathflattencode|binaryshiftedtwenty|binaryshiftedthirty|binaryshiftedten|bigskipamount|bidirlo|bidirle|bidipop|bidilro|bidilre|bgroup|begingroupcatcode|batchmodecode|barasciicode|backslashasciicode|automaticpenaltyhyphenationcode|automatichyphenationcode|attributeunsetvalue|atsignasciicode|asciispacechar|applyverticalitalickernmathcontrolcode|applytextitalickernmathcontrolcode|applyscriptitalickernmathcontrolcode|applyordinaryitalickernmathcontrolcode|applycharitalickernmathcontrolcode|applyboxeditalickernmathcontrolcode|ampersandasciicode|alsosimplegroupcode|allfrozenparcode|alignsetgroupcode|alignparcontextcode|alignmentcatcode|aligngroupcode|adjustnodecode|adjustfrozenparcode|adjustedhboxgroupcode|adjustautomigrationcode|activetabtoken|activemathcharcode|activeformfeedtoken|activeendoflinetoken|activecatcode|activecatcode|accentskewhalfmathcontrolcode|accentskewapplymathcontrolcode|Ux|Umathaccents|!!es|!!bs)(?=[^a-zA-Z])", + "match" : "\u005C\u005C(zwnj|zwj|zerowidthspace|zerowidthnonjoiner|zerowidthnobreakspace|zerowidthjoiner|zeroskip|zeropoint|zeromuskip|zerocount|xmlcatcodes|xifcode|xetexengine|wildcardsymbol|widowpenaltyfrozenparcode|whatsitnodecode|vtopparcontextcode|vtopgroupcode|vrbcatcodes|voidifcode|voidbox|vmodeparcontextcode|vmodeifcode|vlistnodecode|vcenterparcontextcode|vcentergroupcode|vboxparcontextcode|vboxifcode|vboxgroupcode|valueflagcode|vadjustparcontextcode|vadjustgroupcode|usetexmodule|usemodule|useluamodule|uprotationangle|uppercasehyphenationcode|unsetnodecode|unknownengine|unexpandeddocumentvariable|underscoreasciicode|underrulemathcontrolcode|undefined|typescripttwo|typescriptthree|typescriptone|txtcatcodes|twoperemspace|trueifcode|tpbcatcodes|tpacatcodes|tolerantflagcode|tolerancefrozenparcode|tildeasciicode|threeperemspace|thousandpoint|thickermuskip|texengineversion|texenginename|texenginefunctionality|texengine|texcatcodes|tabasciicode|syllablehyphenationcode|swapparsshapenormalizecode|swaphangindentnormalizecode|superscriptcatcode|subscriptcatcode|strictstarthyphenationcode|strictendhyphenationcode|stretchingskip|stretchingfillskip|stretchfrozenparcode|stoptext|stopproject|stopproduct|stopnotmode|stopnotext|stopnotallmodes|stopmodule|stopmodeset|stopmodeset|stopmode|stopmkivmode|stoplmtxmode|stopenvironment|stopdocument|stopcomponent|stopallmodes|stopTEXpage|statuswrite|starttext|startproject|startproduct|startnotmode|startnotext|startnotallmodes|startmodule|startmodeset|startmodeset|startmode|startmkivmode|startlmtxmode|startenvironment|startdocument|startcomponent|startallmodes|startTEXpage|staircasekernmathcontrolcode|splitoffgroupcode|splitkeepgroupcode|spanparcontextcode|spacecatcode|spaceasciicode|softhyphen|smallskipamount|slantperpoint|skipfrozenparcode|sixperemspace|singlequoteasciicode|simplegroupcode|shrinkingskip|shrinkingfillskip|shapingpenaltyfrozenparcode|shapefrozenparcode|setupmodule|setupdocument|semisimplegroupcode|scrollmodecode|scaledpoint|rulenodecode|rlncatcodes|rlm|righttopkernclassoptioncode|righttoleftmark|rightrotationangle|rightparentasciicode|rightoriginlistanchorcode|rightheightlistanchorcode|rightdepthlistanchorcode|rightbracketasciicode|rightbraceasciicode|rightbottomkernclassoptioncode|resetparcontextcode|removemarginkernsnormalizecode|relmathflattencode|reboxcharitalickernmathcontrolcode|radicalrulemathcontrolcode|questionmarkasciicode|pushmode|punctuationspace|punctmathflattencode|prtcatcodes|protrudefrozenparcode|protectedflagcode|project|product|primitiveflagcode|primeasciicode|preworddiscoptioncode|preventmode|presetdocument|prerollrun|preautomigrationcode|preamblegroupcode|postworddiscoptioncode|postautomigrationcode|popmode|points|plustwohundred|plustwo|plustwentythousand|plustwelve|plusthree|plusthousand|plustenthousand|plusten|plussixteen|plussix|plusseven|plusonehundred|plusone|plusnine|plushundred|plusfour|plusfivehundred|plusfive|plusfifty|pluseleven|pluseight|pluscxxviii|pluscxxvii|pluscclvi|pluscclv|permitmathreplacehyphenationcode|permitgluehyphenationcode|permitallhyphenationcode|permanentflagcode|periodasciicode|percentasciicode|penaltynodecode|pdftexengine|partialhyphenationcode|parindentskipnormalizecode|parfillrightskip|parfillleftskip|parfillfrozenparcode|parametercatcode|overrulemathcontrolcode|overloadedflagcode|outputparcontextcode|outputnewlinechar|outputgroupcode|othercatcode|orphanpenaltyfrozenparcode|ordmathflattencode|optionalspace|onepoint|onemuskip|onebasepoint|oddifcode|numifcode|notcatcodes|normalworddiscoptioncode|normalparcontextcode|normalpagebox|normalizeparnormalizeparcode|normalizelinenormalizecode|normalhyphenationcode|norightligaturingglyphoptioncode|norightligatureglyphoptioncode|norightkerningglyphoptioncode|norightkernglyphoptioncode|noprotrusionglyphoptioncode|noprotrusionglyphoptioncode|nopreslackclassoptioncode|nopostslackclassoptioncode|nonstopmodecode|nonbreakablespace|noligaturingglyphoptioncode|noligaturingglyphoptioncode|noligaturingcode|noleftligaturingglyphoptioncode|noleftligatureglyphoptioncode|noleftkerningglyphoptioncode|noleftkernglyphoptioncode|nokerningglyphoptioncode|nokerningglyphoptioncode|nokerningcode|noitaliccorrectionglyphoptioncode|noitaliccorrectionglyphoptioncode|noexpansionglyphoptioncode|noexpansionglyphoptioncode|nobreakspace|noalignparcontextcode|noaligngroupcode|noalignedflagcode|nilcatcodes|newlineasciicode|negateylistsigncode|negatexlistsigncode|negatelistsigncode|narrownobreakspace|mutableflagcode|muquad|morethanasciicode|moduleparameter|mmodeifcode|mksuffix|minustwo|minusone|medskipamount|medcard|maxdimen|maxcount|maxcardminusone|maxcard|mathwrappedcode|mathvcentercode|mathvariablecode|mathundercode|mathsnodecode|mathsizesuffix|mathshiftgroupcode|mathshiftcatcode|mathrelcode|mathrelationcode|mathradicalcode|mathpunctuationcode|mathpunctcode|mathpenaltyfrozenparcode|mathovercode|mathordinarycode|mathordcode|mathoperatorcode|mathopencode|mathopcode|mathnothingcode|mathnolopcode|mathnodecode|mathmiddlecode|mathlimopcode|mathleftgroupcode|mathinnercode|mathimaginarycode|mathgroupcode|mathghostcode|mathfunctioncode|mathfractioncode|mathfencedcode|mathfactorialcode|mathexponentialcode|mathexplicitcode|mathexheight|mathendcode|mathemwidth|mathdivisioncode|mathdimensioncode|mathdigitcode|mathdifferentialcode|mathconstructcode|mathclosecode|mathchoicegroupcode|mathchoicecode|mathboxcode|mathbincode|mathbinarycode|mathbegincode|mathaxisheight|mathalphacode|mathactivecode|mathaccentcode|mathabovegroupcode|marknodecode|markautomigrationcode|luatexengine|luastringsep|luacatcodes|lrm|loosenessfrozenparcode|lookaheadforendclassoptioncode|localboxgroupcode|linepenaltyfrozenparcode|linefrozenparcode|ligaturenodecode|lettercatcode|lessthanasciicode|lefttorightmark|lefttopkernclassoptioncode|leftrotationangle|leftparentasciicode|leftoriginlistanchorcode|leftheightlistanchorcode|leftdepthlistanchorcode|leftbracketasciicode|leftbraceasciicode|leftbottomkernclassoptioncode|lazyligatureshyphenationcode|lastlinefrozenparcode|kernnodecode|italicshapekernmathcontrolcode|invalidcatcode|interwordstretch|interwordspace|interwordshrink|instanceflagcode|insertparcontextcode|insertnodecode|insertgroupcode|insertautomigrationcode|innermathflattencode|innerifcode|inicatcodes|indentfrozenparcode|immutableflagcode|immediateflagcode|ignorecatcode|ignoreboundshyphenationcode|ideographicspace|ideographichalffillspace|hyphenationfrozenparcode|hyphenasciicode|hsizefrozenparcode|hmodeifcode|hlistnodecode|hboxifcode|hboxgroupcode|hashasciicode|hangfrozenparcode|halfwaytotallistanchorcode|halfwayrightlistanchorcode|halfwayleftlistanchorcode|halfwayheightlistanchorcode|halfwaydepthlistanchorcode|halfpoint|halfapoint|hairspace|gluenodecode|globalpreventmode|globalflagcode|globalenablemode|globaldisablemode|frozenflagcode|fractionrulemathcontrolcode|fourperemspace|forwardslashasciicode|formfeedasciicode|forcehandlerhyphenationcode|forcecheckhyphenationcode|fontslantperpoint|fontinterwordstretch|fontinterwordspace|fontinterwordshrink|fontextraspace|fontexheight|fontemwidth|fontcharifcode|fmtversion|fmtname|flattenvleadersnormalizeparcode|flattenhleadersnormalizecode|flattendiscretionariesnormalizecode|fiveperemspace|finrowgroupcode|figurespace|feedbackcompoundhyphenationcode|falseifcode|extraspace|explicitpenaltyhyphenationcode|explicithyphenationcode|exheight|exclamationmarkasciicode|everystoptext|everystarttext|escapecatcode|errorstopmodecode|eofifcode|environment|enquad|endoflinetoken|endoflinecatcode|endoflineasciicode|endoffileasciicode|endline|endgroupcatcode|enablemode|emwidth|emquad|emptyvbox|emptytoks|emptyhbox|emptybox|empty|egroup|eUx|downrotationangle|doublequoteasciicode|doublecommentsignal|dollarasciicode|doifnotmode|doifnotdocumentvariable|doifnotallmodes|doifmodeelse|doifmode|doifelsemode|doifelsedocumentvariable|doifelseallmodes|doifdocumentvariableelse|doifdocumentvariable|doifallmodeselse|doifallmodes|documentvariable|displaypenaltyfrozenparcode|discretionarynodecode|discretionarygroupcode|discretionarygroupcode|discardzerotabskipsnormalizecode|disablemode|directionrighttoleft|directionlefttoright|dimifcode|demeritsfrozenparcode|delasciicode|definemode|definedifcode|defaultmathclassoptions|currentmoduleparameter|ctxcatcodes|ctdcatcodes|csnameifcode|continuewhenlmtxmode|continueifinputfile|contextversion|contextmark|contextlmtxmode|contextformat|constantnumberargument|constantnumber|constantemptyargument|constantdimenargument|constantdimen|conditionaltrue|conditionalflagcode|conditionalfalse|compoundhyphenationcode|component|completehyphenationcode|commentcatcode|commentasciicode|commaasciicode|colonasciicode|collapsehyphenationcode|clubpenaltyfrozenparcode|clipwidthnormalizecode|circumflexasciicode|checktextitalickernmathcontrolcode|checkspaceitalickernmathcontrolcode|checkligatureandkernmathcontrolcode|charnodecode|charifcode|centeroriginlistanchorcode|centeringskip|centeringfillskip|centerheightlistanchorcode|centerdepthlistanchorcode|catifcode|caseifcode|brokenpenaltyfrozenparcode|breakafterdirnormalizecode|breakablethinspace|bottomlevelgroupcode|binmathflattencode|binaryshiftedtwenty|binaryshiftedthirty|binaryshiftedten|bigskipamount|bidirlo|bidirle|bidipop|bidilro|bidilre|bgroup|begingroupcatcode|batchmodecode|barasciicode|backslashasciicode|automaticpenaltyhyphenationcode|automatichyphenationcode|attributeunsetvalue|atsignasciicode|asciispacechar|applyverticalitalickernmathcontrolcode|applytextitalickernmathcontrolcode|applyscriptitalickernmathcontrolcode|applyordinaryitalickernmathcontrolcode|applycharitalickernmathcontrolcode|applyboxeditalickernmathcontrolcode|ampersandasciicode|alsosimplegroupcode|allfrozenparcode|alignsetgroupcode|alignparcontextcode|alignmentcatcode|aligngroupcode|adjustnodecode|adjustfrozenparcode|adjustedhboxgroupcode|adjustautomigrationcode|activetabtoken|activemathcharcode|activeformfeedtoken|activeendoflinetoken|activecatcode|activecatcode|accentskewhalfmathcontrolcode|accentskewapplymathcontrolcode|Ux|Umathaccents|!!es|!!bs)(?=[^a-zA-Z])", "name" : "context.constant.commands.constant.tex" }, "csname" : { @@ -216,7 +216,7 @@ ] }, "primitive" : { - "match" : "\u005C\u005C(year|xtokspre|xtoksapp|xtoks|xspaceskip|xleaders|xdefcsname|xdef|wrapuppar|wordboundary|widowpenalty|widowpenalties|wd|vtop|vss|vsplit|vskip|vsize|vrule|vpack|vfuzz|vfilneg|vfill|vfil|vcenter|vbox|vbadness|valign|vadjust|uppercase|unvpack|unvcopy|unvbox|untraced|unskip|unpenalty|unletprotected|unletfrozen|unless|unkern|unhpack|unhcopy|unhbox|unexpandedloop|underline|undent|unboundary|uleaders|uchyph|uccode|tracingstats|tracingrestores|tracingparagraphs|tracingpages|tracingoutput|tracingonline|tracingnodes|tracingnesting|tracingmath|tracingmarks|tracingmacros|tracinglostchars|tracinglevels|tracinginserts|tracingifs|tracinghyphenation|tracinggroups|tracingfullboxes|tracingfonts|tracingexpressions|tracingcommands|tracingassigns|tracingalignments|tracingadjusts|tpack|toscaled|topskip|topmarks|topmark|tomathstyle|tolerant|tolerance|tokspre|toksdef|toksapp|toks|tokenized|tointeger|todimension|tinymuskip|time|thinmuskip|thickmuskip|thewithoutunit|the|textstyle|textfont|textdirection|tabskip|tabsize|swapcsvalues|supmarkmode|string|srule|splittopskip|splitmaxdepth|splitfirstmarks|splitfirstmark|splitdiscards|splitbotmarks|splitbotmark|span|spaceskip|spacefactor|snapshotpar|skipdef|skip|skewedwithdelims|skewed|skewchar|showtokens|showthe|shownodedetails|showlists|showifs|showgroups|showboxdepth|showboxbreadth|showbox|show|shipout|shapingpenalty|shapingpenaltiesmode|sfcode|setmathspacing|setmathprepenalty|setmathpostpenalty|setmathoptions|setmathignore|setmathatomrule|setlanguage|setfontid|setdefaultmathcodes|setbox|semiprotected|semiexpanded|scrollmode|scriptstyle|scriptspace|scriptscriptstyle|scriptscriptfont|scriptfont|scantokens|scantextokens|scaledslantperpoint|scaledinterwordstretch|scaledinterwordspace|scaledinterwordshrink|scaledfontdimen|scaledextraspace|scaledexheight|scaledemwidth|savingvdiscards|savinghyphcodes|savecatcodetable|rpcode|romannumeral|rightskip|rightmarginkern|righthyphenmin|right|retokenized|resetmathspacing|relpenalty|relax|raise|radical|quitvmode|quitloop|pxdimen|protrusionboundary|protrudechars|protected|prevgraf|prevdepth|pretolerance|prerelpenalty|preinlinepenalty|prehyphenchar|preexhyphenchar|predisplaysize|predisplaypenalty|predisplaygapfactor|predisplaydirection|prebinoppenalty|postinlinepenalty|posthyphenchar|postexhyphenchar|postdisplaypenalty|permanent|penalty|pdfximage|pdfxformresources|pdfxformname|pdfxformmargin|pdfxformattr|pdfxform|pdfvorigin|pdfuniqueresname|pdfuniformdeviate|pdftrailerid|pdftrailer|pdftracingfonts|pdfthreadmargin|pdfthread|pdftexversion|pdftexrevision|pdftexbanner|pdfsuppressptexinfo|pdfsuppressoptionalinfo|pdfstartthread|pdfstartlink|pdfsetrandomseed|pdfsetmatrix|pdfsavepos|pdfsave|pdfretval|pdfrestore|pdfreplacefont|pdfrefximage|pdfrefxform|pdfrefobj|pdfrecompress|pdfrandomseed|pdfpxdimen|pdfprotrudechars|pdfprimitive|pdfpkresolution|pdfpkmode|pdfpkfixeddpi|pdfpagewidth|pdfpagesattr|pdfpageresources|pdfpageref|pdfpageheight|pdfpagebox|pdfpageattr|pdfoutput|pdfoutline|pdfomitcidset|pdfomitcharset|pdfobjcompresslevel|pdfobj|pdfnormaldeviate|pdfnoligatures|pdfnames|pdfminorversion|pdfmapline|pdfmapfile|pdfmajorversion|pdfliteral|pdflinkmargin|pdflastypos|pdflastxpos|pdflastximagepages|pdflastximage|pdflastxform|pdflastobj|pdflastlink|pdflastlinedepth|pdflastannot|pdfinsertht|pdfinfoomitdate|pdfinfo|pdfinclusionerrorlevel|pdfinclusioncopyfonts|pdfincludechars|pdfimageresolution|pdfimagehicolor|pdfimagegamma|pdfimageapplygamma|pdfimageaddfilename|pdfignoreunknownimages|pdfignoreddimen|pdfhorigin|pdfglyphtounicode|pdfgentounicode|pdfgamma|pdffontsize|pdffontobjnum|pdffontname|pdffontexpand|pdffontattr|pdffirstlineheight|pdfendthread|pdfendlink|pdfeachlineheight|pdfeachlinedepth|pdfdraftmode|pdfdestmargin|pdfdest|pdfdecimaldigits|pdfcreationdate|pdfcopyfont|pdfcompresslevel|pdfcolorstackinit|pdfcolorstack|pdfcatalog|pdfannot|pdfadjustspacing|pausing|patterns|parskip|parshapelength|parshapeindent|parshapedimen|parshape|parinitrightskip|parinitleftskip|parindent|parfillskip|pardirection|parattribute|parametermark|parametercount|par|pagevsize|pagetotal|pagestretch|pageshrink|pagegoal|pagefilstretch|pagefillstretch|pagefilllstretch|pageextragoal|pagediscards|pagedepth|pageboundarypenalty|pageboundary|overwithdelims|overshoot|overloadmode|overloaded|overline|overfullrule|over|outputpenalty|outputbox|output|outer|orunless|orphanpenalty|orphanpenalties|orelse|or|omit|numexpression|numexpr|numericscale|number|nullfont|nulldelimiterspace|novrule|nospaces|normalyear|normalxtokspre|normalxtoksapp|normalxtoks|normalxspaceskip|normalxleaders|normalxdefcsname|normalxdef|normalwrapuppar|normalwordboundary|normalwidowpenalty|normalwidowpenalties|normalwd|normalvtop|normalvss|normalvsplit|normalvskip|normalvsize|normalvrule|normalvpack|normalvfuzz|normalvfilneg|normalvfill|normalvfil|normalvcenter|normalvbox|normalvbadness|normalvalign|normalvadjust|normaluppercase|normalunvpack|normalunvcopy|normalunvbox|normaluntraced|normalunskip|normalunpenalty|normalunletprotected|normalunletfrozen|normalunless|normalunkern|normalunhpack|normalunhcopy|normalunhbox|normalunexpandedloop|normalunexpanded|normalunderline|normalundent|normalunboundary|normaluleaders|normaluchyph|normaluccode|normaltracingstats|normaltracingrestores|normaltracingparagraphs|normaltracingpages|normaltracingoutput|normaltracingonline|normaltracingnodes|normaltracingnesting|normaltracingmath|normaltracingmarks|normaltracingmacros|normaltracinglostchars|normaltracinglevels|normaltracinginserts|normaltracingifs|normaltracinghyphenation|normaltracinggroups|normaltracingfullboxes|normaltracingfonts|normaltracingexpressions|normaltracingcommands|normaltracingassigns|normaltracingalignments|normaltracingadjusts|normaltpack|normaltoscaled|normaltopskip|normaltopmarks|normaltopmark|normaltomathstyle|normaltolerant|normaltolerance|normaltokspre|normaltoksdef|normaltoksapp|normaltoks|normaltokenized|normaltointeger|normaltodimension|normaltinymuskip|normaltime|normalthinmuskip|normalthickmuskip|normalthewithoutunit|normalthe|normaltextstyle|normaltextfont|normaltextdirection|normaltabskip|normaltabsize|normalswapcsvalues|normalsupmarkmode|normalstring|normalsrule|normalsplittopskip|normalsplitmaxdepth|normalsplitfirstmarks|normalsplitfirstmark|normalsplitdiscards|normalsplitbotmarks|normalsplitbotmark|normalspan|normalspaceskip|normalspacefactor|normalsnapshotpar|normalskipdef|normalskip|normalskewedwithdelims|normalskewed|normalskewchar|normalshowtokens|normalshowthe|normalshownodedetails|normalshowlists|normalshowifs|normalshowgroups|normalshowboxdepth|normalshowboxbreadth|normalshowbox|normalshow|normalshipout|normalshapingpenalty|normalshapingpenaltiesmode|normalsfcode|normalsetmathspacing|normalsetmathprepenalty|normalsetmathpostpenalty|normalsetmathoptions|normalsetmathignore|normalsetmathatomrule|normalsetlanguage|normalsetfontid|normalsetdefaultmathcodes|normalsetbox|normalsemiprotected|normalsemiexpanded|normalscrollmode|normalscriptstyle|normalscriptspace|normalscriptscriptstyle|normalscriptscriptfont|normalscriptfont|normalscantokens|normalscantextokens|normalscaledslantperpoint|normalscaledinterwordstretch|normalscaledinterwordspace|normalscaledinterwordshrink|normalscaledfontdimen|normalscaledextraspace|normalscaledexheight|normalscaledemwidth|normalsavingvdiscards|normalsavinghyphcodes|normalsavecatcodetable|normalrpcode|normalromannumeral|normalrightskip|normalrightmarginkern|normalrighthyphenmin|normalright|normalretokenized|normalresetmathspacing|normalrelpenalty|normalrelax|normalraise|normalradical|normalquitvmode|normalquitloop|normalpxdimen|normalprotrusionboundary|normalprotrudechars|normalprotected|normalprevgraf|normalprevdepth|normalpretolerance|normalprerelpenalty|normalpreinlinepenalty|normalprehyphenchar|normalpreexhyphenchar|normalpredisplaysize|normalpredisplaypenalty|normalpredisplaygapfactor|normalpredisplaydirection|normalprebinoppenalty|normalpostinlinepenalty|normalposthyphenchar|normalpostexhyphenchar|normalpostdisplaypenalty|normalpermanent|normalpenalty|normalpdfximage|normalpdfxformresources|normalpdfxformname|normalpdfxformmargin|normalpdfxformattr|normalpdfxform|normalpdfvorigin|normalpdfuniqueresname|normalpdfuniformdeviate|normalpdftrailerid|normalpdftrailer|normalpdftracingfonts|normalpdfthreadmargin|normalpdfthread|normalpdftexversion|normalpdftexrevision|normalpdftexbanner|normalpdfsuppressptexinfo|normalpdfsuppressoptionalinfo|normalpdfstartthread|normalpdfstartlink|normalpdfsetrandomseed|normalpdfsetmatrix|normalpdfsavepos|normalpdfsave|normalpdfretval|normalpdfrestore|normalpdfreplacefont|normalpdfrefximage|normalpdfrefxform|normalpdfrefobj|normalpdfrecompress|normalpdfrandomseed|normalpdfpxdimen|normalpdfprotrudechars|normalpdfprimitive|normalpdfpkresolution|normalpdfpkmode|normalpdfpkfixeddpi|normalpdfpagewidth|normalpdfpagesattr|normalpdfpageresources|normalpdfpageref|normalpdfpageheight|normalpdfpagebox|normalpdfpageattr|normalpdfoutput|normalpdfoutline|normalpdfomitcidset|normalpdfomitcharset|normalpdfobjcompresslevel|normalpdfobj|normalpdfnormaldeviate|normalpdfnoligatures|normalpdfnames|normalpdfminorversion|normalpdfmapline|normalpdfmapfile|normalpdfmajorversion|normalpdfliteral|normalpdflinkmargin|normalpdflastypos|normalpdflastxpos|normalpdflastximagepages|normalpdflastximage|normalpdflastxform|normalpdflastobj|normalpdflastlink|normalpdflastlinedepth|normalpdflastannot|normalpdfinsertht|normalpdfinfoomitdate|normalpdfinfo|normalpdfinclusionerrorlevel|normalpdfinclusioncopyfonts|normalpdfincludechars|normalpdfimageresolution|normalpdfimagehicolor|normalpdfimagegamma|normalpdfimageapplygamma|normalpdfimageaddfilename|normalpdfignoreunknownimages|normalpdfignoreddimen|normalpdfhorigin|normalpdfglyphtounicode|normalpdfgentounicode|normalpdfgamma|normalpdffontsize|normalpdffontobjnum|normalpdffontname|normalpdffontexpand|normalpdffontattr|normalpdffirstlineheight|normalpdfendthread|normalpdfendlink|normalpdfeachlineheight|normalpdfeachlinedepth|normalpdfdraftmode|normalpdfdestmargin|normalpdfdest|normalpdfdecimaldigits|normalpdfcreationdate|normalpdfcopyfont|normalpdfcompresslevel|normalpdfcolorstackinit|normalpdfcolorstack|normalpdfcatalog|normalpdfannot|normalpdfadjustspacing|normalpausing|normalpatterns|normalparskip|normalparshapelength|normalparshapeindent|normalparshapedimen|normalparshape|normalparinitrightskip|normalparinitleftskip|normalparindent|normalparfillskip|normalparfillleftskip|normalpardirection|normalparattribute|normalparametermark|normalparametercount|normalpar|normalpagevsize|normalpagetotal|normalpagestretch|normalpageshrink|normalpagegoal|normalpagefilstretch|normalpagefillstretch|normalpagefilllstretch|normalpageextragoal|normalpagediscards|normalpagedepth|normalpageboundarypenalty|normalpageboundary|normaloverwithdelims|normalovershoot|normaloverloadmode|normaloverloaded|normaloverline|normaloverfullrule|normalover|normaloutputpenalty|normaloutputbox|normaloutput|normalouter|normalorunless|normalorphanpenalty|normalorphanpenalties|normalorelse|normalor|normalomit|normalnumexpression|normalnumexpr|normalnumericscale|normalnumber|normalnullfont|normalnulldelimiterspace|normalnovrule|normalnospaces|normalnormalizeparmode|normalnormalizelinemode|normalnorelax|normalnonstopmode|normalnonscript|normalnolimits|normalnoindent|normalnohrule|normalnoexpand|normalnoboundary|normalnoatomruling|normalnoaligned|normalnoalign|normalnewlinechar|normalmutoglue|normalmutable|normalmuskipdef|normalmuskip|normalmultiply|normalmugluespecdef|normalmuexpr|normalmskip|normalmoveright|normalmoveleft|normalmonth|normalmkern|normalmiddle|normalmessage|normalmedmuskip|normalmeaningless|normalmeaningfull|normalmeaningasis|normalmeaning|normalmaxdepth|normalmaxdeadcycles|normalmaththreshold|normalmathsurroundskip|normalmathsurroundmode|normalmathsurround|normalmathstylefontid|normalmathstyle|normalmathstackstyle|normalmathspacingmode|normalmathslackmode|normalmathscriptsmode|normalmathscriptcharmode|normalmathscriptboxmode|normalmathscale|normalmathrulesmode|normalmathrulesfam|normalmathrightclass|normalmathrel|normalmathrad|normalmathpunct|normalmathpenaltiesmode|normalmathord|normalmathopen|normalmathop|normalmathnolimitsmode|normalmathmiddle|normalmathlimitsmode|normalmathleftclass|normalmathinner|normalmathghost|normalmathfrac|normalmathforwardpenalties|normalmathfontcontrol|normalmathfencesmode|normalmathfenced|normalmatheqnogapstep|normalmathendclass|normalmathdisplayskipmode|normalmathdirection|normalmathdelimitersmode|normalmathcode|normalmathclose|normalmathchoice|normalmathchardef|normalmathchar|normalmathbin|normalmathbeginclass|normalmathbackwardpenalties|normalmathatomskip|normalmathatomglue|normalmathatom|normalmathaccent|normalmarks|normalmark|normalluatexversion|normalluatexrevision|normalluatexbanner|normalluafunctioncall|normalluafunction|normalluaescapestring|normalluadef|normalluacopyinputnodes|normalluabytecodecall|normalluabytecode|normallpcode|normallowercase|normallower|normallooseness|normallong|normallocalrightboxbox|normallocalrightbox|normallocalmiddleboxbox|normallocalmiddlebox|normallocalleftboxbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolledloop|normallocalcontrolled|normallocalcontrol|normallocalbrokenpenalty|normallineskiplimit|normallineskip|normallinepenalty|normallinedirection|normallimits|normallettonothing|normalletprotected|normalletmathspacing|normalletmathparent|normalletmathatomrule|normalletfrozen|normalletcsname|normalletcharcode|normallet|normalleqno|normalleftskip|normalleftmarginkern|normallefthyphenmin|normalleft|normalleaders|normallccode|normallastskip|normallastrightclass|normallastpenalty|normallastparcontext|normallastpageextra|normallastnodetype|normallastnodesubtype|normallastnamedcs|normallastloopiterator|normallastlinefit|normallastleftclass|normallastkern|normallastchknum|normallastchkdim|normallastbox|normallastboundary|normallastarguments|normallanguage|normalkern|normaljobname|normalizeparmode|normalizelinemode|normalinterlinepenalty|normalinterlinepenalties|normalinteractionmode|normalintegerdef|normalinstance|normalinsertwidth|normalinsertuncopy|normalinsertunbox|normalinsertstoring|normalinsertstorage|normalinsertprogress|normalinsertpenalty|normalinsertpenalties|normalinsertmultiplier|normalinsertmode|normalinsertmaxdepth|normalinsertlimit|normalinsertheights|normalinsertheight|normalinsertdistance|normalinsertdepth|normalinsertcopy|normalinsertbox|normalinsert|normalinputlineno|normalinput|normalinitcatcodetable|normalinherited|normalindent|normalimmutable|normalimmediate|normalignorespaces|normalignorepars|normalignorearguments|normalifx|normalifvoid|normalifvmode|normalifvbox|normaliftrue|normaliftok|normalifrelax|normalifpdfprimitive|normalifpdfabsnum|normalifpdfabsdim|normalifparameters|normalifparameter|normalifodd|normalifnumval|normalifnumexpression|normalifnum|normalifmmode|normalifmathstyle|normalifmathparameter|normalifinsert|normalifinner|normalifincsname|normalifhmode|normalifhbox|normalifhasxtoks|normalifhastoks|normalifhastok|normalifhaschar|normaliffontchar|normalifflags|normaliffalse|normalifempty|normalifdimval|normalifdimexpression|normalifdim|normalifdefined|normalifcstok|normalifcsname|normalifcondition|normalifcmpnum|normalifcmpdim|normalifchknum|normalifchkdim|normalifcat|normalifcase|normalifboolean|normalifarguments|normalifabsnum|normalifabsdim|normalif|normalhyphenpenalty|normalhyphenchar|normalhyphenationmode|normalhyphenationmin|normalhyphenation|normalht|normalhss|normalhskip|normalhsize|normalhrule|normalhpack|normalholdinginserts|normalhjcode|normalhfuzz|normalhfilneg|normalhfill|normalhfil|normalhccode|normalhbox|normalhbadness|normalhangindent|normalhangafter|normalhalign|normalgtokspre|normalgtoksapp|normalglyphyscale|normalglyphyoffset|normalglyphxscale|normalglyphxoffset|normalglyphtextscale|normalglyphstatefield|normalglyphscriptscriptscale|normalglyphscriptscale|normalglyphscriptfield|normalglyphscale|normalglyphoptions|normalglyphdatafield|normalglyph|normalgluetomu|normalgluestretchorder|normalgluestretch|normalgluespecdef|normalglueshrinkorder|normalglueshrink|normalglueexpr|normalglobaldefs|normalglobal|normalglettonothing|normalgletcsname|normalglet|normalgleaders|normalgdefcsname|normalgdef|normalfuturelet|normalfutureexpandisap|normalfutureexpandis|normalfutureexpand|normalfuturedef|normalfuturecsname|normalfrozen|normalformatname|normalfonttextcontrol|normalfontspecyscale|normalfontspecxscale|normalfontspecscale|normalfontspecifiedsize|normalfontspecifiedname|normalfontspecid|normalfontspecdef|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpandedloop|normalexpandedafter|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normaletoks|normalescapechar|normalerrorstopmode|normalerrorcontextlines|normalerrmessage|normalerrhelp|normaleqno|normalenforced|normalendsimplegroup|normalendmathgroup|normalendlocalcontrol|normalendlinechar|normalendinput|normalendgroup|normalendcsname|normalend|normalemergencystretch|normalelse|normalefcode|normaledefcsname|normaledef|normaldump|normaldp|normaldoublehyphendemerits|normaldivide|normaldisplaywidth|normaldisplaywidowpenalty|normaldisplaywidowpenalties|normaldisplaystyle|normaldisplaylimits|normaldisplayindent|normaldiscretionary|normaldirectlua|normaldimexpression|normaldimexpr|normaldimensiondef|normaldimendef|normaldimen|normaldetokenize|normaldelimitershortfall|normaldelimiterfactor|normaldelimiter|normaldelcode|normaldefcsname|normaldefaultskewchar|normaldefaulthyphenchar|normaldef|normaldeadcycles|normalday|normalcurrentmarks|normalcurrentloopnesting|normalcurrentloopiterator|normalcurrentiftype|normalcurrentiflevel|normalcurrentifbranch|normalcurrentgrouptype|normalcurrentgrouplevel|normalcsstring|normalcsname|normalcrcr|normalcrampedtextstyle|normalcrampedscriptstyle|normalcrampedscriptscriptstyle|normalcrampeddisplaystyle|normalcr|normalcountdef|normalcount|normalcopymathspacing|normalcopymathparent|normalcopymathatomrule|normalcopy|normalclubpenalty|normalclubpenalties|normalclearmarks|normalcleaders|normalchardef|normalchar|normalcatcodetable|normalcatcode|normalbrokenpenalty|normalboxyoffset|normalboxymove|normalboxxoffset|normalboxxmove|normalboxtotal|normalboxtarget|normalboxsource|normalboxshift|normalboxorientation|normalboxmaxdepth|normalboxgeometry|normalboxdirection|normalboxattribute|normalboxanchors|normalboxanchor|normalbox|normalboundary|normalbotmarks|normalbotmark|normalbinoppenalty|normalbelowdisplayskip|normalbelowdisplayshortskip|normalbeginsimplegroup|normalbeginmathgroup|normalbeginlocalcontrol|normalbegingroup|normalbegincsname|normalbatchmode|normalbaselineskip|normalbadness|normalautoparagraphmode|normalautomigrationmode|normalautomatichyphenpenalty|normalautomaticdiscretionary|normalattributedef|normalattribute|normalatopwithdelims|normalatop|normalatendofgrouped|normalatendofgroup|normalalluncrampedstyles|normalalltextstyles|normalallsplitstyles|normalallscriptstyles|normalallscriptscriptstyles|normalallmathstyles|normalalldisplaystyles|normalallcrampedstyles|normalaligntab|normalalignmentwrapsource|normalalignmentcellsource|normalalignmark|normalaligncontent|normalaliased|normalaftergrouped|normalaftergroup|normalafterassignment|normalafterassigned|normaladvance|normaladjustspacingstretch|normaladjustspacingstep|normaladjustspacingshrink|normaladjustspacing|normaladjdemerits|normalaccent|normalabovewithdelims|normalabovedisplayskip|normalabovedisplayshortskip|normalabove|normalXeTeXversion|normalUvextensible|normalUunderdelimiter|normalUsuperscript|normalUsuperprescript|normalUsubscript|normalUsubprescript|normalUstyle|normalUstopmath|normalUstopdisplaymath|normalUstartmath|normalUstartdisplaymath|normalUstack|normalUskewedwithdelims|normalUskewed|normalUshiftedsuperscript|normalUshiftedsuperprescript|normalUshiftedsubscript|normalUshiftedsubprescript|normalUroot|normalUright|normalUradical|normalUprimescript|normalUoverwithdelims|normalUoverdelimiter|normalUover|normalUoperator|normalUnosuperscript|normalUnosuperprescript|normalUnosubscript|normalUnosubprescript|normalUmiddle|normalUmathyscale|normalUmathxscale|normalUmathvoid|normalUmathvextensiblevariant|normalUmathuseaxis|normalUmathunderlinevariant|normalUmathunderdelimitervgap|normalUmathunderdelimitervariant|normalUmathunderdelimiterbgap|normalUmathunderbarvgap|normalUmathunderbarrule|normalUmathunderbarkern|normalUmathtopaccentvariant|normalUmathsupsubbottommax|normalUmathsupshiftup|normalUmathsupshiftdrop|normalUmathsupshiftdistance|normalUmathsuperscriptvariant|normalUmathsupbottommin|normalUmathsubtopmax|normalUmathsubsupvgap|normalUmathsubsupshiftdown|normalUmathsubshiftdrop|normalUmathsubshiftdown|normalUmathsubshiftdistance|normalUmathsubscriptvariant|normalUmathstackvgap|normalUmathstackvariant|normalUmathstacknumup|normalUmathstackdenomdown|normalUmathspacebeforescript|normalUmathspaceafterscript|normalUmathsource|normalUmathskewedfractionvgap|normalUmathskewedfractionhgap|normalUmathskeweddelimitertolerance|normalUmathruleheight|normalUmathruledepth|normalUmathradicalvgap|normalUmathradicalvariant|normalUmathradicalrule|normalUmathradicalkern|normalUmathradicaldegreeraise|normalUmathradicaldegreebefore|normalUmathradicaldegreeafter|normalUmathquad|normalUmathprimewidth|normalUmathprimevariant|normalUmathprimespaceafter|normalUmathprimeshiftup|normalUmathprimeshiftdrop|normalUmathprimeraise|normalUmathpresupshiftdistance|normalUmathpresubshiftdistance|normalUmathphantom|normalUmathoverlinevariant|normalUmathoverlayaccentvariant|normalUmathoverdelimitervgap|normalUmathoverdelimitervariant|normalUmathoverdelimiterbgap|normalUmathoverbarvgap|normalUmathoverbarrule|normalUmathoverbarkern|normalUmathoperatorsize|normalUmathopenupheight|normalUmathopenupdepth|normalUmathnumeratorvariant|normalUmathnolimitsupfactor|normalUmathnolimitsubfactor|normalUmathnolimits|normalUmathnoaxis|normalUmathlimits|normalUmathlimitbelowvgap|normalUmathlimitbelowkern|normalUmathlimitbelowbgap|normalUmathlimitabovevgap|normalUmathlimitabovekern|normalUmathlimitabovebgap|normalUmathhextensiblevariant|normalUmathfractionvariant|normalUmathfractionrule|normalUmathfractionnumvgap|normalUmathfractionnumup|normalUmathfractiondenomvgap|normalUmathfractiondenomdown|normalUmathfractiondelsize|normalUmathflattenedaccenttopshiftup|normalUmathflattenedaccentbottomshiftdown|normalUmathflattenedaccentbaseheight|normalUmathflattenedaccentbasedepth|normalUmathextrasupspace|normalUmathextrasupshift|normalUmathextrasupprespace|normalUmathextrasuppreshift|normalUmathextrasubspace|normalUmathextrasubshift|normalUmathextrasubprespace|normalUmathextrasubpreshift|normalUmathdenominatorvariant|normalUmathdelimiterundervariant|normalUmathdelimiterovervariant|normalUmathdegreevariant|normalUmathconnectoroverlapmin|normalUmathcodenum|normalUmathcode|normalUmathclass|normalUmathcharslot|normalUmathcharnumdef|normalUmathcharnum|normalUmathcharfam|normalUmathchardef|normalUmathcharclass|normalUmathchar|normalUmathbotaccentvariant|normalUmathaxis|normalUmathadapttoright|normalUmathadapttoleft|normalUmathaccentvariant|normalUmathaccenttopshiftup|normalUmathaccentbottomshiftdown|normalUmathaccentbaseheight|normalUmathaccentbasedepth|normalUmathaccent|normalUleft|normalUhextensible|normalUdelimiterunder|normalUdelimiterover|normalUdelimiter|normalUdelcodenum|normalUdelcode|normalUchar|normalUatopwithdelims|normalUatop|normalUabovewithdelims|normalUabove|normalOmegaversion|normalOmegarevision|normalOmegaminorversion|normalAlephversion|normalAlephrevision|normalAlephminorversion|normal |norelax|nonstopmode|nonscript|nolimits|noindent|nohrule|noexpand|noboundary|noatomruling|noaligned|noalign|newlinechar|mutoglue|mutable|muskipdef|muskip|multiply|mugluespecdef|muexpr|mskip|moveright|moveleft|month|mkern|middle|message|medmuskip|meaningless|meaningfull|meaningasis|meaning|maxdepth|maxdeadcycles|maththreshold|mathsurroundskip|mathsurroundmode|mathsurround|mathstylefontid|mathstyle|mathstackstyle|mathspacingmode|mathslackmode|mathscriptsmode|mathscriptcharmode|mathscriptboxmode|mathscale|mathrulesmode|mathrulesfam|mathrightclass|mathrel|mathrad|mathpunct|mathpenaltiesmode|mathord|mathopen|mathop|mathnolimitsmode|mathmiddle|mathlimitsmode|mathleftclass|mathinner|mathghost|mathfrac|mathforwardpenalties|mathfontcontrol|mathfencesmode|mathfenced|matheqnogapstep|mathendclass|mathdisplayskipmode|mathdirection|mathdelimitersmode|mathcode|mathclose|mathchoice|mathchardef|mathchar|mathbin|mathbeginclass|mathbackwardpenalties|mathatomskip|mathatomglue|mathatom|mathaccent|marks|mark|luatexversion|luatexrevision|luatexbanner|luafunctioncall|luafunction|luaescapestring|luadef|luacopyinputnodes|luabytecodecall|luabytecode|lpcode|lowercase|lower|looseness|long|localrightboxbox|localrightbox|localmiddleboxbox|localmiddlebox|localleftboxbox|localleftbox|localinterlinepenalty|localcontrolledloop|localcontrolled|localcontrol|localbrokenpenalty|lineskiplimit|lineskip|linepenalty|linedirection|limits|lettonothing|letprotected|letmathspacing|letmathparent|letmathatomrule|letfrozen|letcsname|letcharcode|let|leqno|leftskip|leftmarginkern|lefthyphenmin|left|leaders|lccode|lastskip|lastrightclass|lastpenalty|lastparcontext|lastpageextra|lastnodetype|lastnodesubtype|lastnamedcs|lastloopiterator|lastlinefit|lastleftclass|lastkern|lastchknum|lastchkdim|lastbox|lastboundary|lastarguments|language|kern|jobname|interlinepenalty|interlinepenalties|interactionmode|integerdef|instance|insertwidth|insertuncopy|insertunbox|insertstoring|insertstorage|insertprogress|insertpenalty|insertpenalties|insertmultiplier|insertmode|insertmaxdepth|insertlimit|insertheights|insertheight|insertdistance|insertdepth|insertcopy|insertbox|insert|inputlineno|input|initcatcodetable|inherited|indent|immutable|immediate|ignorespaces|ignorepars|ignorearguments|ifx|ifvoid|ifvmode|ifvbox|iftrue|iftok|ifrelax|ifpdfprimitive|ifpdfabsnum|ifpdfabsdim|ifparameters|ifparameter|ifodd|ifnumval|ifnumexpression|ifnum|ifmmode|ifmathstyle|ifmathparameter|ifinsert|ifinner|ifincsname|ifhmode|ifhbox|ifhasxtoks|ifhastoks|ifhastok|ifhaschar|iffontchar|ifflags|iffalse|ifempty|ifdimval|ifdimexpression|ifdim|ifdefined|ifcstok|ifcsname|ifcondition|ifcmpnum|ifcmpdim|ifchknum|ifchkdim|ifcat|ifcase|ifboolean|ifarguments|ifabsnum|ifabsdim|if|hyphenpenalty|hyphenchar|hyphenationmode|hyphenationmin|hyphenation|ht|hss|hskip|hsize|hrule|hpack|holdinginserts|hjcode|hfuzz|hfilneg|hfill|hfil|hccode|hbox|hbadness|hangindent|hangafter|halign|gtokspre|gtoksapp|glyphyscale|glyphyoffset|glyphxscale|glyphxoffset|glyphtextscale|glyphstatefield|glyphscriptscriptscale|glyphscriptscale|glyphscriptfield|glyphscale|glyphoptions|glyphdatafield|glyph|gluetomu|gluestretchorder|gluestretch|gluespecdef|glueshrinkorder|glueshrink|glueexpr|globaldefs|global|glettonothing|gletcsname|glet|gleaders|gdefcsname|gdef|futurelet|futureexpandisap|futureexpandis|futureexpand|futuredef|futurecsname|frozen|formatname|fonttextcontrol|fontspecyscale|fontspecxscale|fontspecscale|fontspecifiedsize|fontspecifiedname|fontspecid|fontspecdef|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandedloop|expandedafter|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|etoks|escapechar|errorstopmode|errorcontextlines|errmessage|errhelp|eqno|enforced|endsimplegroup|endmathgroup|endlocalcontrol|endlinechar|endinput|endgroup|endcsname|end|emergencystretch|else|efcode|edefcsname|edef|dump|dp|doublehyphendemerits|divide|displaywidth|displaywidowpenalty|displaywidowpenalties|displaystyle|displaylimits|displayindent|discretionary|directlua|dimexpression|dimexpr|dimensiondef|dimendef|dimen|detokenize|delimitershortfall|delimiterfactor|delimiter|delcode|defcsname|defaultskewchar|defaulthyphenchar|def|deadcycles|day|currentmarks|currentloopnesting|currentloopiterator|currentiftype|currentiflevel|currentifbranch|currentgrouptype|currentgrouplevel|csstring|csname|crcr|crampedtextstyle|crampedscriptstyle|crampedscriptscriptstyle|crampeddisplaystyle|cr|countdef|count|copymathspacing|copymathparent|copymathatomrule|copy|clubpenalty|clubpenalties|clearmarks|cleaders|chardef|char|catcodetable|catcode|brokenpenalty|boxyoffset|boxymove|boxxoffset|boxxmove|boxtotal|boxtarget|boxsource|boxshift|boxorientation|boxmaxdepth|boxgeometry|boxdirection|boxattribute|boxanchors|boxanchor|box|boundary|botmarks|botmark|binoppenalty|belowdisplayskip|belowdisplayshortskip|beginsimplegroup|beginmathgroup|beginlocalcontrol|begingroup|begincsname|batchmode|baselineskip|badness|autoparagraphmode|automigrationmode|automatichyphenpenalty|automaticdiscretionary|attributedef|attribute|atopwithdelims|atop|atendofgrouped|atendofgroup|alluncrampedstyles|alltextstyles|allsplitstyles|allscriptstyles|allscriptscriptstyles|allmathstyles|alldisplaystyles|allcrampedstyles|aligntab|alignmentwrapsource|alignmentcellsource|alignmark|aligncontent|aliased|aftergrouped|aftergroup|afterassignment|afterassigned|advance|adjustspacingstretch|adjustspacingstep|adjustspacingshrink|adjustspacing|adjdemerits|accent|abovewithdelims|abovedisplayskip|abovedisplayshortskip|above|XeTeXversion|Uvextensible|Uunderdelimiter|Usuperscript|Usuperprescript|Usubscript|Usubprescript|Ustyle|Ustopmath|Ustopdisplaymath|Ustartmath|Ustartdisplaymath|Ustack|Uskewedwithdelims|Uskewed|Ushiftedsuperscript|Ushiftedsuperprescript|Ushiftedsubscript|Ushiftedsubprescript|Uroot|Uright|Uradical|Uprimescript|Uoverwithdelims|Uoverdelimiter|Uover|Uoperator|Unosuperscript|Unosuperprescript|Unosubscript|Unosubprescript|Umiddle|Umathyscale|Umathxscale|Umathvoid|Umathvextensiblevariant|Umathuseaxis|Umathunderlinevariant|Umathunderdelimitervgap|Umathunderdelimitervariant|Umathunderdelimiterbgap|Umathunderbarvgap|Umathunderbarrule|Umathunderbarkern|Umathtopaccentvariant|Umathsupsubbottommax|Umathsupshiftup|Umathsupshiftdrop|Umathsupshiftdistance|Umathsuperscriptvariant|Umathsupbottommin|Umathsubtopmax|Umathsubsupvgap|Umathsubsupshiftdown|Umathsubshiftdrop|Umathsubshiftdown|Umathsubshiftdistance|Umathsubscriptvariant|Umathstackvgap|Umathstackvariant|Umathstacknumup|Umathstackdenomdown|Umathspacebeforescript|Umathspaceafterscript|Umathsource|Umathskewedfractionvgap|Umathskewedfractionhgap|Umathskeweddelimitertolerance|Umathruleheight|Umathruledepth|Umathradicalvgap|Umathradicalvariant|Umathradicalrule|Umathradicalkern|Umathradicaldegreeraise|Umathradicaldegreebefore|Umathradicaldegreeafter|Umathquad|Umathprimewidth|Umathprimevariant|Umathprimespaceafter|Umathprimeshiftup|Umathprimeshiftdrop|Umathprimeraise|Umathpresupshiftdistance|Umathpresubshiftdistance|Umathphantom|Umathoverlinevariant|Umathoverlayaccentvariant|Umathoverdelimitervgap|Umathoverdelimitervariant|Umathoverdelimiterbgap|Umathoverbarvgap|Umathoverbarrule|Umathoverbarkern|Umathoperatorsize|Umathopenupheight|Umathopenupdepth|Umathnumeratorvariant|Umathnolimitsupfactor|Umathnolimitsubfactor|Umathnolimits|Umathnoaxis|Umathlimits|Umathlimitbelowvgap|Umathlimitbelowkern|Umathlimitbelowbgap|Umathlimitabovevgap|Umathlimitabovekern|Umathlimitabovebgap|Umathhextensiblevariant|Umathfractionvariant|Umathfractionrule|Umathfractionnumvgap|Umathfractionnumup|Umathfractiondenomvgap|Umathfractiondenomdown|Umathfractiondelsize|Umathflattenedaccenttopshiftup|Umathflattenedaccentbottomshiftdown|Umathflattenedaccentbaseheight|Umathflattenedaccentbasedepth|Umathextrasupspace|Umathextrasupshift|Umathextrasupprespace|Umathextrasuppreshift|Umathextrasubspace|Umathextrasubshift|Umathextrasubprespace|Umathextrasubpreshift|Umathdenominatorvariant|Umathdelimiterundervariant|Umathdelimiterovervariant|Umathdegreevariant|Umathconnectoroverlapmin|Umathcodenum|Umathcode|Umathclass|Umathcharslot|Umathcharnumdef|Umathcharnum|Umathcharfam|Umathchardef|Umathcharclass|Umathchar|Umathbotaccentvariant|Umathaxis|Umathadapttoright|Umathadapttoleft|Umathaccentvariant|Umathaccenttopshiftup|Umathaccentbottomshiftdown|Umathaccentbaseheight|Umathaccentbasedepth|Umathaccent|Uleft|Uhextensible|Udelimiterunder|Udelimiterover|Udelimiter|Udelcodenum|Udelcode|Uchar|Uatopwithdelims|Uatop|Uabovewithdelims|Uabove|Omegaversion|Omegarevision|Omegaminorversion|Alephversion|Alephrevision|Alephminorversion| )(?=[^a-zA-Z])", + "match" : "\u005C\u005C(year|xtokspre|xtoksapp|xtoks|xspaceskip|xleaders|xdefcsname|xdef|wrapuppar|wordboundary|widowpenalty|widowpenalties|wd|vtop|vss|vsplit|vskip|vsize|vrule|vpack|vfuzz|vfilneg|vfill|vfil|vcenter|vbox|vbadness|valign|vadjust|uppercase|unvpack|unvcopy|unvbox|untraced|unskip|unpenalty|unletprotected|unletfrozen|unless|unkern|unhpack|unhcopy|unhbox|unexpandedloop|underline|undent|unboundary|uleaders|uchyph|uccode|tracingstats|tracingrestores|tracingparagraphs|tracingpages|tracingoutput|tracingonline|tracingnodes|tracingnesting|tracingmath|tracingmarks|tracingmacros|tracinglostchars|tracinglevels|tracinginserts|tracingifs|tracinghyphenation|tracinggroups|tracingfullboxes|tracingfonts|tracingexpressions|tracingcommands|tracingassigns|tracingalignments|tracingadjusts|tpack|tosparsescaled|tosparsedimension|toscaled|topskip|topmarks|topmark|tomathstyle|tolerant|tolerance|tokspre|toksdef|toksapp|toks|tokenized|tointeger|tohexadecimal|todimension|tinymuskip|time|thinmuskip|thickmuskip|thewithoutunit|the|textstyle|textfont|textdirection|tabskip|tabsize|swapcsvalues|supmarkmode|string|srule|splittopskip|splitmaxdepth|splitfirstmarks|splitfirstmark|splitdiscards|splitbotmarks|splitbotmark|span|spaceskip|spacefactor|snapshotpar|skipdef|skip|skewedwithdelims|skewed|skewchar|showtokens|showthe|shownodedetails|showlists|showifs|showgroups|showboxdepth|showboxbreadth|showbox|show|shipout|shapingpenalty|shapingpenaltiesmode|sfcode|setmathspacing|setmathprepenalty|setmathpostpenalty|setmathoptions|setmathignore|setmathatomrule|setlanguage|setfontid|setdefaultmathcodes|setbox|semiprotected|semiexpanded|scrollmode|scriptstyle|scriptspace|scriptscriptstyle|scriptscriptfont|scriptfont|scantokens|scantextokens|scaledslantperpoint|scaledinterwordstretch|scaledinterwordspace|scaledinterwordshrink|scaledfontdimen|scaledextraspace|scaledexheight|scaledemwidth|savingvdiscards|savinghyphcodes|savecatcodetable|rpcode|romannumeral|rightskip|rightmarginkern|righthyphenmin|right|retokenized|resetmathspacing|relpenalty|relax|raise|radical|quitvmode|quitloop|pxdimen|protrusionboundary|protrudechars|protected|prevgraf|prevdepth|pretolerance|prerelpenalty|preinlinepenalty|prehyphenchar|preexhyphenchar|predisplaysize|predisplaypenalty|predisplaygapfactor|predisplaydirection|prebinoppenalty|postinlinepenalty|posthyphenchar|postexhyphenchar|postdisplaypenalty|permanent|penalty|pdfximage|pdfxformresources|pdfxformname|pdfxformmargin|pdfxformattr|pdfxform|pdfvorigin|pdfuniqueresname|pdfuniformdeviate|pdftrailerid|pdftrailer|pdftracingfonts|pdfthreadmargin|pdfthread|pdftexversion|pdftexrevision|pdftexbanner|pdfsuppressptexinfo|pdfsuppressoptionalinfo|pdfstartthread|pdfstartlink|pdfsetrandomseed|pdfsetmatrix|pdfsavepos|pdfsave|pdfretval|pdfrestore|pdfreplacefont|pdfrefximage|pdfrefxform|pdfrefobj|pdfrecompress|pdfrandomseed|pdfpxdimen|pdfprotrudechars|pdfprimitive|pdfpkresolution|pdfpkmode|pdfpkfixeddpi|pdfpagewidth|pdfpagesattr|pdfpageresources|pdfpageref|pdfpageheight|pdfpagebox|pdfpageattr|pdfoutput|pdfoutline|pdfomitcidset|pdfomitcharset|pdfobjcompresslevel|pdfobj|pdfnormaldeviate|pdfnoligatures|pdfnames|pdfminorversion|pdfmapline|pdfmapfile|pdfmajorversion|pdfliteral|pdflinkmargin|pdflastypos|pdflastxpos|pdflastximagepages|pdflastximage|pdflastxform|pdflastobj|pdflastlink|pdflastlinedepth|pdflastannot|pdfinsertht|pdfinfoomitdate|pdfinfo|pdfinclusionerrorlevel|pdfinclusioncopyfonts|pdfincludechars|pdfimageresolution|pdfimagehicolor|pdfimagegamma|pdfimageapplygamma|pdfimageaddfilename|pdfignoreunknownimages|pdfignoreddimen|pdfhorigin|pdfglyphtounicode|pdfgentounicode|pdfgamma|pdffontsize|pdffontobjnum|pdffontname|pdffontexpand|pdffontattr|pdffirstlineheight|pdfendthread|pdfendlink|pdfeachlineheight|pdfeachlinedepth|pdfdraftmode|pdfdestmargin|pdfdest|pdfdecimaldigits|pdfcreationdate|pdfcopyfont|pdfcompresslevel|pdfcolorstackinit|pdfcolorstack|pdfcatalog|pdfannot|pdfadjustspacing|pausing|patterns|parskip|parshapelength|parshapeindent|parshapedimen|parshape|parinitrightskip|parinitleftskip|parindent|parfillskip|pardirection|parattribute|parametermark|parametercount|par|pagevsize|pagetotal|pagestretch|pageshrink|pagegoal|pagefilstretch|pagefillstretch|pagefilllstretch|pageextragoal|pagediscards|pagedepth|pageboundarypenalty|pageboundary|overwithdelims|overshoot|overloadmode|overloaded|overline|overfullrule|over|outputpenalty|outputbox|output|outer|orunless|orphanpenalty|orphanpenalties|orelse|or|omit|numexpression|numexpr|numericscale|number|nullfont|nulldelimiterspace|novrule|nospaces|normalyear|normalxtokspre|normalxtoksapp|normalxtoks|normalxspaceskip|normalxleaders|normalxdefcsname|normalxdef|normalwrapuppar|normalwordboundary|normalwidowpenalty|normalwidowpenalties|normalwd|normalvtop|normalvss|normalvsplit|normalvskip|normalvsize|normalvrule|normalvpack|normalvfuzz|normalvfilneg|normalvfill|normalvfil|normalvcenter|normalvbox|normalvbadness|normalvalign|normalvadjust|normaluppercase|normalunvpack|normalunvcopy|normalunvbox|normaluntraced|normalunskip|normalunpenalty|normalunletprotected|normalunletfrozen|normalunless|normalunkern|normalunhpack|normalunhcopy|normalunhbox|normalunexpandedloop|normalunexpanded|normalunderline|normalundent|normalunboundary|normaluleaders|normaluchyph|normaluccode|normaltracingstats|normaltracingrestores|normaltracingparagraphs|normaltracingpages|normaltracingoutput|normaltracingonline|normaltracingnodes|normaltracingnesting|normaltracingmath|normaltracingmarks|normaltracingmacros|normaltracinglostchars|normaltracinglevels|normaltracinginserts|normaltracingifs|normaltracinghyphenation|normaltracinggroups|normaltracingfullboxes|normaltracingfonts|normaltracingexpressions|normaltracingcommands|normaltracingassigns|normaltracingalignments|normaltracingadjusts|normaltpack|normaltosparsescaled|normaltosparsedimension|normaltoscaled|normaltopskip|normaltopmarks|normaltopmark|normaltomathstyle|normaltolerant|normaltolerance|normaltokspre|normaltoksdef|normaltoksapp|normaltoks|normaltokenized|normaltointeger|normaltohexadecimal|normaltodimension|normaltinymuskip|normaltime|normalthinmuskip|normalthickmuskip|normalthewithoutunit|normalthe|normaltextstyle|normaltextfont|normaltextdirection|normaltabskip|normaltabsize|normalswapcsvalues|normalsupmarkmode|normalstring|normalsrule|normalsplittopskip|normalsplitmaxdepth|normalsplitfirstmarks|normalsplitfirstmark|normalsplitdiscards|normalsplitbotmarks|normalsplitbotmark|normalspan|normalspaceskip|normalspacefactor|normalsnapshotpar|normalskipdef|normalskip|normalskewedwithdelims|normalskewed|normalskewchar|normalshowtokens|normalshowthe|normalshownodedetails|normalshowlists|normalshowifs|normalshowgroups|normalshowboxdepth|normalshowboxbreadth|normalshowbox|normalshow|normalshipout|normalshapingpenalty|normalshapingpenaltiesmode|normalsfcode|normalsetmathspacing|normalsetmathprepenalty|normalsetmathpostpenalty|normalsetmathoptions|normalsetmathignore|normalsetmathatomrule|normalsetlanguage|normalsetfontid|normalsetdefaultmathcodes|normalsetbox|normalsemiprotected|normalsemiexpanded|normalscrollmode|normalscriptstyle|normalscriptspace|normalscriptscriptstyle|normalscriptscriptfont|normalscriptfont|normalscantokens|normalscantextokens|normalscaledslantperpoint|normalscaledinterwordstretch|normalscaledinterwordspace|normalscaledinterwordshrink|normalscaledfontdimen|normalscaledextraspace|normalscaledexheight|normalscaledemwidth|normalsavingvdiscards|normalsavinghyphcodes|normalsavecatcodetable|normalrpcode|normalromannumeral|normalrightskip|normalrightmarginkern|normalrighthyphenmin|normalright|normalretokenized|normalresetmathspacing|normalrelpenalty|normalrelax|normalraise|normalradical|normalquitvmode|normalquitloop|normalpxdimen|normalprotrusionboundary|normalprotrudechars|normalprotected|normalprevgraf|normalprevdepth|normalpretolerance|normalprerelpenalty|normalpreinlinepenalty|normalprehyphenchar|normalpreexhyphenchar|normalpredisplaysize|normalpredisplaypenalty|normalpredisplaygapfactor|normalpredisplaydirection|normalprebinoppenalty|normalpostinlinepenalty|normalposthyphenchar|normalpostexhyphenchar|normalpostdisplaypenalty|normalpermanent|normalpenalty|normalpdfximage|normalpdfxformresources|normalpdfxformname|normalpdfxformmargin|normalpdfxformattr|normalpdfxform|normalpdfvorigin|normalpdfuniqueresname|normalpdfuniformdeviate|normalpdftrailerid|normalpdftrailer|normalpdftracingfonts|normalpdfthreadmargin|normalpdfthread|normalpdftexversion|normalpdftexrevision|normalpdftexbanner|normalpdfsuppressptexinfo|normalpdfsuppressoptionalinfo|normalpdfstartthread|normalpdfstartlink|normalpdfsetrandomseed|normalpdfsetmatrix|normalpdfsavepos|normalpdfsave|normalpdfretval|normalpdfrestore|normalpdfreplacefont|normalpdfrefximage|normalpdfrefxform|normalpdfrefobj|normalpdfrecompress|normalpdfrandomseed|normalpdfpxdimen|normalpdfprotrudechars|normalpdfprimitive|normalpdfpkresolution|normalpdfpkmode|normalpdfpkfixeddpi|normalpdfpagewidth|normalpdfpagesattr|normalpdfpageresources|normalpdfpageref|normalpdfpageheight|normalpdfpagebox|normalpdfpageattr|normalpdfoutput|normalpdfoutline|normalpdfomitcidset|normalpdfomitcharset|normalpdfobjcompresslevel|normalpdfobj|normalpdfnormaldeviate|normalpdfnoligatures|normalpdfnames|normalpdfminorversion|normalpdfmapline|normalpdfmapfile|normalpdfmajorversion|normalpdfliteral|normalpdflinkmargin|normalpdflastypos|normalpdflastxpos|normalpdflastximagepages|normalpdflastximage|normalpdflastxform|normalpdflastobj|normalpdflastlink|normalpdflastlinedepth|normalpdflastannot|normalpdfinsertht|normalpdfinfoomitdate|normalpdfinfo|normalpdfinclusionerrorlevel|normalpdfinclusioncopyfonts|normalpdfincludechars|normalpdfimageresolution|normalpdfimagehicolor|normalpdfimagegamma|normalpdfimageapplygamma|normalpdfimageaddfilename|normalpdfignoreunknownimages|normalpdfignoreddimen|normalpdfhorigin|normalpdfglyphtounicode|normalpdfgentounicode|normalpdfgamma|normalpdffontsize|normalpdffontobjnum|normalpdffontname|normalpdffontexpand|normalpdffontattr|normalpdffirstlineheight|normalpdfendthread|normalpdfendlink|normalpdfeachlineheight|normalpdfeachlinedepth|normalpdfdraftmode|normalpdfdestmargin|normalpdfdest|normalpdfdecimaldigits|normalpdfcreationdate|normalpdfcopyfont|normalpdfcompresslevel|normalpdfcolorstackinit|normalpdfcolorstack|normalpdfcatalog|normalpdfannot|normalpdfadjustspacing|normalpausing|normalpatterns|normalparskip|normalparshapelength|normalparshapeindent|normalparshapedimen|normalparshape|normalparinitrightskip|normalparinitleftskip|normalparindent|normalparfillskip|normalparfillleftskip|normalpardirection|normalparattribute|normalparametermark|normalparametercount|normalpar|normalpagevsize|normalpagetotal|normalpagestretch|normalpageshrink|normalpagegoal|normalpagefilstretch|normalpagefillstretch|normalpagefilllstretch|normalpageextragoal|normalpagediscards|normalpagedepth|normalpageboundarypenalty|normalpageboundary|normaloverwithdelims|normalovershoot|normaloverloadmode|normaloverloaded|normaloverline|normaloverfullrule|normalover|normaloutputpenalty|normaloutputbox|normaloutput|normalouter|normalorunless|normalorphanpenalty|normalorphanpenalties|normalorelse|normalor|normalomit|normalnumexpression|normalnumexpr|normalnumericscale|normalnumber|normalnullfont|normalnulldelimiterspace|normalnovrule|normalnospaces|normalnormalizeparmode|normalnormalizelinemode|normalnorelax|normalnonstopmode|normalnonscript|normalnolimits|normalnoindent|normalnohrule|normalnoexpand|normalnoboundary|normalnoatomruling|normalnoaligned|normalnoalign|normalnewlinechar|normalmutoglue|normalmutable|normalmuskipdef|normalmuskip|normalmultiply|normalmugluespecdef|normalmuexpr|normalmskip|normalmoveright|normalmoveleft|normalmonth|normalmkern|normalmiddle|normalmessage|normalmedmuskip|normalmeaningless|normalmeaningfull|normalmeaningasis|normalmeaning|normalmaxdepth|normalmaxdeadcycles|normalmaththreshold|normalmathsurroundskip|normalmathsurroundmode|normalmathsurround|normalmathstylefontid|normalmathstyle|normalmathstackstyle|normalmathspacingmode|normalmathslackmode|normalmathscriptsmode|normalmathscriptcharmode|normalmathscriptboxmode|normalmathscale|normalmathrulesmode|normalmathrulesfam|normalmathrightclass|normalmathrel|normalmathrad|normalmathpunct|normalmathpenaltiesmode|normalmathord|normalmathopen|normalmathop|normalmathnolimitsmode|normalmathmiddle|normalmathlimitsmode|normalmathleftclass|normalmathinner|normalmathghost|normalmathfrac|normalmathforwardpenalties|normalmathfontcontrol|normalmathfencesmode|normalmathfenced|normalmatheqnogapstep|normalmathendclass|normalmathdisplayskipmode|normalmathdisplaymode|normalmathdirection|normalmathdelimitersmode|normalmathcode|normalmathclose|normalmathchoice|normalmathchardef|normalmathchar|normalmathbin|normalmathbeginclass|normalmathbackwardpenalties|normalmathatomskip|normalmathatomglue|normalmathatom|normalmathaccent|normalmarks|normalmark|normalluatexversion|normalluatexrevision|normalluatexbanner|normalluafunctioncall|normalluafunction|normalluaescapestring|normalluadef|normalluacopyinputnodes|normalluabytecodecall|normalluabytecode|normallpcode|normallowercase|normallower|normallooseness|normallong|normallocalrightboxbox|normallocalrightbox|normallocalmiddleboxbox|normallocalmiddlebox|normallocalleftboxbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolledloop|normallocalcontrolled|normallocalcontrol|normallocalbrokenpenalty|normallineskiplimit|normallineskip|normallinepenalty|normallinedirection|normallinebreakcriterium|normallimits|normallettonothing|normalletprotected|normalletmathspacing|normalletmathparent|normalletmathatomrule|normalletfrozen|normalletcsname|normalletcharcode|normallet|normalleqno|normalleftskip|normalleftmarginkern|normallefthyphenmin|normalleft|normalleaders|normallccode|normallastskip|normallastrightclass|normallastpenalty|normallastparcontext|normallastpageextra|normallastnodetype|normallastnodesubtype|normallastnamedcs|normallastloopiterator|normallastlinefit|normallastleftclass|normallastkern|normallastchknum|normallastchkdim|normallastbox|normallastboundary|normallastarguments|normallanguage|normalkern|normaljobname|normalizeparmode|normalizelinemode|normalinterlinepenalty|normalinterlinepenalties|normalinteractionmode|normalintegerdef|normalinstance|normalinsertwidth|normalinsertuncopy|normalinsertunbox|normalinsertstoring|normalinsertstorage|normalinsertprogress|normalinsertpenalty|normalinsertpenalties|normalinsertmultiplier|normalinsertmode|normalinsertmaxdepth|normalinsertlimit|normalinsertheights|normalinsertheight|normalinsertdistance|normalinsertdepth|normalinsertcopy|normalinsertbox|normalinsert|normalinputlineno|normalinput|normalinitcatcodetable|normalinherited|normalindent|normalimmutable|normalimmediate|normalignorespaces|normalignorepars|normalignorearguments|normalifx|normalifvoid|normalifvmode|normalifvbox|normaliftrue|normaliftok|normalifrelax|normalifpdfprimitive|normalifpdfabsnum|normalifpdfabsdim|normalifparameters|normalifparameter|normalifodd|normalifnumval|normalifnumexpression|normalifnum|normalifmmode|normalifmathstyle|normalifmathparameter|normalifinsert|normalifinner|normalifincsname|normalifhmode|normalifhbox|normalifhasxtoks|normalifhastoks|normalifhastok|normalifhaschar|normaliffontchar|normalifflags|normaliffalse|normalifempty|normalifdimval|normalifdimexpression|normalifdim|normalifdefined|normalifcstok|normalifcsname|normalifcondition|normalifcmpnum|normalifcmpdim|normalifchknum|normalifchkdim|normalifcat|normalifcase|normalifboolean|normalifarguments|normalifabsnum|normalifabsdim|normalif|normalhyphenpenalty|normalhyphenchar|normalhyphenationmode|normalhyphenationmin|normalhyphenation|normalht|normalhss|normalhskip|normalhsize|normalhrule|normalhpack|normalholdinginserts|normalhjcode|normalhfuzz|normalhfilneg|normalhfill|normalhfil|normalhccode|normalhbox|normalhbadness|normalhangindent|normalhangafter|normalhalign|normalgtokspre|normalgtoksapp|normalglyphyscale|normalglyphyoffset|normalglyphxscale|normalglyphxoffset|normalglyphtextscale|normalglyphstatefield|normalglyphscriptscriptscale|normalglyphscriptscale|normalglyphscriptfield|normalglyphscale|normalglyphoptions|normalglyphdatafield|normalglyph|normalgluetomu|normalgluestretchorder|normalgluestretch|normalgluespecdef|normalglueshrinkorder|normalglueshrink|normalglueexpr|normalglobaldefs|normalglobal|normalglettonothing|normalgletcsname|normalglet|normalgleaders|normalgdefcsname|normalgdef|normalfuturelet|normalfutureexpandisap|normalfutureexpandis|normalfutureexpand|normalfuturedef|normalfuturecsname|normalfrozen|normalformatname|normalfonttextcontrol|normalfontspecyscale|normalfontspecxscale|normalfontspecscale|normalfontspecifiedsize|normalfontspecifiedname|normalfontspecid|normalfontspecdef|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpandedloop|normalexpandedafter|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymathatom|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normaletoks|normalescapechar|normalerrorstopmode|normalerrorcontextlines|normalerrmessage|normalerrhelp|normaleqno|normalenforced|normalendsimplegroup|normalendmathgroup|normalendlocalcontrol|normalendlinechar|normalendinput|normalendgroup|normalendcsname|normalend|normalemergencystretch|normalelse|normalefcode|normaledefcsname|normaledef|normaldump|normaldp|normaldoublehyphendemerits|normaldivide|normaldisplaywidth|normaldisplaywidowpenalty|normaldisplaywidowpenalties|normaldisplaystyle|normaldisplaylimits|normaldisplayindent|normaldiscretionary|normaldirectlua|normaldimexpression|normaldimexpr|normaldimensiondef|normaldimendef|normaldimen|normaldetokenize|normaldelimitershortfall|normaldelimiterfactor|normaldelimiter|normaldelcode|normaldefcsname|normaldefaultskewchar|normaldefaulthyphenchar|normaldef|normaldeadcycles|normalday|normalcurrentmarks|normalcurrentloopnesting|normalcurrentloopiterator|normalcurrentiftype|normalcurrentiflevel|normalcurrentifbranch|normalcurrentgrouptype|normalcurrentgrouplevel|normalcsstring|normalcsname|normalcrcr|normalcrampedtextstyle|normalcrampedscriptstyle|normalcrampedscriptscriptstyle|normalcrampeddisplaystyle|normalcr|normalcountdef|normalcount|normalcopymathspacing|normalcopymathparent|normalcopymathatomrule|normalcopy|normalclubpenalty|normalclubpenalties|normalclearmarks|normalcleaders|normalchardef|normalchar|normalcatcodetable|normalcatcode|normalbrokenpenalty|normalboxyoffset|normalboxymove|normalboxxoffset|normalboxxmove|normalboxtotal|normalboxtarget|normalboxsource|normalboxshift|normalboxorientation|normalboxmaxdepth|normalboxgeometry|normalboxdirection|normalboxattribute|normalboxanchors|normalboxanchor|normalbox|normalboundary|normalbotmarks|normalbotmark|normalbinoppenalty|normalbelowdisplayskip|normalbelowdisplayshortskip|normalbeginsimplegroup|normalbeginmathgroup|normalbeginlocalcontrol|normalbegingroup|normalbegincsname|normalbatchmode|normalbaselineskip|normalbadness|normalautoparagraphmode|normalautomigrationmode|normalautomatichyphenpenalty|normalautomaticdiscretionary|normalattributedef|normalattribute|normalatopwithdelims|normalatop|normalatendofgrouped|normalatendofgroup|normalalluncrampedstyles|normalalltextstyles|normalallsplitstyles|normalallscriptstyles|normalallscriptscriptstyles|normalallmathstyles|normalalldisplaystyles|normalallcrampedstyles|normalaligntab|normalalignmentwrapsource|normalalignmentcellsource|normalalignmark|normalaligncontent|normalaliased|normalaftergrouped|normalaftergroup|normalafterassignment|normalafterassigned|normaladvance|normaladjustspacingstretch|normaladjustspacingstep|normaladjustspacingshrink|normaladjustspacing|normaladjdemerits|normalaccent|normalabovewithdelims|normalabovedisplayskip|normalabovedisplayshortskip|normalabove|normalXeTeXversion|normalUvextensible|normalUunderdelimiter|normalUsuperscript|normalUsuperprescript|normalUsubscript|normalUsubprescript|normalUstyle|normalUstopmath|normalUstopdisplaymath|normalUstartmath|normalUstartdisplaymath|normalUstack|normalUskewedwithdelims|normalUskewed|normalUshiftedsuperscript|normalUshiftedsuperprescript|normalUshiftedsubscript|normalUshiftedsubprescript|normalUroot|normalUright|normalUradical|normalUprimescript|normalUoverwithdelims|normalUoverdelimiter|normalUover|normalUoperator|normalUnosuperscript|normalUnosuperprescript|normalUnosubscript|normalUnosubprescript|normalUmiddle|normalUmathyscale|normalUmathxscale|normalUmathvoid|normalUmathvextensiblevariant|normalUmathuseaxis|normalUmathunderlinevariant|normalUmathunderdelimitervgap|normalUmathunderdelimitervariant|normalUmathunderdelimiterbgap|normalUmathunderbarvgap|normalUmathunderbarrule|normalUmathunderbarkern|normalUmathtopaccentvariant|normalUmathsupsubbottommax|normalUmathsupshiftup|normalUmathsupshiftdrop|normalUmathsupshiftdistance|normalUmathsuperscriptvariant|normalUmathsupbottommin|normalUmathsubtopmax|normalUmathsubsupvgap|normalUmathsubsupshiftdown|normalUmathsubshiftdrop|normalUmathsubshiftdown|normalUmathsubshiftdistance|normalUmathsubscriptvariant|normalUmathstackvgap|normalUmathstackvariant|normalUmathstacknumup|normalUmathstackdenomdown|normalUmathspacebeforescript|normalUmathspaceafterscript|normalUmathsource|normalUmathskewedfractionvgap|normalUmathskewedfractionhgap|normalUmathskeweddelimitertolerance|normalUmathruleheight|normalUmathruledepth|normalUmathradicalvgap|normalUmathradicalvariant|normalUmathradicalrule|normalUmathradicalkern|normalUmathradicaldegreeraise|normalUmathradicaldegreebefore|normalUmathradicaldegreeafter|normalUmathquad|normalUmathprimewidth|normalUmathprimevariant|normalUmathprimespaceafter|normalUmathprimeshiftup|normalUmathprimeshiftdrop|normalUmathprimeraise|normalUmathpresupshiftdistance|normalUmathpresubshiftdistance|normalUmathphantom|normalUmathoverlinevariant|normalUmathoverlayaccentvariant|normalUmathoverdelimitervgap|normalUmathoverdelimitervariant|normalUmathoverdelimiterbgap|normalUmathoverbarvgap|normalUmathoverbarrule|normalUmathoverbarkern|normalUmathoperatorsize|normalUmathopenupheight|normalUmathopenupdepth|normalUmathnumeratorvariant|normalUmathnolimitsupfactor|normalUmathnolimitsubfactor|normalUmathnolimits|normalUmathnoaxis|normalUmathlimits|normalUmathlimitbelowvgap|normalUmathlimitbelowkern|normalUmathlimitbelowbgap|normalUmathlimitabovevgap|normalUmathlimitabovekern|normalUmathlimitabovebgap|normalUmathhextensiblevariant|normalUmathfractionvariant|normalUmathfractionrule|normalUmathfractionnumvgap|normalUmathfractionnumup|normalUmathfractiondenomvgap|normalUmathfractiondenomdown|normalUmathfractiondelsize|normalUmathflattenedaccenttopshiftup|normalUmathflattenedaccentbottomshiftdown|normalUmathflattenedaccentbaseheight|normalUmathflattenedaccentbasedepth|normalUmathextrasupspace|normalUmathextrasupshift|normalUmathextrasupprespace|normalUmathextrasuppreshift|normalUmathextrasubspace|normalUmathextrasubshift|normalUmathextrasubprespace|normalUmathextrasubpreshift|normalUmathdenominatorvariant|normalUmathdelimiterundervariant|normalUmathdelimiterovervariant|normalUmathdegreevariant|normalUmathconnectoroverlapmin|normalUmathcodenum|normalUmathcode|normalUmathclass|normalUmathcharslot|normalUmathcharnumdef|normalUmathcharnum|normalUmathcharfam|normalUmathchardef|normalUmathcharclass|normalUmathchar|normalUmathbotaccentvariant|normalUmathaxis|normalUmathadapttoright|normalUmathadapttoleft|normalUmathaccentvariant|normalUmathaccenttopshiftup|normalUmathaccentbottomshiftdown|normalUmathaccentbaseheight|normalUmathaccentbasedepth|normalUmathaccent|normalUleft|normalUhextensible|normalUdelimiterunder|normalUdelimiterover|normalUdelimiter|normalUdelcodenum|normalUdelcode|normalUchar|normalUatopwithdelims|normalUatop|normalUabovewithdelims|normalUabove|normalOmegaversion|normalOmegarevision|normalOmegaminorversion|normalAlephversion|normalAlephrevision|normalAlephminorversion|normal |norelax|nonstopmode|nonscript|nolimits|noindent|nohrule|noexpand|noboundary|noatomruling|noaligned|noalign|newlinechar|mutoglue|mutable|muskipdef|muskip|multiply|mugluespecdef|muexpr|mskip|moveright|moveleft|month|mkern|middle|message|medmuskip|meaningless|meaningfull|meaningasis|meaning|maxdepth|maxdeadcycles|maththreshold|mathsurroundskip|mathsurroundmode|mathsurround|mathstylefontid|mathstyle|mathstackstyle|mathspacingmode|mathslackmode|mathscriptsmode|mathscriptcharmode|mathscriptboxmode|mathscale|mathrulesmode|mathrulesfam|mathrightclass|mathrel|mathrad|mathpunct|mathpenaltiesmode|mathord|mathopen|mathop|mathnolimitsmode|mathmiddle|mathlimitsmode|mathleftclass|mathinner|mathghost|mathfrac|mathforwardpenalties|mathfontcontrol|mathfencesmode|mathfenced|matheqnogapstep|mathendclass|mathdisplayskipmode|mathdisplaymode|mathdirection|mathdelimitersmode|mathcode|mathclose|mathchoice|mathchardef|mathchar|mathbin|mathbeginclass|mathbackwardpenalties|mathatomskip|mathatomglue|mathatom|mathaccent|marks|mark|luatexversion|luatexrevision|luatexbanner|luafunctioncall|luafunction|luaescapestring|luadef|luacopyinputnodes|luabytecodecall|luabytecode|lpcode|lowercase|lower|looseness|long|localrightboxbox|localrightbox|localmiddleboxbox|localmiddlebox|localleftboxbox|localleftbox|localinterlinepenalty|localcontrolledloop|localcontrolled|localcontrol|localbrokenpenalty|lineskiplimit|lineskip|linepenalty|linedirection|linebreakcriterium|limits|lettonothing|letprotected|letmathspacing|letmathparent|letmathatomrule|letfrozen|letcsname|letcharcode|let|leqno|leftskip|leftmarginkern|lefthyphenmin|left|leaders|lccode|lastskip|lastrightclass|lastpenalty|lastparcontext|lastpageextra|lastnodetype|lastnodesubtype|lastnamedcs|lastloopiterator|lastlinefit|lastleftclass|lastkern|lastchknum|lastchkdim|lastbox|lastboundary|lastarguments|language|kern|jobname|interlinepenalty|interlinepenalties|interactionmode|integerdef|instance|insertwidth|insertuncopy|insertunbox|insertstoring|insertstorage|insertprogress|insertpenalty|insertpenalties|insertmultiplier|insertmode|insertmaxdepth|insertlimit|insertheights|insertheight|insertdistance|insertdepth|insertcopy|insertbox|insert|inputlineno|input|initcatcodetable|inherited|indent|immutable|immediate|ignorespaces|ignorepars|ignorearguments|ifx|ifvoid|ifvmode|ifvbox|iftrue|iftok|ifrelax|ifpdfprimitive|ifpdfabsnum|ifpdfabsdim|ifparameters|ifparameter|ifodd|ifnumval|ifnumexpression|ifnum|ifmmode|ifmathstyle|ifmathparameter|ifinsert|ifinner|ifincsname|ifhmode|ifhbox|ifhasxtoks|ifhastoks|ifhastok|ifhaschar|iffontchar|ifflags|iffalse|ifempty|ifdimval|ifdimexpression|ifdim|ifdefined|ifcstok|ifcsname|ifcondition|ifcmpnum|ifcmpdim|ifchknum|ifchkdim|ifcat|ifcase|ifboolean|ifarguments|ifabsnum|ifabsdim|if|hyphenpenalty|hyphenchar|hyphenationmode|hyphenationmin|hyphenation|ht|hss|hskip|hsize|hrule|hpack|holdinginserts|hjcode|hfuzz|hfilneg|hfill|hfil|hccode|hbox|hbadness|hangindent|hangafter|halign|gtokspre|gtoksapp|glyphyscale|glyphyoffset|glyphxscale|glyphxoffset|glyphtextscale|glyphstatefield|glyphscriptscriptscale|glyphscriptscale|glyphscriptfield|glyphscale|glyphoptions|glyphdatafield|glyph|gluetomu|gluestretchorder|gluestretch|gluespecdef|glueshrinkorder|glueshrink|glueexpr|globaldefs|global|glettonothing|gletcsname|glet|gleaders|gdefcsname|gdef|futurelet|futureexpandisap|futureexpandis|futureexpand|futuredef|futurecsname|frozen|formatname|fonttextcontrol|fontspecyscale|fontspecxscale|fontspecscale|fontspecifiedsize|fontspecifiedname|fontspecid|fontspecdef|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandedloop|expandedafter|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymathatom|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|etoks|escapechar|errorstopmode|errorcontextlines|errmessage|errhelp|eqno|enforced|endsimplegroup|endmathgroup|endlocalcontrol|endlinechar|endinput|endgroup|endcsname|end|emergencystretch|else|efcode|edefcsname|edef|dump|dp|doublehyphendemerits|divide|displaywidth|displaywidowpenalty|displaywidowpenalties|displaystyle|displaylimits|displayindent|discretionary|directlua|dimexpression|dimexpr|dimensiondef|dimendef|dimen|detokenize|delimitershortfall|delimiterfactor|delimiter|delcode|defcsname|defaultskewchar|defaulthyphenchar|def|deadcycles|day|currentmarks|currentloopnesting|currentloopiterator|currentiftype|currentiflevel|currentifbranch|currentgrouptype|currentgrouplevel|csstring|csname|crcr|crampedtextstyle|crampedscriptstyle|crampedscriptscriptstyle|crampeddisplaystyle|cr|countdef|count|copymathspacing|copymathparent|copymathatomrule|copy|clubpenalty|clubpenalties|clearmarks|cleaders|chardef|char|catcodetable|catcode|brokenpenalty|boxyoffset|boxymove|boxxoffset|boxxmove|boxtotal|boxtarget|boxsource|boxshift|boxorientation|boxmaxdepth|boxgeometry|boxdirection|boxattribute|boxanchors|boxanchor|box|boundary|botmarks|botmark|binoppenalty|belowdisplayskip|belowdisplayshortskip|beginsimplegroup|beginmathgroup|beginlocalcontrol|begingroup|begincsname|batchmode|baselineskip|badness|autoparagraphmode|automigrationmode|automatichyphenpenalty|automaticdiscretionary|attributedef|attribute|atopwithdelims|atop|atendofgrouped|atendofgroup|alluncrampedstyles|alltextstyles|allsplitstyles|allscriptstyles|allscriptscriptstyles|allmathstyles|alldisplaystyles|allcrampedstyles|aligntab|alignmentwrapsource|alignmentcellsource|alignmark|aligncontent|aliased|aftergrouped|aftergroup|afterassignment|afterassigned|advance|adjustspacingstretch|adjustspacingstep|adjustspacingshrink|adjustspacing|adjdemerits|accent|abovewithdelims|abovedisplayskip|abovedisplayshortskip|above|XeTeXversion|Uvextensible|Uunderdelimiter|Usuperscript|Usuperprescript|Usubscript|Usubprescript|Ustyle|Ustopmath|Ustopdisplaymath|Ustartmath|Ustartdisplaymath|Ustack|Uskewedwithdelims|Uskewed|Ushiftedsuperscript|Ushiftedsuperprescript|Ushiftedsubscript|Ushiftedsubprescript|Uroot|Uright|Uradical|Uprimescript|Uoverwithdelims|Uoverdelimiter|Uover|Uoperator|Unosuperscript|Unosuperprescript|Unosubscript|Unosubprescript|Umiddle|Umathyscale|Umathxscale|Umathvoid|Umathvextensiblevariant|Umathuseaxis|Umathunderlinevariant|Umathunderdelimitervgap|Umathunderdelimitervariant|Umathunderdelimiterbgap|Umathunderbarvgap|Umathunderbarrule|Umathunderbarkern|Umathtopaccentvariant|Umathsupsubbottommax|Umathsupshiftup|Umathsupshiftdrop|Umathsupshiftdistance|Umathsuperscriptvariant|Umathsupbottommin|Umathsubtopmax|Umathsubsupvgap|Umathsubsupshiftdown|Umathsubshiftdrop|Umathsubshiftdown|Umathsubshiftdistance|Umathsubscriptvariant|Umathstackvgap|Umathstackvariant|Umathstacknumup|Umathstackdenomdown|Umathspacebeforescript|Umathspaceafterscript|Umathsource|Umathskewedfractionvgap|Umathskewedfractionhgap|Umathskeweddelimitertolerance|Umathruleheight|Umathruledepth|Umathradicalvgap|Umathradicalvariant|Umathradicalrule|Umathradicalkern|Umathradicaldegreeraise|Umathradicaldegreebefore|Umathradicaldegreeafter|Umathquad|Umathprimewidth|Umathprimevariant|Umathprimespaceafter|Umathprimeshiftup|Umathprimeshiftdrop|Umathprimeraise|Umathpresupshiftdistance|Umathpresubshiftdistance|Umathphantom|Umathoverlinevariant|Umathoverlayaccentvariant|Umathoverdelimitervgap|Umathoverdelimitervariant|Umathoverdelimiterbgap|Umathoverbarvgap|Umathoverbarrule|Umathoverbarkern|Umathoperatorsize|Umathopenupheight|Umathopenupdepth|Umathnumeratorvariant|Umathnolimitsupfactor|Umathnolimitsubfactor|Umathnolimits|Umathnoaxis|Umathlimits|Umathlimitbelowvgap|Umathlimitbelowkern|Umathlimitbelowbgap|Umathlimitabovevgap|Umathlimitabovekern|Umathlimitabovebgap|Umathhextensiblevariant|Umathfractionvariant|Umathfractionrule|Umathfractionnumvgap|Umathfractionnumup|Umathfractiondenomvgap|Umathfractiondenomdown|Umathfractiondelsize|Umathflattenedaccenttopshiftup|Umathflattenedaccentbottomshiftdown|Umathflattenedaccentbaseheight|Umathflattenedaccentbasedepth|Umathextrasupspace|Umathextrasupshift|Umathextrasupprespace|Umathextrasuppreshift|Umathextrasubspace|Umathextrasubshift|Umathextrasubprespace|Umathextrasubpreshift|Umathdenominatorvariant|Umathdelimiterundervariant|Umathdelimiterovervariant|Umathdegreevariant|Umathconnectoroverlapmin|Umathcodenum|Umathcode|Umathclass|Umathcharslot|Umathcharnumdef|Umathcharnum|Umathcharfam|Umathchardef|Umathcharclass|Umathchar|Umathbotaccentvariant|Umathaxis|Umathadapttoright|Umathadapttoleft|Umathaccentvariant|Umathaccenttopshiftup|Umathaccentbottomshiftdown|Umathaccentbaseheight|Umathaccentbasedepth|Umathaccent|Uleft|Uhextensible|Udelimiterunder|Udelimiterover|Udelimiter|Udelcodenum|Udelcode|Uchar|Uatopwithdelims|Uatop|Uabovewithdelims|Uabove|Omegaversion|Omegarevision|Omegaminorversion|Alephversion|Alephrevision|Alephminorversion| )(?=[^a-zA-Z])", "name" : "context.primitive.commands.primitive.tex" }, "reserved" : { diff --git a/doc/context/documents/general/manuals/columnsets.pdf b/doc/context/documents/general/manuals/columnsets.pdf index 3a031fe7c..b426cf98d 100644 Binary files a/doc/context/documents/general/manuals/columnsets.pdf and b/doc/context/documents/general/manuals/columnsets.pdf differ diff --git a/doc/context/documents/general/manuals/ontarget.pdf b/doc/context/documents/general/manuals/ontarget.pdf index e4fb54bc4..c8c3fe854 100644 Binary files a/doc/context/documents/general/manuals/ontarget.pdf and b/doc/context/documents/general/manuals/ontarget.pdf differ diff --git a/doc/context/scripts/mkiv/mtx-vscode.html b/doc/context/scripts/mkiv/mtx-vscode.html index f66227be7..7dccefd49 100644 --- a/doc/context/scripts/mkiv/mtx-vscode.html +++ b/doc/context/scripts/mkiv/mtx-vscode.html @@ -42,6 +42,7 @@ --generategenerate extension in sync with current version --programuse the given binary (e.g. codium, default: code) --startstart vscode with extension context + --lsfilegenerate language server file (work in progress)

Example

diff --git a/doc/context/scripts/mkiv/mtx-vscode.man b/doc/context/scripts/mkiv/mtx-vscode.man index 563ca0518..e364ede50 100644 --- a/doc/context/scripts/mkiv/mtx-vscode.man +++ b/doc/context/scripts/mkiv/mtx-vscode.man @@ -19,6 +19,9 @@ use the given binary (e.g. codium, default: code) .TP .B --start start vscode with extension context +.TP +.B --lsfile +generate language server file (work in progress) .SH AUTHOR More information about ConTeXt and the tools that come with it can be found at: diff --git a/doc/context/scripts/mkiv/mtx-vscode.xml b/doc/context/scripts/mkiv/mtx-vscode.xml index 4af57773a..c9f1e62b1 100644 --- a/doc/context/scripts/mkiv/mtx-vscode.xml +++ b/doc/context/scripts/mkiv/mtx-vscode.xml @@ -11,6 +11,7 @@ generate extension in sync with current version use the given binary (e.g. codium, default: code) start vscode with extension context + generate language server file (work in progress) diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-004.tex b/doc/context/sources/general/manuals/columnsets/columnsets-004.tex index cda3eb2fd..3cd217a3d 100644 --- a/doc/context/sources/general/manuals/columnsets/columnsets-004.tex +++ b/doc/context/sources/general/manuals/columnsets/columnsets-004.tex @@ -2,8 +2,6 @@ \definecolumnset[example][n=3,page=left] -\definecolor[fakerulecolor] - \definecolumnsetspan[wide] [n=2,background=contrast,color=white] \definecolumnsetspan[wider][n=4,background=contrast,color=white] diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-204.tex b/doc/context/sources/general/manuals/columnsets/columnsets-204.tex index 480eb4ce5..5b0376f8f 100644 --- a/doc/context/sources/general/manuals/columnsets/columnsets-204.tex +++ b/doc/context/sources/general/manuals/columnsets/columnsets-204.tex @@ -1,4 +1,4 @@ -\usemodule[oldfun] +\usemodule[oldfun] % really ? \environment columnsets-000 diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-205.tex b/doc/context/sources/general/manuals/columnsets/columnsets-205.tex index 98305683e..7d77d5308 100644 --- a/doc/context/sources/general/manuals/columnsets/columnsets-205.tex +++ b/doc/context/sources/general/manuals/columnsets/columnsets-205.tex @@ -1,4 +1,4 @@ -\usemodule[oldfun] +\usemodule[oldfun] % really ? \environment columnsets-000 diff --git a/doc/context/sources/general/manuals/columnsets/columnsets-702.tex b/doc/context/sources/general/manuals/columnsets/columnsets-702.tex index 770076623..7e0185ba1 100644 --- a/doc/context/sources/general/manuals/columnsets/columnsets-702.tex +++ b/doc/context/sources/general/manuals/columnsets/columnsets-702.tex @@ -1,4 +1,3 @@ - \environment columnsets-000 \definecolumnset[example][n=4,page=left] diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-differences.tex b/doc/context/sources/general/manuals/luametatex/luametatex-differences.tex index 3da557f40..8dcd2f2d1 100644 --- a/doc/context/sources/general/manuals/luametatex/luametatex-differences.tex +++ b/doc/context/sources/general/manuals/luametatex/luametatex-differences.tex @@ -279,6 +279,19 @@ end if luatex and luametatex then + local match = string.match + + local index = structures.registers.collected and structures.registers.collected.luatexindex + local found = { } + + if index then + local data = index.entries + for i=1,#data do + found[match(data[i].list[1][1],"\\tex%s*{(.-)}") or ""] = true + end + -- inspect(found) + end + luatex = table.tohash(luatex) luametatex = table.tohash(luametatex) @@ -291,6 +304,9 @@ if luatex and luametatex then context.startcolumns { n = 2 } for k, v in table.sortedhash(luatex) do if not luametatex[k] then + if not found[k] then + context.dontleavehmode() + end context.type(k) context.crlf() end @@ -307,6 +323,10 @@ if luatex and luametatex then context.startcolumns { n = 2 } for k, v in table.sortedhash(luametatex) do if not luatex[k] then + if not found[k] then + context.dontleavehmode() + context.llap("\\infofont[todo] ") + end context.type(k) context.crlf() end diff --git a/doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex b/doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex index 36336e42e..08b7d94bc 100644 --- a/doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex +++ b/doc/context/sources/general/manuals/luametatex/luametatex-introduction.tex @@ -105,21 +105,36 @@ in, so if you want to complain about \LUAMETATEX, don't bother me. Of course, if you really need professional support with these engines (or \TEX\ in general), you can always consider contacting the developers. +In 2021|--|2022 the math engine was fundamentally overhauled. As a side effect +some additional features were added. Not all are yet described in the manual: +some are still experimental and it just takes time and effort to document and the +priorities are with implementing their usage. Given the long term stability of +math and them unlikely to be used in other macro packages there is no real urge +anyway. It is also easier when we have examples of usage. Of course much is +discussed in \type {ontarget.pdf} and presentations. The same is true for +additions to \METAPOST: in due time these will be discussed in the \LUAMETAFUN\ +manual (the official \METAPOST\ manual is maintained elsewhere and should not +discuss features that are not in the \LUATEX\ version). + \blank[big] Hans Hagen \blank[2*big] -\starttabulate[|||] -\NC \LUAMETATEX\ Banner \EQ \cldcontext{LUATEXENGINE} % - \cldcontext{LUATEXVERSION} / % - \cldcontext{LUATEXFUNCTIONALITY} - \NC \NR -\NC \LUAMETATEX\ Version \EQ \currentdate \NC \NR -\NC \CONTEXT\ Version \EQ LMTX \contextversion \NC \NR -\NC \LUATEX\ Team \EQ Hans Hagen, Hartmut Henkel, Taco Hoekwater, Luigi Scarso \NC \NR -\NC \LUAMETATEX\ Team \EQ Hans Hagen, Alan Braslau, Mojca Miklavec and Wolfgang Schuster \NC \NR +\starttabulate[||pl|] +\NC \LUAMETATEX\ Banner \EQ \cldcontext{LUATEXENGINE} % + \cldcontext{LUATEXVERSION} / % + \cldcontext{LUATEXFUNCTIONALITY} + \NC \NR +\NC \LUAMETATEX\ Version \EQ \currentdate \NC \NR +\NC \CONTEXT\ Version \EQ LMTX \contextversion \NC \NR +\NC \LUATEX\ Team \EQ Hans Hagen, Hartmut Henkel, Taco Hoekwater, Luigi Scarso \NC \NR +\NC \LUAMETATEX\ Team \EQ Hans Hagen, Alan Braslau, Mojca Miklavec and Wolfgang Schuster, Mikael Sundqvist \NC \NR +\NC resources and info at \EQ www.contextgarden.net\space\vl\space + www.pragma-ade.nl\space\vl\space + www.luametatex.org\space\vl\space + ntg-context@ntg.nl (http://www.ntg.nl/mailman/listinfo/ntg-context) \NC \NR \stoptabulate \stopchapter diff --git a/doc/context/sources/general/manuals/manuals-xml-environment.tex b/doc/context/sources/general/manuals/manuals-xml-environment.tex index 5e66b6283..b5adb5b6a 100644 --- a/doc/context/sources/general/manuals/manuals-xml-environment.tex +++ b/doc/context/sources/general/manuals/manuals-xml-environment.tex @@ -1,7 +1,4 @@ % language=us -% -% author : Hans Hagen, PRAGMA ADE, NL -% license : Creative Commons, Attribution-NonCommercial-ShareAlike 3.0 Unported \usemodule[abr-01] diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-alsomath.tex b/doc/context/sources/general/manuals/ontarget/ontarget-alsomath.tex new file mode 100644 index 000000000..19acc43d3 --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-alsomath.tex @@ -0,0 +1,90 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-alsomath + +\environment ontarget-style + +\startchapter[title={The curious case of \type {\over}}] + +Normally \TEX\ scans forward but there are a few special cases. First of all, +\TEX\ is either scanning regular content or it is scanning alignments. That +results in intercepts in all kind of places. When a row ends, scanning for +inter|-|row actions happens. When the preamble is scanned there is some lookahead +with partial expansion. This has side effects but these can be avoided in +\LUAMETATEX\ by several options. Another special case is math mode. Normally +curly braces indicate grouping but not in math mode: there they construct an +atom, ordinary by default. Although most math constructs actually pick up some +following atom, in which case we get a wrapped construct that actually is +processed in a nested cal to the math processing routine. That whole has a class +and although in \LUAMETATEX\ we can make atoms with a different left end right +class, normally what is inside is hidden stays hidden. \footnote {We can think of +optionally exposing the edge classes but although it is easy to implement we see +no reason to do that now. After all, the information is actually available +already via variables.} + +Fraction commands like \type {\over} and \type {\above} are used like this: + +\starttyping +a + 1 \over 2 + b +\stoptyping + +and as there can be more than for instance single digits we can do: + +\starttyping +a + {12} \over {34} + b +\stoptyping + +but it doesn't end there because you actually need to wrap: + +\starttyping +a + {{12} \over {34}} + b +\stoptyping + +If you don't do this $b$ will become part of the fraction. The curly braces here +make the $12$, $34$ and the whole fraction made from them ordinary atoms. Because +that also influences spacing one should be aware of side effects. + +\starttyping +a + {{12} \over {34}} + b +\stoptyping + +The argument of \type {simplicity} of input is easily defeated by using + +\starttyping +a + \frac{12}{34} + b +\stoptyping + +because it also reads sequential, is in sync with other commands like \type +{\sqrt} and actually uses less tokens. It used more runtime, also because +\CONTEXT\ adds plenty of control and extras but you won't notice it. + +Because in \CONTEXT\ we assume users to use \type {\frac} it made sense to see if +we can make curly braces act like groups. In \LUAMETATEX\ we already have \type +{\beginmathgroup} and \type {\endmathgroup} that provide grouping with mathstyle +recovery, and by setting \type {\mathgroupingmode} to a non|-|zero value curly +braces will act like these. + +The effects are subtle: + +\showmakeup[mathglue] + +\startbuffer +$ a + { \bf x } ^ 2 + {\bf 1} + {\red 123} + +\frac{1}{2} + {\scriptstyle 123} + \dd $ +\stopbuffer + +\typebuffer + +\startcombination[1*2] + {\scale[scale=2500]{\showmakeup[mathglue] \mathgroupingmode 0 \getbuffer}} {\type {\mathgroupingmode 0}} + {\scale[scale=2500]{\showmakeup[mathglue] \mathgroupingmode 1 \getbuffer}} {\type {\mathgroupingmode 1}} +\stopcombination + +If you see the differences you might be happy with this new trick, if not, you +probably are not that much into optimal math spacing anyway and you can forget +about what you just read. + +\stopchapter + +\stopcomponent + diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-binary.tex b/doc/context/sources/general/manuals/ontarget/ontarget-binary.tex new file mode 100644 index 000000000..b3fbff7ec --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-binary.tex @@ -0,0 +1,99 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-binary + +\environment ontarget-style + +\startchapter[title={The binary}] + +This is a very short chapter. Because \LUAMETATEX\ is also a script runner, I +want to keep it lean and mean. So, when the size exceeded 3MB after we'd extended +the math engine, I decided to (finally) let all the \METAPOST\ number interfaces +pass pointers which brought down the binary 100K and below the 3MB mark again. + +I then became curious about how much of the binary actually is taken by +\METAPOST, and a bit of calculation indicated that we went from 20.1\percent\ down +to 18.3\percent. Here is the state per May 13, 2022: + +\startluacode + + local bytes = { + liblua = 515156, + libluaoptional= 103668, + libluarest = 82492, + libluasocket = 105700, + libmimalloc = 178800, + libminiz = 51584, + libmp = 797636, + libmp = 797636, -- went from 20.1% to 18.3% after going more pointers + -- libmp = 797636 + (3061799 - 2960091), + libpplib = 325162, + libtex = 2207190, + } + + local comment = { + liblua = "lua core, tex interfaces", + libluaoptional= "framework, several small interfaces, cerf", + libluarest = "general helper libraries", + libluasocket = "helper that interfaces to the os libraries", + libmimalloc = "memory management partial", + libminiz = "minimalistic core", + libmp = "mp graphic core, number libraries, lua interfacing", + libpplib = "pdf reading core, encryption helpers", + libtex = "extended tex core", + } + + local luametatex = 2960091 + local libraries = 0 for k, v in next, bytes do libraries = libraries + v end + local normalizer = luametatex/libraries + + local luastuff = bytes.liblua + + bytes.libluaoptional + + bytes.libluarest + + bytes.libluasocket + + -------(luametatex) context.par() + -------(libraries) context.par() + -------(normalizer) context.par() + + context.starttabulate { "|l|r|r|p|" } + context.FL() + context.NC() context.bold("component") + context.NC() context.bold("pct") + context.NC() context.bold("bytes") + context.NC() context.bold("comment") + context.NC() context.NR() + context.ML() + for k, v in table.sortedpairs(bytes) do + context.NC() context(k) + context.NC() context("%.1f",100*v/libraries) + context.NC() context(math.round(normalizer*v)) + context.NC() context(comment[k]) + context.NC() context.NR() + end + context.ML() + context.NC() context.bold("luametatex") + context.NC() + context.NC() context.bold(luametatex) + context.NC() context("2022-05-13") + context.NC() context.NR() + context.LL() + context.stoptabulate() + + function document.texstuff() context("%.1f\\percent",100 * bytes.libtex /libraries) end + function document.mpsstuff() context("%.1f\\percent",100 * bytes.libmp /libraries) end + function document.pdfstuff() context("%.1f\\percent",100 * bytes.libpplib/libraries) end + function document.luastuff() context("%.1f\\percent",100 * luastuff /libraries) end + +\stopluacode + +It is clear that the \TEX\ core is good for half of the code (\ctxlua {document . +texstuff ()}) with the accumulated \LUA\ stuff (\ctxlua {document . luastuff ()}) +and \METAPOST\ being a good second (\ctxlua {document . mpsstuff ()}) and third +and the \PDF\ interpreting library a decent fourth (\ctxlua {document . pdfstuff +()}) place. + +\stopchapter + +\stopcomponent + diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-dk.tex b/doc/context/sources/general/manuals/ontarget/ontarget-dk.tex index 5d57da1b7..d1df3b8cc 100644 --- a/doc/context/sources/general/manuals/ontarget/ontarget-dk.tex +++ b/doc/context/sources/general/manuals/ontarget/ontarget-dk.tex @@ -57,7 +57,7 @@ When compared to the already present units the \type {dk} nicely fills a gap: \TheUnit{cc} \TheUnit{cm} \TheUnit{in} - + %\TheUnit{em} %\TheUnit{ex} %\TheUnit{mu} diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-makesnosense.tex b/doc/context/sources/general/manuals/ontarget/ontarget-makesnosense.tex new file mode 100644 index 000000000..3a9e45e5e --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-makesnosense.tex @@ -0,0 +1,213 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-makesnosense + +\environment ontarget-style + +\startchapter[title={Not all makes sense}] + +The development of \CONTEXT\ is to a large extend driven by users with a wide +variety of background and usage. I can safely say that much time spent on +\CONTEXT\ qualifies as hobby (or maybe even more by curiosity). Of course I do +use it myself but personally I never make advanced documents. I'm not a writer, +nor an artist, nor a typesetter. I do like challenges so that's why we get +mechanisms that can do tricky things and some stay sort of hidden because the +practical usage is limited, although you will be surprised to see what users find +in the source and use anyway. My colleague uses \CONTEXT\ for large scale, mostly +complex and demanding \XML\ documents where one source is rendered in different +ways with different parts used. Many features in \CONTEXT\ relate to workflows. + +I like to visualize things so that's part of the development cycle. I never start +from some \quote {typographical} point of view, if only because in my experience +much design is arbitrary and personal. The output should look okay on the +average, and on reasonable simple documents there should be no need for manual +intervention. I am quite willing to accept an occasional less optimal looking +page and don't loose sleep over it. A next time, when a sentence gets added, it +might be better and the problem can be moved further down the pages. Also, given +what one runs into nowadays the average job that \TEX\ does is pretty good (but +users can of course mess up). It is boundary conditions that determine in what +direction a style or solution goes. The more abstract one argues about +typesetting and possible solutions, the less interested I often become simply +because there are no perfect solutions for every case. There are always those +last few \percent\ points that need manual intervention or some trickery and most +users get that. It is also what makes using \TEX\ fun. + +As mentioned, the \TEX\ engine does a pretty good job on average but that didn't +prevent me from extending it: the mix of \TEX, \METAPOST\ and \LUA\ is even more +fun. But what is the development agenda there? Again, it is very much driven by +what users want me to solve, but there's also the curiosity element. A recent +example of extending is the math sub system. It was already made more +configurable and some features where added but now it is really flexible. This +was doable because the heuristics in the engine are clear. It was could be done +because I had a dedicated partner in this journey. \footnote {In another chapter +I summarize what Mikael Sundqvist and I did in this context.} Other parts are +more difficult but have nevertheless been extended, to mention a few: alignments, +par building and page building. However the last two use some heuristics that are +hard to make more flexible. For instance the badness calculation combined with +the loop that tries to find breakpoints is already quite good and the somewhat +special values involved in the calculations have been optimized stepwise by Don +Knuth during the development of \TEX. + +Does that mean that one cannot add some options to influence that tuning? For sure +one can. The source has this comment: + +\startquotation + When looking for optimal line breaks, \TEX\ creates a \quote {break node} for + each break that is {\em feasible}, in the sense that there is a way to end a line + at the given place without requiring any line to stretch more than a given + tolerance. A break node is characterized by three things: the position of the + break (which is a pointer to a \type {glue_node}, \type {math_node}, \type + {penalty_node}, or \type {disc_node}); the ordinal number of the line that will + follow this breakpoint; and the fitness classification of the line that has just + ended, i.e., \type {tight_fit}, \type {decent_fit}, \type {loose_fit}, or \type + {very_loose_fit}. +\stopquotation + +The book {\TEX\ by Topic} (by Eijkhout) gives a good explanation of the way lines +are broken so there is no need to go into detail here. The code involved is not +that trivial anyway. The criteria for deciding what is bad are as follows: + +\starttabulate[|c|c|c|] +\FL +\BC verdict \BC effect \BC badness \NC \NR +\ML +\NC very loose \NC stretch \NC >= 100 \NC \NR +\NC loose \NC stretch \NC >= 13 \NC \NR +\NC decent \NC \NC <= 12 \NC \NR +\NC tight \NC shrink \NC >= 13 \NC \NR +\LL +\stoptabulate + +When the difference between two lines is more than one, they are considered to be +visually incompatible. Then, if the badness of any line exceeds \type +{pretolerance} a second pass is triggered, When \type {pretolerance} is negative +the first pass is skipped. When the badness of any line exceeds \type {tolerance} +a third pass is triggered and \type {emergencystretch} is used to make things fit. + +Where in traditional \TEX\ a lot of parsing, hyphenation, font handling and par +building is combined, in \LUAMETATEX\ we always work with completely hyphenated +and font readied lists. In traditional \TEX\ the first pass works on +the original non|-|hyphenated lists. + +In the source there is an old note that one day I will play with a plugged in +badness calculation but it also says that there might be a performance impact as +well as all kind of unforeseen side effects because \TEX\ makes sure that the +heuristics lead to values that don't result in overflow and such. + +Another note concerns more fitness values. Doing that will increase the runtime a +little but on a modern machine that is not really an issue. Shortly after I +upgraded my laptop to a somewhat newer one I decided to play with this and +therefore any performance hit would go unnoticed anyway. The following snippet +from the source shows the idea: + +\starttyping +typedef enum fitness_value { + very_loose_fit, /*tex lines stretching more than their stretchability */ + loose_fit, /*tex lines stretching 0.5 to 1.0 of their stretchability */ + semi_loose_fit, + decent_fit, /*tex for all other lines */ + semi_tight_fit, + tight_fit, /*tex lines shrinking 0.5 to 1.0 of their shrinkability */ + n_of_finess_values +} fitness_value; +\stoptyping + +This means that when we loop over \type {very_loose_fit} upto \type {tight_fit} +we have two more classes to take into account: the semi ones. Playing with that +and associating them with magic numbers quickly learned that we enter the area of +\quote {random improvements}. You can render variants and because some will look +better and others worse one can argue for any case. And as usual, once a user +(unaware of what we are doing) looks at it, things like successive hyphens, wider +spaces, rivers and such are seen as the main difference. Of course spacing is the +direct result of this kind of messing, but because the effects are actually +mostly noticeable on non|-|justified texts it then is the end|-|of|-|line spacing +that influences the verdict. \footnote {When \HZ\ showed up in \PDFTEX\ we did +experiments with random samples of its usage and \TEX ies at user group meetings +and the results were such that one could only draw the conclusion that on the +average a user has no clue if something is good or bad for what reason. The +strong emphasis in the \TEX\ community on hyphenation makes that an eye|-|catching +criterium. So having two in a successive lines even when there is really no +better solution is what draws the attention and users then tend to think that +what a survey is about is \quotation {The quality of hyphenation related to +breaking paragraphs into lines.}} + +In the end this kind of extensions make little sense. One can of course play +science and introduce all kind of imaginary cases where it might work but that is +why I started this summary by explaining what drives developments: users and +constraints. Playing science for the sake of it is pseudo science. And, as with +much science related to typesetting (probably with the exception of Don's work) +most has therefore little practical value. + +So, do we keep this feature or not? We actually do, if only to be able to +demonstrate the fuzziness of this. We have an undocumented magic parameter: + +\starttyping +\linebreakcriterium"0C0C0C63 +\stoptyping + +Actually the value is zero but when one of the four byte pairs is zero it will +default to \type {"0C} (\number"0C) or \type {"63} (\number"63). The values +concern \type {semitight}, \type {decent}, \type {semiloose}, and \type {loose}. +After some trial and error I got to the examples on the next two pages. You need +to zoom in to see the differences (the black one is the original). In setting used are: + +\starttabulate[|c|c|l|] +\BC \BC \type {\hsize} \BC \type {\setupalign} \NC \NR +\NC 1 \NC 12em \NC normal, stretch, tolerant \NC \NR +\NC 2 \NC 18em \NC flushleft \NC \NR +\stoptabulate + +As mentioned, one can look at specific expected properties and draw conclusions +but when \TEX\ cannot find a good solution using its default, it is unlikely that +alternative settings help you out, unless you do that on a per|-|paragraph basis. + +% run in default font and layout + +\startbuffer[lbc] +\def\TestA#1#2#3% + {\switchtobodyfont[10pt]% + \ruledvtop + {\hsize#1\relax + \begingroup + \setupalign[#2]% + \linebreakcriterium"#3\relax + \samplefile{tufte}\par + \endgroup + \hpack to \hsize{\hss\infofont\setstrut\strut\black\string\linebreakcriterium="#3\hss}}} + +\def\TestB#1#2% + {\startTEXpage[offset=4dk] + \hbox \bgroup + {\black \TestA{#1}{#2}{00000000}}\kern1ex + {\red \TestA{#1}{#2}{00001C00}}\kern1ex + {\green \TestA{#1}{#2}{00002C00}}\kern1ex + {\blue \TestA{#1}{#2}{00003C00}}\kern1ex + {\cyan \TestA{#1}{#2}{00004C00}}\kern1ex + {\magenta\TestA{#1}{#2}{00005C00}} + \egroup + \vskip1ex + \hbox \bgroup + \startoverlay {\TestA{#1}{#2}{00000000}} \stopoverlay \kern1ex + \startoverlay {\TestA{#1}{#2}{00000000}} {\red \TestA{#1}{#2}{00001C00}} \stopoverlay \kern1ex + \startoverlay {\TestA{#1}{#2}{00000000}} {\green \TestA{#1}{#2}{00002C00}} \stopoverlay \kern1ex + \startoverlay {\TestA{#1}{#2}{00000000}} {\blue \TestA{#1}{#2}{00003C00}} \stopoverlay \kern1ex + \startoverlay {\TestA{#1}{#2}{00000000}} {\cyan \TestA{#1}{#2}{00004C00}} \stopoverlay \kern1ex + \startoverlay {\TestA{#1}{#2}{00000000}} {\magenta\TestA{#1}{#2}{00005C00}} \stopoverlay + \egroup + \stopTEXpage} + +\TestB{12em}{normal,stretch,tolerant} +\TestB{18em}{flushleft} +\stopbuffer + +\startpagemakeup[pagestate=start,doublesided=no,page=no] + \centerbox {\typesetbuffer[lbc][page=1,frame=on,height=\dimexpr\textwidth-2ex\relax,orientation=90]} +\stoppagemakeup +\startpagemakeup[pagestate=start,doublesided=no,page=no] + \centerbox {\typesetbuffer[lbc][page=2,frame=on,width=\dimexpr\textheight-2ex\relax,orientation=90]} +\stoppagemakeup + +\stopchapter + +\stopcomponent + diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-makessense.tex b/doc/context/sources/general/manuals/ontarget/ontarget-makessense.tex new file mode 100644 index 000000000..e0a635285 --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-makessense.tex @@ -0,0 +1,110 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-makessense + +\environment ontarget-style + +\startchapter[title={But this does}] + +In \LUAMETATEX\ one can do a lot on \LUA, like what I will discuss next, but +because it is somewhat fundamental it became a core feature of the engine. It was +also quite easy to implement. It has to do with packaging. \footnote {I actually +did prototype it in \LUA\ first but wanted a more natural integration in the +end.} + +The box constructors in traditional \TEX\ accept two keywords: \type {to} for +setting an exact width and \type {spread} for specifying additional width. In +\LUAMETATEX\ we have some more like \type {shift} (a traditional \TEX\ concept), +\type {orientation}, \type {xmove}, \type {xoffset}, \type {ymove} and \type +{yoffset} for absolute positioning, \type {anchor(s)}, \type {target} and \type +{source} for relative positioning, \type {axis} and \type {class} for usage in +\math, \type {delay} for leader like boxes, the multiple \type {attr} key for +setting attributes, a special subtype directive \type {container} and \type +{direction} for controlling bidirectional typesetting, and \type {reverse} for +reversing content. The latest addition: \type {adapt} is there for controlling +and freezing glue. + +So, in addition to the width related keys \type {to} and \type {spread} we have +\type {adapt} that drives wo what width the box will be typeset. \footnote {For +the moment this keyword only has effect for horizontal boxes.} The keyword is +followed by a scale values between -1000 and 1000 where a negative value enforces +shrink and a positive value stretch. The following table shows the effects: + +\startbuffer +\starttabulate + \Test{} + \Test{to 4cm} + \Test{to \hsize} + \Test{spread 1cm} + \Test{spread -1cm} + \Test{adapt -1000} + \Test{adapt -750} + \Test{adapt -500} + \Test{adapt 0} + \Test{adapt 500} + \Test{adapt 750} + \Test{adapt 1000} +\stoptabulate +\stopbuffer + +\def\Test#1{% + \NC + \type {#1} + \NC + \showglyphs + \ruledhbox#1{Here are just some words so that we can see what happens.}% + \NC \NR +} + +\getbuffer + +When a box is typeset the natural glue width is used but when the required width +exceeds the natural width the glue stretch components kick in. With a negative +spread the shrink is used but you can get underflows. The \type {adapt} feature +freezes the glue and it removes the stretch and shrink after applying it to the +glue width with the given scale factor. So, in order to get the minimum width you +use \type {adapt -1000}. + +\def\Test#1{% + \NC + \type {#1} + \NC + \medmuskip 4mu plus 2mu minus 2mu\relax + \showmakeup[mathglue]% + \showglyphs + \ruledhbox#1{$ x + x + a = 2x + a$\hss}% + \NC \NR +} + +The reason why I decided to add this feature is that when experimenting with math +alignments I wanted to be able to see what shrink could be achieved. \footnote +{At that time Mikael and I were experimenting with consistent spacing in math +alignments.} The next example shows this: + +\getbuffer + +Once we had this new feature it made sense to add support for it to \type +{\framed}, one of the oldest macros that got extended over time: + +\startbuffer +\inframed[adaptive=1000] {Just some words} +\inframed[adaptive=500] {Just some words} +\inframed[adaptive=0] {Just some words} +\inframed[adaptive=-500] {Just some words} +\inframed[adaptive=-1000]{Just some words} +\stopbuffer + +\typebuffer + +This renders as: + +\startlinecorrection \getbuffer \stoplinecorrection + +Once we have it there other mechanisms can benefit from it, for instance natural +tables. But keep in mind that spaces are fixed in there so there is only the +expected result if glue has stretch or shrink. + +\stopchapter + +\stopcomponent + diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-math.tex b/doc/context/sources/general/manuals/ontarget/ontarget-math.tex index 50e5dff5f..83aae8bcd 100644 --- a/doc/context/sources/general/manuals/ontarget/ontarget-math.tex +++ b/doc/context/sources/general/manuals/ontarget/ontarget-math.tex @@ -1149,6 +1149,15 @@ experience. \footnote {Whenever I look at (my) old (math) school books I realize that Don Knuth had very good reasons to come up with \TEX\ and, it being hard to beat, \TEX\ still sets the standard!} +As we mention class specific options, we also need to mention the special case +where we have for instance simple formulas like single atoms (for instance +digits) are preceded by a sign (binary). These special spacing cases are handled +by a lookahead flag that can be set \typ {\setmathoptions }, like the +slack flags. More options might become available in due time. When set the +lookahead will check for the automatically injected end class atom and use that +for spacing when found. The mentioned lookahead is one of the hard coded +heuristics in the traditional engine but here we need to explicitly configure it. + \stopsubject \startsubject[title=Ghosts] @@ -1770,6 +1779,232 @@ look again at this. \stopsubject +\startsubject[title=Normalization] + +Once we had all these spacing related features upgraded it was time to move to +other aspects math typesetting. Most of that is not handled in the engine but at +the macro level. Examples of this are making sure that math spacing obeys the +rules across alignment cells, breaking long formulas into lines with various +alignment schemes. The first is accommodated by using the primitives that set the +states at the beginning and end of a formula so that is definitely something that +the engine facilitates. The second was already possible in \MKIV\ but is somewhat +more transparent now by using tagged boundary nodes. + +But for this summary we stick to discussing the more low level features and where +most of what we discussed here concerns horizontal spacing we also have some +vertical magic like the mentioned scaled fences and operators but they sort of +behave as expected given the traditional \TEX\ approach. We have some more: + +\startbuffer +\definemathradical[esqrt][sqrt][height=\maxdimen,depth=\maxdimen] +\definemathradical[ssqrt][sqrt][height=3ex,depth=2ex] + +\def\TestSqrt#1% + {test $ #1{x} + #1{\sin(x)} $ test\quad + test $ #1{x} + #1{\sin(x)} + #1{\frac{1}{x}} $ test\quad + test $ #1{x} + #1{x^2} $ test\quad + test $ \left(#1{x} + #1{x^2} \right) $ test\par} + +\TestSqrt \sqrt \blank +\TestSqrt \esqrt \blank +\TestSqrt \ssqrt \blank +\stopbuffer + +\typebuffer \getbuffer + +In the above example you see that square roots can be made to adapt themselves to +other such roots. For this we had to add an additional pass. Originally there are +just two passes: a first typesetting pass where the maximum height and depth are +collected so that in the second pass the fences can be generated and injected. +That second pass also handles the spacing and penalties. In \LUAMETATEX\ we now +have (1) radical body typesetting, (2) radical typesetting, (3) atom typesetting +with height and depth analysis, (4) fence typesetting, and finally (5) inject +spacing, penalties, remove slack, etc. + +In the examples above we set the height and depth and these are passed by +keywords to the radical primitive (most atoms and math structures accept keywords +that control rendering). Here the special values \type {\maxdimen} signal that we +have to make radicals of equal height and depth. + +In \MKII\ we had ways to snap formulas so that we got consistent line spacing. +For a while I wondered if the engine could help with that but in the end no +specific engine features are needed, but is is definitely an area that I keep an +eye on because consistent spacing is important. After all one has to draw aline +somewhere and we always have the \LUA\ callback mechanism available. + +\stopsubject + +\startsubject[title=More goodies] + +This summary will never be complete because we keep improving the rendering of +math. For instance, when Mikael checked some less used math alphabets of Latin +Modern and Bonum, as part of the goodie file completion, we were a bit horrified +by the weird top accent anchoring, inconsistent dimensions and stale italic +correction present in some glyphs. For instance there was a italic correction +after an upright blackboard lowercase \quote {f}, the upright digits had somewhat +random top accent anchors, and due to the lack of granularity in for instance +wide hats, characters that are often seen together got inconsistent wide hats. +Also clashing with scripts was possible. All this resulted in yet another bunch +of features: + +\startitemize +\startitem + In the goodie files we added efficient options to remove anchors from + alphabets (or individual characters). +\stopitem +\startitem + In the goodie files we added similar options to remove italic correction. +\stopitem +\startitem + Characters got a few extra fields: margins that can be used to cheat with + dimensions so that we can get more consistent wide accents. +\stopitem +\startitem + The engine also got the possibility to compensate for accents when + superscripts need to be anchored (by diminishing the height of accents as + well as via an offsets). +\stopitem +\stopitemize + +We expect to add (and use) some more options like this when we run into other +persistent issues. For sure there are some already that are not discussed here. +Of course one can argue why we spend time on this: in 15 years of \UNICODE\ math +usage in the \TEX\ community no one ever bothered about a wide hat over the +digit~7 and no one wondered about the bad spacing after a lowercase blackboard~f, +but as we go on we do run into these phenomena and it has become a bit of an +obsession to get it all right. \footnote {Of course all this puts the usual +bashing of Microsoft Word by users in a different perspective: limited control in +the \TEX\ engine, faulty fonts that come with \TEX\ distributions, lack of +testing and quality control, and probably the believe that all gets done well +automatically plays a role here.} + +By closely looking at default positioning of accents on top of characters Mikael +noticed that the anchor points are actually always in the middle of the topmost +left and right points of shapes. It looks like these points are calculates +automatically and therefore you end up with an anchor on top of the highest part +of the seven in Latin Modern Serif but in the middle of a seven with a flat top. +You also get anchors at the top of the vertical line in b, d, and on the sticky +bit of the g. It is a good example of being careful with automating font design. +In our case, removing most anchors and adding a few later on was the solution. +\footnote {In the original fonts and traditional \TEX\ engine a kerning pair +between a so called skew char and the character at hand is used.} + +\stopsubject + +\startsubject[title=Untold stories] + +There are of course more features but not all make sense to discuss here. For instance, +all hard coded properties are now configurable. Take for instance: + +\startbuffer +\Umathsuperscriptvariant\textstyle 1 +\Umathsubscriptvariant \textstyle 1 + +$ 1_2^3 \quad {\scriptstyle 1_2^3} \quad {\displaystyle 1_2^3}$ +\stopbuffer + +\typebuffer + +This gives us: + +\startlinecorrection +\scale[scale=3000]{\getbuffer} +\stoplinecorrection + +Here the number refers to one of the build in variants, that themselves are a +range of styles. In the next table the narrow variants are cramped: + +\def\Cramped#1{{\glyphyscale\numexpr6*\glyphyscale/10\relax#1}} + +\starttabulate[|c|l|c|c|c|c|c|c|c|c|] +\BC 0 \BC normal \NC + D \NC \Cramped{D} \NC + T \NC \Cramped{T} \NC + S \NC \Cramped{S} \NC + SS \NC \Cramped{SS} \NC +\NR +\BC 1 \BC cramped \NC + \Cramped{D} \NC \Cramped{D} \NC + \Cramped{T} \NC \Cramped{T} \NC + \Cramped{S} \NC \Cramped{S} \NC + \Cramped{SS} \NC \Cramped{SS} \NC +\NR +\BC 2 \BC subscript \NC + \Cramped{S} \NC \Cramped{S} \NC + \Cramped{S} \NC \Cramped{S} \NC + \Cramped{SS} \NC \Cramped{SS} \NC + \Cramped{SS} \NC \Cramped{SS} \NC +\NR +\BC 3 \BC superscript \NC + S \NC S \NC + S \NC S \NC + SS \NC SS \NC + SS \NC SS \NC +\NR +\BC 4 \BC small \NC + S \NC S \NC + S \NC S \NC + SS \NC SS \NC + SS \NC SS \NC +\NR +\BC 5 \BC smaller \NC + S \NC \Cramped{S} \NC + S \NC \Cramped{S} \NC + SS \NC \Cramped{SS} \NC + SS \NC \Cramped{SS} \NC +\NR +\BC 6 \BC numerator \NC + S \NC \Cramped{S} \NC + S \NC \Cramped{S} \NC + SS \NC \Cramped{SS} \NC + SS \NC \Cramped{SS} \NC +\NR +\BC 7 \BC denominator \NC + \Cramped{S} \NC \Cramped{S} \NC + \Cramped{S} \NC \Cramped{S} \NC + \Cramped{SS} \NC \Cramped{SS} \NC + \Cramped{SS} \NC \Cramped{SS} \NC +\NR +\BC 8 \BC double (superscript) \NC + S \NC \Cramped{S} \NC + S \NC \Cramped{S} \NC + SS \NC \Cramped{SS} \NC + SS \NC \Cramped{SS} \NC +\NR +\stoptabulate + +If you want you can change these values but of course we're then basically +changing some of logic behind math rendering and for sure Don Knuth had good +reasons for these defaults. + +Another untold story relates to multi scripts. When a double script is seen, +\TEX\ injects an ordinary recovery atom, issues an error message, and when told +so just continues. In order to always continue \LUAMETATEX\ introduces a mode +variable that default to minus one, as negative values will trigger the error. +Zero of positive values are interpreted as a class and bypass the error. Here is +an example of usage: + +\startbuffer +\mathdoublescriptmode + "\tohexadecimal\mathexperimentalcode % experimental class + \tohexadecimal\mathexperimentalcode % we have to set both left and right + +\setmathspacing \mathexperimentalcode \mathexperimentalcode \allmathstyles 20mu +\setmathspacing \mathordinarycode \mathexperimentalcode \allmathstyles 20mu + +$x^1_2^3_4^^5__6^^7__8$ +\stopbuffer + +\typebuffer + +We get this: + +\startlinecorrection +\scale[scale=3000]{\getbuffer} +\stoplinecorrection + +\stopsubject + \startsubject[title=Final words] One can argue that all these new features can make a document look better. But @@ -1791,14 +2026,30 @@ handle math. One can also wonder in what way massive remote editing as well as collaborative working on documents make things better. It probably becomes less personal. At meetings and platforms \TEX\ users like to bash the alternatives but in the end they are part of the same landscape and when it comes to math they -dominate. Maybe there is less to bragg about then we like: just do your thing and +dominate. Maybe there is less to brag about then we like: just do your thing and try to do it as good as possible. Rely on your eyes and pay attention to the details, which is possible because the engine provided the means. The previous text shows a few things to pay attention to. -Once all the basics that have to do with proper dimensions, spacing, penalties -and logic are dealt with, we will move on to the more high level constructs. So, -expect more. +Now that all the basics that have to do with proper dimensions, spacing, +penalties and logic are dealt with, we moved on to the more high level +constructs. We also haven't applied some features in the \CONTEXT\ code base yet +and are now experimenting with the more high level constructs. For instance the +frequently used math alignment mechanism has been overhauled to support advanced +inter atom spacing across rows, and in practice one will now more often not even +use this alignment mechanism and use the alignment features in multi|-|line +display math, if only because they offer advanced annotation. As a nice side +effect some of the mechanism that we use for this (like the improved \type +{\vadjust} primitive engine feature) also became somewhat more powerful in +regular text mode and we'll see where that brings us. + +Given the time we spend on this and given the numerous new features it will take +a while before all that got added to the engine will be documented. Of course the +usage in \CONTEXT\ also serves as documentation. This is not really a problem +because most users will happily rely on the goodie files being okay and +maintained, and usage other than \CONTEXT\ is unlikely to use these new features, +if only because it will break away from the established long term standards and +habits. \stopsubject @@ -1900,3 +2151,29 @@ expect more. % $ \eq \not $\par % gets collapsed % example: a_1=b_1+c_1 (for spacing) + + +% \startbuffer +% We test \dorecurse{20}{$x^{#1}$ and $\frac{1}{#1}^x$ and $\sqrt[#1]{x}$ and }that's it. +% \stopbuffer +% +% \startpostponing +% \startcombination[nx=2,ny=3,location=top] +% {\ruledvbox{\hsize.45\textwidth \setupformula[snap=no] \showboxes \enabletrackers [math.snapping=darkred] \getbuffer}} {} +% {\ruledvbox{\hsize.45\textwidth \setupformula[snap=no] \disabletrackers[math.snapping] \getbuffer}} {} +% {\ruledvbox{\hsize.45\textwidth \setupformula[snap=yes,snapstep=small] \showboxes \darkgreen \enabletrackers [math.snapping=darkred] \getbuffer}} {} +% {\ruledvbox{\hsize.45\textwidth \setupformula[snap=yes,snapstep=small] \darkgreen \disabletrackers[math.snapping] \getbuffer}} {} +% {\ruledvbox{\hsize.45\textwidth \setupformula[snap=yes,snapstep=big] \showboxes \darkblue \enabletrackers [math.snapping=darkred] \getbuffer}} {} +% {\ruledvbox{\hsize.45\textwidth \setupformula[snap=yes,snapstep=big] \darkblue \disabletrackers[math.snapping] \getbuffer}} {} +% \stopcombination +% \stoppostponing + + +% https://yurichev.com/mirrors/knuth1989.pdf .. DEK: +% +% I too had trouble with numerators and denominators: change no. 229 increased the +% amount of space surrounding the bar line in displayed fractions, and I should have +% made a similar change to fractions in text. (Page 68 of the new Volume 2 turned out +% to be extremely ugly because of badly spaced fractions.) T~x82 was able to improve +% the situation because of my experiences with T~x78, but even today I must take +% special precautions in my TEX documents to get certain square roots to look right. diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-metapost.tex b/doc/context/sources/general/manuals/ontarget/ontarget-metapost.tex new file mode 100644 index 000000000..521b90b63 --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-metapost.tex @@ -0,0 +1,755 @@ +% language=us runpath=texruns:manuals/ontarget + +% Musical timestamp: while adding this to the engine and I listened to many John +% Medeski (Martin and Wood) concert videos, many several times ... it kept me in +% the flow! +% +% This wrapup was written with Dave Matthews Band - Seek Up - LIVE, 12/2/2018 in +% the background, as I like these live acts. +% +% This is just a summary from my point of view. A real article is written by +% Mikael Sundqvist who also explains how arctime and its companions actually +% work. + +\startcomponent ontarget-metapost + +\environment ontarget-style + +\startchapter[title={To the point}] + +In the 2022 \NTG\ \MAPS\ 53 there is a visual very attractive article about +generative graphics with \METAPOST\ by Fabrice Larribe. These graphics actually +use very little \METAPOST\ code that use randomized paths and points and the +magic is in getting the parameters right. This means that one has to process them +a lot to figure out what looks best. Here is an example of such a graphic +definition. I will show more variants so a rendering happens later on. + +\startbuffer +\startMPdefinitions + vardef agitate_a(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel, rlength ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + R := for i=1 upto nbpoints: + point (i/nbpoints) along R + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +I will not explain the working of this because there is the article. Instead, I +will focus on something that came up when the \MAPS\ was prepared: performance. +Not only are these graphics large (which is no real problem) but they also take a +while to render (which is something that does matter when one wants to find the +best a parameters). For the first few variants we keep the same names of +variables as in the article. + +\startbuffer[final:definition] +\startMPdefinitions + vardef agitator(expr pth, iterations, points, pointfactor, noise, noisefactor) = + save currentpath, currentpoints, currentnoise ; path currentpath ; + currentpath := pth ; + currentpoints := points ; + currentnoise := noise ; + for step = 1 upto iterations : + currentpath := arcpointlist currentpoints of currentpath ; + if currentnoise <> 0 : + currentpath := + for i within currentpath : + pathpoint + randomized currentnoise + .. + endfor + cycle ; + fi + currentnoise := currentnoise * noisefactor ; + currentpoints := currentpoints * pointfactor ; + endfor ; + currentpath + enddef ; +\stopMPdefinitions +\stopbuffer + +\startbuffer[final:graphic] +\startMPcode + path pth ; + nofcircles := 15 ; iterations := 10 ; + points := 10 ; pointfactor := 1.3 ; + noise := 5 ; noisefactor := 0.8 ; + + nofcircles := 5 ; iterations := 10 ; + points := 5 ; pointfactor := 1.3 ; + +% for c = nofcircles downto 1 : +% pth := fullcircle scaled (c * 6.5) scaled 3 ; +% points := floor(arclength(pth) * 0.5) ; +% pth := agitator(pth, iterations, points, pointfactor, noise, noisefactor) ; +% eofill pth +% withcolor darkred +% withtransparency(1,4/nofcircles) ; +% draw pth +% withpen pencircle scaled 0.1 +% withtransparency(1,4/nofcircles) ; +% endfor ; + +% currentpicture := currentpicture xsized TextWidth ; + + for c = nofcircles downto 1 : + pth := fullcircle scaled (c * 6.5) scaled 3 ; + points := floor(arclength(pth) * 0.5) ; + pth := agitator(pth, iterations, points, pointfactor, noise, noisefactor) ; + draw pth + withpen pencircle scaled 1 + withcolor (c/nofcircles)[darkgreen,darkred] ; + endfor ; + + currentpicture := currentpicture xsized .5TextWidth ; +\stopMPcode +\stopbuffer + +\startplacefigure + [title={Fabrice's agitated circles, with reduced properties to keep this file small (see source).}, + reference=fig:agitated] + \getbuffer[final:definition,final:graphic] +\stopplacefigure + +In \in {figure} [fig:agitated] we show the (kind of) graphic that we are dealing +with. Such an agitator is used in a loop so that we agitate multiple circles, +where we go from large to small with for instance 4868, 4539, 4221, 3892, 3564, +3245, 2917, 2599, 2270, 1941, 1623, 1294, 966, 647 and 319 points. The article +uses a definition like below for the graphic where you can see the agitator being +applied to each of the circles. + +\starttyping[option=mp,color=] +path P ; numeric NbCircles, S, nzero, fn, tzero, ft ; + +randomseed := 10 ; +defaultscale := .05 ; + +NbCircles := 15 ; S := 10 ; nzero := 10 ; fn := 1.3 ; tzero := 5 ; ft := 0.8 ; + +for c = NbCircles downto 1 : + P := fullcircle scaled (c*6.5) scaled 3 ; + P := agitate_a(P, S, nzero, fn, tzero, ft) ; + eofill P + withcolor transparent(1,4/NbCircles,col) ; + draw P + withpen pencircle scaled 0.1 + transparent(1,4/NbCircles,.90[black,col]) ; +endfor ; +\stoptyping + +The first we noticed is that the graphics processes faster when double mode is +used: we gain 40--50\percent\ and the reason for this is that modern processors +are very good at handling doubles while \METAPOST\ in scaled mode has to do a lot +of juggling with pseudo fractions. In the timings shown later we leave that +improvement out. Also, because of this observation \CONTEXT\ \LMTX\ now defaults +its \METAPOST\ instances to method double. + +When I stared at the agitator code I noticed that the \type {along} macro was +used. That macro returns a point at given percentage along a path. In order to do +that the macro calculates the length of the path and then locates that point. The +primitive operations involved are \type {arclength}, \type {arctime of} and \type +{point of} and each these takes some time to complete. A first improvement is to +inline the \type {along} and hoist the length calculation outside the loop. + +\startbuffer +\startMPdefinitions + vardef agitate_b(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel, rlength ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + rlength := (arclength R) / nbpoints; + R := for i=1 upto nbpoints: + (point (arctime (i * rlength) of R) of R) + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +There is not that much that we can improve here but because Mikael Sundqvist and +I had just extended \METAPOST\ with some intersection improvements, it made sense +to see what we could do in the engine. In the next variant the \type {arcpoint} +combines \type {arctime of} and \type {point of}. The reason this is much +faster is that we are already on the right spot when we got the time, and we save +a sequential \type {point of} lookup, something that takes more time when paths +are longer. + +\startbuffer +\startMPdefinitions + vardef agitate_c(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel, rlength ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + rlength := (arclength R) / nbpoints; + R := for i=1 upto nbpoints: + (arcpoint (i * rlength) of R) + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +At that stage we wondered if we could come up with a primitive like \typ +{intersectiontimelist} for these points; here a list refers to a path in which we +collect the points. Now, as with the intersection primitives, \METAPOST\ loops +over the segments of a path and works within such a segment. That is why the +following variant has an explicit start at point zero: we can now use offsets +(discrete points). + +\startbuffer +\startMPdefinitions + vardef agitate_d(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel, rlength ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + rlength := (arclength R) / nbpoints; + R := for i=1 upto nbpoints: + (arcpoint (0, i * rlength) of R) + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +During an evening zooming Mikael and I figured out, by closely looking at the +source, how the arc functions work and how we could indeed come up with a list +primitive. The main issue was to use the right information. Mikael sat down to +make a pure \METAPOST\ variant and I hacked the engine. Mikael came up with a +first variant similar to the following, where we use a new primitive \typ +{subarclength}. + +\startbuffer +\startMPdefinitions + vardef arcpoints_a(expr thepath, cnt) = + save len, seg, tot, tim, stp, acc ; + numeric len ; len := length thepath ; + numeric seg ; seg := 0 ; + numeric tot ; tot := 0 ; + numeric tim ; tim := 0 ; + % + numeric acc[] ; acc[0] := 0 ; + for i = 1 upto len: + acc[i] := acc[i-1] + subarclength (i-1,i) of thepath ; + endfor; + % + numeric stp ; stp := acc[len] / cnt; + % + point 0 of thepath + for tot = stp step stp until acc[len] : + hide( + forever : + exitif ((tim < tot) and (tot < acc[seg+1])) ; + seg := seg + 1 ; + tim := acc[seg] ; + endfor ; + ) + -- (arcpoint (seg,tot-tim) of thepath) + endfor if cycle thepath : -- cycle fi + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +Getting points of a path is somewhat complicated by the fact that the length of a +closed path is different from that of an open path even if they have the same +number of so-called knots. Internally a path is always a closed loop. That way, +when \METAPOST\ runs over a path, it can easily access the first point when it's +at the end, something that is handy when that point has to be taken into account. +Therefore, the end condition of a loop over a path is the arrival at the +beginning. In the next graphic we show a bit how these first (zero) and last +points are located. One reason why the previous macros start at point one and not +at zero is that \type {arclength} can overflow due to the randomly growing path +otherwise. + +\startlinecorrection +\startMPcode + path p ; p := ((0,0) -- (1,0) -- (1,1) -- (0,1)) xyscaled (20EmWidth,5LineHeight) ; + path q ; q := p -- cycle ; + + draw p withpen pencircle scaled 4mm withcolor .2white ; + draw q withpen pencircle scaled 2mm withcolor .6white ; + + draw point length(p) of p withpen pencircle scaled 6mm withcolor green; + draw point length(q) of q withpen pencircle scaled 6mm withcolor blue ; + + draw point 0 of p withpen pencircle scaled 4mm withcolor red ; + draw point 0 of q withpen pencircle scaled 2mm withcolor yellow ; + + draw textext.lft("\strut\tttf point length of p") shifted (point length(p) of p) shifted (-6mm,0) ; + draw textext.lft("\strut\tttf point length of q") shifted (point length(q) of q) shifted (-6mm,LineHeight) ; + draw textext.lft("\strut\tttf point 0 of p") shifted (point 0 of p) shifted (-6mm,0) ; + draw textext.lft("\strut\tttf point 0 of q") shifted (point 0 of q) shifted (-6mm,-LineHeight) ; + + draw textext("\strut\tttf p is open (dark)") shifted (center p) shifted (0, LineHeight/2) ; + draw textext("\strut\tttf q is closed (light)") shifted (center q) shifted (0,-LineHeight/2) ; +\stopMPcode +\stoplinecorrection + +The difference between starting at zero or one for a cycle is show below, we get +more and more points! + +\startlinecorrection +\startMPcode + path p ; p := fullsquare ; path q ; + + for i=1 upto 100 : + q := for j=1 upto length(p) : (point j of p) -- endfor cycle ; + p := q ; + endfor ; + + draw p scaled 2cm withpen pencircle scaled 1mm withcolor "darkred" ; + drawpointlabels p scaled 2cm ; + + path p ; p := fullsquare shifted (3/2,0) ; path q ; + + for i=1 upto 100 : + q := for j=0 upto length(p) : (point j of p) -- endfor cycle ; + p := q ; + endfor ; + + draw p scaled 2cm withpen pencircle scaled 1mm withcolor "darkred" ; + drawpointlabels p scaled 2cm ; +\stopMPcode +\stoplinecorrection + +% point of +% +% if (mp_left_type(p) == mp_endpoint_knot) { +% set_number_to_unity(n); +% number_negate(n); +% } else { +% set_number_to_zero(n); +% } +% do { +% p = mp_next_knot(p); +% number_add(n, unity_t); +% } while (p != cur_exp_knot); + +% length: +% +% mp_knot p = cur_exp_knot; +% int l = mp_left_type(p) == mp_endpoint_knot ? -1 : 0; +% do { +% p = mp_next_knot(p); +% ++l; +% } while (p != cur_exp_knot); +% set_number_from_int(*n, l); + +In the next variants we will not loop over points but step to the \type +{arclength}. Watch the new \type {subarclength} primitive that starts at an +offset. This is much faster than taking a \type {subpath of}. We can move the +accumulator loop into the main loop: + +\startbuffer +\startMPdefinitions + vardef arcpoints_b(expr thepath, cnt) = + save len, aln, seg, tot, tim, stp, acc ; + numeric len ; len := length thepath ; + numeric aln ; aln := arclength thepath ; + numeric seg ; seg := 0 ; + numeric tot ; tot := 0 ; + numeric tim ; tim := 0 ; + numeric stp ; stp := aln / cnt; + numeric acc ; acc := subarclength (0,1) of thepath ; + % + point 0 of thepath + for tot = stp step stp until aln : + hide( + forever : + exitif tot < acc ; + seg := seg + 1 ; + tim := acc ; + acc := acc + subarclength (seg,seg+1) of thepath ; + endfor ; + ) + -- (arcpoint (seg,tot-tim) of thepath) + endfor if cycle thepath : -- cycle fi + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +If you don't like the \type {hide} the next variant also works okay: + +\startbuffer +\startMPdefinitions + vardef mfun_arc_point(text tot)(text thepath) = + forever : + exitif tot < acc ; + seg := seg + 1 ; + tim := acc ; + acc := acc + subarclength (seg,seg+1) of thepath ; + endfor ; + (arcpoint (seg,tot-tim) of thepath) + enddef ; + + vardef arcpoints_c(expr thepath, cnt) = + save len, aln, seg, tot, tim, stp, acc ; + numeric len ; len := length thepath ; + numeric aln ; aln := arclength thepath ; + numeric seg ; seg := 0 ; + numeric tot ; tot := 0 ; + numeric tim ; tim := 0 ; + numeric stp ; stp := aln / cnt; + numeric acc ; acc := subarclength (0,1) of thepath ; + % + point 0 of thepath + for tot = stp step stp until aln : + -- mfun_arc_point(tot)(thepath) + endfor if cycle thepath : -- cycle fi + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +This got applied in three test agitators + +\startbuffer +\startMPdefinitions + vardef agitate_e_a(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + R := arcpoints_a(R, nbpoints) ; % original Mikael + R := for i=0 upto length R: + (point i of R) + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; + + vardef agitate_e_b(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + R := arcpoints_b(R, nbpoints) ; % merged Mikael + R := for i=0 upto length R: + (point i of R) + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; + + vardef agitate_e_c(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + R := arcpoints_c(R, nbpoints) ; % split Mikael + R := for i=0 upto length R: + (point i of R) + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +The new engine primitive shortens these agitators: + +\startbuffer +\startMPdefinitions + vardef agitate_e_d(expr thepath, S, n, fn, t, ft) = + save R, nbpoints, noiselevel ; + path R ; nbpoints := n ; noiselevel := t ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + noiselevel := noiselevel * ft ; + R := arcpointlist nbpoints of R; + R := for i=0 upto length R: + (point i of R) + randomized noiselevel + .. + endfor cycle ; + endfor ; + R + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +So are we done? Did we get rid of all bottlenecks? The answer is no! We still +loop over the list in order to randomize the points. For each point we start at +the beginning of the list. Let's first rewrite the agitator a little: + +\startbuffer +\startMPdefinitions + vardef agitate_f_a(expr pth, iterations, points, pointfactor, noise, noisefactor) = + save currentpath, currentpoints, currentnoise ; path currentpath ; + currentpath := pth ; + currentpoints := points ; + currentnoise := noise ; + for step = 1 upto iterations : + currentpath := arcpointlist currentpoints of currentpath ; + currentnoise := currentnoise * noisefactor ; + currentpoints := currentpoints * pointfactor ; + if currentnoise <> 0 : + currentpath := + for i = 0 upto length currentpath: + (point i of currentpath) randomized currentnoise .. + endfor + cycle ; + fi + endfor ; + currentpath + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +One of the \LUAMETAFUN\ extensions is a fast path iterator. In the next variant +the \type {inpath} macro sets up an iterator (regular loop) with the length as +final value. In the process the given path gets passed to \LUA\ where we can +access it as array. The \type {pointof} macro (again a \LUA\ call) injects a +pair. You will be surprised that even with passing the path to \LUA\ and calling +out to \LUA\ to inject the pair this is way faster than the built|-|in \type +{point of}. + +\startbuffer +\startMPdefinitions + vardef agitate_f_b(expr pth, iterations, points, pointfactor, noise, noisefactor) = + save currentpath, currentpoints, currentnoise ; path currentpath ; + currentpath := pth ; + currentpoints := points ; + currentnoise := noise ; + for step = 1 upto iterations : + currentnoise := currentnoise * noisefactor ; + currentpoints := currentpoints * pointfactor ; + currentpath := arcpointlist currentpoints of currentpath ; + if currentnoise <> 0 : + currentpath := + for i inpath currentpath : + (pointof i) randomized currentnoise .. + endfor + cycle ; + fi + endfor ; + currentpath + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +It was tempting to see if a more native solution pays of. One problem there is +that a path is not really suitable for that as we currently don't have a data +type that represents a point. Okay, actually we sort of have because we can use +the transform record that has six points but that is something I will look into +later (it just got added to the todo list). + +The \typ {i within pth} iterator is no conceptual beauty but does the job. Just +keep in mind that it is just means for this kind of applications: run over a path +point by point. The \type {i} has the current point number. Because we run over a +path following the links we only run forward. + +\startbuffer +\startMPdefinitions + vardef agitate_f_c(expr pth, iterations, points, pointfactor, noise, noisefactor) = + save currentpath, currentpoints, currentnoise ; path currentpath ; + currentpath := pth ; + currentpoints := points ; + currentnoise := noise ; + for step = 1 upto iterations : + currentnoise := currentnoise * noisefactor ; + currentpoints := currentpoints * pointfactor ; + currentpath := arcpointlist currentpoints of currentpath ; + if currentnoise <> 0 : + currentpath := + for i within currentpath : + pathpoint + randomized currentnoise + .. + endfor + cycle ; + fi + endfor ; + currentpath + enddef ; +\stopMPdefinitions +\stopbuffer + +\typebuffer[option=tex] \getbuffer + +Any primitive solution more complex than this, like first creating a fast access +data structure, of having a double linked list, or using some iterator larger +than a simple numeric is very likely to have no gain over the super fast \LUA\ +variant. + +\startMPdefinitions + vardef agitate_x(expr thepath, S, n, fn, t, ft) = + save R, nbpoints ; + path R ; nbpoints := n ; + R := thepath ; + for s=1 upto S : + nbpoints := nbpoints * fn ; + R := arcpointlist nbpoints of R ; + endfor ; + R + enddef ; +\stopMPdefinitions + +\startMPdefinitions + def TestMe (expr method, col, justtest) = + path P ; + + randomseed := 10; + % maxknotpool := 20000; % default is 1000 + defaultscale := .05; + + % NbCircles := 1 ; S := 1 ; nzero := 10 ; fn := 1.3 ; tzero := 5 ; ft := 0.8 ; + % NbCircles := 2 ; S := 10 ; nzero := 10 ; fn := 1.3 ; tzero := 5 ; ft := 0.8 ; + % NbCircles := 10 ; S := 5 ; nzero := 10 ; fn := 1.3 ; tzero := 5 ; ft := 0.8 ; + % NbCircles := 10 ; S := 10 ; nzero := 20 ; fn := 1.3 ; tzero := 5 ; ft := 0.8 ; + NbCircles := 15 ; S := 10 ; nzero := 10 ; fn := 1.3 ; tzero := 5 ; ft := 0.8 ; + + for c = NbCircles downto 1 : + P := fullcircle scaled (c*6.5) scaled 3 ; + nzero := floor(arclength(P)*0.5); + if method == 0 : P := agitate_x (P, S, nzero, fn, tzero, ft) ; + elseif method == 1 : P := agitate_a (P, S, nzero, fn, tzero, ft) ; + elseif method == 2 : P := agitate_b (P, S, nzero, fn, tzero, ft) ; + elseif method == 3 : P := agitate_c (P, S, nzero, fn, tzero, ft) ; + elseif method == 4 : P := agitate_d (P, S, nzero, fn, tzero, ft) ; + elseif method == 51 : P := agitate_e_a(P, S, nzero, fn, tzero, ft) ; + elseif method == 52 : P := agitate_e_b(P, S, nzero, fn, tzero, ft) ; + elseif method == 53 : P := agitate_e_c(P, S, nzero, fn, tzero, ft) ; + elseif method == 54 : P := agitate_e_d(P, S, nzero, fn, tzero, ft) ; + elseif method == 61 : P := agitate_f_a(P, S, nzero, fn, tzero, ft) ; + elseif method == 62 : P := agitate_f_b(P, S, nzero, fn, tzero, ft) ; + elseif method == 63 : P := agitate_f_c(P, S, nzero, fn, tzero, ft) ; + else : + fi ; + if justtest : + % do nothing + elseif method == 0 : + draw textext("no draw") ; + else : + eofill P withcolor transparent(1,4/NbCircles,col) ; + draw P withpen pencircle scaled 0.1 transparent(1,4/NbCircles,.90[black,col]) ; + % drawpoints P withpen pencircle scaled 0.2 withcolor white ; + % drawpointlabels P withcolor white; + fi ; + endfor ; + enddef ; +\stopMPdefinitions + +We show the average runtime for three runs. Here we don't render the paths, which +takes about one second, including conversion to \PDF. Of course measurements like +this can change a bit over time. To these times you need to add about a second +for the draw and fill operations as well as conversion to a \PDF\ stream with +transparencies. The improvement in runtime makes it possible to use agitators like +this at runtime especially because normally one will not use such (combinations +of) large paths. + +\starttabulate[|T|r|i2T|r|i2T|r|] + \BC agitate_a \NC 776.26 \BC agitate_e_a \NC 291.99 \BC agitate_f_a \NC 10.82 \NC \NR % 1 51 61 + \BC agitate_b \NC 276.43 \BC agitate_e_b \NC 76.06 \BC agitate_f_b \NC 2.55 \NC \NR % 2 52 62 + \BC agitate_c \NC 259.89 \BC agitate_e_c \NC 77.27 \BC agitate_f_c \NC 2.17 \NC \NR % 3 53 63 + \BC agitate_d \NC 260.41 \BC agitate_e_d \NC 18.67 \BC \NC \NC \NR % 4 54 +\stoptabulate + +The final version of the agitator is slightly different because it depends if we +start at zero or one but gives similar results and adapt the noise before or +after the loop. + +\typebuffer[final:definition][option=tex] + +We use a similar example as in the mentioned article but coded a bit differently: + +\typebuffer[final:graphic][option=tex] + +For Mikael and me, who both like \METAPOST, it was a nice distraction from +working months on extending math in \LUAMETATEX, but it also opens up the +possibilities to do more with rendering (math) functions and graphics, so in the +end we get paid back anyway. + +\stopchapter + +\stopcomponent + +% see agitate-002.tex + +% \startluacode +% local t = { +% 0, -- also initialization +% 1, 2, 3, 4, +% 51, 52, 53, 54, +% 61, 62, 63, +% } +% for i=1,#t do +% context.writestatus("TEST RUN",t[i]) +% context("\\testfeatureonce{3}{\\startMPcalculation TestMe (%i, blue, true) ; \\stopMPcalculation}",t[i]) +% end +% \stopluacode + +% \testfeatureonce{1}{\startMPpage TestMe ( 0, \MPcolor{darkblue} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe ( 1, \MPcolor{darkblue} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe ( 2, \MPcolor{darkblue} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe ( 3, \MPcolor{darkred} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe ( 4, \MPcolor{darkgreen} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe (51, \MPcolor{darkred} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe (52, \MPcolor{darkgreen} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe (53, \MPcolor{darkblue} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe (54, \MPcolor{darkblue} , false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe (61, \MPcolor{darkyellow}, false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe (62, \MPcolor{darkyellow}, false) ; \stopMPpage} +% \testfeatureonce{1}{\startMPpage TestMe (63, \MPcolor{darkyellow}, false) ; \stopMPpage} + +% \stoptext diff --git a/doc/context/sources/general/manuals/ontarget/ontarget-ridofjit.tex b/doc/context/sources/general/manuals/ontarget/ontarget-ridofjit.tex new file mode 100644 index 000000000..e26e9bb7e --- /dev/null +++ b/doc/context/sources/general/manuals/ontarget/ontarget-ridofjit.tex @@ -0,0 +1,111 @@ +% language=us runpath=texruns:manuals/ontarget + +\startcomponent ontarget-dk + +\environment ontarget-style + +\startchapter[title={Getting rid of jit}] + +At the \NTG\ meeting there was a short discussion about performance of the +\OPENTYPE\ font machinery. Currently we still support \LUAJITTEX\ and although +the \MKIV\ code base is mostly separated from the \LMTX\ one there is still some +compromise going on, as some \LUA\ code is shared and needs to adapt to the fact +that \LUAJIT\ is stuck to \LUA 5.2 (sort of). One reason why we still support +\LUAJITTEX\ is that there are users who like the performance gain. However, if +these can switch to \CONTEXT\ we could get rid of \LUAJITTEX\ support. After all, +\LUAJIT\ is stalled as is \FFI. Of course a plain \TEX\ users can object to using +\CONTEXT\ but one can just use the basics and be as plain as possible. + +Performance of \LUAMETATEX\ is quite okay and it often performs better than +\LUATEX\ or even \LUAJITTEX. One border case is for instance the somewhat +overdone in terms of split feature steps is the Brill font. So, I decided to do +some tests on my 2017 laptop that had replaced the 2013 one (Windows 10). We use +cross compiled binaries. Here is the test: + +\starttyping +% \enableexperiments[fonts.compact] + +\definefont[Fa][brill*default @ 10pt] +\definefont[Fb][brill*default @ 12pt] +\definefont[Fc][brill-bf*default @ 10pt] +\definefont[Fd][brill-bf*default @ 12pt] + +\start \testfeatureonce{1000}{ + \Fa \samplefile{tufte} \samplefile{tufte}\par +}\stop \page \edef\TimeA{\elapsedtime} +\start \testfeatureonce{1000}{ + \Fa \samplefile{tufte}\par\Fb\samplefile{tufte}\par +}\stop \page \edef\TimeB{\elapsedtime} +\start \testfeatureonce{1000}{ + \Fa \samplefile{tufte} \Fb\samplefile{tufte}\par +}\stop \page \edef\TimeC{\elapsedtime} +\start \testfeatureonce{1000}{ + \Fa \samplefile{tufte} \Fd\samplefile{tufte}\par + \Fb \samplefile{tufte} \Fc\samplefile{tufte}\par +}\stop \page \edef\TimeD{\elapsedtime} + +\startTEXpage[offset=10pt] + \strut\infofont + 2 par 1 font : \TimeA\par + 2 par 2 font : \TimeB\par + 1 par 2 font : \TimeC\par + 1 par 4 font : \TimeD\par +\stopTEXpage +\stoptyping + +The next table shows the best times from three tests where each one produces 1693 +pages in the default layout. We're talking of one run as normally \CONTEXT\ will +run till a two pass stable state is reached (unless it is forced to one run), +although in practice fixing a few typos will not for an extra run. Keep in mind +that in \LUAMETATEX\ we have a \LUA\ driven backend that is more flexible with +respect to fonts but therefore also adds some extra overhead. Also keep in mind +that four different fonts per paragraph is a rare case. + +\starttabulate[|lT|c|c|c|c|] +\NC + \BC 2 pars 1 font + \BC 2 pars 2 fonts + \BC 1 par 2 fonts + \BC 1 par 4 fonts +\NC \NR +\ML +\BC luametatex \NC 8.9 \NC 9.4 \NC 12.1 \NC 24.6 \NC \NR +\BC luametatex compact \NC 8.9 \NC 9.3 \NC 9.3 \NC 23.9 \NC \NR +\BC luatex \NC 10.0 \NC 10.3 \NC 14.5 \NC 31.2 \NC \NR +\BC luajittex \NC 8.0 \NC 8.1 \NC 11.4 \NC 23.2 \NC \NR +\stoptabulate + +One should take these measurements with a grain of salt because it also depends +on the system load, but it shows that there is no real need to favor a +\LUAJITTEX\ setup over a \LUAMETATEX\ one. In the meantime the default \LUATEX\ +binaries exceed 7~MB (and the hb variant adds quite a bit more) which +\LUAMETATEX\ stays around 3~MB which is nice for high performance setups with +thousands of (small) runs. + +Just for the record, when we use Dejavu Serif we get 2767 pages and the following +timings. Again, the differences between \LUAMETATEX\ and \LUAJITTEX\ is not that +significant, especially when you realize that we're not doing anything fancy that +more runtime. In practice fonts are only part of the story. + +\starttabulate[|lT|c|c|c|c|] +\NC + \BC 2 pars 1 font + \BC 2 pars 2 fonts + \BC 1 par 2 fonts + \BC 1 par 4 fonts +\NC \NR +\ML +\BC luametatex \NC 4.2 \NC 4.4 \NC 5.0 \NC 10.8 \NC \NR +\BC luametatex compact \NC 4.2 \NC 4.5 \NC 4.5 \NC 10.5 \NC \NR +\BC luatex \NC 4.9 \NC 5.0 \NC 6.2 \NC 13.3 \NC \NR +\BC luajittex \NC 4.0 \NC 4.0 \NC 5.0 \NC 10.3 \NC \NR +\stoptabulate + +% I tried to run \XETEX\ on the same file but that failed for some reason (it looks +% like it got stuck in updating the font database; some 50~MB binaries are needed +% so I guess I messed up somewhere). + +\stopchapter + +\stopcomponent + diff --git a/doc/context/sources/general/manuals/ontarget/ontarget.tex b/doc/context/sources/general/manuals/ontarget/ontarget.tex index d6b7ad149..d17b09979 100644 --- a/doc/context/sources/general/manuals/ontarget/ontarget.tex +++ b/doc/context/sources/general/manuals/ontarget/ontarget.tex @@ -18,6 +18,12 @@ \component ontarget-dk \component ontarget-anchoring \component ontarget-math + \component ontarget-binary + \component ontarget-metapost + \component ontarget-makesnosense + \component ontarget-makessense + \component ontarget-alsomath + \component ontarget-ridofjit \stopbodymatter \stopdocument diff --git a/metapost/context/base/mpxl/mp-base.mpxl b/metapost/context/base/mpxl/mp-base.mpxl index f2538910e..9bba87d23 100644 --- a/metapost/context/base/mpxl/mp-base.mpxl +++ b/metapost/context/base/mpxl/mp-base.mpxl @@ -288,7 +288,8 @@ vardef round primary u = round(point i of u) .. controls round(postcontrol i of u) and round(precontrol i+1 of u) .. endfor - if cycle u : cycle else : point infinity of u fi +% if cycle u : cycle else : point infinity of u fi + if cycle u : cycle else : nocycle fi else : u fi @@ -435,9 +436,9 @@ newinternal temp_internal_n ; path temp_path_a, temp_path_b ; pair temp_pair_dz, temp_pair_z[] ; -vardef direction expr t of p = - postcontrol t of p - precontrol t of p -enddef ; +% vardef direction expr t of p = +% postcontrol t of p - precontrol t of p +% enddef ; vardef directionpoint expr z of p = temp_internal_a := directiontime z of p ; @@ -479,7 +480,8 @@ tertiarydef p softjoin q = endgroup enddef ; -permanent direction, directionpoint, intersectionpoint, softjoin ; +% permanent direction, directionpoint, intersectionpoint, softjoin ; +permanent directionpoint, intersectionpoint, softjoin ; newinternal join_radius ; path cuttings ; % what got cut off @@ -499,7 +501,7 @@ tertiarydef a cutbefore b = % tries to cut as little as possible enddef ; tertiarydef a cutafter b = - reverse (reverse a cutbefore b) + reverse (reverse a cutbefore b) % inefficient, a and b are copied hide(cuttings := reverse cuttings) enddef ; @@ -808,7 +810,8 @@ def plain_pickup_path primary q = enddef ; vardef savepen = - temp_pen_stack[incr temp_pen_count] = currentpen ; + temp_pen_count := temp_pen_count + 1 ; + temp_pen_stack[temp_pen_count] = currentpen ; temp_pen_l[temp_pen_count] = pen_lft ; temp_pen_r[temp_pen_count] = pen_rt ; temp_pen_t[temp_pen_count] = pen_top ; diff --git a/metapost/context/base/mpxl/mp-lmtx.mpxl b/metapost/context/base/mpxl/mp-lmtx.mpxl index 89c39ee89..be4ae716b 100644 --- a/metapost/context/base/mpxl/mp-lmtx.mpxl +++ b/metapost/context/base/mpxl/mp-lmtx.mpxl @@ -284,6 +284,8 @@ vardef lmt_do_outline = kind := "r" ; elseif kind = "fillup" : kind := "u" ; + elseif kind = "path" : + kind := "p" ; fi ; currentoutlinetext := currentoutlinetext + 1 ; lua.mp.mf_outline_text( @@ -1166,67 +1168,67 @@ def lmt_do_chart_legend = fi ; enddef ; -vardef lmt_do_chart_circle = - image ( - lmt_do_chart_start("chart:circle") ; - if (nofsamplesets > 0) and (nofsamples > 0) : - nofsamplesets := 1 ; - save p, r, s, first, last, total, factor, n, percentage ; - path p, r, s[] ; boolean percentage ; - percentage := getparameter "percentage" ; - total := 0 ; - for i = 1 upto nofsamples : - total := total + getparameter "samples" (1) i ; % () is needed else 1i - endfor ; - factor := 100/total ; - first := 0 ; - p := fullcircle ysized (height) ; - r := origin -- (2*height,0) ; - for i = 1 upto nofsamples : - fillcolor := getparameter "fillcolors" i ; - value := (getparameter "samples" (1) i) * factor ; - last := first + (360/100) * value ; - s[i] := ((p cutbefore (r rotated first)) cutafter (r rotated last)) ; - % fill - % (if innerradius > 0 : reverse (s[i] scaled innerradius) else : origin fi) -- s[i] -- cycle - % withcolor fillcolor - % ; - fill origin -- s[i] -- cycle withcolor fillcolor ; - first := last ; - endfor ; - if linewidth > 0 : - if drawcolor = "" : - drawcolor := backgroundcolor ; - fi ; - for i = 1 upto nofsamples : - interim linecap := butt ; - draw origin -- (point 0 of s[i]) withpen pencircle scaled linewidth withcolor drawcolor ; - draw origin -- (point length(s[i]) of s[i]) withpen pencircle scaled linewidth withcolor drawcolor ; - endfor ; - fi ; - if getparameter "showlabels" : - first := 0 ; - for i = 1 upto nofsamples : - value := getparameter "samples" (1) i ; - last := first + (360/100) * value * factor ; - draw lmt_do_chart_text (s,i,value) - shifted ((labelfraction*(height/2),0) rotated ((first+last)/2)) ; - first := last ; - endfor ; - fi ; - lmt_do_chart_legend ; - n := getparameter "originsize" ; - if n > 0 : - fill fullcircle scaled n withcolor "white" ; - fi ; - n := getparameter "innerradius" ; - if n > 0 : - fill fullcircle scaled n withcolor "white" ; - fi ; - fi ; - lmt_do_chart_stop ; - ) -enddef ; +% vardef lmt_do_chart_circle = +% image ( +% lmt_do_chart_start("chart:circle") ; +% if (nofsamplesets > 0) and (nofsamples > 0) : +% nofsamplesets := 1 ; +% save p, r, s, first, last, total, factor, n, percentage ; +% path p, r, s[] ; boolean percentage ; +% percentage := getparameter "percentage" ; +% total := 0 ; +% for i = 1 upto nofsamples : +% total := total + getparameter "samples" (1) i ; % () is needed else 1i +% endfor ; +% factor := 100/total ; +% first := 0 ; +% p := fullcircle ysized (height) ; +% r := origin -- (2*height,0) ; +% for i = 1 upto nofsamples : +% fillcolor := getparameter "fillcolors" i ; +% value := (getparameter "samples" (1) i) * factor ; +% last := first + (360/100) * value ; +% s[i] := ((p cutbefore (r rotated first)) cutafter (r rotated last)) ; +% % fill +% % (if innerradius > 0 : reverse (s[i] scaled innerradius) else : origin fi) -- s[i] -- cycle +% % withcolor fillcolor +% % ; +% fill origin -- s[i] -- cycle withcolor fillcolor ; +% first := last ; +% endfor ; +% if linewidth > 0 : +% if drawcolor = "" : +% drawcolor := backgroundcolor ; +% fi ; +% for i = 1 upto nofsamples : +% interim linecap := butt ; +% draw origin -- (point 0 of s[i]) withpen pencircle scaled linewidth withcolor drawcolor ; +% draw origin -- (point length(s[i]) of s[i]) withpen pencircle scaled linewidth withcolor drawcolor ; +% endfor ; +% fi ; +% if getparameter "showlabels" : +% first := 0 ; +% for i = 1 upto nofsamples : +% value := getparameter "samples" (1) i ; +% last := first + (360/100) * value * factor ; +% draw lmt_do_chart_text (s,i,value) +% shifted ((labelfraction*(height/2),0) rotated ((first+last)/2)) ; +% first := last ; +% endfor ; +% fi ; +% lmt_do_chart_legend ; +% n := getparameter "originsize" ; +% if n > 0 : +% fill fullcircle scaled n withcolor "white" ; +% fi ; +% n := getparameter "innerradius" ; +% if n > 0 : +% fill fullcircle scaled n withcolor "white" ; +% fi ; +% fi ; +% lmt_do_chart_stop ; +% ) +% enddef ; vardef lmt_do_chart_circle = image ( @@ -1253,6 +1255,9 @@ vardef lmt_do_chart_circle = for i = 1 upto nofsamples : fillcolor := getparameter "fillcolors" i ; value := (getparameter "samples" (1) i) * factor ; + if (value > -eps) and (value < eps) : + value := eps ; % otherwise weird effects with zero + fi ; last := first if clockwise : - else : + fi (360/100) * value ; s[i] := ((p cutbefore (r rotated first)) cutafter (r rotated last)) ; % fill diff --git a/metapost/context/base/mpxl/mp-mlib.mpxl b/metapost/context/base/mpxl/mp-mlib.mpxl index 0958d8767..411095e5d 100644 --- a/metapost/context/base/mpxl/mp-mlib.mpxl +++ b/metapost/context/base/mpxl/mp-mlib.mpxl @@ -303,7 +303,7 @@ pair mfun_laboff.llft ; mfun_laboff.llft := -(.7,.7) ; pair mfun_laboff.lrt ; mfun_laboff.lrt := (.7,-.7) ; pair mfun_laboff.d ; mfun_laboff.d := mfun_laboff ; -pair mfun_laboff.dlft ; mfun_laboff.dlft := mfun_laboff.lft ; +pair mfun_laboff.dlft ; mfun_laboff.dlft := mfun_laboff.lft ; pair mfun_laboff.drt ; mfun_laboff.drt := mfun_laboff.rt ; pair mfun_laboff.origin ; mfun_laboff.origin := mfun_laboff ; pair mfun_laboff.raw ; mfun_laboff.raw := mfun_laboff ; @@ -1758,15 +1758,16 @@ permanent format, formatted ; % new -def fillup text t = draw t withpostscript "both" enddef ; % we use draw because we need the proper boundingbox -def eofillup text t = draw t withpostscript "eoboth" enddef ; % we use draw because we need the proper boundingbox -def eofill text t = fill t withpostscript "evenodd" enddef ; -def nofill text t = fill t withpostscript "collect" enddef ; -def nodraw text t = draw t withpostscript "collect" enddef ; -def dodraw text t = draw t withpostscript "flush" enddef ; -% eodraw text t = draw t withpostscript "evenodd" enddef ; -def dofill text t = fill t withpostscript "flush" enddef ; -def eoclip text t = clip t withpostscript "evenodd" enddef ; +def fillup text t = draw t withpostscript "both" enddef ; % we use draw because we need the proper boundingbox +def eofillup text t = draw t withpostscript "eoboth" enddef ; % we use draw because we need the proper boundingbox +def eofill text t = fill t withpostscript "evenodd" enddef ; +def nofill text t = fill t withpostscript "collect" enddef ; +def nodraw text t = draw t withpostscript "collect" enddef ; +def dodraw text t = draw t withpostscript "flush" enddef ; +% eodraw text t = draw t withpostscript "evenodd" enddef ; +def dofill text t = fill t withpostscript "flush" enddef ; +def eoclip text t = clip t withpostscript "evenodd" enddef ; +def enfill text t = fill t withpostscript "envelope" enddef ; permanent fillup, eofillup, eofill, nofill, nodraw, dodraw, dofill, eoclip ; diff --git a/metapost/context/base/mpxl/mp-tool.mpxl b/metapost/context/base/mpxl/mp-tool.mpxl index 6593b5e9a..e448ebb5a 100644 --- a/metapost/context/base/mpxl/mp-tool.mpxl +++ b/metapost/context/base/mpxl/mp-tool.mpxl @@ -326,26 +326,53 @@ enddef ; % let push_boundingbox = pushboundingbox ; % downward compatible % let pop_boundingbox = popboundingbox ; % downward compatible -vardef boundingbox primary p = - if (path p) or (picture p) : - llcorner p -- lrcorner p -- urcorner p -- ulcorner p - else : - origin - fi -- cycle -enddef; +% vardef boundingbox primary p = +% if (path p) or (picture p) : +% llcorner p -- lrcorner p -- urcorner p -- ulcorner p +% else : +% origin +% fi -- cycle +% enddef; + +% vardef boundingbox primary p = +% if (path p) or (picture p) : +% save a, b ; pair a, b ; a := llcorner p ; b:= urcorner p ; +% a -- (xpart b, ypart a) -- b -- (xpart a, ypart b) +% else : +% origin +% fi -- cycle +% enddef; + +% vardef innerboundingbox primary p = +% top rt llcorner p -- +% top lft lrcorner p -- +% bot lft urcorner p -- +% bot rt ulcorner p -- cycle +% enddef; + +% vardef outerboundingbox primary p = +% bot lft llcorner p -- +% bot rt lrcorner p -- +% top rt urcorner p -- +% top lft ulcorner p -- cycle +% enddef; + +let boundingbox = corners ; vardef innerboundingbox primary p = - top rt llcorner p -- - top lft lrcorner p -- - bot lft urcorner p -- - bot rt ulcorner p -- cycle + save b ; path b ; b := corners p ; + top rt point 0 of b -- + top lft point 1 of b -- + bot lft point 2 of b -- + bot rt point 3 of b -- cycle enddef; vardef outerboundingbox primary p = - bot lft llcorner p -- - bot rt lrcorner p -- - top rt urcorner p -- - top lft ulcorner p -- cycle + save b ; path b ; b := corners p ; + bot lft point 0 of b -- + bot rt point 1 of b -- + top rt point 2 of b -- + top lft point 3 of b -- cycle enddef; % def inner_boundingbox = innerboundingbox enddef ; @@ -369,11 +396,12 @@ enddef; vardef boundingradius primary p = if picture p : + pair c ; c := -center p; max( - abs((llcorner p) shifted -center p), - abs((lrcorner p) shifted -center p), - abs((urcorner p) shifted -center p), - abs((ulcorner p) shifted -center p) + abs((llcorner p) shifted c), + abs((lrcorner p) shifted c), + abs((urcorner p) shifted c), + abs((ulcorner p) shifted c) ) elseif pen p : boundingradius image(draw makepath p ;) @@ -715,30 +743,196 @@ enddef ; %D A few normalizing macros: +% primarydef p xsized w = +% (p if (bbwidth (p) > 0) and (w > 0) : scaled (w/bbwidth (p)) fi) +% enddef ; +% primarydef p xsized w = +% begingroup +% save b, l ; path b; +% b := corners p ; +% l := xpart point 1 of b - xpart point 0 of b ; +% (p if (l > 0) and (w > 0) : scaled (w/l) fi) +% endgroup +% enddef ; primarydef p xsized w = - (p if (bbwidth (p) > 0) and (w > 0) : scaled (w/bbwidth (p)) fi) + begingroup + save r, l ; pair r; + r := xrange p ; + l := ypart r - xpart r ; + (p if (l > 0) and (w > 0) : scaled (w/l) fi) + endgroup enddef ; +% primarydef p ysized h = +% (p if (bbheight(p) > 0) and (h > 0) : scaled (h/bbheight(p)) fi) +% enddef ; +% primarydef p ysized h = +% begingroup +% save b, l ; path b; +% b := corners p ; +% l := ypart point 2 of b - ypart point 1 of b ; +% (p if (l > 0) and (h > 0) : scaled (h/l) fi) +% endgroup +% enddef ; primarydef p ysized h = - (p if (bbheight(p) > 0) and (h > 0) : scaled (h/bbheight(p)) fi) + begingroup + save r, l ; pair r ; + r := yrange p ; + l := ypart r - xpart r ; + (p if (l > 0) and (h > 0) : scaled (h/l) fi) + endgroup enddef ; -primarydef p xysized s = +% primarydef p xysized s = % a one step transform might be faster +% begingroup +% save wh, w, h ; pair wh ; numeric w, h ; +% wh := paired (s) ; w := bbwidth(p) ; h := bbheight(p) ; +% p +% if (w > 0) and (h > 0) : +% if xpart wh > 0 : xscaled (xpart wh/w) fi +% if ypart wh > 0 : yscaled (ypart wh/h) fi +% fi +% endgroup +% enddef ; +primarydef p xysized s = % a one step transform might be faster begingroup - save wh, w, h ; pair wh ; numeric w, h ; - wh := paired (s) ; w := bbwidth(p) ; h := bbheight(p) ; + save wh, w, h, b ; pair wh ; path b; + b := corners p ; + w := xpart point 1 of b - xpart point 0 of b ; + h := ypart point 2 of b - ypart point 1 of b ; + wh := paired (s) ; p - if (w>0) and (h>0) : + if (w > 0) and (h > 0) : if xpart wh > 0 : xscaled (xpart wh/w) fi if ypart wh > 0 : yscaled (ypart wh/h) fi fi endgroup enddef ; +% to be tested +% +% primarydef p xysized s = +% begingroup +% save wh, w, h ; pair wh ; numeric w, h ; +% wh := paired (s) ; w := bbwidth(p) ; h := bbheight(p) ; +% if (w > 0) and (h > 0) : +% transform t ; t := identity if xpart wh > 0 : xscaled (xpart wh/w) fi if ypart wh > 0 : yscaled (ypart wh/h) +% fi ; +% p if (w > 0) and (h > 0) : transformed t fi +% endgroup +% enddef ; + let sized = xysized ; permanent xsized, ysized, xysized, sized ; +% primarydef p xynormalized s = +% begingroup +% save w, h ; numeric w, h ; +% w := bbwidth(p) ; +% h := bbheight(p) ; +% if (w > 0) and (h > 0) : +% save t, wh ; transform t ; pair wh ; +% wh := paired (s) ; +% t := identity +% shifted - llcorner p +% if xpart wh > 0 : xscaled (xpart wh/w) fi +% if ypart wh > 0 : yscaled (ypart wh/h) fi +% ; +% p transformed t +% else : +% p +% fi +% endgroup +% enddef ; +primarydef p xynormalized s = + begingroup save w, h, b ; path b; + b := corners p ; + w := xpart point 1 of b - xpart point 0 of b ; + h := ypart point 2 of b - ypart point 1 of b ; + if (w > 0) and (h > 0) : + save t, wh ; transform t ; pair wh ; + wh := paired (s) ; + t := identity + shifted - llcorner p + if xpart wh > 0 : xscaled (xpart wh/w) fi + if ypart wh > 0 : yscaled (ypart wh/h) fi + ; + p transformed t + else : + p + fi + endgroup +enddef ; + +% primarydef p xnormalized s = +% begingroup +% save w ; numeric w ; +% w := bbwidth(p) ; +% if (w > 0) : +% save t ; transform t ; +% t := identity +% shifted - llcorner p +% if s > 0 : xscaled (s/w) fi +% ; +% p transformed t +% else : +% p +% fi +% endgroup +% enddef ; +primarydef p xnormalized s = + begingroup save h, r ; pair r ; + r := xrange p ; + w := ypart r - xpart r ; + if (w > 0) : + save t ; transform t ; + t := identity + shifted - llcorner p + if s > 0 : xscaled (s/w) fi + ; + p transformed t + else : + p + fi + endgroup +enddef ; + +% primarydef p ynormalized s = +% begingroup +% save h ; numeric h ; +% h := bbheight(p) ; +% if (h > 0) : +% save t ; transform t ; +% t := identity +% shifted - llcorner p +% if s > 0 : yscaled (s/h) fi +% ; +% p transformed t +% else : +% p +% fi +% endgroup +% enddef ; +primarydef p ynormalized s = + begingroup save h, r ; pair r ; + r := yrange p ; + h := ypart r - xpart r ; + if (h > 0) : + save t ; transform t ; + t := identity + shifted - llcorner p + if s > 0 : yscaled (s/h) fi + ; + p transformed t + else : + p + fi + endgroup +enddef ; + +permanent xnormalized, ynormalized, xynormalized ; + % def xscale_currentpicture(expr w) = % obsolete % currentpicture := currentpicture xsized w ; % enddef; @@ -775,10 +969,10 @@ lrcircle := origin -- (0,-.5) & (0,-.5){right} .. (+.5,0) & (+.5,0) -- cycle ; path tcircle, bcircle, lcircle, rcircle ; -tcircle = origin -- (+.5,0) & (+.5,0) {up} .. (0,+.5) .. {down} (-.5,0) -- cycle ; -bcircle = origin -- (-.5,0) & (-.5,0) {down} .. (0,-.5) .. {up} (+.5,0) -- cycle ; -lcircle = origin -- (0,+.5) & (0,+.5) {left} .. (-.5,0) .. {right} (0,-.5) -- cycle ; -rcircle = origin -- (0,-.5) & (0,-.5) {right} .. (+.5,0) .. {left} (0,+.5) -- cycle ; +tcircle := origin -- (+.5,0) & (+.5,0) {up} .. (0,+.5) .. {down} (-.5,0) -- cycle ; +bcircle := origin -- (-.5,0) & (-.5,0) {down} .. (0,-.5) .. {up} (+.5,0) -- cycle ; +lcircle := origin -- (0,+.5) & (0,+.5) {left} .. (-.5,0) .. {right} (0,-.5) -- cycle ; +rcircle := origin -- (0,-.5) & (0,-.5) {right} .. (+.5,0) .. {left} (0,+.5) -- cycle ; path urtriangle, ultriangle, lltriangle, lrtriangle ; % watch out: it's contrary to what you expect and starts in the origin @@ -801,13 +995,18 @@ path unitdiamond, fulldiamond ; unitdiamond := (.5,0) -- (1,.5) -- (.5,1) -- (0,.5) -- cycle ; fulldiamond := unitdiamond shifted - center unitdiamond ; +path unithexagon, fullhexagon ; + +unithexagon := for i within (unitcircle rotated 45/2) : pathpoint -- endfor cycle ; +fullhexagon := unithexagon shifted - center unithexagon ; + permanent fullsquare, unitcircle, urcircle, ulcircle, llcircle, lrcircle, tcircle, bcircle, lcircle, rcircle, urtriangle, ultriangle, lltriangle, lrtriangle, triangle, uptriangle, downtriangle, lefttriangle, righttriangle, - unitdiamond, fulldiamond ; + unitdiamond, fulldiamond, unithexagon, fullhexagon ; %D More robust: @@ -870,12 +1069,11 @@ enddef ; %D usage: \type{innerpath peepholed outerpath}. %D -%D beginfig(1); -%D def fullsquare = (unitsquare shifted -center unitsquare) enddef ; +%D \startMPcode %D fill (fullsquare scaled 200) withcolor red ; %D path p ; p := (fullcircle scaled 100) ; bboxmargin := 0 ; %D fill p peepholed bbox p ; -%D endfig; +%D \stopMPcode secondarydef p peepholed q = begingroup @@ -1118,11 +1316,24 @@ primarydef p crossed d = ( fi ) enddef ; +% vardef laddered primary p = % was expr +% point 0 of p +% for i=1 upto length(p) : +% -- (xpart (point i of p), ypart (point (i-1) of p)) -- (point i of p) +% endfor +% enddef ; + vardef laddered primary p = % was expr - point 0 of p - for i=1 upto length(p) : - -- (xpart (point i of p), ypart (point (i-1) of p)) -- (point i of p) + save a; pair a ; a := point 0 of p ; a -- + for i within p : + if i > 0 : (xpart pathpoint, ypart a) -- pathpoint -- fi + hide(a := pathpoint) endfor + if cycle p : + (xpart point 0 of p, ypart a) -- point 0 of p -- cycle + else : + nocycle + fi enddef ; permanent crossed, laddered ; @@ -1168,18 +1379,55 @@ primarydef p randomshifted s = endgroup enddef ; +% vardef mfun_randomized_path(expr p,s) = +% for i=0 upto length(p)-1 : +% (point i of p) .. controls +% ((postcontrol i of p) randomshifted s) and +% ((precontrol (i+1) of p) randomshifted s) .. +% endfor +% if cycle p : +% cycle +% else : +% (point length(p) of p) +% fi +% enddef; +% +% Here is a Mikael Sundqvist improved version. This time we also use +% some new functionality. + vardef mfun_randomized_path(expr p,s) = - for i=0 upto length(p)-1 : - (point i of p) .. controls - ((postcontrol i of p) randomshifted s) and - ((precontrol (i+1) of p) randomshifted s) .. - endfor - if cycle p : - cycle - else : - (point length(p) of p) - fi -enddef; + save r, oldr, newr, firstr, l ; pair r, oldr, newr, firstr ; + r := paired(s) ; + l := length(p) ; + newr := (-1/2+uniformdeviate(1),-1/2+uniformdeviate(1)) xyscaled r ; + firstr := newr ; + for i within p : + hide ( + oldr := newr ; + newr := (-1/2+uniformdeviate(1),-1/2+uniformdeviate(1)) xyscaled r ; + ) + pathpoint .. + controls (pathpostcontrol shifted oldr ) + and ((deltaprecontrol 1) shifted if (i <> l - 1) : - newr else : - firstr fi) .. + endfor if cycle p : cycle else : nocycle fi +enddef ; + + +vardef mfun_randomrotated_path(expr p, s) = + save r, oldr, newr, firstr, l ; + l := length(p) ; + newr := (-1/2+uniformdeviate(1))*s ; + firstr := newr ; + for i within p : + hide ( + oldr := newr ; + newr := (-1/2+uniformdeviate(1)) * s ; + ) + pathpoint .. + controls (pathpostcontrol rotatedaround(pathpoint, oldr) ) + and ((deltaprecontrol 1) rotatedaround(deltapoint 1, if (i <> l - 1) : newr else : firstr fi)) .. + endfor if cycle p : cycle else : nocycle fi +enddef ; vardef mfun_randomized_picture(expr p,s)(text rnd) = save currentpicture ; @@ -1218,6 +1466,16 @@ primarydef p randomizedcontrols s = ( fi ) enddef ; +primarydef p randomrotatedcontrols s = ( + if path p : + mfun_randomrotated_path(p,s) + elseif picture p : + mfun_randomized_picture(p,s)(randomrotatedcontrols) + else : + p randomized s + fi +) enddef ; + primarydef p randomized s = ( if path p : for i=0 upto length(p)-1 : @@ -1271,7 +1529,8 @@ primarydef p randomized s = ( fi ) enddef ; -permanent superellipsed, squeezed, randomshifted, randomized, randomizedcontrols ; +permanent superellipsed, squeezed, randomshifted, randomized, + randomizedcontrols, randomrotatedcontrols ; %D Not perfect (alternative for interpath) @@ -1520,22 +1779,33 @@ def drawcontrollines expr c = path temp_c ; temp_c := c ; mfun_draw_controlline def drawpointlabels expr c = path temp_c ; temp_c := c ; mfun_draw_pointlabels enddef ; def mfun_draw_points text t = - for i=0 upto length(temp_c) if cycle temp_c : -1 fi : - normaldraw point i of temp_c mfun_opt_pnt t ; +% for i=0 upto length(temp_c) if cycle temp_c : -1 fi : +% normaldraw point i of temp_c mfun_opt_pnt t ; +% endfor ; + for i within temp_c : + normaldraw pathpoint mfun_opt_pnt t ; endfor ; enddef; def mfun_draw_controlpoints text t = - for i=0 upto length(temp_c) : - normaldraw precontrol i of temp_c mfun_opt_ctr t ; - normaldraw postcontrol i of temp_c mfun_opt_ctr t ; +% for i=0 upto length(temp_c) : +% normaldraw precontrol i of temp_c mfun_opt_ctr t ; +% normaldraw postcontrol i of temp_c mfun_opt_ctr t ; +% endfor ; + for i within temp_c : + normaldraw pathprecontrol t mfun_opt_pnt t ; + normaldraw pathpostcontrol t mfun_opt_pnt t ; endfor ; enddef; def mfun_draw_controllines text t = - for i=0 upto length(temp_c) : - normaldraw point i of temp_c -- precontrol i of temp_c mfun_opt_lin t ; - normaldraw point i of temp_c -- postcontrol i of temp_c mfun_opt_lin t ; +% for i=0 upto length(temp_c) : +% normaldraw point i of temp_c -- precontrol i of temp_c mfun_opt_lin t ; +% normaldraw point i of temp_c -- postcontrol i of temp_c mfun_opt_lin t ; +% endfor ; + for i within temp_c : + normaldraw pathpoint -- pathprecontrol t mfun_opt_pnt t ; + normaldraw pathpoint -- pathpostcontrol t mfun_opt_pnt t ; endfor ; enddef; @@ -1544,6 +1814,7 @@ numeric pointlabelscale ; pointlabelscale := 0 ; string pointlabelfont ; pointlabelfont := "" ; def mfun_draw_pointlabels text asked_options = + % todo: for i within temp_c : pathdirection for i=0 upto length(temp_c) if cycle temp_c : -1 fi : pair temp_u ; temp_u := unitvector(direction i of temp_c) rotated if swappointlabels : - fi 90 ; pair temp_p ; temp_p := (point i of temp_c) ; @@ -2631,12 +2902,31 @@ permanent smoothed, cornered, smoothcornered ; % 0 % fi % enddef ; - +% vardef bbwidth primary p = +% if unknown p : +% 0 +% elseif path p or picture p : +% xpart (lrcorner p - llcorner p) +% else : +% 0 +% fi +% enddef ; +% vardef bbwidth primary p = +% if unknown p : +% 0 +% elseif path p or picture p : +% save b ; path b; b := corners p ; +% xpart point 0 of b - xpart point 1 of b +% else : +% 0 +% fi +% enddef ; vardef bbwidth primary p = if unknown p : 0 elseif path p or picture p : - xpart (lrcorner p - llcorner p) + save r ; pair r ; r := xrange p ; + ypart r - xpart r else : 0 fi @@ -2653,12 +2943,31 @@ enddef ; % 0 % fi % enddef ; - +% vardef bbheight primary p = +% if unknown p : +% 0 +% elseif path p or picture p : +% ypart (urcorner p - lrcorner p) +% else : +% 0 +% fi +% enddef ; +% vardef bbheight primary p = +% if unknown p : +% 0 +% elseif path p or picture p : +% save b ; path b; b := corners p ; +% ypart point 2 of b - ypart point 1 of b +% else : +% 0 +% fi +% enddef ; vardef bbheight primary p = if unknown p : 0 elseif path p or picture p : - ypart (urcorner p - lrcorner p) + save r ; pair r ; r := yrange p ; + ypart r - xpart r else : 0 fi @@ -2817,15 +3126,19 @@ permanent withgray ; % an improved plain mp macro -vardef center primary p = - if pair p : - p - else : - .5[llcorner p, urcorner p] - fi -enddef; +% vardef center primary p = +% if pair p : +% p +% else : +% .5[llcorner p, urcorner p] +% fi +% enddef; +% +% permanent center ; -permanent center ; +vardef center primary p = + centerof p +enddef ; % new, yet undocumented @@ -3041,12 +3354,26 @@ permanent break ; %D New too: +% primarydef p xstretched w = ( +% p if (bbwidth (p)>0) and (w>0) : xscaled (w/bbwidth (p)) fi +% ) enddef ; primarydef p xstretched w = ( - p if (bbwidth (p)>0) and (w>0) : xscaled (w/bbwidth (p)) fi + begingroup save l, r ; pair r; + r := xrange p ; + l := ypart r - xpart r ; + p if (l > 0) and (w > 0) : xscaled (w/l (p)) fi + endgroup ) enddef ; +% primarydef p ystretched h = ( +% p if (bbheight(p)>0) and (h>0) : yscaled (h/bbheight(p)) fi +% ) enddef ; primarydef p ystretched h = ( - p if (bbheight(p)>0) and (h>0) : yscaled (h/bbheight(p)) fi + begingroup save l, r ; pair r; + r := yrange p ; + l := ypart r - xpart r ; + p if (l > 0) and (h > 0) : yscaled (h/l (p)) fi + endgroup ) enddef ; permanent xstretched, ystretched ; @@ -4061,3 +4388,31 @@ tertiarydef p cutafterlast q = mfun_p endgroup ; enddef ; + +% I don't want to define this path every time I make a demo: + +vardef starring(expr e) = + save a, b, c, d ; + pair a, b, c, d ; + a := (-1,-1) ; b := ( 1,-1) ; + c := ( 1, 1) ; d := (-1, 1) ; + a -- (.5[a,b] shifted (0,-e)) -- + b -- (.5[b,c] shifted (e, 0)) -- + c -- (.5[c,d] shifted (0, e)) -- + d -- (.5[d,a] shifted (-e,0)) -- cycle +enddef ; + +vardef dashing (expr pth, shp, stp) = + for i within arcpointlist stp of pth : + shp + rotated angle(pathdirection) + shifted pathpoint + && + endfor nocycle +enddef ; + +% like center, mod and div this is a candidate for a primitive + +% vardef centerofmass primary p = +% (origin for i within p : + pathpoint endfor) / length(p) +% enddef ; diff --git a/scripts/context/lua/mtx-cache.lua b/scripts/context/lua/mtx-cache.lua index 4f378ff0a..79b9a118c 100644 --- a/scripts/context/lua/mtx-cache.lua +++ b/scripts/context/lua/mtx-cache.lua @@ -78,7 +78,8 @@ local function erase(banner,path,list) local kept = 0 for i=1,#list do local filename = list[i] - if find(filename,"luatex%-cache") then + -- if find(filename,"luatex%-cache") then + if find(filename,LUATEXENGINE .. "%-cache") then remove(filename) if isfile(filename) then kept = kept + 1 diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua index 125750c26..014a7d4ef 100644 --- a/scripts/context/lua/mtx-context.lua +++ b/scripts/context/lua/mtx-context.lua @@ -379,7 +379,7 @@ local function backup(jobname,run,kind,filename) end end if validfile(filename) then - local tmpname = f_tempfile(jobname,kind,run or 1) + local tmpname = f_tempfile_i(jobname,kind,run or 1) report("copying %a into %a",filename,tmpname) file.copy(filename,tmpname) else diff --git a/scripts/context/lua/mtx-patterns.lua b/scripts/context/lua/mtx-patterns.lua index bcc8c0861..7f5c1c556 100644 --- a/scripts/context/lua/mtx-patterns.lua +++ b/scripts/context/lua/mtx-patterns.lua @@ -102,8 +102,8 @@ scripts.patterns.list = { { "deo", "hyph-de-1901", "german, old spelling" }, { "de", "hyph-de-1996", "german, new spelling" }, -- { "??", "hyph-de-ch-1901", "swiss german" }, - -- { "??", "hyph-el-monoton", "greek" }, - -- { "gr", "hyph-el-polyton", "greek" }, + -- { "??", "hyph-el-polyton", "greek" }, + { "gr", "hyph-el-monoton", "greek" }, { "agr", "hyph-grc", "ancient greek", ignored_ancient_greek }, { "gb", "hyph-en-gb", "british english" }, { "us", "hyph-en-us", "american english" }, diff --git a/scripts/context/lua/mtx-unicode.lua b/scripts/context/lua/mtx-unicode.lua index 8dc0a8607..3866fd86b 100644 --- a/scripts/context/lua/mtx-unicode.lua +++ b/scripts/context/lua/mtx-unicode.lua @@ -500,7 +500,7 @@ end local preamble -local function splitdefinition(str,index) +local function splitdefinition(filename,str,index) local l = splitlines(str) local t = { } if index then @@ -522,7 +522,7 @@ local function splitdefinition(str,index) t[k] = d end else - report("problem: %s",s) + report("problem: %i %s => %s",i,filename,s) end end end @@ -599,13 +599,13 @@ function scripts.unicode.load() index = textfiles.index ~= "" and io.loaddata(textfiles.index) or "", } texttables = { - unicodedata = splitdefinition(textdata.unicodedata,true), - bidimirroring = splitdefinition(textdata.bidimirroring,true), - linebreak = splitdefinition(textdata.linebreak,true), - eastasianwidth = splitdefinition(textdata.eastasianwidth,true), - standardizedvariants = splitdefinition(textdata.standardizedvariants,false), - arabicshaping = splitdefinition(textdata.arabicshaping,true), - casefolding = splitdefinition(textdata.casefolding,true), + unicodedata = splitdefinition(textfiles.unicodedata,textdata.unicodedata,true), + bidimirroring = splitdefinition(textfiles.bidimirroring,textdata.bidimirroring,true), + linebreak = splitdefinition(textfiles.linebreak,textdata.linebreak,true), + eastasianwidth = splitdefinition(textfiles.eastasianwidth,textdata.eastasianwidth,true), + standardizedvariants = splitdefinition(textfiles.standardizedvariants,textdata.standardizedvariants,false), + arabicshaping = splitdefinition(textfiles.arabicshaping,textdata.arabicshaping,true), + casefolding = splitdefinition(textfiles.casefolding,textdata.casefolding,true), index = splitindex(textdata.index), } -- diff --git a/scripts/context/lua/mtx-vscode.lua b/scripts/context/lua/mtx-vscode.lua index 309bff69c..474ce97d4 100644 --- a/scripts/context/lua/mtx-vscode.lua +++ b/scripts/context/lua/mtx-vscode.lua @@ -142,6 +142,7 @@ local helpinfo = [[ generate extension in sync with current version use the given binary (e.g. codium, default: code) start vscode with extension context + generate language server file (work in progress) @@ -165,6 +166,8 @@ local application = logs.application { helpinfo = helpinfo, } +local concat = table.concat + local report = application.report require("util-jsn") @@ -730,7 +733,7 @@ function scripts.vscode.generate(targetpath) for i=1,#t do result[i] = string.gsub(t[i],".",escapes) end - return table.concat(result,"|") + return concat(result,"|") end local function capture(str) @@ -902,12 +905,12 @@ function scripts.vscode.generate(targetpath) -- mp argument {...text} local function words(list) table.sort(list,sorter) - return "\\\\(" .. table.concat(list,"|") .. ")" .. "(?=[^a-zA-Z])" + return "\\\\(" .. concat(list,"|") .. ")" .. "(?=[^a-zA-Z])" end local function bwords(list) table.sort(list,sorter) - return "(\\\\(" .. table.concat(list,"|") .. "))\\s*(\\{)" + return "(\\\\(" .. concat(list,"|") .. "))\\s*(\\{)" end local function ewords() @@ -916,7 +919,7 @@ function scripts.vscode.generate(targetpath) local function environments(list) table.sort(list,sorter) - last = table.concat(list,"|") + last = concat(list,"|") if #list > 1 then last = "(?:" .. last .. ")" end @@ -1221,7 +1224,7 @@ function scripts.vscode.generate(targetpath) local function words(list) table.sort(list,sorter) - return "(" .. table.concat(list,"|") .. ")" .. "(?=[^a-zA-Z\\_@!?\127-\255])" + return "(" .. concat(list,"|") .. ")" .. "(?=[^a-zA-Z\\_@!?\127-\255])" end local capturedshortcuts = oneof(mergedshortcuts) @@ -1434,7 +1437,7 @@ function scripts.vscode.generate(targetpath) local function words(list) table.sort(list,sorter) - return "(" .. table.concat(list,"|") .. ")" .. "(?=[^a-zA-Z])" + return "(" .. concat(list,"|") .. ")" .. "(?=[^a-zA-Z])" end local capturedkeywords = words { @@ -2151,7 +2154,7 @@ function scripts.vscode.generate(targetpath) local function words(list) table.sort(list,sorter) - local str = table.concat(list,"|") + local str = concat(list,"|") return "(" .. str .. "|" .. string.upper(str) .. ")" .. "(?=[^a-zA-Z])" end @@ -2534,7 +2537,7 @@ function scripts.vscode.generate(targetpath) local function words(list) table.sort(list,sorter) - return "\\b(" .. table.concat(list,"|") .. ")\\b" + return "\\b(" .. concat(list,"|") .. ")\\b" end local capturedkeywords = words { -- copied from cpp.lua @@ -3190,6 +3193,261 @@ function scripts.vscode.generate(targetpath) end +-- {name: 'inherits: \\setupframed'} + +function scripts.vscode.ls(forcedinterface) + + local interfaces = forcedinterfaces or environment.files or userinterfaces + if not interfaces.en then + -- loaded as script so we have "cont-yes.*" as name + interfaces = { "en" } + end + -- + local filename = "context-en.xml" + local xmlfile = resolvers.findfile(filename) or "" + if xmlfile == "" then + report("unable to locate %a",filename) + return + end + -- + local filename = "mult-def.lua" + local deffile = resolvers.findfile(filename) or "" + if deffile == "" then + report("unable to locate %a",filename) + return + end + local interface = dofile(deffile) + if not interface or not next(interface) then + report("invalid file %a",filename) + return + end + local variables = interface.variables + local constants = interface.constants + local commands = interface.commands + local elements = interface.elements + -- + local collected = { } + -- + report("loading %a",xmlfile) + local xmlroot = xml.load(xmlfile) + + local interfaces = { "en" } + +-- +-- +-- + + local function arguments(e) + local p = { } + for e in xml.collected(e,"/cd:arguments/*") do + local tg = e.tg + if tg == "keywords" then + local a = { } + for e in xml.collected(e,"/*") do + a[#a+1] = { + name = e.at.type + } + end + p[#p+1] = { + type = tg, + attributes = #a > 0 and a or nil, + optional = e.at.optional == "yes" or nil + } + elseif tg == "assignments" then + local a = { } + for e in xml.collected(e,"/parameter") do + local c = { e.at.name, "=" } + for e in xml.collected(e,"/constant") do + c[#c+1] = e.at.type + end + if #c > 0 then + a[#a+1] = { + name = concat(c, " ") + } + end + end + p[#p+1] = { + type = tg, + attributes = #a > 0 and a or nil, + optional = e.at.optional == "yes" or nil + } + else -- e.g. "content" + p[#p+1] = { + type = tg, + optional = e.at.optional == "yes" or nil + } + end + end + return p + end + + local function details(e, f) + local d = { "\\" .. f } + local n = 0 + for e in xml.collected(e,"/cd:arguments/*") do + local tg = e.tg + if tg == "keywords" then + n = n + 1 + if e.at.optional == "yes" then + d[#d+1] = "[optional " .. n .. ":..,..]" + else + d[#d+1] = "[mandate " .. n .. ":..,..]" + end + elseif tg == "assignments" then + n = n + 1 + if e.at.optional == "yes" then + d[#d+1] = "[optional " .. n .. ":key=val,key=val,..]" + else + d[#d+1] = "[mandate " .. n .. ":key=val,key=val,..]" + end + else + d[#d+1] = "{ content }" + end + end + return concat(d, " ") + end + + -- this one is a bit weird as it could be assembled in the languages server on the fly and + -- it bloats the file + + local function documentation(c) + local d = { c.detail } + local p = c.params + if p then + local n = 0 + for i=1,#p do + local pi = p[i] + local ti = pi.type + local ai = pi.attributes + if ti == "keywords" then + n = n + 1 + if pi.optional then + d[#d+1] = "[optional keywords " .. n .. "]" + else + d[#d+1] = "[mandate keywords " .. n .. "]" + end + if ai then + local t = { } + for j=1,#ai do + t[#t+1] = ai[j].name + end + if #t > 0 then + d[#d+1] = concat(t," ") + end + end + elseif ti == "assignments" then + n = n + 1 + if pi.optional then + d[#d+1] = "[optional assignments " .. n .. "]" + else + d[#d+1] = "[mandate assignments " .. n .. "]" + end + if ai then + local t = { } + for j=1,#ai do + t[#t+1] = ai[j].name + end + if #t > 0 then + d[#d+1] = concat(t,"\n") + end + end + else + if pi.optional then + d[#d+1] = "{ optional content }" + else + d[#d+1] = "{ mandate content }" + end + end + end + end + c.documentation = concat(d,"\n") +-- inspect(c.documentation) + end + + if not xml.expand then + -- will be in next version + function xml.expand(root,pattern,whatever) + local collected = xml.applylpath(root,pattern) + if collected then + for c=1,#collected do + local e = collected[c] + local p = e.__p__ + if p then + local d = p.dt + local n = e.ni + local t = whatever(e,p) + if type(t) == "table" then + d[n] = t[1] + for i=2,#t do + n = n + 1 + table.insert(d,n,t[i]) + end + elseif t then + d[n] = t + end + end + end + end + end + end + + do + local c = { } + xml.expand(xmlroot,"/cd:interface/cd:interface/cd:command/**/inherit",function(e) + local f = c[e.at.name] + if not f then + f = xml.first(xmlroot,"/cd:interface/cd:interface/cd:command[@name='" .. e.at.name .. "']/cd:arguments") + c[e.at.name] = f + end + return f and f.dt + end) + end + + for i=1,#interfaces do + local interface = interfaces[i] + local start = elements.start[interface] or elements.start.en + local stop = elements.stop [interface] or elements.stop .en + for e in xml.collected(xmlroot,"cd:interface/cd:command") do + local at = e.at + local name = at["name"] or "" + local type = at["type"] + if name ~= "" then + local c = commands[name] + local n = (c and (c[interface] or c.en)) or c or name + local sequence = xml.all(e,"/cd:sequence/*") + if at.generated == "yes" then + -- skip (for now) + elseif type ~= "environment" then + collected[#collected+1] = { + name = n, + detail = details(e, n), + params = arguments(e), -- why not "parameters" + } + else + local f = start .. n + collected[#collected+1] = { + name = f, + start = f, + stop = stop .. n, + detail = details(e, f), + params = arguments(e), -- why not "parameters" + } + end + end + end + end + for i=1,#collected do + documentation(collected[i]) + end + local jsonname = "vscode-context-ls.json" + -- local exmlname = "vscode-context-ls.xml" + report("") + report("vscode ls file saved: %s",jsonname) + report("") + io.savedata(jsonname,utilities.json.tojson(collected)) + -- io.savedata(exmlname,tostring(xmlroot)) +end + function scripts.vscode.start() local path = locate() if path then @@ -3203,6 +3461,8 @@ end if environment.arguments.generate then scripts.vscode.generate() +elseif environment.vscodels then + scripts.vscode.ls() elseif environment.arguments.start then scripts.vscode.start() elseif environment.arguments.exporthelp then @@ -3211,4 +3471,6 @@ else application.help() end -scripts.vscode.generate([[t:/vscode/data/context/extensions]]) +scripts.vscode.ls() + +-- scripts.vscode.generate([[t:/vscode/data/context/extensions]]) diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 12104b82c..042ef82c7 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -6433,7 +6433,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-math"] = package.loaded["l-math"] or true --- original size: 2549, stripped down to: 1825 +-- original size: 2679, stripped down to: 1909 if not modules then modules={} end modules ['l-math']={ version=1.001, @@ -6446,8 +6446,14 @@ if not math.ceiling then math.ceiling=math.ceil end if not math.round then - local floor=math.floor - function math.round(x) return floor(x+0.5) end + if xmath then + math.round=xmath.round + else + local floor=math.floor + function math.round(x) + return x<0 and -floor(-x+0.5) or floor(x+0.5) + end + end end if not math.div then local floor=math.floor @@ -14220,7 +14226,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-deb"] = package.loaded["util-deb"] or true --- original size: 10136, stripped down to: 6832 +-- original size: 10593, stripped down to: 7102 if not modules then modules={} end modules ['util-deb']={ version=1.001, @@ -14514,6 +14520,22 @@ local function showtraceback(rep) end end debugger.showtraceback=showtraceback +if luac then + local show,dump=luac.print,string.dump + function luac.inspect(v) + if type(v)=="function" then + local ok,str=xpcall(dump,function() end,v) + if ok then + v=str + end + end + if type(v)=="string" then + show(v,true) + else + print(v) + end + end +end end -- of closure @@ -16310,7 +16332,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 62809, stripped down to: 36225 +-- original size: 62810, stripped down to: 36225 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -19111,7 +19133,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true --- original size: 33708, stripped down to: 20953 +-- original size: 34661, stripped down to: 21511 if not modules then modules={} end modules ['lxml-aux']={ version=1.001, @@ -19377,6 +19399,36 @@ function xml.replace(root,pattern,whatever) end end end +function xml.expand(root,pattern,whatever) + local collected=root and xmlapplylpath(root,pattern) + if collected then + for c=1,#collected do + local e=collected[c] + local p=e.__p__ + if p then + if trace_manipulations then + report('expanding',pattern,c,e) + end + local d=p.dt + local n=e.ni + local t=whatever(e,p) + if t then + if type(t)=="table" then + t=xmlcopy(t) + d[n]=t[1] + for i=2,#t do + n=n+1 + insert(d,n,t[i]) + end + else + d[n]=t + end + redo_ni(d) + end + end + end + end +end local function wrap(e,wrapper) local t={ rn=e.rn, @@ -21311,7 +21363,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-env"] = package.loaded["data-env"] or true --- original size: 9501, stripped down to: 6411 +-- original size: 9501, stripped down to: 6413 if not modules then modules={} end modules ['data-env']={ version=1.001, @@ -21403,8 +21455,8 @@ local relations=allocate { names={ "mp" }, variable='MPINPUTS', suffixes=CONTEXTLMTXMODE>0 - and { 'mp','mpxl','mpvi','mpiv','mpii' } - or { 'mp','mpvi','mpiv','mpii' }, + and { 'mpxl','mpvi','mpiv','mpii','mp' } + or { 'mpvi','mpiv','mpii','mp' }, usertype=true, }, tex={ @@ -25986,8 +26038,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1031629 --- stripped bytes : 406052 +-- original bytes : 1033170 +-- stripped bytes : 406679 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 12104b82c..042ef82c7 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -6433,7 +6433,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-math"] = package.loaded["l-math"] or true --- original size: 2549, stripped down to: 1825 +-- original size: 2679, stripped down to: 1909 if not modules then modules={} end modules ['l-math']={ version=1.001, @@ -6446,8 +6446,14 @@ if not math.ceiling then math.ceiling=math.ceil end if not math.round then - local floor=math.floor - function math.round(x) return floor(x+0.5) end + if xmath then + math.round=xmath.round + else + local floor=math.floor + function math.round(x) + return x<0 and -floor(-x+0.5) or floor(x+0.5) + end + end end if not math.div then local floor=math.floor @@ -14220,7 +14226,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-deb"] = package.loaded["util-deb"] or true --- original size: 10136, stripped down to: 6832 +-- original size: 10593, stripped down to: 7102 if not modules then modules={} end modules ['util-deb']={ version=1.001, @@ -14514,6 +14520,22 @@ local function showtraceback(rep) end end debugger.showtraceback=showtraceback +if luac then + local show,dump=luac.print,string.dump + function luac.inspect(v) + if type(v)=="function" then + local ok,str=xpcall(dump,function() end,v) + if ok then + v=str + end + end + if type(v)=="string" then + show(v,true) + else + print(v) + end + end +end end -- of closure @@ -16310,7 +16332,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 62809, stripped down to: 36225 +-- original size: 62810, stripped down to: 36225 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -19111,7 +19133,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true --- original size: 33708, stripped down to: 20953 +-- original size: 34661, stripped down to: 21511 if not modules then modules={} end modules ['lxml-aux']={ version=1.001, @@ -19377,6 +19399,36 @@ function xml.replace(root,pattern,whatever) end end end +function xml.expand(root,pattern,whatever) + local collected=root and xmlapplylpath(root,pattern) + if collected then + for c=1,#collected do + local e=collected[c] + local p=e.__p__ + if p then + if trace_manipulations then + report('expanding',pattern,c,e) + end + local d=p.dt + local n=e.ni + local t=whatever(e,p) + if t then + if type(t)=="table" then + t=xmlcopy(t) + d[n]=t[1] + for i=2,#t do + n=n+1 + insert(d,n,t[i]) + end + else + d[n]=t + end + redo_ni(d) + end + end + end + end +end local function wrap(e,wrapper) local t={ rn=e.rn, @@ -21311,7 +21363,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-env"] = package.loaded["data-env"] or true --- original size: 9501, stripped down to: 6411 +-- original size: 9501, stripped down to: 6413 if not modules then modules={} end modules ['data-env']={ version=1.001, @@ -21403,8 +21455,8 @@ local relations=allocate { names={ "mp" }, variable='MPINPUTS', suffixes=CONTEXTLMTXMODE>0 - and { 'mp','mpxl','mpvi','mpiv','mpii' } - or { 'mp','mpvi','mpiv','mpii' }, + and { 'mpxl','mpvi','mpiv','mpii','mp' } + or { 'mpvi','mpiv','mpii','mp' }, usertype=true, }, tex={ @@ -25986,8 +26038,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1031629 --- stripped bytes : 406052 +-- original bytes : 1033170 +-- stripped bytes : 406679 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 12104b82c..042ef82c7 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -6433,7 +6433,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-math"] = package.loaded["l-math"] or true --- original size: 2549, stripped down to: 1825 +-- original size: 2679, stripped down to: 1909 if not modules then modules={} end modules ['l-math']={ version=1.001, @@ -6446,8 +6446,14 @@ if not math.ceiling then math.ceiling=math.ceil end if not math.round then - local floor=math.floor - function math.round(x) return floor(x+0.5) end + if xmath then + math.round=xmath.round + else + local floor=math.floor + function math.round(x) + return x<0 and -floor(-x+0.5) or floor(x+0.5) + end + end end if not math.div then local floor=math.floor @@ -14220,7 +14226,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-deb"] = package.loaded["util-deb"] or true --- original size: 10136, stripped down to: 6832 +-- original size: 10593, stripped down to: 7102 if not modules then modules={} end modules ['util-deb']={ version=1.001, @@ -14514,6 +14520,22 @@ local function showtraceback(rep) end end debugger.showtraceback=showtraceback +if luac then + local show,dump=luac.print,string.dump + function luac.inspect(v) + if type(v)=="function" then + local ok,str=xpcall(dump,function() end,v) + if ok then + v=str + end + end + if type(v)=="string" then + show(v,true) + else + print(v) + end + end +end end -- of closure @@ -16310,7 +16332,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 62809, stripped down to: 36225 +-- original size: 62810, stripped down to: 36225 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -19111,7 +19133,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true --- original size: 33708, stripped down to: 20953 +-- original size: 34661, stripped down to: 21511 if not modules then modules={} end modules ['lxml-aux']={ version=1.001, @@ -19377,6 +19399,36 @@ function xml.replace(root,pattern,whatever) end end end +function xml.expand(root,pattern,whatever) + local collected=root and xmlapplylpath(root,pattern) + if collected then + for c=1,#collected do + local e=collected[c] + local p=e.__p__ + if p then + if trace_manipulations then + report('expanding',pattern,c,e) + end + local d=p.dt + local n=e.ni + local t=whatever(e,p) + if t then + if type(t)=="table" then + t=xmlcopy(t) + d[n]=t[1] + for i=2,#t do + n=n+1 + insert(d,n,t[i]) + end + else + d[n]=t + end + redo_ni(d) + end + end + end + end +end local function wrap(e,wrapper) local t={ rn=e.rn, @@ -21311,7 +21363,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-env"] = package.loaded["data-env"] or true --- original size: 9501, stripped down to: 6411 +-- original size: 9501, stripped down to: 6413 if not modules then modules={} end modules ['data-env']={ version=1.001, @@ -21403,8 +21455,8 @@ local relations=allocate { names={ "mp" }, variable='MPINPUTS', suffixes=CONTEXTLMTXMODE>0 - and { 'mp','mpxl','mpvi','mpiv','mpii' } - or { 'mp','mpvi','mpiv','mpii' }, + and { 'mpxl','mpvi','mpiv','mpii','mp' } + or { 'mpvi','mpiv','mpii','mp' }, usertype=true, }, tex={ @@ -25986,8 +26038,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1031629 --- stripped bytes : 406052 +-- original bytes : 1033170 +-- stripped bytes : 406679 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 12104b82c..042ef82c7 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -6433,7 +6433,7 @@ do -- create closure to overcome 200 locals limit package.loaded["l-math"] = package.loaded["l-math"] or true --- original size: 2549, stripped down to: 1825 +-- original size: 2679, stripped down to: 1909 if not modules then modules={} end modules ['l-math']={ version=1.001, @@ -6446,8 +6446,14 @@ if not math.ceiling then math.ceiling=math.ceil end if not math.round then - local floor=math.floor - function math.round(x) return floor(x+0.5) end + if xmath then + math.round=xmath.round + else + local floor=math.floor + function math.round(x) + return x<0 and -floor(-x+0.5) or floor(x+0.5) + end + end end if not math.div then local floor=math.floor @@ -14220,7 +14226,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-deb"] = package.loaded["util-deb"] or true --- original size: 10136, stripped down to: 6832 +-- original size: 10593, stripped down to: 7102 if not modules then modules={} end modules ['util-deb']={ version=1.001, @@ -14514,6 +14520,22 @@ local function showtraceback(rep) end end debugger.showtraceback=showtraceback +if luac then + local show,dump=luac.print,string.dump + function luac.inspect(v) + if type(v)=="function" then + local ok,str=xpcall(dump,function() end,v) + if ok then + v=str + end + end + if type(v)=="string" then + show(v,true) + else + print(v) + end + end +end end -- of closure @@ -16310,7 +16332,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-tab"] = package.loaded["lxml-tab"] or true --- original size: 62809, stripped down to: 36225 +-- original size: 62810, stripped down to: 36225 if not modules then modules={} end modules ['lxml-tab']={ version=1.001, @@ -19111,7 +19133,7 @@ do -- create closure to overcome 200 locals limit package.loaded["lxml-aux"] = package.loaded["lxml-aux"] or true --- original size: 33708, stripped down to: 20953 +-- original size: 34661, stripped down to: 21511 if not modules then modules={} end modules ['lxml-aux']={ version=1.001, @@ -19377,6 +19399,36 @@ function xml.replace(root,pattern,whatever) end end end +function xml.expand(root,pattern,whatever) + local collected=root and xmlapplylpath(root,pattern) + if collected then + for c=1,#collected do + local e=collected[c] + local p=e.__p__ + if p then + if trace_manipulations then + report('expanding',pattern,c,e) + end + local d=p.dt + local n=e.ni + local t=whatever(e,p) + if t then + if type(t)=="table" then + t=xmlcopy(t) + d[n]=t[1] + for i=2,#t do + n=n+1 + insert(d,n,t[i]) + end + else + d[n]=t + end + redo_ni(d) + end + end + end + end +end local function wrap(e,wrapper) local t={ rn=e.rn, @@ -21311,7 +21363,7 @@ do -- create closure to overcome 200 locals limit package.loaded["data-env"] = package.loaded["data-env"] or true --- original size: 9501, stripped down to: 6411 +-- original size: 9501, stripped down to: 6413 if not modules then modules={} end modules ['data-env']={ version=1.001, @@ -21403,8 +21455,8 @@ local relations=allocate { names={ "mp" }, variable='MPINPUTS', suffixes=CONTEXTLMTXMODE>0 - and { 'mp','mpxl','mpvi','mpiv','mpii' } - or { 'mp','mpvi','mpiv','mpii' }, + and { 'mpxl','mpvi','mpiv','mpii','mp' } + or { 'mpvi','mpiv','mpii','mp' }, usertype=true, }, tex={ @@ -25986,8 +26038,8 @@ end -- of closure -- used libraries : l-bit32.lua l-lua.lua l-macro.lua l-sandbox.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-sha.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-fil.lua util-sac.lua util-sto.lua util-prs.lua util-fmt.lua util-soc-imp-reset.lua util-soc-imp-socket.lua util-soc-imp-copas.lua util-soc-imp-ltn12.lua util-soc-imp-mime.lua util-soc-imp-url.lua util-soc-imp-headers.lua util-soc-imp-tp.lua util-soc-imp-http.lua util-soc-imp-ftp.lua util-soc-imp-smtp.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-tpl.lua util-sbx.lua util-mrg.lua util-env.lua luat-env.lua util-zip.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua libs-ini.lua luat-sta.lua luat-fmt.lua -- skipped libraries : - --- original bytes : 1031629 --- stripped bytes : 406052 +-- original bytes : 1033170 +-- stripped bytes : 406679 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 1844779fd..a02511e2c 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{2022.05.11 11:34} +\newcontextversion{2022.07.06 21:34} %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 a520470b2..385df8685 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{2022.05.11 11:34} +\edef\contextversion{2022.07.06 21:34} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-cs.mkii b/tex/context/base/mkii/mult-cs.mkii index 5af147f70..e7987a2d6 100644 --- a/tex/context/base/mkii/mult-cs.mkii +++ b/tex/context/base/mkii/mult-cs.mkii @@ -641,6 +641,7 @@ % definitions for interface constants for language cs % \setinterfaceconstant{action}{akce} +\setinterfaceconstant{adaptive}{adaptive} \setinterfaceconstant{address}{adresa} \setinterfaceconstant{after}{po} \setinterfaceconstant{afterhead}{pohlavicce} @@ -1053,6 +1054,8 @@ \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{cislovani} +\setinterfaceconstant{numberlocation}{numberlocation} +\setinterfaceconstant{numbermethod}{numbermethod} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} @@ -1063,6 +1066,7 @@ \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstrut}{numberstrut} \setinterfaceconstant{numberstyle}{stylcisla} +\setinterfaceconstant{numberthreshold}{numberthreshold} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} @@ -1234,6 +1238,8 @@ \setinterfaceconstant{small}{male} \setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures} \setinterfaceconstant{smallcapsfont}{smallcapsfont} +\setinterfaceconstant{snap}{snap} +\setinterfaceconstant{snapstep}{snapstep} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} diff --git a/tex/context/base/mkii/mult-en.mkii b/tex/context/base/mkii/mult-en.mkii index 2a00dba9b..cb26f8c65 100644 --- a/tex/context/base/mkii/mult-en.mkii +++ b/tex/context/base/mkii/mult-en.mkii @@ -870,6 +870,7 @@ \setinterfaceconstant{frameradius}{frameradius} \setinterfaceconstant{frames}{frames} \setinterfaceconstant{freeregion}{freeregion} +\setinterfaceconstant{freezespacing}{freezespacing} \setinterfaceconstant{from}{from} \setinterfaceconstant{functioncolor}{functioncolor} \setinterfaceconstant{functionstyle}{functionstyle} @@ -950,6 +951,7 @@ \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{left} +\setinterfaceconstant{leftclass}{leftclass} \setinterfaceconstant{leftcolor}{leftcolor} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{leftedge} @@ -1008,6 +1010,7 @@ \setinterfaceconstant{menu}{menu} \setinterfaceconstant{method}{method} \setinterfaceconstant{middle}{middle} +\setinterfaceconstant{middleclass}{middleclass} \setinterfaceconstant{middlecolor}{middlecolor} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlesource}{middlesource} @@ -1054,6 +1057,8 @@ \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{numbering} +\setinterfaceconstant{numberlocation}{numberlocation} +\setinterfaceconstant{numbermethod}{numbermethod} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} @@ -1064,6 +1069,7 @@ \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstrut}{numberstrut} \setinterfaceconstant{numberstyle}{numberstyle} +\setinterfaceconstant{numberthreshold}{numberthreshold} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} @@ -1117,6 +1123,7 @@ \setinterfaceconstant{palet}{palet} \setinterfaceconstant{paper}{paper} \setinterfaceconstant{paragraph}{paragraph} +\setinterfaceconstant{penalties}{penalties} \setinterfaceconstant{period}{period} \setinterfaceconstant{place}{place} \setinterfaceconstant{placehead}{placehead} @@ -1170,6 +1177,7 @@ \setinterfaceconstant{reverse}{reverse} \setinterfaceconstant{right}{right} \setinterfaceconstant{rightchars}{rightchars} +\setinterfaceconstant{rightclass}{rightclass} \setinterfaceconstant{rightcolor}{rightcolor} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{rightedge} diff --git a/tex/context/base/mkii/mult-pe.mkii b/tex/context/base/mkii/mult-pe.mkii index 7823d3eef..08a2cbb62 100644 --- a/tex/context/base/mkii/mult-pe.mkii +++ b/tex/context/base/mkii/mult-pe.mkii @@ -870,6 +870,7 @@ \setinterfaceconstant{frameradius}{شعاع‌قالب} \setinterfaceconstant{frames}{قالبها} \setinterfaceconstant{freeregion}{freeregion} +\setinterfaceconstant{freezespacing}{freezespacing} \setinterfaceconstant{from}{از} \setinterfaceconstant{functioncolor}{functioncolor} \setinterfaceconstant{functionstyle}{functionstyle} @@ -950,6 +951,7 @@ \setinterfaceconstant{lastpubsep}{lastpubsep} \setinterfaceconstant{layout}{layout} \setinterfaceconstant{left}{چپ} +\setinterfaceconstant{leftclass}{leftclass} \setinterfaceconstant{leftcolor}{رنگ‌چپ} \setinterfaceconstant{leftcompoundhyphen}{leftcompoundhyphen} \setinterfaceconstant{leftedge}{لبه‌چپ} @@ -1008,6 +1010,7 @@ \setinterfaceconstant{menu}{منو} \setinterfaceconstant{method}{روش} \setinterfaceconstant{middle}{میان} +\setinterfaceconstant{middleclass}{middleclass} \setinterfaceconstant{middlecolor}{middlecolor} \setinterfaceconstant{middlecommand}{middlecommand} \setinterfaceconstant{middlesource}{middlesource} @@ -1054,6 +1057,8 @@ \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{فاصله‌شماره} \setinterfaceconstant{numbering}{شماره‌گذاری} +\setinterfaceconstant{numberlocation}{numberlocation} +\setinterfaceconstant{numbermethod}{numbermethod} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} @@ -1064,6 +1069,7 @@ \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstrut}{numberstrut} \setinterfaceconstant{numberstyle}{سبک‌شماره} +\setinterfaceconstant{numberthreshold}{numberthreshold} \setinterfaceconstant{numberwidth}{عرض‌شماره} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} @@ -1117,6 +1123,7 @@ \setinterfaceconstant{palet}{لوح} \setinterfaceconstant{paper}{برگ} \setinterfaceconstant{paragraph}{پاراگراف} +\setinterfaceconstant{penalties}{penalties} \setinterfaceconstant{period}{period} \setinterfaceconstant{place}{بگذار} \setinterfaceconstant{placehead}{بگذارسر} @@ -1170,6 +1177,7 @@ \setinterfaceconstant{reverse}{برعکس} \setinterfaceconstant{right}{راست} \setinterfaceconstant{rightchars}{rightchars} +\setinterfaceconstant{rightclass}{rightclass} \setinterfaceconstant{rightcolor}{رنگ‌راست} \setinterfaceconstant{rightcompoundhyphen}{rightcompoundhyphen} \setinterfaceconstant{rightedge}{لبه‌راست} diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii index 661b94194..e52732b6b 100644 --- a/tex/context/base/mkii/mult-ro.mkii +++ b/tex/context/base/mkii/mult-ro.mkii @@ -1054,6 +1054,8 @@ \setinterfaceconstant{numberconversionset}{numberconversionset} \setinterfaceconstant{numberdistance}{numberdistance} \setinterfaceconstant{numbering}{numerotare} +\setinterfaceconstant{numberlocation}{numberlocation} +\setinterfaceconstant{numbermethod}{numbermethod} \setinterfaceconstant{numberorder}{numberorder} \setinterfaceconstant{numberprefix}{numberprefix} \setinterfaceconstant{numbersegments}{numbersegments} @@ -1064,6 +1066,7 @@ \setinterfaceconstant{numberstopper}{numberstopper} \setinterfaceconstant{numberstrut}{numberstrut} \setinterfaceconstant{numberstyle}{stilnumar} +\setinterfaceconstant{numberthreshold}{numberthreshold} \setinterfaceconstant{numberwidth}{numberwidth} \setinterfaceconstant{nx}{nx} \setinterfaceconstant{ny}{ny} diff --git a/tex/context/base/mkii/type-one.mkii b/tex/context/base/mkii/type-one.mkii index 4f6e43745..d5e281ff7 100644 --- a/tex/context/base/mkii/type-one.mkii +++ b/tex/context/base/mkii/type-one.mkii @@ -2858,7 +2858,7 @@ \definetypeface [dejavu] [rm] [serif] [dejavu] [default] [encoding=\typescripttwo] \definetypeface [dejavu] [ss] [sans] [dejavu] [default] [encoding=\typescripttwo] \definetypeface [dejavu] [tt] [mono] [dejavu] [default] [encoding=\typescripttwo] - \definetypeface [dejavu] [mm] [math] [xits] [default] [rscale=auto] + \definetypeface [dejavu] [mm] [math] [xits] [default] \loadmapfile [dejavu-truetype.map] \stoptypescript @@ -2866,7 +2866,7 @@ \definetypeface [dejavu-condensed] [rm] [serif] [dejavu-condensed] [default] [encoding=\typescripttwo] \definetypeface [dejavu-condensed] [ss] [sans] [dejavu-condensed] [default] [encoding=\typescripttwo] \definetypeface [dejavu-condensed] [tt] [mono] [dejavu-condensed] [default] [encoding=\typescripttwo] - \definetypeface [dejavu-condensed] [mm] [math] [xits] [default] [rscale=auto] + \definetypeface [dejavu-condensed] [mm] [math] [xits] [default] \loadmapfile [dejavu-truetype.map] \stoptypescript @@ -2874,26 +2874,15 @@ \starttypescriptcollection[gentium] - \starttypescript [serif] [gentium] [ec,texnansi,qx,t5,l7x] - \definefontsynonym [Gentium-Roman] [\typescriptthree-gentiumplus-regular] [encoding=\typescriptthree] - \definefontsynonym [Gentium-Italic] [\typescriptthree-gentiumplus-italic] [encoding=\typescriptthree] - \definefontsynonym [Gentium-Bold] [\typescriptthree-gentiumbasic-bold] [encoding=\typescriptthree] - \definefontsynonym [Gentium-BoldItalic] [\typescriptthree-gentiumbasic-bolditalic] [encoding=\typescriptthree] - \definefontsynonym [Gentium-RomanCaps] [\typescriptthree-gentiumplus-regular-sc] [encoding=\typescriptthree] - \definefontsynonym [Gentium-Slanted] [Gentium-Italic] - \definefontsynonym [Gentium-BoldSlanted] [Gentium-BoldItalic] - \loadmapfile[gentium-\typescriptthree.map] - \stoptypescript - - \starttypescript [serif] [gentium] [agr,t2a] + \starttypescript [serif] [gentium] [ec,texnansi,qx,t5,l7x,agr,t2a] \definefontsynonym [Gentium-Roman] [\typescriptthree-gentiumplus-regular] [encoding=\typescriptthree] \definefontsynonym [Gentium-Italic] [\typescriptthree-gentiumplus-italic] [encoding=\typescriptthree] + \definefontsynonym [Gentium-Bold] [\typescriptthree-gentiumplus-bold] [encoding=\typescriptthree] + \definefontsynonym [Gentium-BoldItalic] [\typescriptthree-gentiumplus-bolditalic] [encoding=\typescriptthree] \definefontsynonym [Gentium-RomanCaps] [\typescriptthree-gentiumplus-regular-sc] [encoding=\typescriptthree] - \definefontsynonym [Gentium-Bold] [Gentium-Roman] - \definefontsynonym [Gentium-BoldItalic] [Gentium-Italic] - \definefontsynonym [Gentium-Slanted] [Gentium-Italic] - \definefontsynonym [Gentium-BoldSlanted] [Gentium-Italic] - \loadmapfile[gentium-\typescriptthree.map] + \definefontsynonym [Gentium-Slanted] [\typescriptthree-gentiumplus-italic] [encoding=\typescriptthree] + \definefontsynonym [Gentium-BoldSlanted] [\typescriptthree-gentiumplus-bolditalic] [encoding=\typescriptthree] + \loadmapfile[gentiumplus-\typescriptthree.map] \stoptypescript \starttypescript [serif] [gentium] [name] @@ -2910,6 +2899,10 @@ \starttypescript [gentium] [ec,texnansi,qx,t5,t2a,agr,l7x] \definetypeface [gentium] [rm] [serif] [gentium] [default] [encoding=\typescripttwo] + \definetypeface [gentium] [ss] [sans] [dejavu] [default] [encoding=\typescripttwo] + \definetypeface [gentium] [tt] [mono] [dejavu] [default] [encoding=\typescripttwo] + \definetypeface [gentium] [mm] [math] [xits] [default] + \loadmapfile [dejavu-truetype.map] \stoptypescript \stoptypescriptcollection diff --git a/tex/context/base/mkiv/char-def.lua b/tex/context/base/mkiv/char-def.lua index b4f07a529..3b057b674 100644 --- a/tex/context/base/mkiv/char-def.lua +++ b/tex/context/base/mkiv/char-def.lua @@ -62534,11 +62534,11 @@ characters.data={ linebreak="in", mathspec={ { - class="inner", + class="ellipsis", name="ldots", }, { - class="inner", + class="ellipsis", name="dots", }, }, @@ -66828,6 +66828,8 @@ characters.data={ description="INCREMENT", direction="on", linebreak="al", + mathclass="differential", + mathname="laplace", synonyms={ "forward difference", "laplace operator" }, unicodeslot=0x2206, }, @@ -69460,7 +69462,7 @@ characters.data={ description="VERTICAL ELLIPSIS", direction="on", linebreak="al", - mathclass="inner", + mathclass="ellipsis", mathname="vdots", unicodeslot=0x22EE, }, @@ -69469,7 +69471,7 @@ characters.data={ description="MIDLINE HORIZONTAL ELLIPSIS", direction="on", linebreak="in", - mathclass="inner", + mathclass="ellipsis", mathname="cdots", unicodeslot=0x22EF, }, @@ -69478,7 +69480,7 @@ characters.data={ description="UP RIGHT DIAGONAL ELLIPSIS", direction="on", linebreak="al", - mathclass="inner", + mathclass="ellipsis", mathname="udots", mirror=0x22F1, unicodeslot=0x22F0, @@ -69488,7 +69490,7 @@ characters.data={ description="DOWN RIGHT DIAGONAL ELLIPSIS", direction="on", linebreak="al", - mathclass="inner", + mathclass="ellipsis", mathname="ddots", mirror=0x22F0, unicodeslot=0x22F1, @@ -137215,6 +137217,7 @@ characters.data={ description="PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS", direction="on", linebreak="in", + mathclass="ellipsis", specials={ "vertical", 0x2026 }, unicodeslot=0xFE19, }, @@ -227368,10 +227371,10 @@ characters.data={ linebreak="al", mathclass="ordinary", mathspec={ - { - name="Dd", - class="differential", - }, + { + class="differential", + name="Dd", + }, }, specials={ "font", 0x44 }, unicodeslot=0x1D437, @@ -227609,10 +227612,10 @@ characters.data={ linebreak="al", mathclass="ordinary", mathspec={ - { - name="dd", - class="differential", - }, + { + class="differential", + name="dd", + }, }, specials={ "font", 0x64 }, unicodeslot=0x1D451, @@ -227625,10 +227628,10 @@ characters.data={ linebreak="al", mathclass="ordinary", mathspec={ - { - name="ee", - class="exponential", - }, + { + class="exponential", + name="ee", + }, }, specials={ "font", 0x65 }, unicodeslot=0x1D452, @@ -227659,10 +227662,10 @@ characters.data={ linebreak="al", mathclass="ordinary", mathspec={ - { - name="ii", - class="imaginary", - }, + { + class="imaginary", + name="ii", + }, }, specials={ "font", 0x69 }, unicodeslot=0x1D456, @@ -227675,10 +227678,10 @@ characters.data={ linebreak="al", mathclass="ordinary", mathspec={ - { - name="ji", - class="imaginary", - }, + { + class="imaginary", + name="ji", + }, }, specials={ "font", 0x6A }, unicodeslot=0x1D457, diff --git a/tex/context/base/mkiv/char-ini.lua b/tex/context/base/mkiv/char-ini.lua index 3543b01ef..09c7994a9 100644 --- a/tex/context/base/mkiv/char-ini.lua +++ b/tex/context/base/mkiv/char-ini.lua @@ -285,9 +285,9 @@ local blocks = allocate { ["devanagariextended"] = { first = 0x0A8E0, last = 0x0A8FF, description = "Devanagari Extended" }, ["digitsarabicindic"] = { first = 0x00660, last = 0x00669, math = true }, -- ["digitsbengali"] = { first = 0x009E6, last = 0x009EF, math = true }, - ["digitsbold"] = { first = 0x1D7CE, last = 0x1D7D8, math = true }, + ["digitsbold"] = { first = 0x1D7CE, last = 0x1D7D7, math = true }, -- ["digitsdevanagari"] = { first = 0x00966, last = 0x0096F, math = true }, - ["digitsdoublestruck"] = { first = 0x1D7D8, last = 0x1D7E2, math = true }, + ["digitsdoublestruck"] = { first = 0x1D7D8, last = 0x1D7E1, math = true }, -- ["digitsethiopic"] = { first = 0x01369, last = 0x01371, math = true }, ["digitsextendedarabicindic"] = { first = 0x006F0, last = 0x006F9, math = true }, -- ["digitsgujarati"] = { first = 0x00AE6, last = 0x00AEF, math = true }, @@ -298,12 +298,12 @@ local blocks = allocate { ["digitslatin"] = { first = 0x00030, last = 0x00039, math = true }, -- ["digitsmalayalam"] = { first = 0x00D66, last = 0x00D6F, math = true }, -- ["digitsmongolian"] = { first = 0x01810, last = 0x01809, math = true }, - ["digitsmonospace"] = { first = 0x1D7F6, last = 0x1D80F, math = true }, + ["digitsmonospace"] = { first = 0x1D7F6, last = 0x1D7FF, math = true }, -- ["digitsmyanmar"] = { first = 0x01040, last = 0x01049, math = true }, ["digitsnormal"] = { first = 0x00030, last = 0x00039, math = true }, -- ["digitsoriya"] = { first = 0x00B66, last = 0x00B6F, math = true }, - ["digitssansserifbold"] = { first = 0x1D7EC, last = 0x1D805, math = true }, - ["digitssansserifnormal"] = { first = 0x1D7E2, last = 0x1D7EC, math = true }, + ["digitssansserifbold"] = { first = 0x1D7EC, last = 0x1D7F5, math = true }, + ["digitssansserifnormal"] = { first = 0x1D7E2, last = 0x1D7EB, math = true }, -- ["digitstamil"] = { first = 0x00030, last = 0x00039, math = true }, -- no zero -- ["digitstelugu"] = { first = 0x00C66, last = 0x00C6F, math = true }, -- ["digitsthai"] = { first = 0x00E50, last = 0x00E59, math = true }, @@ -407,7 +407,7 @@ local blocks = allocate { ["lowercasegreekbold"] = { first = 0x1D6C2, last = 0x1D6DB, math = true }, ["lowercasegreekbolditalic"] = { first = 0x1D736, last = 0x1D74F, math = true }, ["lowercasegreekitalic"] = { first = 0x1D6FC, last = 0x1D715, math = true }, - ["lowercasegreeknormal"] = { first = 0x003B1, last = 0x003CA, math = true }, + ["lowercasegreeknormal"] = { first = 0x003B1, last = 0x003C9, math = true }, ["lowercasegreeksansserifbold"] = { first = 0x1D770, last = 0x1D789, math = true }, ["lowercasegreeksansserifbolditalic"] = { first = 0x1D7AA, last = 0x1D7C3, math = true }, ["lowercaseitalic"] = { first = 0x1D44E, last = 0x1D467, math = true }, diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 19f0f51a2..34002f06d 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.05.11 11:34} +\newcontextversion{2022.07.06 21:34} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/cont-run.mkiv b/tex/context/base/mkiv/cont-run.mkiv index 12c12e0d9..764866a9e 100644 --- a/tex/context/base/mkiv/cont-run.mkiv +++ b/tex/context/base/mkiv/cont-run.mkiv @@ -53,7 +53,9 @@ \unexpanded\def\blocksynctexfile[#1]% {\processcommacommand{#1}\synctexblockfilename} -\def\continuewhenlmtxmode +\let\continuewhenmkivmode\relax + +\unexpanded\def\continuewhenlmtxmode {\starttext \startTEXpage[\c!offset=2ex,\c!foregroundstyle=\tttf]% This file needs \LuaMetaTeX\ and \ConTeXt\ \LMTX.% diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 6c37e0f35..40b49d386 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2022.05.11 11:34} +\edef\contextversion{2022.07.06 21:34} %D Kind of special: diff --git a/tex/context/base/mkiv/core-dat.lua b/tex/context/base/mkiv/core-dat.lua index b49750159..b58a801d9 100644 --- a/tex/context/base/mkiv/core-dat.lua +++ b/tex/context/base/mkiv/core-dat.lua @@ -156,8 +156,29 @@ local function setdataset(settings) end end -local function datasetvariable(name,tag,key) - local t = collected[name] +local cache = table.setmetatableindex(function(t,k) + local v = table.load(k..".tuc") + if v then + v = v.job + if v then + v = v.datasets + if v then + v = v.collected + end + end + end + if not v then + v = { } + if trace_datasets then + report_dataset("error: unknown dataset job %a",k) + end + end + t[k] = v + return v +end) + +local function datasetvariable(name,tag,key,cache) + local t = (cache or collected)[name] if t == nil then if trace_datasets then report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name) -- no tag @@ -181,6 +202,10 @@ local function datasetvariable(name,tag,key) end end +local function datasetvariablefromjob(jobnname,name,tag,key) + datasetvariable(name,tag,key,cache[jobnname]) +end + implement { name = "setdataset", actions = setdataset, @@ -200,6 +225,12 @@ implement { arguments = "3 strings", } +implement { + name = "datasetvariablefromjob", + arguments = { "string", "string", "string", "string" }, + actions = datasetvariablefromjob +} + --[[ldx--

We also provide an efficient variant for page states.

--ldx]]-- diff --git a/tex/context/base/mkiv/data-env.lua b/tex/context/base/mkiv/data-env.lua index 3b10d89b8..c9c11e49c 100644 --- a/tex/context/base/mkiv/data-env.lua +++ b/tex/context/base/mkiv/data-env.lua @@ -95,8 +95,8 @@ local relations = allocate { -- todo: handlers also here names = { "mp" }, variable = 'MPINPUTS', suffixes = CONTEXTLMTXMODE > 0 - and { 'mp', 'mpxl', 'mpvi', 'mpiv', 'mpii' } - or { 'mp', 'mpvi', 'mpiv', 'mpii' }, + and { 'mpxl', 'mpvi', 'mpiv', 'mpii', 'mp' } + or { 'mpvi', 'mpiv', 'mpii', 'mp' }, usertype = true, }, tex = { diff --git a/tex/context/base/mkiv/font-dsp.lua b/tex/context/base/mkiv/font-dsp.lua index 74a0a1f38..8f65ed9d9 100644 --- a/tex/context/base/mkiv/font-dsp.lua +++ b/tex/context/base/mkiv/font-dsp.lua @@ -2515,7 +2515,9 @@ do local scriptoffset = tableoffset + readushort(f) local featureoffset = tableoffset + readushort(f) local lookupoffset = tableoffset + readushort(f) - local variationsoffset = version > 0x00010000 and (tableoffset + readulong(f)) or 0 + -- MFK : Rubik-Regular.ttf : we need to delay adding the offset + -- local variationsoffset = version > 0x00010000 and (tableoffset + readulong(f)) or 0 + local variationsoffset = version > 0x00010000 and readulong(f) or 0 if not scriptoffset then return end @@ -2541,7 +2543,8 @@ do end -- if variationsoffset > 0 then - loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder) + -- loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder) + loadvariations(f,fontdata,tableoffset + variationsoffset,lookuptypes,featurehash,featureorder) end end end diff --git a/tex/context/base/mkiv/font-osd.lua b/tex/context/base/mkiv/font-osd.lua index d169faf64..ecf8009f9 100644 --- a/tex/context/base/mkiv/font-osd.lua +++ b/tex/context/base/mkiv/font-osd.lua @@ -6,15 +6,15 @@ if not modules then modules = { } end modules ['font-osd'] = { -- script devanag license = "see context related readme files" } -local experiment1 = false -local experiment2 = false -local experiment2b1 = false -local experiment2b2 = false - -experiments.register("fonts.indic.experiment1", function(v) experiment1 = v end) -experiments.register("fonts.indic.experiment2", function(v) experiment2 = v end) -experiments.register("fonts.indic.experiment2b1", function(v) experiment2b1 = v end) -experiments.register("fonts.indic.experiment2b2", function(v) experiment2b2 = v end) +-- local experiment1 = false +-- local experiment2 = false +-- local experiment2b1 = false +-- local experiment2b2 = false + +-- experiments.register("fonts.indic.experiment1", function(v) experiment1 = v end) +-- experiments.register("fonts.indic.experiment2", function(v) experiment2 = v end) +-- experiments.register("fonts.indic.experiment2b1", function(v) experiment2b1 = v end) +-- experiments.register("fonts.indic.experiment2b2", function(v) experiment2b2 = v end) -- we need to check nbsphash (context only) diff --git a/tex/context/base/mkiv/l-math.lua b/tex/context/base/mkiv/l-math.lua index 69f0a19e9..6105bc3c2 100644 --- a/tex/context/base/mkiv/l-math.lua +++ b/tex/context/base/mkiv/l-math.lua @@ -14,9 +14,19 @@ end if not math.round then - local floor = math.floor + if xmath then + + math.round = xmath.round + + else - function math.round(x) return floor(x + 0.5) end + local floor = math.floor + + function math.round(x) + return x < 0 and -floor(-x + 0.5) or floor(x + 0.5) + end + + end end diff --git a/tex/context/base/mkiv/lxml-aux.lua b/tex/context/base/mkiv/lxml-aux.lua index 126df4d82..fc17371e5 100644 --- a/tex/context/base/mkiv/lxml-aux.lua +++ b/tex/context/base/mkiv/lxml-aux.lua @@ -316,6 +316,37 @@ function xml.replace(root,pattern,whatever) end end +function xml.expand(root,pattern,whatever) + local collected = root and xmlapplylpath(root,pattern) + if collected then + for c=1,#collected do + local e = collected[c] + local p = e.__p__ + if p then + if trace_manipulations then + report('expanding',pattern,c,e) + end + local d = p.dt + local n = e.ni + local t = whatever(e,p) + if t then + if type(t) == "table" then + t = xmlcopy(t) + d[n] = t[1] + for i=2,#t do + n = n + 1 + insert(d,n,t[i]) + end + else + d[n] = t + end + redo_ni(d) -- probably not needed + end + end + end + end +end + local function wrap(e,wrapper) local t = { rn = e.rn, diff --git a/tex/context/base/mkiv/lxml-tab.lua b/tex/context/base/mkiv/lxml-tab.lua index 1f0ec33b1..e18362bd8 100644 --- a/tex/context/base/mkiv/lxml-tab.lua +++ b/tex/context/base/mkiv/lxml-tab.lua @@ -1424,7 +1424,7 @@ can speed up things a bit. The second argument is not to be used!

-- end -- end -- --- We need to prevent __p__ recursio, so: +-- We need to prevent __p__ recursion, so: local function copy(old,p) if old then diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua index dee5de585..56c7944f4 100644 --- a/tex/context/base/mkiv/mult-def.lua +++ b/tex/context/base/mkiv/mult-def.lua @@ -7346,6 +7346,9 @@ return { ["adaptive"]={ ["en"]="adaptive", }, + ["freezespacing"]={ + ["en"]="freezespacing", + }, ["address"]={ ["cs"]="adresa", ["de"]="adresse", @@ -10051,6 +10054,15 @@ return { ["en"]="mathclass", ["fr"]="classemath", }, + ["leftclass"]={ + ["en"]="leftclass", + }, + ["rightclass"]={ + ["en"]="rightclass", + }, + ["middleclass"]={ + ["en"]="middleclass", + }, ["mathlimits"]={ ["en"]="mathlimits", ["fr"]="limitesmath", @@ -10466,6 +10478,9 @@ return { ["pe"]="فاصله‌شماره", ["ro"]="numberdistance", }, + ["numberthreshold"]={ + ["en"]="numberthreshold", + }, ["numbering"]={ ["cs"]="cislovani", ["de"]="nummerierung", @@ -10480,6 +10495,10 @@ return { ["en"]="numberorder", ["fr"]="ordrenumero", }, + ["numberlocation"]= + { + ["en"]="numberlocation", + }, ["numberprefix"]={ ["en"]="numberprefix", ["fr"]="prefixenumero", @@ -10890,6 +10909,9 @@ return { ["pe"]="پاراگراف", ["ro"]="paragraf", }, + ["penalties"]={ + ["en"]="penalties", + }, ["period"]={ ["en"]="period", ["fr"]="periode", @@ -12261,6 +12283,10 @@ return { ["pe"]="حاشیه‌متن", ["ro"]="textmargin", }, + ["numbermethod"]={ + ["en"]="numbermethod", + ["nl"]="nummermethode", + }, ["textmethod"]={ ["cs"]="textmethod", ["de"]="textmethod", diff --git a/tex/context/base/mkiv/mult-fun.lua b/tex/context/base/mkiv/mult-fun.lua index 128e5b51e..5a3725b32 100644 --- a/tex/context/base/mkiv/mult-fun.lua +++ b/tex/context/base/mkiv/mult-fun.lua @@ -117,7 +117,8 @@ return { "grayscale", "greyscale", "withgray", "withgrey", "colorpart", "colorlike", "readfile", - "clearxy", "unitvector", "center", -- redefined + "clearxy", "unitvector", + "center", -- redefined "epsed", "anchored", "originpath", "infinite", "break", @@ -171,7 +172,7 @@ return { "passvariable", "passarrayvariable", "tostring", "topair", "format", "formatted", "quotation", "quote", "startpassingvariable", "stoppassingvariable", -- - "eofill", "eoclip", "nofill", "dofill", "fillup", "eofillup", "nodraw", "dodraw", + "eofill", "eoclip", "nofill", "dofill", "fillup", "eofillup", "nodraw", "dodraw", "enfill", "area", -- "addbackground", @@ -232,5 +233,9 @@ return { "processpath", "pencilled", "sortedintersectiontimes", "intersectionpath", "firstintersectionpath", "secondintersectionpath", "intersectionsfound", "cutbeforefirst", "cutafterfirst", "cutbeforelast", "cutafterlast", + -- + "xnormalized", "ynormalized", "xynormalized", + "phantom", + "scrutinized", }, } diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua index 7fb7e3fa8..ae31c547e 100644 --- a/tex/context/base/mkiv/mult-low.lua +++ b/tex/context/base/mkiv/mult-low.lua @@ -17,7 +17,8 @@ return { "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "maxcardminusone", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxcount", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", - "zeroskip", + "zeroskip", "centeringskip", "stretchingskip", "shrinkingskip", + "centeringfillskip", "stretchingfillskip", "shrinkingfillskip", "zeromuskip", "onemuskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", @@ -166,16 +167,14 @@ return { "mathfractioncode", "mathmiddlecode", "mathaccentcode", "mathfencedcode", "mathghostcode", "mathvariablecode", "mathactivecode", "mathvcentercode", "mathconstructcode", "mathwrappedcode", "mathbegincode", "mathendcode", "mathexplicitcode", "mathdivisioncode", "mathfactorialcode", - "mathdimensioncode", - -- - "mathimaginarycode", "mathdifferentialcode", "mathexponentialcode", "mathfunctioncode", "mathdigitcode", + "mathdimensioncode", "mathexperimentalcode", "mathtextpunctuationcode", + "mathimaginarycode", "mathdifferentialcode", "mathexponentialcode", "mathellipsiscode", "mathfunctioncode", "mathdigitcode", -- "mathtopaccentcode", "mathbottomaccentcode", "mathdelimitercode", "mathrootcode", "mathprintcode", -- "mathalphacode", "mathboxcode", "mathchoicecode", "mathnothingcode", "mathlimopcode", "mathnolopcode", + "mathunsetcode", "mathunspacedcode", "mathallcode", "mathfakecode", -- "constantnumber", "constantnumberargument", "constantdimen", "constantdimenargument", "constantemptyargument", -- - "continueifinputfile", - -- "luastringsep", "!!bs", "!!es", -- "lefttorightmark", "righttoleftmark", "lrm", "rlm", @@ -210,7 +209,9 @@ return { -- "nopreslackclassoptioncode", "nopostslackclassoptioncode", "lefttopkernclassoptioncode", "righttopkernclassoptioncode", "leftbottomkernclassoptioncode", "rightbottomkernclassoptioncode", - "lookaheadforendclassoptioncode", "defaultmathclassoptions", + "lookaheadforendclassoptioncode", "noitaliccorrectionclassoptioncode", "defaultmathclassoptions", + -- "openfenceclassoptioncode", "closefenceclassoptioncode", "middlefenceclassoptioncode", + "checkligatureclassoptioncode", "flattenclassoptioncode", "omitpenaltyclassoptioncode", -- "noligaturingglyphoptioncode", "nokerningglyphoptioncode", "noleftligatureglyphoptioncode", "noleftkernglyphoptioncode", "norightligatureglyphoptioncode", "norightkernglyphoptioncode", @@ -225,7 +226,7 @@ return { -- "normalworddiscoptioncode", "preworddiscoptioncode", "postworddiscoptioncode", -- - "continuewhenlmtxmode", + "continueifinputfile", "continuewhenlmtxmode", "continuewhenmkivmode", }, ["helpers"] = { -- @@ -338,7 +339,7 @@ return { -- "givenwidth", "givenheight", "givendepth", "scangivendimensions", -- - "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchtotal", + "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchdistance", "scratchtotal", "scratchitalic", "scratchhsize", "scratchvsize", "scratchxoffset", "scratchyoffset", "scratchhoffset", "scratchvoffset", "scratchxposition", "scratchyposition", diff --git a/tex/context/base/mkiv/mult-mps.lua b/tex/context/base/mkiv/mult-mps.lua index 9807902f8..008bcbb9f 100644 --- a/tex/context/base/mkiv/mult-mps.lua +++ b/tex/context/base/mkiv/mult-mps.lua @@ -3,7 +3,7 @@ return { "btex", "etex", "verbatimtex", }, shortcuts = { - "..", "...", "--", "---", "&", "\\", + "..", "...", "--", "---", "&", "&&", "\\", }, primitives = { -- to be checked "charcode", "day", "linecap", "linejoin", "miterlimit", "stacking", "month", "pausing", @@ -50,7 +50,7 @@ return { "message", "delimiters", "turningnumber", "errmessage", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "closefrom", "withprescript", "withpostscript", - "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", + -- "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", -- "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", @@ -70,6 +70,13 @@ return { "overloadmode", "setproperty", -- "intersectiontimeslist", "arcpoint", "arcpointlist", "subarclength", "maxknotpool", "nocycle", + "pathpoint", "pathprecontrol", "pathpostcontrol", "pathdirection", + "deltapoint", "deltaprecontrol", "deltapostcontrol", "deltadirection", + "corner", "xrange", "yrange", + "convexed", "uncontrolled", + "nep", "makenep", + "withmiterlimit", "withlinejoin", "withlinecap", + "centerof", "centerofmass", }, commands = { "on", "off", @@ -86,7 +93,8 @@ return { "pensquare", "penrazor", "penspec", "origin", "quartercircle", "right", "unitsquare", "up", "withdots", - "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", + "abs", "bbox", "ceiling", "cutafter", "cutbefore", "dir", + -- "center", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", @@ -126,6 +134,8 @@ return { "primitive", "permanent", "immutable", "mutable", "frozen", -- "showproperty", "showhashentry", + -- + "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", }, internals = { -- we need to remove duplicates above -- diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 2a6cd60cc..43e9515db 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -76,10 +76,16 @@ return { "Udelimiterunder", "Uhextensible", "Uleft", + "UmathDelimiterPercent", + "UmathDelimiterShortfall", "Umathaccent", "Umathaccentbasedepth", "Umathaccentbaseheight", + "Umathaccentbottomoverschoot", "Umathaccentbottomshiftdown", + "Umathaccentsuperscriptdrop", + "Umathaccentsuperscriptpercent", + "Umathaccenttopovershoot", "Umathaccenttopshiftup", "Umathaccentvariant", "Umathadapttoleft", @@ -262,10 +268,12 @@ return { "beginmathgroup", "beginsimplegroup", "boundary", + "boxadapt", "boxanchor", "boxanchors", "boxattribute", "boxdirection", + "boxfreeze", "boxgeometry", "boxorientation", "boxshift", @@ -303,6 +311,7 @@ return { "etoksapp", "etokspre", "everybeforepar", + "everymathatom", "everytab", "exceptionpenalty", "expand", @@ -317,6 +326,7 @@ return { "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", + "fontcharta", "fontid", "fontmathcontrol", "fontspecdef", @@ -349,8 +359,10 @@ return { "glyphtextscale", "glyphxoffset", "glyphxscale", + "glyphxscaled", "glyphyoffset", "glyphyscale", + "glyphyscaled", "gtoksapp", "gtokspre", "hccode", @@ -431,6 +443,7 @@ return { "letmathspacing", "letprotected", "lettonothing", + "linebreakcriterium", "linedirection", "localbrokenpenalty", "localcontrol", @@ -462,7 +475,9 @@ return { "mathbeginclass", "mathdelimitersmode", "mathdirection", + "mathdisplaymode", "mathdisplayskipmode", + "mathdoublescriptmode", "mathendclass", "matheqnogapstep", "mathfenced", @@ -471,6 +486,8 @@ return { "mathforwardpenalties", "mathfrac", "mathghost", + "mathgluemode", + "mathgroupingmode", "mathleftclass", "mathlimitsmode", "mathmiddle", @@ -521,6 +538,7 @@ return { "parattribute", "pardirection", "permanent", + "pettymuskip", "postexhyphenchar", "posthyphenchar", "postinlinepenalty", @@ -568,7 +586,9 @@ return { "tabsize", "textdirection", "thewithoutunit", + "tinymuskip", "todimension", + "tohexadecimal", "tointeger", "tokenized", "toksapp", @@ -576,6 +596,8 @@ return { "tolerant", "tomathstyle", "toscaled", + "tosparsedimension", + "tosparsescaled", "tpack", "tracingadjusts", "tracingalignments", @@ -587,6 +609,7 @@ return { "tracingmarks", "tracingmath", "tracingnodes", + "tracingpenalties", "uleaders", "undent", "unexpandedloop", @@ -827,6 +850,7 @@ return { "hfilneg", "hfuzz", "holdinginserts", + "holdingmigrations", "hrule", "hsize", "hskip", @@ -1001,7 +1025,6 @@ return { "thickmuskip", "thinmuskip", "time", - "tinymuskip", "toks", "toksdef", "tolerance", diff --git a/tex/context/base/mkiv/page-pcl.mkiv b/tex/context/base/mkiv/page-pcl.mkiv index 43ba4feb3..262ee71ab 100644 --- a/tex/context/base/mkiv/page-pcl.mkiv +++ b/tex/context/base/mkiv/page-pcl.mkiv @@ -246,8 +246,8 @@ \page_marks_synchronize_column\plusone\c_page_col_n_of_columns\recurselevel\scratchbox % backgrounds \anch_mark_column_box\scratchbox\recurselevel - \mixedcolumnseparatorheight\ht\scratchbox - \mixedcolumnseparatordepth \dp\scratchbox + \pagecolumnseparatorheight\ht\scratchbox + \pagecolumnseparatordepth \dp\scratchbox \inheritedpagecolumnsframedbox\recurselevel\scratchbox} \def\page_col_routine_package diff --git a/tex/context/base/mkiv/publ-dat.lua b/tex/context/base/mkiv/publ-dat.lua index 382f70471..64aaaf460 100644 --- a/tex/context/base/mkiv/publ-dat.lua +++ b/tex/context/base/mkiv/publ-dat.lua @@ -379,6 +379,7 @@ function publications.new(name) suffixes = { }, xmldata = xmlconvert(xmlplaceholder), details = { }, + missing = { }, ordered = { }, nofbytes = 0, entries = nil, -- empty == all @@ -732,6 +733,7 @@ do end end end +-- inspect(luadata) statistics.stoptiming(publications) end @@ -1172,18 +1174,31 @@ do end end - function savers.lua(dataset,filename,tobesaved) - local list = { } - local n = 0 - for tag, data in next, tobesaved do + function savers.lua(dataset,filename,tobesaved,options) + local list = { } + local n = 0 + + local function totable(data,category) local t = { } for key, value in next, data do if not privates[key] then - d[key] = value + t[key] = value end end - list[tag] = t + t.category = category n = n + 1 + return t + end + + if options.category then + setmetatableindex(list,"table") + for tag, data in next, tobesaved do + list[data.category or "unknown"][tag] = totable(data) + end + else + for tag, data in next, tobesaved do + list[tag] = totable(data,data.category) + end end report("%s entries from dataset %a saved in %a",n,dataset,filename) table.save(filename,list) @@ -1200,6 +1215,7 @@ do local filename = specification.filename local filetype = specification.filetype local criterium = specification.criterium + local options = settings_to_hash(specification.options or "") statistics.starttiming(publications) if not filename or filename == "" then report("no filename for saving given") @@ -1229,7 +1245,7 @@ do end end end - saver(dataset,filename,tobesaved) + saver(dataset,filename,tobesaved,options) else report("unknown format %a for saving %a",filetype,dataset) end @@ -1250,6 +1266,7 @@ do { "filename" }, { "filetype" }, { "criterium" }, + { "options" }, } } } diff --git a/tex/context/base/mkiv/publ-imp-cite.mkvi b/tex/context/base/mkiv/publ-imp-cite.mkvi index 721985499..c9afdbf42 100644 --- a/tex/context/base/mkiv/publ-imp-cite.mkvi +++ b/tex/context/base/mkiv/publ-imp-cite.mkvi @@ -85,7 +85,8 @@ \startsetups btx:cite:invalid \btxcitereference - {\tt <\currentbtxreference>} + % {\tt <\currentbtxreference>} + {\tt <\currentbtxmissingreference>} \stopsetups \startsetups btx:cite:concat diff --git a/tex/context/base/mkiv/publ-ini.lua b/tex/context/base/mkiv/publ-ini.lua index 210a14deb..dac0ab441 100644 --- a/tex/context/base/mkiv/publ-ini.lua +++ b/tex/context/base/mkiv/publ-ini.lua @@ -22,7 +22,7 @@ if not modules then modules = { } end modules ['publ-ini'] = { -- gain is not that large anyway because not much publication stuff is flushed. local next, rawget, type, tostring, tonumber = next, rawget, type, tostring, tonumber -local match, find, gsub, lower = string.match, string.find, string.gsub, string.lower +local match, find, gsub = string.match, string.find, string.gsub local concat, sort, tohash = table.concat, table.sort, table.tohash local mod = math.mod local formatters = string.formatters @@ -32,7 +32,7 @@ local sortedkeys, sortedhash = table.sortedkeys, table.sortedhash local setmetatableindex = table.setmetatableindex local lpegmatch = lpeg.match local P, S, C, Ct, Cs, R, Carg = lpeg.P, lpeg.S, lpeg.C, lpeg.Ct, lpeg.Cs, lpeg.R, lpeg.Carg -local upper = characters.upper +local upper, lower = characters.upper, characters.lower local report = logs.reporter("publications") local report_cite = logs.reporter("publications","cite") @@ -693,6 +693,49 @@ local findallused do end } + implement { + name = "btxmissing", + arguments = "2 strings", + actions = function(dataset,tag) + local dataset = datasets[dataset] + if dataset then + local missing = dataset.missing + local message = missing[tag] + if message == nil then + local luadata = dataset.luadata + local entry = luadata[tag] + if not entry then + local t = lower(tag) + if luadata[t] then + message = t + else + t = upper(tag) + if luadata[t] then + message = t + else + for k, v in next, luadata do + if t == upper(k) then + message = k + break + end + end + end + end + end + if not message then + message = false + end + missing[tag] = message + end + if message then + context("%s vs %s",tag,message) + return + end + end + context(tag) + end + } + end local function unknowncite(reference) @@ -1316,12 +1359,6 @@ do local typesetters = { } publications.typesetters = typesetters - local lowered = setmetatableindex(function(t,k) - k = lower(k) - t[k] = k - return k - end) - local function defaulttypesetter(field,value,manipulator) if value and value ~= "" then value = tostring(value) @@ -1428,8 +1465,6 @@ do local function get(dataset,tag,field,what,check,catspec) -- somewhat more extensive local current = rawget(datasets,dataset) if current then - tag = lowered[tag] - field = lowered[field] local data = current.luadata[tag] if data then local category = data.category @@ -1479,8 +1514,6 @@ do local function btxflush(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered[tag] - field = lowered[field] local fields = dataset.luadata[tag] if fields then local manipulator, field = splitmanipulation(field) @@ -1507,8 +1540,6 @@ do local function btxfield(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered[tag] - field = lowered[field] local fields = dataset.luadata[tag] if fields then local category = fields.category @@ -1534,8 +1565,6 @@ do local function btxdetail(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered[tag] - field = lowered[field] local fields = dataset.luadata[tag] if fields then local details = dataset.details[tag] @@ -1566,11 +1595,8 @@ do local function btxdirect(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered[tag] - field = lowered[field] local fields = dataset.luadata[tag] if fields then - field = lowered[field] local manipulator, field = splitmanipulation(field) local value = fields[field] if value then @@ -1589,8 +1615,6 @@ do local function okay(name,tag,field) local dataset = rawget(datasets,name) if dataset then - tag = lowered[tag] - field = lowered[field] local fields = dataset.luadata[tag] if fields then local category = fields.category @@ -2675,6 +2699,8 @@ do -- a bit redundant access to datasets + local creported = setmetatableindex("table") + local function processcite(presets,specification) -- if specification then @@ -2701,9 +2727,15 @@ do -- if not found or #found == 0 then -- if not list or #list == 0 then - report("no entry %a found in dataset %a",reference,dataset) + if not creported[dataset][reference] then + report("no entry %a found in dataset %a",reference,dataset) + creported[dataset][reference] = true + end elseif not setup then - report("invalid reference for %a",reference) + if not creported[""][reference] then + report("invalid reference for %a",reference) + creported[""][reference] = true + end else if trace_cite then report("processing reference %a",reference) diff --git a/tex/context/base/mkiv/publ-sor.lua b/tex/context/base/mkiv/publ-sor.lua index 30a0d9bdd..ed944ed9d 100644 --- a/tex/context/base/mkiv/publ-sor.lua +++ b/tex/context/base/mkiv/publ-sor.lua @@ -370,9 +370,17 @@ table.setmetatableindex(sorters,function(t,k) return anything end) publications.lists.sorters = sorters --- publications.sortmethods.key = { --- sequence = { --- { field = "key", default = "", unknown = "" }, --- { field = "index", default = "", unknown = "" }, --- }, --- } +publications.sortmethods.key = { + sequence = { + { field = "key", default = "", unknown = "" }, + { field = "index", default = 0, unknown = 0 }, + }, +} + +publications.sortmethods.index = { + sequence = { + { field = "index", default = 0, unknown = 0 }, + }, +} + +publications.sortmethods.dataset = publications.sortmethods.index diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index e45d119cd..42bb6d94a 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 0015ece2b..983543d0f 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkiv/strc-lst.lua b/tex/context/base/mkiv/strc-lst.lua index 96ad7c8ed..2e8eb15d9 100644 --- a/tex/context/base/mkiv/strc-lst.lua +++ b/tex/context/base/mkiv/strc-lst.lua @@ -37,6 +37,8 @@ local conditionals = tex.conditionals local ctx_latelua = context.latelua +local cheat = true + local structures = structures local lists = structures.lists local sections = structures.sections @@ -193,8 +195,13 @@ local function finalizer() if r then local i = r.internal local f = flaginternals[i] + local v = usedviews[i] + if cheat and v then + -- this permits runs=2 with interactivity + r.view = v + end if f then - r.used = usedviews[i] or true + r.used = v or true end end end @@ -232,7 +239,7 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end) if numberdata then local numbers = numberdata.numbers if type(numbers) == "string" then - numberdata.numbers = counters.compact(numbers,nil,true) + counters.compact(numberdata,numbers,numberdata.level) end end local group = numberdata and numberdata.group @@ -869,13 +876,23 @@ function lists.process(specification) local total = #result lists.result = result if total > 0 then + local usedinternals = references.usedinternals + local usedviews = references.usedviews local specials = settings_to_set(specification.extras or "") specials = next(specials) and specials or nil for i=1,total do - local r = result[i] - local m = r.metadata - local s = specials and r.numberdata and specials[zerostrippedconcat(r.numberdata.numbers,".")] or "" - context.strclistsentryprocess(m.name,m.kind,i,s) + local listentry = result[i] + local metadata = listentry.metadata + local numberdata = listentry.numberdata + local references = listentry.references + local special = specials and numberdata and specials[zerostrippedconcat(numberdata.numbers,".")] or "" + if cheat and references then + -- this permits runs=2 with interactivity + local internal = references.internal + usedinternals[internal] = true + usedviews [internal] = references.view + end + context.strclistsentryprocess(metadata.name,metadata.kind,i,special) end end end @@ -1098,6 +1115,7 @@ implement { } }, { "numberdata", { + { "level", "integer" }, { "numbers" }, { "groupsuffix" }, { "group" }, diff --git a/tex/context/base/mkiv/strc-num.lua b/tex/context/base/mkiv/strc-num.lua index 5d00fcca9..3339819a2 100644 --- a/tex/context/base/mkiv/strc-num.lua +++ b/tex/context/base/mkiv/strc-num.lua @@ -270,18 +270,36 @@ function counters.raw(name) return counterdata[name] end -function counters.compact(name,level,onlynumbers) +function counters.compact(target,name,level) local cd = counterdata[name] if cd then - local data = cd.data - local compact = { } - for i=1,level or #data do + local data = cd.data + local numbers = { } + local ownnumbers = { } + local depth = #data + if not level or level == 0 then + level = depth + elseif level > depth then + level = depth + end + + for i=1,level do local d = data[i] - if d.number ~= 0 then - compact[i] = (onlynumbers and d.number) or d + if d then + local n = d.number + local o = d.own + if n ~= 0 then + numbers[i] = n + end + if o ~= "" then + ownnumbers[i] = o + end end end - return compact + target.numbers = numbers + if next(ownnumbers) then + target.ownnumbers = ownnumbers + end end end diff --git a/tex/context/base/mkiv/strc-ref.lua b/tex/context/base/mkiv/strc-ref.lua index 2dee95b40..87fea6b68 100644 --- a/tex/context/base/mkiv/strc-ref.lua +++ b/tex/context/base/mkiv/strc-ref.lua @@ -2096,7 +2096,7 @@ function references.setandgetattribute(data) -- maybe do internal automatically if ndat then local numbers = ndat.numbers if type(numbers) == "string" then - ndat.numbers = counters.compact(numbers,nil,true) + counters.compact(ndat,numbers) end data.numberdata = helpers.simplify(ndat) end diff --git a/tex/context/base/mkiv/type-set.mkiv b/tex/context/base/mkiv/type-set.mkiv index 25186b290..3447c4e6e 100644 --- a/tex/context/base/mkiv/type-set.mkiv +++ b/tex/context/base/mkiv/type-set.mkiv @@ -142,4 +142,7 @@ \definefilesynonym [type-imp-kpfonts-bold.mkiv] [type-imp-kpfonts.mkiv] \definefilesynonym [type-imp-kpfonts-sans.mkiv] [type-imp-kpfonts.mkiv] +\definefilesynonym [type-imp-gentiumplus.mkiv] [type-imp-gentium.mkiv] +\definefilesynonym [type-imp-gentiumbook.mkiv] [type-imp-gentium.mkiv] + \protect \endinput diff --git a/tex/context/base/mkiv/typo-fkr.lua b/tex/context/base/mkiv/typo-fkr.lua index 628818b6a..faaa09891 100644 --- a/tex/context/base/mkiv/typo-fkr.lua +++ b/tex/context/base/mkiv/typo-fkr.lua @@ -56,7 +56,7 @@ function typesetters.fontkerns.handler(head) kern = (kern1 + kern2)/2 -- mixed end if kern ~= 0 then - head, current = insertbefore(head,current,new_kern(kern)) + head = insertbefore(head,current,new_kern(kern)) end lastdata = data else @@ -68,7 +68,7 @@ function typesetters.fontkerns.handler(head) end local kern = getkernpair(lastdata,lastchar,char) if kern ~= 0 then - head, current = insertbefore(head,current,new_kern(kern)) + head = insertbefore(head,current,new_kern(kern)) end end lastchar = char diff --git a/tex/context/base/mkiv/util-deb.lua b/tex/context/base/mkiv/util-deb.lua index bd94b6d01..10e5731b0 100644 --- a/tex/context/base/mkiv/util-deb.lua +++ b/tex/context/base/mkiv/util-deb.lua @@ -346,3 +346,25 @@ debugger.showtraceback = showtraceback -- debug.showtraceback = showtraceback -- showtraceback() + +-- For now also here because we want it in mtxrun (taken from lmt file): + +if luac then + + local show, dump = luac.print, string.dump + + function luac.inspect(v) + if type(v) == "function" then + local ok, str = xpcall(dump,function() end,v) + if ok then + v = str + end + end + if type(v) == "string" then + show(v,true) + else + print(v) + end + end + +end diff --git a/tex/context/base/mkiv/util-jsn.lua b/tex/context/base/mkiv/util-jsn.lua index c1048b00a..6d12c520a 100644 --- a/tex/context/base/mkiv/util-jsn.lua +++ b/tex/context/base/mkiv/util-jsn.lua @@ -269,6 +269,8 @@ do k = lpegmatch(escaper,k) or k v = lpegmatch(escaper,v) or v n = n + 1 t[n] = f_key_val_str(depth,k,v) + elseif i > 1 then + n = n - 1 end elseif tv == "table" then local l = #v @@ -284,6 +286,9 @@ do end elseif next(v) then tojsonpp(v,k,depth,level+1,0) + elseif i > 1 then + n = n - 1 + -- we don't know if we have a hash or string end elseif tv == "boolean" then if tk == "number" then @@ -301,6 +306,8 @@ do else t[n] = f_key_val_nop(depth,k) end + elseif i > 1 then + n = n - 1 end else if tk == "number" then @@ -310,6 +317,8 @@ do k = lpegmatch(escaper,k) or k n = n + 1 t[n] = f_key_val_null(depth,k) + elseif i > 1 then + n = n - 1 end end end diff --git a/tex/context/base/mkxl/back-res.lmt b/tex/context/base/mkxl/back-res.lmt index 8e5bf3095..031e56909 100644 --- a/tex/context/base/mkxl/back-res.lmt +++ b/tex/context/base/mkxl/back-res.lmt @@ -112,13 +112,13 @@ implement { do - local nuts = nodes.nuts - local tonut = nodes.tonut + local nuts = nodes.nuts + local tonut = nodes.tonut - local setwhd = nuts.setwhd - local setlist = nuts.setlist + local setwhd = nuts.setwhd + local setlist = nuts.setlist - local new_hlist = nuts.pool.hlist + local new_hlist = nuts.pool.hlist function codeinjections.restoreboxresource(index) local hbox = new_hlist() @@ -128,8 +128,12 @@ do return hbox -- so we return a nut ! end - function codeinjections.registerboxresource(n,offset) -- usecollected (arg 3) is a bit of a hack - local r = savebox(n,nil,true,true,0,offset or 0) -- direct, todo: accept functions as attr/resources + function codeinjections.registerboxresource(n,offset,delay,objnum) + local immediate = true + if delay == true or delay == 1 then + immediate = false + end + local r = savebox(n,nil,true,immediate,0,offset or 0,objnum) return r end diff --git a/tex/context/base/mkxl/colo-ini.mkxl b/tex/context/base/mkxl/colo-ini.mkxl index e9504e0eb..f7909e2a3 100644 --- a/tex/context/base/mkxl/colo-ini.mkxl +++ b/tex/context/base/mkxl/colo-ini.mkxl @@ -1378,6 +1378,7 @@ \definecolor[trace:9][g=.4,b=.8] \definecolor[trace:w][s=1] +\definecolor[trace:z][s=0,t=.5,a=1] \definecolor[trace:r][r=.75,t=.5,a=1] \definecolor[trace:g][g=.75,t=.5,a=1] \definecolor[trace:b][b=.75,t=.5,a=1] @@ -1392,6 +1393,7 @@ \definecolor[trace:o][r=1,g=.6,b=.1,t=.5,a=1] \definecolor[trace:dw][s=1] +\definecolor[trace:dz][s=0,t=.75,a=1] \definecolor[trace:dr][r=.75,t=.75,a=1] \definecolor[trace:dg][g=.75,t=.75,a=1] \definecolor[trace:db][b=.75,t=.75,a=1] diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 6e20f62a4..4af336828 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.05.11 11:34} +\newcontextversion{2022.07.06 21:34} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/cont-run.mkxl b/tex/context/base/mkxl/cont-run.mkxl index f3a946b28..edc038e45 100644 --- a/tex/context/base/mkxl/cont-run.mkxl +++ b/tex/context/base/mkxl/cont-run.mkxl @@ -56,4 +56,12 @@ \permanent\protected\lettonothing\continuewhenlmtxmode +\permanent\protected\def\continuewhenmkivmode + {\starttext + \startTEXpage[\c!offset=2ex,\c!foregroundstyle=\tttf]% + This file needs \LuaTeX\ and \ConTeXt\ \MKIV.% + \stopTEXpage + \stoptext + \endinput} + \protect \endinput diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 71c602887..db7781ea3 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2022.05.11 11:34} +\immutable\edef\contextversion{2022.07.06 21:34} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error @@ -133,6 +133,7 @@ \loadmkxlfile{mult-ini} \loadmkxlfile{mult-sys} \loadmkxlfile{mult-aux} +%doiffileelse{mult-aux-new.mkxl}{\loadmkxlfile{mult-aux-new}}{\loadmkxlfile{mult-aux}} \loadmkxlfile{mult-def} %loadmarkfile{mult-chk} \loadmklxfile{mult-dim} @@ -400,6 +401,7 @@ \loadmkxlfile{tabl-tab} % thrd-tab stripped and merged \loadmkxlfile{tabl-tbl} +%loadmkxlfile{tabl-ntb} \doiffileelse{tabl-ntb-new.mkxl}{\loadmkxlfile{tabl-ntb-new}}{\loadmkxlfile{tabl-ntb}} \loadmkxlfile{tabl-nte} \loadmkxlfile{tabl-ltb} @@ -486,6 +488,7 @@ \loadmkxlfile{math-mis} \loadmkxlfile{math-scr} \loadmkxlfile{math-int} +\loadmkxlfile{math-dif} \loadmkxlfile{math-del} \loadmkxlfile{math-fen} \loadmkxlfile{math-lop} @@ -515,6 +518,8 @@ \loadmkxlfile{strc-usr} \loadmkxlfile{pack-com} +\loadmkxlfile{math-com} + \loadmkxlfile{typo-del} \loadmkxlfile{grph-trf} @@ -531,6 +536,7 @@ \loadmkxlfile{meta-fig} \loadmkxlfile{page-ffl} +\loadmkxlfile{page-blk} \loadmkxlfile{lang-spa} % will become obsolete diff --git a/tex/context/base/mkxl/core-dat.mkxl b/tex/context/base/mkxl/core-dat.mkxl index 93d0bbb7a..540f5b747 100644 --- a/tex/context/base/mkxl/core-dat.mkxl +++ b/tex/context/base/mkxl/core-dat.mkxl @@ -30,6 +30,16 @@ %D \stoplines %D \stoptyping +%D \starttyping +%D \definedataset[nofpages] +%D +%D \dorecurse{16}{whatever\page} +%D +%D \setdataset [nofpages] [pagetotal=\lastpagenumber] +%D +%D \testfeatureonce{100}{test \datasetvariable[todo-datasets]{nofpages}{1}{pagetotal} } +%D \stoptyping + \unprotect \registerctxluafile{core-dat}{} @@ -58,8 +68,15 @@ \fi \endgroup} -\permanent\def\datasetvariable#1#2#3% - {\clf_datasetvariable{#1}{#2}{#3}} +% \permanent\def\datasetvariable#1#2#3% +% {\clf_datasetvariable{#1}{#2}{#3}} + +\permanent\tolerant\def\datasetvariable[#1]% + {\ifparameter#1\or + \expandafter\clf_datasetvariablefromjob{#1\expandafter}% + \else + \expandafter\clf_datasetvariable + \fi} \installcorenamespace{pagestate} \installcorenamespace{pagestatecounter} diff --git a/tex/context/base/mkxl/driv-shp.lmt b/tex/context/base/mkxl/driv-shp.lmt index 6c4ca79cc..9a72d834d 100644 --- a/tex/context/base/mkxl/driv-shp.lmt +++ b/tex/context/base/mkxl/driv-shp.lmt @@ -229,13 +229,13 @@ local flush_character do end if csx then csx = csx * sx -else - csx = sx + else + csx = sx end if csy then csy = csy * sy -else - csy = sy + else + csy = sy end -- here no current! return flush_character(false,fnt,chr,factor,nest,pos_h,pos_v,pos_r,csx,csy) @@ -834,7 +834,8 @@ local hlist_out, vlist_out do -- cur_h = cur_h + wd - right -- hm, no left here? cur_h = cur_h + wd -- see new tabulate alignment code elseif id == glue_code then - local gluewidth = effectiveglue(current,this_box) +-- local gluewidth = effectiveglue(current,this_box) +local gluewidth = effectiveglue(current,this_box,true) if gluewidth ~= 0 then if subtype >= leaders_code then local leader = getleader(current) @@ -1170,7 +1171,8 @@ local hlist_out, vlist_out do -- if kern ~= 0 then -- cur_h = cur_h + kern -- else - cur_h = cur_h + effectiveglue(current,this_box) +-- cur_h = cur_h + effectiveglue(current,this_box) +cur_h = cur_h + effectiveglue(current,this_box,true) -- end elseif id == dir_code then -- We normally have proper begin-end pairs. A begin without end is (silently) handled @@ -1285,7 +1287,8 @@ local hlist_out, vlist_out do -- local id = getid(current) for current, id, subtype in nextnode, current do if id == glue_code then - local glueheight = effectiveglue(current,this_box) +-- local glueheight = effectiveglue(current,this_box) +local glueheight = effectiveglue(current,this_box,true) if glueheight ~= 0 then if subtype >= leaders_code then local leader = getleader(current) diff --git a/tex/context/base/mkxl/driv-usr.lmt b/tex/context/base/mkxl/driv-usr.lmt index 5ff601f2a..04e7da5e6 100644 --- a/tex/context/base/mkxl/driv-usr.lmt +++ b/tex/context/base/mkxl/driv-usr.lmt @@ -116,7 +116,8 @@ hlist_out = function(this_box,current) end end elseif id == glue_code then - cur_h = cur_h + effectiveglue(current,this_box) +-- cur_h = cur_h + effectiveglue(current,this_box) +cur_h = cur_h + effectiveglue(current,this_box,true) elseif id == hlist_code or id == vlist_code then local width, height, depth = getwhd(current) local list = getlist(current) @@ -264,7 +265,8 @@ hlist_out = function(this_box,current) elseif id == rule_code then cur_h = cur_h + getwidth(current) elseif id == math_code then - cur_h = cur_h + effectiveglue(current,this_box) +-- cur_h = cur_h + effectiveglue(current,this_box) +cur_h = cur_h + effectiveglue(current,this_box,true) elseif id == dir_code then local dir, cancel = getdirection(current) if cancel then @@ -348,7 +350,8 @@ vlist_out = function(this_box,current) for current, id, subtype in nextnode, current do if id == glue_code then - cur_v = cur_v + effectiveglue(current,this_box) +-- cur_v = cur_v + effectiveglue(current,this_box) +cur_v = cur_v + effectiveglue(current,this_box,true) elseif id == hlist_code or id == vlist_code then local width, height, depth = getwhd(current) local list = getlist(current) diff --git a/tex/context/base/mkxl/enco-ini.mkxl b/tex/context/base/mkxl/enco-ini.mkxl index c93ef7f61..5370035ed 100644 --- a/tex/context/base/mkxl/enco-ini.mkxl +++ b/tex/context/base/mkxl/enco-ini.mkxl @@ -208,10 +208,11 @@ \setbox0\hbox{#4}% \halign {##\crcr\hbox{#5}\crcr - \hidewidth + \hskip\hideskip % \hidewidth \hskip#2\wd0 \hskip-#3\slantperpoint % in plain 1ex * dimenless value - \vpack to .2\exheight{\box0\vss}\hidewidth + \vpack to .2\exheight{\box0\vss}% + \hskip\hideskip % \hidewidth \crcr}}} \permanent\protected\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}} diff --git a/tex/context/base/mkxl/font-con.lmt b/tex/context/base/mkxl/font-con.lmt index 83b97847d..5da757230 100644 --- a/tex/context/base/mkxl/font-con.lmt +++ b/tex/context/base/mkxl/font-con.lmt @@ -704,9 +704,9 @@ function constructors.scale(tfmdata,specification) end local va = character.accent if va then - chr.topaccent = vdelta*va + chr.topaccent = va*vdelta end - if stackmath then + if stackmath then -- not ok yet local mk = character.mathkerns if mk then local tr = mk.topright @@ -755,6 +755,10 @@ function constructors.scale(tfmdata,specification) if fa then chr.flataccent = fa end + local m = character.leftmargin if m and m ~= 0 then chr.leftmargin = m*hdelta end + local m = character.rightmargin if m and m ~= 0 then chr.rightmargin = m*hdelta end + local m = character.topmargin if m and m ~= 0 then chr.topmargin = m*hdelta end + local m = character.bottommargin if m and m ~= 0 then chr.bottommargin = m*hdelta end elseif autoitalicamount then -- itlc feature local vi = description.italic if not vi then diff --git a/tex/context/base/mkxl/font-imp-effects.lmt b/tex/context/base/mkxl/font-imp-effects.lmt index 1f9810f93..38d86498a 100644 --- a/tex/context/base/mkxl/font-imp-effects.lmt +++ b/tex/context/base/mkxl/font-imp-effects.lmt @@ -238,9 +238,11 @@ local function manipulateeffect(tfmdata) parameters.hshift = hshift parameters.vshift = vshift for unicode, character in next, characters do - local oldwidth = character.width - local oldheight = character.height - local olddepth = character.depth + local oldwidth = character.width + local oldheight = character.height + local olddepth = character.depth + local olditalic = character.italic + local oldtopaccent = character.topaccent if oldwidth and oldwidth > 0 then character.width = oldwidth + wdelta end @@ -250,6 +252,15 @@ local function manipulateeffect(tfmdata) if olddepth and olddepth > 0 then character.depth = olddepth + ddelta end + if olditalic or oldtopaccent then + local factor = character.width / oldwidth + if olditalic and olditalic > 0 then + character.italic = olditalic * factor + end + if oldtopaccent and oldtopaccent > 0 then + character.topaccent = oldtopaccent * factor + end + end end if mathparameters then setmathparameters(tfmdata,characters,mathparameters,dx,dy,squeeze,multiplier) diff --git a/tex/context/base/mkxl/font-imp-tracing.lmt b/tex/context/base/mkxl/font-imp-tracing.lmt index 3de48af6f..00e3aaa50 100644 --- a/tex/context/base/mkxl/font-imp-tracing.lmt +++ b/tex/context/base/mkxl/font-imp-tracing.lmt @@ -112,8 +112,8 @@ local function initialize(tfmdata,key,value) if value then local vfspecials = fonts.helpers.vfspecials local vfcommands = fonts.helpers.commands - local backgrounds = vfspecials.backgrounds - local outlines = vfspecials.outlines + -- local backgrounds = vfspecials.backgrounds + -- local outlines = vfspecials.outlines local characters = tfmdata.characters local rule = { "frame", true, true, true, false, false, false, false, "palegray" } local showchar = true @@ -178,7 +178,7 @@ local function initialize(tfmdata,key,value) local vfspecials = fonts.helpers.vfspecials local vfcommands = fonts.helpers.commands local backgrounds = vfspecials.backgrounds - local outlines = vfspecials.outlines + -- local outlines = vfspecials.outlines local characters = tfmdata.characters local rulecache = backgrounds local push = vfcommands.push @@ -192,6 +192,13 @@ local function initialize(tfmdata,key,value) for unicode, character in next, characters do local mathkerns = character.mathkerns local italic = character.vitalic or character.italic + +if italic ~= italic then + -- 8427 in pagella suddenly gets a "nan" assigned ... can this be a lua bug + -- test file : staircase-001.tex + italic = 0 +end + if mathkerns or (italic and italic ~= 0) then local width = character.width or 0 local height = character.height or 0 @@ -202,7 +209,7 @@ local function initialize(tfmdata,key,value) count = count + 1 list[count] = itcolor count = count + 1 list[count] = push count = count + 1 list[count] = { "offset", width + (italic < 0 and -italic or 0), 0 } - count = count + 1 list[count] = rulecache[height][depth][abs(-italic)] + count = count + 1 list[count] = rulecache[height][depth][italic < 0 and -italic or italic] count = count + 1 list[count] = pop count = count + 1 list[count] = black end @@ -227,7 +234,7 @@ local function initialize(tfmdata,key,value) end count = count + 1 list[count] = push count = count + 1 list[count] = { "offset", width + (k < 0 and k or 0), - depth } - count = count + 1 list[count] = rulecache[h][0][abs(k)] + count = count + 1 list[count] = rulecache[h][0][k < 0 and -k or k] count = count + 1 list[count] = pop end end @@ -251,7 +258,7 @@ local function initialize(tfmdata,key,value) end count = count + 1 list[count] = push count = count + 1 list[count] = { "offset", width + (k < 0 and k or 0), height - h } - count = count + 1 list[count] = rulecache[h][0][abs(k)] + count = count + 1 list[count] = rulecache[h][0][k < 0 and k or k] count = count + 1 list[count] = pop end end diff --git a/tex/context/base/mkxl/font-ini.lmt b/tex/context/base/mkxl/font-ini.lmt index 45e8f9e18..bc68fa83d 100644 --- a/tex/context/base/mkxl/font-ini.lmt +++ b/tex/context/base/mkxl/font-ini.lmt @@ -10,8 +10,8 @@ if not modules then modules = { } end modules ['font-ini'] = {

Not much is happening here.

--ldx]]-- -local allocate = utilities.storage.allocate -local sortedhash = table.sortedhash +local sortedhash, setmetatableindex = table.sortedhash, table.setmetatableindex +local allocate = utilities.storage.allocate fonts = fonts or { } local fonts = fonts @@ -37,4 +37,63 @@ fonts.privateoffsets = { keepnames = false, -- when set to true names are always kept (not for context) } +local effects = setmetatableindex( + function(t,slant) + local v = setmetatableindex( + function(t,squeeze) + local v = setmetatableindex( + function(t,extend) + local v = setmetatableindex( + function(t,mode) + local v = setmetatableindex( + function(t,line) + local v = { + slant = slant, + squeeze = squeeze, + extend = extend, + mode = mode, + line = line * 1000, + } + t[line] = v + return v + end) + t[mode] = v + return v + end) + t[extend] = v + return v + end) + t[squeeze] = v + return v + end) + t[slant] = v + return v + end) + +-- This is an experiment, part of math engine project (MS and HH) where we wondered +-- how to deal with bad or missing alphabets. One solution is a character specific +-- effect which is supported by the engine (in fact the backend). By using a table +-- cache we limit checking. We use tweaks in font goodies to achieve it. +-- +-- character.effect = fonts.effects[slant][squeeze][extend][mode][line] +-- character.effect = fonts.toeffect { slant = .2 } + +fonts.effects = effects + +fonts.effects[0][1][1][0][0] = false + +function fonts.toeffect(t) + local slant = t.slant or 0 + local squeeze = t.squeeze or 1 + local extend = t.extend or 1 + local mode = t.mode or 0 + local line = t.line or 0 + if slant or squeeze or extend or mode or line then + local effect = effects[slant][squeeze][extend][mode][line] + if effect then + return effect + end + end +end + -- Also here now: diff --git a/tex/context/base/mkxl/good-mth.lmt b/tex/context/base/mkxl/good-mth.lmt index 0c8311efe..6b0c320b2 100644 --- a/tex/context/base/mkxl/good-mth.lmt +++ b/tex/context/base/mkxl/good-mth.lmt @@ -21,7 +21,8 @@ local fontgoodies = fonts.goodies or { } local fontcharacters = fonts.hashes.characters -local trace_defining = false trackers.register("math.defining", function(v) trace_defining = v end) +local trace_defining = false trackers.register ("math.defining", function(v) trace_defining = v end) +local use_math_goodies = true directives.register("math.nogoodies", function(v) use_math_goodies = not v end) local report_math = logs.reporter("mathematics","initializing") @@ -185,284 +186,3 @@ registerotffeature { node = initialize, } } - --- local helpers = fonts.helpers --- local upcommand = helpers.commands.up --- local rightcommand = helpers.commands.right --- local charcommand = helpers.commands.char --- local prependcommands = helpers.prependcommands --- --- -- experiment, we have to load the definitions immediately as they precede --- -- the definition so they need to be initialized in the typescript --- --- local function withscriptcode(tfmdata,unicode,data,action) --- if type(unicode) == "string" then --- local p, u = match(unicode,"^(.-):(.-)$") --- if u then --- u = tonumber(u) --- if u then --- local slots = helpers.mathscriptslots(tfmdata,u) --- if slots then --- if p == "*" then --- action(u,data) --- if type(slots) == "number" then --- action(slots,data) --- else --- for i=1,#slots do --- action(slots[i],data) --- end --- end --- else --- p = tonumber(p) --- if p then --- if type(slots) == "number" then --- action(slots,data) --- else --- action(slots[p],data) --- end --- end --- end --- end --- end --- end --- else --- action(unicode,data) --- end --- end --- --- local function finalize(tfmdata,feature,value,...) --- -- if tfmdata.mathparameters then -- funny, cambria text has this --- local goodies = tfmdata.goodies --- if goodies then --- local virtualized = mathematics.virtualized --- for i=1,#goodies do --- local goodie = goodies[i] --- local mathematics = goodie.mathematics --- local dimensions = mathematics and mathematics.dimensions --- if dimensions then --- if trace_defining then --- report_math("overloading dimensions in %a @ %p",tfmdata.properties.fullname,tfmdata.parameters.size) --- end --- local characters = tfmdata.characters --- local descriptions = tfmdata.descriptions --- local parameters = tfmdata.parameters --- local factor = parameters.factor --- local hfactor = parameters.hfactor --- local vfactor = parameters.vfactor --- -- --- tfmdata.type = "virtual" --- tfmdata.properties.virtualized = true --- -- --- local function overloadone(unicode,data) --- local character = characters[unicode] --- if not character then --- local c = virtualized[unicode] --- if c then --- character = characters[c] --- end --- end --- if character then --- local width = data.width --- local height = data.height --- local depth = data.depth --- if trace_defining and (width or height or depth) then --- report_math("overloading dimensions of %C, width %p, height %p, depth %p", --- unicode,width or 0,height or 0,depth or 0) --- end --- if width then character.width = width * hfactor end --- if height then character.height = height * vfactor end --- if depth then character.depth = depth * vfactor end --- -- --- local xoffset = data.xoffset --- local yoffset = data.yoffset --- if xoffset == "llx" then --- local d = descriptions[unicode] --- if d then --- xoffset = - d.boundingbox[1] --- character.width = character.width + xoffset * hfactor --- xoffset = rightcommand[xoffset] --- else --- xoffset = nil --- end --- elseif xoffset and xoffset ~= 0 then --- xoffset = rightcommand[xoffset * hfactor] --- else --- xoffset = nil --- end --- if yoffset and yoffset ~= 0 then --- yoffset = upcommand[yoffset * vfactor] --- else --- yoffset = nil --- end --- if xoffset or yoffset then --- local commands = character.commands --- if commands then --- prependcommands(commands,yoffset,xoffset) --- else --- -- character.commands = { { "offset", xoffset or 0, yoffset or 0, unicode } } --- local slot = charcommand[unicode] --- if xoffset and yoffset then --- character.commands = { xoffset, yoffset, slot } --- elseif xoffset then --- character.commands = { xoffset, slot } --- else --- character.commands = { yoffset, slot } --- end --- end --- end --- elseif trace_defining then --- report_math("no overloading dimensions of %C, not in font",unicode) --- end --- end --- local function overload(dimensions) --- for unicode, data in next, dimensions do --- withscriptcode(tfmdata,unicode,data,overloadone) --- end --- end --- if value == nil then --- value = { "default" } --- end --- if value == "all" or value == true then --- for name, value in next, dimensions do --- overload(value) --- end --- else --- if type(value) == "string" then --- value = utilities.parsers.settings_to_array(value) --- end --- if type(value) == "table" then --- for i=1,#value do --- local d = dimensions[value[i]] --- if d then --- overload(d) --- end --- end --- end --- end --- end --- end --- end --- end --- --- registerotffeature { --- name = "mathdimensions", --- description = "manipulate math dimensions", --- -- default = true, --- manipulators = { --- base = finalize, --- node = finalize, --- } --- } - --- local enabled = false directives.register("fontgoodies.mathkerning",function(v) enabled = v end) --- --- local function initialize(tfmdata) --- if tfmdata.mathparameters then -- funny, cambria text has this --- local goodies = tfmdata.goodies --- if goodies then --- local characters = tfmdata.characters --- if characters[0x1D44E] then -- 119886 --- -- we have at least an italic a --- for i=1,#goodies do --- local mathgoodies = goodies[i].mathematics --- if mathgoodies then --- local kerns = mathgoodies.kerns --- if kerns then --- local function kernone(unicode,data) --- local chardata = characters[unicode] --- if chardata and (not chardata.mathkerns or data.force) then --- chardata.mathkerns = data --- end --- end --- for unicode, data in next, kerns do --- withscriptcode(tfmdata,unicode,data,kernone) --- end --- return --- end --- end --- end --- else --- return -- no proper math font anyway --- end --- end --- end --- end --- --- registerotffeature { --- name = "mathkerns", --- description = "math kerns", --- -- default = true, --- initializers = { --- base = initialize, --- node = initialize, --- } --- } - --- -- math italics (not really needed) --- --- local function initialize(tfmdata) --- local goodies = tfmdata.goodies --- if goodies then --- local shared = tfmdata.shared --- for i=1,#goodies do --- local mathgoodies = goodies[i].mathematics --- if mathgoodies then --- local mathitalics = mathgoodies.italics --- if mathitalics then --- local properties = tfmdata.properties --- if properties.setitalics then --- mathitalics = mathitalics[file.nameonly(properties.name)] or mathitalics --- if mathitalics then --- if trace_goodies then --- report_goodies("loading mathitalics for font %a",properties.name) --- end --- local corrections = mathitalics.corrections --- local defaultfactor = mathitalics.defaultfactor --- -- properties.mathitalic_defaultfactor = defaultfactor -- we inherit outer one anyway (name will change) --- if corrections then --- fontgoodies.registerpostprocessor(tfmdata, function(tfmdata) -- this is another tfmdata (a copy) --- -- better make a helper so that we have less code being defined --- local properties = tfmdata.properties --- local parameters = tfmdata.parameters --- local characters = tfmdata.characters --- properties.mathitalic_defaultfactor = defaultfactor --- properties.mathitalic_defaultvalue = defaultfactor * parameters.quad --- if trace_goodies then --- report_goodies("assigning mathitalics for font %a",properties.name) --- end --- local quad = parameters.quad --- local hfactor = parameters.hfactor --- for k, v in next, corrections do --- local c = characters[k] --- if c then --- if v > -1 and v < 1 then --- c.italic = v * quad --- else --- c.italic = v * hfactor --- end --- else --- report_goodies("invalid mathitalics entry %U for font %a",k,properties.name) --- end --- end --- end) --- end --- return -- maybe not as these can accumulate --- end --- end --- end --- end --- end --- end --- end --- --- registerotffeature { --- name = "mathitalics", --- description = "additional math italic corrections", --- -- default = true, --- initializers = { --- base = initialize, --- node = initialize, --- } --- } --- --- -- fontgoodies.register("mathitalics", initialize) diff --git a/tex/context/base/mkxl/grph-inc.mkxl b/tex/context/base/mkxl/grph-inc.mkxl index a4b42e009..ffc9fdf5a 100644 --- a/tex/context/base/mkxl/grph-inc.mkxl +++ b/tex/context/base/mkxl/grph-inc.mkxl @@ -860,16 +860,16 @@ % Experimental (will become cleaner): \permanent\tolerant\protected\def\includesvgfile[#1]#*[#2]% - {\dontleavehmode\begingroup + {\hbox\bgroup % no \dontleavehmode \getdummyparameters[\c!offset=\zeropoint,#2]% \clf_includesvgfile{#1}\dimexpr\dummyparameter\c!offset\relax - \endgroup} + \egroup} \permanent\tolerant\protected\def\includesvgbuffer[#1]#*[#2]% - {\dontleavehmode\begingroup + {\hbox\bgroup % no \dontleavehmode \getdummyparameters[\c!offset=\zeropoint,#2]% \clf_includesvgbuffer{#1}\dimexpr\dummyparameter\c!offset\relax - \endgroup} + \egroup} % Bonus: diff --git a/tex/context/base/mkxl/lang-def.mkxl b/tex/context/base/mkxl/lang-def.mkxl index b7919a29b..2be05104f 100644 --- a/tex/context/base/mkxl/lang-def.mkxl +++ b/tex/context/base/mkxl/lang-def.mkxl @@ -269,12 +269,29 @@ \c!rightquotation=\leftguillemot, \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] +\installlanguage % for now we copy from slovenian + [\s!sq] + [\c!command=\v!no, + \s!lefthyphenmin=2, + \s!righthyphenmin=2, + \c!spacing=\v!packed, + \c!leftsentence=\hbox{\endash\space}, + \c!rightsentence=\hbox{\space\endash}, + \c!leftsubsentence=\endash, + \c!rightsubsentence=\endash, + \c!leftquote=\guilsingleright, + \c!rightquote=\guilsingleleft, + \c!leftquotation=\rightguillemot, + \c!rightquotation=\leftguillemot, + \c!date={\v!day,{.},\space,\v!month,\space,\v!year}] + \installlanguage [\s!polish] [\s!pl] \installlanguage [\s!czech] [\s!cs] \installlanguage [\s!slovak] [\s!sk] \installlanguage [\s!croatian] [\s!hr] \installlanguage [\s!slovenian] [\s!sl] \installlanguage [slovene] [\s!sl] % both possible (mojca: still needed?) +\installlanguage [\s!albanian] [\s!sq] % Cyrillic Languages @@ -640,7 +657,7 @@ % Greek \installlanguage - [\s!gr] + [\s!gr] % grc el-monotonic-greek.tex [\c!spacing=\v!packed, \c!leftsentence=\emdash, \c!rightsentence=\emdash, @@ -651,7 +668,7 @@ \c!leftquotation=«, \c!rightquotation=», \c!date={\v!day\space\v!month\space\v!year}, - \s!patterns=\s!agr] % ok? + \s!patterns=\s!gr] \installlanguage [\s!greek] [\s!gr] diff --git a/tex/context/base/mkxl/lang-lab.lmt b/tex/context/base/mkxl/lang-lab.lmt new file mode 100644 index 000000000..b82721b76 --- /dev/null +++ b/tex/context/base/mkxl/lang-lab.lmt @@ -0,0 +1,195 @@ +if not modules then modules = { } end modules ['lang-lab'] = { + version = 1.001, + comment = "companion to lang-lab.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local format, find = string.format, string.find +local next, rawget, type = next, rawget, type +local lpegmatch = lpeg.match +local formatters = string.formatters + +local prtcatcodes = catcodes.numbers.prtcatcodes -- todo: use different method + +local trace_labels = false trackers.register("languages.labels", function(v) trace_labels = v end) +local report_labels = logs.reporter("languages","labels") + +languages.labels = languages.labels or { } +local labels = languages.labels + +local context = context +local implement = interfaces.implement + +local variables = interfaces.variables +local settings_to_array = utilities.parsers.settings_to_array + +local splitter = lpeg.splitat(":") + +local function split(tag) + return lpegmatch(splitter,tag) +end + +labels.split = split + +-- We don't store labels at the \LUA\ end because we want to obey grouping. Otherwise we +-- would need to start using tables that relate to the group level. + +local contextsprint = context.sprint + +local f_setlabeltextpair = formatters["\\setlabeltextpair{%s}{%s}{%s}{%s}{%s}"] +local f_key_key = formatters["\\v!%s:\\v!%s"] +local f_key_raw = formatters["\\v!%s:%s"] +local f_raw_key = formatters["%s:\\v!%s"] +local f_raw_raw = formatters["%s:%s"] +local f_key = formatters["\\v!%s"] +local f_raw = formatters["%s"] + +local function definelanguagelabels(data,class,tag,rawtag) + for language, text in next, data.labels do + if text == "" then + -- skip + elseif type(text) == "table" then + contextsprint(prtcatcodes,f_setlabeltextpair(class,language,tag,text[1],text[2])) + if trace_labels then + report_labels("language %a, defining label %a as %a and %a",language,rawtag,text[1],text[2]) + end + else + contextsprint(prtcatcodes,f_setlabeltextpair(class,language,tag,text,"")) + if trace_labels then + report_labels("language %a, defining label %a as %a",language,rawtag,text) + end + end + end +end + +-- local function definelanguagelabels(data,class,tag,rawtag) +-- local setlabeltextopair = context.setlabeltextpair +-- context.pushcatcodes("prt") +-- for language, text in next, data.labels do +-- if text == "" then +-- -- skip +-- elseif type(text) == "table" then +-- setlabeltextopair(class,language,tag,text[1],text[2]) +-- if trace_labels then +-- report_labels("language %a, defining label %a as %a and %a",language,rawtag,text[1],text[2]) +-- end +-- else +-- setlabeltextopair(class,language,tag,text,"") +-- if trace_labels then +-- report_labels("language %a, defining label %a as %a",language,rawtag,text) +-- end +-- end +-- end +-- context.popcatcodes() +-- end + +function labels.define(class,name,prefixed) + local list = languages.data.labels[name] + if list then + report_labels("defining label set %a",name) + for tag, data in next, list do + tag = variables[tag] or tag + if data.hidden then + -- skip + elseif prefixed then + local first, second = lpegmatch(splitter,tag) + if second then + if rawget(variables,first) then + if rawget(variables,second) then + definelanguagelabels(data,class,f_key_key(first,second),tag) + else + definelanguagelabels(data,class,f_key_raw(first,second),tag) + end + elseif rawget(variables,second) then + definelanguagelabels(data,class,f_raw_key(first,second),tag) + else + definelanguagelabels(data,class,f_raw_raw(first,second),tag) + end + elseif rawget(variables,rawtag) then + definelanguagelabels(data,class,f_key(tag),tag) + else + definelanguagelabels(data,class,tag,tag) + end + else + definelanguagelabels(data,class,tag,tag) + end + end + else + report_labels("unknown label set %a",name) + end +end + +-- function labels.check() +-- for category, list in next, languages.data.labels do +-- for tag, specification in next, list do +-- for language, text in next, specification.labels do +-- if type(text) == "string" and find(text,",") then +-- report_labels("warning: label with comma found, category %a, language %a, tag %a, text %a", +-- category, language, tag, text) +-- end +-- end +-- end +-- end +-- end +-- +-- labels.check() + +-- interface + +interfaces.implement { + name = "definelabels", + actions = labels.define, + arguments = { "string", "string", "boolean" } +} + +-- function commands.setstrippedtextprefix(str) +-- context(string.strip(str)) +-- end + +-- list : { "a", "b", "c" } +-- separator : ", " +-- last : " and " + +-- text : "a,b,c" +-- separators : "{, },{ and }" + +local function concatcommalist(settings) -- it's too easy to forget that this one is there + local list = settings.list or settings_to_array(settings.text or "") + local size = #list + local command = settings.command and context[settings.command] or context + if size > 1 then + local separator, last = " ", " " + if settings.separators then + local set = settings_to_array(settings.separators) + separator = set[1] or settings.separator or separator + last = set[2] or settings.last or last + else + separator = settings.separator or separator + last = settings.last or last + end + command(list[1]) + for i=2,size-1 do + context(separator) + command(list[i]) + end + context(last) + end + if size > 0 then + command(list[size]) + end +end + +implement { + name = "concatcommalist", + actions = concatcommalist, + arguments = { + { + { "text" }, + { "separators" }, + { "separator" }, + { "last" }, + } + } +} diff --git a/tex/context/base/mkxl/lang-lab.mkxl b/tex/context/base/mkxl/lang-lab.mkxl index 3ce9d027f..2a42861cd 100644 --- a/tex/context/base/mkxl/lang-lab.mkxl +++ b/tex/context/base/mkxl/lang-lab.mkxl @@ -13,7 +13,7 @@ \writestatus{loading}{ConTeXt Language Macros / Labels} -\registerctxluafile{lang-lab}{} +\registerctxluafile{lang-lab}{autosuffix} \registerctxluafile{lang-txt}{} \unprotect @@ -84,10 +84,10 @@ \mutable\let\currenttextprefixtag \s!unknown \protected\def\lang_labels_define_class_indeed#1#2#3#4#5#6#7#8#9% - {\permanent\instance\protected\defcsname setup#1text\endcsname{\protecttextprefixes#2\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% - \permanent\instance\protected\defcsname preset#1text\endcsname{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% - \permanent\instance\protected\defcsname copy#1text\endcsname{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_copy }% - \permanent\instance\protected\defcsname start#1text\endcsname{\protecttextprefixes 1\def\currenttextprefixclass{#1}\lang_labels_text_prefix_start[#1]}% + {\permanent\instance\protected\defcsname setup#1text\endcsname{\protecttextprefixes #2\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% + \permanent\instance\protected\defcsname preset#1text\endcsname{\protecttextprefixes\plusone\def\currenttextprefixclass{#1}\lang_labels_text_prefix_setup}% + \permanent\instance\protected\defcsname copy#1text\endcsname{\protecttextprefixes\plusone\def\currenttextprefixclass{#1}\lang_labels_text_prefix_copy }% + \permanent\instance\protected\defcsname start#1text\endcsname{\protecttextprefixes\plusone\def\currenttextprefixclass{#1}\lang_labels_text_prefix_start[#1]}% \permanent\instance \letcsname stop#1text\endcsname \relax \permanent\instance\def#4{\reallanguagetag{\defaultlanguage\currentmainlanguage}}% \ifnum#2=\plustwo % used for math and tags @@ -278,7 +278,7 @@ \definelabelclass [head] [0] % titles \definelabelclass [label] [0] % texts -\definelabelclass [mathlabel] [0] % functions +\definelabelclass [mathlabel] [2] % functions \definelabelclass [taglabel] [2] % tags \clf_definelabels{head}{titles}\s!true\relax @@ -365,10 +365,10 @@ last {\detokenize\expandafter{\normalexpanded{\labeltext{and-2}}}}% \relax} -\setuplabeltext [\s!nl] [and-1={{, }}, and-2={{ en }}] % 1, 2 en 3 -\setuplabeltext [\s!en] [and-1={{, }}, and-2={{, }}] % 1, 2, 3 -\setuplabeltext [\s!de] [and-1={{, }}, and-2={{ und }}] % 1, 2 und 3 -\setuplabeltext [\s!hr] [and-1={{, }}, and-2={{ i }}] % 1, 2 i 3 +\setuplabeltext [\s!nl] [and-1={{, }},and-2={{ en }}] % 1, 2 en 3 +\setuplabeltext [\s!en] [and-1={{, }},and-2={{, }}] % 1, 2, 3 +\setuplabeltext [\s!de] [and-1={{, }},and-2={{ und }}] % 1, 2 und 3 +\setuplabeltext [\s!hr] [and-1={{, }},and-2={{ i }}] % 1, 2 i 3 %D Goodie (handy at \LUA\ end): diff --git a/tex/context/base/mkxl/libs-imp-zint.lmt b/tex/context/base/mkxl/libs-imp-zint.lmt index d8d882924..0ae3b1296 100644 --- a/tex/context/base/mkxl/libs-imp-zint.lmt +++ b/tex/context/base/mkxl/libs-imp-zint.lmt @@ -91,29 +91,13 @@ end) local report = logs.reporter("zint") local context = context local shown = false +local sqrt = math.sqrt --- Same performance as just context(fmt,...): 113pps (On 2013 i7 laptop.) - ------ f_rectangle = formatters["%nofill unitsquare xysized (%N,%N) shifted (%N,%N);"] -local f_hexagon = formatters["%nofill (%N,-%N)--(%N,-%N)--(%N,-%N)--(%N,-%N)--(%N,-%N)--(%N,-%N)--cycle;"] -local f_circle = formatters["%nofill unitcircle scaled %N shifted (%N,-%N);"] - -local s_done = "dofill origin --cycle;" +local f_rectangle = formatters["( unitsquare xyscaled (%N,-%N) shifted (%N,-%N) )"] +local f_hexagon = formatters["( fullhexagon scaled %N shifted (%N,-%N) )"] +local f_circle = formatters["( fullcircle scaled %N shifted (%N,-%N) )"] local f_string = formatters['draw textext("%s") scaled (%N/10) shifted (%N,-%N);'] --- A bit faster: 130pps (When I see hexagons I'll do that too but MP takes way more time.) - --- local s_preamble = [[ --- save ns; def ns (expr a, b) = nofill unitsquare xyscaled a shifted b ; enddef; --- save ds; def ds (expr a, b) = dofill unitsquare xyscaled a shifted b ; enddef; --- ]] - -local s_preamble = [[ - save ns; def ns (expr a, b) = nofill unitsquare xyscaled a shifted b ; enddef; -]] - -local f_rectangle = formatters["ns((%i,-%i),(%i,-%i));"] - local aliases = { isbnx = "isbn", ISBNX = "ISBN", @@ -144,7 +128,6 @@ local function execute(specification) if result then -- not that fast but if needed we can speed it up context.startMPcode() - context(s_preamble) local rectangles = result.rectangles local hexagons = result.hexagons local circles = result.circles @@ -155,16 +138,16 @@ local function execute(specification) local r = rectangles[i] rectangles[i] = f_rectangle(r[3],r[4],r[1],r[2]) end - rectangles[n+1] = s_done - context("% t",rectangles) + context("fill % && t && cycle;",rectangles) end if hexagons then local n = #hexagons + local s = sqrt(2) / 2 -- can be finetuned if needed for i=1,n do - hexagons[i] = f_hexagon(unpack(hexagons[i])) + local h = hexagons[i] + hexagons[i] = f_hexagon(s*h[3],h[1],h[2]) end - hexagons[n+1] = s_done - context("% t",hexagons) + context("fill % && t && cycle;",hexagons) end if circles then local n = #circles @@ -172,15 +155,13 @@ local function execute(specification) local c = circles[i] circles[i] = f_circle(c[3],c[1],c[2]) end - circles[n+1] = s_done - context("% t",circles) + context("eofill % && t && cycle;",circles) end if strings then -- We set the font at the encapsulating level. local n = #strings for i=1,n do local s = strings[i] - -- context('draw textext("%s") scaled (%N/10) shifted (%N,%N);', strings[i] = f_string(s[4],s[3],s[1],s[2]) end context("% t",strings) diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index 6b623b372..cb1b5c7a9 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -39,7 +39,7 @@ local concat, sortedhash = table.concat, table.sortedhash local setmetatableindex = table.setmetatableindex local loaddata = io.loaddata -local bpfactor = number.dimenfactors.bp +local bpfactor = number.dimenfactors.bp local osuuid = os.uuid local zlibcompresssize = xzip.compresssize @@ -129,8 +129,10 @@ local usedfonts, usedxforms, usedximages, usedxgroups local getxformname, getximagename local boundingbox, shippingmode, objectnumber local tmrx, tmry, tmsx, tmsy, tmtx, tmty -local cmrx, cmry, cmsx, cmsy, cmtx, cmty +----- cmrx, cmry, cmsx, cmsy, cmtx, cmty +local cmrx, cmry, cmtx, cmty local tmef +local c_effect local function usefont(t,k) -- a bit redundant hash -- local v = pdfgetfontname(k) @@ -142,7 +144,7 @@ end local function reset_variables(specification) pdf_h, pdf_v = 0, 0 cmrx, cmry = 1.0, 1.0 - cmsx, cmsy = 0.0, 0.0 + -- cmsx, cmsy = 0.0, 0.0 cmtx, cmty = 0.0, 0.0 tmrx, tmry = 1.0, 1.0 tmsx, tmsy = 0.0, 0.0 @@ -169,6 +171,7 @@ local function reset_variables(specification) cur_factor = 0 tj_delta = 0.0 cw = 0.0 + c_effect = nil usedfonts = setmetatableindex(usefont) usedxforms = { } usedximages = { } @@ -264,6 +267,7 @@ end -- helpers (maybe in collapse mode we have to go %.9N) local f_cm = formatters["%.6N %.6N %.6N %.6N %.6N %.6N cm"] +local f_cz = formatters["%.6N 0 0 %.6N %.6N %.6N cm"] local f_tm = formatters["%.6N %.6N %.6N %.6N %.6N %.6N Tm"] local saved_text_pos_v = 0 @@ -277,6 +281,7 @@ local function begin_text() need_font = true need_width = 0 need_mode = 0 + c_effect = nil mode = "text" end @@ -295,28 +300,32 @@ local function end_text() mode = "page" end -local saved_chararray_pos_h -local saved_chararray_pos_v +local begin_chararray, end_chararray do -local saved_b = 0 + local saved_chararray_pos_h + local saved_chararray_pos_v -local function begin_chararray() - saved_chararray_pos_h = pdf_h - saved_chararray_pos_v = pdf_v - cw = horizontalmode and saved_chararray_pos_h or - saved_chararray_pos_v - tj_delta = 0 - saved_b = b - b = b + 1 ; buffer[b] = " [" - mode = "chararray" -end + local saved_b = 0 + + begin_chararray = function() + saved_chararray_pos_h = pdf_h + saved_chararray_pos_v = pdf_v + cw = horizontalmode and saved_chararray_pos_h or - saved_chararray_pos_v + tj_delta = 0 + saved_b = b + b = b + 1 ; buffer[b] = " [" + mode = "chararray" + end + + end_chararray = function() + b = b + 1 ; buffer[b] = "] TJ" + buffer[saved_b] = concat(buffer,"",saved_b,b) + b = saved_b + pdf_h = saved_chararray_pos_h + pdf_v = saved_chararray_pos_v + mode = "text" + end -local function end_chararray() - b = b + 1 ; buffer[b] = "] TJ" - buffer[saved_b] = concat(buffer,"",saved_b,b) - b = saved_b - pdf_h = saved_chararray_pos_h - pdf_v = saved_chararray_pos_v - mode = "text" end local function begin_charmode() @@ -353,7 +362,8 @@ end local function pdf_set_pos(h,v) local move = calc_pdfpos(h,v) if move then - b = b + 1 ; buffer[b] = f_cm(cmrx, cmsx, cmsy, cmry, cmtx*bpfactor, cmty*bpfactor) + -- b = b + 1 ; buffer[b] = f_cm(cmrx, cmsx, cmsy, cmry, cmtx*bpfactor, cmty*bpfactor) + b = b + 1 ; buffer[b] = f_cz(cmrx, cmry, cmtx*bpfactor, cmty*bpfactor) pdf_h = pdf_h + cmtx pdf_v = pdf_v + cmty end @@ -385,7 +395,8 @@ local function pdf_reset_pos() return end end - b = b + 1 ; buffer[b] = f_cm(cmrx, cmsx, cmsy, cmry, cmtx*bpfactor, cmty*bpfactor) + -- b = b + 1 ; buffer[b] = f_cm(cmrx, cmsx, cmsy, cmry, cmtx*bpfactor, cmty*bpfactor) + b = b + 1 ; buffer[b] = f_cz(cmrx, cmry, cmtx*bpfactor, cmty*bpfactor) pdf_h = pdf_h + cmtx pdf_v = pdf_v + cmty end @@ -393,7 +404,8 @@ end local function pdf_set_pos_temp(h,v) local move = calc_pdfpos(h,v) if move then - b = b + 1 ; buffer[b] = f_cm(cmrx, cmsx, cmsy, cmry, cmtx*bpfactor, cmty*bpfactor) + -- b = b + 1 ; buffer[b] = f_cm(cmrx, cmsx, cmsy, cmry, cmtx*bpfactor, cmty*bpfactor) + b = b + 1 ; buffer[b] = f_cz(cmrx, cmry, cmtx*bpfactor, cmty*bpfactor) end end @@ -522,18 +534,42 @@ do collapse = v end) - local function setup_fontparameters(font,factor,sx,sy) - local slant = fontparameters.slantfactor or 0 - local extend = fontparameters.extendfactor or 1 - local squeeze = fontparameters.squeezefactor or 1 - local expand = 1 + factor / 1000000 - local format = fontproperties.format - tmef = expand - tmrx = expand * extend - tmsy = slant - tmry = squeeze - need_width = fontparameters.width or 0 - need_mode = fontparameters.mode or 0 + local function setup_fontparameters(font,factor,sx,sy,effect) + local format = fontproperties.format + local expand = 1 + factor / 1000000 + tmef = expand + + -- local slant = fontparameters.slantfactor or 0 + -- local squeeze = fontparameters.squeezefactor or 1 + -- local extend = fontparameters.extendfactor or 1 + -- tmrx = extend * expand + -- tmry = squeeze + -- tmsy = slant + -- need_width = fontparameters.width or 0 + -- need_mode = fontparameters.mode or 0 + + if effect then + if effect ~= c_effect then + tmsy = effect.slant or fontparameters.slantfactor or 0 + tmry = effect.squeeze or fontparameters.squeezefactor or 1 + tmrx = effect.extend or fontparameters.extendfactor or 1 + need_mode = effect.mode or fontparameters.mode or 0 + need_width = effect.line or fontparameters.width or 0 + c_effect = effect + else + -- we could check if effects have changed but effects use unique tables; for + -- now they win over font effects (only used in math) + end + else + tmsy = fontparameters.slantfactor or 0 + tmry = fontparameters.squeezefactor or 1 + tmrx = fontparameters.extendfactor or 1 + need_mode = fontparameters.mode or 0 + need_width = fontparameters.width or 0 + end + + tmrx = expand * tmrx + f_cur = font f_pdf = usedfonts[font] -- cache cur_factor = factor @@ -665,7 +701,6 @@ do local s = data.scale local x = data.xoffset local y = data.yoffset - if s then sx = s * sx sy = s * sy @@ -679,16 +714,21 @@ do csy = 1 end + local effect = data.effect + -- if sx ~= f_x_scale or sy ~= f_y_scale or need_tf or font ~= f_cur or f_pdf ~= f_pdf_cur or fs ~= fs_cur then - if sx ~= f_x_scale or sy ~= f_y_scale or need_tf or font ~= f_cur or f_pdf ~= f_pdf_cur or fs ~= fs_cur or mode == "page" then + if sx ~= f_x_scale or sy ~= f_y_scale or need_tf or font ~= f_cur or f_pdf ~= f_pdf_cur or fs ~= fs_cur + or mode == "page" + or effect ~= c_effect + then pdf_goto_textmode() - setup_fontparameters(font,factor,sx,sy) -- too often due to page + setup_fontparameters(font,factor,sx,sy,effect) -- too often due to page set_font() -- elseif mode == "page" then -- pdf_goto_textmode() -- set_font() elseif cur_tmrx ~= tmrx or cur_factor ~= factor then - setup_fontparameters(font,factor,sx,sy) + setup_fontparameters(font,factor,sx,sy,effect) need_tm = true end @@ -1120,11 +1160,11 @@ local flushimage do local pdfcollectedresources = lpdf.collectedresources - function codeinjections.saveboxresource(box,attributes,resources,immediate,kind,margin) + function codeinjections.saveboxresource(box,attributes,resources,immediate,kind,margin,onum) n = n + 1 local immediate = true local margin = margin or 0 -- or dimension - local objnum = pdfreserveobject() + local objnum = onum or pdfreserveobject() local list = tonut(type(box) == "number" and tex.takebox(box) or box) -- if resources == true then @@ -1146,6 +1186,10 @@ local flushimage do index = objnum, objnum = objnum, } + local r = boxresources[objnum] + if r then + flushlist(l.list) + end boxresources[objnum] = l if immediate then localconverter(list,"xform",objnum,l) @@ -1225,7 +1269,8 @@ local flushimage do tx = cmtx * bpfactor ty = cmty * bpfactor b = b + 1 ; buffer[b] = s_b - b = b + 1 ; buffer[b] = f_cm(rx,0,0,ry,tx,ty) + -- b = b + 1 ; buffer[b] = f_cm(rx,0,0,ry,tx,ty) + b = b + 1 ; buffer[b] = f_cz(rx, ry,tx,ty) b = b + 1 ; buffer[b] = f_fm(name) b = b + 1 ; buffer[b] = s_e end @@ -1452,8 +1497,6 @@ local flushimage do pdf_goto_pagemode() - -- local saved_b = b - b = b + 1 ; buffer[b] = s_b local dim_h = size_h * bpfactor @@ -1483,9 +1526,6 @@ local flushimage do b = b + 1 ; buffer[b] = rule b = b + 1 ; buffer[b] = s_e - -- buffer[saved_b] = concat(buffer," ",saved_b,b) - -- b = saved_b - end flushers.simplerule = function(pos_h,pos_v,pos_r,size_h,size_v) @@ -1581,11 +1621,12 @@ local wrapupdocument, registerpage do return list end - function lpdf.setpageorder(mapping) + function lpdf.setpageorder(mapping,p) -- mapping can be a hash so: local list = table.sortedkeys(mapping) local n = #list - if n == nofpages then + local nop = p or nofpages + if n == nop then local done = { } local hash = { } for i=1,n do @@ -1603,7 +1644,7 @@ local wrapupdocument, registerpage do end pages = done else - report("invalid page order, %i entries expected",nofpages) + report("invalid page order, %i entries expected",nop) end end @@ -2070,6 +2111,11 @@ end local flushdeferred -- defined later local level = 0 +local state = true + +function lpdf.setpagestate(s) + state = s +end local finalize do @@ -2157,6 +2203,10 @@ local finalize do -- resources can be indirect +if state == "ignore" or state == false then + +else + registerpage(pageattributes) lpdf.finalizepage(true) @@ -2171,6 +2221,8 @@ local finalize do if CropBox then pageattributes.CropBox = pdfsharedobject(CropBox ) end if BleedBox then pageattributes.BleedBox = pdfsharedobject(BleedBox) end +end + else local xformtype = specification.type or 0 @@ -2226,7 +2278,7 @@ local finalize do -- wrapper.Resources = pdfreference(pdfflushobject(boxresources)) if resources ~= "" then - boxresources = boxresources + resources + boxresources = boxresources + resources end if attributes ~= "" then wrapper = wrapper + attributes diff --git a/tex/context/base/mkxl/lpdf-rul.lmt b/tex/context/base/mkxl/lpdf-rul.lmt index 371549e19..d6a528034 100644 --- a/tex/context/base/mkxl/lpdf-rul.lmt +++ b/tex/context/base/mkxl/lpdf-rul.lmt @@ -78,28 +78,38 @@ do -- todo: RuleColor -> just string ? -- todo: fetch them instead fo push them - local predefined = { +-- local predefined = { +-- ["fake:word"] = replacer [[ +-- FakeWord(%width%,%height%,%depth%,%line%,%color%); +-- ]], +-- ["fake:rule"] = replacer[[ +-- %initializations% +-- FakeRule(%width%,%height%,%depth%,%line%,%color%); +-- ]], +-- ["fake:rest"] = replacer [[ +-- RuleDirection := "%direction%" ; +-- RuleOption := "%option%" ; +-- RuleWidth := %width% ; +-- RuleHeight := %height% ; +-- RuleDepth := %depth% ; +-- RuleH := %h% ; +-- RuleV := %v% ; +-- RuleThickness := %line% ; +-- RuleFactor := %factor% ; +-- RuleOffset := %offset% ; +-- def RuleColor = %color% enddef ; +-- %data%; +-- ]] +-- } + + local predefined = { ["fake:word"] = replacer [[ -FakeWord(%width%,%height%,%depth%,%line%,%color%); +FakeWord(RuleWidth,RuleHeight,RuleDepth,RuleThickness,RuleColor); ]], ["fake:rule"] = replacer[[ %initializations% -FakeRule(%width%,%height%,%depth%,%line%,%color%); +FakeRule(RuleWidth,RuleHeight,RuleDepth,RuleThickness,RuleColor); ]], --- ["fake:rest"] = replacer [[ ---RuleDirection := "%direction%" ; ---RuleOption := "%option%" ; ---RuleWidth := %width% ; ---RuleHeight := %height% ; ---RuleDepth := %depth% ; ---RuleH := %h% ; ---RuleV := %v% ; ---RuleThickness := %line% ; ---RuleFactor := %factor% ; ---RuleOffset := %offset% ; ---def RuleColor = %color% enddef ; ---%data%; --- ]] ["fake:rest"] = replacer [[ %data%; ]] @@ -141,7 +151,6 @@ FakeRule(%width%,%height%,%depth%,%line%,%color%); setmacro("m_rule_option", p.option or "") setmacro("m_rule_direction", p.direction or lefttoright_code) setmacro("m_rule_color", mpcolor(p.ma,p.ca,p.ta)) - print("!!!",mpcolor(p.ma,p.ca,p.ta)) -- if not initialized then initialized = true diff --git a/tex/context/base/mkxl/math-acc.mklx b/tex/context/base/mkxl/math-acc.mklx index 929a37ae6..baa24fcea 100644 --- a/tex/context/base/mkxl/math-acc.mklx +++ b/tex/context/base/mkxl/math-acc.mklx @@ -100,6 +100,7 @@ \edef\m_fixed{\ifcstok{\mathaccentparameter\c!stretch}\v!yes\else\s!fixed\fi}% \Umathaccent \usedcolorparameterattributes{\mathaccentparameter\c!color}% + % nooverflow % there is never na overflow anyway but we do accept thekey \ifcase#kind\or top \m_fixed \fam\zerocount#top diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt index 19464b522..d1a6b80e1 100644 --- a/tex/context/base/mkxl/math-act.lmt +++ b/tex/context/base/mkxl/math-act.lmt @@ -28,6 +28,9 @@ local mathematics = mathematics local texsetdimen = tex.setdimen local abs = math.abs +local blocks = characters.blocks +local stepper = utilities.parsers.stepper + local helpers = fonts.helpers local upcommand = helpers.commands.up local rightcommand = helpers.commands.right @@ -41,6 +44,10 @@ local appendaction = sequencers.appendaction local fontchars = fonts.hashes.characters local fontproperties = fonts.hashes.properties +local mathgaps = mathematics.gaps + +local use_math_goodies = true directives.register("math.nogoodies", function(v) use_math_goodies = not v end) + local mathfontparameteractions = sequencers.new { name = "mathparameters", arguments = "target,original", @@ -76,6 +83,12 @@ function mathematics.initializeparameters(target,original) if not mathparameters.FlattenedAccentBottomShiftDown then mathparameters.AccentBottomShiftDown = 0 end if not mathparameters.AccentBaseDepth then mathparameters.AccentBaseDepth = 0 end if not mathparameters.AccentFlattenedBaseDepth then mathparameters.AccentFlattenedBaseDepth = 0 end + if not mathparameters.AccentTopOvershoot then mathparameters.AccentTopOvershoot = 0 end + if not mathparameters.AccentBottomOvershoot then mathparameters.AccentBottomOvershoot = 0 end + if not mathparameters.AccentSuperscriptDrop then mathparameters.AccentSuperscriptDrop = 0 end + if not mathparameters.AccentSuperscriptPercent then mathparameters.AccentSuperscriptPercent = 0 end + if not mathparameters.DelimiterPercent then mathparameters.DelimiterPercent = 100 end + if not mathparameters.DelimiterShortfall then mathparameters.DelimiterShortfall = 0 end -- -- we don't want to reset that each time .. but then we also can't show what the value was -- @@ -97,6 +110,10 @@ local how = { NoLimitSubFactor = "unscaled", PrimeRaisePercent = "unscaled", PrimeWidthPercent = "unscaled", + AccentTopOvershoot = "unscaled", + AccentBottomOvershoot = "unscaled", + AccentSuperscriptPercent = "unscaled", + DelimiterPercent = "unscaled", } function mathematics.scaleparameters(target,original) @@ -157,62 +174,64 @@ end -- end function mathematics.overloadparameters(target,original) - local mathparameters = target.mathparameters - if mathparameters and next(mathparameters) then - local goodies = target.goodies - if goodies then - for i=1,#goodies do - local goodie = goodies[i] - local mathematics = goodie.mathematics - if mathematics then - local parameters = mathematics.parameters - local bigslots = mathematics.bigslots or mathematics.bigs - if parameters then - if trace_defining then - report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size) - end - for name, value in next, parameters do - local tvalue = type(value) - local oldvalue = mathparameters[name] - local newvalue = oldvalue - if tvalue == "number" then - newvalue = value - elseif tvalue == "string" then - -- delay till all set - elseif tvalue == "function" then - newvalue = value(oldvalue,target,original) - elseif not tvalue then - newvalue = nil + if use_math_goodies then + local mathparameters = target.mathparameters + if mathparameters and next(mathparameters) then + local goodies = target.goodies + if goodies then + for i=1,#goodies do + local goodie = goodies[i] + local mathematics = goodie.mathematics + if mathematics then + local parameters = mathematics.parameters + local bigslots = mathematics.bigslots or mathematics.bigs + if parameters then + if trace_defining then + report_math("overloading math parameters in %a @ %p",target.properties.fullname,target.parameters.size) end - if trace_defining and oldvalue ~= newvalue then - report_math("overloading math parameter %a: %S => %S",name,oldvalue or 0,newvalue) + for name, value in next, parameters do + local tvalue = type(value) + local oldvalue = mathparameters[name] + local newvalue = oldvalue + if tvalue == "number" then + newvalue = value + elseif tvalue == "string" then + -- delay till all set + elseif tvalue == "function" then + newvalue = value(oldvalue,target,original) + elseif not tvalue then + newvalue = nil + end + if trace_defining and oldvalue ~= newvalue then + report_math("overloading math parameter %a: %S => %S",name,oldvalue or 0,newvalue) + end + mathparameters[name] = newvalue end - mathparameters[name] = newvalue - end - for name, value in next, parameters do - local tvalue = type(value) - if tvalue == "string" then - local newvalue = mathparameters[value] - -- if not newvalue then - -- local code = loadstring("return " .. value,"","t",mathparameters) - -- if type(code) == "function" then - -- local okay, v = pcall(code) - -- if okay then - -- newvalue = v - -- end - -- end - -- end - if newvalue then - -- split in number and string - mathparameters[name] = newvalue - elseif trace_defining then - report_math("ignoring math parameter %a: %S",name,value) + for name, value in next, parameters do + local tvalue = type(value) + if tvalue == "string" then + local newvalue = mathparameters[value] + -- if not newvalue then + -- local code = loadstring("return " .. value,"","t",mathparameters) + -- if type(code) == "function" then + -- local okay, v = pcall(code) + -- if okay then + -- newvalue = v + -- end + -- end + -- end + if newvalue then + -- split in number and string + mathparameters[name] = newvalue + elseif trace_defining then + report_math("ignoring math parameter %a: %S",name,value) + end end end end - end - if bigslots then - target.bigslots = bigslots + if bigslots then + target.bigslots = bigslots + end end end end @@ -241,14 +260,31 @@ local function report_tweak(fmt,target,original,...) end end -do +-- { +-- tweak = "dimensions", +-- list = { +-- ["lowercasegreeksansserifbolditalic"] = { +-- -- delta = 0x003B1 - 0x1D7AA, +-- slant = -0.2, +-- line = 0.1, +-- mode = 1, +-- width = 0.675, +-- -- scale = 0.975, +-- squeeze = 0.975, +-- extend = .7, +-- }, +-- }, +-- }, - local stepper = utilities.parsers.stepper - local count = 0 +do + local stepper = utilities.parsers.stepper + local count = 0 local splitter = lpeg.tsplitat(".") + local toeffect = fonts.toeffect local function adapt(list,target,original,targetcharacters,originalcharacters,k,v,compact,n) + k = mathgaps[k] or k local character = targetcharacters[k] if character then if not character.tweaked then @@ -257,77 +293,81 @@ do v = list[v] t = type(v) end - if t == "table" then + if t == "table" and next(v) then + local original = v.original + if not original then + local delta = v.delta + if delta then + original = k + delta + end + end + if original then + original = mathgaps[original] or original + local data = targetcharacters[original] + if data then + data = table.copy(data) + data.unicode = original + targetcharacters[k] = data + character = data + else + report_mathtweak("no slot %U",original) + return + end + end + -- local width = character.width local height = character.height local depth = character.depth local italic = character.italic local topaccent = character.topaccent - if #v > 0 then - local offsetfactor = v[1] - local widthfactor = v[2] - local italicfactor = v[3] - local anchorfactor = v[4] - if width then - character.advance = width -- so advance is oldwidth - character.xoffset = offsetfactor * width - character.width = widthfactor * width - end - if italic then - character.italic = italicfactor * italic - elseif width and italicfactor ~= 1 then - character.italic = italicfactor * width - end - if topaccent and topaccent > 0 then - if anchorfactor then - character.topaccent = anchorfactor * topaccent - elseif width then - character.topaccent = topaccent + (character.width - character.advance) / 2 - end - end - else - local widthfactor = v.width - local heightfactor = v.height - local depthfactor = v.depth - local italicfactor = v.italic - local anchorfactor = v.anchor - local advancefactor = v.advance - local xoffsetfactor = v.xoffset - local yoffsetfactor = v.yoffset - local scalefactor = v.scale - local total = (height or 0) + (depth or 0) - if scalefactor ~= 1 then - character.scale = scalefactor - end - if width and width ~= 0 then - if advancefactor then - character.advance = advancefactor * width - end - if widthfactor then - character.width = widthfactor * width - end - if xoffsetfactor then - character.xoffset = xoffsetfactor * width - end + -- + local widthfactor = v.width + local heightfactor = v.height + local depthfactor = v.depth + local italicfactor = v.italic + local anchorfactor = v.anchor + local advancefactor = v.advance + local xoffsetfactor = v.xoffset + local yoffsetfactor = v.yoffset + local scalefactor = v.scale + local total = (height or 0) + (depth or 0) + if scalefactor ~= 1 then + character.scale = scalefactor + end + if width and width ~= 0 then + if advancefactor then + character.advance = advancefactor * width end - if height and height ~= 0 then - if heightfactor then - character.height = heightfactor * height - end + if widthfactor then + character.width = widthfactor * width end - if depth and depthfactor then - character.depth = depthfactor * depth + if xoffsetfactor then + character.xoffset = xoffsetfactor * width end - if yoffsetfactor then - character.yoffset = yoffsetfactor * total + end + if height and height ~= 0 then + if heightfactor then + character.height = heightfactor * height end - if italic and italic ~= 0 and italicfactor then + end + if depth and depthfactor then + character.depth = depthfactor * depth + end + if yoffsetfactor then + character.yoffset = yoffsetfactor * total + end + if italicfactor then + if italic then character.italic = italicfactor * italic + elseif width and italicfactor ~= 1 then + character.italic = italicfactor * width end - if anchorfactor then - character.topaccent = anchorfactor * (topaccent or width) - end end + if anchorfactor then + character.topaccent = anchorfactor * (topaccent or width) + end + -- todo: check once per tweak + character.effect = toeffect(v) if trace_tweaking then report_tweak("adapting dimensions of %U ",target,original,k) end @@ -359,30 +399,60 @@ do end end + -- ["0x7C.variants.*"] = { squeeze = 0.10, height = 0.10, depth = 0.10 }, + local function detail(characters,k) if type(k) == "string" then local t = lpeg.match(splitter,k) local n = #t if n > 0 then - local m = tonumber(t[1]) or tonumber(t[1],16) - if m then - local c = characters[m] + local base = tonumber(t[1]) or tonumber(t[1],16) + if base then + local c = characters[base] if c and n > 1 then - m = t[2] - if m == "parts" then + local list = t[2] + if list == "parts" then local nxt = c.next while nxt do c = characters[nxt] nxt = c.next end c = c.hparts or c.vparts - if c and n > 2 then - m = tonumber(t[3]) - if m then - c = c[m] - if c then - return c.glyph + if c then + local index = t[3] + if index == "*" then + return t + else + index = tonumber(index) + if index then + c = c[index] + if c then + return c.glyph + end + end + end + end + elseif list == "variants" then + local index = t[3] + if index == "*" then + local t = { } + local nxt = c.next + while nxt do + t[#t+1] = nxt + c = characters[nxt] + nxt = c.next + end + return t + else + index = tonumber(index) + if index then + local nxt = c.next + while nxt and index > 1 do + c = characters[nxt] + nxt = c.next + index = index - 1 end + return nxt end end end @@ -405,12 +475,27 @@ do adapt(list,target,original,targetcharacters,originalcharacters,k,v,compact,1) elseif t == "string" then local d = detail(targetcharacters,k) - if d then + local t = type(d) + if t == "table" then + for i=1,#d do + adapt(list,target,original,targetcharacters,originalcharacters,d[i],v,compact,1) + end + elseif t == "number" then adapt(list,target,original,targetcharacters,originalcharacters,d,v,compact,1) + elseif d then + -- some kind of error else - stepper(k,function(n) - adapt(list,target,original,targetcharacters,originalcharacters,n,v,compact,1) - end) + local r = blocks[k] + if r then + local done = false + for i=r.first,r.last do + adapt(list,target,original,targetcharacters,originalcharacters,i,v,compact,1) + end + else + stepper(k,function(n) + adapt(list,target,original,targetcharacters,originalcharacters,n,v,compact,1) + end) + end end -- elseif t == "table" then -- for i=1,#t do @@ -426,6 +511,53 @@ do end +do + + function mathtweaks.wipevariants(target,original,parameters) + local list = parameters.list + if list then + local targetcharacters = target.characters + -- local originalcharacters = original.characters + local count = 0 + for k, v in sortedhash(list) do + local ori = targetcharacters[k] + local nxt = ori.next + local cnt = v + if nxt then + local hpt, vpt + local lst = { } + while nxt do + local chr = targetcharacters[nxt] + lst[#lst+1] = chr + nxt = chr.next + if not nxt then + hpt = chr.hparts + vpt = chr.vparts + break + end + end + if hpt or vpt then + count = count + 1 + if cnt ~= "*" then + if #lst < cnt then + cnt = #lst + end + ori = lst[cnt] + end + ori.hparts = hpt + ori.vparts = vpt + -- ori.next = nil -- so we keep the chain + end + end + end + if trace_tweaking and count > 0 then + report_mathtweak("%i variants wiped",count) + end + end + end + +end + do function mathtweaks.replacements(target,original,parameters) @@ -441,7 +573,7 @@ do v = unicodes[v] end if type(v) == "number" then - targetcharacters[k] = targetcharacters[v] + targetcharacters[mathgaps[k] or k] = targetcharacters[mathgaps[v] or v] count = count + 1 end end @@ -462,7 +594,7 @@ do for k, v in sortedhash(list) do local sub = getsubstitution(original,k,v,true) if sub then - targetcharacters[k] = targetcharacters[sub] + targetcharacters[mathgaps[k] or k] = targetcharacters[mathgaps[sub] or sub] count = count + 1 end end @@ -669,9 +801,10 @@ end do function mathtweaks.fixanchors(target,original,parameters) - local factor = tonumber(parameters.factor) + local targetcharacters= target.characters + local factor = tonumber(parameters.factor) or 0 if factor ~= 0 then - for k, v in next, target.characters do + for k, v in next, targetcharacters do local a = v.topaccent if a and a > 0 then v.topaccent = a * factor @@ -680,6 +813,76 @@ do end end + -- local default = { + -- "digitsnormal", + -- "lowercasedoublestruck", + -- "uppercasedoublestruck", + -- } + + local function wipe(target,original,parameters,field) + local targetcharacters = target.characters + local function step(s,l) + local done = false + while s do + local c = targetcharacters[mathgaps[s] or s] + if c then + local v = c[field] + if v then + if trace_tweaking then + if l then + report_tweak("removing %a in range %a from %C",target,original,field,l,s) + else + report_tweak("removing %a from %C",target,original,field,s) + end + end + c[field] = nil + done = true + end + s = c.smaller + else + break + end + end + return done + end + local list = parameters.list -- todo: ranges + -- if list == "default" then + -- list = default + -- else + if type(list) == "string" then + list = { list } + end + for i=1,#list do + local l = list[i] + local r = blocks[l] + if r then + local done = false + for i=r.first,r.last do + if step(i,l) then + done = true + end + end + if not done and trace_tweaking then + report_mathtweak("there is no need to remove %a range %a",field,l) + end + else + stepper(l,step) + end + end + end + + function mathtweaks.wipeanchors(target,original,parameters) + wipe(target,original,parameters,"topaccent") + end + + function mathtweaks.wipeitalics(target,original,parameters) + wipe(target,original,parameters,"italic") + end + + -- function mathtweaks.fixdigits(target,original,parameters) + -- mathtweaks.fixanchors(target,original,{ list = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } }) + -- end + end do @@ -690,16 +893,96 @@ do local kerns = parameters.list if kerns then local characters = target.characters - local function kernone(unicode,data) - local chardata = characters[unicode] - local height = chardata.height or 0 - local depth = chardata.depth or 0 - local width = chardata.width or 0 + local function setone(unicode,data) + local chardata = characters[mathgaps[unicode] or unicode] + local width = chardata.width or 0 local k = data.topleft ; if k and k ~= 0 then chardata.topleft = k * width end local k = data.topright ; if k and k ~= 0 then chardata.topright = k * width end local k = data.bottomleft ; if k and k ~= 0 then chardata.bottomleft = k * width end local k = data.bottomright ; if k and k ~= 0 then chardata.bottomright = k * width end end + for unicode, data in next, kerns do + setone(unicode,data) -- withscriptcode(tfmdata,unicode,data,kernone) + -- also smaller + end + end + end + +end + +do + + function mathtweaks.margins(target,original,parameters) + local margins = parameters.list + if margins then + local characters = target.characters + local function setone(unicode,data) + local chardata = characters[mathgaps[unicode] or unicode] + local width = chardata.width or 0 + local total = (chardata.height or 0) + (chardata.depth or 0) + local k = data.left ; if k and k ~= 0 then chardata.leftmargin = k * width end + local k = data.right ; if k and k ~= 0 then chardata.rightmargin = k * width end + local k = data.top ; if k and k ~= 0 then chardata.topmargin = k * total end + local k = data.bottom ; if k and k ~= 0 then chardata.bottommargin = k * total end + end + for unicode, data in next, margins do + setone(unicode,data) -- withscriptcode(tfmdata,unicode,data,kernone) + -- also smaller + end + end + end + +end + +do + + -- musical timestamp: June 2022, Porcupine Tree - Rats Return + + -- we can actually share these and flag them as being tweaked + + local function scale(t,width,total) + local r = { } + for i=1,#t do + local ti = t[i] + local kern = ti.kern + local height = ti.height + if kern then + kern = width * kern + end + if height then + height = total * height + end + r[i] = { + kern = kern or 0, + height = height or 0, + } + end + return r + end + + function mathtweaks.staircase(target,original,parameters) + local kerns = parameters.list + if kerns then + local characters = target.characters + local function kernone(unicode,data) + local chardata = characters[mathgaps[unicode] or unicode] + local total = (chardata.height or 0) + (chardata.depth or 0) + local width = chardata.width or 0 + if data then + local tl = data.topleft ; if tl then tl = scale(tl,width,total) end + local tr = data.topright ; if tr then tr = scale(tr,width,total) end + local bl = data.bottomleft ; if bl then bl = scale(bl,width,total) end + local br = data.bottomright ; if br then br = scale(br,width,total) end + chardata.mathkerns = { + topleft = tl, + ropright = tr, + bottomleft = bl, + bottomright = br, + } + else + chardata.mathkerns = nil + end + end for unicode, data in next, kerns do kernone(unicode,data) -- withscriptcode(tfmdata,unicode,data,kernone) -- also smaller @@ -773,16 +1056,14 @@ do yoffset = depth - d depth = d height = height - baseheight - else - if height > 0 then - local h = tonumber(factor) * height - yoffset = h - height - height = h - elseif depth > 0 then - local d = tonumber(factor) * depth - yoffset = depth - d - depth = d - end + elseif height > 0 then + local h = tonumber(factor) * height + yoffset = h - height + height = h + elseif depth > 0 then + local d = tonumber(factor) * depth + yoffset = depth - d + depth = d end c.yoffset = yoffset ~= 0 and yoffset or nil c.height = height > 0 and height or nil @@ -791,7 +1072,7 @@ do end end - local function process(characters,list,baseheight,basedepth) + local function process(target,original,characters,list,baseheight,basedepth) if list then for k, v in sortedhash(list) do -- sort for tracing local c = characters[k] @@ -826,7 +1107,7 @@ do end end if trace_tweaking then - report_tweak("adapting extensible (%i sizes, %i parts) %U",k,nv,ns) + report_tweak("adapting extensible (%i sizes, %i parts) %U",target,original,k,nv,ns) end end end @@ -847,7 +1128,7 @@ do t = type(v) end if t == "table" then - process(characters,v,baseheight,basedepth) + process(target,original,characters,v,baseheight,basedepth) end end end @@ -1075,7 +1356,7 @@ do unicode = unicode, } if trace_tweaking then - report_tweak("character %U has been wiped",unicode) + report_tweak("character %U has been wiped",target,original,unicode) end end end @@ -1134,41 +1415,6 @@ do end --- do --- --- local list = { --- { 0x00AF, 1 }, --- } --- --- local minint = -2147483647 - 1 --- --- local function fix(target,original,targetcharacters,unicode,factor) --- local chardata = targetcharacters[unicode] --- if chardata and factor then --- local accent = chardata.topaccent --- if not accent then --- local width = chardata.width or 0 --- local accent = (tonumber(factor) and factor * width) or (factor and minint) --- chardata.topaccent = accent --- if trace_tweaking then --- report_tweak("fixing accent %U",target,original,unicode) --- end --- end --- end --- end --- --- function mathtweaks.fixaccents(target,original,parameters) --- local targetcharacters = target.characters --- for i=1,#list do --- local entry = list[i] --- if entry then --- fix(target,original,targetcharacters,entry[1],entry[2]) --- end --- end --- end --- --- end - do local reported = { } @@ -1239,16 +1485,20 @@ local function applytweaks(when,target,original) end function mathematics.tweakbeforecopyingfont(target,original) - local mathparameters = target.mathparameters -- why not hasmath - if mathparameters then - applytweaks("beforecopying",target,original) + if use_math_goodies then + local mathparameters = target.mathparameters -- why not hasmath + if mathparameters then + applytweaks("beforecopying",target,original) + end end end function mathematics.tweakaftercopyingfont(target,original) - local mathparameters = target.mathparameters -- why not hasmath - if mathparameters then - applytweaks("aftercopying",target,original) + if use_math_goodies then + local mathparameters = target.mathparameters -- why not hasmath + if mathparameters then + applytweaks("aftercopying",target,original) + end end end @@ -1282,6 +1532,8 @@ local e_unknown = extensibles.unknown local unknown = { e_unknown, false, false } +-- top curly bracket: 23DE + local function extensiblecode(font,unicode) local characters = fontcharacters[font] local character = characters[unicode] diff --git a/tex/context/base/mkxl/math-ali.mkxl b/tex/context/base/mkxl/math-ali.mkxl index d58bd464f..e2d7d8d69 100644 --- a/tex/context/base/mkxl/math-ali.mkxl +++ b/tex/context/base/mkxl/math-ali.mkxl @@ -29,27 +29,65 @@ % matrix : ok % substack : +% Alignment overhaul timestamp: around watching GhostNote Live in Utrecht 2022 +% (energizing funky professionalism). + +%D The following macros are moved to this module because here we deal mostly with +%D alignment issues. In principle one should see strc-mat, math-ini and math-ali as +%D a close operation. The \type {\displaywidth} is only known inside a display +%D formula, so we need to catch it when still zero. + +\permanent\def\checkeddisplaywidth % hsize if zero + {\dimexpr + \ifzeropt\displaywidth + \hsize + \else + \displaywidth + \fi + \relax} + +\permanent\def\maximizeddisplaywidth % larger than zero but within hsize + {\dimexpr + \ifzeropt\displaywidth + \hsize + \orelse\ifdim\displaywidth>\hsize + \hsize + \else + \displaywidth + \fi + \relax} + %D \macros %D {definemathalignment, setupmathalignment, startmathalignment} %D %D Modules may provide additional alignment features. The following kind of plain %D mechanisms are provided by the core. -\newtoks\mathdisplayaligntweaks +% \startformula +% \startalign[m=3, n=2, align={1:right,2:left},distance=2em] +% \NC 1.1 \NC = 1.2 \NC 2.1 \NC = 2.2 \NC 3.1 \NC = 3.2 \NR +% \NC 1 \NC = 1 \NC 2 \NC = 2 \NC 3 \NC = 3 \NR +% \NC 1.1 \NC = 1.2 \NC 2.1 \NC = 2.2 \NC 3.1 \NC = 3.2 \NR +% \stopalign +% \stopformula -\newtoks\t_math_align_a -\newtoks\t_math_align_b -\newtoks\t_math_align_c +\newtoks\mathdisplayaligntweaks -\newskip\d_math_eqalign_distance -\newskip\d_math_eqalign_rulethickness +\newtoks \t_math_align_a +\newtoks \t_math_align_b +\newtoks \t_math_align_c +\newskip \d_math_eqalign_distance +\newskip \d_math_eqalign_rulethickness +\newdimen\d_math_eqalign_number_distance +\newcount\c_math_eqalign_repeat \protected\def\math_eqalign_distance {\relax \ifdim\d_math_eqalign_distance>\zeropoint - % \hskip\d_math_eqalign_distance \tabskip\d_math_eqalign_distance \fi + %global\expandafter\integerdef\csname\??mathbeginclass\the\c_math_eqalign_column\endcsname\mathbegincode + \global\expandafter\integerdef\csname\??mathendclass \the\c_math_eqalign_column\endcsname\mathendcode \mathalignmentparameter\c!separator \relax} @@ -58,20 +96,28 @@ \def\math_build_eqalign {\scratchtoks\emptytoks \d_math_eqalign_distance\mathalignmentparameter\c!distance\relax + \ifcstok{\mathalignmentparameter\c!align}\v!auto + \d_math_eqalign_number_distance\mathalignmentparameter\c!numberdistance\relax + \letmathalignmentparameter\c!align\v!middle + \else + \d_math_eqalign_number_distance\zeropoint + \fi \scratchcounterone\mathalignmentparameter\c!m \scratchcountertwo\mathalignmentparameter\c!n - \etoksapp\scratchtoks{\the\t_math_align_a}% + \toksapp\scratchtoks\t_math_align_a + \toksapp\scratchtoks{\global\c_math_eqalign_repeat\zerocount}% \scratchcounter\plusone \dorecurse{\numexpr\scratchcounterone*\scratchcountertwo-\plusone\relax} {\ifnum\scratchcounter=\scratchcountertwo \scratchcounter\plusone - \etoksapp\scratchtoks{\math_eqalign_distance}% - \etoksapp\scratchtoks{\global\c_math_eqalign_column\zerocount}% + \toksapp\scratchtoks{\math_eqalign_distance}% + \etoksapp\scratchtoks{\global\advance\c_math_eqalign_repeat\the\scratchcountertwo\relax}% \else \advance\scratchcounter\plusone \fi - \etoksapp\scratchtoks{\the\t_math_align_b}}% - \etoksapp\scratchtoks{\the\t_math_align_c}} + \toksapp\scratchtoks\t_math_align_b}% + \toksapp\scratchtoks\t_math_align_c + \toksapp\scratchtoks{\global\c_math_eqalign_repeat\zerocount}} \def\math_eqalign_set_defaults {\normalbaselines % hm, spacing ? @@ -79,16 +125,26 @@ \tabskip\zeropoint \everycr\emptytoks} -\def\math_math_in_eqalign#1% - {\mathbeginclass\mathordcode - \mathendclass \mathordcode +%installcorenamespace{mathbeginclass} % not needed currently +\installcorenamespace{mathendclass} + +%global\expandafter\integerdef\csname\??mathbeginclass\the\zerocount\endcsname\mathbegincode +\global\expandafter\integerdef\csname\??mathendclass \the\zerocount\endcsname\mathendcode + +\protected\def\math_math_in_eqalign#1% + {\mathbeginclass\csname\??mathendclass\the\numexpr\c_math_eqalign_column-\plusone\relax\endcsname \startforceddisplaymath \tabskip\zeropoint \everycr\emptytoks #1% - \stopforceddisplaymath} + \stopforceddisplaymath + \ifnum\lastrightclass<\mathunsetcode + %global\expandafter\integerdef\csname\??mathbeginclass\the\c_math_eqalign_column\endcsname\lastleftclass + \global\expandafter\integerdef\csname\??mathendclass \the\c_math_eqalign_column\endcsname\lastrightclass + \fi + } -\def\math_text_in_eqalign#1% +\noaligned\protected\def\math_text_in_eqalign#1% {\mathbeginclass\mathordcode \mathendclass \mathordcode \startimath @@ -97,40 +153,72 @@ #1% \stopimath} -\let\math_align_openup\relax % defined later on - -\permanent\protected\def\eqalign#1% rather plain, is this used at all ... - {\dontleavehmode - \mskip\thinmuskip\vcenter\bgroup % \vcenter \s!class \mathwrappercode \bgroup - \math_align_openup - \mathsurround\zeropoint % \math_eqalign_set_defaults - \ialign - {\strut - \hfil - \mathbeginclass\mathordcode - \mathendclass \mathordcode - \startforceddisplaymath\aligncontent\stopforceddisplaymath - \aligntab - \mathbeginclass\mathordcode - \mathendclass \mathordcode - \startforceddisplaymath\aligncontent\stopforceddisplaymath - \hfil - \crcr - #1% - \crcr}% - \egroup\mskip\thinmuskip} % \egroup - -% preamble is scanned for tabskips so we need the span to prevent an error message - -\setnewconstant\eqalignmode\plusone +% the preamble is scanned for tabskips so we need the span to prevent an error +% message but we can probably do without that hack now .. best not change this +% now .. what works now keeps working + +\setnewconstant\c_strc_formulas_check_width\plusone + +\newboundary\c_math_align_l_marker +\newboundary\c_math_align_r_marker + +% formula : numbermethod down : default +% formula : numberlocation overlay : option +% mathalign : align ..| auto : +% mathalign : adaptive yes : synchronize glue + +% \startplaceformula +% \startformula[numbermethod=down,numberlocation=normal] +% \medmuskip 4mu plus 2mu minus 2mu \showmakeup[mathglue]\showglyphs\showboxes +% \startalign[adaptive=yes,align=auto] +% \NC aaa+x+xxxxxxxx+x+xxxx \EQ x+xxx \NR[eq:two:zz] +% \NC x+x \EQ x+x+x+xxx+x+x+xxx+xx+xx \NR[eq:two:xx] +% \stopalign +% \stopformula +% \stopplaceformula +% +% \startplaceformula +% \startformula[numbermethod=normal,numberlocation=normal] +% \medmuskip 4mu plus 2mu minus 2mu \showmakeup[mathglue]\showglyphs\showboxes +% \startalign[adaptive=no,align=middle] +% \NC aaa+x+xxxxxxxx+x+xxxx \EQ x+xxx \NR[eq:two:zz] +% \NC x+x \EQ x+x+x+xxx+x+x+xxx+xx+xx \NR[eq:two:xx] +% \stopalign +% \stopformula +% \stopplaceformula + +\newconditional\c_math_align_overflow_mode \settrue\c_math_align_overflow_mode +\newconditional\c_math_align_reformat_mode \settrue\c_math_align_reformat_mode +\newconditional\c_strc_formulas_overlay_number \settrue\c_strc_formulas_overlay_number + +\protected\def\math_text_in_align + {\scratchcounter\numexpr\c_math_eqalign_row+\plusone\relax + \usemathalignmentstyleandcolor\c!textstyle\c!textcolor + \usemathalignmentstyleandcolor{\c!textstyle:\the\scratchcounter}{\c!textcolor:\the\scratchcounter}% + \mathalignmentparameter\c!text + \mathalignmentparameter{\c!text:\the\scratchcounter}} + +\def\math_align_initialize_class_states + {} -% use zeroskipplusfill +\def\math_align_reset_class_states + {\lastleftclass \mathbegincode + \lastrightclass\mathendcode} -\def\math_prepare_r_eqalign_no - {\t_math_align_a - {\strut - \tabskip\zeropoint +\def\math_prepare_l_eqalign_no % \checkeddisplaymath + {\math_align_initialize_class_states + \t_math_align_a + {\relax + \strut + \math_text_in_align \aligncontent % for picking up the number + \ifnum\c_strc_math_ragged_status=\plusthree + \tabskip\zeropoint\relax + \else + \tabskip\centeringskip + \fi + \boundary\c_math_align_l_marker + \math_align_reset_class_states \aligntab \math_first_in_eqalign \hfil @@ -147,39 +235,51 @@ \math_math_in_eqalign{\aligncontent}% \math_right_of_eqalign \tabskip\zeropoint}% - \ifnum\mathraggedstatus=\plusone + \ifnum\c_strc_math_ragged_status=\plusthree \t_math_align_c {\hfil + \tabskip\zeropoint \aligntab \span - \math_text_in_eqalign{\aligncontent}% + \boundary\c_math_align_r_marker + \math_alignment_rbox{\aligncontent}% \tabskip\zeropoint}% - \orelse\ifnum\mathraggedstatus=\plusthree + \orelse\ifnum\c_strc_math_ragged_status=\plusone \t_math_align_c {\hfil - \tabskip\zeropoint\s!plus 1\s!fill + \tabskip\stretchingfillskip \aligntab \span - \math_text_in_eqalign{\aligncontent}% + \boundary\c_math_align_r_marker + \math_alignment_rbox{\aligncontent}% \tabskip\zeropoint}% \else \t_math_align_c {\hfil - \tabskip\centering + \tabskip\centeringskip \aligntab \span - \llap{\math_text_in_eqalign{\aligncontent}}% + \boundary\c_math_align_r_marker + \math_alignment_rbox{\aligncontent}% \tabskip\zeropoint}% \fi \math_build_eqalign \the\mathdisplayaligntweaks - \tabskip\centering} + \tabskip\zeropoint + \ifnum\c_strc_math_ragged_status=\plusthree + \tabskip\stretchingfillskip + \fi} -\def\math_prepare_l_eqalign_no % \checkeddisplaymath - {\t_math_align_a - {\strut - \tabskip\zeropoint +\def\math_prepare_r_eqalign_no + {\math_align_initialize_class_states + \t_math_align_a + {\relax + \strut + \math_text_in_align + \tabskip\centeringskip \aligncontent % for picking up the number + \boundary\c_math_align_l_marker + \math_align_reset_class_states \aligntab \math_first_in_eqalign \hfil @@ -196,97 +296,88 @@ \math_math_in_eqalign{\aligncontent}% \math_right_of_eqalign \tabskip\zeropoint}% - \ifnum\mathraggedstatus=\plusone - \t_math_align_c - {\hfil - \aligntab - \kern-\displaywidth - \span - \rlap{\math_text_in_eqalign{\aligncontent}} - \tabskip\displaywidth}% - \orelse\ifnum\mathraggedstatus=\plusthree + \ifnum\c_strc_math_ragged_status=\plusthree \t_math_align_c {\hfil - \tabskip\zeropoint\s!plus 1\s!fill \aligntab - \kern-\displaywidth + \hfill % the only one ! \span - \math_rlap{\math_text_in_eqalign{\aligncontent}}% - \tabskip\displaywidth}% + \boundary\c_math_align_r_marker + \math_alignment_lbox{\aligncontent}% + \tabskip\zeropoint}% + \orelse\ifnum\c_strc_math_ragged_status=\plusone + \ifnum\c_strc_math_number_variant=\plusone + \t_math_align_c + {\hfil + \tabskip\stretchingfillskip + \aligntab + \span + \boundary\c_math_align_r_marker + \math_alignment_lbox{\aligncontent}% + \tabskip\zeropoint}% + \else + \t_math_align_c + {\hfil + \tabskip\zeropoint + \aligntab + \span + \boundary\c_math_align_r_marker + \math_alignment_lbox{\aligncontent}% + \tabskip\stretchingfillskip}% + \fi \else \t_math_align_c {\hfil - \tabskip\centering + \tabskip\centeringskip % fails in some cases \aligntab - \kern-\displaywidth \span - \rlap{\math_text_in_eqalign{\aligncontent}}% - \tabskip\displaywidth}% + \boundary\c_math_align_r_marker + \math_alignment_lbox{\aligncontent}% + \tabskip\zeropoint}% \fi \math_build_eqalign \the\mathdisplayaligntweaks - \tabskip\centering} + \tabskip\zeropoint} + +% \def\math_halign_checked_nop +% {\halign +% \ifconditional\c_math_align_overflow_mode +% callback +% attr +% \mathnumberlocationattribute +% \numexpr\ifconditional\c_math_align_reformat_mode\plusfour\else\plustwo\fi * \plussixteen\relax % just a signal +% \fi} +% +% \def\math_halign_checked_yes +% {\math_halign_checked_nop +% \ifcase\c_strc_formulas_check_width\else +% to \checkeddisplaywidth +% \fi} +% +% \def\math_halign_checked +% {\ifnum\c_strc_formulas_place_number_mode =\plusthree \math_halign_checked_yes \orelse +% \ifnum\c_strc_formulas_number_mode =\plusthree \math_halign_checked_yes \orelse +% \ifnum\c_strc_formulas_sub_number_mode =\plusthree \math_halign_checked_yes \orelse +% \ifnum\c_strc_formulas_nested_number_mode=\plusthree \math_halign_checked_yes \else +% \math_halign_checked_nop \fi} \def\math_halign_checked - {\halign \ifcase\eqalignmode \or to \checkeddisplaywidth \fi} - -\def\math_both_eqalign_no_normal#1#2% - {\ifmmode - \the\mathdisplayaligntweaks - \vcenter\bgroup - \enforced\let\math_finish_eqalign_no\egroup - \else - \enforced\let\math_finish_eqalign_no\relax - \fi - #1% - \math_halign_checked\expandafter\bgroup\the\scratchtoks\crcr#2\crcr\egroup - \math_finish_eqalign_no} - -\installcorenamespace {mathalignlocation} - -\defcsname\??mathalignlocation\v!top \endcsname{\let\math_alignment_halign_method\halign\tpack} -\defcsname\??mathalignlocation\v!bottom\endcsname{\let\math_alignment_halign_method\halign\vpack} -\defcsname\??mathalignlocation\v!center\endcsname{\let\math_alignment_halign_method\halign\vcenter} - -\let\math_alignment_halign_method\relax - -\def\math_both_eqalign_no_aligned#1% - {\let\math_alignment_halign_method\math_halign_checked - \ifmmode - \the\mathdisplayaligntweaks - \global\mathnumberstatus\plusone - \ifcase\mathraggedstatus - \def\math_finish_eqalign_no{\crcr\egroup}% - \else % we're in a mathbox - \ifcsname\??mathalignlocation\mathalignmentparameter\c!location\endcsname - \lastnamedcs % top|bottom|center as suggested by HM - \else - \vcenter - \fi - \bgroup - \def\math_finish_eqalign_no{\crcr\egroup\egroup}% + {\halign + \ifconditional\c_math_align_overflow_mode + callback + attr + \mathnumberlocationattribute + \numexpr\ifconditional\c_math_align_reformat_mode\plusfour\else\plustwo\fi * \plussixteen\relax % just a signal \fi - \fi - #1% - \math_alignment_halign_method\expandafter\bgroup\the\scratchtoks\crcr} - -\def\math_rlap#1% - {\setbox\scratchbox\hbox{#1}% - \ifdim\wd\scratchbox>\d_math_number_correction - \global\d_math_number_correction\wd\scratchbox - \fi - \box\scratchbox - \global\mathnumberstatus\plustwo} + \ifcase\c_strc_formulas_check_width\else + to \checkeddisplaywidth + \fi} -\def\math_handle_eqalign_no_r_normal {\math_both_eqalign_no_normal \math_prepare_r_eqalign_no} -\def\math_handle_eqalign_no_l_normal {\math_both_eqalign_no_normal \math_prepare_l_eqalign_no} -\def\math_handle_eqalign_no_r_aligned{\math_both_eqalign_no_aligned\math_prepare_r_eqalign_no} -\def\math_handle_eqalign_no_l_aligned{\math_both_eqalign_no_aligned\math_prepare_l_eqalign_no} -\def\math_finish_eqalign_no {\crcr\egroup} +\installcorenamespace {mathalignlocation} -\aliased\let\reqalignno\relax % just in case someone used that -\aliased\let\leqalignno\relax % just in case someone used that -\aliased\let\eqalignno \relax % just in case someone used that +\defcsname\??mathalignlocation\v!top \endcsname{\tpack } +\defcsname\??mathalignlocation\v!bottom\endcsname{\vpack } +\defcsname\??mathalignlocation\v!center\endcsname{\vcenter} %D Here we implement the user interface part. We start with basic math alignments: @@ -297,6 +388,37 @@ \newtoks \everymathalignment \newtoks \everymathalignmentdone +\newdimen\d_math_eqalign_number_threshold + +\definesystemattribute[mathnumberlocation] [public] +\definesystemattribute[mathnumberthreshold][public] + +\protected\def\math_alignment_lbox#1% + {\begingroup + \setbox\scratchbox\hbox{\letformulaparameter\c!location\empty#1}% + \ifzeropt\wd\scratchbox\else + \hpack + \s!attr \mathnumberlocationattribute \numexpr\c_strc_math_ragged_status * \plussixteen + \plusone\relax + \s!attr \mathnumberthresholdattribute \numexpr\d_math_eqalign_number_threshold\relax + {\strc_formulas_add_distance \plustwo\v!left\mathalignmentparameter + \box\scratchbox}% + \fi + \global\d_math_eqalign_number_threshold\zeropoint % move to begin of row + \endgroup} + +\protected\def\math_alignment_rbox#1% + {\begingroup + \setbox\scratchbox\hbox{\letformulaparameter\c!location\empty#1}% + \ifzeropt\wd\scratchbox\else + \hpack + \s!attr \mathnumberlocationattribute \numexpr\c_strc_math_ragged_status * \plussixteen + \plustwo\relax + \s!attr \mathnumberthresholdattribute \numexpr\d_math_eqalign_number_threshold\relax + {\box\scratchbox + \strc_formulas_add_distance \plustwo\v!right\mathalignmentparameter}% + \fi + \global\d_math_eqalign_number_threshold\zeropoint % move to begin of row + \endgroup} + \permanent\tolerant\protected\def\math_alignment_NN[#1]#*[#2]% {\aligntab \strc_formulas_place_number_nested{#1}{#2}} @@ -347,6 +469,7 @@ \enforced\let\NR\math_alignment_NR \enforced\let\TB\math_common_TB \global\settrue\c_math_eqalign_first + \global\s_strc_math_alignment_inbetween\zeroskip \to \everymathalignment \appendtoks @@ -355,6 +478,7 @@ \pop_macro_EQ \pop_macro_NN \pop_macro_NC + \global\s_strc_math_alignment_inbetween\zeroskip \to \everymathalignmentdone % % experimental: @@ -393,11 +517,30 @@ % % [align=2:right] % % [align={1:left,2:middle,3:right}] +\newskip\s_strc_math_alignment_inbetween + +\def\strc_math_setup_spacing_aligned#1% + {\begingroup + % here we abuse the whitespace setter + \edef\v_spac_whitespace_current{#1\c!spaceinbetween}% + \ifempty\v_spac_whitespace_current + \global\s_strc_math_alignment_inbetween\zeroskip + \else + \spac_whitespace_setup + \global\s_strc_math_alignment_inbetween\parskip + \fi + \endgroup} + \permanent\tolerant\protected\def\math_alignment_start[#1]#*[#2]% {\begingroup \edef\currentmathalignment{#1}% \ifarguments\or\or - \setupmathalignment[#1][#2]% bad! ungrouped + \setupmathalignment[#1][#2]% + \fi + \ifcstok{\mathalignmentparameter\c!adaptive}\v!yes + \settrue\c_math_align_reformat_mode + \else + \setfalse\c_math_align_reformat_mode \fi \math_alignment_snap_start \the\everymathalignment @@ -408,12 +551,29 @@ [\mathalignmentparameter\c!align]% {\advance\c_math_eqalign_column\plusone\math_eqalign_set_column}% takes argument \global\c_math_eqalign_column\plusone + \strc_math_setup_spacing_aligned\mathalignmentparameter \dostarttagged\t!math\empty \dostarttagged\t!mtable\currentmathalignment - \numberedeqalign} + % is this check still valid? + \ifmmode + % we're always in mathmode + \the\mathdisplayaligntweaks + \ifcsname\??mathalignlocation\mathalignmentparameter\c!location\endcsname + \lastnamedcs % top|bottom|center as suggested by HM + \else + \vcenter + \fi + \fi + \bgroup + \ifcstok{\formulaparameter\c!location}\v!left + \math_prepare_l_eqalign_no + \else + \math_prepare_r_eqalign_no + \fi + \math_halign_checked\expandafter\bgroup\the\scratchtoks\crcr} \def\math_alignment_stop % can be protected - {\math_finish_eqalign_no + {\crcr\egroup\egroup \dostoptagged \dostoptagged \the\everymathalignmentdone @@ -426,8 +586,8 @@ \installcommandhandler \??mathalignment {mathalignment} \??mathalignment \appendtoks - \frozen\protected\instance\edefcsname\e!start\currentmathalignment\endcsname{\math_alignment_start[\currentmathalignment]}% - \noaligned\frozen\protected\instance \defcsname\e!stop \currentmathalignment\endcsname{\math_alignment_stop}% can this be protected now? + \frozen\protected\instance\edefcsname\e!start\currentmathalignment\endcsname{\math_alignment_start[\currentmathalignment]}% + \noaligned\frozen\protected\instance \defcsname\e!stop \currentmathalignment\endcsname{\math_alignment_stop}% \to \everydefinemathalignment % to be tested @@ -441,31 +601,17 @@ [\c!n=2, \c!m=1, \c!distance=\emwidth, - \c!spaceinbetween=.25\bodyfontsize, + \c!spaceinbetween=\formulaparameter\c!spaceinbetween, + \c!numberthreshold=\zeropoint, \c!grid=\v!math] \definemathalignment[align] % default case (this is what amstex users expect) \definemathalignment[\v!mathalignment] % prefered case (this is cleaner, less clashing) -% this needs some consideration: - -\def\math_align_openup{\math_openup\mathalignmentparameter\c!spaceinbetween\relax} - -\let\math_display_align_hack_indeed\relax +% this needs some consideration, it might be obsolete now: -\protected\def\math_display_align_hack % I don't like the global, maybe we should push and pop - {\glet\math_display_align_hack_indeed\math_display_align_hack_remove_skip - \math_align_openup - \everycr{\noalign{\math_display_align_hack_indeed}}} - -\def\math_display_align_hack_remove_skip - {\ifdim\prevdepth>-\thousandpoint - \vskip\dimexpr-\lineskiplimit+\normallineskiplimit\relax - \fi - \glet\math_display_align_hack_indeed\math_display_align_hack_insert_penalty} - -\def\math_display_align_hack_insert_penalty - {\penalty\interdisplaylinepenalty} +\protected\def\math_display_align_hack + {\everycr{\noalign{\penalty\interdisplaylinepenalty}}} \appendtoks \math_display_align_hack @@ -517,11 +663,6 @@ % -\permanent\protected\def\numberedeqalign - {\doifelse{\formulaparameter\c!location}\v!left - \math_handle_eqalign_no_l_aligned - \math_handle_eqalign_no_r_aligned} - \def\math_first_in_eqalign {\global\c_math_eqalign_column\plusone \global\advance\c_math_eqalign_row\plusone @@ -538,6 +679,8 @@ \ifcase\lastnamedcs \or \relax \or \hfill \or \hfill \fi \orelse\ifcsname\??mathalignmentvariant\number\zerocount\endcsname \ifcase\lastnamedcs \or \relax \or \hfill \or \hfill \fi + \orelse\ifcsname\??mathalignmentvariant\number\numexpr\c_math_eqalign_column-\c_math_eqalign_repeat\relax\endcsname + \ifcase\lastnamedcs \or \relax \or \hfill \or \hfill \fi \fi} \def\math_right_of_eqalign @@ -545,6 +688,8 @@ \ifcase\lastnamedcs \or \hfill \or \relax \or \hfill \fi \orelse\ifcsname\??mathalignmentvariant\number\zerocount\endcsname \ifcase\lastnamedcs \or \hfill \or \relax \or \hfill \fi + \orelse\ifcsname\??mathalignmentvariant\number\numexpr\c_math_eqalign_column-\c_math_eqalign_repeat\relax\endcsname + \ifcase\lastnamedcs \or \hfill \or \relax \or \hfill \fi \fi} \newconditional\c_math_alignment_local_number % not used but when true puts in front (todo) @@ -597,9 +742,6 @@ \letcsname\??mathalignmentvariant\v!right \endcsname\plustwo \letcsname\??mathalignmentvariant\v!middle\endcsname\plusthree -\permanent\protected\def\math_align_NR_generic[#1][#2]% - {\strc_formulas_place_number_nested{#1}{#2}\crcr} - %D \starttyping %D \placeformula[eqn0]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn0] %D \placeformula[eqn1]\startformula \startalign[n=1] a\NR \stopalign \stopformula See \in[eqn1] @@ -607,17 +749,6 @@ %D \placeformula[eqn3]\startformula \startalign[n=1] a\NR[+] \stopalign \stopformula See \in[eqn3] %D \stoptyping -%D \startbuffer -%D \placeformula \startformula \eqalignno { -%D a &= b & \formulanumber \cr -%D c &= d \cr -%D &= e \cr -%D &= f & \formulanumber -%D } \stopformula -%D \stopbuffer -%D -%D \typebuffer \getbuffer -%D %D \startbuffer %D \placeformula \startformula \startalign %D \NC a \EQ b \NR[+] @@ -743,6 +874,7 @@ \setupmathcases [\c!distance=\emwidth, \c!strut=\v!yes, % new + \c!spaceinbetween=\mathalignmentparameter\c!spaceinbetween, %\c!numberdistance=2.5\emwidth, \c!numberdistance=\zeropoint] @@ -802,7 +934,7 @@ \ifmmode\stopimath\fi \aligntab \global\c_math_cases_nc\zerocount - \math_align_NR_generic[#1][#2]} + \strc_formulas_place_number_nested{#1}{#2}\crcr} \installglobalmacrostack\c_math_cases_nc @@ -835,7 +967,8 @@ \global\c_math_eqalign_column\plusone \global\c_math_eqalign_row\plusone \global\c_math_cases_nc\zerocount - \halign\bgroup + \strc_math_setup_spacing_aligned\mathcasesparameter + \halign callback \s!attr \mathnumberlocationattribute \zerocount \bgroup \ifmmode\else\startimath\fi \mathcasesparameter\c!style \aligncontent @@ -1007,7 +1140,7 @@ \def\math_matrix_anchor {\ifcase\c_math_matrix_anchor_mode\else - \markanchor{matrix}{\numexpr\c_math_eqalign_column+1\relax}\c_math_eqalign_row + \markanchor{matrix}{\numexpr\c_math_eqalign_column+\plusone\relax}\c_math_eqalign_row \fi} \protected\def\math_matrix_anchor_first @@ -1042,6 +1175,7 @@ \aligntab \aligntab \math_matrix_anchor + \hskip.5\d_math_eqalign_distance \aligncontent \aligntab \global\advance\c_math_eqalign_column\plusone @@ -1065,7 +1199,6 @@ \permanent\protected\def\math_matrix_pickup{\global\settrue \c_math_matrix_first} \permanent\protected\def\math_matrix_NC_yes{\global\setfalse\c_math_matrix_first} -%permanent\protected\def\math_matrix_NC_nop{\aligntab} % avoids lookahead \permanent\protected\def\math_matrix_NC_nop{\aligntab\aligntab} % avoids lookahead @@ -1119,12 +1252,11 @@ \dontleavehmode \fi \bgroup - \tabskip.5\d_math_eqalign_distance + %\tabskip.5\d_math_eqalign_distance + \tabskip\zeropoint \math_matrix_pickup \the\everymathmatrix % - % \enforced\let\endmath\relax - % \setbox\nextbox\vbox\bgroup \math_matrix_start_table \halign \bgroup @@ -1594,42 +1726,12 @@ {\defcsname\??mathinnerstart#1\endcsname{#2}% \defcsname\??mathinnerstop #1\endcsname{#3}} -\installtextracker - {formulas.boxes} - {\enforced\let\math_hbox\ruledhbox} - {\enforced\let\math_hbox\hbox} - -\let\math_hbox\hbox - -\newconstant\mathraggedstatus % normal left center right -\newconstant\mathnumberstatus % nothing normal shift_right - -\newdimen\d_math_number_correction - -\def\math_box_llapped_math_no - {\ifcase\mathraggedstatus\or - \box\b_strc_formulas_number - \or - \llap{\box\b_strc_formulas_number}% - \or - \llap{\box\b_strc_formulas_number}% - \fi} +\def\strc_math_flush_number_box{\box\b_strc_formulas_number} -\def\math_box_rlapped_math_no - {\ifcase\mathraggedstatus\or - \rlap{\box\b_strc_formulas_number}% - \or - \rlap{\box\b_strc_formulas_number}% - \or - \box\b_strc_formulas_number - \fi} - -\newconditional\c_strc_math_has_number \newconditional\c_strc_math_display_overflow \newconstant \c_strc_math_number_location -\newdimen \d_strc_math_number_width +\newconstant \c_strc_math_number_variant \newdimen \d_strc_math_display_width -\newbox \b_strc_math_display \newconstant \c_strc_formulas_frame_mode \newdimen \d_strc_math_indent \newconditional\c_strc_math_indent @@ -1646,31 +1748,132 @@ % mode: 0=no frame | 1=number inside frame | 2=number outside frame -\protected\def\strc_math_flush_aligned - {\ifcase\c_strc_math_vertical - \ifcase\mathraggedstatus\or\hfill\or\hfill\fi - \box\b_strc_math_display - \ifcase\mathraggedstatus\or\or\hfill\or\hfill\fi - \else - \begincsname\??mathtextalign\formulaparameter\c!textalign:\v!start\endcsname - \ifconditional\c_strc_math_indent - \ifzeropt\d_strc_math_indent\else - \hangafter\plusone - \hangindent\d_strc_math_indent +% it is a bit of a mess because we solve all kind of bordercases but at some +% point it will become clean + +\def\strc_math_flush_aligned_boxed_direct_yes + {\dontleavehmode + \box\b_strc_math_display + \llap{\box\b_strc_formulas_number}} + +\def\strc_math_flush_aligned_boxed_direct_nop + {\dontleavehmode + \box\b_strc_math_display} + +\protected\def\strc_math_flush_aligned_boxed + {\ifcase\c_strc_math_ragged_status + % align: error + \strc_math_flush_aligned_boxed_direct_yes + \or + % align: flushleft, number right + \strc_math_flush_aligned_boxed_direct_yes + \or + % align: middle + \ifnum\c_strc_math_split_mode=\c_strc_math_line_mode + \leftskip \zeropoint + \rightskip\zeropoint + \strc_math_flush_aligned_boxed_direct_yes + \else +% \dontleavehmode +% \ifnum\c_strc_math_split_mode=\c_strc_math_wrap_mode +% \vbox\bgroup % to be tested, maybe \vcenter +% \fi +% \ifvbox\b_strc_math_display\unvbox\else\box\fi\b_strc_math_display +% \setbox\b_strc_formulas_number\hbox to \displaywidth{\hss\hbox{\box\b_strc_formulas_number}}% +% \boxyoffset\b_strc_formulas_number\d_strc_math_last_depth % todo: use anchors instead +% \htdp\b_strc_formulas_number\zeropoint +% \box\b_strc_formulas_number +% \ifnum\c_strc_math_split_mode=\c_strc_math_wrap_mode +% \egroup +% \fi + \ifnum\c_strc_math_split_mode=\c_strc_math_wrap_mode + \dontleavehmode + \vbox\bgroup % to be tested, maybe \vcenter + \orelse\ifhmode + \dontleavehmode + \box\b_strc_math_display + \orelse\ifvbox\b_strc_math_display + \unvbox\b_strc_math_display + \else + \dontleavehmode + \box\b_strc_math_display + \fi + \setbox\b_strc_formulas_number\hbox to \displaywidth{\hss\hbox{\box\b_strc_formulas_number}}% + \boxyoffset\b_strc_formulas_number\d_strc_math_last_depth % todo: use anchors instead + \htdp\b_strc_formulas_number\zeropoint + \box\b_strc_formulas_number + \ifnum\c_strc_math_split_mode=\c_strc_math_wrap_mode + \egroup + \fi + \fi + \or + % align: flushright + % packaged, number (kind of ugly as we now stick in the margin) + \ifcase\c_strc_math_n_of_lines\or + \dontleavehmode + \kern-\wd\b_strc_formulas_number + \box\b_strc_math_display + \ifcase\c_strc_math_n_of_lines\or + \box\b_strc_formulas_number + \else + \llap{\box\b_strc_formulas_number}% + \fi + \orelse\iftrue % can become option + \ifdim\d_strc_math_last_width>\wd\b_strc_formulas_number + \ifdim\d_strc_math_max_width<\d_strc_math_last_width + \strc_math_flush_aligned_boxed_direct_yes + \else + \dontleavehmode + \kern-\wd\b_strc_formulas_number + \box\b_strc_math_display + \box\b_strc_formulas_number + \fi + \else + % delay number till later + \strc_math_flush_aligned_boxed_direct_nop \fi + \else + % delay number till later + \strc_math_flush_aligned_boxed_direct_nop \fi - \edef\p_interlinespace{\formulaparameter\c!interlinespace}% - \edef\p_spaceinbetween{\formulaparameter\c!spaceinbetween}% - \ifempty\p_interlinespace\else\baselineskip\p_interlinespace\fi - \ifempty\p_spaceinbetween\else\lineskip \p_spaceinbetween\lineskiplimit\baselineskip\fi - \global\d_strc_math_indent\zeropoint - \ifcase\mathraggedstatus\or\raggedleft\or\raggedcenter\or\raggedright\fi - \begincsname\??mathtextalign\formulaparameter\c!textalign:\v!stop\endcsname - \unhbox\b_strc_math_display + \fi + \ifvmode + \nointerlineskip + \fi} + +% \protected\def\strc_math_flush_aligned_unboxed +% {\begingroup +% \ifvbox\b_strc_math_display\unvbox\else\box\fi\b_strc_math_display +% \par +% \endgroup} + +\let\strc_math_flush_aligned_unboxed\strc_math_flush_aligned_boxed + +\protected\def\strc_math_flush_aligned_simple + {\ifcase\c_strc_math_ragged_status\or\or\hfill\or\hfill\fi + \box\b_strc_math_display + \ifcase\c_strc_math_ragged_status\or\hfill\or\hfill\or\fi} + +\protected\def\strc_math_flush_aligned + {\ifnum\c_strc_math_split_mode=\c_strc_math_line_mode + \strc_math_flush_aligned_simple + % \strc_math_flush_aligned_boxed + \orelse\ifconditional\c_strc_math_indent + % in this case the already set text align is overloaded + \strc_math_setup_align_auto + \strc_math_flush_aligned_unboxed + \else + % normally we don't end up here + \strc_math_setup_spacing_aligned\mathalignmentparameter + \begingroup + \forgetall + \unhbox\b_strc_math_display + \par + \endgroup \fi} \def\strc_math_flush_box_normal - {\ifcase\c_strc_math_vertical + {\ifnum\c_strc_math_split_mode=\c_strc_math_line_mode \hbox to \displaywidth\bgroup \strc_math_flush_aligned \egroup @@ -1683,9 +1886,9 @@ \setformulaframedparameter\c!align{\formulaparameter\c!align}% \letformulaframedparameter\c!strut\v!no \d_framed_formula\ht\b_strc_math_display - \ifcase\mathraggedstatus\or\hfill\or\hfill \fi + \ifcase\c_strc_math_ragged_status\or \or\hfill\or\hfill\fi \inheritedformulaframedframed{\box\b_strc_math_display}% - \ifcase\mathraggedstatus\or \or\hfill\or\hfill\fi} + \ifcase\c_strc_math_ragged_status\or\hfill\or\hfill \fi} \def\strc_math_flush_box_framed_display {\let\currentformulaframed\currentformula @@ -1707,6 +1910,9 @@ % combiners +\def\strc_math_flush_number_box_left {\ifconditional\c_strc_formulas_overlay_number\rlap\fi{\strc_math_flush_number_box}} +\def\strc_math_flush_number_box_right{\ifconditional\c_strc_formulas_overlay_number\llap\fi{\strc_math_flush_number_box}} + \def\strc_math_flush_box {\ifcase\c_strc_formulas_frame_mode \strc_math_flush_box_normal @@ -1717,10 +1923,10 @@ \def\strc_math_number_right_normal {\strc_math_flush_aligned \hss % hss makes room for number - \math_box_llapped_math_no} + \strc_math_flush_number_box_right} \def\strc_math_number_left_normal - {\math_box_rlapped_math_no + {\strc_math_flush_number_box_left \strc_math_flush_aligned \hss} % hss makes room for number @@ -1731,10 +1937,10 @@ \strc_math_flush_box_framed_display \fi \hss % hss makes room for number - \math_box_llapped_math_no} + \strc_math_flush_number_box} \def\strc_math_number_left_normal_outside - {\math_box_rlapped_math_no + {\strc_math_flush_number_box \hss % hss makes room for number \ifconditional\c_strc_formulas_tight \strc_math_flush_box_framed_fit_display @@ -1746,13 +1952,13 @@ {\setbox\b_strc_math_display\hpack to \dimexpr\displaywidth-\d_framed_locator_lo-\d_framed_locator_ro\relax\bgroup \strc_math_flush_aligned \hss - \math_box_llapped_math_no + \strc_math_flush_number_box \egroup \strc_math_flush_box_framed_fit_inline} \def\strc_math_number_left_normal_inside {\setbox\b_strc_math_display\hpack to \dimexpr\displaywidth-\d_framed_locator_lo-\d_framed_locator_ro\relax\bgroup - \math_box_rlapped_math_no + \strc_math_flush_number_box \hss \strc_math_flush_aligned \egroup @@ -1764,14 +1970,14 @@ \par \hpack to \displaywidth\bgroup \hss - \math_box_llapped_math_no + \strc_math_flush_number_box_right \egroup \egroup} \def\strc_math_number_left_overflow {\vpack\bgroup \hpack to \displaywidth\bgroup - \math_box_rlapped_math_no + \strc_math_flush_number_box_left \hss \egroup \strc_math_flush_box @@ -1783,14 +1989,14 @@ %\hskip\zeropoint % nicely breaks the line without introducing funny vertical spacing ... why o why \hpack to \displaywidth\bgroup \hss - \math_box_llapped_math_no + \strc_math_flush_number_box \egroup \egroup} \def\strc_math_number_left_overflow_outside {\vpack\bgroup \hpack to \dimexpr\displaywidth-\d_framed_locator_lo\relax\bgroup - \math_box_rlapped_math_no + \strc_math_flush_number_box \hss \egroup \hskip\zeropoint % nicely breaks the line without introducing funny vertical spacing ... why o why @@ -1802,7 +2008,7 @@ \box\b_strc_math_display \hpack to \displaywidth\bgroup \hss - \math_box_llapped_math_no + \strc_math_flush_number_box \hskip\d_framed_locator_ro \egroup \egroup @@ -1812,7 +2018,7 @@ {\setbox\b_strc_math_display\vpack\bgroup \hpack to \displaywidth\bgroup % \hskip\d_framed_locator_lo - \math_box_rlapped_math_no + \strc_math_flush_number_box \hss \egroup \box\b_strc_math_display @@ -1821,17 +2027,28 @@ % checkers +\setupmathalignment + [\c!numberdistance=\formulaparameter\c!numberdistance] + +\protected\def\d_strc_math_total_display_width + {\dimexpr + \d_strc_math_display_width+\wd\b_strc_formulas_number + \ifconditional\c_strc_formulas_overlay_number + \ifcase\c_strc_math_ragged_status\or\or+\wd\b_strc_formulas_number\or\fi + \fi + \relax} + \def\strc_math_number_check {\d_strc_math_display_width\wd\b_strc_math_display \ifconditional\c_strc_formulas_tight - \ifdim\d_strc_math_display_width>\displaywidth + \ifdim\d_strc_math_total_display_width>\displaywidth \settrue\c_strc_math_display_overflow \else - \displaywidth\d_strc_math_display_width + \displaywidth\d_strc_math_total_display_width \setfalse\c_strc_math_display_overflow \fi \else - \ifdim\d_strc_math_display_width>\displaywidth + \ifdim\dimexpr\d_strc_math_total_display_width+\formulaparameter\c!numberthreshold\relax>\displaywidth \settrue\c_strc_math_display_overflow \else \setfalse\c_strc_math_display_overflow @@ -1840,13 +2057,13 @@ \def\strc_math_number_check_outside {\d_strc_math_display_width\naturalwd\b_strc_math_display - \ifdim\dimexpr\d_strc_math_display_width+\d_framed_locator_lo+\d_framed_locator_ro\relax>\displaywidth + \ifdim\dimexpr\d_strc_math_total_display_width+\d_framed_locator_lo+\d_framed_locator_ro\relax>\displaywidth \settrue\c_strc_math_display_overflow \else \setfalse\c_strc_math_display_overflow \fi % still ok? - \ifnum\mathraggedstatus=\plustwo + \ifnum\c_strc_math_ragged_status=\plustwo \d_strc_math_framed_width\dimexpr\displaywidth-2\wd\b_strc_formulas_number\relax \else \d_strc_math_framed_width\dimexpr\displaywidth- \wd\b_strc_formulas_number\relax @@ -1867,7 +2084,7 @@ \def\strc_math_traced_state_yes {\llap{\setbox\scratchbox\hbox{\infofont - \ifcase\mathraggedstatus unset\or right\or middle\or left\fi + \ifcase\c_strc_math_ragged_status unset\or flushleft\or middle\or flushright\fi \space \ifcase\c_strc_formulas_frame_mode no\or out\or in\fi \space @@ -1883,24 +2100,85 @@ % packaging +\installcorenamespace{mathboxlocation} + +\defcsname\??mathboxlocation\v!left \endcsname + {\c_strc_math_number_location\plusone} + +\defcsname\??mathboxlocation\v!right\endcsname + {\c_strc_math_number_location\plustwo} + +\defcsname\??mathboxlocation\v!atrightmargin\endcsname + {\c_strc_math_number_location\plustwo + \c_strc_math_number_variant \plusone} + \protected\def\strc_math_box_start#1% - {\hsize\displaywidth % \checkeddisplaymath - \global\mathnumberstatus\plusone - \mathraggedstatus#1\relax - % - \global\d_math_number_correction\zeropoint - % - \edef\p_location{\formulaparameter\c!location}% + {\c_strc_math_ragged_status#1\relax % already set \useformulacolorparameter\c!color - \c_strc_math_number_location\ifx\p_location\v!left\plusone\orelse\ifx\p_location\v!right\plustwo\else\zerocount\fi + \c_strc_math_number_location\zerocount + \c_strc_math_number_variant \zerocount + \begincsname\??mathboxlocation\formulaparameter\c!location\endcsname + % + % We collect the math formula in an hbox. Dimensions don't really play + % a role yet but beware of nesting! % - %\strc_formulas_place_number % not here as we can have inner alignment numbers \dontcomplain - \setbox\b_strc_math_display\math_hbox\bgroup % \checkeddisplaymath + %\holdingmigrations\plusfour + \setbox\b_strc_math_display\hbox retain \plusfour\bgroup \startforceddisplaymath} +\protected\def\strc_math_box_stop + {\stopforceddisplaymath + \egroup + % preroll left and right offsets + \ifcase\c_strc_formulas_frame_mode + % no frame + \else + \strc_math_number_check_offsets + \fi + \ifcase\c_strc_formulas_frame_mode + \strc_math_number_check + \or + \strc_math_number_check_outside + \else + \strc_math_number_check_inside + \fi + \strc_math_traced_state + \ifnum\c_strc_math_split_mode=\c_strc_math_line_mode + \noindent % \noindentation % not \dontleavehmode + \hbox to \displaywidth \bgroup + \else + \bgroup + \strc_math_show_margins + \fi + \ifcase\c_strc_math_number_location + \strc_math_flush_box + \or % number left + \ifzeropt\wd\b_strc_formulas_number + \strc_math_flush_number_no + \else + \strc_math_flush_number_left + \fi + \else % number right + \ifzeropt\wd\b_strc_formulas_number + \strc_math_flush_number_no + \else + \strc_math_flush_number_right + \fi + \fi + \egroup} + +\defineinnermathhandler\v!left {\strc_math_box_start\plusthree}{\strc_math_box_stop} +\defineinnermathhandler\v!flushright{\strc_math_box_start\plusthree}{\strc_math_box_stop} +\defineinnermathhandler\v!right {\strc_math_box_start\plusone }{\strc_math_box_stop} +\defineinnermathhandler\v!flushleft {\strc_math_box_start\plusone }{\strc_math_box_stop} +\defineinnermathhandler\v!center {\strc_math_box_start\plustwo }{\strc_math_box_stop} +\defineinnermathhandler\v!middle {\strc_math_box_start\plustwo }{\strc_math_box_stop} +\defineinnermathhandler\v!normal {\strc_math_box_start\plustwo }{\strc_math_box_stop} +\defineinnermathhandler\v!atmargin {\strc_math_box_start\plusfour }{\strc_math_box_stop} + \def\strc_math_flush_number_no - {\ifcase\c_strc_math_vertical + {\ifnum\c_strc_math_split_mode=\c_strc_math_line_mode \ifconditional\c_strc_math_display_overflow \ifcase\c_strc_formulas_frame_mode \strc_math_flush_box_normal @@ -1927,7 +2205,7 @@ \fi} \def\strc_math_flush_number_left - {\ifcase\c_strc_math_vertical + {\ifnum\c_strc_math_split_mode=\c_strc_math_line_mode \ifconditional\c_strc_math_display_overflow \ifcase\c_strc_formulas_frame_mode \strc_math_number_left_overflow @@ -1952,7 +2230,7 @@ \fi} \def\strc_math_flush_number_right - {\ifcase\c_strc_math_vertical + {\ifnum\c_strc_math_split_mode=\c_strc_math_line_mode \ifconditional\c_strc_math_display_overflow \ifcase\c_strc_formulas_frame_mode \strc_math_number_right_overflow @@ -1976,86 +2254,6 @@ \box\b_strc_formulas_number \fi} -\protected\def\strc_math_box_stop - {\stopforceddisplaymath - \egroup - % check number - \d_strc_math_number_width\wd\b_strc_formulas_number - % - \ifcase\mathnumberstatus - \setfalse\c_strc_math_has_number - \or\ifzeropt\d_strc_math_number_width - \setfalse\c_strc_math_has_number - \else - \settrue\c_strc_math_has_number - \fi\fi - % preroll left and right offsets - \ifcase\c_strc_formulas_frame_mode - % no frame - \else - \strc_math_number_check_offsets - \fi - \ifcase\c_strc_formulas_frame_mode - \strc_math_number_check - \or - \strc_math_number_check_outside - \else - \strc_math_number_check_inside - \fi - \noindent % \noindentation % not \dontleavehmode - \hskip\d_strc_formulas_display_margin_left % was kern but that doesn't indent - \strc_math_traced_state - \ifcase\c_strc_math_vertical - \hbox to \displaywidth \bgroup - \or % yes - \vbox \bgroup \hsize\displaywidth - \or % page - \bgroup \hsize\displaywidth - \or % text - \bgroup \hsize\displaywidth - \fi - \ifcase\mathnumberstatus - \strc_math_flush_box - \or % status 1 - \ifcase\c_strc_math_number_location - \strc_math_flush_box - \or % number left - \ifzeropt\wd\b_strc_formulas_number - \strc_math_flush_number_no - \else - \strc_math_flush_number_left - \fi - \else % number right - \ifzeropt\wd\b_strc_formulas_number - \strc_math_flush_number_no - \else - \strc_math_flush_number_right - \fi - \fi - \or % status 2 - \hskip\d_math_number_correction % probably no longer used - \strc_math_flush_box - \hss - \else - \strc_math_flush_box - \fi - \ifcase\c_strc_math_vertical - \or - \or - \par - \or - \par - \fi - \egroup} - -\defineinnermathhandler\v!left {\strc_math_box_start\plusone }{\strc_math_box_stop} -\defineinnermathhandler\v!middle {\strc_math_box_start\plustwo }{\strc_math_box_stop} -\defineinnermathhandler\v!right {\strc_math_box_start\plusthree}{\strc_math_box_stop} -\defineinnermathhandler\v!flushleft {\strc_math_box_start\plusthree}{\strc_math_box_stop} -\defineinnermathhandler\v!center {\strc_math_box_start\plustwo }{\strc_math_box_stop} -\defineinnermathhandler\v!flushright{\strc_math_box_start\plusone }{\strc_math_box_stop} -\defineinnermathhandler\v!normal {\strc_math_box_start\plustwo }{\strc_math_box_stop} - %D Some inline math tweak. \appendtoks @@ -2121,7 +2319,7 @@ \appendtoks \edef\p_threshold{\mathematicsparameter\c!threshold}% \maththreshold\ifcsname\??maththreshold\p_threshold\endcsname\lastnamedcs\else\p_threshold\fi\relax -\to \everymath % \everyemathematics +\to \everymath % \everymathematics %D Here is simple alignment mechanism: @@ -2135,6 +2333,8 @@ \c!rightmargin=\zeropoint, \c!left=, \c!right=, + \c!strut=\v!yes, + \c!spaceinbetween=\mathalignmentparameter\c!spaceinbetween, \c!align=\v!all:\v!middle, \c!textdistance=.25\emwidth] @@ -2148,7 +2348,7 @@ \noaligned\tolerant\permanent\protected\def\math_simplealign_NR[#1]#*[#2]% {\unskip - \math_align_NR_generic[#1][#2]} + \strc_formulas_place_number_nested{#1}{#2}\crcr} \permanent\tolerant\protected\def\math_simplealign_start[#1]#*[#2]% {\begingroup @@ -2178,20 +2378,23 @@ \global\c_math_eqalign_column\zerocount \global\c_math_eqalign_row\plusone \edef\m_simplealign_distance{\mathsimplealignparameter\c!distance}% - \halign\bgroup + \strc_math_setup_spacing_aligned\mathcasesparameter + \halign callback \s!attr \mathnumberlocationattribute \zerocount \bgroup \global\c_math_eqalign_column\zerocount \global\advance\c_math_eqalign_row\zerocount \ignorespaces \aligncontent % dummy \removeunwantedspaces + \lastleftclass \mathbegincode + \lastrightclass\mathendcode \aligntab \global\advance\c_math_eqalign_column\plusone \math_left_of_eqalign % \hfil \ignorespaces \math_align_strut - \startimath + \startforceddisplaymath \aligncontent - \stopimath + \stopforceddisplaymath \removeunwantedspaces \math_right_of_eqalign % \hfil \aligntab @@ -2205,9 +2408,9 @@ \fi \ignorespaces \math_align_strut - \startimath + \startforceddisplaymath \aligncontent - \stopimath + \stopforceddisplaymath \removeunwantedspaces \math_right_of_eqalign % \hfil \crcr} @@ -2252,6 +2455,15 @@ %D \stopformula %D \stoptyping +%D Usage \type {\sum _ {\mstack {i \in V_{0}, i \neq j}}}, documented by Mikael: + +\permanent\protected\def\mstack#1% + {\begingroup + \scratchtoks\emptytoks \setcharstrut(\relax + \processcommalist[#1]{\iftok\scratchtoks\emptytoks\else\toksapp\scratchtoks{\strut\NR}\fi\toksapp\scratchtoks}% + \expandafter\startsubstack\the\scratchtoks\strut\stopsubstack + \endgroup} + \protect \endinput % \placeformula \startformula[-] \startmatrix diff --git a/tex/context/base/mkxl/math-com.mkxl b/tex/context/base/mkxl/math-com.mkxl new file mode 100644 index 000000000..27f014d44 --- /dev/null +++ b/tex/context/base/mkxl/math-com.mkxl @@ -0,0 +1,89 @@ +%D \module +%D [ file=math-com, +%D version=2022.07.17, +%D title=\CONTEXT\ Math Macros, +%D subtitle=Combinations, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Math Macros / Initializations} + +%D This module might be extended. + +\unprotect + +% \startcombination[2*2] +% \startcontent +% \startplaceformula\startformula[width=\combinationwidth,title=a]1+x\stopformula\stopplaceformula +% \stopcontent +% \startcaption\stopcaption +% \startcontent +% \startplaceformula\startformula[width=\combinationwidth,title=b]2+x\stopformula\stopplaceformula +% \stopcontent +% \startcaption\stopcaption +% \startcontent +% \startplaceformula\startformula[width=\combinationwidth,xxxxx=c]3+x\stopformula\stopplaceformula +% \stopcontent +% \startcaption\stopcaption +% \startcontent +% \startplaceformula\startformula[width=\combinationwidth,title=d]4+x\stopformula\stopplaceformula +% \stopcontent +% \startcaption\stopcaption +% \stopcombination +% +% \startplaceformula[a] +% \startcombination[formula][nx=2,ny=2] +% \startformula[width=\combinationwidth,title=a]1+x\stopformula +% \startformula[width=\combinationwidth,title=b]2+x\stopformula +% \startformula[width=\combinationwidth,xxxxx=c]3+x\stopformula +% \startformula[width=\combinationwidth,title=d]4+x\stopformula +% \stopcombination +% \stopplaceformula +% +% \startplaceformula[a] +% \startformulacombination[nx=2,ny=2] +% \startformula[width=\combinationwidth,title=a]1+x\stopformula +% \startformula[width=\combinationwidth,title=b]2+x\stopformula +% \startformula[width=\combinationwidth,xxxxx=c]3+x\stopformula +% \startformula[width=\combinationwidth,title=d]4+x\stopformula +% \stopformulacombination +% \stopplaceformula + +\defcsname\??combinationmethod\v!formula\endcsname + {\vcenter} + +\defcsname\??combinationmethod\v!formula:\v!start\endcsname + {\startformula + \dostarttagged\t!formulaset\empty + \global\settrue\c_strc_formulas_inside_formulas + \bgroup + \setupformulas[\c!width=\combinationwidth]% + \enforced\tolerant\protected\def\startformula[##1]% + {\startcontent + \strc_formulas_nested_formula_start[\c!width=\combinationwidth,##1]}% + \enforced\protected\def\stopformula + {\normalexpanded + {\strc_formulas_nested_formula_stop + \stopcontent + \startcaption + \formulaparameter\c!title + \stopcaption}}} + +\defcsname\??combinationmethod\v!formula:\v!stop\endcsname + {\egroup + \global\setfalse\c_strc_formulas_inside_formulas + \dostoptagged + \stopformula + \the\everyresetformulas} + +\definecombination[\v!formula][method=formula,width=\hsize] + +\protected\def\startformulacombination{\startcombination[\v!formula]} +\protected\def\stopformulacombination {\stopcombination} + +\protect diff --git a/tex/context/base/mkxl/math-dif.mkxl b/tex/context/base/mkxl/math-dif.mkxl new file mode 100644 index 000000000..5cd65a80f --- /dev/null +++ b/tex/context/base/mkxl/math-dif.mkxl @@ -0,0 +1,39 @@ +%D \module +%D [ file=math-dif, +%D version=2022.05.31, % moved code +%D title=\CONTEXT\ Math Macros, +%D subtitle=Differentials, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Math Macros / Differentials} + +\unprotect + +\pushoverloadmode + + % For new times sake: + + \let\normal_math_dd\dd + + \def\c!differentiald{differentiald} % for now + + \def\upright_math_dd{\mathatom \s!unpack \mathdifferentialcode{\mathupright d}} + + \permanent\protected\def\dd + {\ifcstok{\mathematicsparameter\c!differentiald}\s!upright + \upright_math_dd + \else + \normal_math_dd + \fi} + + % \setupmathematics[differentiald=upright] + +\popoverloadmode + +\protect diff --git a/tex/context/base/mkxl/math-fen.mkxl b/tex/context/base/mkxl/math-fen.mkxl index e1a648ba4..5725c5ee1 100644 --- a/tex/context/base/mkxl/math-fen.mkxl +++ b/tex/context/base/mkxl/math-fen.mkxl @@ -58,6 +58,9 @@ \c!color=, \c!command=, \c!mathclass=, + \c!leftclass=\mathopencode, + \c!rightclass=\mathclosecode, + \c!middleclass=\mathmiddlecode, \c!leftsource=\zerocount, \c!middlesource=\zerocount, \c!rightsource=\mathfenceparameter\c!source, @@ -141,14 +144,17 @@ \s!axis \s!exact} +\newconstant \c_math_fenced_class + \def\math_fenced_common#1#2#3#4% \Uwhatever class symbol source - {\ifconditional\c_math_fenced_sized + {\c_math_fenced_class\mathfenceparameter#2\relax + \ifconditional\c_math_fenced_sized \orelse\ifconditional\c_math_fenced_level_mode - \ifnum#2=\mathopencode + \ifnum\c_math_fenced_class=\mathopencode % \hpack{\infofont}% \integerdef\c_math_fenced_stack\c_attr_mathsize \push_macro_c_math_fenced_stack - \orelse\ifnum#2=\mathclosecode + \orelse\ifnum\c_math_fenced_class=\mathclosecode \pop_macro_c_math_fenced_stack \c_attr_mathsize\c_math_fenced_stack % \hpack{\infofont}% @@ -156,7 +162,7 @@ \fi \edef\p_fence{#3}% \ifempty\p_fence - #1.\relax + \ifnum\c_math_fenced_class=\mathmiddlecode\else#1.\relax\fi \else \edef\p_factor {\mathfenceparameter\c!factor}% \edef\p_size {\mathfenceparameter\c!size}% @@ -170,6 +176,9 @@ \Uvextensible \else #1% \Uleft \Umiddle \Uleft + \ifx#1\Umiddle + nooverflow % + \fi \fi \orelse\ifx\p_factor\v!auto \ifconditional\c_math_fenced_level_mode @@ -190,8 +199,10 @@ \s!class \ifx\p_fence\v!none \mathghostcode + \orelse\ifempty\p_mathclass + \c_math_fenced_class \else - \ifempty\p_mathclass#2\else\p_mathclass\fi + \p_mathclass \fi \s!source \numexpr\namedboxanchor{\mathfenceparameter#4}\relax @@ -209,15 +220,27 @@ \def\math_fenced_left {\advance\c_math_fence_nesting\plusone - \math_fenced_common\Uleft\mathopencode\math_fenced_p_left\c!leftsource} - -\def\math_fenced_middle - {\math_fenced_common\Umiddle\mathmiddlecode\math_fenced_p_middle\c!middlesource} + \math_fenced_common\Uleft\c!leftclass\math_fenced_p_left\c!leftsource} \def\math_fenced_right - {\math_fenced_common\Uright\mathclosecode\math_fenced_p_right\c!rightsource + {\math_fenced_common\Uright\c!rightclass\math_fenced_p_right\c!rightsource \advance\c_math_fence_nesting\minusone} +\def\math_fenced_middle_normal + {\math_fenced_common\Umiddle\c!middleclass\math_fenced_p_middle\c!middlesource} + +\def\math_fenced_middle_sized + {\settrue\c_math_fenced_sized + \math_fenced_middle_normal + \setfalse\c_math_fenced_sized} + +\appendtoks + \let\math_fenced_middle\math_fenced_middle_normal + \enforced\let\fence\math_fenced_direct +\to \everymathatom + +\let\math_fenced_middle\math_fenced_middle_normal + \def\math_fenced_p_left {\ifconditional\c_math_fenced_mirror \ifconditional\c_math_right_to_left @@ -246,9 +269,12 @@ \aliased\let\fence \relax \aliased\let\fenced\relax +\protected\def\math_fenced_middle_common + {\math_fenced_middle} % redefined inside atom + \protected\def\math_fenced_fenced_common {\startusemathstyleparameter\mathfenceparameter\c!mathstyle - \enforced\let\fence\math_fenced_middle} + \enforced\let\fence\math_fenced_middle_common} \protected\def\math_fenced_fenced_start#1% {\begingroup @@ -299,6 +325,8 @@ \settrue\c_math_fenced_sized \math_fenced_left \setfalse\c_math_fenced_sized + \let\math_fenced_middle\math_fenced_middle_sized + % \enforced\let\middle\math_fenced_middle_sized #1% \settrue\c_math_fenced_sized \math_fenced_right @@ -343,6 +371,18 @@ \fi \endgroup} +% for torture testing mikael sundqvist: +% +% \setupmathfence[brace][middle=124] +% +% \im{\fenced[brace] {\vec{x}\in\reals^3\middle\vert \vec{x}\neq \vec{0}}} +% \im{\fenced[brace] {\vec{x}\in\reals^3\mid \vec{x}\neq \vec{0}}} +% \im{\fenced[brace][size=0]{\vec{x}\in\reals^3\fence \vec{x}\neq \vec{0}}} + +\aliased\let\normalmid\mid + +\protected\def\mid{\ifcase\c_math_fence_nesting\normalmid\else\middle\vert\fi} + % cases are defined in math-ali: \definemathfence [cases] [\c!left="007B,\c!right=\v!none] @@ -529,15 +569,15 @@ \definemathfence [leftopeninterval] [interval] [\c!left="2997,\c!right="2997] \definemathfence [rightopeninterval] [interval] [\c!left="2998,\c!right="2998] -\immutable\protected\def\Linterval {\math_fenced_fenced_start{interval}} -\immutable\protected\def\Lointerval {\math_fenced_fenced_start{openinterval}} -\immutable\protected\def\Llointerval {\math_fenced_fenced_start{leftopeninterval}} -\immutable\protected\def\Lrointerval {\math_fenced_fenced_start{rightopeninterval}} +\immutable\protected\def\Linterval {\math_fenced_fenced_start{interval}} +\immutable\protected\def\Lointerval {\math_fenced_fenced_start{openinterval}} +\immutable\protected\def\Llointerval {\math_fenced_fenced_start{leftopeninterval}} +\immutable\protected\def\Lrointerval {\math_fenced_fenced_start{rightopeninterval}} -\immutable\protected\def\Rinterval {\math_fenced_fenced_stop {interval}} -\immutable\protected\def\Rointerval {\math_fenced_fenced_stop {openinterval}} -\immutable\protected\def\Rlointerval {\math_fenced_fenced_stop {leftopeninterval}} -\immutable\protected\def\Rrointerval {\math_fenced_fenced_stop {rightopeninterval}} +\immutable\protected\def\Rinterval {\math_fenced_fenced_stop {interval}} +\immutable\protected\def\Rointerval {\math_fenced_fenced_stop {openinterval}} +\immutable\protected\def\Rlointerval {\math_fenced_fenced_stop {leftopeninterval}} +\immutable\protected\def\Rrointerval {\math_fenced_fenced_stop {rightopeninterval}} % \startformula % \left{ \frac{1}{a} \right} @@ -570,9 +610,9 @@ {\letcsname\??mathleft \normalmeaningless#1\endcsname#2% \letcsname\??mathright\normalmeaningless#3\endcsname#4} -\def\math_unknown_left {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalleft \nexttoken\fi} -\def\math_unknown_right {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalright \nexttoken\fi} -\def\math_unknown_middle{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\normalmiddle\nexttoken\fi} +\def\math_unknown_left {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\Uleft \nexttoken\fi} +\def\math_unknown_right {\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\Uright \nexttoken\fi} +\def\math_unknown_middle{\setfalse\c_math_fenced_done\ifconditional\c_math_fenced_unknown\Umiddle nooverflow \nexttoken\fi} \letcsname\??mathleft \s!unknown\endcsname\math_unknown_left \letcsname\??mathright \s!unknown\endcsname\math_unknown_right @@ -805,7 +845,7 @@ \definemathcommand [Bigg] {\choosemathbig4} \definemathcommand [bigl] [\s!open] [one] {\big} -\definemathcommand [bigm] [\s!relation] [one] {\big} +\definemathcommand [bigm] [\s!relation] [one] {\big} % why not just middle \definemathcommand [bigr] [\s!close] [one] {\big} \definemathcommand [Bigl] [\s!open] [one] {\Big} \definemathcommand [Bigm] [\s!relation] [one] {\Big} @@ -847,7 +887,7 @@ \protected\def\math_fences_auto_left #1{\c_attr_mathautofence\plusone #1\c_attr_mathautofence\attributeunsetvalue} \protected\def\math_fences_auto_right #1{\c_attr_mathautofence\plustwo #1\c_attr_mathautofence\attributeunsetvalue} -\protected\def\math_fences_auto_middle#1{\c_attr_mathautofence\plusthree#1\c_attr_mathautofence\attributeunsetvalue} +\protected\def\math_fences_auto_middle#1{\c_attr_mathautofence\plusthree#1\c_attr_mathautofence\attributeunsetvalue nooverflow } \protected\def\math_fences_auto_both #1{\c_attr_mathautofence\plusfour #1\c_attr_mathautofence\attributeunsetvalue} \permanent\let\autofenceopen \math_fences_auto_left % for testing diff --git a/tex/context/base/mkxl/math-fnt.lmt b/tex/context/base/mkxl/math-fnt.lmt index e6978d6cd..0faa006c9 100644 --- a/tex/context/base/mkxl/math-fnt.lmt +++ b/tex/context/base/mkxl/math-fnt.lmt @@ -27,6 +27,7 @@ local getid = nuts.getid local chardata = fonts.hashes.characters -- not yet ok for compact fonts .. needs checking .. or just make this non-compact only +-- there's also an inaccuracy creeping in: \sqrt{\quad\blackrule[height=25pt,depth=25pt]} local function register_extensible(font,char,style,box) local bx = tonut(box) @@ -35,14 +36,14 @@ local function register_extensible(font,char,style,box) local al = getattrlst(bx) local wd, ht, dp = getwhd(bx) local private = fonts.helpers.setboxdirectly(font,chardata[font][char].unicode or char,box) - -- local g = new_glyph(font,private) - -- setattrlst(g,al) + -- we saved a scaled glyph stream so we now use an unscaled one ... local g = new_glyph(font,private,al) local n = new_hlist(g) + -- so the dimensions of the box don't match the glyph scale! setwhd(n,wd,ht,dp) setattrlst(n,al) if id == vlist_code then - h = new_vlist(n) + n = new_vlist(n) setwhd(n,wd,ht,dp) setattrlst(n,al) end diff --git a/tex/context/base/mkxl/math-frc.mkxl b/tex/context/base/mkxl/math-frc.mkxl index 2170c8fd1..2e16e061f 100644 --- a/tex/context/base/mkxl/math-frc.mkxl +++ b/tex/context/base/mkxl/math-frc.mkxl @@ -661,35 +661,6 @@ [\c!hfactor=20, \c!vfactor=10] -%D For Mikael Sundqvist who found out that most inline fractions look real bad: - -\pushoverloadmode - -%ifdefined\d \let\text_d\d \else \let\text_d\firstofoneargument \fi -\ifdefined\f \let\text_f\f \else \let\text_f\firstofoneargument \fi - -\definemathfraction - [f] - [\c!strut=\v!math] - -% \definemathfraction -% [d] -% [\c!method=\v!line, -% \c!strut=\v!math] - -\aliased\let\math_f\f -%aliased\let\math_d\d - -\permanent\protected\def\d{\mathortext\math_d\text_d} -%permanent\protected\def\f{\mathortext\math_f\text_f} - -% \setupmathfraction -% [%strut=math, -% \c!hfactor=100, -% \c!vfactor=100] - -\popoverloadmode - \protect \endinput % I have no clue what \mthfrac and \mthsqrt are supposed to do but diff --git a/tex/context/base/mkxl/math-ini.lmt b/tex/context/base/mkxl/math-ini.lmt index 306b6585a..184e56672 100644 --- a/tex/context/base/mkxl/math-ini.lmt +++ b/tex/context/base/mkxl/math-ini.lmt @@ -51,7 +51,7 @@ local setdelcode = tex.setdelcode -- These are different from mkiv with luatex. -local classes = allocate { } +local classes = allocate { unset = 64 } -- or -1 local classnames = allocate { } local maxengineclass = 63 local lastengineclass = 0 @@ -121,21 +121,29 @@ local function registerengineclass(name,short) return class end -registerengineclass("explicit", "expl") -registerengineclass("imaginary", "img") -registerengineclass("differential","dif") -registerengineclass("exponential", "exp") -registerengineclass("function", "fnc") -registerengineclass("digit", "dig") +registerengineclass("explicit", "xpl") +registerengineclass("imaginary", "img") +registerengineclass("differential", "dif") +registerengineclass("exponential", "exp") +registerengineclass("ellipsis", "ell") +registerengineclass("function", "fnc") +registerengineclass("digit", "dig") local division_class = -registerengineclass("division", "div") -registerengineclass("factorial", "fac") -registerengineclass("wrapped", "wra") -registerengineclass("construct", "con") -registerengineclass("dimension", "dim") - -classes["begin"] = 62 classnames[62] = "begin" -classes["end"] = 63 classnames[63] = "end" +registerengineclass("division", "div") +registerengineclass("factorial", "fac") +registerengineclass("wrapped", "wra") +registerengineclass("construct", "con") +registerengineclass("dimension", "dim") +registerengineclass("textpunctuation", "tpu") +registerengineclass("unspaced") +registerengineclass("experimental") +registerengineclass("fake") + +local specialclasses = tex.specialmathclasscodes + +classes["all"] = specialclasses["all"] classnames[specialclasses["all"] ] = "all" +classes["begin"] = specialclasses["begin"] classnames[specialclasses["begin"]] = "begin" +classes["end"] = specialclasses["end"] classnames[specialclasses["end"] ] = "end" callback.register("get_noad_class", function(n) return classnames[n] end) diff --git a/tex/context/base/mkxl/math-ini.mkxl b/tex/context/base/mkxl/math-ini.mkxl index f4358d5e7..19123ab8a 100644 --- a/tex/context/base/mkxl/math-ini.mkxl +++ b/tex/context/base/mkxl/math-ini.mkxl @@ -13,40 +13,54 @@ \writestatus{loading}{ConTeXt Math Macros / Initializations} -%D This module provides namespaces for math fonts, thereby permitting mixed usage of -%D math fonts. Although not strictly needed, we also provide a family name mapping -%D mechanism as used in the (original) AMS math definition files, but here these -%D names can recursively be remapped and if needed, dynamically be changed. We've -%D tried to minimize the number of definition commands and use plain \TEX\ -%D definitions as fallback. We've tried to follow a couple of conventions from plain -%D and AMS math in order to achieve backward compatinility. We also kept an eye on -%D future usage of these modules in the perspective of MathML and unicode fonts. In -%D the meantime much has been dropped in favour of better alternatives. - -%D There is a subtle issue with grouping: the \type {\begingroup} method will not -%D restore a changed mathstyle so best avoid that one. However, there are cases where -%D we really need to use such grouping. We now have \type {\beginmathgroup} etc. +%D This is the \LMTX\ version of math support what evolved over decades. We started +%D out with native display math, battled for years with the heuristic spacing, +%D assumptions wrt number locations etc. Advanced alignments were implemented with +%D the help of Aditya. In \MKIV\ everything got upgraded, and we ended up with three +%D models for spacing and numbering: traditional (display), improved (using some +%D \LUATEX\ control options), and future (using emulated display) where we also +%D could handle multi|-|line formulas well. As \LUAMETATEX\ evolved it became clear +%D that we should drop the first two models completely and stick to the emulated +%D display mode combined with the ability to format multi|-|line formulas in greater +%D detail. +%D +%D One can wonder what this does with compatibility. Of course we try to be +%D interface compatible but better micro typography spacing has consequences. +%D However, in practice it looks like we get better results without too many side +%D effects. Also, we're not bound to for instance \AMS\ math because \CONTEXT\ is +%D not used by scientific publishers. In fact over the 15 plus years of development +%D (2022), no professional publisher (or large scale \TEX\ user) ever expressed +%D interest in \LUATEX\ and \LUAMETATEX, definitely not in relation to math, which +%D made it even more easy to upgrade the engine as well as \CONTEXT\ math and over +%D time users have demonstrated to appreciate improvements. We can do as we like, as +%D long as users like it too. It's with that mindset that Mikael Sundqvist and I +%D undertook this effort which took a year to mature. It started out with +%D implementing advanced spacing models based on inter|-|atom properties and control +%D but stepwise more got added and improved. We also settled on the fact that fonts +%D will never be perfect and that we need runtime fixing. That took some work but in +%D the end put less burden on the engine. +%D +%D After an extremely short discussion MS and HH decided that we will not support +%D \quote {BS ISO 80000-2:2009} because it doesn't comply to the CMS quality +%D standards and is BS anyway. %D Musical timestamp for the April 2022 math (inline) snapping sub activity: eNerd⁴ %D Time Capsule 2020 a.k.a. Farewell Party for Normalcy (DSD on the squeezebox with %D a proper DAC connected but it can hardly keep up which also counts for me with MS %D testing faster than I can provide variants (www.youtube.com/watch?v=xzQCqAJNOSM). -%D After an extremely short discussion MS and HH decided that we will not support -%D \quote { BS ISO 80000-2:2009} because it doesn't comply to the CMS quality -%D standards and is BS anyway. - \unprotect %D We move these definitions into the format: \registerctxluafile{math-ini}{autosuffix} \registerctxluafile{math-dim}{autosuffix} -\registerctxluafile{math-act}{autosuffix} +% \registerctxluafile{math-act}{autosuffix} \registerctxluafile{math-ext}{} \registerctxluafile{math-vfu}{autosuffix} \registerctxluafile{math-ttv}{} \registerctxluafile{math-map}{autosuffix} +\registerctxluafile{math-act}{autosuffix} \registerctxluafile{math-ren}{} \registerctxluafile{math-noa}{autosuffix} \registerctxluafile{math-tag}{autosuffix} @@ -60,6 +74,9 @@ \mathfencesmode \plusone % unpack +\delimiterfactor \plusthousand +\delimitershortfall \zeropoint + % These need to be set because otherwise the engine will not honor some font % properties. It also permits tracing. These might become engine defaults. As a % consequence we no longer check for traditional fonts but one can use font control @@ -91,19 +108,21 @@ % \mathpenaltiesmode\plusone -% These are frozen values because otherwise we need to sunc them when the predefined +% These are frozen values because otherwise we need to sync them when the predefined % muskip (internal) registers are changed. -\immutable\mugluespecdef\defaultthickermuskip 7mu plus 5.0mu -\immutable\mugluespecdef\defaultthickmuskip 5mu plus 5mu -\immutable\mugluespecdef\defaultmedmuskip 4mu plus 2mu minus 4mu +\immutable\mugluespecdef\defaultthickermuskip 7mu plus 5mu +\immutable\mugluespecdef\defaultthickmuskip 5mu plus 3mu minus 1mu +\immutable\mugluespecdef\defaultmedmuskip 4mu plus 2mu minus 2mu \immutable\mugluespecdef\defaultthinmuskip 3mu -\immutable\mugluespecdef\defaulttinymuskip 1mu +\immutable\mugluespecdef\defaulttinymuskip 2mu minus 1mu +\immutable\mugluespecdef\defaultpettymuskip 1mu minus 0.5mu -\immutable\mugluespecdef\halfthickmuskip 2.5mu plus 2.5mu -\immutable\mugluespecdef\halfmedmuskip 2.0mu plus 1.0mu minus 2.0mu +\immutable\mugluespecdef\halfthickmuskip 2.5mu plus 1.5mu minus 0.5mu +\immutable\mugluespecdef\halfmedmuskip 2mu plus 1mu minus 1mu \immutable\mugluespecdef\halfthinmuskip 1.5mu -\immutable\mugluespecdef\halftinymuskip 0.5mu +\immutable\mugluespecdef\halftinymuskip 1mu minus 0.5mu +\immutable\mugluespecdef\halfpettymuskip 0.5mu minus 0.25mu \immutable\mugluespecdef\hairmuskip .15mu @@ -114,41 +133,50 @@ \newmuskip\thickermuskip \thickermuskip \defaultthickermuskip -% more friendly in setups: - -\setnewconstant\mathordinarycode \mathclassvalue ordinary \aliased\let\mathordcode \mathordinarycode -\setnewconstant\mathoperatorcode \mathclassvalue operator \aliased\let\mathopcode \mathoperatorcode -\setnewconstant\mathbinarycode \mathclassvalue binary \aliased\let\mathbincode \mathbinarycode -\setnewconstant\mathrelationcode \mathclassvalue relation \aliased\let\mathrelcode \mathrelationcode -\setnewconstant\mathopencode \mathclassvalue open -\setnewconstant\mathclosecode \mathclassvalue close -\setnewconstant\mathpunctuationcode \mathclassvalue punctuation \aliased\let\mathpunctcode\mathpunctuationcode -\setnewconstant\mathinnercode \mathclassvalue inner -\setnewconstant\mathovercode \mathclassvalue over -\setnewconstant\mathundercode \mathclassvalue under -\setnewconstant\mathfractioncode \mathclassvalue fraction -\setnewconstant\mathradicalcode \mathclassvalue radical -\setnewconstant\mathmiddlecode \mathclassvalue middle -\setnewconstant\mathaccentcode \mathclassvalue accent -\setnewconstant\mathfencedcode \mathclassvalue fenced -\setnewconstant\mathghostcode \mathclassvalue ghost -\setnewconstant\mathvariablecode \mathclassvalue variable -\setnewconstant\mathactivecode \mathclassvalue active -\setnewconstant\mathvcentercode \mathclassvalue vcenter -\setnewconstant\mathimaginarycode \mathclassvalue imaginary -\setnewconstant\mathdifferentialcode \mathclassvalue differential -\setnewconstant\mathexponentialcode \mathclassvalue exponential -\setnewconstant\mathfunctioncode \mathclassvalue function -\setnewconstant\mathdigitcode \mathclassvalue digit -\setnewconstant\mathexplicitcode \mathclassvalue explicit -\setnewconstant\mathdivisioncode \mathclassvalue division -\setnewconstant\mathfactorialcode \mathclassvalue factorial -\setnewconstant\mathwrappedcode \mathclassvalue wrapped -\setnewconstant\mathconstructcode \mathclassvalue construct -\setnewconstant\mathdimensioncode \mathclassvalue dimension - -\setnewconstant\mathbegincode \mathclassvalue begin -\setnewconstant\mathendcode \mathclassvalue end +% Beware: we don't support mathinner any longer. We do have construct, wrapper, ellipsis etc +% as replacements and all inner spacing is basically unset. + +\setnewconstant\mathunsetcode \mathclassvalue unset + +\setnewconstant\mathordinarycode \mathclassvalue ordinary \aliased\let\mathordcode \mathordinarycode +\setnewconstant\mathoperatorcode \mathclassvalue operator \aliased\let\mathopcode \mathoperatorcode +\setnewconstant\mathbinarycode \mathclassvalue binary \aliased\let\mathbincode \mathbinarycode +\setnewconstant\mathrelationcode \mathclassvalue relation \aliased\let\mathrelcode \mathrelationcode +\setnewconstant\mathopencode \mathclassvalue open +\setnewconstant\mathclosecode \mathclassvalue close +\setnewconstant\mathpunctuationcode \mathclassvalue punctuation \aliased\let\mathpunctcode\mathpunctuationcode +\setnewconstant\mathinnercode \mathclassvalue inner +\setnewconstant\mathovercode \mathclassvalue over +\setnewconstant\mathundercode \mathclassvalue under +\setnewconstant\mathfractioncode \mathclassvalue fraction +\setnewconstant\mathradicalcode \mathclassvalue radical +\setnewconstant\mathmiddlecode \mathclassvalue middle +\setnewconstant\mathaccentcode \mathclassvalue accent +\setnewconstant\mathfencedcode \mathclassvalue fenced % unlikely to be seen but can be used +\setnewconstant\mathghostcode \mathclassvalue ghost % transparent for classes +\setnewconstant\mathvariablecode \mathclassvalue variable +\setnewconstant\mathactivecode \mathclassvalue active +\setnewconstant\mathvcentercode \mathclassvalue vcenter +\setnewconstant\mathimaginarycode \mathclassvalue imaginary +\setnewconstant\mathdifferentialcode \mathclassvalue differential +\setnewconstant\mathexponentialcode \mathclassvalue exponential +\setnewconstant\mathellipsiscode \mathclassvalue ellipsis % replacement for inner +\setnewconstant\mathfunctioncode \mathclassvalue function +\setnewconstant\mathdigitcode \mathclassvalue digit +\setnewconstant\mathexplicitcode \mathclassvalue explicit % only for for control +\setnewconstant\mathdivisioncode \mathclassvalue division +\setnewconstant\mathfactorialcode \mathclassvalue factorial +\setnewconstant\mathwrappedcode \mathclassvalue wrapped % replacement for inner +\setnewconstant\mathconstructcode \mathclassvalue construct % replacement for inner +\setnewconstant\mathdimensioncode \mathclassvalue dimension +\setnewconstant\mathtextpunctuationcode \mathclassvalue textpunctuation % for punctuation in text font followed by interword spacing +\setnewconstant\mathunspacedcode \mathclassvalue unspaced % for cases where we don't want spacing at all +\setnewconstant\mathexperimentalcode \mathclassvalue experimental % for MS and HH testing purposed only + +\setnewconstant\mathbegincode \mathclassvalue begin +\setnewconstant\mathendcode \mathclassvalue end +\setnewconstant\mathallcode \mathclassvalue all +\setnewconstant\mathfakecode \mathclassvalue fake %setnewconstant\mathtopaccentcode \mathclassvalue topaccent % these are private and above 31 %setnewconstant\mathbotaccentcode \mathclassvalue botaccent % these are private and above 31 @@ -168,22 +196,43 @@ \copymathspacing \mathexponentialcode \mathordinarycode \copymathspacing \mathdigitcode \mathordinarycode \copymathspacing \mathfunctioncode \mathoperatorcode -\copymathspacing \mathconstructcode \mathinnercode \copymathspacing \mathwrappedcode \mathfractioncode \setnewconstant\mathlimopcode \plusone \setnewconstant\mathnolopcode \plusone -% \m{m^2/x__3} - -\setmathoptions\mathdivisioncode\numexpr - \nopreslackclassoptioncode - +\nopostslackclassoptioncode - +\lefttopkernclassoptioncode - % +\righttopkernclassoptioncode - % +\leftbottomkernclassoptioncode - +\rightbottomkernclassoptioncode -\relax +%untraced\protected\def\mathordinary {\mathatom \s!class \mathordinarycode } % use \mathord +%untraced\protected\def\mathoperator {\mathatom \s!class \mathoperatorcode } % use \mathop +%untraced\protected\def\mathbinary {\mathatom \s!class \mathbinarycode } % use \mathbin +%untraced\protected\def\mathrelation {\mathatom \s!class \mathrelationcode } % use \mathrel +%untraced\protected\def\mathopen {\mathatom \s!class \mathopencode } % primitive +%untraced\protected\def\mathclose {\mathatom \s!class \mathclosecode } % primitive +%untraced\protected\def\mathpunctuation {\mathatom \s!class \mathpunctuationcode } % use \mathpunct +%untraced\protected\def\mathinner {\mathatom \s!class \mathinnercode } % primitive +%untraced\protected\def\mathover {\mathatom \s!class \mathovercode } % macro +%untraced\protected\def\mathunder {\mathatom \s!class \mathundercode } % macro +%untraced\protected\def\mathfraction {\mathatom \s!class \mathfractioncode } % use \mathfrac +%untraced\protected\def\mathradical {\mathatom \s!class \mathradicalcode } % use \mathrad +%untraced\protected\def\mathmiddle {\mathatom \s!class \mathmiddlecode } % primitive +%untraced\protected\def\mathaccent {\mathatom \s!class \mathaccentcode } % primitive +%untraced\protected\def\mathfenced {\mathatom \s!class \mathfencedcode } % primitive +%untraced\protected\def\mathghost {\mathatom \s!class \mathghostcode } % primitive +%untraced\protected\def\mathvariable {\mathatom \s!class \mathvariablecode } % useless +%untraced\protected\def\mathactive {\mathatom \s!class \mathactivecode } % useless +%untraced\protected\def\mathvcenter {\mathatom \s!class \mathvcentercode } % useless +\untraced\protected\def\mathimaginary {\mathatom \s!class \mathimaginarycode } +\untraced\protected\def\mathdifferential{\mathatom \s!class \mathdifferentialcode} +\untraced\protected\def\mathexponential {\mathatom \s!class \mathexponentialcode } +%untraced\protected\def\mathfunction {\mathatom \s!class \mathfunctioncode } % macro +\untraced\protected\def\mathdigit {\mathatom \s!class \mathdigitcode } +%untraced\protected\def\mathexplicit {\mathatom \s!class \mathexplicitcode } % dangerous +\untraced\protected\def\mathdivision {\mathatom \s!class \mathdivisioncode } +\untraced\protected\def\mathfactorial {\mathatom \s!class \mathfactorialcode } +\untraced\protected\def\mathwrapped {\mathatom \s!class \mathwrappedcode } +\untraced\protected\def\mathconstruct {\mathatom \s!class \mathconstructcode } +\untraced\protected\def\mathdimension {\mathatom \s!class \mathdimensioncode } +%untraced\protected\def\mathbegin {\mathatom \s!class \mathbegincode } % dangerous +%untraced\protected\def\mathend {\mathatom \s!class \mathendcode } % dangerous % obsolete @@ -212,11 +261,11 @@ \permanent\protected\def\ordopenspacing {\setmathspacing \mathordinarycode \mathopencode } \permanent\protected\def\ordclosespacing {\setmathspacing \mathordinarycode \mathclosecode } \permanent\protected\def\ordpunctspacing {\setmathspacing \mathordinarycode \mathpunctuationcode} -\permanent\protected\def\ordinnerspacing {\setmathspacing \mathordinarycode \mathinnercode } -\permanent\protected\def\ordfracspacing {\setmathspacing \mathordinarycode \mathfractioncode } -\permanent\protected\def\ordradspacing {\setmathspacing \mathordinarycode \mathradicalcode } +%permanent\protected\def\ordinnerspacing {\setmathspacing \mathordinarycode \mathinnercode } +%permanent\protected\def\ordfracspacing {\setmathspacing \mathordinarycode \mathfractioncode } +%permanent\protected\def\ordradspacing {\setmathspacing \mathordinarycode \mathradicalcode } \permanent\protected\def\ordmiddlespacing {\setmathspacing \mathordinarycode \mathmiddlecode } -\permanent\protected\def\ordaccentspacing {\setmathspacing \mathordinarycode \mathaccentcode } +%permanent\protected\def\ordaccentspacing {\setmathspacing \mathordinarycode \mathaccentcode } \permanent\protected\def\opordspacing {\setmathspacing \mathoperatorcode \mathordinarycode } \permanent\protected\def\opopspacing {\setmathspacing \mathoperatorcode \mathoperatorcode } @@ -225,11 +274,11 @@ \permanent\protected\def\opopenspacing {\setmathspacing \mathoperatorcode \mathopencode } \permanent\protected\def\opclosespacing {\setmathspacing \mathoperatorcode \mathclosecode } \permanent\protected\def\oppunctspacing {\setmathspacing \mathoperatorcode \mathpunctuationcode} -\permanent\protected\def\opinnerspacing {\setmathspacing \mathoperatorcode \mathinnercode } -\permanent\protected\def\opfracspacing {\setmathspacing \mathoperatorcode \mathfractioncode } -\permanent\protected\def\opradspacing {\setmathspacing \mathoperatorcode \mathradicalcode } +%permanent\protected\def\opinnerspacing {\setmathspacing \mathoperatorcode \mathinnercode } +%permanent\protected\def\opfracspacing {\setmathspacing \mathoperatorcode \mathfractioncode } +%permanent\protected\def\opradspacing {\setmathspacing \mathoperatorcode \mathradicalcode } \permanent\protected\def\opmiddlespacing {\setmathspacing \mathoperatorcode \mathmiddlecode } -\permanent\protected\def\opaccentspacing {\setmathspacing \mathoperatorcode \mathaccentcode } +%permanent\protected\def\opaccentspacing {\setmathspacing \mathoperatorcode \mathaccentcode } \permanent\protected\def\binordspacing {\setmathspacing \mathbinarycode \mathordinarycode } \permanent\protected\def\binopspacing {\setmathspacing \mathbinarycode \mathoperatorcode } @@ -238,11 +287,11 @@ \permanent\protected\def\binopenspacing {\setmathspacing \mathbinarycode \mathopencode } \permanent\protected\def\binclosespacing {\setmathspacing \mathbinarycode \mathclosecode } \permanent\protected\def\binpunctspacing {\setmathspacing \mathbinarycode \mathpunctuationcode} -\permanent\protected\def\bininnerspacing {\setmathspacing \mathbinarycode \mathinnercode } -\permanent\protected\def\binfracspacing {\setmathspacing \mathbinarycode \mathfractioncode } -\permanent\protected\def\binradspacing {\setmathspacing \mathbinarycode \mathradicalcode } +%permanent\protected\def\bininnerspacing {\setmathspacing \mathbinarycode \mathinnercode } +%permanent\protected\def\binfracspacing {\setmathspacing \mathbinarycode \mathfractioncode } +%permanent\protected\def\binradspacing {\setmathspacing \mathbinarycode \mathradicalcode } \permanent\protected\def\binmiddlespacing {\setmathspacing \mathbinarycode \mathmiddlecode } -\permanent\protected\def\binaccentspacing {\setmathspacing \mathbinarycode \mathaccentcode } +%permanent\protected\def\binaccentspacing {\setmathspacing \mathbinarycode \mathaccentcode } \permanent\protected\def\relordspacing {\setmathspacing \mathrelationcode \mathordinarycode } \permanent\protected\def\relopspacing {\setmathspacing \mathrelationcode \mathoperatorcode } @@ -251,11 +300,11 @@ \permanent\protected\def\relopenspacing {\setmathspacing \mathrelationcode \mathopencode } \permanent\protected\def\relclosespacing {\setmathspacing \mathrelationcode \mathclosecode } \permanent\protected\def\relpunctspacing {\setmathspacing \mathrelationcode \mathpunctuationcode} -\permanent\protected\def\relinnerspacing {\setmathspacing \mathrelationcode \mathinnercode } -\permanent\protected\def\relfracspacing {\setmathspacing \mathrelationcode \mathfractioncode } -\permanent\protected\def\relradspacing {\setmathspacing \mathrelationcode \mathradicalcode } +%permanent\protected\def\relinnerspacing {\setmathspacing \mathrelationcode \mathinnercode } +%permanent\protected\def\relfracspacing {\setmathspacing \mathrelationcode \mathfractioncode } +%permanent\protected\def\relradspacing {\setmathspacing \mathrelationcode \mathradicalcode } \permanent\protected\def\relmiddlespacing {\setmathspacing \mathrelationcode \mathmiddlecode } -\permanent\protected\def\relaccentspacing {\setmathspacing \mathrelationcode \mathaccentcode } +%permanent\protected\def\relaccentspacing {\setmathspacing \mathrelationcode \mathaccentcode } \permanent\protected\def\openordspacing {\setmathspacing \mathopencode \mathordinarycode } \permanent\protected\def\openopspacing {\setmathspacing \mathopencode \mathoperatorcode } @@ -264,11 +313,11 @@ \permanent\protected\def\openopenspacing {\setmathspacing \mathopencode \mathopencode } \permanent\protected\def\openclosespacing {\setmathspacing \mathopencode \mathclosecode } \permanent\protected\def\openpunctspacing {\setmathspacing \mathopencode \mathpunctuationcode} -\permanent\protected\def\openinnerspacing {\setmathspacing \mathopencode \mathinnercode } -\permanent\protected\def\openfracspacing {\setmathspacing \mathopencode \mathfractioncode } -\permanent\protected\def\openradspacing {\setmathspacing \mathopencode \mathradicalcode } +%permanent\protected\def\openinnerspacing {\setmathspacing \mathopencode \mathinnercode } +%permanent\protected\def\openfracspacing {\setmathspacing \mathopencode \mathfractioncode } +%permanent\protected\def\openradspacing {\setmathspacing \mathopencode \mathradicalcode } \permanent\protected\def\openmiddlespacing {\setmathspacing \mathopencode \mathmiddlecode } -\permanent\protected\def\openaccentspacing {\setmathspacing \mathopencode \mathaccentcode } +%permanent\protected\def\openaccentspacing {\setmathspacing \mathopencode \mathaccentcode } \permanent\protected\def\closeordspacing {\setmathspacing \mathclosecode \mathordinarycode } \permanent\protected\def\closeopspacing {\setmathspacing \mathclosecode \mathoperatorcode } @@ -277,11 +326,11 @@ \permanent\protected\def\closeopenspacing {\setmathspacing \mathclosecode \mathopencode } \permanent\protected\def\closeclosespacing {\setmathspacing \mathclosecode \mathclosecode } \permanent\protected\def\closepunctspacing {\setmathspacing \mathclosecode \mathpunctuationcode} -\permanent\protected\def\closeinnerspacing {\setmathspacing \mathclosecode \mathinnercode } -\permanent\protected\def\closefracspacing {\setmathspacing \mathclosecode \mathfractioncode } -\permanent\protected\def\closeradspacing {\setmathspacing \mathclosecode \mathradicalcode } +%permanent\protected\def\closeinnerspacing {\setmathspacing \mathclosecode \mathinnercode } +%permanent\protected\def\closefracspacing {\setmathspacing \mathclosecode \mathfractioncode } +%permanent\protected\def\closeradspacing {\setmathspacing \mathclosecode \mathradicalcode } \permanent\protected\def\closemiddlespacing {\setmathspacing \mathclosecode \mathmiddlecode } -\permanent\protected\def\closeaccentspacing {\setmathspacing \mathclosecode \mathaccentcode } +%permanent\protected\def\closeaccentspacing {\setmathspacing \mathclosecode \mathaccentcode } \permanent\protected\def\punctordspacing {\setmathspacing \mathpunctuationcode \mathordinarycode } \permanent\protected\def\punctopspacing {\setmathspacing \mathpunctuationcode \mathoperatorcode } @@ -290,24 +339,24 @@ \permanent\protected\def\punctopenspacing {\setmathspacing \mathpunctuationcode \mathopencode } \permanent\protected\def\punctclosespacing {\setmathspacing \mathpunctuationcode \mathclosecode } \permanent\protected\def\punctpunctspacing {\setmathspacing \mathpunctuationcode \mathpunctuationcode} -\permanent\protected\def\punctinnerspacing {\setmathspacing \mathpunctuationcode \mathinnercode } -\permanent\protected\def\punctfracspacing {\setmathspacing \mathpunctuationcode \mathfractioncode } -\permanent\protected\def\punctradspacing {\setmathspacing \mathpunctuationcode \mathradicalcode } +%permanent\protected\def\punctinnerspacing {\setmathspacing \mathpunctuationcode \mathinnercode } +%permanent\protected\def\punctfracspacing {\setmathspacing \mathpunctuationcode \mathfractioncode } +%permanent\protected\def\punctradspacing {\setmathspacing \mathpunctuationcode \mathradicalcode } \permanent\protected\def\punctmiddlespacing {\setmathspacing \mathpunctuationcode \mathmiddlecode } -\permanent\protected\def\punctaccentspacing {\setmathspacing \mathpunctuationcode \mathaccentcode } - -\permanent\protected\def\innerordspacing {\setmathspacing \mathinnercode \mathordinarycode } -\permanent\protected\def\inneropspacing {\setmathspacing \mathinnercode \mathoperatorcode } -\permanent\protected\def\innerbinspacing {\setmathspacing \mathinnercode \mathbinarycode } -\permanent\protected\def\innerrelspacing {\setmathspacing \mathinnercode \mathrelationcode } -\permanent\protected\def\inneropenspacing {\setmathspacing \mathinnercode \mathopencode } -\permanent\protected\def\innerclosespacing {\setmathspacing \mathinnercode \mathclosecode } -\permanent\protected\def\innerpunctspacing {\setmathspacing \mathinnercode \mathpunctuationcode} -\permanent\protected\def\innerinnerspacing {\setmathspacing \mathinnercode \mathinnercode } -\permanent\protected\def\innerfracspacing {\setmathspacing \mathinnercode \mathfractioncode } -\permanent\protected\def\innerradspacing {\setmathspacing \mathinnercode \mathradicalcode } -\permanent\protected\def\innermiddlespacing {\setmathspacing \mathinnercode \mathmiddlecode } -\permanent\protected\def\inneraccentspacing {\setmathspacing \mathinnercode \mathaccentcode } +%permanent\protected\def\punctaccentspacing {\setmathspacing \mathpunctuationcode \mathaccentcode } + +%permanent\protected\def\innerordspacing {\setmathspacing \mathinnercode \mathordinarycode } +%permanent\protected\def\inneropspacing {\setmathspacing \mathinnercode \mathoperatorcode } +%permanent\protected\def\innerbinspacing {\setmathspacing \mathinnercode \mathbinarycode } +%permanent\protected\def\innerrelspacing {\setmathspacing \mathinnercode \mathrelationcode } +%permanent\protected\def\inneropenspacing {\setmathspacing \mathinnercode \mathopencode } +%permanent\protected\def\innerclosespacing {\setmathspacing \mathinnercode \mathclosecode } +%permanent\protected\def\innerpunctspacing {\setmathspacing \mathinnercode \mathpunctuationcode} +%permanent\protected\def\innerinnerspacing {\setmathspacing \mathinnercode \mathinnercode } +%permanent\protected\def\innerfracspacing {\setmathspacing \mathinnercode \mathfractioncode } +%permanent\protected\def\innerradspacing {\setmathspacing \mathinnercode \mathradicalcode } +%permanent\protected\def\innermiddlespacing {\setmathspacing \mathinnercode \mathmiddlecode } +%permanent\protected\def\inneraccentspacing {\setmathspacing \mathinnercode \mathaccentcode } \permanent\protected\def\fracordspacing {\setmathspacing \mathfractioncode \mathordinarycode } \permanent\protected\def\fracopspacing {\setmathspacing \mathfractioncode \mathoperatorcode } @@ -316,11 +365,11 @@ \permanent\protected\def\fracopenspacing {\setmathspacing \mathfractioncode \mathopencode } \permanent\protected\def\fracclosespacing {\setmathspacing \mathfractioncode \mathclosecode } \permanent\protected\def\fracpunctspacing {\setmathspacing \mathfractioncode \mathpunctuationcode} -\permanent\protected\def\fracinnerspacing {\setmathspacing \mathfractioncode \mathinnercode } -\permanent\protected\def\fracfracspacing {\setmathspacing \mathfractioncode \mathfractioncode } -\permanent\protected\def\fracradspacing {\setmathspacing \mathfractioncode \mathradicalcode } +%permanent\protected\def\fracinnerspacing {\setmathspacing \mathfractioncode \mathinnercode } +%permanent\protected\def\fracfracspacing {\setmathspacing \mathfractioncode \mathfractioncode } +%permanent\protected\def\fracradspacing {\setmathspacing \mathfractioncode \mathradicalcode } \permanent\protected\def\fracmiddlespacing {\setmathspacing \mathfractioncode \mathmiddlecode } -\permanent\protected\def\fracaccentspacing {\setmathspacing \mathfractioncode \mathaccentcode } +%permanent\protected\def\fracaccentspacing {\setmathspacing \mathfractioncode \mathaccentcode } \permanent\protected\def\radordspacing {\setmathspacing \mathradicalcode \mathordinarycode } \permanent\protected\def\radopspacing {\setmathspacing \mathradicalcode \mathoperatorcode } @@ -329,11 +378,11 @@ \permanent\protected\def\radopenspacing {\setmathspacing \mathradicalcode \mathopencode } \permanent\protected\def\radclosespacing {\setmathspacing \mathradicalcode \mathclosecode } \permanent\protected\def\radpunctspacing {\setmathspacing \mathradicalcode \mathpunctuationcode} -\permanent\protected\def\radinnerspacing {\setmathspacing \mathradicalcode \mathinnercode } -\permanent\protected\def\radfracspacing {\setmathspacing \mathradicalcode \mathfractioncode } -\permanent\protected\def\radradspacing {\setmathspacing \mathradicalcode \mathradicalcode } +%permanent\protected\def\radinnerspacing {\setmathspacing \mathradicalcode \mathinnercode } +%permanent\protected\def\radfracspacing {\setmathspacing \mathradicalcode \mathfractioncode } +%permanent\protected\def\radradspacing {\setmathspacing \mathradicalcode \mathradicalcode } \permanent\protected\def\radmiddlespacing {\setmathspacing \mathradicalcode \mathmiddlecode } -\permanent\protected\def\radaccentspacing {\setmathspacing \mathradicalcode \mathaccentcode } +%permanent\protected\def\radaccentspacing {\setmathspacing \mathradicalcode \mathaccentcode } \permanent\protected\def\middleordspacing {\setmathspacing \mathmiddlecode \mathordinarycode } \permanent\protected\def\middleopspacing {\setmathspacing \mathmiddlecode \mathoperatorcode } @@ -342,11 +391,11 @@ \permanent\protected\def\middleopenspacing {\setmathspacing \mathmiddlecode \mathopencode } \permanent\protected\def\middleclosespacing {\setmathspacing \mathmiddlecode \mathclosecode } \permanent\protected\def\middlepunctspacing {\setmathspacing \mathmiddlecode \mathpunctuationcode} -\permanent\protected\def\middleinnerspacing {\setmathspacing \mathmiddlecode \mathinnercode } -\permanent\protected\def\middlefracspacing {\setmathspacing \mathmiddlecode \mathfractioncode } -\permanent\protected\def\middleradspacing {\setmathspacing \mathmiddlecode \mathradicalcode } +%permanent\protected\def\middleinnerspacing {\setmathspacing \mathmiddlecode \mathinnercode } +%permanent\protected\def\middlefracspacing {\setmathspacing \mathmiddlecode \mathfractioncode } +%permanent\protected\def\middleradspacing {\setmathspacing \mathmiddlecode \mathradicalcode } \permanent\protected\def\middlemiddlespacing{\setmathspacing \mathmiddlecode \mathmiddlecode } -\permanent\protected\def\middleaccentspacing{\setmathspacing \mathmiddlecode \mathaccentcode } +%permanent\protected\def\middleaccentspacing{\setmathspacing \mathmiddlecode \mathaccentcode } \permanent\protected\def\accentordspacing {\setmathspacing \mathaccentcode \mathordinarycode } \permanent\protected\def\accentopspacing {\setmathspacing \mathaccentcode \mathoperatorcode } @@ -355,11 +404,11 @@ \permanent\protected\def\accentopenspacing {\setmathspacing \mathaccentcode \mathopencode } \permanent\protected\def\accentclosespacing {\setmathspacing \mathaccentcode \mathclosecode } \permanent\protected\def\accentpunctspacing {\setmathspacing \mathaccentcode \mathpunctuationcode} -\permanent\protected\def\accentinnerspacing {\setmathspacing \mathaccentcode \mathinnercode } -\permanent\protected\def\accentfracspacing {\setmathspacing \mathaccentcode \mathfractioncode } -\permanent\protected\def\accentradspacing {\setmathspacing \mathaccentcode \mathradicalcode } +%permanent\protected\def\accentinnerspacing {\setmathspacing \mathaccentcode \mathinnercode } +%permanent\protected\def\accentfracspacing {\setmathspacing \mathaccentcode \mathfractioncode } +%permanent\protected\def\accentradspacing {\setmathspacing \mathaccentcode \mathradicalcode } \permanent\protected\def\accentmiddlespacing{\setmathspacing \mathaccentcode \mathmiddlecode } -\permanent\protected\def\accentaccentspacing{\setmathspacing \mathaccentcode \mathaccentcode } +%permanent\protected\def\accentaccentspacing{\setmathspacing \mathaccentcode \mathaccentcode } %D In the end Mikael and I prefer this but we need a high level interface: @@ -369,29 +418,124 @@ \setmathignore \Umathspacebeforescript\zerocount \setmathignore \Umathspaceafterscript \zerocount -\mathslackmode \plusone +\mathslackmode \plusone +\mathgroupingmode \plusone +%mathdoublescriptmode\zerocount % -1 will give an error (as usual) .. "LLRR (left class, right class) + +% $x ^^1__2 ^3_4 ^5_6 ^7_8 $ + +\mathdoublescriptmode + "\tohexadecimal\mathfakecode + \tohexadecimal\mathfakecode + \tohexadecimal\mathfakecode \integerdef\defaultmathclassoptions\numexpr \nopreslackclassoptioncode +\nopostslackclassoptioncode - % +\lefttopkernclassoptioncode - % +\righttopkernclassoptioncode - % +\leftbottomkernclassoptioncode - % +\rightbottomkernclassoptioncode - % +\lookaheadforendclassoptioncode + % +\lefttopkernclassoptioncode % applied in a late stage e.g. division + % +\righttopkernclassoptioncode % applied in a late stage e.g. division + % +\leftbottomkernclassoptioncode % applied in a late stage e.g. division + % +\rightbottomkernclassoptioncode % applied in a late stage e.g. division + % +\lookaheadforendclassoptioncode % signed whatevers + % +\noitaliccorrectionclassoptioncode + % +\openfenceclassoptioncode % the engine doesn't really used this property but maybe + % +\closefenceclassoptioncode % at some point we want to have to have access to it at + % +\middlefenceclassoptioncode % lua end ... so we keep it (also in the engine) commented + % +\checkligatureclassoptioncode % no font provides this so it is more a compatibility feature + % +\flattenclassoptioncode + % +\omitpenaltyclassoptioncode % old school check, we do pairwise instead +\relax + +\setmathoptions\mathordinarycode\numexpr + \noitaliccorrectionclassoptioncode + % +\checkligatureclassoptioncode + +\flattenclassoptioncode +\relax + +\setmathoptions\mathoperatorcode\numexpr + \defaultmathclassoptions + % +\checkligatureclassoptioncode \relax \setmathoptions\mathbinarycode\numexpr \defaultmathclassoptions +\lookaheadforendclassoptioncode + +\noitaliccorrectionclassoptioncode + % +\checkligatureclassoptioncode + +\flattenclassoptioncode \relax -\setmathoptions\mathoperatorcode \defaultmathclassoptions -\setmathoptions\mathrelationcode \defaultmathclassoptions -\setmathoptions\mathopencode \defaultmathclassoptions -\setmathoptions\mathclosecode \defaultmathclassoptions -\setmathoptions\mathpunctuationcode\defaultmathclassoptions -\setmathoptions\mathfractioncode \defaultmathclassoptions +\setmathoptions\mathrelationcode\numexpr + \defaultmathclassoptions + +\noitaliccorrectionclassoptioncode + % +\checkligatureclassoptioncode + +\flattenclassoptioncode + % +\omitpenaltyclassoptioncode +\relax + +\setmathoptions\mathopencode\numexpr + \defaultmathclassoptions + +\noitaliccorrectionclassoptioncode + % +\openfenceclassoptioncode + % +\checkligatureclassoptioncode +\relax + +\setmathoptions\mathclosecode\numexpr + \defaultmathclassoptions + +\noitaliccorrectionclassoptioncode + % +\closefenceclassoptioncode + % +\checkligatureclassoptioncode +\relax + +\setmathoptions\mathpunctuationcode\numexpr + \defaultmathclassoptions + +\noitaliccorrectionclassoptioncode + % +\checkligatureclassoptioncode + +\flattenclassoptioncode +\relax + +\setmathoptions\mathvariablecode\numexpr + \noitaliccorrectionclassoptioncode +\relax + +\setmathoptions\mathactivecode\numexpr + \noitaliccorrectionclassoptioncode +\relax + +%setmathoptions\mathinnercode\numexpr +% \noitaliccorrectionclassoptioncode +% +\flattenclassoptioncode +%relax + +\setmathoptions\mathmiddlecode\numexpr + \noitaliccorrectionclassoptioncode + % +\middlefenceclassoptioncode +\relax + +\setmathoptions\mathfractioncode\numexpr + \defaultmathclassoptions +\relax + +\setmathoptions\mathaccentcode\numexpr + \defaultmathclassoptions +\relax + +% \m{m^2/x__3} + +\setmathoptions\mathdivisioncode\numexpr + \nopreslackclassoptioncode + +\nopostslackclassoptioncode + +\lefttopkernclassoptioncode + % +\righttopkernclassoptioncode + % +\leftbottomkernclassoptioncode + +\rightbottomkernclassoptioncode +\relax + +\setmathoptions\mathbegincode + \nopostslackclassoptioncode + +\setmathoptions\mathendcode + \nopreslackclassoptioncode %D For now \unknown (todo: make it adapt to style but we're in text anyway) @@ -694,6 +838,7 @@ \medmuskip \defaultmedmuskip \thinmuskip \defaultthinmuskip \tinymuskip \defaulttinymuskip + \pettymuskip \defaultpettymuskip \relpenalty \defaultrelpenalty \binoppenalty \defaultbinoppenalty \prebinoppenalty\maxdimen @@ -705,6 +850,7 @@ \medmuskip \defaultmedmuskip \thinmuskip \defaultthinmuskip \tinymuskip \defaulttinymuskip + \pettymuskip \defaultpettymuskip \relpenalty \defaultrelpenalty \binoppenalty \defaultbinoppenalty \prebinoppenalty\defaultprebinoppenalty @@ -716,6 +862,7 @@ \medmuskip \halfmedmuskip \thinmuskip \halfthinmuskip \tinymuskip \halftinymuskip + \pettymuskip \halfpettymuskip \relpenalty \defaultrelpenalty \binoppenalty \defaultbinoppenalty \prebinoppenalty\maxdimen @@ -728,11 +875,13 @@ \medmuskip \halfmedmuskip \thinmuskip \halfthinmuskip \tinymuskip \halftinymuskip + \pettymuskip \halfpettymuskip \else \thickmuskip 1\halfthickmuskip \medmuskip 1\halfmedmuskip \thinmuskip 1\halfthinmuskip \tinymuskip 1\halftinymuskip + \pettymuskip 1\halfpettymuskip \fi \relpenalty \defaultrelpenalty \binoppenalty \maxdimen @@ -746,11 +895,13 @@ \medmuskip \halfmedmuskip \thinmuskip \halfthinmuskip \tinymuskip \halftinymuskip + \pettymuskip \halfpettymuskip \else \thickmuskip 1\halfthickmuskip \medmuskip 1\halfmedmuskip \thinmuskip 1\halfthinmuskip \tinymuskip 1\halftinymuskip + \pettymuskip 1\halfpettymuskip \fi \relpenalty \maxdimen \binoppenalty \maxdimen @@ -762,199 +913,44 @@ % \Umathspacingmode\allmathstyles\plusone % always pair driven -% \startsetups math:spacing:presets -% \resetmathspacing -% % \ordordspacing \allmathstyles \zeromuskip -% \inherited\ordopspacing \allmathstyles \thinmuskip -% \inherited\ordbinspacing \allsplitstyles \medmuskip -% \inherited\ordbinspacing \allscriptstyles\tinymuskip -% \inherited\ordrelspacing \allsplitstyles \thickmuskip -% \inherited\ordrelspacing \allscriptstyles\tinymuskip -% % \inherited\ordopenspacing \allmathstyles \zeromuskip -% \inherited\ordmiddlespacing \allsplitstyles \medmuskip -% \inherited\ordmiddlespacing \allscriptstyles\tinymuskip -% % \inherited\ordclosespacing \allmathstyles \zeromuskip -% % \inherited\ordpunctspacing \allmathstyles \zeromuskip -% \inherited\ordinnerspacing \allsplitstyles \thinmuskip -% \inherited\ordinnerspacing \allscriptstyles\tinymuskip -% \inherited\ordfracspacing \allmathstyles \tinymuskip -% \inherited\ordradspacing \allmathstyles \tinymuskip -% \inherited\opordspacing \allmathstyles \thinmuskip -% \inherited\opopspacing \allmathstyles \thinmuskip -% % \inherited \opbinspacing \allmathstyles \zeromuskip -% \inherited\oprelspacing \allsplitstyles \thickmuskip -% \inherited\oprelspacing \allscriptstyles\tinymuskip -% % \inherited\opopenspacing \allmathstyles \zeromuskip -% \inherited\opmiddlespacing \allsplitstyles \medmuskip -% \inherited\opmiddlespacing \allscriptstyles\tinymuskip -% % \inherited\opclosespacing \allmathstyles \zeromuskip -% % \inherited\oppunctspacing \allmathstyles \zeromuskip -% \inherited\opinnerspacing \allsplitstyles \thinmuskip -% \inherited\opinnerspacing \allscriptstyles\tinymuskip -% \inherited\opfracspacing \allmathstyles \thinmuskip -% \inherited\opradspacing \allmathstyles \thinmuskip -% \inherited\binordspacing \allsplitstyles \medmuskip -% \inherited\binordspacing \allscriptstyles\tinymuskip -% \inherited\binopspacing \allsplitstyles \medmuskip -% \inherited\binopspacing \allscriptstyles\tinymuskip -% % \inherited\binbinspacing \allmathstyles \zeromuskip -% % \inherited\binrelspacing \allmathstyles \zeromuskip -% \inherited\binopenspacing \allsplitstyles \medmuskip -% \inherited\binopenspacing \allscriptstyles\tinymuskip -% \inherited\binmiddlespacing \allsplitstyles \medmuskip -% \inherited\binmiddlespacing \allscriptstyles\tinymuskip -% % \inherited\binclosespacing \allmathstyles \zeromuskip -% % \inherited\binpunctspacing \allmathstyles \zeromuskip -% \inherited\bininnerspacing \allsplitstyles \medmuskip -% \inherited\bininnerspacing \allscriptstyles\tinymuskip -% \inherited\binfracspacing \allsplitstyles \medmuskip -% \inherited\binfracspacing \allscriptstyles\tinymuskip -% \inherited\binradspacing \allsplitstyles \medmuskip -% \inherited\binradspacing \allscriptstyles\tinymuskip -% \inherited\relordspacing \allsplitstyles \thickmuskip -% \inherited\relordspacing \allscriptstyles\tinymuskip -% \inherited\relopspacing \allsplitstyles \thickmuskip -% \inherited\relopspacing \allscriptstyles\tinymuskip -% % \inherited\relbinspacing \allmathstyles \zeromuskip -% % \inherited\relrelspacing \allmathstyles \zeromuskip -% \inherited\relopenspacing \allsplitstyles \thickmuskip -% \inherited\relopenspacing \allscriptstyles\tinymuskip -% \inherited\relmiddlespacing \allsplitstyles \thickmuskip -% \inherited\relmiddlespacing \allscriptstyles\thinmuskip -% % \inherited\relclosespacing \allmathstyles \zeromuskip -% % \inherited\relpunctspacing \allmathstyles \zeromuskip -% \inherited\relinnerspacing \allsplitstyles \thickmuskip -% \inherited\relinnerspacing \allscriptstyles\tinymuskip -% \inherited\relfracspacing \allsplitstyles \thickmuskip -% \inherited\relfracspacing \allscriptstyles\tinymuskip -% \inherited\relradspacing \allsplitstyles \thickmuskip -% \inherited\relradspacing \allscriptstyles\tinymuskip -% % \inherited\openordspacing \allmathstyles \zeromuskip -% % \inherited\openopspacing \allmathstyles \zeromuskip -% % \inherited\openbinspacing \allmathstyles \zeromuskip -% % \inherited\openrelspacing \allmathstyles \zeromuskip -% % \inherited\openopenspacing \allmathstyles \zeromuskip -% % \inherited\openmiddlespacing \allmathstyles \zeromuskip -% % \inherited\openclosespacing \allmathstyles \zeromuskip -% % \inherited\openpunctspacing \allmathstyles \zeromuskip -% % \inherited\openinnerspacing \allmathstyles \zeromuskip -% \inherited\openfracspacing \allmathstyles \tinymuskip -% % \inherited\openradspacing \allmathstyles \zeromuskip -% % \inherited\closeordspacing \allmathstyles \zeromuskip -% \inherited\closeopspacing \allmathstyles \thinmuskip -% \inherited\closebinspacing \allsplitstyles \medmuskip -% \inherited\closebinspacing \allscriptstyles\tinymuskip -% \inherited\closerelspacing \allsplitstyles \thickmuskip -% \inherited\closerelspacing \allscriptstyles\tinymuskip -% % \inherited\closeopenspacing \allmathstyles \zeromuskip -% % \inherited\closemiddlespacing \allmathstyles \zeromuskip -% % \inherited\closeclosespacing \allmathstyles \zeromuskip -% % \inherited\closepunctspacing \allmathstyles \zeromuskip -% \inherited\closeinnerspacing \allsplitstyles \thinmuskip -% \inherited\closeinnerspacing \allscriptstyles\tinymuskip -% \inherited\closefracspacing \allsplitstyles \thinmuskip -% \inherited\closefracspacing \allscriptstyles\tinymuskip -% % \inherited\closeradspacing \allmathstyles \zeromuskip -% \inherited\punctordspacing \allsplitstyles \thinmuskip -% \inherited\punctordspacing \allscriptstyles\tinymuskip -% \inherited\punctopspacing \allsplitstyles \thinmuskip -% \inherited\punctopspacing \allscriptstyles\tinymuskip -% % \inherited\punctbinspacing \allmathstyles \zeromuskip -% \inherited\punctrelspacing \allsplitstyles \thinmuskip -% \inherited\punctrelspacing \allscriptstyles\tinymuskip -% \inherited\punctopenspacing \allsplitstyles \thinmuskip -% \inherited\punctopenspacing \allscriptstyles\tinymuskip -% \inherited\punctmiddlespacing \allsplitstyles \thinmuskip -% \inherited\punctmiddlespacing \allscriptstyles\tinymuskip -% \inherited\punctclosespacing \allsplitstyles \thinmuskip -% \inherited\punctclosespacing \allscriptstyles\tinymuskip -% \inherited\punctpunctspacing \allsplitstyles \thinmuskip -% \inherited\punctpunctspacing \allscriptstyles\tinymuskip -% \inherited\punctinnerspacing \allsplitstyles \thinmuskip -% \inherited\punctinnerspacing \allscriptstyles\tinymuskip -% \inherited\punctfracspacing \allsplitstyles \thinmuskip -% \inherited\punctfracspacing \allscriptstyles\tinymuskip -% \inherited\punctradspacing \allsplitstyles \thinmuskip -% \inherited\punctradspacing \allscriptstyles\tinymuskip -% \inherited\innerordspacing \allsplitstyles \thinmuskip -% \inherited\innerordspacing \allscriptstyles\tinymuskip -% \inherited\inneropspacing \allmathstyles \thinmuskip -% \inherited\innerbinspacing \allsplitstyles \medmuskip -% \inherited\innerbinspacing \allscriptstyles\tinymuskip -% \inherited\innerrelspacing \allsplitstyles \thickmuskip -% \inherited\innerrelspacing \allscriptstyles\tinymuskip -% \inherited\inneropenspacing \allsplitstyles \thinmuskip -% \inherited\inneropenspacing \allscriptstyles\tinymuskip -% \inherited\innermiddlespacing \allsplitstyles \thinmuskip -% \inherited\innermiddlespacing \allscriptstyles\tinymuskip -% % \inherited\innerclosespacing \allmathstyles \zeromuskip -% \inherited\innerpunctspacing \allsplitstyles \thinmuskip -% \inherited\innerpunctspacing \allscriptstyles\tinymuskip -% \inherited\innerinnerspacing \allsplitstyles \thinmuskip -% \inherited\innerinnerspacing \allscriptstyles\tinymuskip -% \inherited\innerfracspacing \allsplitstyles \thinmuskip -% \inherited\innerfracspacing \allscriptstyles\tinymuskip -% \inherited\innerradspacing \allsplitstyles \thinmuskip -% \inherited\innerradspacing \allscriptstyles\tinymuskip -% \inherited\fracordspacing \allmathstyles \tinymuskip -% \inherited\fracopspacing \allmathstyles \thinmuskip -% \inherited\fracbinspacing \allsplitstyles \medmuskip -% \inherited\fracbinspacing \allscriptstyles\tinymuskip -% \inherited\fracrelspacing \allsplitstyles \thickmuskip -% \inherited\fracrelspacing \allscriptstyles\tinymuskip -% \inherited\fracopenspacing \allsplitstyles \thinmuskip -% \inherited\fracopenspacing \allscriptstyles\tinymuskip -% \inherited\fracmiddlespacing \allsplitstyles \medmuskip -% \inherited\fracmiddlespacing \allscriptstyles\tinymuskip -% \inherited\fracclosespacing \allmathstyles \tinymuskip -% % \inherited\fracpunctspacing \allmathstyles \zeromuskip -% \inherited\fracinnerspacing \allsplitstyles \thinmuskip -% \inherited\fracinnerspacing \allscriptstyles\tinymuskip -% \inherited\fracfracspacing \allsplitstyles \thinmuskip -% \inherited\fracfracspacing \allscriptstyles\tinymuskip -% \inherited\fracradspacing \allmathstyles \tinymuskip -% \inherited\radordspacing \allsplitstyles \tinymuskip -% \inherited\radopspacing \allmathstyles \thinmuskip -% \inherited\radbinspacing \allsplitstyles \medmuskip -% \inherited\radbinspacing \allscriptstyles\tinymuskip -% \inherited\radrelspacing \allsplitstyles \thickmuskip -% \inherited\radrelspacing \allscriptstyles\tinymuskip -% % \inherited\radopenspacing \allmathstyles \zeromuskip -% % \inherited\radmiddlespacing \allmathstyles \zeromuskip -% % \inherited\radclosespacing \allmathstyles \zeromuskip -% % \inherited\radpunctspacing \allmathstyles \zeromuskip -% \inherited\radinnerspacing \allsplitstyles \thinmuskip -% \inherited\radinnerspacing \allscriptstyles\tinymuskip -% \inherited\radfracspacing \allmathstyles \tinymuskip -% \inherited\radradspacing \allmathstyles \tinymuskip -% \inherited\middleordspacing \allsplitstyles \medmuskip -% \inherited\middleordspacing \allscriptstyles\tinymuskip -% \inherited\middleopspacing \allmathstyles \thinmuskip -% \inherited\middlebinspacing \allsplitstyles \medmuskip -% \inherited\middlebinspacing \allscriptstyles\tinymuskip -% \inherited\middlerelspacing \allsplitstyles \thickmuskip -% \inherited\middlerelspacing \allscriptstyles\tinymuskip -% % \inherited\middleopenspacing \allmathstyles \zeromuskip -% % \inherited\middlemiddlespacing \allmathstyles \zeromuskip -% % \inherited\middleclosespacing \allmathstyles \zeromuskip -% % \inherited\middlepunctspacing \allmathstyles \zeromuskip -% \inherited\middleinnerspacing \allsplitstyles \thinmuskip -% \inherited\middleinnerspacing \allscriptstyles\tinymuskip -% \inherited\middlefracspacing \allsplitstyles \medmuskip -% \inherited\middlefracspacing \allscriptstyles\tinymuskip -% % \inherited\middleradspacing \allmathstyles \zeromuskip -% % -% \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip -% \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allscriptstyles \tinymuskip -% \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip -% \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allscriptstyles \tinymuskip -% \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip -% \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allscriptstyles \tinymuskip -% \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip -% % -% \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip -% \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip -% \stopsetups +%D \starttyping +%D \startformula +%D f(x) = \sin x \mt{,} x +%D \stopformula +%D +%D $f(x) = \sin x \mt{,} x$ +%D \stoptyping + +% mu based: 18mu == quad, preferred + +\newmuskip\mathinterwordmuskip + +% Hans: +% +% \mathinterwordmuskip 9mu plus .45mu minus .225mu +% +% Lansburg, p. 296: "A quad---nothing less, but also nothing more---is set between all independent formulas, independent of their length, +% height or character. + +\mathinterwordmuskip 18mu + +\permanent\protected\def\mtp#1{\mathatom class \mathtextpunctuationcode {\hbox{#1}}} % only at the outer level (text, display) + +% granular, but more clutter +% +% \newskip\mathinterwordtextskip +% \newskip\mathinterwordscriptskip +% \newskip\mathinterwordscriptscriptskip +% +% \appendtoks +% \mathinterwordtextskip \fontinterwordspace\textfont \zerocount \fontinterwordstretch\textfont \zerocount \fontinterwordshrink\textfont \zerocount \relax +% \mathinterwordscriptskip \fontinterwordspace\scriptfont \zerocount \fontinterwordstretch\scriptfont \zerocount \fontinterwordshrink\scriptfont \zerocount \relax +% \mathinterwordscriptscriptskip \fontinterwordspace\scriptscriptfont\zerocount \fontinterwordstretch\scriptscriptfont\zerocount \fontinterwordshrink\scriptscriptfont\zerocount \relax +% \to \everymathematics +% +% \inherited\setmathspacing \mathtextpunctuationcode \mathordcode \allmathstyles \mathinterwordtextskip +% \inherited\setmathspacing \mathtextpunctuationcode \mathordcode \allscriptstyles \mathinterwordscriptskip +% \inherited\setmathspacing \mathtextpunctuationcode \mathordcode \allscriptscriptstyles \mathinterwordscriptscriptskip \startsetups math:spacing:presets \resetmathspacing @@ -962,71 +958,83 @@ % \inherited\setmathspacing \mathordinarycode \mathordinarycode \allmathstyles \zeromuskip \inherited\setmathspacing \mathordinarycode \mathoperatorcode \allmathstyles \thinmuskip \inherited\setmathspacing \mathordinarycode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathordinarycode \mathbinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathbinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathordinarycode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathordinarycode \mathrelationcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathrelationcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathordinarycode \mathopencode \allmathstyles \zeromuskip \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathmiddlecode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathordinarycode \mathclosecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathordinarycode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathordinarycode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathinnercode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathordinarycode \mathfractioncode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathordinarycode \mathradicalcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathellipsiscode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathordinarycode \mathfractioncode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathfractioncode \allscriptstyles \pettymuskip + % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allsplitstyles \tinymuskip % 220705 Results in an unwanted space + % \inherited\setmathspacing \mathordinarycode \mathradicalcode \allscriptstyles \pettymuskip % 220705 Results in an unwanted space % \inherited\setmathspacing \mathoperatorcode \mathordinarycode \allmathstyles \thinmuskip \inherited\setmathspacing \mathoperatorcode \mathoperatorcode \allmathstyles \thinmuskip % \inherited\setmathspacing \mathoperatorcode \mathbinarycode \allmathstyles \ zeromuskip \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathoperatorcode \mathrelationcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathoperatorcode \mathopencode \allmathstyles \zeromuskip \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathoperatorcode \mathmiddlecode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathoperatorcode \mathclosecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathoperatorcode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathoperatorcode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathoperatorcode \mathinnercode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathoperatorcode \mathellipsiscode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathoperatorcode \mathfractioncode \allmathstyles \thinmuskip \inherited\setmathspacing \mathoperatorcode \mathradicalcode \allmathstyles \thinmuskip % \inherited\setmathspacing \mathbinarycode \mathordinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathordinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathordinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathoperatorcode \allscriptstyles \pettymuskip %% \inherited\setmathspacing \mathbinarycode \mathbinarycode \allmathstyles \zeromuskip %% \inherited\setmathspacing \mathbinarycode \mathrelationcode \allmathstyles \zeromuskip \inherited\setmathspacing \mathbinarycode \mathopencode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathopencode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathopencode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathmiddlecode \allscriptstyles \pettymuskip %% \inherited\setmathspacing \mathbinarycode \mathclosecode \allmathstyles \zeromuskip - %% \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathbinarycode \mathinnercode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathinnercode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathpunctuationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathconstructcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathbinarycode \mathellipsiscode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathbinarycode \mathfractioncode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathfractioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathfractioncode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathbinarycode \mathradicalcode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathbinarycode \mathradicalcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathbinarycode \mathradicalcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathrelationcode \mathordinarycode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathordinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathordinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathoperatorcode \allscriptstyles \pettymuskip %% \inherited\setmathspacing \mathrelationcode \mathbinarycode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathrelationcode \mathrelationcode \allmathstyles \zeromuskip \inherited\setmathspacing \mathrelationcode \mathopencode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathopencode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathopencode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allsplitstyles \thickmuskip \inherited\setmathspacing \mathrelationcode \mathmiddlecode \allscriptstyles \thinmuskip % \inherited\setmathspacing \mathrelationcode \mathclosecode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathrelationcode \mathinnercode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathinnercode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathpunctuationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathconstructcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathrelationcode \mathellipsiscode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathrelationcode \mathfractioncode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathfractioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathfractioncode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathrelationcode \mathradicalcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathrelationcode \mathradicalcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathrelationcode \mathradicalcode \allscriptstyles \pettymuskip % % \inherited\setmathspacing \mathopencode \mathordinarycode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathopencode \mathoperatorcode \allmathstyles \zeromuskip @@ -1036,125 +1044,169 @@ % \inherited\setmathspacing \mathopencode \mathmiddlecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathopencode \mathclosecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathopencode \mathpunctuationcode \allmathstyles \zeromuskip - % \inherited\setmathspacing \mathopencode \mathinnercode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \tinymuskip + % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \zeromuskip + % \inherited\setmathspacing \mathopencode \mathellipsiscode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathopencode \mathfractioncode \allmathstyles \pettymuskip % \inherited\setmathspacing \mathopencode \mathradicalcode \allmathstyles \zeromuskip % - % \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathordinarycode \allmathstyles \tinymuskip \inherited\setmathspacing \mathclosecode \mathoperatorcode \allmathstyles \thinmuskip \inherited\setmathspacing \mathclosecode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathclosecode \mathbinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathbinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathclosecode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathclosecode \mathrelationcode \allscriptstyles \tinymuskip - % \inherited\setmathspacing \mathclosecode \mathopencode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathrelationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathopencode \alltextstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathopencode \alldisplaystyles\thinmuskip + \inherited\setmathspacing \mathclosecode \mathopencode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathclosecode \mathmiddlecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathclosecode \mathclosecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathclosecode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathclosecode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathinnercode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathclosecode \mathfactorialcode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathclosecode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathellipsiscode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathclosecode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathfractioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathfractioncode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathclosecode \mathradicalcode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathordinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathoperatorcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathpunctuationcode \mathbinarycode \allmathstyles \zeromuskip \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathrelationcode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathpunctuationcode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathopencode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathopencode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathmiddlecode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathclosecode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathpunctuationcode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathinnercode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathpunctuationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathpunctuationcode \mathellipsiscode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathfractioncode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathpunctuationcode \mathradicalcode \allscriptstyles \pettymuskip % - \inherited\setmathspacing \mathinnercode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathordinarycode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathinnercode \mathoperatorcode \allmathstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathinnercode \mathbinarycode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathinnercode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathinnercode \mathrelationcode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathinnercode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathopencode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathinnercode \mathmiddlecode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathmiddlecode \allscriptstyles \tinymuskip - % \inherited\setmathspacing \mathinnercode \mathclosecode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathinnercode \mathpunctuationcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathpunctuationcode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathinnercode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathinnercode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathinnercode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathfractioncode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathinnercode \mathradicalcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathinnercode \mathradicalcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathconstructcode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathordinarycode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathconstructcode \mathbinarycode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathconstructcode \mathrelationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathopencode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathmiddlecode \allscriptstyles \pettymuskip + % \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathpunctuationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathfractioncode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathconstructcode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathconstructcode \mathradicalcode \allscriptstyles \pettymuskip % - \inherited\setmathspacing \mathfractioncode \mathordinarycode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathordinarycode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathoperatorcode \allmathstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathellipsiscode \mathbinarycode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allsplitstyles \thickmuskip + \inherited\setmathspacing \mathellipsiscode \mathrelationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathopencode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathopencode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathmiddlecode \allscriptstyles \pettymuskip + % \inherited\setmathspacing \mathellipsiscode \mathclosecode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathpunctuationcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathellipsiscode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathfractioncode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathellipsiscode \mathradicalcode \allscriptstyles \pettymuskip + % + % + \inherited\setmathspacing \mathfractioncode \mathordinarycode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathordinarycode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfractioncode \mathoperatorcode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathfractioncode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfractioncode \mathbinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathbinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathfractioncode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathfractioncode \mathrelationcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathrelationcode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathfractioncode \mathopencode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathopencode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathopencode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathmiddlecode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathclosecode \allmathstyles \pettymuskip % \inherited\setmathspacing \mathfractioncode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathfractioncode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathinnercode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathfractioncode \mathellipsiscode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathfractioncode \mathfractioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfractioncode \mathfractioncode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathfractioncode \mathradicalcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathfractioncode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathfractioncode \mathradicalcode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathfractioncode \mathradicalcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathradicalcode \mathordinarycode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathordinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathradicalcode \mathoperatorcode \allmathstyles \thinmuskip \inherited\setmathspacing \mathradicalcode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathradicalcode \mathbinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathbinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathradicalcode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathradicalcode \mathrelationcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathrelationcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathradicalcode \mathopencode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathradicalcode \mathmiddlecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathradicalcode \mathclosecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathradicalcode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathradicalcode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathradicalcode \mathinnercode \allscriptstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathfractioncode \allmathstyles \tinymuskip - \inherited\setmathspacing \mathradicalcode \mathradicalcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathellipsiscode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathfractioncode \allsplitstyles \tinymuskip + \inherited\setmathspacing \mathradicalcode \mathfractioncode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathradicalcode \mathradicalcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathradicalcode \mathradicalcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathmiddlecode \mathordinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathmiddlecode \mathoperatorcode \allmathstyles \thinmuskip \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathmiddlecode \mathbinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allsplitstyles \thickmuskip - \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathmiddlecode \mathrelationcode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathmiddlecode \mathopencode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathmiddlecode \mathmiddlecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathmiddlecode \mathclosecode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathmiddlecode \mathpunctuationcode \allmathstyles \zeromuskip - \inherited\setmathspacing \mathmiddlecode \mathinnercode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathmiddlecode \mathinnercode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathmiddlecode \mathconstructcode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathmiddlecode \mathellipsiscode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allsplitstyles \medmuskip - \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathmiddlecode \mathfractioncode \allscriptstyles \pettymuskip % \inherited\setmathspacing \mathmiddlecode \mathradicalcode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathdifferentialcode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathdifferentialcode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathfactorialcode \mathordinarycode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathfactorialcode \mathfactorialcode \allmathstyles \zeromuskip % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip @@ -1162,12 +1214,31 @@ % \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allscriptstyles \pettymuskip \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip - \inherited\setmathspacing \mathclosecode \mathdimensioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathdimensioncode \allscriptstyles \pettymuskip + \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allsplitstyles \medmuskip + \inherited\setmathspacing \mathfunctioncode \mathbinarycode \allscriptstyles \pettymuskip % + \inherited\setmathspacing \mathfakecode \mathallcode \allmathstyles \tinymuskip + \inherited\setmathspacing \mathallcode \mathfakecode \allmathstyles \tinymuskip + % + \inherited\setmathspacing \mathtextpunctuationcode \mathordinarycode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathoperatorcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathbinarycode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathrelationcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathopencode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathmiddlecode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathclosecode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathconstructcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathellipsiscode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathfractioncode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathradicalcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathdifferentialcode \allmathstyles \mathinterwordmuskip + \inherited\setmathspacing \mathtextpunctuationcode \mathpunctuationcode \allmathstyles \mathinterwordmuskip \stopsetups \directsetup{math:spacing:default} @@ -1449,6 +1520,7 @@ % % \letcsname\??mathclasses \endcsname\normalmathord % \letcsname\??mathclasses inner\endcsname\normalmathinner +% \letcsname\??mathclasses ellipsis\endcsname\normalmathellipsis % \letcsname\??mathclasses open\endcsname\normalmathopen % \letcsname\??mathclasses close\endcsname\normalmathclose % \letcsname\??mathclasses ordinary\endcsname\normalmathord @@ -1699,7 +1771,8 @@ \protected\def\math_function_handle#1#2#3% {\begingroup - \getdummyparameters[\c!mathlimits=,#1]% + \letdummyparameter\c!mathlimits\empty + \getdummyparameters[#1]% \edef\p_limits{\dummyparameter\c!mathlimits}% \mathatom mathfont @@ -1731,7 +1804,7 @@ \permanent\tolerant\protected\def\mfunctionlabeltext[#1]{\math_function_handle{#1}\mathlabeltext} \permanent\tolerant\protected\def\definemathfunction[#1]#*[#2]% - {\frozen\protected\defcsname#1\endcsname{\math_function_handle{#2}\mathlabeltext{#1}}} + {\frozen\protected\defcsname#1\endcsname{\math_function_handle{#2}\mathlabeltext{#1}}} % \instance \let\math_tags_mfunctiontxt\gobbletwoarguments \let\math_tags_mfunctionlab\gobbletwoarguments @@ -1916,8 +1989,8 @@ \Umathchardef\prime "0 "0 "2032 \fi -%D We also dropped th eoption to let ampersands be alignment tabs. That has never -%D been a \CONTEXT\ option anyway. +%D We also dropped the option to let ampersands be alignment tabs. That has never +%D been a \CONTEXT\ feature|/|habit anyway. \bgroup @@ -2422,7 +2495,7 @@ \bgroup - % This can adn will be replaced by classes: + % This can and will be replaced by classes: \catcode\c_math_comma \activecatcode \catcode\c_math_period \activecatcode @@ -3457,29 +3530,6 @@ \permanent\protected\def\mathminus {\ifmmode –\orelse\iffontchar\font`−−\else –\fi} \permanent\protected\def\mathplusminus{±} -%D The \type {\displaywidth} is only known inside a display formula, so we need to catch -%D it when still zero. - -\permanent\def\checkeddisplaywidth % hsize if zero - {\dimexpr - \ifzeropt\displaywidth - \hsize - \else - \displaywidth - \fi - \relax} - -\permanent\def\maximizeddisplaywidth % larger than zero but within hsize - {\dimexpr - \ifzeropt\displaywidth - \hsize - \orelse\ifdim\displaywidth>\hsize - \hsize - \else - \displaywidth - \fi - \relax} - %D Experiment: (todo: same switch as italic, using \type {\everyswitchmathematics}). \newcount\c_math_domain_attribute @@ -3817,17 +3867,60 @@ % can become a lua call that globally defined it, then we can have % partials -%D For now we define this here: +%D We're done with the double dollars: +%D +%D \startbuffer +%D before $ i = 1 $ after\par +%D before $ i = 2 \Ustopmath{} after\par +%D before \Ustartmath i = 3 $ after\par +%D before \Ustartmath i = 4 \Ustopmath{} after\par +%D before $$ d = 1 $$ after\par +%D before $$ d = 2 \Ustopdisplaymath{} after\par +%D before \Ustartdisplaymath d = 3 $$ after\par +%D before \Ustartdisplaymath d = 4 \Ustopdisplaymath{} after\par +%D \stopbuffer +%D +%D \startpacked {\mathdisplaymode\zerocount \getbuffer} \stoppacked +%D \startpacked {\mathdisplaymode\plusone \getbuffer} \stoppacked +%D +%D So we do: + +\mathdisplaymode\plusone -\ifdefined\d \let\text_d\d \else \let\text_d\firstofoneargument \fi +%D Just to be sure: -\pushoverloadmode +\immutable\integerdef\c_math_glyph_options\numexpr + \noexpansionglyphoptioncode + +\noprotrusionglyphoptioncode +\relax + +\appendtoks + \glyphoptions\c_math_glyph_options +\to \everymathematics - \permanent\protected\def\math_d{\mathatom unpack \mathdifferentialcode{d}} +%D Bonus for testing: - \permanent\protected\def\d{\mathortext\math_d\text_d} +% styles : regular sansserif monospaced fraktur script blackboard +% alternatives : normal bold italic bolditalic +% sets : ucletters lcletters digits ucgreek lcgreek symbols -\popoverloadmode +% \def\CheckMathHat#1{\ruledhbox{\im{\widehat{\Uchar#1}_1^2__3^^4}}} +% +% \dontleavehmode \traversemath{regular}{bold}{digits}{\CheckMathHat{#1}\hskip1em} + +\aliased\let\mathtraversecommand\relax + +\permanent\protected\def\traversemath#1#2#3#4% + {\pushmacro\mathtraversecommand + \enforced\def\mathtraversecommand##1{#4}% + \clf_traversemath{#1}{#2}{#3}\mathtraversecommand + \popmacro\mathtraversecommand} + +\permanent\protected\def\traverseblock#1#2% + {\pushmacro\mathtraversecommand + \enforced\def\mathtraversecommand##1{#2}% + \clf_traverseblock{#1}\mathtraversecommand + \popmacro\mathtraversecommand} \protect \endinput diff --git a/tex/context/base/mkxl/math-int.mkxl b/tex/context/base/mkxl/math-int.mkxl index 30d9643cf..db7aec7e2 100644 --- a/tex/context/base/mkxl/math-int.mkxl +++ b/tex/context/base/mkxl/math-int.mkxl @@ -54,7 +54,6 @@ \to \everyswitchmathematics \setupmathematics -% [\c!integral=nolimits] - [\c!integral=autolimits] + [\c!integral=nolimits] \protect \endinput diff --git a/tex/context/base/mkxl/math-lop.mkxl b/tex/context/base/mkxl/math-lop.mkxl index c860b1318..044ca0634 100644 --- a/tex/context/base/mkxl/math-lop.mkxl +++ b/tex/context/base/mkxl/math-lop.mkxl @@ -51,6 +51,11 @@ \letcsname\??mathoperatormethod nolimits\expandafter\endcsname\csname\??mathoperatormethod\v!horizontal\endcsname \letcsname\??mathoperatormethod limits\expandafter\endcsname\csname\??mathoperatormethod\v!vertical \endcsname +%D With the auto option DisplayOperatorMinHeight will kick in unless we explicitly set the size or +%D use the start|-|stop variant (which will size automatically). The default of this font parameter +%D are a bit on the small size which doesn't work well with fonts other than Latin Modern that has +%D a large one. Keep in mind that we have e.g. integrals as operators and not fixed characters. + \installlocalcurrenthandler\??mathoperators {mathoperator} \protected\def\math_operator_operator#1#2% @@ -67,6 +72,7 @@ \s!auto \fi \s!class \mathoperatorcode + \s!attr \indexofregister \c_attr_mathsize \attributeunsetvalue % todo: find a way to pick up or pass sup/sub to here \Udelimiter \zerocount \fam \mathoperatorparameter\c!left {\edef\m_operator_text{\mathoperatorparameter\c!top}% diff --git a/tex/context/base/mkxl/math-map.lmt b/tex/context/base/mkxl/math-map.lmt index 8637667de..f411505f2 100644 --- a/tex/context/base/mkxl/math-map.lmt +++ b/tex/context/base/mkxl/math-map.lmt @@ -56,6 +56,7 @@ mathematics = mathematics or { } local mathematics = mathematics local implement = interfaces.implement +local context = context -- Unfortunately some alphabets have gaps (thereby troubling all applications that -- need to deal with math). Somewhat strange considering all those weird symbols that @@ -108,7 +109,7 @@ mathematics.charactersets = allocate { }, } -mathematics.gaps = allocate { +local gaps = allocate { [0x1D455] = 0x0210E, -- ℎ h [0x1D49D] = 0x0212C, -- ℬ script B [0x1D4A0] = 0x02130, -- ℰ script E @@ -136,6 +137,8 @@ mathematics.gaps = allocate { [0x1D551] = 0x02124, -- ℤ bb Z } +mathematics.gaps = gaps + local function fillinmathgaps(tfmdata,key,value) local mathgaps = mathematics.gaps local characters = tfmdata.characters @@ -391,7 +394,7 @@ local monospaced_bi = tovector(sansserif_bi) local monospaced = { tf = monospaced_tf, it = monospaced_tf, - bf = monospaced_tf, + bf = monospaced_bf, bi = monospaced_bf, } @@ -548,6 +551,16 @@ regular.italic = tovector(regular_it) regular.bold = tovector(regular_bf) regular.bolditalic = tovector(regular_bi) +blackboard.normal = tovector(blackboard_tf) +blackboard.italic = tovector(blackboard_tf) +blackboard.bold = tovector(blackboard_tf) +blackboard.bolditalic = tovector(blackboard_tf) + +fraktur.normal = tovector(fraktur_tf) +fraktur.italic = tovector(fraktur_bf) +fraktur.bold = tovector(fraktur_tf) +fraktur.bolditalic = tovector(fraktur_bf) + alphabets.serif = tovector(regular) alphabets.type = tovector(monospaced) alphabets.teletype = tovector(monospaced) @@ -562,6 +575,8 @@ mathematics.boldmap = boldmap -- all math (a bit of redundancy here) (sorted for tracing) +-- so we can do: mathematics.alphabets.blackboard.tf.digits + for alphabet, styles in sortedhash(alphabets) do -- per 9/6/2011 we also have attr for missing for style, data in sortedhash(styles) do -- let's keep the long names (for tracing) @@ -752,6 +767,12 @@ function mathematics.remapalphabets(char,mathalphabet,mathgreek) if not mathalphabet then return end + local g = gaps[char] + if g then + report_remapping("gap character %U changed into %C",char,g) + char = g + return + end if mathgreek and mathgreek > 0 then if not isgreek[char] then -- nothing needed @@ -822,3 +843,39 @@ function mathematics.addfallbacks(main) checkedcopy(characters,regular.bi.ucgreek,regular.it.ucgreek) checkedcopy(characters,regular.bi.lcgreek,regular.it.lcgreek) end + +implement { + name = "traversemath", + arguments = { "string", "string", "string", "csname" }, + actions = function(style,alternative,set,command) + local d = alphabets[style] + if d then + d = d[alternative] + if d then + d = d[set] + if d then + local c = context[command] + for k, v in sortedhash(d) do + c(v) + end + end + end + end + end +} + +local blocks = characters.blocks + +implement { + name = "traverseblock", + arguments = { "string", "csname" }, + actions = function(name,command) + local b = blocks[string.nospaces(name)] + if b then + local c = context[command] + for k = b.first, b.last do + c(gaps[k] or k) + end + end + end +} diff --git a/tex/context/base/mkxl/math-noa.lmt b/tex/context/base/mkxl/math-noa.lmt index d74e212da..f93201459 100644 --- a/tex/context/base/mkxl/math-noa.lmt +++ b/tex/context/base/mkxl/math-noa.lmt @@ -7,6 +7,8 @@ if not modules then modules = { } end modules ['math-noa'] = { license = "see context related readme files" } +-- TODO: SET CLASSES ! + -- if specials and (specials[1] == "char" or specials[1] == "font") then -- can we avoid this -- ... better create a reverse mapping from the already present vectors @@ -73,7 +75,8 @@ local trace_fences = false registertracker("math.fences", function(v local trace_unstacking = false registertracker("math.unstack", function(v) trace_unstacking = v end) local trace_snapping = false registertracker("math.snapping", function(v) trace_snapping = v end) -local check_coverage = true registerdirective("math.checkcoverage", function(v) check_coverage = v end) +local check_coverage = true registerdirective("math.checkcoverage", function(v) check_coverage = v end) +local use_math_goodies = true registerdirective("math.nogoodies", function(v) use_math_goodies = not v end) local report_processing = logreporter("mathematics","processing") local report_remapping = logreporter("mathematics","remapping") @@ -234,13 +237,6 @@ local leftfence_code = fencecodes.left local middlefence_code = fencecodes.middle local rightfence_code = fencecodes.right --- local mathclasses = mathematics.classes --- local fenceclasses = { --- [leftfence_code] = mathclasses.open, --- [middlefence_code] = mathclasses.middle, --- [rightfence_code] = mathclasses.close, --- } - -- this initial stuff is tricky as we can have removed and new nodes with the same address -- the only way out is a free-per-page list of nodes (not bad anyway) @@ -1361,68 +1357,71 @@ do } local function initializemathalternates(tfmdata) - local goodies = tfmdata.goodies - local autolist = defaults -- table.copy(defaults) + if use_math_goodies then - local function setthem(newalternates) - local resources = tfmdata.resources -- was tfmdata.shared - local mathalternates = resources.mathalternates - local alternates, attributes, registered, presets - if mathalternates then - alternates = mathalternates.alternates - attributes = mathalternates.attributes - registered = mathalternates.registered - else - alternates, attributes, registered = { }, { }, { } - mathalternates = { - attributes = attributes, - alternates = alternates, - registered = registered, - presets = { }, - resets = { }, - hashes = setmetatableindex("table") - } - resources.mathalternates = mathalternates - end - -- - for name, data in sortedhash(newalternates) do - if alternates[name] then - -- ignore + local goodies = tfmdata.goodies + local autolist = defaults -- table.copy(defaults) + + local function setthem(newalternates) + local resources = tfmdata.resources -- was tfmdata.shared + local mathalternates = resources.mathalternates + local alternates, attributes, registered, presets + if mathalternates then + alternates = mathalternates.alternates + attributes = mathalternates.attributes + registered = mathalternates.registered else - local attr = known[name] - attributes[attr] = data - alternates[name] = attr - registered[#registered+1] = attr + alternates, attributes, registered = { }, { }, { } + mathalternates = { + attributes = attributes, + alternates = alternates, + registered = registered, + presets = { }, + resets = { }, + hashes = setmetatableindex("table") + } + resources.mathalternates = mathalternates + end + -- + for name, data in sortedhash(newalternates) do + if alternates[name] then + -- ignore + else + local attr = known[name] + attributes[attr] = data + alternates[name] = attr + registered[#registered+1] = attr + end end end - end - if goodies then - local done = { } - for i=1,#goodies do - -- first one counts - -- we can consider sharing the attributes ... todo (only once scan) - local mathgoodies = goodies[i].mathematics - local alternates = mathgoodies and mathgoodies.alternates - if alternates then - if trace_goodies then - report_goodies("loading alternates for font %a",tfmdata.properties.name) - end - for k, v in next, autolist do - if not alternates[k] then - alternates[k] = v + if goodies then + local done = { } + for i=1,#goodies do + -- first one counts + -- we can consider sharing the attributes ... todo (only once scan) + local mathgoodies = goodies[i].mathematics + local alternates = mathgoodies and mathgoodies.alternates + if alternates then + if trace_goodies then + report_goodies("loading alternates for font %a",tfmdata.properties.name) end + for k, v in next, autolist do + if not alternates[k] then + alternates[k] = v + end + end + setthem(alternates) + return end - setthem(alternates) - return end end - end - if trace_goodies then - report_goodies("loading default alternates for font %a",tfmdata.properties.name) + if trace_goodies then + report_goodies("loading default alternates for font %a",tfmdata.properties.name) + end + setthem(autolist) end - setthem(autolist) end @@ -1818,7 +1817,9 @@ do end function handlers.kernpairs(head,style,penalties) - processnoads(head,kernpairs,"kernpairs") + if use_math_goodies then + processnoads(head,kernpairs,"kernpairs") + end return true -- not needed end diff --git a/tex/context/base/mkxl/math-pln.mkxl b/tex/context/base/mkxl/math-pln.mkxl index ec64b7e4d..fa44fda2c 100644 --- a/tex/context/base/mkxl/math-pln.mkxl +++ b/tex/context/base/mkxl/math-pln.mkxl @@ -17,120 +17,34 @@ \unprotect -% we need proper unicode: +% We need proper unicode: \def\relbar{\mathrel{\smash-}} % - has the same height as + .. no clue what this refers to -% might change +%D This might change: \permanent\protected\def\hrulefill{\leaders\hrule\hfill} -%protected\def\dotfill {\cleaders\hbox{\normalstartimath\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu\normalstopimath}\hfill} - -% will move .. not used anyway - -\permanent\def\oalign#1% - {\leavevmode % plain tex uses this - \vtop - {\baselineskip\zeroskip - \lineskip.25\exheight - \ialign{\alignmark\alignmark\crcr#1\crcr}}} - -\permanent\def\ooalign % chars over each other - {\lineskiplimit-\maxdimen - \oalign} - -% needs checking - -\permanent\protected\def\choose{\atopwithdelims()} % used in korean test file, has to go -%permanent\protected\def\brack {\atopwithdelims[]} -%permanent\protected\def\brace {\atopwithdelims\{\}} - -% needs checking - -\permanent\protected\def\buildrel#1\over#2% - {\mathrel{\mathop{\kern\zeropoint#2}\limits^{#1}}} - - \permanent\protected\def\bmod - {\nonscript - \mskip-\medmuskip - \mkern5mu - \mfunction{mod}% - \penalty900 - \mkern5mu - \nonscript - \mskip-\medmuskip} - - \permanent\protected\def\pmod#1% - {\allowbreak - \mkern18mu - (\mfunction{mod}\mskip\medmuskip#1)} - -\permanent\protected\def\cases#1% - {\left\{% - \mskip\thinmuskip - \vcenter - {\normalbaselines - \mathsurround\zeropoint - \ialign{% - \normalstartimath\alignmark\alignmark\hfil\normalstopimath - \aligntab - \quad\alignmark\alignmark\hfil - \crcr - #1% - \crcr}}% - \right.} - -\permanent\protected\def\matrix#1% - {\emptyhbox - \mskip\thinmuskip - \vcenter - {\normalbaselines - \mathsurround\zeropoint - \ialign{% - \hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil - \aligntab - \aligntab - \quad\hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil - \crcr - \mathstrut - \crcr - \noalign{\kern-\baselineskip} - #1\crcr - \mathstrut - \crcr - \noalign{\kern-\baselineskip}}}% - \mskip\thinmuskip} - -\permanent\protected\def\pmatrix#1% - {\left(\matrix{#1}\right)} - -\permanent\protected\def\math_openup - {\afterassignment\math_openup_indeed\scratchdimen} - -\aliased\let\math_closeup\relax - -\def\math_openup_indeed - {\enforced\permanent\protected\edef\math_closeup - {\lineskip \the\lineskip - \baselineskip \the\baselineskip - \lineskiplimit\the\lineskiplimit - \relax}% - \advance \lineskip \scratchdimen - \advance \baselineskip \scratchdimen - \advance \lineskiplimit \scratchdimen} - -\permanent\protected\def\openup {\math_openup } % the low level ones are used elsewhere -\permanent\protected\def\closeup{\math_closeup} % the low level ones are used elsewhere - -\permanent\protected\def\displaylines#1% - {\the\mathdisplayaligntweaks - \tabskip\zeroskip - \halign - {\hbox to \displaywidth{% - \normalstartimath\tabskip\zeroskip\everycr\emptytoks\hfil\displaystyle\alignmark\alignmark\hfil\normalstopimath}\crcr - #1\crcr}} - -%D This comes from plain but I gave it a \CONTEXT\ touch: +%permanent\protected\def\dotfill {\cleaders\hbox{\normalstartimath\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu\normalstopimath}\hfill} + +%D These need an update: + +\permanent\protected\def\bmod + {\nonscript + \mskip-\medmuskip + \mkern5mu + \mfunction{mod}% + \penalty900 + \mkern5mu + \nonscript + \mskip-\medmuskip} + +\permanent\protected\def\pmod#1% + {\allowbreak + \mkern18mu + (\mfunction{mod}\mskip\medmuskip#1)} + +%D This comes from plain but I gave it a \CONTEXT\ touch. When Mikael and I are in +%D the mood we will redo them in a more modern way. \permanent\def\math_border_NC_indeed {\enforced\global\def\math_border_NC{\aligntab}} diff --git a/tex/context/base/mkxl/math-rad.mklx b/tex/context/base/mkxl/math-rad.mklx index e527f23ca..2293c2a90 100644 --- a/tex/context/base/mkxl/math-rad.mklx +++ b/tex/context/base/mkxl/math-rad.mklx @@ -161,13 +161,17 @@ \integerdef\c_radical_unicode "221A -\protected\def\math_radical_common +% We use a strut in the degree because not all fonts have the right gaps set up but +% as struts are sort of predictable we can now fix all fonts in the lfg file. + +\protected\def\math_radical_common#degree% {\Uroot \s!height\dimexpr\mathradicalparameter\c!height\relax \s!depth \dimexpr\mathradicalparameter\c!depth\relax \s!source\numexpr\namedboxanchor{\mathradicalparameter\c!source}\relax \s!style \normalmathstyle - \zerocount \c_radical_unicode} + \zerocount \c_radical_unicode + {\mathstrut#degree}} \defcsname\??mathradicalalternative\v!default\endcsname % #body% {\math_radical_common{\currentmathradicaldegree}} % {#body}} diff --git a/tex/context/base/mkxl/math-spa.lmt b/tex/context/base/mkxl/math-spa.lmt index 32de6e417..487d9e4a4 100644 --- a/tex/context/base/mkxl/math-spa.lmt +++ b/tex/context/base/mkxl/math-spa.lmt @@ -8,79 +8,139 @@ if not modules then modules = { } end modules ['math-spa'] = { -- for the moment (when testing) we use a penalty 1 -local boundary_code = nodes.nodecodes.boundary -local glue_code = nodes.nodecodes.glue +local setmetatableindex = table.setmetatableindex -local nuts = nodes.nuts -local tonut = nodes.tonut -local tonode = nodes.tonode +local boundary_code = nodes.nodecodes.boundary +local hlist_code = nodes.nodecodes.hlist +local glue_code = nodes.nodecodes.glue +local line_code = nodes.listcodes.line +local ghost_code = nodes.listcodes.ghost -local getid = nuts.getid -local getnext = nuts.getnext -local getwidth = nuts.getwidth -local getdata = nuts.getdata -local setglue = nuts.setglue -local getdimensions = nuts.dimensions -local nextglue = nuts.traversers.glue +local nuts = nodes.nuts +local tonut = nodes.tonut +local tonode = nodes.tonode -local texsetdimen = tex.setdimen +local getid = nuts.getid +local getsubtype = nuts.getsubtype +local getnext = nuts.getnext +local getwidth = nuts.getwidth +local getdata = nuts.getdata +local getdepth = nuts.getdepth +local getlist = nuts.getlist +local setglue = nuts.setglue +local getdimensions = nuts.dimensions +local getnormalizedline = node.direct.getnormalizedline +local getbox = nuts.getbox +local setoffsets = nuts.setoffsets -local v_none = interfaces.variables.none -local v_auto = interfaces.variables.auto +local nextglue = nuts.traversers.glue +local nextlist = nuts.traversers.list +local nextboundary = nuts.traversers.boundary -local method = v_none -local distance = 0 -local boundary = tex.boundaries.system("mathalign") +local texgetdimen = tex.getdimen +local texsetdimen = tex.setdimen +local texsetcount = tex.setcount -function noads.handlers.align(h) - if method ~= v_none then - if method == v_auto then - --- can be a fast loop - local s = h - while s do - local id = getid(s) - local n = getnext(s) - if id == boundary_code and getdata(s) == boundary then - if n and getid(n) == glue_code then - s = n - n = getnext(s) - end - local w = getdimensions(h,n) + distance - texsetdimen("global","d_strc_math_indent",w) - break - end - s = n +local boundary = tex.boundaries.system("mathalign") +local stages = { } +local initial = { } + +stages[1] = function(specification,stage) + local box = getbox(specification.box) + local head = getlist(box) + local align = specification.alignstate + local distance = specification.distance + for s in nextboundary, head do + if getdata(s) == boundary then + -- todo: skip over ghost, maybe penalty, maybe glues all in one loop + local n = getnext(s) + while n and getid(n) == hlist_code and getsubtype(n) == ghost_code do + n = getnext(n) end - else - texsetdimen("global","d_strc_math_indent",distance) + -- while n and getid(n) == glue_code do + if n and getid(n) == glue_code then + n = getnext(n) + end + distance = distance + getdimensions(head,n) + break end - for n in nextglue, h do - setglue(n,getwidth(n),0,0) + end + texsetdimen("global","d_strc_math_indent",distance) + if align == 2 then + for n in nextglue, head do + setglue(n,getwidth(n),0,0,0,0) end - else - -- texsetdimen("global","d_strc_math_indent",0) end end +stages[2] = function(specification,stage) + local head = getlist(getbox(specification.box)) + local align = specification.alignstate + local max = false + local cnt = 0 + local width = 0 + local depth = 0 + for n, id, subtype, list in nextlist, head do + if subtype == line_code then + local t = getnormalizedline(n) + local m = t.rightskip + t.parfillrightskip + if not max then + max = m + elseif m < max then + max = m + end + cnt = cnt + 1 + width = m + depth = getdepth(n) + end + end + if stage == 2 and (align == 2 or align == 3) then + for n, id, subtype, list in nextlist, head do + if subtype == line_code then + if align == 1 then -- flushleft + elseif align == 2 then -- middle + setoffsets(n,max/2,0) + elseif align == 3 then -- flushright + setoffsets(n,max,0) + end + end + end + end + texsetcount("global","c_strc_math_n_of_lines",cnt) + texsetdimen("global","d_strc_math_max_width",max) + texsetdimen("global","d_strc_math_last_width",width) + texsetdimen("global","d_strc_math_last_depth",depth) +end + +stages[3] = stages[2] + +stages[4] = function(specification,stage) + nuts.openup(specification,getlist(getbox(specification.box))) +end + interfaces.implement { - name = "setmathhang", + name = "handlemathhang", arguments = { { - { "method", "string" }, + { "stage", "integer" }, + -- { "method" }, + { "alignstate", "integer" }, + { "box", "integer" }, { "distance", "dimension" }, + { "inbetween", "dimension" }, + { "height", "dimension" }, + { "depth", "dimension" }, } }, - actions = function(t) - method = t.method or v_none - distance = t.distance or 0 - end -} - -interfaces.implement { - name = "resetmathhang", - actions = function(t) - method = v_none - distance = 0 + actions = function(specification) + local stage = specification.stage + if stage == 1 then + initial = specification + else + setmetatableindex(specification,initial) + end + if stage > 0 and stage <= #stages then + stages[stage](specification,stage) + end end } - diff --git a/tex/context/base/mkxl/math-stc.mklx b/tex/context/base/mkxl/math-stc.mklx index 86c6b6499..bed61bb62 100644 --- a/tex/context/base/mkxl/math-stc.mklx +++ b/tex/context/base/mkxl/math-stc.mklx @@ -185,7 +185,8 @@ \c!distance=\mathstackersparameter\c!voffset, % distance between symbol and base (can be different from voffset) \c!minheight=\mathexheight, \c!mindepth=\zeropoint, - \c!minwidth=.5\mathemwidth, + % \c!minwidth=.5\mathemwidth, + \c!minwidth=.25\mathemwidth, % \iota \c!order=\v!normal, \c!strut=, \c!color=, % todo: when I need it @@ -532,7 +533,8 @@ \edef\p_limits{\mathstackersparameter\c!mathlimits}% \ifx\p_limits\v!yes \def\math_stackers_stop_group{\egroup\endgroup\ordlimits}% - \mathop\bgroup + % \mathop\bgroup + \mathaccent\bgroup \else \let\math_stackers_stop_group\endgroup \fi} @@ -1252,6 +1254,8 @@ \thickmuskip \zeromuskip \medmuskip \zeromuskip \thinmuskip \zeromuskip + \tinymuskip \zeromuskip + \pettymuskip \zeromuskip #1% \mkern-7\onemuskip \cleaders\mathstylehbox{\mkern-2\onemuskip#2\mkern-2\onemuskip}\hfill diff --git a/tex/context/base/mkxl/meta-imp-functions.lmt b/tex/context/base/mkxl/meta-imp-functions.lmt new file mode 100644 index 000000000..195669d08 --- /dev/null +++ b/tex/context/base/mkxl/meta-imp-functions.lmt @@ -0,0 +1,260 @@ +if not modules then modules = { } end modules ['meta-imp-functions'] = { + version = 1.001, + comment = "companion to meta-imp-functions.mkxl", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files", +} + +local formatters = string.formatters +local sequenced = table.sequenced + +local noffunctions = 0 +local version = 1 + +local function preparecache(p) + noffunctions = noffunctions + 1 +local action = p.action +p.action = nil + local hash = md5.HEX(sequenced(p)) + local name = formatters["mkiv-%s-m-f-%03i.lua"](tex.jobname,noffunctions) +p.action = action + return name, hash +end + +local function getcache(p) + local cache = p.cache + if cache then + local name, hash = preparecache(p) + local data = table.load(name) + if data and data.hash == hash and data.version == version and data.data then + return hash, name, data.data + else + return hash, name, false + end + else + return false, false, false + end +end + +local function setcache(hash,name,data) + local result = { + version = version, + hash = hash, + data = data, + } + table.save(name,result) +end + +local injectpath = mp.inject.path +local getparameterset = metapost.getparameterset + +local report = logs.reporter("metapost","functions") + +local functions = { } +local actions = { } + +function mp.registerfunction(specification) + local name = specification.name + functions[name] = specification +end + +function mp.registeraction(specification) + local name = specification.name + actions[name] = specification +end + +metapost.registerscript("processfunction", function() + local specification = getparameterset("function") + local name = specification.name + local lua = specification.lua + local fnction = functions[name] + local action = lua and actions[lua] + if fnction then + if action then + specification.action = action.action + end + -- statistics.starttiming(functions) + fnction.action(specification) + -- statistics.stoptiming(functions) + end +end) + +-- statistics.register("mp function time", function() +-- return statistics.elapsedseconds(functions,"including feedback to metapost") +-- end) + +-- Here comes the fancy stuff: + +local math = math +local sqrt = math.sqrt + +local mathfunctions = math.functions or { } +math.functions = mathfunctions + +-- Todo : reference where we got the factors from because those from +-- +-- This is Runge-Kutta-Merson 4("5") +-- See Table 4.1. Merson 4("5") of Hairer, Nørsett, Wanner - Solving Ordinary Differential Equations I (Springer, 2008) +-- +-- function mathfunctions.rungekutta(specification) +-- local f = specification.action or function(t,x,y) return x, y end +-- local x = specification.x or 0 +-- local y = specification.y or 0 +-- local t = 0 +-- local tmax = specification.tmax or 1 +-- local dt = specification.dt or tmax/10 +-- local eps = specification.eps or dt/10 +-- local r = 1 +-- -- local result = { { x, y, x, y, x, y } } +-- local result = { { x, y } } +-- while t < tmax do +-- local k1x, k1y = f(t, x, +-- y) +-- k1x = dt * k1x +-- k1y = dt * k1y +-- local k2x, k2y = f(t + (1/3) * dt, x + (1/3) * k1x, +-- y + (1/3) * k1y) +-- k2x = dt * k2x +-- k2y = dt * k2y +-- local k3x, k3y = f(t + (1/3) * dt, x + (1/6) * k1x + (1/6) * k2x, +-- y + (1/6) * k1y + (1/6) * k2y) +-- k3x = dt * k3x +-- k3y = dt * k3y +-- local k4x, k4y = f(t + (1/2) * dt, x + (1/8) * k1x + (3/8) * k3x, +-- y + (1/8) * k1y + (3/8) * k3y) +-- k4x = dt * k4x +-- k4y = dt * k4y +-- local k5x, k5y = f(t + dt, x + (1/2) * k1x - (3/2) * k3x - (2) * k4x, +-- y + (1/2) * k1y - (3/2) * k3y - (2) * k4y) +-- k5x = dt * k5x +-- k5y = dt * k5y +-- -- +-- local teps = sqrt(((1/10-1/6) * k1x + (3/10) * k3x + (2/5-2/3) * k4x + (1/5 -1/6) * k5x)^2 + +-- ((1/10-1/6) * k1y + (3/10) * k3y + (2/5-2/3) * k4y + (1/5 -1/6) * k5y)^2 ) +-- if teps < eps then +-- dt = 0.9 * dt * (eps/teps)^(1/4) +-- x = x + (1/10) * k1x + (3/10) * k3x + (2/5) * k4x + (1/5) * k5x +-- y = y + (1/10) * k1y + (3/10) * k3y + (2/5) * k4y + (1/5) * k5y +-- r = r + 1 +-- -- result[r] = { x, y, x, y, x, y } +-- result[r] = { x, y } +-- t = t + dt +-- else +-- dt = 0.9 * dt * (eps/teps)^(1/3) +-- end +-- end +-- return result +-- end + +local function rungekutta(specification) + local f = specification.action or function(t,x,y) return x, y end + local x = specification.x or 0 + local y = specification.y or 0 + local tmin = specification.tmin or 0 + local tmax = specification.tmax or 1 + local t = tmin + local rmax = specification.maxpath or 0 + local stepsize = specification.stepsize or "adaptive" + local dt = specification.dt or (tmax-tmin)/10 + local eps = specification.eps or dt/10 + local kind = specification.kind or specification.type -- xy x y + local adaptive = stepsize == "adaptive" + local r = 1 + local result + if kind ~= "tx" and kind ~= "ty" then + kind = "xy" + end + if kind == "xy" then + -- result = { { x, y, x, y, x, y } } + result = { { x, y } } + elseif kind == "tx" then + -- result = { { x, x, t, x, t, x } } + result = { { t, x } } + else + -- result = { { x, y, t, y, t, y } } + result = { { t, y } } + end + local hash, name, data = getcache(specification) + if data then + -- print(hash,name,"REUSING") + return data + else + -- print(hash,name,"GENERATING") + end + if rmax == 0 then + rmax = 0xFFFF + end + + while t < tmax do + local k1x, k1y = f(t, x, + y) + k1x = dt * k1x + k1y = dt * k1y + local k2x, k2y = f(t + (1/3) * dt, x + (1/3) * k1x, + y + (1/3) * k1y) + k2x = dt * k2x + k2y = dt * k2y + local k3x, k3y = f(t + (1/3) * dt, x + (1/6) * k1x + (1/6) * k2x, + y + (1/6) * k1y + (1/6) * k2y) + k3x = dt * k3x + k3y = dt * k3y + local k4x, k4y = f(t + (1/2) * dt, x + (1/8) * k1x + (3/8) * k3x, + y + (1/8) * k1y + (3/8) * k3y) + k4x = dt * k4x + k4y = dt * k4y + local k5x, k5y = f(t + dt, x + (1/2) * k1x - (3/2) * k3x - (2) * k4x, + y + (1/2) * k1y - (3/2) * k3y - (2) * k4y) + k5x = dt * k5x + k5y = dt * k5y + -- + if adaptive then + local teps = sqrt(((1/10-1/6) * k1x + (3/10) * k3x + (2/5-2/3) * k4x + (1/5 -1/6) * k5x)^2 + + ((1/10-1/6) * k1y + (3/10) * k3y + (2/5-2/3) * k4y + (1/5 -1/6) * k5y)^2 ) + local step = eps/teps + if teps < eps then + step = step^(1/4) + dt = 0.9 * dt * step + else + step = step^(1/3) + dt = 0.9 * dt * step + goto again + end + end + ::append:: + t = t + dt + x = x + (1/10) * k1x + (3/10) * k3x + (2/5) * k4x + (1/5) * k5x + y = y + (1/10) * k1y + (3/10) * k3y + (2/5) * k4y + (1/5) * k5y + r = r + 1 + if kind == "xy" then + result[r] = { x, y } + elseif kind == "tx" then + result[r] = { t, x } + else + result[r] = { t, y } + end + if r >= rmax then + -- report("pathmax is set to %i, quiting",rmax) + break + end + ::again:: + end + if name and hash then + setcache(hash,name,result) + end + return result +end + +mathfunctions.rungekutta = rungekutta + +mp.registerfunction { + name = "rungekutta", + action = function(specification) + local result = rungekutta(specification) + if result then + injectpath(result) + else + injectpath { { 0, 0 } } + end + end +} diff --git a/tex/context/base/mkxl/meta-imp-functions.mkxl b/tex/context/base/mkxl/meta-imp-functions.mkxl new file mode 100644 index 000000000..dd20ea8b8 --- /dev/null +++ b/tex/context/base/mkxl/meta-imp-functions.mkxl @@ -0,0 +1,342 @@ +%D \module +%D [ file=meta-imp-functions, +%D version=2022.05.17, +%D title=\METAPOST\ Graphics, +%D subtitle=All kind of functions, +%D author=Mikael Sundqvist & Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +% \useMPlibrary[functions] + +% todo: as with contours, cache + +\registerctxluafile{meta-imp-functions}{autosuffix} + +\startMPextensions + newscriptindex mfid_processfunction ; mfid_processfunction := scriptindex("processfunction") ; + + presetparameters "function" [ name = "unknown", smoothen = false, maxpath = 65536 ] ; + + def lmt_processfunction = applyparameters "function" "lmt_do_processfunction" enddef ; + + vardef lmt_do_processfunction = + if getparameter "function" "smoothen" : + for k within (runscript mfid_processfunction) : pathpoint .. endfor nocycle + else : + (runscript mfid_processfunction) + fi + enddef ; +\stopMPextensions + +\continueifinputfile{meta-imp-functions.mkxl} + +\starttext + +\startluacode + mp.registeraction { + name = "ms2", + action = function(t, x, y) + return -y, x + end + } +\stopluacode + +\startMPpage + path p ; p := lmt_processfunction [ + name = "rungekutta" + lua = "ms2", + x = 1, + y = 0, + tmax = 6pi, + dt = 0.001, + eps = 0.00001, + ] xysized (5cm,5cm) ; + draw p withcolor red withpen pencircle scaled 1 ; + path q ; q := for i within p : pathpoint .. endfor nocycle ; + draw q withcolor green withpen pencircle scaled 1/2 ; +\stopMPpage + +% + +\startluacode + mp.registeraction { + name = "ms3", + action = function(t, x, y) + return 1, -t*y*y + end + } +\stopluacode + +\startMPpage + path p ; p := lmt_processfunction [ + name = "rungekutta" + lua = "ms3", + x = 0, + y = 2, + tmax = 10, + dt = 0.001, + eps = 0.00001, + ] xysized (5cm,5cm) ; + draw p withcolor red withpen pencircle scaled 6 ; +\stopMPpage + +% + +\startluacode + mp.registeraction { + name = "ms4", + action = function(t, x, y) + return 1, -y + end + } +\stopluacode + +\startMPpage + path p ; p := lmt_processfunction [ + name = "rungekutta" + lua = "ms4", + x = 0, + y = 1, + tmax = 10, + dt = 0.001, + eps = 0.00001, + ] scaled 5cm ; + draw p withcolor red withpen pencircle scaled 6 ; +\stopMPpage + +% + +\startluacode + mp.registeraction { + name = "ms5", + action = function(t, x, y) + return x + y + x*x + y*y, x - y - x*x + y*y + end + } +\stopluacode + +\startMPpage + path b ; numeric s; + + s := 1cm ; + b := ((-2.5,-2.5) -- (1.5,-2.5) -- (1.5,1.5) -- (-2.5,1.5) -- cycle) scaled s ; + + for i = -3.05 step 0.1 until 2.5 : + for j = -3.05 step 0.1 until 2.5 : + draw lmt_processfunction [ + name = "rungekutta", + lua = "ms5", + x = i, + y = j, + tmax = 10, + dt = 0.1, + eps = 0.001, + smoothen = true, + maxpath = 500, % crazy large paths .. so kind of bad spec here + ] + scaled s + withpen pencircle scaled 0.1 + withcolor (uniformdeviate(1),uniformdeviate(1),uniformdeviate(1)) + ; + endfor ; + endfor ; + + % so how much slack ? + + draw b withpen pencircle scaled 2 ; + clip currentpicture to b ; + +\stopMPpage + +% https://wolfram.com/xid/0dekz2-wla + +\startluacode + mp.registeraction { + name = "mma1", + action = function(t, x, y) + return 1, y*math.cos(x+y) + end + } +\stopluacode + +\startMPpage + path p ; p := lmt_processfunction [ + name = "rungekutta" + lua = "mma1", + x = 0, + y = 1, + tmax = 30, + dt = 0.001, + eps = 0.00001, + ] xysized(10cm,5cm) ; + draw p withcolor red withpen pencircle scaled 2 ; + drawpoints p withcolor blue withpen pencircle scaled 2 ; +\stopMPpage + +% https://wolfram.com/xid/0dekz2-gpx + +\startluacode + mp.registeraction { + name = "mma2", + action = function(t, x, y) + return -y-x*x, 2*x-y*y*y + end + } +\stopluacode + +\startMPpage + path p ; p := lmt_processfunction [ + name = "rungekutta" + lua = "mma2", + x = 1, + y = 1, + tmax = 20, + dt = 0.001, + eps = 0.00001, + ] xysized(10cm,10cm) ; + draw p withcolor red withpen pencircle scaled 2 ; + drawpoints p withcolor blue withpen pencircle scaled 2 ; +\stopMPpage + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% https://wolfram.com/xid/0dekz2-xixft + +\startluacode + mp.registeraction { + name = "mma3", + action = function(t, x, y) + return y, -0.1 * y - math.sin(x) + 0.5 * math.cos(t) + end + } +\stopluacode + +\startMPpage + path p ; p := lmt_processfunction [ + name = "rungekutta" + lua = "mma3", + x = 0, + y = 0, + tmax = 100, + dt = 0.001, + eps = 0.00001, + ] xysized(10cm,10cm) ; + draw p withcolor red withpen pencircle scaled 2 ; + drawpoints p withcolor blue withpen pencircle scaled 2 ; +\stopMPpage + +% https://wolfram.com/xid/0dekz2-dmilmp +% Stiff! Not working! + +% \startluacode +% mp.registeraction { +% name = "mma4", +% action = function(t, x, y) +% return y, - x + 1000 * (1 - x * x) * y +% end +% } +% \stopluacode + +% \startMPpage % [instance=decimalfun] +% path p ; p := lmt_processfunction [ +% name = "rungekutta" +% lua = "mma4", +% x = 2, +% y = 0, +% tmax = 2000, +% dt = 0.01, +% eps = 0.0001 +% ] xynormalized(10cm,10cm) ; +% draw p +% withpen pencircle scaled 2 +% withcolor red +% ; +% % drawpoints p withcolor blue withpen pencircle scaled 2 ; +% \stopMPpage + +% https://wolfram.com/xid/0dekz2-d1orb +% Discontinuous right-hand side + +\startluacode + mp.registeraction { + name = "mma5", + action = function(t, x, y) + return 1, - math.cos(y) + math.floor(t) + end + } +\stopluacode + +\startMPpage + save n ; n := 0 ; + for i = "xy", "tx", "ty" : + path p ; p := lmt_processfunction [ + name = "rungekutta", + type = i, + lua = "mma5", + x = 0, + y = 1, + tmax = 3, + dt = 0.001, + eps = 0.0001, + ] xysized(10cm,10cm) shifted (n*11cm,0) ; + draw p withcolor red withpen pencircle scaled 2 ; + drawpoints p withcolor blue withpen pencircle scaled 2 ; + n := n + 1 ; + endfor ; +\stopMPpage + +\startluacode + mp.registeraction { + name = "mma6", + action = function(t, x, y) + return y, -x + end + } +\stopluacode + +\startMPpage + save n ; n := 0 ; + for i = "xy", "tx", "ty" : + path p ; p := lmt_processfunction [ + name = "rungekutta", + kind = i, + lua = "mma6", + x = 1, + y = 0, + tmin = 0, + tmax = 6.28, + dt = 0.001, + eps = 0.0000001, + ] xysized(10cm,10cm) shifted (n*11cm,0) ; + draw p withcolor red withpen pencircle scaled 2 ; + drawpoints p withcolor blue withpen pencircle scaled 2 ; + n := n + 1 ; + endfor ; +\stopMPpage + +\startMPpage + save n ; n := 0 ; + for i = "xy", "tx", "ty" : + path p ; p := lmt_processfunction [ + name = "rungekutta", + kind = i, + lua = "mma6", + x = 1, + y = 0, + tmin = 0, + tmax = 6, + stepsize = "fixed", + dt = 0.5, + maxpath = 3, + ] xysized(10cm,10cm) shifted (n*11cm,0) ; + draw p withcolor red withpen pencircle scaled 2 ; + drawpoints p withcolor blue withpen pencircle scaled 2 ; + n := n + 1 ; + endfor ; +\stopMPpage + +\stoptext diff --git a/tex/context/base/mkxl/mlib-cnt.lmt b/tex/context/base/mkxl/mlib-cnt.lmt index 9d8a483ba..35ea4067a 100644 --- a/tex/context/base/mkxl/mlib-cnt.lmt +++ b/tex/context/base/mkxl/mlib-cnt.lmt @@ -194,7 +194,7 @@ local n_box = 0 local nofcontours = 0 --- We don't want cosmetics like axis and labels to trigger a calculation, +-- We don't want cosmetics like axis and labels to trigger a calculation, -- especially a slow one. local hashfields = { @@ -1837,12 +1837,41 @@ local f_function_y = formatters [ [[ end ]] ] +-- local f_color = formatters [ [[ +-- local math = math +-- return function(f) +-- return %s +-- end +-- ]] ] + local f_color = formatters [ [[ - local math = math - return function(f) - return %s - end -]] ] + local math = math + local min = math.min + local max = math.max + local abs = math.abs + local minz = %s + local maxz = %s + -- + local color_value = 0 + local color_step = mp.lmt_color_functions.step + local color_shade = mp.lmt_color_functions.shade + + local function step(...) + return color_step(color_value,n,...) + end + local function shade(...) + return color_shade(color_value,n,...) + end + -- local function lin(l) + -- return l/n + -- end + %s + return function(f,z) + brightness_factor = f + function_value = z + return %s + end + ]] ] function mp.lmt_surface_do(specification) -- @@ -1898,7 +1927,7 @@ function mp.lmt_surface_do(specification) local dy = (ymax - ymin) / ny local xt = xmin -- - local minf, maxf + local minf, maxf, minz, maxz -- -- similar as contours but no data loop here -- @@ -1908,12 +1937,6 @@ function mp.lmt_surface_do(specification) return false -- fatal error end -- - local ccode = load(f_color(colorcode)) - local color = type(ccode) == "function" and ccode() - if type(color) ~= "function" then - return false -- fatal error - end - -- for i=0,nx do local yt = ymin for j=0,ny do @@ -1946,8 +1969,16 @@ function mp.lmt_surface_do(specification) maxf = fac end -- - data[i][j] = { x, y, fac } - -- + if not minz then + minz = z + maxz = z + elseif z < minz then + minz = z + elseif z > maxz then + maxz = z + end + data[i][j] = { x, y, fac, z } + -- yt = yt + dy end xt = xt + dx @@ -1957,6 +1988,11 @@ function mp.lmt_surface_do(specification) local range = maxf - minf local cl = linecolor or 1 local enforce = attributes.colors.model == "cmyk" + local ccode = load(f_color(minz,maxz,preamble,colorcode)) + local color = type(ccode) == "function" and ccode() + if type(color) ~= "function" then + return false -- fatal error + end for i=0,nx-1 do for j=0,ny-1 do -- points @@ -1990,7 +2026,7 @@ function mp.lmt_surface_do(specification) -- else -- -- fill and draw in one go to prevent artifacts -- end - local cr, cg, cb = color(cf) + local cr, cg, cb = color(cf,z1[4]) -- cf, zout if not cr then cr = 0 end if not cg then cg = 0 end if not cb then cb = 0 end diff --git a/tex/context/base/mkxl/mlib-fio.lmt b/tex/context/base/mkxl/mlib-fio.lmt index d0917392a..7bb6c0e9b 100644 --- a/tex/context/base/mkxl/mlib-fio.lmt +++ b/tex/context/base/mkxl/mlib-fio.lmt @@ -275,7 +275,8 @@ function mplib.new(specification) local instance instance = mplibnew { -- used - tolerance = specification.tolerance, + bend_tolerance = specification.bendtolerance, + move_tolerance = specification.movetolerance, math_mode = specification.mathmode, run_script = specification.runscript, run_internal = specification.runinternal, diff --git a/tex/context/base/mkxl/mlib-pdf.lmt b/tex/context/base/mkxl/mlib-pdf.lmt index f537743aa..3fe09eb93 100644 --- a/tex/context/base/mkxl/mlib-pdf.lmt +++ b/tex/context/base/mkxl/mlib-pdf.lmt @@ -165,7 +165,7 @@ local function flushnormalpath(path, t, open, tolerance) for i=1,length do nt = nt + 1 pth = path[i] - if not ith then + if not ith or pth.state == 1 then t[nt] = f_m(pth.x_coord,pth.y_coord) elseif curved(ith,pth,tolerance) then -- elseif pth.curved then @@ -178,7 +178,9 @@ local function flushnormalpath(path, t, open, tolerance) if not open then nt = nt + 1 local one = path[1] - if curved(pth,one,tolerance) then + if one.state == 1 then + t[nt] = f_m(one.x_coord,one.y_coord) + elseif curved(pth,one,tolerance) then -- if one.curved then t[nt] = f_c(pth.right_x,pth.right_y,one.left_x,one.left_y,one.x_coord,one.y_coord) else @@ -209,7 +211,7 @@ local function flushconcatpath(path, t, open, tolerance, transform) for i=1,length do nt = nt + 1 pth = path[i] - if not ith then + if not ith or pth.state == 1 then t[nt] = f_m(mpconcat(pth.x_coord,pth.y_coord)) elseif curved(ith,pth,tolerance) then -- elseif pth.curved then @@ -224,7 +226,9 @@ local function flushconcatpath(path, t, open, tolerance, transform) if not open then nt = nt + 1 local one = path[1] - if curved(pth,one,tolerance) then + if one.state == 1 then + t[nt] = f_m(one.x_coord,one.y_coord) + elseif curved(pth,one,tolerance) then -- if one.curved then local a, b = mpconcat(pth.right_x,pth.right_y) local c, d = mpconcat(one.left_x,one.left_y) @@ -476,6 +480,8 @@ function metapost.flush(specification,result) local collect = false local both = false local flush = false + local outline = force_outline + local envelope = false local postscript = object.postscript local tolerance = options and tonumber(options.tolerance) or tolerance -- if not object.istext then @@ -490,6 +496,8 @@ function metapost.flush(specification,result) elseif postscript == "eoboth" then evenodd = true both = true + elseif postscript == "envelope" then + envelope = true end -- end -- @@ -505,6 +513,9 @@ function metapost.flush(specification,result) end else local objecttype = object.type -- can have changed + if envelope then + dashed, linewidth = "", 1 -- to be sure + end if before then result = pluginactions(before,result,flushfigure) end @@ -547,7 +558,7 @@ function metapost.flush(specification,result) local open = path and path[1].left_type and path[#path].right_type -- at this moment only "end_point" local pen = object.pen if pen then - if pen.type == "elliptical" then + if pen.type == "elliptical" or outline then transformed, penwidth = pen_characteristics(original) -- boolean, value if penwidth ~= linewidth then result[#result+1] = f_w(penwidth) @@ -567,6 +578,7 @@ function metapost.flush(specification,result) if savedpath then for i=1,#savedpath do local path = savedpath[i] + local open = not path.cycle if transformed then flushconcatpath(path,result,open,tolerance,i==1) else @@ -582,7 +594,7 @@ function metapost.flush(specification,result) else flushnormalpath(path,result,open,tolerance) end - if force_stroke then + if outline or envelope then result[#result+1] = open and "S" or "h S" elseif objecttype == "fill" then result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo @@ -607,6 +619,7 @@ function metapost.flush(specification,result) if savedhtap then for i=1,#savedhtap do local path = savedhtap[i] + local open = not path.cycle if transformed then flushconcatpath(path,result,open,tolerance,i==1) else @@ -621,7 +634,7 @@ function metapost.flush(specification,result) else flushnormalpath(path,result,open,tolerance) end - if force_stroke then + if outline or envelope then result[#result+1] = open and "S" or "h S" elseif objecttype == "fill" then result[#result+1] = evenodd and "h f*" or "h f" -- f* = eo diff --git a/tex/context/base/mkxl/mlib-pps.lmt b/tex/context/base/mkxl/mlib-pps.lmt index 5d91f0799..3cb26d044 100644 --- a/tex/context/base/mkxl/mlib-pps.lmt +++ b/tex/context/base/mkxl/mlib-pps.lmt @@ -759,7 +759,7 @@ local function cm(object) local ry = fourth.x_coord - tx if sx == 0 then sx = 0.00001 end if sy == 0 then sy = 0.00001 end - return sx, rx, ry, sy, tx, ty + return sx, rx, ry, sy, tx, ty -- different order elsewhere ! end end return 1, 0, 0, 1, 0, 0 -- weird case @@ -1620,6 +1620,8 @@ local function pt_process(object,prescript,before,after) local llx, lly, urx, ury = getcorners(object.path) if abs(llx) < 0.0001 then llx = 0 end if abs(lly) < 0.0001 then lly = 0 end + if abs(urx) < 0.0001 then urx = 0 end + if abs(ury) < 0.0001 then ury = 0 end before[#before+1] = function() if pt_action == "set" then pattern_index = pattern_index + 1 diff --git a/tex/context/base/mkxl/mlib-run.lmt b/tex/context/base/mkxl/mlib-run.lmt index bf3d5434a..0e955818e 100644 --- a/tex/context/base/mkxl/mlib-run.lmt +++ b/tex/context/base/mkxl/mlib-run.lmt @@ -181,16 +181,31 @@ local seed = nil local default_tolerance = 131/65536.0 -- a little below 0.001 * 0x7FFF/0x4000 local bend_tolerance = default_tolerance +local move_tolerance = default_tolerance ----- bend_tolerance = 10/2000 +----- move_tolerance = bend_tolerance function metapost.setbendtolerance(t) bend_tolerance = t or default_tolerance end +function metapost.setmovetolerance(t) + move_tolerance = t or default_tolerance +end +function metapost.settolerance(t) + bend_tolerance = t or default_tolerance + move_tolerance = t or default_tolerance +end function metapost.getbendtolerance() return bend_tolerance end +function metapost.getmovetolerance() + return move_tolerance +end +function metapost.gettolerance(t) + return bend_tolerance, move_tolerance +end function metapost.load(name,method) starttiming(mplib) @@ -202,19 +217,19 @@ function metapost.load(name,method) seed = seed % 4096 end end --- local loghandler = method = method and methods[method] or "scaled" local mpx, terminal = new_instance { - tolerance = bend_tolerance, - mathmode = method, - runscript = metapost.runscript, - runinternal = metapost.runinternal, - scripterror = metapost.scripterror, - maketext = metapost.maketext, - handlers = { - log = metapost.newlogger(), - -- warning = function(...) end, - -- error = function(...) end, + bendtolerance = bend_tolerance, + movetolerance = move_tolerance, + mathmode = method, + runscript = metapost.runscript, + runinternal = metapost.runinternal, + scripterror = metapost.scripterror, + maketext = metapost.maketext, + handlers = { + log = metapost.newlogger(), + -- warning = function(...) end, + -- error = function(...) end, }, } report_metapost("initializing number mode %a",method) diff --git a/tex/context/base/mkxl/mult-aux.mkxl b/tex/context/base/mkxl/mult-aux.mkxl index e5850668b..4bbebf2d1 100644 --- a/tex/context/base/mkxl/mult-aux.mkxl +++ b/tex/context/base/mkxl/mult-aux.mkxl @@ -814,15 +814,18 @@ \newcount\c_mult_interfaces_n_of_namespaces +% \def\v_interfaces_prefix_template +% {\number\c_mult_interfaces_n_of_namespaces>} + \def\v_interfaces_prefix_template - {\number\c_mult_interfaces_n_of_namespaces>} + {\tohexadecimal\c_mult_interfaces_n_of_namespaces>} \permanent\protected\def\installnamespace#1% for modules and users {\ifcsname ????#1\endcsname \writestatus\m!system{duplicate user namespace '#1'}\wait \else \global\advance\c_mult_interfaces_n_of_namespaces\plusone - \immutable\edefcsname ????#1\endcsname{\v_interfaces_prefix_template}% + \immutable\xdefcsname ????#1\endcsname{\v_interfaces_prefix_template}% \fi} \permanent\protected\def\installcorenamespace#1% @@ -830,7 +833,7 @@ \writestatus\m!system{duplicate core namespace '#1'}\wait \else \global\advance\c_mult_interfaces_n_of_namespaces\plusone - \immutable\edefcsname ??#1\endcsname{\v_interfaces_prefix_template}% + \immutable\xdefcsname ??#1\endcsname{\v_interfaces_prefix_template}% \clf_registernamespace\c_mult_interfaces_n_of_namespaces{#1}% \fi} diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl index 26abaf20f..38d2c0633 100644 --- a/tex/context/base/mkxl/mult-sys.mkxl +++ b/tex/context/base/mkxl/mult-sys.mkxl @@ -44,6 +44,7 @@ % definesystemconstant {vn} \definesystemconstant {afrikaans} \definesystemconstant {af} +\definesystemconstant {albanian} \definesystemconstant {sq} \definesystemconstant {ancientgreek} \definesystemconstant {agr} \definesystemconstant {ancientlatin} \definesystemconstant {ala} \definesystemconstant {arabic} \definesystemconstant {ar} @@ -414,6 +415,7 @@ \definesystemconstant {unpack} \definesystemconstant {unknown} \definesystemconstant {Unicode} +\definesystemconstant {upright} \definesystemconstant {userdata} \definesystemconstant {userpage} \definesystemconstant {user} @@ -450,6 +452,7 @@ \definemessageconstant {languages} \definemessageconstant {layouts} \definemessageconstant {lua} +\definemessageconstant {math} \definemessageconstant {metapost} \definemessageconstant {publications} \definemessageconstant {references} diff --git a/tex/context/base/mkxl/node-ali.lmt b/tex/context/base/mkxl/node-ali.lmt index 0a7cf30ce..ca3c97536 100644 --- a/tex/context/base/mkxl/node-ali.lmt +++ b/tex/context/base/mkxl/node-ali.lmt @@ -6,50 +6,75 @@ if not modules then modules = { } end modules ['node-ali'] = { license = "see context related readme files" } -local a_alignchar = attributes.private("aligncharacter") - -local nuts = nodes.nuts -local tonut = nuts.tonut -local tonode = nuts.tonode -local getwidth = nuts.getwidth -local setwidth = nuts.setwidth -local getid = nuts.getid -local getattr = nuts.getattr -local setnext = nuts.setnext -local getnext = nuts.getnext -local getprev = nuts.getprev -local setglue = nuts.setglue -local getglue = nuts.getglue -local getlist = nuts.getlist -local setlist = nuts.setlist -local setattrlist = nuts.setattrlist -local getchar = nuts.getchar -local addmargins = nuts.addmargins -local findtail = nuts.tail -local hasglyph = nuts.hasglyph -local getwordrange = nuts.getwordrange -local dimensions = nuts.rangedimensions -local nextrecord = nuts.traversers.alignrecord -local nextunset = nuts.traversers.unset -local nextglyph = nuts.traversers.glyph -local nextglue = nuts.traversers.glue -local nextnode = nuts.traversers.node -local prevnode = nuts.treversers.node -local flushnode = nuts.flush -local hpack = nuts.hpack - -local glyph_code = nodes.nodecodes.glyph -local glue_code = nodes.nodecodes.glue -local kern_code = nodes.nodecodes.kern -local disc_code = nodes.nodecodes.disc - -local spaceskip_code = nodes.gluecodes.spaceskip -local xspaceskip_code = nodes.gluecodes.xspaceskip -local fontkern_code = nodes.kerncodes.fontkern - -local newkern = nuts.pool.kern -local insertbefore = nuts.insertbefore -local insertafter = nuts.insertafter +local setmetatableindex = table.setmetatableindex + +local a_alignchar = attributes.private("aligncharacter") + +local nuts = nodes.nuts +local tonut = nuts.tonut +local tonode = nuts.tonode +local getwidth = nuts.getwidth +local setwidth = nuts.setwidth +local getid = nuts.getid +local getattr = nuts.getattr +local setnext = nuts.setnext +local getnext = nuts.getnext +local getprev = nuts.getprev +local setglue = nuts.setglue +local getglue = nuts.getglue +local setglue = nuts.setglue +local getwhd = nuts.getwhd +local setwhd = nuts.setwhd +local getlist = nuts.getlist +local setlist = nuts.setlist +local setattrlist = nuts.setattrlist +local setprop = nuts.setprop +local getfont = nuts.getfont +local getchar = nuts.getchar +local addmargins = nuts.addmargins +local findtail = nuts.tail +local hasglyph = nuts.hasglyph +local getwordrange = nuts.getwordrange +local dimensions = nuts.rangedimensions +local flushnode = nuts.flush +local hpack = nuts.hpack +local repack = nuts.repack +local insertbefore = nuts.insertbefore +local insertafter = nuts.insertafter +local effectiveglue = nuts.effectiveglue + +local newkern = nuts.pool.kern +local newrule = nuts.pool.rule +local newglue = nuts.pool.glue + +local traversers = nuts.traversers +local nextrecord = traversers.alignrecord +local nextunset = traversers.unset +local nextglyph = traversers.glyph +local nextglue = traversers.glue +local nextboundary = traversers.boundary +local nextnode = traversers.node +local nextlist = traversers.list + +local nodecodes = nodes.nodecodes +local glyph_code = nodecodes.glyph +local glue_code = nodecodes.glue +local kern_code = nodecodes.kern +local disc_code = nodecodes.disc +local unset_code = nodecodes.unset +local alignrecord_code = nodecodes.alignrecord + +local spaceskip_code = nodes.gluecodes.spaceskip +local xspaceskip_code = nodes.gluecodes.xspaceskip +local intermathskip_code = nodes.gluecodes.intermathskip +local fontkern_code = nodes.kerncodes.fontkern +local row_code = nodes.listcodes.alignment -- should be row +local cell_code = nodes.listcodes.cell +local line_code = nodes.listcodes.line + +-- local preamble_pass = tex.alignmentcontextcodes.preamble +-- local preroll_pass = tex.alignmentcontextcodes.preroll +-- local wrapup_pass = tex.alignmentcontextcodes.wrapup -- todo statistics and tracing @@ -57,211 +82,213 @@ local method = 2 local unislots = fonts.hashes.unislots -- todo local chardata = fonts.hashes.characters -function nodes.handlers.aligncharacter(head,attr,preamble) - local attr = getattr(attr,a_alignchar) -- 1 : value doesn't matter (for now) - if attr then - local widths = { } - local data = { } - local rows = 0 - local cols = 0 - for col in nextrecord, preamble do - cols = cols + 1 - local w, s = getwidth(col,true) - widths[cols] = { col, w, s } - end - -- - for row in nextunset, head do - rows = rows + 1 - local c = 0 - local d = { } - data[rows] = d - for col in nextunset, getlist(row) do - c = c + 1 - if widths[c][2] then - local list = getlist(col) - -- if method == 1 then - -- local left = nil - -- local right = nil - -- local middle = nil - -- for g, char in nextglyph, list do - -- if not left then - -- left = g - -- end - -- if char == getattr(g,a_alignchar) then - -- middle = g - -- end - -- right = g - -- end - -- d[c] = middle and { col, left, middle, right, 0, 0, getwidth(middle) } or false - -- elseif method == 2 then - local middle = nil - -- we can either cache unislots or we can cache for this font - for g, char, font in nextglyph, list do - local unicode = getattr(g,a_alignchar) - if unicode then - if char == unicode then - middle = g - elseif unislots[font][char] == unicode then - middle = g +function nodes.handlers.aligncharacter(head,where,attr,preamble) + if where == "preroll" then + local attr = getattr(attr,a_alignchar) -- 1 : value doesn't matter (for now) + if attr then + local widths = { } + local data = { } + local rows = 0 + local cols = 0 + for col in nextrecord, preamble do + cols = cols + 1 + local w, s = getwidth(col,true) + widths[cols] = { col, w, s } + end + -- + for row in nextunset, head do + rows = rows + 1 + local c = 0 + local d = { } + data[rows] = d + for col in nextunset, getlist(row) do + c = c + 1 + if widths[c][2] then + local list = getlist(col) + -- if method == 1 then + -- local left = nil + -- local right = nil + -- local middle = nil + -- for g, char in nextglyph, list do + -- if not left then + -- left = g + -- end + -- if char == getattr(g,a_alignchar) then + -- middle = g + -- end + -- right = g + -- end + -- d[c] = middle and { col, left, middle, right, 0, 0, getwidth(middle) } or false + -- elseif method == 2 then + local middle = nil + -- we can either cache unislots or we can cache for this font + for g, char, font in nextglyph, list do + local unicode = getattr(g,a_alignchar) + if unicode then + if char == unicode then + middle = g + elseif unislots[font][char] == unicode then + middle = g + end end end - end - if middle then - local left, right = getwordrange(middle) -- not real gain but handy anyway (less code too) - -- local left = middle - -- local right = middle - -- for g, id, subtype in nextnode, middle do - -- if id == glyph_code or id == disc_code then - -- right = g - -- elseif id == kern_code and subtype == fontkern_code then - -- right = g - -- else - -- break - -- end - -- end - -- for g, id, subtype in prevnode, middle do - -- if id == glyph_code or id == disc_code then - -- left = g - -- elseif id == kern_code and subtype == fontkern_code then - -- left = g - -- else - -- break - -- end - -- end - d[c] = { col, left, middle, right, 0, 0, getwidth(middle) } - else - d[c] = false - end - -- else - -- local middle = nil - -- for g, char in nextglyph, list do - -- if char == getattr(g,a_alignchar) then - -- middle = g - -- end - -- end - -- if middle then - -- local left = list - -- local right = findtail(list) - -- if getid(left) == glue_code then - -- left = getnext(left) - -- end - -- if getid(right) == glue_code then - -- right = getprev(right) - -- end - -- d[c] = { col, left, middle, right, 0, 0, getwidth(middle) } - -- else - -- d[c] = false - -- end - -- end - else - d[c] = false + if middle then + local left, right = getwordrange(middle) -- not real gain but handy anyway (less code too) + -- local left = middle + -- local right = middle + -- for g, id, subtype in nextnode, middle do + -- if id == glyph_code or id == disc_code then + -- right = g + -- elseif id == kern_code and subtype == fontkern_code then + -- right = g + -- else + -- break + -- end + -- end + -- for g, id, subtype in prevnode, middle do + -- if id == glyph_code or id == disc_code then + -- left = g + -- elseif id == kern_code and subtype == fontkern_code then + -- left = g + -- else + -- break + -- end + -- end + d[c] = { col, left, middle, right, 0, 0, getwidth(middle) } + else + d[c] = false + end + -- else + -- local middle = nil + -- for g, char in nextglyph, list do + -- if char == getattr(g,a_alignchar) then + -- middle = g + -- end + -- end + -- if middle then + -- local left = list + -- local right = findtail(list) + -- if getid(left) == glue_code then + -- left = getnext(left) + -- end + -- if getid(right) == glue_code then + -- right = getprev(right) + -- end + -- d[c] = { col, left, middle, right, 0, 0, getwidth(middle) } + -- else + -- d[c] = false + -- end + -- end + else + d[c] = false + end end end - end - -- - for col=1,cols do - local maxl = 0 - local maxr = 0 - local minm = 0 - local maxm = 0 - local colw = widths[col] - for row=1,rows do - local d = data[row][col] - if d then - local p = d[1] - local l = d[2] - local m = d[3] - local r = d[4] - if m then - local lw = l == m and 0 or dimensions(p,l,m) - local rw = m == r and 0 or dimensions(p,getnext(m),getnext(r)) - d[5] = lw - d[6] = rw - if lw > maxl then - maxl = lw - end - if rw > maxr then - maxr = rw - end - local mw = d[7] - if maxm == 0 then - minm = mw - maxm = mw - else - if mw > maxm then - maxm = mw + -- + for col=1,cols do + local maxl = 0 + local maxr = 0 + local minm = 0 + local maxm = 0 + local colw = widths[col] + for row=1,rows do + local d = data[row][col] + if d then + local p = d[1] + local l = d[2] + local m = d[3] + local r = d[4] + if m then + local lw = l == m and 0 or dimensions(p,l,m) + local rw = m == r and 0 or dimensions(p,getnext(m),getnext(r)) + d[5] = lw + d[6] = rw + if lw > maxl then + maxl = lw end - if mw < minm then + if rw > maxr then + maxr = rw + end + local mw = d[7] + if maxm == 0 then minm = mw + maxm = mw + else + if mw > maxm then + maxm = mw + end + if mw < minm then + minm = mw + end end end end end - end - -- - local fixedwidth = colw[3] ~= 0 - -- - local old = colw[2] - local new = old - for row=1,rows do - local d = data[row][col] - if d then - local p = d[1] - local l = d[2] - local m = d[3] - local r = d[4] - if l and m and r then - local lw = d[5] - local rw = d[6] - local mw = d[7] - dl = maxl - lw - dr = maxr - rw - if dl ~= 0 or dr ~= 0 or mw ~= maxm then - local lst = getlist(p) - local wid = getwidth(p) - if dl ~= 0 then - local k = newkern(dl) - lst = insertbefore(lst,l,k) - setattrlist(k,m) + -- + local fixedwidth = colw[3] ~= 0 + -- + local old = colw[2] + local new = old + for row=1,rows do + local d = data[row][col] + if d then + local p = d[1] + local l = d[2] + local m = d[3] + local r = d[4] + if l and m and r then + local lw = d[5] + local rw = d[6] + local mw = d[7] + dl = maxl - lw + dr = maxr - rw + if dl ~= 0 or dr ~= 0 or mw ~= maxm then + local lst = getlist(p) + local wid = getwidth(p) + if dl ~= 0 then + local k = newkern(dl) + lst = insertbefore(lst,l,k) + setattrlist(k,m) + setlist(p,lst) + wid = wid + dl + end + if dr ~= 0 then + local k = newkern(dr) + insertafter(lst,r,k) + setattrlist(k,m) + wid = wid + dr + end + if mw ~= maxm then + local dw = (maxm - mw) + local dx = dw / 2 + addmargins(m,-dx,-dx) + wid = wid + dw + end + setwidth(p,wid) + if wid > new then + new = wid + end setlist(p,lst) - wid = wid + dl - end - if dr ~= 0 then - local k = newkern(dr) - insertafter(lst,r,k) - setattrlist(k,m) - wid = wid + dr - end - if mw ~= maxm then - local dw = (maxm - mw) - local dx = dw / 2 - addmargins(m,-dx,-dx) - wid = wid + dw - end - setwidth(p,wid) - if wid > new then - new = wid - end - setlist(p,lst) - -- somewhat fuzzy: - if fixedwidth then - local l = hpack(h,getwidth(p),"exactly") - setglue(p,getglue(l)) - setlist(l) - flushnode(l) - else - setglue(p) + -- somewhat fuzzy: + if fixedwidth then + local l = hpack(h,getwidth(p),"exactly") + setglue(p,getglue(l)) + setlist(l) + flushnode(l) + else + setglue(p) + end + -- end - -- end end end - end - if new > old then - if fixedwidth then - -- issue overflow warning - else - setwidth(colw[1],new) + if new > old then + if fixedwidth then + -- issue overflow warning + else + setwidth(colw[1],new) + end end end end @@ -283,3 +310,326 @@ interfaces.implement { end, } +-- Let's put it here (for now): + +do + + local getdata = nuts.getdata + local removenode = nuts.remove + local getwhd = nuts.getwhd + local getheight = nuts.getheight + local getdepth = nuts.getdepth + local setheight = nuts.setheight + local setdepth = nuts.setdepth + local getglue = nuts.getglue + local setoffsets = nuts.setoffsets + local setsubtype = nuts.setsubtype + + local baselineskip_code = nodes.gluecodes.baselineskip + local lineskip_code = nodes.gluecodes.lineskip + + local alignrecord_code = nodecodes.alignrecord + local hlist_code = nodecodes.hlist + local unset_code = nodecodes.unset + + local nextnode = nuts.traversers.node + + local texgetdimen = tex.getdimen + local texgetglue = tex.getglue + local texget = tex.get + + local leftmarker = tex.boundaries.system("c_math_align_l_marker") + local rightmarker = tex.boundaries.system("c_math_align_r_marker") + + local a_location = attributes.system("mathnumberlocation") + local a_threshold = attributes.system("mathnumberthreshold") + + -- Here: + + local function openup(specification,head) + local inbetween = specification.inbetween or 0 + local height = specification.height or 0 + local depth = specification.depth or 0 + local lines = { } + for n, id, subtype, list in nextlist, head do + lines[#lines+1] = { n, subtype, getwhd(n) } + end + local t = #lines + if t > 0 then + local l = 1 + for n, subtype in nextglue, head do + -- one day we can decide what to do with intertext stuff based on the + -- subtype but not now ... on our agenda (intertext etc) + if subtype == baselineskip_code or subtype == lineskip_code then + local amount, stretch, shrink = getglue(n) + local prevdp = lines[l] [5] + local nextht = lines[l+1][4] + local delta = 0 + if prevdp < depth then + setdepth(lines[l][1],depth) + delta = delta + (depth - prevdp) + end + if nextht < height then + setheight(lines[l+1][1],height) + delta = delta + (height - nextht) + end + if subtype == lineskip_code then + setglue(n,inbetween,stretch,shrink) + setsubtype(n,baselineskip_code) + else + setglue(n,amount+inbetween-delta,stretch,shrink) + end + l = l + 1 +-- if l > t then +-- break +-- end + end + end + local firstht = lines[1][4] + local lastdp = lines[t][5] + if firstht < height then + setheight(lines[1],height) + end + if lastdp < depth then + setdepth(lines[t],depth) + end + end + end + + nuts.openup = openup + + -- When present, the number is after the right marker. We need to move the + -- number when we want it at the left. + -- + -- Todo: set a flag in mathalignment and support atttibutes on it so that + -- we can check if this is needed. + + -- [dummy] [left -2] [second -1] [number 0] + + -- In the end it makes more sense to just calculate the alignment in lua + -- but it is kind of fun to see how we can control alignments. + + local totals = { } + local widths = { } + local records = { } + local deltas = { } + local cellwidths = { } + + local a_flushleft = 1 + local a_centered = 2 + local a_flushright = 3 + + local function first_pass(head,attr,preamble) + -- + local width = 0 + local hsize = texget("hsize") + local count = 0 + local overflow = false +totals = { } -- maybe use one table +widths = { } +records = { } +deltas = { } + for n in nextrecord, preamble do + local wd = getwidth(n) + count = count + 1 + width = width + wd + totals [count] = width + widths [count] = wd + records[count] = n + deltas [count] = 0 + end + -- + local lindex = 0 + local rindex = 0 + local lwidth = 0 + local rwidth = 0 + local centered = false + for row in nextunset, head do + local count = 0 + local anchor = nil + local rochan = nil + -- local cellwidths = { } + for cell in nextunset, getlist(row) do + local list = getlist(cell) + count = count + 1 + cellwidths[count] = getwidth(cell) + for bound in nextboundary, list do + local marker = getdata(bound) + if marker == leftmarker then + lindex = count + anchor = bound + rochan = list + elseif marker == rightmarker then + local n = getnext(bound) + if n and getid(n) == hlist_code then + local wd, ht, dp = getwhd(n) + local lc = getattr(n,a_location) + if lc then + -- todo: just store align in the outer attribute so once ... + local align = lc // 0x10 + local location = lc % 0x10 + local threshold = getattr(n,a_threshold) + if location == 1 then + -- number right + local m = 1 + local s = align == a_centered and 2 or 1 +-- if align == 1 then + if align == a_flushleft then + -- flushleft + rwidth = wd +-- elseif align == 3 then + elseif align == a_flushright then + -- flushright + rwidth = wd + elseif wd > lwidth then + lwidth = wd + rwidth = wd + centered = true + end + if totals[count-2] + cellwidths[count-1] + s*wd - s*threshold > hsize then + local total = ht + dp + setdepth(row,getdepth(row) + total) + setoffsets(n,0,-total) + local pr = records[count-1] + local cw = getwidth(pr) + if cw - wd > deltas[count-1] then + deltas[count-1] = cw - wd + end + overflow = true + end + elseif location == 2 then + -- number left +-- if align == 1 then + if align == a_flushleft then + -- flushleft + lwidth = wd +-- elseif align == 3 then + elseif align == a_flushright then + -- flushright + lwidth = wd + end + end + if location == 2 and anchor then + local l, l, n = removenode(list,n) + if l ~= list then + setlist(cell,l) + -- setwidth(cell,0) + end + insertafter(rochan,anchor,n) + end + end + end + rindex = count + end + end + end + end + -- + if overflow then + if deltas[rindex-1] ~= 0 then + setwidth(records[rindex-1],deltas[rindex-1]) + end + end + for count=1,#records do + if count == lindex then + if centered and overflow then + lwidth = lwidth - tex.getdimen("d_math_eqalign_number_distance") + end + setwidth(records[count],lwidth) + elseif count == rindex then + setwidth(records[count],rwidth) + end + end + end + + local function second_pass(head,attr,preamble) + local done = setmetatableindex("table") + local glues = { } + local okay = false + for row, id, subtype in nextlist, head do + if id == hlist_code and subtype == row_code then + for cell, id, subtype in nextlist, getlist(row) do + if id == hlist_code and subtype == cell_code then + for n, s in nextglue, getlist(cell) do + if s == intermathskip_code then + local e = effectiveglue(n,cell) + local g = getglue(n) + local f = getfont(n) + local a = done[f] + local d = a[g] + glues[n] = g + if not d then + a[g] = e + elseif d > e then + a[g] = e + okay = true + end + end + end + end + end + end + end + if okay then + for k, v in next, glues do + local g = done[getfont(k)][v] + if g then + setglue(k,g) + setprop(k,"fixedmathalign",true) + end + end + for row, id, subtype in nextlist, head do + if id == hlist_code and subtype == row_code then + for cell, id, subtype, list in nextlist, getlist(row) do + if list and id == hlist_code and subtype == cell_code then + local wd = getwidth(cell) + repack(cell,wd,"exactly") + end + end + end + end + end + end + + local function third_pass(head,attr,preamble) + local inbetween, stretch, shrink = texgetglue("s_strc_math_alignment_inbetween") + openup({ inbetween = inbetween }, head) + end + + -- maybe zero pass: preamble pass + + function nodes.handlers.fixmathalign(head,where,attr,preamble) + if where == "preroll" then + local signal = getattr(attr,a_location) + if signal == 0x20 or signal == 0x40 then + first_pass(head,attr,preamble) + end + elseif where == "wrapup" then + local signal = getattr(attr,a_location) + if signal == 0x40 then + second_pass(head,attr,preamble) + end + -- maybe also signal + third_pass(head,attr,preamble) + end + end +end + +local report = logs.reporter("alignment","preamble") +local trace trackers.register("alignments.showstates",function(v) trace = v end) + +function nodes.handlers.showpreamble(head,where,attr,preamble) + if trace then + local c = 0 + for n, id in nextnode, preamble do + if id == unset_code or id == alignrecord_code then + c = c + 1 + report("stage %a, cell %i, width %p",where,c,getwidth(n)) + elseif id == glue_code then + report("stage %a, tabskip %s",where,node.direct.gluetostring(n)) + else + report("stage %a, node %a",where,nodecodes[id]) + end + end + end +end diff --git a/tex/context/base/mkxl/node-nut.lmt b/tex/context/base/mkxl/node-nut.lmt index dbc4696cc..92e8f0990 100644 --- a/tex/context/base/mkxl/node-nut.lmt +++ b/tex/context/base/mkxl/node-nut.lmt @@ -182,6 +182,8 @@ local nuts = { protrusionskippable = direct.protrusionskippable, rangedimensions = direct.rangedimensions, remove = d_remove_node, + repack = direct.repack, + freeze = direct.freeze, reverse = direct.reverse, setattr = direct.setattribute, setattribute = direct.setattribute, @@ -275,6 +277,7 @@ local nuts = { getspeciallist = direct.getspeciallist, setspeciallist = direct.setspeciallist, getusedattributes = direct.getusedattributes, + gluetostring = direct.gluetostring, } nodes.nuts = nuts diff --git a/tex/context/base/mkxl/node-pro.lmt b/tex/context/base/mkxl/node-pro.lmt index ab40dc0c1..9ad78bb20 100644 --- a/tex/context/base/mkxl/node-pro.lmt +++ b/tex/context/base/mkxl/node-pro.lmt @@ -143,8 +143,9 @@ do local actions = tasks.actions("alignments") - function processors.alignment_filter(head,attr,preamble) - actions(head,attr,preamble) + function processors.alignment_filter(head,where,attr,preamble) + -- todo: add timing + actions(head,where,attr,preamble) end callbacks.register("alignment_filter", processors.alignment_filter, "things done with alignments") diff --git a/tex/context/base/mkxl/node-tsk.lmt b/tex/context/base/mkxl/node-tsk.lmt index 01b485a55..c4871b568 100644 --- a/tex/context/base/mkxl/node-tsk.lmt +++ b/tex/context/base/mkxl/node-tsk.lmt @@ -347,7 +347,7 @@ tasks.new { templates = templates, } --- -- alignment -- -- +-- -- alignment -- -- gets temp node ! (currently as that might change) tasks.new { name = "alignments", @@ -370,7 +370,7 @@ local tonode = nodes.nuts.tonode %localize% -return function(head,attr,preamble) +return function(head,where,attr,preamble) local nuthead = tonut(head) local nutattr = tonut(attr) local nutpreamble = tonut(preamble) @@ -380,19 +380,19 @@ end ]], step = [[ - %action%(head,attr,preamble) + %action%(head,where,attr,preamble) ]], nut = [[ - %action%(nuthead,nutattr,nutpreamble) + %action%(nuthead,where,nutattr,nutpreamble) ]], nohead = [[ - %action%(head,attr,preamble) + %action%(head,where,attr,preamble) ]], nonut = [[ - %action%(nuthead,nutattr,nutpreamble) + %action%(nuthead,where,nutattr,nutpreamble) ]], } diff --git a/tex/context/base/mkxl/pack-box.mkxl b/tex/context/base/mkxl/pack-box.mkxl index 8c83f8308..43f6bfbc7 100644 --- a/tex/context/base/mkxl/pack-box.mkxl +++ b/tex/context/base/mkxl/pack-box.mkxl @@ -54,7 +54,7 @@ \mutable\let\currentanchor\empty \permanent\tolerant\protected\def\defineanchor[#1]#*[#2]#*[#3]#*[#4]% name targetlayer layersetting framedsetting - {\setvalue{\??anchor#1}{\pack_anchors_process_defined{#2}{#3}{#4}}} + {\defcsname\??anchor#1\endcsname{\pack_anchors_process_defined{#2}{#3}{#4}}} \let\pack_anchors_process_defined_indeed\gobbletwooptionals @@ -228,7 +228,7 @@ \installcorenamespace{collectorcorners} -\setvalue{\??collectorcorners\v!middle}% +\defcsname\??collectorcorners\v!middle\endcsname {\ifdim\d_pack_layers_x_size>\zeropoint \advance\d_pack_layers_x_position.5\d_pack_layers_x_size \fi @@ -236,13 +236,13 @@ \advance\d_pack_layers_y_position.5\d_pack_layers_y_size \fi} -\setvalue{\??collectorcorners\v!bottom}% +\defcsname\??collectorcorners\v!bottom\endcsname {\ifdim\d_pack_layers_y_size>\zeropoint \advance\d_pack_layers_y_position-\d_pack_layers_y_size \d_pack_layers_y_position-\d_pack_layers_y_position \fi} -\setvalue{\??collectorcorners\v!right}% +\defcsname\??collectorcorners\v!right\endcsname {\ifdim\d_pack_layers_x_size>\zeropoint \advance\d_pack_layers_x_position-\d_pack_layers_x_size \d_pack_layers_x_position-\d_pack_layers_x_position @@ -535,18 +535,18 @@ \installcorenamespace{bleedinglocation} -\setvalue{\??bleedinglocation t}{\settrue\c_pack_boxes_t\scratchhoffset\zeropoint} -\setvalue{\??bleedinglocation b}{\settrue\c_pack_boxes_b\scratchhoffset\zeropoint} -\setvalue{\??bleedinglocation l}{\settrue\c_pack_boxes_l\scratchvoffset\zeropoint} -\setvalue{\??bleedinglocation r}{\settrue\c_pack_boxes_r\scratchvoffset\zeropoint} -\setvalue{\??bleedinglocation bl}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} -\setvalue{\??bleedinglocation lb}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} -\setvalue{\??bleedinglocation br}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} -\setvalue{\??bleedinglocation rb}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} -\setvalue{\??bleedinglocation tl}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} -\setvalue{\??bleedinglocation lt}{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} -\setvalue{\??bleedinglocation tr}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} -\setvalue{\??bleedinglocation rt}{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} +\defcsname\??bleedinglocation t\endcsname{\settrue\c_pack_boxes_t\scratchhoffset\zeropoint} +\defcsname\??bleedinglocation b\endcsname{\settrue\c_pack_boxes_b\scratchhoffset\zeropoint} +\defcsname\??bleedinglocation l\endcsname{\settrue\c_pack_boxes_l\scratchvoffset\zeropoint} +\defcsname\??bleedinglocation r\endcsname{\settrue\c_pack_boxes_r\scratchvoffset\zeropoint} +\defcsname\??bleedinglocation bl\endcsname{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} +\defcsname\??bleedinglocation lb\endcsname{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_b} +\defcsname\??bleedinglocation br\endcsname{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} +\defcsname\??bleedinglocation rb\endcsname{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_b} +\defcsname\??bleedinglocation tl\endcsname{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} +\defcsname\??bleedinglocation lt\endcsname{\settrue\c_pack_boxes_l\settrue\c_pack_boxes_t} +\defcsname\??bleedinglocation tr\endcsname{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} +\defcsname\??bleedinglocation rt\endcsname{\settrue\c_pack_boxes_r\settrue\c_pack_boxes_t} \mutable\let\currentbleedposition\empty \mutable\let\currentpageposition \empty diff --git a/tex/context/base/mkxl/pack-com.mkxl b/tex/context/base/mkxl/pack-com.mkxl index ebae2fd4a..2b751e08b 100644 --- a/tex/context/base/mkxl/pack-com.mkxl +++ b/tex/context/base/mkxl/pack-com.mkxl @@ -232,12 +232,97 @@ \let\p_nx_ny\empty -\permanent\protected\def\stopcombination - {\bgroup\normalexpanded{\egroup{}\ntimes{{}{}}\c_pack_combinations_y}% brr - \dostoptagged - \egroup - \pack_combinations_pop - \egroup} +% \permanent\tolerant\protected\def\startcombination[#1]#*[#2]% can be simplified +% {\bgroup % so we can grab a group +% \pack_combinations_push +% \edef\currentcombination{#1}% +% \edef\p_nx_ny{#2}% +% % +% \ifempty\p_nx_ny +% \ifcondition\validassignment{#1}% +% \let\currentcombination\empty +% \setupcurrentcombination[#1]% +% \edef\p_nx_ny{\combinationparameter\c!nx*\combinationparameter\c!ny*}% +% \else +% \doifelseinstring{*}\currentcombination +% {\edef\p_nx_ny{\currentcombination*\plusone*}% +% \let\currentcombination\empty} +% {\doifelsenumber\currentcombination +% {\edef\p_nx_ny{\currentcombination*\plusone*}% +% \let\currentcombination\empty} +% {\edef\p_nx_ny{\combinationparameter\c!nx*\combinationparameter\c!ny*}}}% +% \fi +% \else +% \ifcondition\validassignment{#2}% +% \setupcurrentcombination[#2]% +% \edef\p_nx_ny{\combinationparameter\c!nx*\combinationparameter\c!ny*}% +% \else +% \edef\p_nx_ny{\p_nx_ny*\plusone*}% +% \fi +% \fi +% % +% % test first: +% % +% % \ifempty\p_nx_ny +% % \ifhastok={#1}% +% % \let\currentcombination\empty +% % \setupcurrentcombination[#1]% +% % \edef\p_nx_ny{\combinationparameter\c!nx*\combinationparameter\c!ny*}% +% % \orelse\ifhastok*{\currentcombination}% +% % \edef\p_nx_ny{\currentcombination*\plusone*}% +% % \let\currentcombination\empty +% % \orelse\ifchknum\currentcombination\or +% % \edef\p_nx_ny{\currentcombination*\plusone*}% +% % \let\currentcombination\empty +% % \else +% % \edef\p_nx_ny{\combinationparameter\c!nx*\combinationparameter\c!ny*}% +% % \fi +% % \orelse\ifhastok={#2}% +% % \setupcurrentcombination[#2]% +% % \edef\p_nx_ny{\combinationparameter\c!nx*\combinationparameter\c!ny*}% +% % \else +% % \edef\p_nx_ny{\p_nx_ny*\plusone*}% +% % \fi +% % +% \forgetall +% % +% \the\everycombination +% % +% \enforced\let\startcontent\pack_common_content_start +% \enforced\let\stopcontent \pack_common_content_stop +% \enforced\let\startcaption\pack_common_caption_start +% \enforced\let\stopcaption \pack_common_caption_stop +% % +% \edef\p_height {\combinationparameter\c!height}% +% \edef\p_width {\combinationparameter\c!width}% +% \edef\p_location{\combinationparameter\c!location}% +% \edef\p_distance{\combinationparameter\c!distance}% +% % +% \pack_combinations_location_reset +% \rawprocesscommacommand[\p_location]\pack_combinations_location_step +% % +% \dostarttaggedchained\t!combination\currentcombination\??combination +% \vbox \ifx\p_height\v!fit\else to \p_height \fi \bgroup +% \enforced\let\combination\empty % permits \combination{}{} handy for cld +% \normalexpanded{\pack_combinations_start_indeed[\p_nx_ny]}} +% +% \permanent\protected\def\stopcombination +% {\bgroup\normalexpanded{\egroup{}\ntimes{{}{}}\c_pack_combinations_y}% brr +% \dostoptagged +% \egroup +% \pack_combinations_pop +% \egroup} + +\installcorenamespace{combinationmethod} + +% \defcsname\??combinationmethod:\v!start\endcsname +% {} +% +% \defcsname\??combinationmethod\endcsname +% {\vbox} +% +% \defcsname\??combinationmethod:\v!stop\endcsname +% {} \permanent\tolerant\protected\def\startcombination[#1]#*[#2]% can be simplified {\bgroup % so we can grab a group @@ -267,6 +352,7 @@ \edef\p_nx_ny{\p_nx_ny*\plusone*}% \fi \fi + \begincsname\??combinationmethod\combinationparameter\c!method:\v!start\endcsname % % test first: % @@ -309,12 +395,25 @@ \rawprocesscommacommand[\p_location]\pack_combinations_location_step % \dostarttaggedchained\t!combination\currentcombination\??combination - \vbox \ifx\p_height\v!fit\else to \p_height \fi \bgroup +% \vbox \ifx\p_height\v!fit\else to \p_height \fi \bgroup + \ifcsname\??combinationmethod\combinationparameter\c!method\endcsname + \lastnamedcs\else\vbox + \fi\ifx\p_height\v!fit\else to \p_height \fi \bgroup \enforced\let\combination\empty % permits \combination{}{} handy for cld \normalexpanded{\pack_combinations_start_indeed[\p_nx_ny]}} +\permanent\protected\def\stopcombination + {\bgroup\normalexpanded{\egroup{}\ntimes{{}{}}\c_pack_combinations_y}% brr + \dostoptagged + \egroup + \begincsname\??combinationmethod\combinationparameter\c!method:\v!stop\endcsname + \pack_combinations_pop + \egroup} + \let\pack_combinations_check_x_y\relax +\aliased\let\combinationwidth\!!zeropoint + \protected\def\pack_combinations_start_indeed[#1*#2*#3]% {\global\c_pack_combinations_x#1\relax \global\c_pack_combinations_y#2\relax @@ -326,6 +425,10 @@ \global\c_pack_combinations_max\c_pack_combinations_x \multiply\c_pack_combinations_y\c_pack_combinations_x \tabskip\zeropoint + \enforced\permanent\protected\edef\combinationwidth % \immutable + {\the\dimexpr + (\hsize-\numexpr\c_pack_combinations_x-\plusone\relax\dimexpr\combinationparameter\c!distance\relax)/\c_pack_combinations_x + \relax}% \halign \ifx\p_width\v!fit\else to \p_width \fi \bgroup % repetitive preamble % \halign noskips \ifx\p_width\v!fit\else to \p_width \fi \bgroup % repetitive preamble \aligntab diff --git a/tex/context/base/mkxl/pack-mat.mkxl b/tex/context/base/mkxl/pack-mat.mkxl index 0c62638cb..66be25a9d 100644 --- a/tex/context/base/mkxl/pack-mat.mkxl +++ b/tex/context/base/mkxl/pack-mat.mkxl @@ -81,4 +81,146 @@ %D \stopTEXpage %D \stoptyping +%D From the list: + +%D \starttyping +%D \startformula[spaceinbetween=.5\lineheight] +%D \left\{ +%D \mparagraph{Quaternion algebras\par over $\blackboard{Q}$ up to isomorphism} +%D \right\} +%D \alignhere \leftrightarrow +%D \left\{ +%D \mparagraph +%D [foregroundcolor=darkred,offset=.1ex,frame=on] +%D {Finite subset of places of $\blackboard{Q}$\par of even cardinality} +%D \right\} +%D \breakhere \leftrightarrow +%D \left\{ +%D \mparagraph{more text} +%D \right\} +%D \breakhere \leftrightarrow +%D \left\{ +%D \mparagraph[foregroundcolor=darkblue]{and more text} +%D \right\} +%D \stopformula +%D \stoptyping + +\permanent\tolerant\protected\def\mparagraph[#1]#*#:#2% + {\vcenter class \mathconstructcode \bgroup % \mathwrappedcode would be like fraction + \framed[\c!offset=\v!overlay,\c!frame=\v!overlay,\c!align=\v!middle,#1]{#2}% + \egroup} + +%D Moved from pack-rul.mkxl to here: + +%D \macros +%D {mframed, minframed} +%D +%D See mkii and mkiv files for some history on this already rather old mechanism; it +%D dates from the real beginning. In the meantime we used anchoring, and now we're +%D doing it more \LMTX ish. + +% mframed xx\mframed {x^2 + \frac{2}{x} + \sqrt{\frac{2}{\sqrt{\frac{2}{x}}}}} \input tufte +% inmframed xx\inmframed{x^2 + \frac{2}{x} + \sqrt{\frac{2}{\sqrt{\frac{2}{x}}}}} \input tufte +% mcframed xx\mcframed {x^2 + \frac{2}{x} + \sqrt{\frac{2}{\sqrt{\frac{2}{x}}}}} \input tufte +% mtframed xx\mtframed {x^2 + \frac{2}{x} + \sqrt{\frac{2}{\sqrt{\frac{2}{x}}}}} \input tufte + +\newcount\c_framed_mstyle + +\installcorenamespace{mathframed} + +\installframedcommandhandler \??mathframed {mathframed} \??mathframed + +\newtoks \t_pack_framed_mathframed +\newdimen\d_pack_framed_mathframed + +\appendtoks + \frozen\protected\instance\edefcsname\currentmathframed\endcsname{\pack_framed_mathframed[\currentmathframed]}% +\to \everydefinemathframed + +\tolerant\protected\def\pack_framed_mathframed[#1]#*[#2]#:#3% needs testing ! + {\begingroup + \edef\currentmathframed{#1}% + \setupcurrentmathframed[#2]% + \c_framed_mstyle\normalmathstyle + \edef\m_framed_location{\mathframedparameter\c!location}% + \ifx\m_framed_location\v!mathematics + \inheritedmathframedframed\bgroup + \setbox\scratchbox\hbox\bgroup + \Ustartmath + \triggermathstyle\c_framed_mstyle + \the\t_pack_framed_mathframed + \mathatom \mathunspacedcode\bgroup + #3% + \egroup + \Ustopmath + \egroup + \global\d_pack_framed_mathframed\dp\scratchbox + \dontleavehmode\box\scratchbox + \egroup + \else + \inheritedmathframedframed\bgroup + \hbox\bgroup + \Ustartmath + \triggermathstyle\c_framed_mstyle + #3% + \Ustopmath + \egroup + \egroup + \fi + \endgroup} + +\appendtoks + \c_strc_math_ragged_status \plustwo + \c_strc_formulas_check_width\zerocount +\to \t_pack_framed_mathframed + +\installframedlocator \v!mathematics + {} + {\pack_framed_locator_set_lo + \ifzeropt\d_framed_locator_lo\else + \lower\dimexpr\d_framed_locator_lo+\d_pack_framed_mathframed\relax + \fi + \box\b_framed_normal} + +\definemathframed[mframed] +\definemathframed[inmframed][\c!location=\v!low] +\definemathframed[mcframed] [\c!location=\v!mathematics] % centered +\definemathframed[mtframed] [\c!location=\v!mathematics,\c!offset=\v!overlay,\c!frame=\v!overlay] % tight + +%D So instead of the rather versatile \type {\framed}, we use \type {\mframed}: +%D +%D \startbuffer +%D \startformula +%D x \times \mframed{y} \times y^{z_z} +%D x \times \inmframed{y} \times y^{z_z} +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D And: +%D +%D \startbuffer +%D \startformula +%D x \times \mframed{y} \times y^{\mframed{z}_{\mframed{z}}} +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D As usual, one can specify in what way the text should be framed. One should be +%D aware of the fact that, inorder to preserve the proper spacing, the \type +%D {offset} is set to \type {overlay} and \type {frameoffset} is used used instead. +%D +%D \startbuffer +%D \startformula +%D x \times y^{\mframed[framecolor=red]{z}_{z}} +%D \stopformula +%D \stopbuffer +%D +%D \typebuffer \getbuffer +%D +%D For inline use, we also provide the \type {\inmframed} alternative: we want $x +%D \times \inmframed{y}$ in inline math, right? + \protect diff --git a/tex/context/base/mkxl/pack-obj.lmt b/tex/context/base/mkxl/pack-obj.lmt index 894d9e8b2..5f784b32a 100644 --- a/tex/context/base/mkxl/pack-obj.lmt +++ b/tex/context/base/mkxl/pack-obj.lmt @@ -99,14 +99,23 @@ objects = { local objects = objects -function objects.register(ns,id,b,referenced,offset,mode) - local n = objects.n + 1 - objects.n = n - nodes.handlers.finalizebox(b) - if mode == 0 then +function objects.register(ns,id,b,referenced,offset,mode,delay) + -- The delay feature is just an experiment: a value of 1 delays the + -- flushing and 2 overloads the content. It might disappear again. + local found = data[ns][id] + if found and delay == 2 then + nodes.handlers.finalizebox(b) + data[ns][id] = { + codeinjections.registerboxresource(b,nil,nil,found[1]), -- hardcoded [1] + offset, + referenced or false, + mode, + } + return + elseif mode == 0 then -- tex data[ns][id] = { - codeinjections.registerboxresource(b), -- a box number + codeinjections.registerboxresource(b,nil,delay), -- a box number offset, referenced or false, mode, @@ -114,7 +123,7 @@ function objects.register(ns,id,b,referenced,offset,mode) else -- box (backend) data[ns][id] = { - codeinjections.registerboxresource(b,offset), -- a box number + codeinjections.registerboxresource(b,offset,delay), -- a box number false, referenced, mode, @@ -183,13 +192,13 @@ end implement { name = "registerreferencedobject", - arguments = { "string", "string", "integer", true, "dimension", "integer" }, + arguments = { "string", "string", "integer", true, "dimension", "integer", "integer" }, actions = objects.register, } implement { name = "registerobject", - arguments = { "string", "string", "integer", false, "dimension", "integer" }, + arguments = { "string", "string", "integer", false, "dimension", "integer", "integer" }, actions = objects.register, } diff --git a/tex/context/base/mkxl/pack-obj.mkxl b/tex/context/base/mkxl/pack-obj.mkxl index ab42d163f..3dad2644a 100644 --- a/tex/context/base/mkxl/pack-obj.mkxl +++ b/tex/context/base/mkxl/pack-obj.mkxl @@ -62,7 +62,28 @@ %D We can get subtle differences in boundingboxes but both methods work ok. +% How useful is this ... delayed but refered objects .. messy concept. +% +% \def\InitIt{% +% \c_pack_objects_delay\plusone +% \setobject{test}{1}\hbox{test me 1} +% \c_pack_objects_delay\zerocount +% } +% +% \def\GetIt{% +% \c_pack_objects_delay\plusone +% \getobject{test}{1} +% \c_pack_objects_delay\zerocount +% } +% +% \def\SetIt{% +% \c_pack_objects_delay\plustwo +% \setobject{test}{1}\hbox{\bf HERE}% we cannot have interactivity in xforms +% \c_pack_objects_delay\zerocount +% } + \newconstant\c_pack_objects_offset_mode % 0=tex 1=box +\newconstant\c_pack_objects_delay % 0=immediate 1=delay \protected\def\pack_objects_set_yes#1#2% {\ifcase\c_pack_objects_offset_mode @@ -74,7 +95,12 @@ \else \pack_objects_package_nop\nextbox \fi - \clf_registerreferencedobject{#1}{#2}\b_pack_objects\d_pack_objects_offset\c_pack_objects_offset_mode + \clf_registerreferencedobject + {#1}{#2}% + \b_pack_objects + \d_pack_objects_offset + \c_pack_objects_offset_mode + \c_pack_objects_delay \synctexresume \endgroup} @@ -88,7 +114,12 @@ \else \pack_objects_package_nop\nextbox \fi - \clf_registerobject{#1}{#2}\b_pack_objects\d_pack_objects_offset\c_pack_objects_offset_mode + \clf_registerobject + {#1}{#2}% + \b_pack_objects + \d_pack_objects_offset + \c_pack_objects_offset_mode + \c_pack_objects_delay \synctexresume \endgroup} diff --git a/tex/context/base/mkxl/pack-rul.mkxl b/tex/context/base/mkxl/pack-rul.mkxl index 2ae83cb98..803d83bf3 100644 --- a/tex/context/base/mkxl/pack-rul.mkxl +++ b/tex/context/base/mkxl/pack-rul.mkxl @@ -946,6 +946,7 @@ \edef\p_framed_background{\framedparameter\c!background}% % not here, in calling macro: setups \pack_framed_remove_depth + % beware, depth goes away when we have a frame, otherwise it's retained \ifx\p_framed_frame\v!overlay \orelse \ifx\p_framed_frame\v!none \else \ifempty\p_framed_rulethickness\else \d_framed_linewidth\p_framed_rulethickness\relax @@ -1349,6 +1350,10 @@ \installcorenamespace{framedoffsetalternative} % widths +% +% \inframed[adaptive=0500]{Just some words} +% \inframed[adaptive=0] {Just some words} +% \inframed[adaptive=-500]{Just some words} \defcsname\??framedwidthalternative\empty\endcsname {\ifconditional\c_framed_has_format @@ -1597,8 +1602,19 @@ \pack_framed_reshape_reset \fi} +% Musical timestamp for the adding the "freezespacing" feature: Porcupine Tree - +% Herd Culling (Single Edit - Official Visualiser : some old sql code scrolling by +% on some paper terminal font); scalefactors are in the range -1000..1000. + \protected\def\pack_framed_finish - {\pack_framed_locator_before\p_framed_location + {\edef\p_freeze{\framedparameter\c!freezespacing}% + \ifempty\p_freeze + % \orelse\ifx\p_freeze\v!yes + % \boxfreeze\b_framed_normal\zerocount + \else + \boxadapt\b_framed_normal\p_freeze\relax + \fi + \pack_framed_locator_before\p_framed_location \ifconditional\c_framed_has_format \ifempty\p_framed_anchoring\else \pack_framed_reverse_box @@ -1958,143 +1974,6 @@ %D When we set \type{empty} to \type{yes}, we get ourselves a frame and/or background, %D but no content, so actually we have a sort of phantom framed box. -%D \macros -%D {mframed, minframed} -%D -%D When Tobias asked how to frame mathematical elements in formulas, Taco's posted the -%D next macro: -%D -%D \starttyping -%D \def\mframed#1% -%D {\relax -%D \ifmmode -%D \vcenter{\hbox{\framed{$\ifinner\else\displaystyle\fi#1$}}}% -%D \else -%D \framed{$#1$}% -%D \fi} -%D \stoptyping -%D -%D Because \type {\ifinner} does not (always) reports what one would expect, we move the -%D test to the outer level. We also want to pass arguments, -%D -%D \starttyping -%D \def\mframed% -%D {\dosingleempty\domframed} -%D -%D \def\domframed[#1]#2% % tzt \dowithnextmathbox ? -%D {\relax -%D \ifmmode -%D \ifinner -%D \inframed[#1]{$#2$}% -%D \else -%D \vcenter{\hbox{\framed[#1]{$\displaystyle#2$}}}% -%D \fi -%D \else -%D \inframed[#1]{$#2$}% -%D \fi} -%D \stoptyping -%D -%D Still better is the next alternative, if only because it takes care of setting the super- -%D and subscripts styles - -\newcount\c_framed_mstyle - -\protected\def\pack_framed_math_strut - {\Ustartmath - \triggermathstyle\c_framed_mstyle - \vphantom{(}% - \Ustopmath} - -\installcorenamespace{mathframed} - -\installframedcommandhandler \??mathframed {mathframed} \??mathframed - -\newcount\c_pack_framed_mathframed -\newtoks \t_pack_framed_mathframed - -\appendtoks - \frozen\protected\instance\edefcsname\currentmathframed\endcsname{\pack_framed_mathframed[\currentmathframed]}% -\to \everydefinemathframed - -\let\pack_framed_mc_one\relax -\let\pack_framed_mc_two\relax - -\tolerant\protected\def\pack_framed_mathframed[#1]#*[#2]#:#3% needs testing ! - {\begingroup - \edef\currentmathframed{#1}% - \setupcurrentmathframed[#2]% - \c_framed_mstyle\normalmathstyle - \edef\m_framed_location{\mathframedparameter\c!location}% - \ifx\m_framed_location\v!mathematics - \enforced\let\normalstrut\pack_framed_math_pos % I don't like this overload! - \orelse\ifx\m_framed_location\v!low\else - \enforced\let\normalstrut\pack_framed_math_strut - \fi - \inheritedmathframedframed\bgroup - \Ustartmath - \triggermathstyle\c_framed_mstyle - \the\t_pack_framed_mathframed - #3% - \Ustopmath - \egroup - \endgroup} - -\def\pack_framed_math_pos - {\global\advance\c_pack_framed_mathframed\plusone - \xdef\pack_framed_mc_one{mcf:1:\number\c_pack_framed_mathframed}% - \xdef\pack_framed_mc_two{mcf:2:\number\c_pack_framed_mathframed}% - \xypos\pack_framed_mc_two} - -\appendtoks - \mathraggedstatus\plustwo % makes \startalign work - \eqalignmode \zerocount % makes \startalign fit -\to \t_pack_framed_mathframed - -\installframedlocator \v!mathematics - {} - {\lower\dimexpr\MPy\pack_framed_mc_two-\MPy\pack_framed_mc_one\relax - \hpack{\xypos\pack_framed_mc_one\box\b_framed_normal}} - -\definemathframed[mframed] -\definemathframed[inmframed][\c!location=\v!low] -\definemathframed[mcframed] [\c!location=\v!mathematics] - -%D So instead of the rather versatile \type {\framed}, we use \type {\mframed}: -%D -%D \startbuffer -%D \startformula -%D x \times \mframed{y} \times y^{z_z} -%D x \times \inmframed{y} \times y^{z_z} -%D \stopformula -%D \stopbuffer -%D -%D \typebuffer \getbuffer -%D -%D And: -%D -%D \startbuffer -%D \startformula -%D x \times \mframed{y} \times y^{\mframed{z}_{\mframed{z}}} -%D \stopformula -%D \stopbuffer -%D -%D \typebuffer \getbuffer -%D -%D As usual, one can specify in what way the text should be framed. One should be -%D aware of the fact that, inorder to preserve the proper spacing, the \type -%D {offset} is set to \type {overlay} and \type {frameoffset} is used used instead. -%D -%D \startbuffer -%D \startformula -%D x \times y^{\mframed[framecolor=red]{z}_{z}} -%D \stopformula -%D \stopbuffer -%D -%D \typebuffer \getbuffer -%D -%D For inline use, we also provide the \type {\inmframed} alternative: we want $x -%D \times \inmframed{y}$ in inline math, right? - %D This previous framing macros needs a lot of alternatives for putting rules around %D boxes, inserting offsets and aligning text. Each step is handled by separate macros. diff --git a/tex/context/base/mkxl/page-blk.lmt b/tex/context/base/mkxl/page-blk.lmt new file mode 100644 index 000000000..2078245e4 --- /dev/null +++ b/tex/context/base/mkxl/page-blk.lmt @@ -0,0 +1,98 @@ +if not modules then modules = { } end modules ['page-blk'] = { + version = 1.001, + comment = "companion to page-blk.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local context = context +local implement = interfaces.implement +local texgetcount = tex.getcount + +local blocks = { } +local block = false + +implement { + name = "startpageblock", + arguments = "string", + actions = function(s) + local p = texgetcount("realpageno") + block = { p, p } + blocks[s] = block + end, +} + +implement { + name = "stoppageblock", + actions = function() + local p = texgetcount("realpageno") - 1 + block[2] = p + end, +} + +implement { + name = "pageblockrealpage", + arguments = "string", + actions = function(name) + local b = blocks[name] + context(b and b[1] or 0) + end, +} + +implement { + name = "flushpageblocks", + arguments = "string", + actions = function(list) + local count = 0 + local order = utilities.parsers.settings_to_array(list) + local pages = { } + for i=1,#order do + local name = order[i] + local block = blocks[name] + if block then + for i=block[1],block[2] do + count = count + 1 + pages[count] = i + end + end + end + -- if count ~= nofpages then + -- end + -- inspect(blocks) + -- inspect(pages) + if lpdf.setpageorder then + lpdf.setpageorder(pages) -- ,count) + end + end +} + +-- maybe intercept nesting with error + +local currentpreroll = false +local prerolled = { } + +implement { + name = "startprerollpageblock", + arguments = "string", + actions = function(name) + currentrealpage = texgetcount("realpageno") + currentpreroll = name + end +} + +implement { + name = "stopprerollpageblock", + actions = function() + prerolled[currentpreroll] = texgetcount("realpageno") - currentrealpage + currentpreroll = false + end +} + +implement { + name = "prerolledpages", + arguments = "string", + actions = function(name) + context(prerolled[name] or 0) + end +} diff --git a/tex/context/base/mkxl/page-blk.mkxl b/tex/context/base/mkxl/page-blk.mkxl new file mode 100644 index 000000000..5ce6dff53 --- /dev/null +++ b/tex/context/base/mkxl/page-blk.mkxl @@ -0,0 +1,192 @@ +%D \module +%D [ file=page-blk, +%D version=2022.06.04, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Shuffling Pages, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Page Macros / Shuffling pages} + +%D This is a somewhat tricky module and although we have a somewhat abstract +%D interface we are pretty much bound to \PDF\ output here. When large amounts of +%D documents are to be generated and|/|or when saving a run makes sense the table +%D of contents can be typeset at the end and moved to the beginning. However, it +%D assumes a rather stable and predictable rendering. Don't use this without +%D checking it really works out well. +%D +%D The low level backend code has been around for quite a while but we never had +%D a real (need and therefore) interface for it. There actually is not that much +%D code involved anyway. There is no need to backport it to \MKIV. + +\registerctxluafile{page-blk}{autosuffix} + +% Musical timestamp: end May 2022 xpropaganda (in loop mode to keep the pace). + +% pitfalls: we need to keep the toc in order (or generate it 'manually' based on +% deltas but even then we get the numbers wrong) + +\unprotect + +\newcount\c_pages_prerolled + +\permanent\protected\def\startpageblock[#1]% + {\page + \clf_startpageblock{#1}} + +\permanent\protected\def\stoppageblock + {\page + \clf_stoppageblock} + +\permanent\protected\def\flushpageblocks[#1]% + {\page + \clf_flushpageblocks{#1}} + +\permanent\def\pageblockrealpage#1% + {\clf_pageblockrealpage{#1}} + +\tolerant\permanent\protected\def\startprerollpageblock[#1]% + {\page + \clf_startprerollpageblock{#1}% + \global\c_pages_prerolled\realpageno % hack + \setuppaper[\c!method=\v!none]} + +\permanent\protected\def\stopprerollpageblock + {\page + \clf_stopprerollpageblock + \setcounter[realpage][\c_pages_prerolled]% hack + \setuppaper[\c!method=\v!normal]} + +\permanent\def\prerolledpages#1% + {\clf_prerolledpages{#1}} + +\protect \endinput + +\usemodule[article-basic] + +\setupinteraction[state=start] + +% \enabletrackers[*reference*] +% \enabletrackers[*destination*] + +\useMPlibrary[dum] + +\starttext + +\def\AlphaOffset{0} +\def\BetaOffset {0} + +% the flexible ones (can come from files) + +\startbuffer[alpha] + \startchapter[title=Alpha] + \dorecurse{20}{\samplefile{tufte}\par} + \stopchapter +\stopbuffer + +\startbuffer[beta] + \startchapter[title=Beta] + \dorecurse{6}{\samplefile{tufte}\par} + \stopchapter +\stopbuffer + +% the fixed ones + +\startbuffer[gamma] + \startchapter[title=Gamma] + \externalfigure[whatever-dummy-3][width=\textwidth] + \stopchapter +\stopbuffer + +\startbuffer[rest] + \startchapter[title=Rest A] + \samplefile{tufte} + \stopchapter + \startchapter[title=Rest B] + \samplefile{tufte} + \blank + Alpha : \goto{page \AlphaPages}[realpage(\AlphaPages)]\par + Beta : \goto{page \BetaPages }[realpage(\BetaPages )] + \stopchapter +\stopbuffer + +\startbuffer[contents] + \starttitle[title=Contents] + \placelist[chapter][criterium=text] + \stoptitle +\stopbuffer + +% Preroll. + +\startprerollpageblock[alpha] + \start + \setuphead[chapter][incrementnumber=no] + \getbuffer[alpha] + \stop +\stopprerollpageblock + +% \writestatus{!!!!!}{nofalphapages: \prerolledpages{alpha}} + +\startprerollpageblock[beta] + \start + \setuphead[chapter][incrementnumber=no] + \getbuffer[beta] + \stop +\stopprerollpageblock + +% \writestatus{!!!!!}{nofbetapages: \prerolledpages{beta}} + +% Some titling. + +\startpageblock[titlepage] + \startstandardmakeup + \externalfigure[whatever-dummy-1][height=\textheight,width=\textwidth] + \stopstandardmakeup +\stoppageblock + +\startpageblock[boguspage] + \startstandardmakeup + \externalfigure[whatever-dummy-2][height=\textheight,width=\textwidth] + \stopstandardmakeup +\stoppageblock + +% The contents will end up here. + +% page 1 + +% The main document. + +\setuppagenumber[number=2] + +\startpageblock[chapters] + % we have a predictable rest: + + \edef\AlphaPages{\the\numexpr 4 \relax} + \edef\BetaPages {\the\numexpr 4 + \prerolledpages{alpha} \relax} + + \getbuffer[rest] + \getbuffer[alpha] + \getbuffer[beta] + \getbuffer[gamma] +\stoppageblock + +% This one will move: + +\setuppagenumber[number=1] + +\startpageblock[contents] + \getbuffer[contents] +\stoppageblock + +\flushpageblocks + [titlepage, + boguspage, + contents, + chapters] + +\stoptext diff --git a/tex/context/base/mkxl/page-ini.mkxl b/tex/context/base/mkxl/page-ini.mkxl index e179b6d03..92bb8167f 100644 --- a/tex/context/base/mkxl/page-ini.mkxl +++ b/tex/context/base/mkxl/page-ini.mkxl @@ -292,6 +292,7 @@ \appendtoks \restoreglobalbodyfont + \restoreglobalinterlinespace \pickupattributes \to \everybeforepagebody diff --git a/tex/context/base/mkxl/page-lay.mkxl b/tex/context/base/mkxl/page-lay.mkxl index 4c28b4656..9dbe9aef0 100644 --- a/tex/context/base/mkxl/page-lay.mkxl +++ b/tex/context/base/mkxl/page-lay.mkxl @@ -171,6 +171,20 @@ \permanent\def\layoutdistance#1#2{\ifdim\zeropoint<#1#2\else\zeropoint\fi} +\appendtoks + \global\pageextragoal\zeropoint +\to \everysetuplayout + +\appendtoks + \global\pageextragoal \zeropoint +\to \everysetupoutputroutine + +\immutable\integerdef\lasttextadaptive\zerocount + +\prependtoks + \enforced\integerdef\lasttextadaptive\plusone +\to \everybeforeoutput + % \newconditional\reverselayout \def\page_layouts_set_dimensions @@ -1354,12 +1368,13 @@ %D %showsetup{showgrid} %D %showsetup{showusage} -\fetchmodulecommand \showprint \f!page_run -\fetchmodulecommand \showframe \f!page_run -\fetchmodulecommand \showlayout \f!page_run -\fetchmodulecommand \showsetups \f!page_run -\fetchmodulecommand \showmargins \f!page_run -\fetchmodulecommand \showgrid \f!page_run +\fetchmodulecommand \showprint \f!page_run +\fetchmodulecommand \showframe \f!page_run +\fetchmodulecommand \showlayout \f!page_run +\fetchmodulecommand \showsetups \f!page_run +\fetchmodulecommand \showmargins \f!page_run +\fetchmodulecommand \showgrid \f!page_run +\fetchmodulecommand \showcentering\f!page_run \glet\page_grids_add_to_box\gobbleoneargument \glet\page_grids_add_to_one\gobbleoneargument @@ -1435,8 +1450,8 @@ \c!setups=\systemsetupsprefix\s!default, \c!clipoffset=\zeropoint, \c!lines=0, - \c!paper=, % for foxet - \c!page=, % for foxet + \c!paper=, + \c!page=, \c!adaptive=\zeropoint, % new: experiment \c!columns=\plusone, \c!columndistance=\zeropoint] diff --git a/tex/context/base/mkxl/page-pcl.mkxl b/tex/context/base/mkxl/page-pcl.mkxl index 4585f1fd5..02f98a543 100644 --- a/tex/context/base/mkxl/page-pcl.mkxl +++ b/tex/context/base/mkxl/page-pcl.mkxl @@ -235,8 +235,8 @@ \page_marks_synchronize_column\plusone\c_page_col_n_of_columns\recurselevel\scratchbox % backgrounds \anch_mark_column_box\scratchbox\recurselevel - \mixedcolumnseparatorheight\ht\scratchbox - \mixedcolumnseparatordepth \dp\scratchbox + \pagecolumnseparatorheight\ht\scratchbox + \pagecolumnseparatordepth \dp\scratchbox \inheritedpagecolumnsframedbox\recurselevel\scratchbox} \def\page_col_routine_package diff --git a/tex/context/base/mkxl/phys-dim.mkxl b/tex/context/base/mkxl/phys-dim.mkxl index c84e7fffa..44aff6411 100644 --- a/tex/context/base/mkxl/phys-dim.mkxl +++ b/tex/context/base/mkxl/phys-dim.mkxl @@ -170,16 +170,11 @@ \permanent\protected\def\digitstextbinop#1% assumes preceding {\ifmmode#1\else\fourperemspace\nobreak#1\fourperemspace\fi} -%frozen\def\digitstimessymbol{\ifmmode\cdot\else\digitstextbinop\cdot\fi} \frozen\def\digitstimessymbol{\digitstextbinop\times} \frozen\protected\def\digitszeropadding {\hphantom{0}} -%frozen\protected\def\digitsnegative {\phys_digits_normalized{0}{\phys_digits_raised{\textminus}}} -%frozen\protected\def\digitspositive {\phys_digits_normalized{0}{\phys_digits_raised{\textplus}}} \frozen\protected\def\digitsnegative {\phys_digits_normalized{0}{\mathematics{\negative}}} \frozen\protected\def\digitspositive {\phys_digits_normalized{0}{\mathematics{\positive}}} -%frozen\protected\def\digitsminus {\phys_digits_normalized{0}{\mathematics{-}}} -%frozen\protected\def\digitsplus {\phys_digits_normalized{0}{\mathematics{+}}} \frozen\protected\def\digitsminus {\phys_digits_normalized{0}{\mathminus}} \frozen\protected\def\digitsplus {\phys_digits_normalized{0}{\mathplus}} \frozen\protected\def\digitsplusminus {\phys_digits_normalized{0}{\mathplusminus}} @@ -444,15 +439,14 @@ % \the\everyunits %\removeunwantedspaces % not ok yet \useunitstyleandcolor\c!style\c!color - \edef\scratchstringone{\unitparameter\c!alternative}% \ifmmode - \ifx\scratchstringone\v!text + \ifcstok{\unitparameter\c!alternative}\v!text \expandafter\expandafter\expandafter\phys_units_direct_text_in_math \else \expandafter\expandafter\expandafter\phys_units_direct_math \fi \else - \ifx\scratchstringone\v!mathematics + \ifcstok{\unitparameter\c!alternative}\v!mathematics \expandafter\expandafter\expandafter\phys_units_direct_math_in_text \else \expandafter\expandafter\expandafter\phys_units_direct_text @@ -609,30 +603,6 @@ \permanent\protected\def\unitsN#1% {\unitsNstart#1\unitsNstop} -% \def\phys_units_start -% {\ifmmode -% \dostarttagged\t!maction\t!unit -% \bgroup % make an mrow -% \else -% \dostarttagged\t!unit\empty -% \fi -% \let\phys_units_finish\phys_units_stop -% \let\phys_units_start\relax} -% -% \def\phys_units_stop -% {\ifconditional\c_phys_units_number -% \setfalse\c_phys_units_number -% \dostoptagged -% \fi -% \ifconditional\c_phys_units_quantity -% \setfalse\c_phys_units_quantity -% \dostoptagged -% \fi -% \dostoptagged -% \ifmmode -% \egroup -% \fi} - \def\phys_units_start {\ifmmode \dostarttagged\t!maction\t!unit diff --git a/tex/context/base/mkxl/publ-ini.mkxl b/tex/context/base/mkxl/publ-ini.mkxl index f1e60ca43..a9597d854 100644 --- a/tex/context/base/mkxl/publ-ini.mkxl +++ b/tex/context/base/mkxl/publ-ini.mkxl @@ -81,7 +81,7 @@ \defineinterfacevariable {btxlist} {btxlist} \defineinterfacevariable {btxrendering} {btxrendering} -\definelabelclass[btxlabel][2] +\definelabelclass [btxlabel] [2] \clf_definelabels{btxlabel}{btx}\s!false\relax @@ -877,6 +877,7 @@ filter {\btxrenderingparameter\c!filter}% \relax \ifnum\nofbtxlistentries>\zerocount + \clf_btxpreparelistentries{\currentbtxdataset}% could be put in collect \forgetall \btxrenderingparameter\c!before \ifconditional#2\relax @@ -895,7 +896,6 @@ \dostarttagged\t!list{btx}% \startpacked[\v!blank]% % sorting and so - \clf_btxpreparelistentries{\currentbtxdataset}% could be put in collect % next we analyze the width \ifempty\currentbtxnumbering \else \edef\p_width{\listparameter\c!width}% @@ -926,9 +926,9 @@ \global\advance\btxblock\plusone \endgroup} -\permanent\protected\def\placebtxrendering {\publ_place_list_indeed\conditionalfalse\conditionalfalse} -\permanent\protected\def\completebtxrendering{\publ_place_list_indeed\conditionaltrue \conditionalfalse} -\permanent\protected\def\flushbtxrendering {\publ_place_list_indeed\conditionalfalse\conditionaltrue } +\permanent\protected\def\placebtxrendering {\publ_place_list_indeed\conditionalfalse\conditionalfalse} +\permanent\protected\def\completebtxrendering {\publ_place_list_indeed\conditionaltrue \conditionalfalse} +\permanent\protected\def\flushbtxrendering {\publ_place_list_indeed\conditionalfalse\conditionaltrue } \aliased\let\completelistofpublications\completebtxrendering % for old times sake \aliased\let\placelistofpublications \placebtxrendering % for old times sake @@ -1530,8 +1530,14 @@ \endgroup \fi} +% \permanent\protected\def\btxmissing#1% +% {\dontleavehmode{\tttf<#1>}} + +\permanent\protected\def\currentbtxmissingreference + {\clf_btxmissing{\currentbtxdataset}{\currentbtxreference}} + \permanent\protected\def\btxmissing#1% - {\dontleavehmode{\tttf<#1>}} + {\dontleavehmode{\tttf<\clf_btxmissing{\currentbtxdataset}{#1}>}} %D Compatibility: @@ -1796,6 +1802,7 @@ filename {\dummyparameter\c!file}% filetype {\dummyparameter\c!type}% criterium {\dummyparameter\c!criterium}% + options {\dummyparameter\c!option}% \relax \endgroup} diff --git a/tex/context/base/mkxl/spac-ali.mkxl b/tex/context/base/mkxl/spac-ali.mkxl index 085ed143a..a74136c21 100644 --- a/tex/context/base/mkxl/spac-ali.mkxl +++ b/tex/context/base/mkxl/spac-ali.mkxl @@ -309,6 +309,8 @@ \rightskip \plusone\rightskip \spaceskip \zeropoint \xspaceskip \zeropoint + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_one_fil % new \setfalse \raggedonelinerstate % now here @@ -322,6 +324,8 @@ \rightskip \plusone\rightskip\s!plus\zeropoint \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_zero \parindent \zeropoint @@ -335,6 +339,8 @@ \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_middle \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_zero \parindent \zeropoint @@ -348,6 +354,8 @@ \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_right \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_one_fil %\parindent \parindent @@ -360,6 +368,8 @@ \rightskip \plusone\rightskip\s!plus\zeropoint \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_zero \parindent \zeropoint @@ -372,6 +382,8 @@ \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_zero \parindent \zeropoint @@ -384,6 +396,8 @@ \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_zero %\parindent \parindent @@ -397,6 +411,8 @@ \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_half \spaceskip \v_spac_align_space_amount \xspaceskip \v_spac_align_space_amount_x + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_zero \parindent \zeropoint @@ -407,8 +423,10 @@ \c_attr_alignstate\attributeunsetvalue \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_negative\relax - \spaceskip \zeropoint\relax - \xspaceskip \zeropoint\relax + \spaceskip \zeropoint + \xspaceskip \zeropoint + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \zeropoint\s!plus\v_spac_align_fill_amount_double\relax \parindent \zeropoint @@ -419,8 +437,10 @@ \c_attr_alignstate\attributeunsetvalue \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_negative\relax - \spaceskip \zeropoint\relax - \xspaceskip \zeropoint\relax + \spaceskip \zeropoint + \xspaceskip \zeropoint + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillskip \zeropoint \parfillleftskip \zeropoint\s!plus\v_spac_align_fill_amount_extreme\relax \parindent \zeropoint @@ -432,13 +452,30 @@ \c_attr_alignstate\plusthree \leftskip \plusone\leftskip \s!plus\zeropoint\relax \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_right\relax - \spaceskip \zeropoint\relax - \xspaceskip \zeropoint\relax + \spaceskip \zeropoint + \xspaceskip \zeropoint + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint \parfillleftskip \zeropoint \parfillskip \s_zero_plus_zero %\parindent \parindent \relax} +\permanent\protected\def\spac_align_set_horizontal_slanted + {\raggedstatus \zerocount + %\c_attr_alignstate\attributeunsetvalue + \c_attr_alignstate\plustwo + \leftskip \plusone\leftskip \s!plus\spac_align_set_raggedness_middle + \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_middle + \spaceskip \zeropoint + \xspaceskip \zeropoint + \parinitleftskip \zeropoint + \parinitrightskip \zeropoint\s!plus\v_spac_align_fill_amount_extreme\relax + \parfillleftskip \zeropoint\s!plus\v_spac_align_fill_amount_extreme\relax + \parfillskip \zeropoint + \parindent \zeropoint + \relax} + \permanent\protected\def\spac_align_set_horizontal_extra {\xspaceskip\zeropoint\s!plus\v_spac_align_fill_amount_space\relax} @@ -498,6 +535,9 @@ \or % 9 paragraph \parfillskip\zeropoint + \or + % 10 slanted + \spac_align_set_horizontal_slanted \fi \relax} @@ -732,6 +772,11 @@ \defcsname\??aligncommand l2r\endcsname{\c_spac_align_state_direction \plusone } \defcsname\??aligncommand r2l\endcsname{\c_spac_align_state_direction \plustwo } + +\defcsname\??aligncommand\v!slanted \endcsname{\c_spac_align_state_horizontal\plusten + \c_spac_align_state_broad \plustwo } + + \defcsname\??aligncommand\v!table \endcsname{\c_spac_align_state_vertical \plusthree \c_spac_align_state_broad \plusone \c_spac_align_state_horizontal\plustwo } @@ -823,6 +868,7 @@ \aliased\let\flushedrightlastline\spac_align_set_horizontal_flushedright_last_line \aliased\let\ttraggedright \spac_align_set_horizontal_right_tt % a plain command \aliased\let\forgetragged \spac_align_set_horizontal_none +\aliased\let\raggedslanted \spac_align_set_horizontal_slanted \appendtoks \spac_align_set_horizontal_none diff --git a/tex/context/base/mkxl/spac-hor.mkxl b/tex/context/base/mkxl/spac-hor.mkxl index 0773b042a..897cac3e2 100644 --- a/tex/context/base/mkxl/spac-hor.mkxl +++ b/tex/context/base/mkxl/spac-hor.mkxl @@ -1034,8 +1034,8 @@ \definehspace [\v!default] [\spaceamount] \definehspace [\v!none] [\zeropoint] -%D Taken from Taco's math module (cq. \AMS\ macros), but -%D adapted to \type {\hspace}: +%D Taken from Taco's math module (cq. \AMS\ macros), but %D adapted to \type +%D {\hspace}: \permanent\protected\def\textormathspace #1#2#3{\ifmmode\mskip#1#2\else\kern #1\hspaceamount\empty{#3}\fi\relax} \permanent\protected\def\textormathspacecommand #1#2#3{\ifmmode\mskip#1#2\else#3\fi\relax} diff --git a/tex/context/base/mkxl/spac-ver.mkxl b/tex/context/base/mkxl/spac-ver.mkxl index 2aff966bc..28a1151fb 100644 --- a/tex/context/base/mkxl/spac-ver.mkxl +++ b/tex/context/base/mkxl/spac-ver.mkxl @@ -420,8 +420,8 @@ {\ifcsname\??whitespacemethod#1\endcsname \lastnamedcs \else - \s_spac_whitespace_parskip#1\fi - \relax} + \s_spac_whitespace_parskip#1% + \fi\relax} \permanent\protected\def\forgetparskip {\s_spac_whitespace_parskip\zeropoint @@ -726,7 +726,7 @@ {\maxdepth\systemmaxdepthfactor\globalbodyfontsize} \newskip \usedbaselineskip % These used to be \normal... but that isn't pretty -\newskip \usedlineskip % in the token interface, so thes few now have new +\newskip \usedlineskip % in the token interface, so these few now have new \newdimen\usedlineskiplimit % names. They are public but not really user commands. \permanent\protected\def\normalbaselines @@ -796,6 +796,8 @@ %D \starttyping %D \rm \saveinterlinespace .... {\ss \restoreinterlinespace .... \endgraf} %D \stoptyping +%D +%D This is no longer needed. \aliased\let\restoreinterlinespace\relax @@ -1554,6 +1556,18 @@ \synchronizelocallinespecs \to \everysetuplocalinterlinespace +%D More might be added here: + +\def\restoreglobalinterlinespace + {\mutable\let\normallineheight\globalbodyfontlineheight + \bodyfontlineheight \globalbodyfontlineheight + \bodyfontstrutheight\globalbodyfontstrutheight + \bodyfontstrutdepth \globalbodyfontstrutdepth} + +% \appendtoks +% \restoreglobalinterlinespace % done elsewhere +% \to \everybeforepagebody + %D We still have to synchronize these: \permanent\protected\def\synchronizeskipamounts diff --git a/tex/context/base/mkxl/strc-mat.mkxl b/tex/context/base/mkxl/strc-mat.mkxl index 98c64205b..7e03624dc 100644 --- a/tex/context/base/mkxl/strc-mat.mkxl +++ b/tex/context/base/mkxl/strc-mat.mkxl @@ -41,6 +41,7 @@ \c!expansion=\v!yes, % maybe automatically \c!spacebefore=\v!big, \c!spaceafter=\formulaparameter\c!spacebefore, + \c!spaceinbetween=\v!quarterline, \c!width=\hsize, \c!leftmargin=\zeropoint, \c!rightmargin=\zeropoint, @@ -48,7 +49,8 @@ \c!alternative=\s!default, \c!strut=\v!yes, % per 2022-04, was \v!no \c!numberstrut=\v!yes, % \v!no \v!yes \v!always - \c!distance=2\emwidth] + \c!numberthreshold=\emwidth, + \c!numberdistance=2\emwidth] \setupformulaframed [%c!location=, @@ -56,18 +58,7 @@ %c!align=, \c!offset=.5\exheight] -\ifdefined\matheqnogapstep - % we're ok, now we have that quad in the distance which is - % more consistent and not depending on the text font in math - \matheqnogapstep\zerocount -\else - % we will keep this for a while - \setupformulas[\c!distance=\emwidth] -\fi - -% \ifdefined\mathdisplayskipmode -% \mathdisplayskipmode\plustwo % only when not zero / needs adapted space handler -% \fi +\matheqnogapstep\zerocount % we no longer need this as we don't use displaymode % \mathdisplayskipmode\plusthree % @@ -156,8 +147,8 @@ {\frozen\instance\protected\defcsname\e!start#1\v!formula\endcsname{#2}% \frozen\instance\protected\defcsname\e!stop #1\v!formula\endcsname{#3}} -% sp = single line paragraph sd = single line display -% mp = multi line paragraph md = multy line display +% sp = single line paragraph sd = single line display +% mp = multi line paragraph md = multi line display \defineformulaalternative[\s!default][\startdisplaymath][\stopdisplaymath] \defineformulaalternative[\s!single] [\startdisplaymath][\stopdisplaymath] @@ -195,14 +186,14 @@ % implementation -\protected\def\strc_formulas_store_number#1#2#3#4#5% ref, todo:str, \sync % todo: title etc (like float) +\protected\def\strc_formulas_store_number#1#2#3#4#5#6% ref, todo:str, \sync % todo: title etc (like float) {\settrue\c_strc_formulas_handle_number \strc_counters_register_component {formula}% \setupcurrentformula \formulaparameter \detokenizedformulaparameter \relax \relax \relax [\c!name=\v!formula,\s!counter=\v!formula,% - \s!hascaption=\v!yes,\s!hastitle=\v!yes,\s!hasnumber=\v!yes,%\s!haslevel=#6,% + \s!hascaption=\v!yes,\s!hastitle=\v!yes,\s!hasnumber=\v!yes,\s!haslevel=#6,% \c!reference=#1,% \c!title=\namedformulaentry, \c!list=\currentplaceformulalist, @@ -220,6 +211,66 @@ \newconstant\c_strc_formulas_sub_number_mode \newconstant\c_strc_formulas_nested_number_mode +\let\strc_formulas_show_modes \relax +\let\strc_formulas_show_references\relax + +\installtextracker + {math.numbering} + {\let\strc_formulas_show_modes \strc_formulas_show_modes_indeed + \let\strc_formulas_show_references\strc_formulas_show_references_indeed} + {\let\strc_formulas_show_modes \relax + \let\strc_formulas_show_references\relax} + +\def\strc_formulas_mode_row#1#2#3#4% + {\NC #1% + \NC \ifcase#2\relax unset\or forced\or none\or reference\fi + \NC #3% + \NC #4% + \NC \NR} + +\protected\def\strc_formulas_show_modes_indeed + {\rlap{\enspace\vcenter to \zeropoint{\vss\ruledvcenter{% + \forgetall\smallinfofont\setupinterlinespace + \starttabulate[|l|l|l|l|] + \strc_formulas_mode_row{place} \c_strc_formulas_place_number_mode \currentplaceformulareference \currentplaceformulasuffix + \strc_formulas_mode_row{main} \c_strc_formulas_number_mode \currentformulareference \currentformulasuffix + \strc_formulas_mode_row{sub} \c_strc_formulas_sub_number_mode \currentsubformulareference \currentsubformulasuffix + \strc_formulas_mode_row{nested} \c_strc_formulas_nested_number_mode \currentnestedformulareference \currentnestedformulasuffix + \stoptabulate + \vss}}}} + +\protected\def\strc_formulas_show_references_indeed + {\llap{\vcenter to \zeropoint{\vss\ruledvcenter{% + \forgetall\smallinfofont\setupinterlinespace + \starttabulate[|l|l|l|l|] + \NC place\NC + \ifnum\c_strc_formulas_place_number_mode=\plusthree + \ifconditional\c_strc_formulas_referenced + \textminus + \else + \textplus + \fi + \else + \textminus + \fi + \NC \NR + \NC formulas\NC + \ifnum\c_strc_formulas_number_mode=\plusthree + \textplus + \else + \textminus + \fi + \NC \NR + \NC nested\NC + \ifnum\c_strc_formulas_nested_number_mode=\plusthree + \textplus + \else + \textminus + \fi + \NC \NR + \stoptabulate + \vss}}}\enspace} + \appendtoks \c_strc_formulas_place_number_mode \zerocount \c_strc_formulas_number_mode \zerocount @@ -232,6 +283,8 @@ \newconditional\c_strc_formulas_inside_place_sub \newconditional\c_strc_formulas_inside_formulas \newconditional\c_strc_formulas_inside_formulas_sub +\newconditional\c_strc_formulas_incremented +\newconditional\c_strc_formulas_referenced \appendtoks \global\setfalse\c_strc_formulas_inside_place @@ -262,7 +315,8 @@ \empty \currentsubformulasnumber \currentsubformulassynchronize - \currentsubformulasattribute} + \currentsubformulasattribute + \plustwo} \def\strc_formulas_handle_sub_number % sub formulas {\iftrialtypesetting @@ -280,8 +334,9 @@ {\begingroup \rm % determines the distance and main font \edef\p_location{\formulaparameter\c!location}% + \strc_formulas_show_references \ifx\p_location\v!right - \hskip\formulaparameter\c!distance + \strc_formulas_add_distance\plusone\v!left\formulaparameter \fi \begingroup \useformulastyleandcolor\c!numberstyle\c!numbercolor @@ -300,14 +355,15 @@ \formulaparameter\c!right}% \endgroup \ifx\p_location\v!left - \hskip\formulaparameter\c!distance + \strc_formulas_add_distance\plusone\v!right\formulaparameter \fi + \strc_formulas_show_modes \endgroup} \protected\def\strc_formulas_place_current_number {\ifempty\namedformulaentry - \strc_formulas_handle_current_references \labeltexts\currentformula{\convertedcounter[\v!formula][]}% + \strc_formulas_handle_current_references \else \expandafter % hm, the next one reset \namedformulaentry \strc_formulas_handle_current_references @@ -373,20 +429,23 @@ \mutable\let\currentsubformulasreference \empty \mutable\let\currentsubformulassynchronize\empty -% currently we do the number, some day we will do the (sub) formula - \def\strc_formulas_handle_current_references {\strc_formulas_reference_show \ifnum\c_strc_formulas_place_number_mode=\plusthree - \strc_formulas_store_number - \currentplaceformulareference - \empty - \currentplaceformulanumber + \ifconditional\c_strc_formulas_referenced + \else + \strc_formulas_store_number + \currentplaceformulareference + \empty + \currentplaceformulanumber + \currentplaceformulasynchronize + \currentplaceformulaattribute + \plusone \currentplaceformulasynchronize - \currentplaceformulaattribute - \currentplaceformulasynchronize - \glet\currentplaceformulasynchronize\relax - \theformuladestinationattribute\currentplaceformulaattribute + \glet\currentplaceformulasynchronize\relax + \theformuladestinationattribute\currentplaceformulaattribute + \global\settrue\c_strc_formulas_referenced + \fi \fi \ifnum\c_strc_formulas_number_mode=\plusthree \strc_formulas_store_number @@ -395,6 +454,7 @@ \currentformulasnumber \currentformulassynchronize \currentformulasattribute + \plustwo \currentformulassynchronize \glet\currentformulassynchronize\relax \theformuladestinationattribute\currentformulasattribute @@ -410,18 +470,53 @@ \currentnestedformulanumber \currentnestedformulasynchronize \currentnestedformulaattribute + \plustwo \currentnestedformulasynchronize \glet\currentnestedformulasynchronize\relax \theformuladestinationattribute\currentnestedformulaattribute \fi} -% needs checking ... too many: +% \def\strc_formulas_handle_numbering_indeed +% {\ifempty\namedformulaentry +% \doifelsetext\currentnestedformulasuffix +% {\strc_counters_increment\v!formula +% \ifcstok{+}\currentnestedformulasuffix +% \strc_counters_increment_sub\v!formula\plustwo +% \else +% \strc_counters_setown_sub\v!formula\plustwo\currentnestedformulasuffix +% \fi}% +% {\ifempty\currentplaceformulasuffix\else +% \let\currentnestedformulasuffix \currentplaceformulasuffix +% \let\currentnestedformulareference\currentplaceformulareference +% \strc_formulas_place_number_nested_check +% \fi +% \strc_counters_increment\v!formula}% +% \fi +% \glet\currentplaceformulasuffix\empty +% \glet\currentnestedformulasuffix\empty +% \placecurrentformulanumber} \def\strc_formulas_handle_numbering_indeed {\ifempty\namedformulaentry - \strc_counters_increment\v!formula - \doiftext\currentplaceformulasuffix{\strc_counters_setown_sub\v!formula\plustwo\currentplaceformulasuffix}% + \doifelsetext\currentnestedformulasuffix + {\ifconditional\c_strc_formulas_incremented\else + \strc_counters_increment\v!formula + \fi + \global\settrue\c_strc_formulas_incremented + \ifcstok{+}\currentnestedformulasuffix + \strc_counters_increment_sub\v!formula\plustwo + \else + \strc_counters_setown_sub\v!formula\plustwo\currentnestedformulasuffix + \fi}% + {\ifempty\currentplaceformulasuffix\else + \let\currentnestedformulasuffix \currentplaceformulasuffix + \let\currentnestedformulareference\currentplaceformulareference + \strc_formulas_place_number_nested_check + \fi + \strc_counters_increment\v!formula}% \fi + \glet\currentplaceformulasuffix\empty + \glet\currentnestedformulasuffix\empty \placecurrentformulanumber} \def\strc_formulas_handle_numbering @@ -435,9 +530,11 @@ \def\strc_formulas_handle_sub_numbering_indeed {\let\strc_formulas_handle_sub_numbering\relax % else error: see math/numbering-001.tex - \doifelsetext\currentsubformulasuffix - {\strc_counters_setown_sub\v!formula\plustwo\currentsubformulasuffix} + \doifelsetext\currentnestedformulasuffix + {\strc_counters_setown_sub\v!formula\plustwo\currentnestedformulasuffix}% {\strc_counters_increment_sub\v!formula\plustwo}% + \glet\currentplaceformulasuffix\empty + \glet\currentnestedformulasuffix\empty \placecurrentformulanumber} \def\strc_formulas_handle_sub_numbering @@ -502,27 +599,21 @@ %D %D \starttyping %D \displaylines -%D \eqalignno -%D \eqalignno %D \stoptyping %D %D Otherwise we get a missing \type {$$} error reported. \pushoverloadmode -\aliased\let\reqno\eqno % no longer valid as we just nil it - -\aliased\let\math_native_leqno\leqno -\aliased\let\math_native_reqno\reqno + \permanent\protected\def\normaleqno#1{\writestatus\m!system{no native (l/r)eqno equation number support}} -\permanent\protected\def\normaleqno#1{\writestatus\m!system{no native (l)eqno equation number support}} + \aliased\let\normalleqno\normaleqno + \aliased\let\normalreqno\normaleqno + \aliased\let\normaleqno \normaleqno -\aliased\let\normalleqno\normaleqno -\aliased\let\normalreqno\normaleqno - -\aliased\let\leqno\normaleqno -\aliased\let\reqno\normaleqno -\aliased\let\eqno \normaleqno + \aliased\let\leqno \normaleqno + \aliased\let\reqno \normaleqno + \aliased\let\eqno \normaleqno \popoverloadmode @@ -558,100 +649,52 @@ % \predisplaygapfactor \zerocount % default is 2000 -\protected\def\strc_formulas_forget_display_skips - {\mathdisplayskipmode \plusthree - \abovedisplayskip \zeropoint - \belowdisplayskip \zeropoint - \abovedisplayshortskip\zeropoint - \belowdisplayshortskip\zeropoint} - -\newdimen\d_strc_formulas_display_skip_left -\newdimen\d_strc_formulas_display_skip_right -\newdimen\d_strc_formulas_display_margin_left -\newdimen\d_strc_formulas_display_margin_right -\newdimen\d_strc_formulas_display_pre_threshold -\newdimen\d_strc_formulas_display_width +%D We no longer need to do this every time as we don't use display mode +%D at all, so: -\newconstant\c_strc_formulas_mode % this will go away -\newconstant\c_strc_formulas_space_model +% \protected\def\strc_formulas_forget_display_skips +% {\mathdisplayskipmode \plusthree +% \abovedisplayskip \zeropoint +% \belowdisplayskip \zeropoint +% \abovedisplayshortskip\zeropoint +% \belowdisplayshortskip\zeropoint} -\newconstant\c_strc_math_vertical % experiment +%D Became this, where setting the mode is now also irrelevant but the engine still +%D has it, so: -\c_strc_formulas_mode \plustwo % 0=native 1=simple (old) 2=align (new) -\c_strc_formulas_space_model\plusthree % replaces \plusone, we might use \plusfour in the future +\mathdisplayskipmode \plusthree +\abovedisplayskip \zeropoint +\belowdisplayskip \zeropoint +\abovedisplayshortskip\zeropoint +\belowdisplayshortskip\zeropoint -\newconditional\c_strc_formulas_tight +\newdimen\d_strc_formulas_display_width -\newbox\b_strc_formulas_number -\newbox\b_strc_formulas_content - -\def\strc_formulas_flush_content_and_number - {\noindentation - % \dontleavehmode - \kern\d_strc_formulas_display_margin_left - \ifcase\wd\b_strc_formulas_number - \hbox to \displaywidth \bgroup - \hfill - \box\b_strc_formulas_content - \hfill - \egroup - \orelse\ifdim\dimexpr\wd\b_strc_formulas_content+\wd\b_strc_formulas_number\relax>\displaywidth - \vbox \bgroup - \hsize\displaywidth - \box\b_strc_formulas_content - \par - \ifx\p_location\v!left - \box\b_strc_formulas_number\hfill - \else - \hfill\box\b_strc_formulas_number - \fi - \egroup - \else - \hbox to \displaywidth \bgroup - \ifx\p_location\v!left - \rlap{\box\b_strc_formulas_number}% - \hfill\box\b_strc_formulas_content\hfill - \else - \hfill\box\b_strc_formulas_content\hfill - \llap{\box\b_strc_formulas_number}% - \fi - \egroup - \fi} +%D In \LMTX\ we have three ways of rendering formulas: +%D +%D \startitemize +%D \startitem line: a single boxed line \stopitem +%D \startitem text: multiple boxed lines \stopitem +%D \startitem page: multiple unboxed lines \stopitem +%D \stopitemize +%D +%D So, yes has become text -\installcorenamespace{mathdisplayspacemodel} +\newconstant\c_strc_math_split_mode -\defcsname\??mathdisplayspacemodel\v!before:1\endcsname % old - {\ifx\p_spacebefore\v!none - % nothing - \else - \directvspacing\p_spacebefore - \fi} +\mutable\let\m_strc_math_split\empty -\defcsname\??mathdisplayspacemodel\v!after:1\endcsname % old - {\prevdepth .5\strutdp - \ifx\p_spaceafter\v!none - % nothing - \else - \directvspacing\p_spaceafter - \fi} +\aliased\let\c_strc_math_line_mode\zerocount +\aliased\let\c_strc_math_flow_mode\plusone +\aliased\let\c_strc_math_wrap_mode\plusthree -\defcsname\??mathdisplayspacemodel\v!before:2\endcsname % old - {\ifx\p_spacebefore\v!none - % nothing - \else - \directvspacing\p_spacebefore - \fi - \prevdepth-\maxdimen} % texbook pagina 79-80 +\newconditional\c_strc_formulas_tight +\newconditional\c_strc_formulas_packed +\newconditional\c_strc_formulas_depth -\defcsname\??mathdisplayspacemodel\v!after:2\endcsname % old - {\prevdepth\lineheight - \ifx\p_spaceafter\v!none - % nothing - \else - \directvspacing\p_spaceafter - \fi} +\newbox\b_strc_formulas_number -\defcsname\??mathdisplayspacemodel\v!before:3\endcsname +\def\strc_formulas_display_space_before_normal {% not ok, try \stopformula\par\startformula vs \stopformula\startformula \let\m_spacebefore\empty \ifvmode @@ -675,7 +718,6 @@ \orelse\ifempty\p_spacebefore \directvspacing\currentvspacing \else -% \directvspacing{\p_spacebefore,\the\scratchdimen}% \directvspacing\p_spacebefore \fi \else @@ -688,9 +730,8 @@ \fi \fi} -\defcsname\??mathdisplayspacemodel\v!after:3\endcsname - {\prevdepth\strutdp % \directvspacing\v!depth - \ifx\p_spaceafter\v!none +\def\strc_formulas_display_space_after_common + {\ifx\p_spaceafter\v!none % nothing \orelse\ifempty\p_spaceafter \directvspacing\currentvspacing @@ -698,15 +739,17 @@ \directvspacing\p_spaceafter \fi} -\newconditional\c_math_model_four_indeed +\def\strc_formulas_display_space_after_normal + {\prevdepth\strutdp % \directvspacing\v!depth + \strc_formulas_display_space_after_common} -\defcsname\??mathdisplayspacemodel\v!before:4\endcsname +\def\strc_formulas_display_space_before_depth {% not ok, try \stopformula\par\startformula vs \stopformula\startformula \ifvmode \ifinner - \csname\??mathdisplayspacemodel\v!before:3\endcsname + \strc_formulas_display_space_before_normal + \setfalse\c_strc_formulas_depth \else - \settrue\c_math_model_four_indeed \forcestrutdepth \nointerlineskip \ifx\p_spacebefore\v!none @@ -714,32 +757,33 @@ \orelse\ifempty\p_spacebefore \directvspacing\currentvspacing \else -% \directvspacing{\p_spacebefore,\the\scratchdimen}% \directvspacing\p_spacebefore \fi \fi - \else - \csname\??mathdisplayspacemodel\v!before:3\endcsname - \fi} + \else + \strc_formulas_display_space_before_normal + \fi} -\defcsname\??mathdisplayspacemodel\v!after:4\endcsname - {\ifconditional\c_math_model_four_indeed - \setfalse\c_math_model_four_indeed +\def\strc_formulas_display_space_after_depth + {\ifconditional\c_strc_formulas_depth \forcestrutdepth + \strc_formulas_display_space_after_common \else - \prevdepth\strutdp % \directvspacing\v!depth - \fi - \ifx\p_spaceafter\v!none - % nothing - \orelse\ifempty\p_spaceafter - \directvspacing\currentvspacing + \strc_formulas_display_space_after_depth_normal + \fi} + +\def\strc_formulas_display_space_before + {\ifconditional\c_strc_formulas_depth + \strc_formulas_display_space_before_depth \else - \directvspacing\p_spaceafter + \strc_formulas_display_space_before_normal \fi} -\permanent\protected\def\setdisplaymathspacemodel[#1]% - {\ifcsname\??mathdisplayspacemodel\v!before:\number#1\endcsname - \c_strc_formulas_space_model#1\relax +\def\strc_formulas_display_space_after + {\ifconditional\c_strc_formulas_depth + \strc_formulas_display_space_after_depth + \else + \strc_formulas_display_space_after_normal \fi} % \newtoks\everybeforedisplay @@ -750,8 +794,13 @@ \par \fi \ifvmode - \edef\p_spacebefore{\formulaparameter\c!spacebefore}% - \begincsname\??mathdisplayspacemodel\v!before:\number\c_strc_formulas_space_model\endcsname + \ifconditional\c_strc_formulas_packed + \let\p_spacebefore\empty + \else + \edef\p_spacebefore{\formulaparameter\c!spacebefore}% + \fi + % \begincsname\??mathdisplayspacemodel\v!before:\number\c_strc_formulas_space_model\endcsname + \strc_formulas_display_space_before \fi \ifhmode \par @@ -763,32 +812,21 @@ \par \fi \ifvmode - \edef\p_spaceafter{\formulaparameter\c!spaceafter}% - \begincsname\??mathdisplayspacemodel\v!after:\number\c_strc_formulas_space_model\endcsname + \ifconditional\c_strc_formulas_packed + \let\p_spaceafter\empty + \else + \edef\p_spaceafter{\formulaparameter\c!spaceafter}% + \fi + % \begincsname\??mathdisplayspacemodel\v!after:\number\c_strc_formulas_space_model\endcsname + \strc_formulas_display_space_after \fi \ifhmode \par \fi} -\permanent\protected\def\setdisplaydimensions - {\displayindent\dimexpr - \d_strc_formulas_display_skip_left - +\d_strc_formulas_display_margin_left - \relax - \displaywidth\d_strc_formulas_display_width - %\setlocalhsize - %\displaywidth\localhsize - \ifdim\hangindent>\zeropoint - \advance\displayindent\hangindent - \else - \advance\displaywidth\hangindent - \fi - \advance\displaywidth\dimexpr - -\displayindent - -\d_strc_formulas_display_skip_right - -\d_strc_formulas_display_margin_right - \relax - \hsize\displaywidth} % new, else overfull in itemize +\ifdefined\setdisplaydimensions \else + \let\setdisplaydimensions\relax % this one will be defined in math-ali +\fi % \newskip\formulastrutht % \newskip\formulastrutdp @@ -800,18 +838,59 @@ %D %D \typebuffer \getbuffer +%D Some tracing of distances and thresholds: + +\def\strc_formulas_add_distance_normal#1#2#3% maybe a skip with stretch/shrink + {\kern#3\c!numberdistance\relax} + +\def\strc_formulas_add_distance_traced#1#2#3% + {\begingroup + \scratchdimenone #3\c!numberdistance\relax + \scratchdimentwo \ifconditional\c_strc_formulas_tight\formulaparameter\c!numberthreshold\else\zeropoint\fi\relax + \scratchdimenthree.5\exheight + \ifcase\scratchdimentwo\else\ifx#2\v!left + \middlered + \kern-\scratchdimentwo + \vrule + \s!height\scratchdimenthree + \s!depth \scratchdimenthree + \s!width \scratchdimentwo + \fi\fi + \ifcase\scratchdimenone\else + \ifcase#1\or\middlegreen\else\middleblue\fi + \vrule + \s!height\scratchdimenthree + \s!depth \scratchdimenthree + \s!width \scratchdimenone + \fi + \ifcase\scratchdimentwo\else\ifx#2\v!right + \middlered + \vrule + \s!height\scratchdimenthree + \s!depth \scratchdimenthree + \s!width \scratchdimentwo + \kern-\scratchdimentwo + \fi\fi + \endgroup} + +\installtextracker + {math.numberdistance} + {\let\strc_formulas_add_distance\strc_formulas_add_distance_traced} + {\let\strc_formulas_add_distance\strc_formulas_add_distance_normal} + +\let\strc_formulas_add_distance \strc_formulas_add_distance_normal + \defcsname\??formulaoption\v!packed\endcsname - {\c_strc_formulas_space_model\zerocount} + {\settrue\c_strc_formulas_packed} \defcsname\??formulaoption\v!tight\endcsname {\settrue\c_strc_formulas_tight} \defcsname\??formulaoption\v!middle\endcsname - {\d_strc_formulas_display_skip_left \zeropoint - \d_strc_formulas_display_skip_right\zeropoint} + {} \defcsname\??formulaoption\v!depth\endcsname - {\c_strc_formulas_space_model\plusfour} + {\settrue\c_strc_formulas_depth} \defcsname\??formulaoption\v!line\endcsname {\ifgridsnapping @@ -838,51 +917,85 @@ % \prebinoppenalty -100 % \prerelpenalty -100 -\def\strc_math_set_split_yes - {% \clf_setmathpenalties\plusone - \mathpenaltiesmode \plusone - \edef\p_hang{\formulaparameter\c!hang}% - \ifx\p_hang\v!none +% \placeformula[eq:a] +% \startformula[split=text] +% m(b-a)\leq\int_a^b f(x)\dd x\leq M(b-a). +% \stopformula +% +% \placeformula[eq:b] +% \startformula[split=line] +% m(b-a)\leq\int_a^b f(x)\dd x\leq M(b-a). +% \stopformula +% +% \placeformula[eq:c] +% \startformula[split=line,numberlocation=overlay] +% m(b-a)\leq\int_a^b f(x)\dd x\leq M(b-a). +% \stopformula + +\def\strc_math_set_split + {\edef\m_strc_math_split{\formulaparameter\c!split}% + \ifx\m_strc_math_split\v!line + \global\c_strc_math_split_mode\c_strc_math_line_mode + \orelse\ifx\m_strc_math_split\v!no + \global\c_strc_math_split_mode\c_strc_math_line_mode + \orelse\ifx\m_strc_math_split\v!box + \global\c_strc_math_split_mode\c_strc_math_wrap_mode + % \orelse\ifx\m_strc_math_split\v!page + % \global\c_strc_math_split_mode\c_strc_math_flow_mode + % \orelse\ifx\m_strc_math_split\v!text + % \global\c_strc_math_split_mode\c_strc_math_flow_mode + % \orelse\ifx\m_strc_math_split\v!yes + % \global\c_strc_math_split_mode\c_strc_math_flow_mode + % \orelse\ifx\m_strc_math_split\v!paragraph + % \global\c_strc_math_split_mode\c_strc_math_flow_mode + \else + \global\c_strc_math_split_mode\c_strc_math_flow_mode + \fi + \mathpenaltiesmode\plusone + \ifnum\c_strc_math_split_mode=\c_strc_math_line_mode \global\setfalse\c_strc_math_indent - \clf_resetmathhang \else - \global\settrue\c_strc_math_indent - \clf_setmathhang {% - method {\p_hang}% - distance \formulaparameter\c!distance - }% - \fi} - -\def\strc_math_set_split_nop - {\mathpenaltiesmode \zerocount - \clf_resetmathhang} + \global\settrue\c_strc_math_indent % otherwise no breaks + \fi + \global\d_strc_math_indent\zeropoint} -\def\strc_math_set_split - {\edef\p_split{\formulaparameter\c!split}% - \ifx\p_split\v!yes - \global\c_strc_math_vertical\plusone - \strc_math_set_split_yes - \orelse\ifx\p_split\v!page - \global\c_strc_math_vertical\plustwo - \strc_math_set_split_yes - \orelse\ifx\p_split\v!text - \global\c_strc_math_vertical\plusthree - \strc_math_set_split_nop +\def\strc_math_set_number_location + {\ifcstok{\formulaparameter\c!numberlocation}\v!overlay + \settrue\c_strc_formulas_overlay_number \else - \global\c_strc_math_vertical\zerocount - \strc_math_set_split_nop + \setfalse\c_strc_formulas_overlay_number + \fi + \ifcstok{\formulaparameter\c!numbermethod}\v!down + \settrue\c_math_align_overflow_mode + \else + \setfalse\c_math_align_overflow_mode \fi} \setupformula - [\c!split=\v!no, - \c!distance=\zeropoint, +% [\c!split=\v!no, + [\c!split=\v!text, % multi line no page breaks + \c!numberlocation=, + \c!textdistance=\zeropoint, %\c!interlinespace=1.5\lineheight, \c!textmargin=2\emwidth, - \c!interlinespace=, - \c!hang=\v!none] + \c!numbermethod=\v!down, + \c!interlinespace=] % for the moment (when testing) we use a penalty 1 +%D Alignment in vertically rendered formulas using \type {\alignhere} and friends +%D has been an experimental \MKIV\ features for quite a while but probably very few +%D users were aware of it. It works quite well and little code is needed. With +%D \LMTX\ defaulting to multiline display math it was time to add a couple of +%D features and tracing. It can actually often replace math alignments and thereby +%D not only save coding but also keep formulas as formulas instead of snippets. +%D +%D There can of course be more tricks applied but most already were rejected when I +%D wrote the original version which is actually not that far from what we do now +%D (like deeply burried align points). The main difference between the following +%D variant and the \MKIV\ one is that we try to honour the new inter|-|atom spacing +%D and adapt to the general alignment settings. + \def\strc_math_pickup_again % {\mathatom \s!leftclass \mathendcode \s!rightclass \mathbegincode{}\noatomruling} {\mathatom \s!class \mathbegincode{}\noatomruling} @@ -891,131 +1004,408 @@ \defineboundary[mathalign] % this one is also used at the lua end +\newconditional\c_strc_math_trace_hang +\newdimen \d_strc_math_hang_state + +\installtextracker + {math.autohang} + {\settrue\c_strc_math_trace_hang} + {\setfalse\c_strc_math_trace_hang} + +\newconditional\c_strc_math_aligned_here + +\def\strc_math_trace_okay#1#2% + {\mathghost{\llap{\backgroundline[#1]{\white\tttf#2}}}} + \protected\def\strc_math_align_here {\ifmmode + \global\settrue\c_strc_math_aligned_here % we can have a more dedicated value, and also maybe store the class so that we can % pick it up at the engine end (second pass) + \ifconditional\c_strc_math_trace_hang + \strc_math_trace_okay{darkred}{A}% + \fi \boundary\c_bndr_mathalign \fi} -\protected\def\strc_math_break_here +\tolerant\protected\def\strc_math_skip_here[#1]% + {% no strut as it will influence fences + \ifconditional\c_strc_math_trace_hang + \strc_math_trace_okay{darkblue}{S #1}% + \fi + \scratchdimen\dimexpr\formulaparameter\c!textmargin\relax + \ifchkdim#1\or + \d_strc_math_hang_state#1% + \orelse\ifchknum#1\or + \d_strc_math_hang_state#1\scratchdimen + \orelse\iftok{#1}{+}% + \advance\d_strc_math_hang_state\scratchdimen + \orelse\iftok{#1}{-}% + \advance\d_strc_math_hang_state-\scratchdimen + \else + \d_strc_math_hang_state\scratchdimen + \fi + \kern\d_strc_math_hang_state + \strc_math_pickup_again} + +% \blank[line] \ruledhbox{zzzz} \blank[line] +% +% xxxx \vadjust +% depth check +% depth after -\thousandpoint +% {\blue xxxx +} +% xxxx \vadjust +% pre +% {\red xxxx -} +% xxxx +% +% \blank[line] \ruledhbox{zzzz} \blank[line] + +\tolerant\protected\def\strc_math_text_here[#1]#:#*#=% + {\ifparameter#2\or + \ifnum\lastboundary=\c_math_begin_boundary\else + \ifcstok{#1}\v!right\else + \strc_math_break_here + \fi + \fi + \vadjust + \ifcstok{#1}\v!before + pre + \orelse\ifcstok{#1}\v!left + pre + baseline + depth before -\thousandpoint + \orelse\ifcstok{#1}\v!right + post + baseline + \fi + \bgroup + \hbox to \displaywidth \bgroup + \strut + \ifcstok{#1}\v!right + \hfill#2% + \else + #2\hss + \fi + \strut + \egroup + \egroup + \ifcstok{#1}\v!right + \strc_math_break_here + \else + % \mathatom class \mathexplicitcode{}% + \strc_math_pickup_again + \fi + \orelse\ifcstok{#1}\v!page + \strc_math_page_here + \orelse\ifcstok{#1}\v!samepage + \strc_math_same_here + \else + \strc_math_break_here + \fi} + +\protected\def\strc_math_page_here {\ifmmode - \hfill + \ifconditional\c_strc_math_trace_hang + \strc_math_trace_okay{darkyellow}{B P}% + \fi \break + \vadjust pre {\vfill\penalty-100000}% \strc_math_pickup_again \fi} -\tolerant\protected\def\strc_math_skip_here[#1]% - {% no strut as it will influence fences - \kern - \ifchkdim#1\or - #1% - \orelse\ifchknum#1\or - #1\dimexpr\formulaparameter\c!textmargin\relax - \else - \formulaparameter\c!textmargin +\protected\def\strc_math_same_here + {\ifmmode + \ifconditional\c_strc_math_trace_hang + \strc_math_trace_okay{darkyellow}{B S}% \fi - \relax - \strc_math_pickup_again} + \break + \vadjust pre {\penalty\plustenthousand}% + \strc_math_pickup_again + \fi} + +\protected\def\strc_math_break_here + {\ifmmode + \ifconditional\c_strc_math_trace_hang + \strc_math_trace_okay{darkgreen}{B}% + \fi + \break + \strc_math_pickup_again + \fi} \ifdefined\alignhere \else \aliased\let\alignhere\relax \fi -\ifdefined\breakhere \else \aliased\let\breakhere\relax \fi +%ifdefined\texthere \else \aliased\let\texthere \relax \fi \ifdefined\skiphere \else \aliased\let\skiphere \relax \fi +\ifdefined\breakhere \else \aliased\let\breakhere\relax \fi -\appendtoks +\appendtoks % must move to alignment \enforced\let\alignhere\strc_math_align_here - \enforced\let\breakhere\strc_math_break_here + \enforced\let\breakhere\strc_math_text_here \enforced\let\skiphere \strc_math_skip_here + %enforced\let\texthere \strc_math_text_here +% \global\setfalse\c_strc_math_aligned_here \to \everymathematics -% \protected\def\strc_formulas_start_formula#1% -% {\strc_formulas_start_formula_indeed[#1]} -% -% \tolerant\protected\def\strc_formulas_start_formula[#1]#*[#2]% setting leftskip adaption is slow ! - \installcorenamespace{mathtextalign} -\defcsname\??mathtextalign\v!slanted\endcsname - {\raggedcenter - \parinitleftskip \zeropoint - \parinitrightskip\s_spac_filll - \parfillleftskip \s_spac_filll - \parfillrightskip\zeropoint - \updateparagraphproperties} +\newconstant\c_strc_math_ragged_status +\newconstant\c_strc_math_split_status + +\prependtoks + \c_strc_math_ragged_status\plustwo + \c_strc_math_split_status \zerocount +\to \everymathematics + +% \defcsname\??mathtextalign\v!flushleft\endcsname {\raggedright + \mathgluemode\plustwo + \c_strc_math_ragged_status\plusone + \updateparagraphproperties} % not needed + +\defcsname\??mathtextalign\v!middle\endcsname + {\raggedcenter + \mathgluemode\plustwo + \c_strc_math_ragged_status\plustwo \updateparagraphproperties} % not needed \defcsname\??mathtextalign\v!flushright\endcsname {\raggedleft + \mathgluemode\plustwo + \c_strc_math_ragged_status\plusthree \updateparagraphproperties} % not needed -\defcsname\??mathtextalign\v!middle\endcsname - {\raggedcenter +\defcsname\??mathtextalign\v!slanted\endcsname + {\raggedslanted + %\mathgluemode\plustwo + \c_strc_math_ragged_status\plustwo + \parfillrightskip\wd\b_strc_formulas_number % should normally fit \updateparagraphproperties} % not needed -\defcsname\??mathtextalign\v!middle:\v!start\endcsname - {\raggedcenter - \setbox\scratchbox\vbox{\unhcopy\b_strc_math_display}% - \scratchdimen\dimexpr\textwidth-\d_strc_math_indent-\themaxboxwidth\scratchbox\relax} +\def\strc_math_setup_align + {\ifcsname\??mathtextalign\formulaparameter\c!align\endcsname + \lastnamedcs\else\begincsname\??mathtextalign\v!middle\endcsname + \fi} + +\defcsname\??mathtextalign\v!flushleft:\v!auto\endcsname + {\raggedright + \mathgluemode\plustwo + \c_strc_math_ragged_status\plusone + \strc_math_analyze_box} + +\defcsname\??mathtextalign\v!middle:\v!auto\endcsname + {\raggedright + \mathgluemode\plustwo + \c_strc_math_ragged_status\plustwo + \strc_math_analyze_box} -\defcsname\??mathtextalign\v!middle:\v!stop\endcsname - {\leftskip.5\scratchdimen - \rightskip\leftskip} +\defcsname\??mathtextalign\v!flushright:\v!auto\endcsname + {\raggedright + \mathgluemode\plustwo + \c_strc_math_ragged_status\plusthree + \strc_math_analyze_box} + +\defcsname\??mathtextalign\v!slanted:\v!auto\endcsname + {\raggedright + \mathgluemode\plustwo + \c_strc_math_ragged_status\plustwo + \strc_math_analyze_box}\stopformula -\defcsname\??mathtextalign\v!flushleft:\v!start\endcsname - {\csname\??mathtextalign\v!middle:\v!start\endcsname} +\def\strc_math_setup_align_auto + {\ifcsname\??mathtextalign\formulaparameter\c!align:\v!auto\endcsname + \lastnamedcs\else\begincsname\??mathtextalign\v!middle:\v!auto\endcsname + \fi} -\defcsname\??mathtextalign\v!flushleft:\v!stop\endcsname - {\leftskip\zeropoint - \rightskip\leftskip} +\startsetups[math:penalties:\v!text] + \interlinepenalty \plustenthousand + \shapingpenalty \plustenthousand +\stopsetups -\defcsname\??mathtextalign\v!flushright:\v!start\endcsname - {\csname\??mathtextalign\v!middle:\v!start\endcsname} +% or (test): +% +% \startsetups[math:penalties:\v!text] +% \shapingpenaltiesmode \zerocount +% \interlinepenalty \plustenthousand +% \stopsetups -\defcsname\??mathtextalign\v!flushright:\v!stop\endcsname - {\leftskip\scratchdimen - \rightskip\leftskip} +\startsetups[math:penalties:\v!page] + \shapingpenaltiesmode \zerocount + \widowpenalties \plusthree \plustenthousand \plustenthousand \zerocount + \clubpenalties \plusthree \plustenthousand \plustenthousand \zerocount +\stopsetups -\tolerant\protected\def\strc_formulas_start_formula#1#:#*[#2]% setting leftskip adaption is slow ! - {\ifhmode - \par +\setupformula + [\c!penalties=math:penalties:\formulaparameter\c!split] % math:penalties:\m_strc_math_split + +\def\strc_math_setup_penalties + {\directsetup{\formulaparameter\c!penalties}} + +% a limitation is that this only works in a regular setting, so no shapes + +\newcount\c_strc_math_n_of_lines +\newdimen\d_strc_math_max_width +\newdimen\d_strc_math_last_width +\newdimen\d_strc_math_last_depth + +\appendtoks + \global\d_strc_math_indent \zeropoint + \global\c_strc_math_n_of_lines\zerocount + \global\d_strc_math_max_width \zeropoint + \global\d_strc_math_last_width\zeropoint + \global\d_strc_math_last_depth\zeropoint +\to \everyresetformulas + +\newbox\b_strc_math_display % most code is in math-ali (for historical reasons) + +\newskip\s_strc_formulas_margin_left +\newskip\s_strc_formulas_margin_right + +\def\strc_formulas_set_paragraph + {%\setlocalhsize + %\hsize\localhsize + % + \d_strc_formulas_display_width\formulaparameter\c!width\relax + \s_strc_formulas_margin_left \leftskip + \s_strc_formulas_margin_right\rightskip + \edef\p_margin{\formulaparameter\c!leftmargin}% + \ifempty\p_margin \else + \doadaptleftskip\p_margin \fi - \bgroup % HERE - \iftrialtypesetting\else - \global\advance\c_strc_formulas_n\plusone + \edef\p_margin{\formulaparameter\c!rightmargin}% + \ifempty\p_margin \else + \doadaptrightskip\p_margin \fi - \def\currentformula{#1}% - \strc_math_set_split - \dostarttaggedchained\t!formula\currentformula\??formula - \setfalse\c_strc_formulas_tight - \d_strc_formulas_display_skip_left \leftskip - \d_strc_formulas_display_skip_right \rightskip - \d_strc_formulas_display_width \formulaparameter\c!width\relax - \d_strc_formulas_display_margin_left \formulaparameter\c!leftmargin\relax - \d_strc_formulas_display_margin_right\formulaparameter\c!rightmargin\relax - \iftok{#2}\emptytoks + \edef\p_margin{\formulaparameter\c!margin}% + \ifempty\p_margin \else + \doadaptleftskip\p_margin + \doadaptrightskip\p_margin + \fi + % + \global\setfalse\c_strc_math_aligned_here + \hsize\d_strc_formulas_display_width + \displaywidth\hsize + \displayindent\zeropoint} + +\def\strc_math_analyze_box + {\clf_handlemathhang + stage \plusone + alignstate \c_strc_math_ragged_status + box \b_strc_math_display + distance \formulaparameter\c!textdistance + \relax + %\holdingmigrations\zerocount + \setbox\b_strc_math_display\vbox\bgroup % \vtop + \ifnum\c_strc_math_split_mode=\c_strc_math_line_mode + % we can't end up here + \orelse\ifconditional\c_strc_math_aligned_here + \ifzeropt\d_strc_math_indent\else + \hangafter\plusone + \hangindent\d_strc_math_indent + \fi + % \strc_math_setup_align % _inner + \else + \strc_math_setup_align + \fi +% \strc_math_setup_spacing\formulaparameter + \strc_math_setup_penalties + \unhbox\b_strc_math_display + \egroup + \clf_handlemathhang + stage \ifconditional\c_strc_math_aligned_here \plustwo \else \plusthree \fi + % alignstate \c_strc_math_ragged_status + % box \b_strc_math_display + % distance \formulaparameter\c!textdistance + \relax + % + \begingroup + \edef\v_spac_whitespace_current{\formulaparameter\c!spaceinbetween}% + \spac_whitespace_setup + \clf_handlemathhang + stage \plusfour + inbetween 1\parskip + height \strutht + depth \strutdp + \relax + \endgroup} + +\def\strc_math_show_margins_there + {\vadjust pre \bgroup + \c_attr_visual\attributeunsetvalue + \hbox to \hsize \bgroup + \setbox\scratchbox\hbox to \hsize\bgroup + \bgroup\darkred \vrule \s!width\leftskip \egroup\hss + \bgroup\darkgray\leaders\vrule\hfill \egroup\hss + \bgroup\white \vrule \s!width\emwidth \egroup\hss + \bgroup\darkgray\leaders\vrule\hfill \egroup\hss + \bgroup\darkblue\vrule \s!width\rightskip\egroup + \egroup + \ht\scratchbox1.2\exheight + \dp\scratchbox0.4\exheight + \strut + \box\scratchbox + \hskip-\hsize + \hbox to \hsize \bgroup + \white + \infofont + \hskip1\leftskip + \quad + \formulaparameter\c!split + \quad + \formulaparameter\c!align + \egroup + \egroup + \egroup} + +\let\strc_math_inject_show_margins_here\relax + +\def\strc_math_show_margins_indeed + {\gdef\strc_math_inject_show_margins_here + {\strc_math_show_margins_there + \glet\strc_math_inject_show_margins_here\relax}% + \appendtoks\strc_math_inject_show_margins_here\to\everypar} + +\installtextracker + {math.showmargins} + {\let\strc_math_show_margins\strc_math_show_margins_indeed} + {\let\strc_math_show_margins\relax} + +\let\strc_math_show_margins\relax + +\def\strc_math_set_options#1% + {\setfalse\c_strc_formulas_tight + \setfalse\c_strc_formulas_packed + \setfalse\c_strc_formulas_depth + \iftok{#1}\emptytoks \edef\p_option{\formulaparameter\c!option}% - \orelse\ifhastok={#2}% this is new, so that we can also set the grid - \setupcurrentformula[#2]% + \orelse\ifhastok={#1}% this is new, so that we can also set the grid + \setupcurrentformula[#1]% \edef\p_option{\formulaparameter\c!option}% \else \edef\p_option{\formulaparameter\c!option}% - \edef\p_option{\ifempty\p_option\else\p_option,\fi#2}% + \edef\p_option{\ifempty\p_option\else\p_option,\fi#1}% \fi \ifempty\p_option \else \rawprocesscommacommand[\p_option]\strc_formulas_option + \fi} + +\tolerant\protected\def\strc_formulas_start_formula#1#:#*[#2]% setting leftskip adaption is slow ! + {\ifhmode + \par \fi - \edef\p_margin{\formulaparameter\c!margin}% - \ifempty\p_margin \else - \dosetleftskipadaption\p_margin - \d_strc_formulas_display_margin_left\leftskipadaption + \bgroup % HERE + \iftrialtypesetting\else + \global\advance\c_strc_formulas_n\plusone \fi + \def\currentformula{#1}% + \dostarttaggedchained\t!formula\currentformula\??formula + \strc_math_set_options{#2}% + \strc_math_set_split + \strc_math_set_number_location + \strc_formulas_set_paragraph \let\strc_formulas_start_formula\strc_formulas_start_formula_nested - \strc_formulas_forget_display_skips \the\everybeforedisplayformula - \begincsname\??mathtextalign\formulaparameter\c!textalign\endcsname + \strc_math_setup_align \ifcstok{\formulaparameter\c!strut}\v!yes \let\strc_formulas_begstrut\begstrut \let\strc_formulas_endstrut\endstrut @@ -1034,6 +1424,8 @@ {\dostoptagged \egroup} +% the application of the above is in math-ali.mkxl: \strc_math_flush_aligned + % tagging of formulanumbers is not ok (we get two display maths blobs) \newcount\c_strc_formulas_n @@ -1071,9 +1463,6 @@ \fi \to \everybeforedisplayformula -% \protected\def\switchtoformulabodyfont -% {\switchtobodyfont} - \tolerant\permanent\protected\def\formula[#1]#;#2% todo: tagged {\begingroup \ifparameters#1\else @@ -1095,6 +1484,8 @@ \let\strc_formulas_begstrut\relax \let\strc_formulas_endstrut\relax +\newboundary\c_math_begin_boundary + \permanent\protected\def\startdisplaymath {\ifhmode \par @@ -1102,20 +1493,11 @@ \bgroup \informulatrue \beforedisplayspace - \setdisplaydimensions - \ifcase\c_strc_formulas_mode - \noindent % prevents that tex injects empty line (when using native display mechanism) - \Ucheckedstartdisplaymath - \the\everydisplay % new (probably too much) - \or - \setbox\b_strc_formulas_content\hbox\bgroup - \normalUstartmath - \displaystyle - \the\everydisplay % new (probably too much) - \else - \expandafter\startinnermath + \startinnermath + \ifrelax\strc_formulas_begstrut\else + \strc_formulas_begstrut + \boundary\c_math_begin_boundary \fi - \strc_formulas_begstrut \begingroup} % less interference with upcoming a \over b \permanent\protected\def\stopdisplaymath @@ -1123,15 +1505,7 @@ \ifhmode \strc_formulas_endstrut \fi - \ifcase\c_strc_formulas_mode - \Ucheckedstopdisplaymath - \or - \normalUstopmath - \egroup - \strc_formulas_flush_content_and_number - \else - \expandafter\stopinnermath - \fi + \stopinnermath \afterdisplayspace \egroup} @@ -1161,10 +1535,7 @@ % \placeformula {f} \startspformule \fakespacingformula \stopspformule % \fakewords{20}{40} -\permanent\protected\def\startsubformulas - {\dosingleempty\strc_formulas_start_sub_formulas} - -\def\strc_formulas_start_sub_formulas[#1]% +\tolerant\permanent\protected\def\startsubformulas[#1]% {\edef\currentsubformulasreference{#1}% \global\settrue\c_strc_formulas_inside_formulas_sub \strc_formulas_handle_sub_number} @@ -1178,10 +1549,7 @@ %D Named subformulas (to be redone) -\permanent\protected\def\startnamedsubformulas - {\dosingleempty\strc_formulas_start_named_sub_formulas} - -\def\strc_formulas_start_named_sub_formulas[#1]#2% +\tolerant\permanent\protected\def\startnamedsubformulas[#1]#2% {\setformulalistentry{#2}% \startsubformulas[#1]} @@ -1203,21 +1571,25 @@ \permanent\letcsname\e!stop\v!formulas\endcsname\relax -\protected\def\strc_formulas_nested_formula_start - {\hbox to \displaywidth \bgroup - \hsize\displaywidth - \hss - %\Ustartmath +\tolerant\protected\def\strc_formulas_nested_formula_start[#1]% + {\begingroup + \ifparameter#1\or + \setupformula[\c!width=\d_strc_formulas_display_width,#1]% + \d_strc_formulas_display_width\formulaparameter\c!width\relax + \fi + \vcenter \bgroup + \hsize \d_strc_formulas_display_width + \displaywidth\d_strc_formulas_display_width + \raggedcenter \dostarttagged\t!formulacontent\empty \csname\e!start\formulaparameter\c!alternative\v!formula\endcsname} \protected\def\strc_formulas_nested_formula_stop {\csname\e!stop\formulaparameter\c!alternative\v!formula\endcsname \dostoptagged - %\Ustopmath - \hss \egroup - \hss} + \hss + \endgroup} \normalexpanded{\tolerant\def\noexpand\strc_formulas_start_formulas[#1]#:#2\csname\e!stop\v!formulas\endcsname}% {\startformula @@ -1226,15 +1598,15 @@ \edef\currentformulasreference{#1}% \strc_formulas_handle_number \let\currentformula\empty - \strc_formulas_forget_display_skips + % \strc_formulas_forget_display_skips \enforced\protected\def\startformula {\advance\scratchcounter\plusone \expandafter\gobbleuntil\csname\e!stop\v!formula\endcsname}% \scratchcounter\zerocount #2% preroll - \hbox to \displaywidth \bgroup + \hbox to \d_strc_formulas_display_width \bgroup \ifcase\scratchcounter\else - \divide\displaywidth\scratchcounter + \divide\d_strc_formulas_display_width\scratchcounter \fi \hss \enforced\let\startformula\strc_formulas_nested_formula_start @@ -1266,10 +1638,7 @@ \plusthree \fi} -\permanent\protected\def\formulanumber - {\strc_formulas_number} % for the moment - -\tolerant\protected\def\strc_formulas_number[#1]% +\tolerant\permanent\protected\def\formulanumber[#1]% {\def\currentformulareference{#1}% \strc_formulas_place_number_in_box} @@ -1277,12 +1646,16 @@ \permanent\protected\def\placesubformula{\global\settrue\c_strc_formulas_inside_place_sub\strc_formulas_place} \tolerant\protected\def\strc_formulas_place[#1]% - {\def\currentplaceformulareference{#1}% - \let\currentplaceformulasuffix\empty + {\xdef\currentplaceformulareference{#1}% + \glet\currentplaceformulasuffix\empty + \glet\currentnestedformulasuffix\empty + \global\setfalse\c_strc_formulas_incremented + \global\setfalse\c_strc_formulas_referenced + \global\settrue\c_strc_formulas_inside_place \doifelsenextbgroup\strc_formulas_place_yes\strc_formulas_place_nop} % [ref]{} \protected\def\strc_formulas_place_yes#1% - {\def\currentplaceformulasuffix{#1}% + {\xdef\currentplaceformulasuffix{#1}% \strc_formulas_place_nop} \protected\def\strc_formulas_place_nop @@ -1311,6 +1684,8 @@ \permanent\tolerant\protected\def\startplaceformula[#1]% {\begingroup + \global\setfalse\c_strc_formulas_incremented + \global\setfalse\c_strc_formulas_referenced \global\settrue\c_strc_formulas_inside_place \ifparameter#1\or \expandafter\strc_formulas_start_place_yes @@ -1322,13 +1697,13 @@ {\doifassignmentelse{#1}\strc_formulas_start_place_parameters\strc_formulas_start_place_reference[#1]} \def\strc_formulas_start_place_nop[#1]% - {\let\currentplaceformulareference\empty - \let\currentplaceformulasuffix \empty + {\glet\currentplaceformulareference\empty + \glet\currentplaceformulasuffix \empty \strc_formulas_place_nop} \def\strc_formulas_start_place_reference[#1]% - {\edef\currentplaceformulareference{#1}% - \let\currentplaceformulasuffix\empty + {\xdef\currentplaceformulareference{#1}% + \glet\currentplaceformulasuffix\empty %\doifelsenextbgroup\strc_formulas_place_yes\strc_formulas_place_nop} % [ref]{} \strc_formulas_place_nop} @@ -1362,50 +1737,70 @@ \let\strc_formulas_place_number_nested\gobbletwoarguments \def\strc_formulas_place_number_nested_indeed#1#2% - {\def\currentnestedformulareference{#1}% - \def\currentnestedformulasuffix{#2}% - \strc_formulas_check_reference\c_strc_formulas_nested_number_mode\currentnestedformulareference + {\ifhastok={#1}% + \setupcurrentmathalignment[#1]% + \xdef\currentnestedformulareference{\mathalignmentparameter\c!reference}% + \xdef\currentnestedformulasuffix {\mathalignmentparameter\c!suffix}% + \global\d_math_eqalign_number_threshold\mathalignmentparameter\c!numberthreshold\relax + \orelse\ifhastok+{#1}% + \glet\currentnestedformulareference\empty + \xdef\currentnestedformulasuffix {+}% + \orelse\ifempty\currentplaceformulareference + \xdef\currentnestedformulareference{#1}% + \xdef\currentnestedformulasuffix {#2}% + \else + \glet\currentnestedformulareference\empty + \xdef\currentnestedformulasuffix {#1}% + \fi + \strc_formulas_place_number_nested_check} + +\def\strc_formulas_place_number_nested_check + {\ifempty\currentnestedformulareference + \ifempty\currentnestedformulasuffix \else + \c_strc_formulas_nested_number_mode\plusthree + \fi + \else + \strc_formulas_check_reference\c_strc_formulas_nested_number_mode\currentnestedformulareference + \fi \ifcase\c_strc_formulas_nested_number_mode % nothing \or \glet\strc_formulas_place_number\relax - \expandafter\strc_formulas_number % hm, looks ahead for [] + \strc_formulas_place_number_in_box \or % nothing \or \glet\strc_formulas_place_number\relax - \expandafter\strc_formulas_number % hm, looks ahead for [] + \strc_formulas_place_number_in_box \fi} \def\strc_formulas_place_number_indeed {\strc_formulas_place_number_in_box} -% \def\strc_formulas_place_number_in_box -% {\dostarttagged\t!formulacaption\empty -% \global\setbox\b_strc_formulas_number\naturalhbox{\strc_formulas_number_indeed}% -% \dostoptagged} +% \startplaceformula +% \startformula +% \startalign +% \NC a \NC = p \NR[eq:one] +% \NC b \NC = q \NR +% \NC c \NC = r \NR[eq:two] +% \NC d \NC = s \NR[eq:three] +% \stopalign +% \stopformula +% \stopplaceformula +% \stoptext \def\strc_formulas_place_number_in_box {\dostarttagged\t!formulacaption\empty - % this is really needed, otherwise we get spurious numbers probbaly due to some + % this is really needed, otherwise we get spurious numbers probably due to some % interference with other local variables .. also keep an eye on eqtest in the % MS tests - \glet\strc_formulas_place_number \relax - \glet\strc_formulas_place_number_nested\gobbletwoarguments + \glet\strc_formulas_place_number \relax + %\glet\strc_formulas_place_number_nested\gobbletwoarguments % \global\setbox\b_strc_formulas_number\naturalhbox{\strc_formulas_number_indeed}% \dostoptagged} -\def\strc_formulas_flush_number - {\ifcase\c_strc_formulas_mode - \ifzeropt\wd\b_strc_formulas_number - % nothing to be done - \orelse\ifx\p_location\v!left - \math_native_leqno{\box\b_strc_formulas_number}% - \else - \math_native_reqno{\box\b_strc_formulas_number}% - \fi - \fi} +\let\strc_formulas_flush_number\relax % todo @@ -1424,10 +1819,21 @@ {\setformulalistentry{#2}% \placeformula} +\def\strc_math_flush_aligned_boxed_direct_yes + {\dontleavehmode % NO! + \hskip-\leftskip % bah + \box\b_strc_math_display + \llap{\box\b_strc_formulas_number}} + +\def\strc_math_flush_aligned_boxed_direct_nop + {\dontleavehmode % NO! + \hskip-\leftskip % bah + \box\b_strc_math_display} + \mutable\let\namedformulaentry\empty % \relax % this will become a key/value so that we can do bookmarks \permanent\protected\def\setformulalistentry#1% - {\gdef\namedformulaentry{#1}} + {\xdef\namedformulaentry{#1}} %D New: %D diff --git a/tex/context/base/mkxl/strc-not.mklx b/tex/context/base/mkxl/strc-not.mklx index f6de80efe..fbe45b2e8 100644 --- a/tex/context/base/mkxl/strc-not.mklx +++ b/tex/context/base/mkxl/strc-not.mklx @@ -1387,22 +1387,33 @@ \setupnotes [\c!width=\v!auto] +% \permanent\protected\def\setnotehsize +% {\ifinsidemulticolumns +% \setnoteparameter\c!width{\makeupwidth}% +% \else +% \edef\p_width{\noteparameter\c!width}% +% \ifx\p_width\v!auto +% % \ifinsidecolumns +% \setnoteparameter\c!width{\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi}% +% % \else +% % \setnoteparameter\c!width{\makeupwidth}% +% % \fi +% \orelse\ifempty\p_width +% \setnoteparameter\c!width{\hsize}% +% \fi +% \fi +% \hsize\noteparameter\c!width\relax} +% +% We construct immediately and migrate so: + \permanent\protected\def\setnotehsize - {\ifinsidemulticolumns + {\edef\p_width{\noteparameter\c!width}% + \ifx\p_width\v!auto + % intercept old value + \let\p_width\makeupwidth \setnoteparameter\c!width{\makeupwidth}% - \else - \edef\p_width{\noteparameter\c!width}% - \ifx\p_width\v!auto - % \ifinsidecolumns - \setnoteparameter\c!width{\ifdim\hsize<\makeupwidth\hsize\else\makeupwidth\fi}% - % \else - % \setnoteparameter\c!width{\makeupwidth}% - % \fi - \orelse\ifempty\p_width - \setnoteparameter\c!width{\hsize}% - \fi - \fi - \hsize\noteparameter\c!width\relax} + \fi + \hsize\p_width\relax} \appendtoks % only needed when columns (could be three \set...) diff --git a/tex/context/base/mkxl/strc-num.mkxl b/tex/context/base/mkxl/strc-num.mkxl index 02674bce2..f0735b0e5 100644 --- a/tex/context/base/mkxl/strc-num.mkxl +++ b/tex/context/base/mkxl/strc-num.mkxl @@ -454,13 +454,17 @@ \def\strc_counters_register_component_list#1#2#3#4% {\xdef\currentstructurecomponentname {#2\s!name}% - \xdef\currentstructurecomponentlevel {#2\c!level}% + \xdef\currentstructurecomponentcounter {#2\s!counter}% + \xdef\currentstructurecomponentlevel {#2\s!haslevel}% \edef\currentstructurecomponentexpansion {#2\c!expansion}% \xdef\currentstructurecomponentxmlsetup {#2\c!xmlsetup}% \xdef\currentstructurecomponentcatcodes {#2\s!catcodes}% \xdef\currentstructurecomponentlabel {#2\c!label}% \xdef\currentstructurecomponentreference {#2\c!reference}% \xdef\currentstructurecomponentreferenceprefix{#2\c!referenceprefix}% + \ifempty\currentstructurecomponentcounter + \glet\currentstructurecomponentcounter\currentcounter + \fi \strc_counters_register_component_check_prefix \ifx\currentstructurecomponentexpansion\s!xml \xmlstartraw @@ -533,7 +537,7 @@ list {\detokenize\expandafter{\currentstructurecomponentlist}} \fi } - \ifx\p_hasnumber\v!yes + \ifx\p_hasnumber\v!yes\ifempty\currentstructurecomponentcounter\else prefixdata { prefix {#2\c!prefix} separatorset {#2\c!prefixseparatorset} @@ -545,10 +549,13 @@ connector {#2\c!prefixconnector} } numberdata { % more helpers here, like compact elsewhere - numbers {\currentcounter} + \ifempty\currentstructurecomponentlevel\else + level \currentstructurecomponentlevel + \fi + numbers {\currentstructurecomponentcounter} group {#2\c!group} groupsuffix {#2\c!groupsuffix} - counter {\currentcounter} + counter {\currentstructurecomponentcounter} separatorset {#2\c!numberseparatorset} conversion {#2\c!numberconversion} conversionset {#2\c!numberconversionset} @@ -556,7 +563,7 @@ stopper {#2\c!numberstopper} segments {#2\c!numbersegments} } - \fi + \fi\fi userdata {\detokenize{#4}} %} \relax diff --git a/tex/context/base/mkxl/strc-ref.lmt b/tex/context/base/mkxl/strc-ref.lmt index ddbb160ff..7ad20fa34 100644 --- a/tex/context/base/mkxl/strc-ref.lmt +++ b/tex/context/base/mkxl/strc-ref.lmt @@ -195,7 +195,7 @@ local nofreferred = 0 local function initializer() -- can we use a tobesaved as metatable for collected? tobereferred = references.tobereferred referred = references.referred - nofreferred = #referred + nofreferred = #referred end -- no longer done this way @@ -1854,7 +1854,7 @@ references.identify = identify local unknowns, nofunknowns, f_valid = { }, 0, formatters["[%s][%s]"] -function references.valid(prefix,reference,specification) +function references.valid(prefix,reference,specification,silent) local set, bug = identify(prefix,reference) local unknown = bug or #set == 0 if unknown then @@ -1862,7 +1862,7 @@ function references.valid(prefix,reference,specification) local str = f_valid(prefix,reference) local u = unknowns[str] if not u then - if somefound then + if somefound and not silent then interfaces.showmessage("references",1,str) -- 1 = unknown, 4 = illegal end unknowns[str] = 1 @@ -1880,6 +1880,10 @@ function references.valid(prefix,reference,specification) return not unknown end +function references.checked(prefix,reference,specification) + return references.valid(prefix,reference,specification,true) +end + implement { name = "doifelsereference", actions = { references.valid, commands.doifelse }, @@ -1894,6 +1898,20 @@ implement { } } +implement { + name = "doifelsereferencechecked", + actions = { references.checked, commands.doifelse }, + arguments = { + "string", + "string", + { + { "highlight", "boolean" }, + { "newwindow", "boolean" }, + { "layer" }, + } + } +} + logs.registerfinalactions(function() if nofunknowns > 0 then statistics.register("cross referencing", function() @@ -2064,7 +2082,7 @@ function references.setandgetattribute(data) -- maybe do internal automatically if ndat then local numbers = ndat.numbers if type(numbers) == "string" then - ndat.numbers = counters.compact(numbers,nil,true) + counters.compact(ndat,numbers) end data.numberdata = helpers.simplify(ndat) end diff --git a/tex/context/base/mkxl/strc-ref.mklx b/tex/context/base/mkxl/strc-ref.mklx index 61c1085f1..07c8c2c1b 100644 --- a/tex/context/base/mkxl/strc-ref.mklx +++ b/tex/context/base/mkxl/strc-ref.mklx @@ -693,6 +693,11 @@ \aliased\let\doifreferencefoundelse\doifelsereferencefound +\permanent\def\doifelsereferencechecked#label% + {\clf_doifelsereferencechecked{\referenceprefix}{#label}{\extrareferencearguments}} + +\aliased\let\doifcheckedreferencefoundelse\doifelsereferencechecked + %D The tester only splits the reference in components but does not look into them. %D The following macro does a preroll and determines for instance the current real %D reference pagenumber. The \type {\currentrealreference} macro does the same so diff --git a/tex/context/base/mkxl/strc-sec.mkxl b/tex/context/base/mkxl/strc-sec.mkxl index cb897d906..3973d0834 100644 --- a/tex/context/base/mkxl/strc-sec.mkxl +++ b/tex/context/base/mkxl/strc-sec.mkxl @@ -64,8 +64,12 @@ {\ifempty\currentstructurereferenceprefix % nothing \orelse\ifx\currentstructurereferenceprefix\m_strc_references_prefix_yes - \global\advance\prefixcounter \plusone % temp here - \setupglobalreferenceprefix[\the\prefixcounter]% + \ifempty\currentstructurereference + \global\advance\prefixcounter \plusone % temp here + \setupglobalreferenceprefix[\the\prefixcounter]% + \else + \setupglobalreferenceprefix[\currentstructurereference]% + \fi \orelse\ifx\currentstructurereferenceprefix\m_strc_references_prefix_nop \setupglobalreferenceprefix[]% \else diff --git a/tex/context/base/mkxl/supp-mat.mkxl b/tex/context/base/mkxl/supp-mat.mkxl index ef72e0e9a..c3c69593a 100644 --- a/tex/context/base/mkxl/supp-mat.mkxl +++ b/tex/context/base/mkxl/supp-mat.mkxl @@ -44,21 +44,21 @@ %D %D Which is implemented (in \type{syst-ini.mkiv}) as: -\permanent\protected\def\Ucheckedstartdisplaymath - {\ifinner - \ifhmode - \normalUstartmath - \let\Ucheckedstopdisplaymath\normalUstopmath - \else - \normalUstartdisplaymath - \let\Ucheckedstopdisplaymath\normalUstopdisplaymath - \fi - \else - \normalUstartdisplaymath - \let\Ucheckedstopdisplaymath\normalUstopdisplaymath - \fi} - -\aliased\let\Ucheckedstopdisplaymath\relax +% \permanent\protected\def\Ucheckedstartdisplaymath +% {\ifinner +% \ifhmode +% \normalUstartmath +% \let\Ucheckedstopdisplaymath\normalUstopmath +% \else +% \normalUstartdisplaymath +% \let\Ucheckedstopdisplaymath\normalUstopdisplaymath +% \fi +% \else +% \normalUstartdisplaymath +% \let\Ucheckedstopdisplaymath\normalUstopdisplaymath +% \fi} +% +% \aliased\let\Ucheckedstopdisplaymath\relax % \let\normalsuper\Usuperscript % obsolete % \let\normalsuber\Usubscript % obsolete @@ -69,8 +69,8 @@ \aliased\let\stopdmath \Ustopdisplaymath % \Ucheckedstopdisplaymath \permanent\protected\def\mathematics#1{\relax \ifmmode#1\else\normalstartimath#1\normalstopimath\fi} -\permanent\protected\def\displaymath#1{\noindent \ifmmode#1\else\normalstartdmath#1\normalstopdmath\fi} -\permanent\protected\def\inlinemath #1{\dontleavehmode\ifmmode#1\else\normalstartimath#1\normalstopimath\fi} +%permanent\protected\def\displaymath#1{\noindent \ifmmode#1\else\normalstartdmath#1\normalstopdmath\fi} +%permanent\protected\def\inlinemath #1{\dontleavehmode\ifmmode#1\else\normalstartimath#1\normalstopimath\fi} \permanent\protected\def\textmath #1{\dontleavehmode\ifmmode#1\else\begingroup\everymath\emptytoks\normalstartimath#1\normalstopimath\endgroup\fi} % \mathsurround\zeropoint \aliased\let\stopmathmode\relax @@ -93,17 +93,23 @@ %D \macros %D {displaymathematics,inlinemathematics,automathematics} %D -%D An example of usage of the following can be found in the MathML module: +%D We no longer support native displaymath, which is no big deal because already +%D for many years we abandoned it. We therefore also default differently now. We +%D signal \LUAMETATEX\ that the double dollar mode actually has to be inline +%D display math anyway. \ifdefined\strc_formulas_start_formula \else - \def\strc_formulas_start_formula{\normalstartdmath} - \def\strc_formulas_stop_formula {\normalstopdmath } + \def\strc_formulas_start_formula{\normalstartdmath} + \def\strc_formulas_stop_formula {\normalstopdmath } \fi \permanent\protected\def\displaymathematics#1{\relax\ifmmode#1\else\strc_formulas_start_formula{}#1\strc_formulas_stop_formula\fi} \permanent\protected\def\inlinemathematics {\dontleavehmode\mathematics} %permanent\protected\def\automathematics {\relax\ifhmode\expandafter\inlinemathematics\else\expandafter\displaymathematics\fi} +\aliased\let\displaymath\displaymathematics % we no longer support native displaymath +\aliased\let\inlinemath \inlinemathematics % we no longer support native displaymath + % better, esp when used in bTABLE ... eTABLE \permanent\protected\def\automathematics diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl index 3c327c047..d94579548 100644 --- a/tex/context/base/mkxl/syst-ini.mkxl +++ b/tex/context/base/mkxl/syst-ini.mkxl @@ -508,6 +508,7 @@ \newdimen\scratchwidth \newdimen\scratchheight \newdimen\scratchdepth +\newdimen\scratchitalic \newdimen\scratchtotal \newdimen\scratchoffset @@ -567,7 +568,13 @@ \immutable\dimensiondef \scaledpoint 1sp \immutable\dimensiondef \thousandpoint 1000pt -\immutable\gluespecdef \zeroskip 0pt plus 0pt minus 0pt +\immutable\gluespecdef \zeroskip \zeropoint plus \zeropoint minus \zeropoint +\immutable\gluespecdef \centeringskip \zeropoint plus \thousandpoint minus \thousandpoint +\immutable\gluespecdef \stretchingskip \zeropoint plus \thousandpoint +\immutable\gluespecdef \shrinkingskip \zeropoint minus \thousandpoint +\immutable\gluespecdef \centeringfillskip \zeropoint plus 1fill minus 1fill +\immutable\gluespecdef \stretchingfillskip \zeropoint plus 1fill +\immutable\gluespecdef \shrinkingfillskip \zeropoint minus 1fill \immutable\mugluespecdef \zeromuskip 0mu \immutable\mugluespecdef \onemuskip 1mu @@ -1147,16 +1154,16 @@ %D Again a few kind-of-extensions the core. These come from plain \TEX\ but are %D probably not used in \CONTEXT. -\newskip \hideskip \hideskip = -1000pt plus 1fill -\newskip \centering \centering = 0pt plus 1000pt minus 1000pt +\newskip \hideskip \hideskip = -1000pt plus 1fill % obsolete +\newskip \centering \centering = 0pt plus 1000pt minus 1000pt % obsolete -\permanent\def\hidewidth % for alignment entries that can stick out - {\hskip\hideskip} - -\permanent\def\ialign % initialized \halign, to be used grouped! - {\everycr\emptytoks - \tabskip\zeroskip - \halign} +% \permanent\def\hidewidth % for alignment entries that can stick out +% {\hskip\hideskip} +% +% \permanent\def\ialign % initialized \halign, to be used grouped! +% {\everycr\emptytoks +% \tabskip\zeroskip +% \halign} \newcount \mscount @@ -1249,10 +1256,6 @@ \immutable\integerdef\eTeXversion 2 \immutable\def \eTeXrevision {2} -%D Experiment: - -\glyphoptions"80 % replaces \glyphdimensionsmode=1 - %D Just in case users use this (or some styles still have it): \aliased\let\immediateassignment\immediate diff --git a/tex/context/base/mkxl/tabl-ntb.mkxl b/tex/context/base/mkxl/tabl-ntb.mkxl index 644d156e6..33e68a4cb 100644 --- a/tex/context/base/mkxl/tabl-ntb.mkxl +++ b/tex/context/base/mkxl/tabl-ntb.mkxl @@ -372,6 +372,8 @@ \def\tabl_ntb_get_dis#1{\ifcsname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\lastnamedcs\else\zeropoint\fi} \def\tabl_ntb_get_aut#1{\csname \??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname} +% \i ntegerdef + \def\tabl_ntb_let_bck#1#2{\global\expandafter\chardef\csname\??naturaltablebck\m_tabl_tbl_level:\number#1:\number#2\endcsname} \def\tabl_ntb_get_bck#1#2{\csname\??naturaltablebck\m_tabl_tbl_level:\number#1:\number#2\endcsname} diff --git a/tex/context/base/mkxl/tabl-tab.mkxl b/tex/context/base/mkxl/tabl-tab.mkxl index 01e665d02..d8a71943c 100644 --- a/tex/context/base/mkxl/tabl-tab.mkxl +++ b/tex/context/base/mkxl/tabl-tab.mkxl @@ -259,9 +259,9 @@ \def\!tfComputeMinColWidth {\setbox\scratchbox\vbox - {\ialign{% Plain's initialized \halign; \tabskip=0pt \everycr={} - \span\the\!taDataColumnTemplate\cr - \!tfWidthText\cr}}% + {\everycr\emptytoks + \tabskip\zeroskip + \halign{\span\the\!taDataColumnTemplate\cr\!tfWidthText\cr}}% \!taMinimumColumnWidth\wd\scratchbox} \def\!tfFinishFormat @@ -298,7 +298,11 @@ \def\!tfReFormat#1% {\the \!taLeftGlue - \vbox{\forgetall\ialign{\span\the\!taDataColumnTemplate\cr#1\cr}}% + \vbox + {\forgetall + \everycr\emptytoks + \tabskip\zeroskip + \halign{\span\the\!taDataColumnTemplate\cr#1\cr}}% \the \!taRightGlue \kern\zeropoint} % prevents \unskip / really needed diff --git a/tex/context/base/mkxl/tabl-tbl.mkxl b/tex/context/base/mkxl/tabl-tbl.mkxl index cd3d3d02d..ac2eae49f 100644 --- a/tex/context/base/mkxl/tabl-tbl.mkxl +++ b/tex/context/base/mkxl/tabl-tbl.mkxl @@ -1968,7 +1968,7 @@ % % can we omit the next one in the first run? probably % \noalign{\the\t_tabl_tabulate_every_after_row#2}} -\permanent\protected\def\tabl_tabulate_NR_common#1#2#.#3% #. gobbles pars and spaces +\permanent\tolerant\protected\def\tabl_tabulate_NR_common#1#2#.#3% #. gobbles pars and spaces {\global\advance\c_tabl_tabulate_noflines\plusone \global\setfalse\c_tabl_tabulate_firstflushed \global\setfalse\c_tabl_tabulate_equal diff --git a/tex/context/base/mkxl/tabl-xtb.lmt b/tex/context/base/mkxl/tabl-xtb.lmt index 32770141b..3d91ccb85 100644 --- a/tex/context/base/mkxl/tabl-xtb.lmt +++ b/tex/context/base/mkxl/tabl-xtb.lmt @@ -1266,7 +1266,7 @@ implement { } } -implement { name = "x_table_reflow_width", actions = xtables.reflow_width } +implement { name = "x_table_reflow_width", actions = xtables.reflow_width } implement { name = "x_table_reflow_height", actions = xtables.reflow_height } implement { name = "x_table_construct", actions = xtables.construct } implement { name = "x_table_cleanup", actions = xtables.cleanup } diff --git a/tex/context/base/mkxl/task-ini.lmt b/tex/context/base/mkxl/task-ini.lmt index 8a4d492e0..fcaad17e3 100644 --- a/tex/context/base/mkxl/task-ini.lmt +++ b/tex/context/base/mkxl/task-ini.lmt @@ -119,7 +119,7 @@ appendaction("math", "normalizers", "noads.handlers.classes", appendaction("math", "builders", "builders.kernel.mlisttohlist", nil, "nut", "enabled" ) -- mandate appendaction("math", "builders", "typesetters.directions.processmath", nil, "nut", "disabled" ) appendaction("math", "builders", "noads.handlers.makeup", nil, "nonut", "disabled" ) -appendaction("math", "builders", "noads.handlers.align", nil, "nonut", "enabled" ) +------------("math", "builders", "noads.handlers.align", nil, "nonut", "enabled" ) appendaction("math", "finalizers", "noads.handlers.normalize", nil, "nonut", "enabled" ) appendaction("math", "finalizers", "noads.handlers.snap", nil, "nonut", "disabled" ) @@ -159,7 +159,9 @@ appendaction("vboxhandlers", "normalizers", "nodes.adaptive.handlevertical", appendaction("everypar", "normalizers", "nodes.handlers.checkparcounter", nil, "nut", "disabled" ) +appendaction("alignments", "normalizers", "nodes.handlers.showpreamble", nil, "nut", "enabled" ) appendaction("alignments", "normalizers", "nodes.handlers.aligncharacter", nil, "nut", "disabled" ) +appendaction("alignments", "normalizers", "nodes.handlers.fixmathalign", nil, "nut", "enabled" ) -- maybe delay appendaction("localboxes", "lists", "typesetters.localboxes.handler", nil, "nut", "enabled" ) diff --git a/tex/context/base/mkxl/toks-aux.lmt b/tex/context/base/mkxl/toks-aux.lmt index 9377bad42..c152afb36 100644 --- a/tex/context/base/mkxl/toks-aux.lmt +++ b/tex/context/base/mkxl/toks-aux.lmt @@ -157,7 +157,7 @@ local function getthem(getter,post) for k, v in next, getter() do codes[k] = gsub(v,"[_ ]","") end - if post ~= "" then + if post and post ~= "" then if environment.initex then for k, v in next, codes do texintegerdef(v .. post,k,"immutable") @@ -176,23 +176,25 @@ local function getthem(getter,post) return utilities.storage.allocate(table.swapped(codes,codes)) end -tex.discoptioncodes = getthem(tex.getdiscoptionvalues, "discoptioncode") -tex.flagcodes = getthem(tex.getflagvalues, "flagcode" ) -tex.frozenparcodes = getthem(tex.getfrozenparvalues, "frozenparcode") -tex.glyphoptioncodes = getthem(tex.getglyphoptionvalues, "glyphoptioncode") -tex.groupcodes = getthem(tex.getgroupvalues, "groupcode") -tex.hyphenationcodes = getthem(tex.gethyphenationvalues, "hyphenationcode") -tex.mathcontrolcodes = getthem(tex.getmathcontrolvalues, "mathcontrolcode") ----.mathflattencodes = getthem(tex.getmathflattenvalues, "mathflattencode") -tex.noadoptioncodes = getthem(tex.getnoadoptionvalues, "") -- only at lua end -tex.normalizelinecodes = getthem(tex.getnormalizelinevalues, "normalizecode") -- we keep the short name -tex.normalizeparcodes = getthem(tex.getnormalizeparvalues, "normalizeparcode") -tex.automigrationcodes = getthem(tex.getautomigrationvalues, "automigrationcode") -- only at lua end -tex.parcontextcodes = getthem(tex.getparcontextvalues, "parcontextcode") -tex.textcontrolcodes = getthem(tex.gettextcontrolvalues, "") -- only at lua end -tex.listanchorcodes = getthem(tex.getlistanchorvalues, "listanchorcode") -tex.listsigncodes = getthem(tex.getlistsignvalues, "listsigncode") -tex.classoptioncodes = getthem(tex.getmathclassoptionvalues, "classoptioncode") +tex.discoptioncodes = getthem(tex.getdiscoptionvalues, "discoptioncode") +tex.flagcodes = getthem(tex.getflagvalues, "flagcode" ) +tex.frozenparcodes = getthem(tex.getfrozenparvalues, "frozenparcode") +tex.glyphoptioncodes = getthem(tex.getglyphoptionvalues, "glyphoptioncode") +tex.groupcodes = getthem(tex.getgroupvalues, "groupcode") +tex.hyphenationcodes = getthem(tex.gethyphenationvalues, "hyphenationcode") +tex.mathcontrolcodes = getthem(tex.getmathcontrolvalues, "mathcontrolcode") +---.mathflattencodes = getthem(tex.getmathflattenvalues, "mathflattencode") +tex.noadoptioncodes = getthem(tex.getnoadoptionvalues ) -- only at lua end +tex.normalizelinecodes = getthem(tex.getnormalizelinevalues, "normalizecode") -- we keep the short name +tex.normalizeparcodes = getthem(tex.getnormalizeparvalues, "normalizeparcode") +tex.automigrationcodes = getthem(tex.getautomigrationvalues, "automigrationcode") +tex.parcontextcodes = getthem(tex.getparcontextvalues, "parcontextcode") +tex.textcontrolcodes = getthem(tex.gettextcontrolvalues ) -- only at lua end +tex.listanchorcodes = getthem(tex.getlistanchorvalues, "listanchorcode") +tex.listsigncodes = getthem(tex.getlistsignvalues, "listsigncode") +tex.classoptioncodes = getthem(tex.getmathclassoptionvalues, "classoptioncode") +---.alignmentcontextcodes = getthem(tex.getalignmentcontextvalues ) -- only at lua end +tex.specialmathclasscodes = getthem(tex.getspecialmathclassvalues ) -- only at lua end function tex.stringtocodesbitmap(str,codes) local bitmap = 0 diff --git a/tex/context/base/mkxl/trac-vis.lmt b/tex/context/base/mkxl/trac-vis.lmt index d277095a3..ca6b98fc1 100644 --- a/tex/context/base/mkxl/trac-vis.lmt +++ b/tex/context/base/mkxl/trac-vis.lmt @@ -58,6 +58,7 @@ local getexpansion = nuts.getexpansion local getstate = nuts.getstate local getoffsets = nuts.getoffsets local getindex = nuts.getindex +local getprop = nuts.getprop local isglyph = nuts.isglyph @@ -137,10 +138,10 @@ local modes = { space = 0x0040000, depth = 0x0080000, marginkern = 0x0100000, - mathkern = 0x0200000, + mathkern = 0x0200000, -- dir = 0x0400000, par = 0x0800000, - mathglue = 0x1000000, + mathglue = 0x1000000, -- mark = 0x2000000, insert = 0x4000000, boundary = 0x8000000, @@ -375,7 +376,6 @@ for mode, value in next, modes do end local fraction = 10 -local normalize = true trackers .register("visualizers.reset", function(v) set("reset", v) end) trackers .register("visualizers.all", function(v) set("all", v) end) @@ -1026,6 +1026,8 @@ local ruledglue, ruledmathglue do local righthangskip_code = gluecodes.righthangskip local parfillleftskip_code = gluecodes.parfillleftskip or parfillskip_code local parfillrightskip_code = gluecodes.parfillrightskip or parfillskip_code + local parinitleftskip_code = gluecodes.parinitleftskip + local parinitrightskip_code = gluecodes.parinitrightskip local indentskip_code = gluecodes.indentskip local intermathskip_code = gluecodes.intermathskip local correctionskip_code = gluecodes.correctionskip @@ -1033,16 +1035,10 @@ local ruledglue, ruledmathglue do local g_cache_v = caches["vglue"] local g_cache_h = caches["hglue"] - local g_cache_ls = caches["leftskip"] - local g_cache_rs = caches["rightskip"] - local g_cache_lh = caches["lefthang"] - local g_cache_rh = caches["righthang"] - local g_cache_lp = caches["parfillleftskip"] - local g_cache_rp = caches["parfillrightskip"] - local g_cache_is = caches["indentskip"] - local g_cache_cs = caches["correctionskip"] + local g_cache_gn = caches["gluename"] local g_cache_gz = caches["gluezero"] + local g_cache_gf = caches["gluefixed"] local tags = { -- [userskip_code] = "US", @@ -1077,8 +1073,8 @@ local ruledglue, ruledmathglue do [zerospaceskip_code] = "ZS", [parfillleftskip_code] = "PL", [parfillrightskip_code] = "PR", - [gluecodes.parinitleftskip] = "IL", - [gluecodes.parinitrightskip] = "IR", + [parinitleftskip_code] = "IL", + [parinitrightskip_code] = "IR", [indentskip_code] = "IN", [correctionskip_code] = "CS", } @@ -1088,72 +1084,84 @@ local ruledglue, ruledmathglue do [righthangskip_code] = 0.5, [leftskip_code] = -2, [rightskip_code] = -2, + [parinitleftskip_code] = -1.3775, + [parinitrightskip_code] = -1.3775, [parfillleftskip_code] = -0.75, [parfillrightskip_code] = -0.75, } - -- we sometimes pass previous as we can have issues in math (not watertight for all) - - local f_amount = formatters["%s:%0.3f"] - local mathvalues = nodes.mathvalues - - mathvalues[-1] = "left" - mathvalues[-2] = "right" - - local morehack = setmetatableindex(function(t,k) - local v = mathematics.classnames[k] -- yet unknown --- v = v and string.sub(v,1,4) or string.formatters["x%02x"](k) - v = v and string.sub(v,1,3) or string.formatters["x%02x"](k) - t[k] = v - return v - end) - - local temphack = setmetatableindex(function(t,k) - local v = mathvalues[k] - if v then - v = gsub(v,"spacing","") -- old - else - v = k - 256 - v = morehack[v//64] ..morehack[v%64] - end - t[k] = v - return v - end) - - local function gluename(current,layer,color) - local name = getfont(current) - local zero = iszeroglue(current) - local info = zero and g_cache_gz[name] or g_cache_gn[name] - if not info then - local text = hpack_string(temphack[name],usedfont) - local rule = new_rule(emwidth/fraction,2*exheight,(zero and 4.25 or 2.75)*exheight) - local list = getlist(text) - setlisttransparency(list,color) - settransparency(rule,color) - setshift(text,(zero and 3.5 or 2)*exheight) - info = new_hlist(setlink(rule,text)) - setattr(info,a_layer,layer) - g_cache_gn[name] = info - end - return copylist(info) - end - - ruledmathglue = function(head,current) - return insertnodebefore(head,current,gluename(current,l_glue,"trace:m")) - end + local f_amount = formatters["%s:%0.3f"] + +-- ruledglue = function(head,current,vertical,parent) +-- local subtype = getsubtype(current) +-- local width = effectiveglue(current,parent) +-- local stag = stags[subtype] +-- local amount = f_amount(tags[subtype] or (vertical and "VS") or "HS",width*pt_factor) -- can be sped up +-- local info = (vertical and g_cache_v or g_cache_h)[amount] +-- if subtype == intermathskip_code then +-- head = ruledmathglue(head, current) +-- end +-- if info then +-- -- print("glue hit") +-- else +-- if subtype == spaceskip_code or subtype == xspaceskip_code or subtype == zerospaceskip_code then +-- info = sometext(amount,l_glue,"trace:y") +-- elseif subtype == userskip_code then +-- if width > 0 then +-- info = sometext(amount,l_glue,"trace:b") +-- elseif width < 0 then +-- info = sometext(amount,l_glue,"trace:r") +-- else +-- info = sometext(amount,l_glue,"trace:g") +-- end +-- elseif subtype == tabskip_code then +-- info = sometext(amount,l_glue,"trace:s") +-- elseif subtype == indentskip_code or subtype == correctionskip_code then +-- info = sometext(amount,l_glue,"trace:s") +-- elseif subtype == leftskip_code then +-- info = sometext(amount,l_glue,"trace:y",false,true,stag) +-- elseif subtype == rightskip_code then +-- info = sometext(amount,l_glue,"trace:y",false,false,stag) +-- elseif subtype == lefthangskip_code then +-- info = sometext(amount,l_glue,"trace:y",false,true,stag) +-- elseif subtype == righthangskip_code then +-- info = sometext(amount,l_glue,"trace:y",false,false,stag) +-- elseif subtype == parfillleftskip_code then +-- info = sometext(amount,l_glue,"trace:s",false,true,stag) +-- elseif subtype == parfillrightskip_code then +-- info = sometext(amount,l_glue,"trace:s",false,false,stag) +-- elseif subtype == parinitleftskip_code then +-- info = sometext(amount,l_glue,"trace:s",false,true,stag) +-- elseif subtype == parinitrightskip_code then +-- info = sometext(amount,l_glue,"trace:s",false,false,stag) +-- else +-- info = sometext(amount,l_glue,"trace:m") +-- end +-- (vertical and g_cache_v or g_cache_h)[amount] = info +-- end +-- info = copylist(info) +-- if vertical then +-- info = vpack_nodes(info) +-- end +-- head, current = insertnodebefore(head,current,info) +-- return head, getnext(current) +-- end + + local g_caches = { } for k, v in next, tags do g_caches[k] = caches[v] end ruledglue = function(head,current,vertical,parent) local subtype = getsubtype(current) local width = effectiveglue(current,parent) - local stag = normalize and stags[subtype] - local amount = f_amount(tags[subtype] or (vertical and "VS") or "HS",width*pt_factor) -- can be sped up - local info = (vertical and g_cache_v or g_cache_h)[amount] + local stag = stags[subtype] + local cache = g_caches[subtype] or (vertical and g_cache_v) or g_cache_h + local info = cache[amount] if subtype == intermathskip_code then head = ruledmathglue(head, current) end if info then -- print("glue hit") else + local amount = f_amount(tags[subtype] or (vertical and "VS") or "HS",width*pt_factor) if subtype == spaceskip_code or subtype == xspaceskip_code or subtype == zerospaceskip_code then info = sometext(amount,l_glue,"trace:y") elseif subtype == userskip_code then @@ -1169,21 +1177,25 @@ local ruledglue, ruledmathglue do elseif subtype == indentskip_code or subtype == correctionskip_code then info = sometext(amount,l_glue,"trace:s") elseif subtype == leftskip_code then - info = sometext(amount,l_glue,normalize and "trace:y" or "trace:c",false,true,stag) + info = sometext(amount,l_glue,"trace:y",false,true,stag) elseif subtype == rightskip_code then - info = sometext(amount,l_glue,normalize and "trace:y" or "trace:c",false,false,stag) + info = sometext(amount,l_glue,"trace:y",false,false,stag) elseif subtype == lefthangskip_code then - info = sometext(amount,l_glue,normalize and "trace:y" or "trace:m",false,true,stag) + info = sometext(amount,l_glue,"trace:y",false,true,stag) elseif subtype == righthangskip_code then - info = sometext(amount,l_glue,normalize and "trace:y" or "trace:m",false,false,stag) + info = sometext(amount,l_glue,"trace:y",false,false,stag) elseif subtype == parfillleftskip_code then info = sometext(amount,l_glue,"trace:s",false,true,stag) elseif subtype == parfillrightskip_code then info = sometext(amount,l_glue,"trace:s",false,false,stag) + elseif subtype == parinitleftskip_code then + info = sometext(amount,l_glue,"trace:s",false,true,stag) + elseif subtype == parinitrightskip_code then + info = sometext(amount,l_glue,"trace:s",false,false,stag) else info = sometext(amount,l_glue,"trace:m") end - (vertical and g_cache_v or g_cache_h)[amount] = info + cache[amount] = info end info = copylist(info) if vertical then @@ -1218,6 +1230,78 @@ local ruledglue, ruledmathglue do return head, getnext(current) end + -- we sometimes pass previous as we can have issues in math (not watertight for all) + + local mathvalues = nodes.mathvalues + + mathvalues[-1] = "left" + mathvalues[-2] = "right" + + local morehack = setmetatableindex(function(t,k) + local v = mathematics.classnames[k] -- yet unknown + v = v and string.sub(v,1,3) or string.formatters["x%02x"](k) + t[k] = v + return v + end) + + local temphack = setmetatableindex(function(t,k) + local v = mathvalues[k] + if v then + v = gsub(v,"spacing","") -- old, quads and so + else + v = k - 256 + v = morehack[v//64] .. morehack[v%64] + end + t[k] = v + return v + end) + + local g_cache_qd = caches["mathquad"] + + ruledmathglue = function(head,current,parent) + local name = getfont(current) + local zero = iszeroglue(current) + local fixed = getprop(current,"fixedmathalign") + local color = false + local info = zero and g_cache_gz[name] + local quad = name == 0 + local width = quad and effectiveglue(current,parent) + if not info then + if quad then + info = g_cache_qd[width] + color = "trace:z" + elseif fixed then + info = g_cache_gf[name] + color = "trace:dr" + else + info = g_cache_gn[name] + color = "trace:z" + end + end + if not info then + local amount = quad and f_amount("QUAD",width*pt_factor) or temphack[name] + -- local amount = quad and f_amount("QD",width*pt_factor) or temphack[name] + local text = hpack_string(amount,usedfont) + local rule = new_rule(emwidth/fraction,2*exheight,(zero and 4.25 or 2.75)*exheight) + local list = getlist(text) + setlistcolor(list,color) + setcolor(rule,color) + setlisttransparency(list,color) + settransparency(rule,color) + setshift(text,(zero and 3.5 or 2)*exheight) + info = new_hlist(setlink(rule,text)) + setattr(info,a_layer,l_glue) + if quad then + g_cache_qd[width] = info + elseif fixed then + g_cache_gf[name] = info + else + g_cache_gn[name] = info + end + end + return insertnodebefore(head,current,copylist(info)) + end + end local ruledkern do @@ -1373,32 +1457,41 @@ local ruledpenalty do local p_cache_v = caches["vpenalty"] local p_cache_h = caches["hpenalty"] + local p_cache_m = caches["mpenalty"] local raisepenalties = false - local getpenalty = nuts.getpenalty + local getpenalty = nuts.getpenalty + local pre_penalty_code = nodes.penaltycodes.mathprepenalty + local post_penalty_code = nodes.penaltycodes.mathpostpenalty directives.register("visualizers.raisepenalties",function(v) raisepenalties = v end) - ruledpenalty = function(head,current,vertical) + ruledpenalty = function(head,current,vertical,subtype) local penalty = getpenalty(current) - local info = (vertical and p_cache_v or p_cache_h)[penalty] + local ismath = subtype == pre_penalty_code or subtype == post_penalty_code + local cache = (ismath and p_cache_m) or (vertical and p_cache_v) or p_cache_h + local info = cache[penalty] if info then -- print("penalty hit") else - local amount = formatters["%s:%s"](vertical and "VP" or "HP",penalty) - if penalty > 0 then + local amount = formatters["%s:%s"]((ismath and "MP") or (vertical and "VP") or "HP",penalty) + if ismath then + info = sometext(amount,l_penalty,"trace:s") + elseif penalty > 0 then info = sometext(amount,l_penalty,"trace:b") elseif penalty < 0 then info = sometext(amount,l_penalty,"trace:r") else info = sometext(amount,l_penalty,"trace:g") end - (vertical and p_cache_v or p_cache_h)[penalty] = info + cache[penalty] = info end info = copylist(info) if vertical then info = vpack_nodes(info) + elseif ismath then + setshift(info, 65536*4) elseif raisepenalties then setshift(info,-65536*4) end @@ -1446,6 +1539,7 @@ do local listcodes = nodes.listcodes local linelist_code = listcodes.line + local rowlist_code = listcodes.alignment local vtop_package_state = 3 -- todo: symbolic @@ -1602,7 +1696,8 @@ do goto glue elseif id == penalty_code then if trace_penalty then - head, current = ruledpenalty(head,current,vertical) + subtype = getsubtype(current) + head, current = ruledpenalty(head,current,vertical,subtype) end elseif id == hlist_code or id == vlist_code then goto list @@ -1716,7 +1811,7 @@ do if trace_depth then ruleddepth(current) end - if trace_line and getsubtype(current) == linelist_code then + if trace_line and (getsubtype(current) == linelist_code or getsubtype(current) == rowlist_code) then head, current = ruledbox(head,current,false,l_line,"L__",trace_simple,previous,trace_origin,parent) elseif trace_hbox then head, current = ruledbox(head,current,false,l_hbox,"H__",trace_simple,previous,trace_origin,parent) diff --git a/tex/context/base/mkxl/type-set.mkxl b/tex/context/base/mkxl/type-set.mkxl index adbd9a17a..8a11888e5 100644 --- a/tex/context/base/mkxl/type-set.mkxl +++ b/tex/context/base/mkxl/type-set.mkxl @@ -61,6 +61,7 @@ \definefilesynonym [type-imp-latin-modern.mkiv] [type-imp-latinmodern.mkiv] \definefilesynonym [type-imp-modern-latin.mkiv] [type-imp-modernlatin.mkiv] +\definefilesynonym [type-imp-less-modern-latin.mkiv] [type-imp-modernlatin.mkiv] \definefilesynonym [type-imp-lucida.mkiv] [type-imp-lucida-typeone.mkiv] \definefilesynonym [type-imp-lucidaot.mkiv] [type-imp-lucida-opentype.mkiv] @@ -142,4 +143,7 @@ \definefilesynonym [type-imp-kpfonts-bold.mkiv] [type-imp-kpfonts.mkiv] \definefilesynonym [type-imp-kpfonts-sans.mkiv] [type-imp-kpfonts.mkiv] +\definefilesynonym [type-imp-gentiumplus.mkiv] [type-imp-gentium.mkiv] +\definefilesynonym [type-imp-gentiumbook.mkiv] [type-imp-gentium.mkiv] + \protect \endinput diff --git a/tex/context/base/mkxl/typo-bld.lmt b/tex/context/base/mkxl/typo-bld.lmt index 1a581e118..0920eeafd 100644 --- a/tex/context/base/mkxl/typo-bld.lmt +++ b/tex/context/base/mkxl/typo-bld.lmt @@ -188,7 +188,7 @@ end function constructors.enable () enabled = true end function constructors.disable() enabled = false end -registercallback('linebreak_filter', processor, "breaking paragraps into lines") +registercallback("linebreak_filter", processor, "breaking paragraps into lines") statistics.register("linebreak processing time", function() return statistics.elapsedseconds(parbuilders) @@ -356,7 +356,7 @@ local function hpack_quality(how,detail,n,first,last,filename) setcolor(rule,"cyan") end rule = hpack(rule) - setwidth(rule,0) + setwidth(rule,0) -- maybe better whd all zero setdirection(rule,direction) return tonode(rule) -- can be a nut end diff --git a/tex/context/base/mkxl/typo-lbx.lmt b/tex/context/base/mkxl/typo-lbx.lmt index 5517f3c2f..ac67959d6 100644 --- a/tex/context/base/mkxl/typo-lbx.lmt +++ b/tex/context/base/mkxl/typo-lbx.lmt @@ -217,7 +217,7 @@ do lb_parinitrightskip = parinitrightskip lb_overshoot = overshoot lb_linewidth = getwidth(line) - -- only true for soem cases + -- only true for some cases lb_leftoffset = leftskip + lefthang + parfillleftskip + parinitleftskip + indent lb_rightoffset = rightskip + righthang + parfillrightskip + parinitrightskip - overshoot -- diff --git a/tex/context/fonts/mkiv/asana-math.lfg b/tex/context/fonts/mkiv/asana-math.lfg index 6177cb831..afa59d40a 100644 --- a/tex/context/fonts/mkiv/asana-math.lfg +++ b/tex/context/fonts/mkiv/asana-math.lfg @@ -1,34 +1,28 @@ -- This patch code is moved from font-pat.lua to this goodies -- files as it does not belong in the core code. +-- +-- local patches = fonts.handlers.otf.enhancers.patches +-- +-- local function patch(data,filename,threshold) +-- local m = data.metadata.math +-- if m then +-- local d = m.DisplayOperatorMinHeight or 0 +-- if d < threshold then +-- patches.report("DisplayOperatorMinHeight(%s -> %s)",d,threshold) +-- m.DisplayOperatorMinHeight = threshold +-- end +-- end +-- end +-- +-- patches.register("after","analyze math","asana",function(data,filename) patch(data,filename,1350) end) +-- +-- local function less(value,target,original) +-- -- officially we should check the original +-- return 0.25 * value +-- end -local patches = fonts.handlers.otf.enhancers.patches - -local function patch(data,filename,threshold) - local m = data.metadata.math - if m then - local d = m.DisplayOperatorMinHeight or 0 - if d < threshold then - patches.report("DisplayOperatorMinHeight(%s -> %s)",d,threshold) - m.DisplayOperatorMinHeight = threshold - end - end -end - -patches.register("after","analyze math","asana",function(data,filename) patch(data,filename,1350) end) - -local function less(value,target,original) - -- officially we should check the original - return 0.25 * value -end - -local function more(value,target,original) - local o = original.mathparameters.DisplayOperatorMinHeight - if o < 2800 then - return 2800 * target.parameters.factor - else - return value -- already scaled - end -end +-- Just don't use this font. It's not good enough for production unless we patch it +-- a lot, which we will not do unless we need it. return { name = "asana-math", @@ -38,30 +32,24 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - -- DisplayOperatorMinHeight = 0, -- more - -- StackBottomDisplayStyleShiftDown = 0, - -- StackBottomShiftDown = 0, - -- StackDisplayStyleGapMin = 0, - -- StackGapMin = 0, - -- StackTopDisplayStyleShiftUp = 0, - -- StackTopShiftUp = 0, - -- StretchStackBottomShiftDown = 0, - -- StretchStackGapAboveMin = 0, - -- StretchStackGapBelowMin = 0, - -- StretchStackTopShiftUp = 0, - StackBottomDisplayStyleShiftDown = less, - StackBottomShiftDown = less, - StackDisplayStyleGapMin = less, - StackGapMin = less, - StackTopDisplayStyleShiftUp = less, - StackTopShiftUp = less, - StretchStackBottomShiftDown = less, - StretchStackGapAboveMin = less, - StretchStackGapBelowMin = less, - StretchStackTopShiftUp = less, - NoLimitSupFactor = 0, + -- StackBottomDisplayStyleShiftDown = less, + -- StackBottomShiftDown = less, + -- StackDisplayStyleGapMin = less, + -- StackGapMin = less, + -- StackTopDisplayStyleShiftUp = less, + -- StackTopShiftUp = less, + -- StretchStackBottomShiftDown = less, + -- StretchStackGapAboveMin = less, + -- StretchStackGapBelowMin = less, + -- StretchStackTopShiftUp = less, + NoLimitSupFactor = -200, NoLimitSubFactor = 1200, AccentBaseDepth = 300, + RadicalDegreeBottomRaisePercent = 70, + RadicalRuleThickness = 66, -- 59 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1250 in font }, tweaks = { aftercopying = { diff --git a/tex/context/fonts/mkiv/bonum-math.lfg b/tex/context/fonts/mkiv/bonum-math.lfg index f946e2a80..3b3f02343 100644 --- a/tex/context/fonts/mkiv/bonum-math.lfg +++ b/tex/context/fonts/mkiv/bonum-math.lfg @@ -25,9 +25,16 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - AccentBaseDepth = 50, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + AccentBaseDepth = 50, + RadicalDegreeBottomRaisePercent = 60, + RadicalRuleThickness = 66, -- 72 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1900, -- 1250 in font + -- AccentSuperscriptDrop = 100, + -- AccentSuperscriptPercent = 20, }, tweaks = { aftercopying = { @@ -37,136 +44,334 @@ return { }, { tweak = "dimensions", - list = { -- offset width italic - [0x00393] = { -0.05, 0.875, 0 }, -- \Gamma - [0x00394] = { -0.05, 0.875, 0 }, -- \Delta - [0x00398] = { -0.05, 0.9, 0 }, -- \Theta - [0x0039B] = { -0.075, 0.85, 0 }, -- \Lambda - [0x0039E] = { -0.075, 0.85, 0 }, -- \Xi - [0x003A0] = { -0.075, 0.85, 0 }, -- \Pi - [0x003A3] = { -0.075, 0.85, 0 }, -- \Sigma - [0x003A5] = { -0.075, 0.85, 0 }, -- \Upsilon - [0x003A6] = { -0.05, 0.9, 0 }, -- \Phi - [0x003A8] = { -0.05, 0.9, 0 }, -- \Psi - [0x003A9] = { -0.05, 0.9, 0 }, -- \Omega - [0x02202] = { -0.075, 0.825, 0 }, -- \partial - [0x1D436] = { -0.1, 1, 0 }, -- C - [0x1D43A] = { -0.1, 1, 0 }, -- G - [0x1D442] = { -0.1, 1, 0 }, -- O - [0x1D444] = { -0.05, 1.025, 0 }, -- Q - [0x1D445] = { -0.025, 1.05, 0 }, -- R - [0x1D446] = { -0.05, 1, 0 }, -- S - [0x1D447] = { -0.05, 1.05, 0.7 }, -- T - [0x1D448] = { -0.125, 1, 0.3 }, -- U - [0x1D449] = { -0.125, 1, 0.3 }, -- V - [0x1D44A] = { -0.075, 1, 0.3 }, -- W - [0x1D44B] = { 0.05, 1.1, 0.35 }, -- X - [0x1D44C] = { -0.075, 1.1, 0.35 }, -- Y - [0x1D44E] = { -0.05, 1.1, 0, 0.8 }, -- a - [0x1D44F] = { -0.05, 1.1, 0 }, -- b - [0x1D450] = { -0.05, 1.1, 0, 0.9 }, -- c - [0x1D451] = { -0.05, 1.1, 0, 0.75 }, -- d - [0x1D452] = { -0.05, 1.1, 0, 0.9 }, -- e - [0x1D453] = { 0.45, 1.85, 0.45 }, -- f - [0x1D454] = { 0.05, 1.1, 0, 0.9 }, -- g - [0x0210E] = { -0.1, 1.05, 0, 1.15 }, -- h - [0x1D456] = { -0.2, 1.1, 0 }, -- i - [0x1D457] = { 0.6, 1.7, 0.45 }, -- j - [0x1D458] = { -0.05, 1.1, 0, 1.15 }, -- k - [0x1D459] = { -0.15, 1.1, 0, 0.8 }, -- l - [0x1D45A] = { -0.05, 1, 0 }, -- m - [0x1D45B] = { -0.1, 1, 0, 0.9 }, -- n - [0x1D45C] = { -0.05, 1.1, 0, 0.9 }, -- o - [0x1D45D] = { 0, 1.05, 0 }, -- p - [0x1D45E] = { -0.05, 1.05, 0, 0.9 }, -- q - [0x1D45F] = { -0.1, 1.15, 0, 0.9 }, -- r - [0x1D460] = { -0.05, 1.05, 0 }, -- s - [0x1D461] = { -0.15, 1.1, 0, 0.9 }, -- t - [0x1D462] = { -0.1, 1.05, 0, 0.85 }, -- u - [0x1D463] = { -0.1, 1.05, 0, 0.85 }, -- v - [0x1D464] = { -0.05, 1.05, 0, 0.95 }, -- w - [0x1D465] = { 0, 1.175, 0, 0.9 }, -- x - [0x1D466] = { -0.05, 1.05, 0 }, -- y - [0x1D467] = { -0.05, 1.1, 0, 0.9 }, -- z - [0x1D6FC] = { -0.075, 0.825, 0 }, -- \alpha - [0x1D6FD] = { 0, 0.85, 0, 1.1 }, -- \beta - [0x1D6FE] = { -0.075, 0.825, 0.05, 1.05 }, -- \gamma - [0x1D6FF] = { -0.1, 0.8, 0 }, -- \delta - [0x1D716] = { -0.1, 0.8, 0 }, -- \epsilon - [0x1D700] = { -0.1, 0.8, 0 }, -- \varepsilon - [0x1D701] = { -0.1, 0.8, 0 }, -- \zeta - [0x1D702] = { -0.1, 0.8, 0, 1.05 }, -- \eta - [0x1D703] = { -0.1, 0.8, 0 }, -- \theta - [0x1D717] = { -0.075, 0.85, 0, 1.03 }, -- \vartheta - [0x1D704] = { -0.1, 0.8, 0, 1.05 }, -- \iota - [0x1D705] = { -0.075, 0.825, 0 }, -- \kappa - [0x1D706] = { -0.075, 0.825, 0, 1.05 }, -- \lambda - [0x1D707] = { -0.075, 0.825, 0, 1.03 }, -- \mu - [0x1D708] = { -0.075, 0.825, 0, 1.03 }, -- \nu - [0x1D709] = { -0.075, 0.825, 0 }, -- \xi - [0x1D70A] = { -0.075, 0.825, 0, 1.03 }, -- \omicron - [0x1D70B] = { -0.075, 0.825, 0 }, -- \pi - [0x1D71B] = { -0.07, 0.85, 0 }, -- \varpi - [0x1D70C] = { -0.075, 0.85, 0 }, -- \rho - [0x1D71A] = { -0.075, 0.85, 0 }, -- \varrho - [0x1D70D] = { -0.075, 0.85, 0, 1.02 }, -- \varsigma - [0x1D70E] = { -0.075, 0.85, 0 }, -- \sigma - [0x1D70F] = { -0.08, 0.825, 0, 1.05 }, -- \tau - [0x1D710] = { -0.08, 0.825, 0, 1.03 }, -- \upsilon - [0x1D719] = { -0.075, 0.85, 0 }, -- \phi - [0x1D711] = { -0.075, 0.85, 0, 1.02 }, -- \varphi - [0x1D712] = { -0.075, 0.85, 0 }, -- \chi - [0x1D713] = { -0.075, 0.85, 0 }, -- \psi - [0x1D714] = { -0.05, 0.875, 0 }, -- \omega - -- [0x1D718] = { -0.075, 0.825, 0, 1.03 }, -- \varkappa - [0x1D719] = { -0.075, 0.85, 0 }, -- \phi - [0x1D41B] = { 0, 1, 0, 1.5 }, -- bold lowercase upright b - [0x1D41D] = { 0, 1, 0, 0.6 }, -- bold lowercase upright d - [0x1D41F] = { 0, 1.25, 0, 0.8 }, -- bold lowercase upright f - [0x1D420] = { 0, 1, 0, 0.6 }, -- bold lowercase upright g - [0x1D421] = { 0, 1, 0, 1.5 }, -- bold lowercase upright h - [0x1D424] = { 0, 1, 0, 1.5 }, -- bold lowercase upright k - [0x1D425] = { 0, 1, 0, 0.75 }, -- bold lowercase upright l - [0x1D42A] = { 0, 1, 0, 0.9 }, -- bold lowercase upright q - [0x1D42B] = { 0, 1, 0, 0.9 }, -- bold lowercase upright r - [0x1D42C] = { 0, 1, 0, 0.9 }, -- bold lowercase upright s - [0x1D482] = { 0, 1, 0, 0.9 }, -- bold lowercase italic a - [0x1D483] = { 0, 1, 0, 1.1 }, -- bold lowercase italic b - [0x1D484] = { 0, 1, 0, 0.95 }, -- bold lowercase italic c - [0x1D485] = { 0, 1, 0, 0.75 }, -- bold lowercase italic d - [0x1D486] = { 0, 1, 0, 0.95 }, -- bold lowercase italic e - -- [0x1D487] = { 0, 1, 0, 0.95 }, -- bold lowercase italic f - [0x1D488] = { 0, 1, 0, 0.9 }, -- bold lowercase italic g - [0x1D489] = { 0, 1, 0, 1.2 }, -- bold lowercase italic h - -- [0x1D48A] = { 0, 1, 0, 0.6 }, -- bold lowercase italic i - -- [0x1D48B] = { 0, 1, 0, 0.8 }, -- bold lowercase italic j - [0x1D48C] = { 0, 1, 0, 1.2 }, -- bold lowercase italic k - [0x1D48D] = { 0, 1, 0, 0.9 }, -- bold lowercase italic l - [0x1D492] = { 0, 1, 0, 0.85 }, -- bold lowercase italic q - [0x1D493] = { 0, 1, 0, 0.9 }, -- bold lowercase italic r - [0x1D497] = { 0, 1, 0, 0.9 }, -- bold lowercase italic v - [0x1D499] = { 0, 1, 0, 0.9 }, -- bold lowercase italic x - [0x1D49A] = { 0, 1, 0, 0.95 }, -- bold lowercase italic y - [0x1D49B] = { 0, 1, 0, 1.1 }, -- bold lowercase italic z - [0x1D743] = { 0, 1, 0, 1.7 }, -- bold lowercase italic greek xi + list = { + [0x00393] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Gamma + [0x00394] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \Delta + [0x00398] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Theta + [0x0039B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Lambda + [0x0039E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Xi + [0x003A0] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Pi + [0x003A3] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Sigma + [0x003A5] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \Upsilon + [0x003A6] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Phi + [0x003A8] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Psi + [0x003A9] = { xoffset = -0.05, width = 0.9, italic = 0 }, -- \Omega + [0x02202] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \partial + [0x1D43A] = { xoffset = -0.1, width = 1, italic = 0 }, -- G + [0x1D442] = { xoffset = -0.1, width = 1, italic = 0 }, -- O + [0x1D444] = { xoffset = -0.05, width = 1.025, italic = 0 }, -- Q + [0x1D44E] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.8 }, -- a + [0x1D44F] = { xoffset = -0.05, width = 1.1, italic = 0 }, -- b + [0x1D450] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- c + [0x1D451] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.75 }, -- d + [0x1D452] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- e + [0x1D453] = { xoffset = 0.45, width = 1.9, italic = 0.45 }, -- f + [0x1D454] = { xoffset = 0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- g + [0x0210E] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 1.15 }, -- h + [0x1D456] = { xoffset = -0.2, width = 1.1, italic = 0 }, -- i + [0x1D457] = { xoffset = 0.6, width = 1.7, italic = 0.45 }, -- j + [0x1D458] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 1.15 }, -- k + [0x1D459] = { xoffset = -0.15, width = 1.1, italic = 0, anchor = 0.8 }, -- l + [0x1D45A] = { xoffset = -0.05, width = 1, italic = 0 }, -- m + [0x1D45B] = { xoffset = -0.1, width = 1, italic = 0, anchor = 0.9 }, -- n + [0x1D45C] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- o + [0x1D45D] = { xoffset = 0, width = 1.05, italic = 0 }, -- p + [0x1D45E] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.9 }, -- q + [0x1D45F] = { xoffset = -0.1, width = 1.15, italic = 0, anchor = 0.9 }, -- r + [0x1D460] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- s + [0x1D461] = { xoffset = -0.15, width = 1.2, italic = 0, anchor = 0.9 }, -- t + [0x1D462] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- u + [0x1D463] = { xoffset = -0.1, width = 1.05, italic = 0, anchor = 0.85 }, -- v + [0x1D464] = { xoffset = -0.05, width = 1.05, italic = 0, anchor = 0.95 }, -- w + [0x1D465] = { xoffset = 0, width = 1.175, italic = 0, anchor = 0.9 }, -- x + [0x1D466] = { xoffset = -0.05, width = 1.05, italic = 0 }, -- y + [0x1D467] = { xoffset = -0.05, width = 1.1, italic = 0, anchor = 0.9 }, -- z + [0x1D6FC] = { xoffset = -0.075, width = 0.825, italic = 0 }, -- \alpha + [0x1D6FD] = { xoffset = 0, width = 0.9, italic = 0, anchor = 1.05 }, -- \beta + [0x1D6FE] = { xoffset = -0.075, width = 0.85, italic = 0.05, anchor = 1.05 }, -- \gamma + [0x1D6FF] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \delta + [0x1D716] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \epsilon + [0x1D700] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \varepsilon + [0x1D701] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \zeta + [0x1D702] = { xoffset = -0.1, width = 0.85, italic = 0, anchor = 1.05 }, -- \eta + [0x1D703] = { xoffset = -0.1, width = 0.85, italic = 0 }, -- \theta + [0x1D717] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \vartheta + [0x1D704] = { xoffset = -0.1, width = 0.9, italic = 0, anchor = 1.05 }, -- \iota + [0x1D705] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \kappa + [0x1D706] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.05 }, -- \lambda + [0x1D707] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \mu + [0x1D708] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \nu + [0x1D709] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \xi + [0x1D70A] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \omicron + [0x1D70B] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \pi + [0x1D71B] = { xoffset = -0.07, width = 0.85, italic = 0 }, -- \varpi + [0x1D70C] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \rho + [0x1D71A] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \varrho + [0x1D70D] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varsigma + [0x1D70E] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \sigma + [0x1D70F] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.05 }, -- \tau + [0x1D710] = { xoffset = -0.08, width = 0.85, italic = 0, anchor = 1.03 }, -- \upsilon + [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi + [0x1D711] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.02 }, -- \varphi + [0x1D712] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \chi + [0x1D713] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \psi + [0x1D714] = { xoffset = -0.05, width = 0.875, italic = 0 }, -- \omega + -- [0x1D718] = { xoffset = -0.075, width = 0.85, italic = 0, anchor = 1.03 }, -- \varkappa + [0x1D719] = { xoffset = -0.075, width = 0.85, italic = 0 }, -- \phi + [0x1D41B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright b + [0x1D41D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright d + [0x1D41F] = { xoffset = 0, width = 1.25, italic = 0, anchor = 0.8 }, -- bold lowercase upright f + [0x1D420] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase upright g + [0x1D421] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright h + [0x1D424] = { xoffset = 0, width = 1, italic = 0, anchor = 1.5 }, -- bold lowercase upright k + [0x1D425] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase upright l + [0x1D42A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright q + [0x1D42B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright r + [0x1D42C] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase upright s + -- [0x1D482] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic a + -- [0x1D483] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic b + -- [0x1D484] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic c + -- [0x1D485] = { xoffset = 0, width = 1, italic = 0, anchor = 0.75 }, -- bold lowercase italic d + -- [0x1D486] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic e + -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic f + -- [0x1D488] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic g + -- [0x1D489] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic h + -- [0x1D48A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.6 }, -- bold lowercase italic i + -- [0x1D48B] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- bold lowercase italic j + -- [0x1D48C] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- bold lowercase italic k + -- [0x1D48D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic l + -- [0x1D492] = { xoffset = 0, width = 1, italic = 0, anchor = 0.85 }, -- bold lowercase italic q + -- [0x1D493] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic r + -- [0x1D497] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- bold lowercase italic v + -- [0x1D499] = { xoffset = 0, width = 1.1, italic = 0, anchor = 0.9 }, -- bold lowercase italic x + -- [0x1D49A] = { xoffset = 0, width = 1, italic = 0, anchor = 0.95 }, -- bold lowercase italic y + -- [0x1D49B] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- bold lowercase italic z + [0x1D743] = { xoffset = 0, width = 1, italic = 0, anchor = 1.7 }, -- bold lowercase italic greek xi + [0x1D435] = { anchor = 1.05 }, -- italic B + [0x1D436] = { xoffset = -0.1, anchor = 0.7 }, -- italic C + [0x1D437] = { anchor = 1.25 }, -- italic D + [0x1D43A] = { anchor = 0.8 }, -- italic G + [0x1D442] = { anchor = 0.85 }, -- italic O + [0x1D443] = { anchor = 1.1 }, -- italic P + [0x1D444] = { anchor = 0.85 }, -- italic Q + [0x1D445] = { xoffset = -0.025, width = 1.05, anchor = 1.05 }, -- italic R + [0x1D446] = { xoffset = -0.05, anchor = 0.85 }, -- italic S + [0x1D447] = { xoffset = -0.05, width = 1.05, italic = 0.7, anchor = 0.9, }, -- italic T + [0x1D448] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic U + [0x1D449] = { xoffset = -0.125, italic = 0.3, anchor = 0.9, }, -- italic V + [0x1D44A] = { xoffset = -0.075, italic = 0.3, anchor = 0.9, }, -- italic W + [0x1D44C] = { xoffset = -0.075, width = 1.1, italic = 0.35, anchor = 0.9, }, -- italic Y + + ["lowercasefraktur"] = { + width = 1.25, + extend = 1.25, + height = 1.15, + depth = 1.15, + squeeze = 1.15, + }, + + ["lowercasescript"] = { + width = 1.2, + extend = 1.2, + height = 1.2, + depth = 1.2, + squeeze = 1.2, + }, }, }, { tweak = "kerns", list = { [0x2F] = { - topleft = -0.15, - -- bottomleft = 0, - -- topright = 0, - bottomright = -0.15, - }, + topleft = -0.2, + bottomright = -0.2, + }, + -- [0x28] = { -- left parenthesis. No! + -- topleft = -0.1, + -- bottomleft = -0.1, + -- }, + -- [0x29] = { -- right parenthesis. No! + -- topright = -0.1, + -- bottomright = -0.1, + -- all = true, + -- }, + }, + }, + { + -- For upright alphabets, we unset the anchor. + -- This means that accents are placed + -- centered over the character. + -- Should be on top + tweak = "wipeanchors", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasegreekbold", + "lowercasegreeknormal", + "lowercasegreeksansserifbold", + "lowercasemonospace", + "lowercasenormal", + "lowercasesansserifbold", + "lowercasesansserifnormal", + "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasenormal", + "uppercasesansserifbold", + "uppercasesansserifnormal", + }, + }, + { + -- For non-italic alphabets we remove italic correction. + tweak = "wipeitalics", + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasemonospace", + -- "lowercasenormal", + "lowercasesansserifbold", + -- "lowercasesansserifnormal", + "lowercasegreeknormal", + "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasesansserifbold", + "uppercasesanserifnormal", -- some remain + }, + }, + { + -- This one fakes margins to get larger/smaller accents + -- with for example \widetilde. + tweak = "margins", + list = { + [0x1D7DC] = { left = -.1, right = -.1 }, -- doublestruck 4 + + [0x1D712] = { left = -.1, right = -.1 }, -- italic chi + [0x1D713] = { left = -.1, right = -.1 }, -- italic psi + [0x1D714] = { left = -.1, right = -.1 }, -- italic omega + + [0x003B1] = { left = -.1, right = -.1 }, -- upfight alpha + [0x003B3] = { left = -.1, right = -.1 }, -- upfight gamma + [0x003BA] = { left = -.1, right = -.1 }, -- upfight kappa + [0x003BC] = { left = -.1, right = -.1 }, -- upfight mu + [0x003C0] = { left = -.1, right = -.1 }, -- upfight pi + [0x003C3] = { left = -.1, right = -.1 }, -- upfight sigma + [0x003C5] = { left = -.1, right = -.1 }, -- upfight upsilon + [0x003C6] = { left = -.1, right = -.1 }, -- upfight phi + [0x003C8] = { left = -.1, right = -.1 }, -- upfight psi + [0x003C9] = { left = -.1, right = -.1 }, -- upfight omega + + -- Greek lowercase sans (bold, italic) can be improved + + [0x1D451] = { left = -.1, right = -.1 }, -- italic d + [0x1D453] = { left = -.1, right = -.1 }, -- italic f + + [0x00394] = { left = .1, right = .1 }, -- upfight Delta + [0x003A3] = { left = .1, right = .1 }, -- upfight Sigma + + -- [0x0004A] = { left = .1, right = .1 }, -- J + [0x00046] = { left = .1, right = .1 }, -- F + [0x0004C] = { left = .1, right = .1 }, -- L + [0x00050] = { left = .1, right = .1 }, -- P + [0x00053] = { left = .1, right = .1 }, -- S + [0x00054] = { left = .1, right = .1 }, -- T + [0x0005A] = { left = .1, right = .1 }, -- Z + + [0x1D43D] = { left = -.1, right = -.1 }, -- italic J + -- [0x1D448] = { left = -.05, right = -.05 }, -- italic U + -- [0x1D449] = { left = -.05, right = -.05 }, -- italic V + [0x1D44B] = { left = -.05, right = -.05 }, -- italic X + + -- [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f + -- [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h + -- [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u + -- [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x + + -- [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi + -- [0x1D713] = { left = -.1, right = -.1 }, -- italic psi + + -- [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d + -- [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g + + -- [0x1D409] = { left = .1, right = .1 }, -- bold upright J + -- [0x1D412] = { left = .1, right = .1 }, -- bold upright S + + -- [0x1D509] = { left = .1, right = .1 }, -- fraktur F + -- [0x1D50C] = { left = .1, right = .1 }, -- fraktur I + -- [0x1D50D] = { left = .1, right = .1 }, -- fraktur J + -- [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z + + -- [0x1D538] = { left = .1, right = .1 }, -- doublestruck A + -- [0x1D539] = { left = .1, right = .1 }, -- doublestruck B + -- [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E + -- [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F + -- [0x1D541] = { left = .1, right = .1 }, -- doublestruck J + -- [0x1D542] = { left = .1, right = .1 }, -- doublestruck K + -- [0x1D543] = { left = .1, right = .1 }, -- doublestruck L + -- [0x1D547] = { left = .1, right = .1 }, -- doublestruck P + -- [0x1D549] = { left = .1, right = .1 }, -- doublestruck R + -- [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S + -- [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T + -- [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V + -- [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y + + -- [0x1D506] = { left = .1, right = .1 }, -- fraktur C + + -- [0x00393] = { left = .1, right = .1 }, -- upfight Gamma + -- [0x00396] = { left = .1, right = .1 }, -- upfight Zeta + + -- [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E + -- [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F + -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope + -- [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L + -- [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S + + -- [0x1D61A] = { left = .1, right = .1 }, -- sans italic S + + -- [0x1D5A2] = { left = .1, right = .1 }, -- sans C + -- [0x1D5A4] = { left = .1, right = .1 }, -- sans E + -- [0x1D5A5] = { left = .1, right = .1 }, -- sans F + -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope + -- [0x1D5AF] = { left = .1, right = .1 }, -- sans P + -- [0x1D5B2] = { left = .1, right = .1 }, -- sans S + -- [0x1D5B9] = { left = .1, right = .1 }, -- sans Z + + -- [0x1D4A0] = { left = .1, right = .1 }, -- script E + -- [0x1D4AE] = { left = .1, right = .1 }, -- script S + -- [0x1D4B4] = { left = .1, right = .1 }, -- script Y }, }, { tweak = "fixprimes", -- scale = 0.8, -- smaller = true, - factor = 1.1, + factor = 1,--1.1 }, { tweak = "addscripts", @@ -193,6 +398,9 @@ return { -- experimental fixes for mkiv: -- dimensions = dimensions, - kerns = kerns, + kerns = kerns, }, } + +-- \alpha is looking like an italic a. The one from Dejavu could perhaps be an alternative? +-- No hvariants in 772 diff --git a/tex/context/fonts/mkiv/cambria-math.lfg b/tex/context/fonts/mkiv/cambria-math.lfg index a97a3f709..7a28eb2b6 100644 --- a/tex/context/fonts/mkiv/cambria-math.lfg +++ b/tex/context/fonts/mkiv/cambria-math.lfg @@ -1,11 +1,3 @@ --- This patch code is moved from font-pat.lua to this goodies --- files as it does not belong in the core code. - --- This is a fix to the font itself i.e. the cached instance will --- be patched. When the goodie file is loaded the patch will be --- added to the patch list. No goodies setting is needed with --- the filename. - local dimensions, kerns, kernpairs if CONTEXTLMTXMODE == 0 then kernpairs = { -- \setupmathematics[kernpairs=yes] @@ -56,41 +48,50 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 1000, - DisplayOperatorMinHeight = 2800, - AccentBaseDepth = 300, + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + AccentBaseDepth = 300, + RadicalDegreeBottomRaisePercent = 65, + RadicalKernAfterDegree = -900, + RadicalRuleThickness = 128, -- 133 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 2800, -- 2500 in font }, tweaks = { aftercopying = { { tweak = "dimensions", list = { - -- [0x00060] = { yoffset = -0.1 }, -- grave - -- [0x000B4] = { yoffset = -0.1 }, -- acute - -- [0x002C6] = { yoffset = -0.1 }, -- hat - -- [0x002DC] = { yoffset = -0.1 }, -- tilde - -- [0x000AF] = { yoffset = -0.1 }, -- bar + + -- [0x00060] = { yoffset = -0.1 }, -- grave + -- [0x000B4] = { yoffset = -0.1 }, -- acute + -- [0x002C6] = { yoffset = -0.1 }, -- hat + -- [0x002DC] = { yoffset = -0.1 }, -- tilde + -- [0x000AF] = { yoffset = -0.1 }, -- bar -- [0x002D8] = { yoffset = -0.15 }, -- breve -- [0x002D9] = { yoffset = -0.15 }, -- dot - -- [0x000A8] = { yoffset = -0.1 }, -- ddot + -- [0x000A8] = { yoffset = -0.1 }, -- ddot [0x020DB] = { yoffset = -0.05 }, -- dddot - -- [0x002C7] = { yoffset = -0.1 }, -- check + -- [0x002C7] = { yoffset = -0.1 }, -- check [0x020D7] = { yoffset = -0.05 }, -- vec - -- [0x00300] = { yoffset = -0.12 , all=true }, -- widegrave - -- [0x00301] = { yoffset = -0.12 , all=true }, -- wideacute - -- [0x00302] = { yoffset = -0.12 , all=true }, -- widehat - -- [0x00303] = { yoffset = -0.12 , all=true }, -- widetilde - -- [0x00304] = { yoffset = -0.12 , all=true }, -- widebar - -- [0x00306] = { yoffset = -0.12 , all=true }, -- widebreve - [0x00307] = { yoffset = -0.025 , all=true }, -- widedot - [0x00308] = { yoffset = -0.025 , all=true }, -- wideddot - -- [0x020DB] = { yoffset = -0.1 , all=true }, -- widedddot - -- [0x0030A] = { yoffset = -0.12 , all=true }, -- widering - -- [0x0030C] = { yoffset = -0.12 , all=true }, -- widecheck - [0x1D43D] = { 0.25, 1.15, 0.2 }, -- J - [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f - -- [0x1D487] = { 0, 1, 0, 1.3}, -- bold lower case italic f + + -- [0x00300] = { yoffset = -0.12, all=true }, -- widegrave + -- [0x00301] = { yoffset = -0.12, all=true }, -- wideacute + -- [0x00302] = { yoffset = -0.12, all=true }, -- widehat + -- [0x00303] = { yoffset = -0.12, all=true }, -- widetilde + -- [0x00304] = { yoffset = -0.12, all=true }, -- widebar + -- [0x00306] = { yoffset = -0.12, all=true }, -- widebreve + [0x00307] = { yoffset = -0.025, all=true }, -- widedot + [0x00308] = { yoffset = -0.025, all=true }, -- wideddot + -- [0x020DB] = { yoffset = -0.1, all=true }, -- widedddot + -- [0x0030A] = { yoffset = -0.12, all=true }, -- widering + -- [0x0030C] = { yoffset = -0.12, all=true }, -- widecheck + + [0x1D43D] = { xoffset = 0.25, width = 1.15, italic = 0.2 }, -- J + [0x1D487] = { anchor = 0.8 }, -- bold lower case italic f + -- [0x1D487] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- bold lower case italic f + }, }, { @@ -100,14 +101,14 @@ return { topleft = -0.2, -- bottomleft = 0, -- topright = 0, - bottomright = -0.2, + bottomright = -0.2, }, }, }, { tweak = "fixprimes", scale = 0.9, - -- smaller = true, + -- smaller = true, factor = 0.9, }, { @@ -145,7 +146,7 @@ return { -- experimental fixes for mkiv: -- dimensions = dimensions, - kerns = kerns, - kernpairs = kernpairs, + kerns = kerns, + kernpairs = kernpairs, }, } diff --git a/tex/context/fonts/mkiv/concrete-math.lfg b/tex/context/fonts/mkiv/concrete-math.lfg index 59ea0f2ea..f7e5f3dda 100644 --- a/tex/context/fonts/mkiv/concrete-math.lfg +++ b/tex/context/fonts/mkiv/concrete-math.lfg @@ -8,8 +8,11 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1400 in font (one size) }, tweaks = { aftercopying = { @@ -24,7 +27,7 @@ return { topleft = -0.2, -- bottomleft = 0, -- topright = 0, - bottomright = -0.2, + bottomright = -0.2, }, }, }, diff --git a/tex/context/fonts/mkiv/dejavu-math.lfg b/tex/context/fonts/mkiv/dejavu-math.lfg index 01eaefd80..6f5dfc7b3 100644 --- a/tex/context/fonts/mkiv/dejavu-math.lfg +++ b/tex/context/fonts/mkiv/dejavu-math.lfg @@ -18,10 +18,15 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - FractionRuleThickness = 60, - AccentBaseDepth = 30, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + FractionRuleThickness = 60, + AccentBaseDepth = 30, + RadicalDegreeBottomRaisePercent = 62, + RadicalRuleThickness = 46, -- 52 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1333 in font }, tweaks = { aftercopying = { @@ -32,9 +37,9 @@ return { { tweak = "dimensions", list = { - -- [0x1D449] = { 0, .8, .2 }, - -- [0x1D44A] = { 0, .8, .2 }, - ["0x1D449:0x1D44A"] = { 0, .8, .2 }, + -- [0x1D449] = { xoffset = 0, width = .8, italic = .2 }, + -- [0x1D44A] = { xoffset = 0, width = .8, italic = .2 }, + ["0x1D449:0x1D44A"] = { xoffset = 0, width = .8, italic = .2 }, } }, { diff --git a/tex/context/fonts/mkiv/erewhon-math.lfg b/tex/context/fonts/mkiv/erewhon-math.lfg index 0924f7f13..ff0b8dac4 100644 --- a/tex/context/fonts/mkiv/erewhon-math.lfg +++ b/tex/context/fonts/mkiv/erewhon-math.lfg @@ -1,4 +1,4 @@ --- this file might go away and is for experiments only +-- This file might go away and is for experiments only. return { name = "erewhon-math", @@ -8,10 +8,16 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - AccentBaseHeight = 0, - AccentBaseDepth = 60, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + AccentBaseHeight = 0, + AccentBaseDepth = 60, + RadicalDegreeBottomRaisePercent = 55, + RadicalKernAfterDegree = -600, + RadicalRuleThickness = 45, -- 55 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1300 in font (one size) }, tweaks = { aftercopying = { @@ -44,7 +50,7 @@ return { tweak = "addrules", }, }, - }, + }, bigslots = { 1, 2, 3, 4 }, diff --git a/tex/context/fonts/mkiv/euler-math.lfg b/tex/context/fonts/mkiv/euler-math.lfg index cb3ec36a0..9e5efa680 100644 --- a/tex/context/fonts/mkiv/euler-math.lfg +++ b/tex/context/fonts/mkiv/euler-math.lfg @@ -7,6 +7,10 @@ return { author = "Hans Hagen", copyright = "ConTeXt development team", mathematics = { + parameters = { + DelimiterPercent = 901, + DelimiterShortfall = 500, + }, tweaks = { aftercopying = { { diff --git a/tex/context/fonts/mkiv/garamond-math.lfg b/tex/context/fonts/mkiv/garamond-math.lfg index e6778d4b7..d385b6c7a 100644 --- a/tex/context/fonts/mkiv/garamond-math.lfg +++ b/tex/context/fonts/mkiv/garamond-math.lfg @@ -10,12 +10,15 @@ return { NoLimitSubFactor = 1200, FractionRuleThickness = 60, OverbarRuleThickness = 60, - -- RadicalRuleThickness = 60, UnderbarRuleThickness = 60, -- AccentBaseHeight = 0, AccentBaseDepth = 75, -- AccentTopShiftUp = -75, -- FlattenedAccentTopShiftUp = -100, + -- RadicalRuleThickness = 50, -- 50 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) }, tweaks = { aftercopying = { @@ -27,70 +30,73 @@ return { tweak = "dimensions", list = { -- offset width italic - -- [0x00060] = { yoffset = -0.1 }, -- grave - -- [0x000B4] = { yoffset = -0.1 }, -- acute - [0x002C6] = { yoffset = -0.1 }, -- hat - [0x002DC] = { yoffset = -0.1 }, -- tilde - -- [0x000AF] = { yoffset = -0.1 }, -- bar - [0x002D8] = { yoffset = -0.15 }, -- breve - [0x002D9] = { yoffset = -0.15 }, -- dot - -- [0x000A8] = { yoffset = -0.1 }, -- ddot + -- [0x00060] = { yoffset = -0.1 }, -- grave + -- [0x000B4] = { yoffset = -0.1 }, -- acute + [0x002C6] = { yoffset = -0.1 }, -- hat + [0x002DC] = { yoffset = -0.1 }, -- tilde + -- [0x000AF] = { yoffset = -0.1 }, -- bar + [0x002D8] = { yoffset = -0.15 }, -- breve + [0x002D9] = { yoffset = -0.15 }, -- dot + -- [0x000A8] = { yoffset = -0.1 }, -- ddot [0x020DB] = { yoffset = -0.115 }, -- dddot - [0x002C7] = { yoffset = -0.1 }, -- check - [0x020D7] = { yoffset = -0.1 }, -- vec - [0x00300] = { yoffset = -0.12 , all=true }, -- widegrave - [0x00301] = { yoffset = -0.12 , all=true }, -- wideacute - [0x00302] = { yoffset = -0.12 , all=true }, -- widehat - [0x00303] = { yoffset = -0.12 , all=true }, -- widetilde - [0x00304] = { yoffset = -0.12 , all=true }, -- widebar - [0x00306] = { yoffset = -0.12 , all=true }, -- widebreve - [0x00307] = { yoffset = -0.12 , all=true }, -- widedot - [0x00308] = { yoffset = -0.12 , all=true }, -- wideddot - -- [0x020DB] = { yoffset = -0.1 , all=true }, -- widedddot - [0x0030A] = { yoffset = -0.12 , all=true }, -- widering - [0x0030C] = { yoffset = -0.12 , all=true }, -- widecheck - -- [0x002C6] = { scale=.85, yoffset = .1, width = .85, height = .935 }, -- hat - [0x00393] = { 0.05, 1.05, 0.075 }, -- \Gamma - -- [0x003A6] = { 0.05, 1.05, 0 }, -- \Phi difficult! - [0x003A8] = { 0.05, 1.05, 0.075 }, -- \Psi - [0x02113] = { 0, 1, 0.075 }, -- \ell - [0x1D436] = { 0, 1, 0.05 }, -- C - [0x1D43D] = { 0.3, 1.4, 0.1 }, -- J - [0x1D44B] = { 0, 1, 0.05 }, -- X - [0x1D44F] = { 0, 1, 0, 1.25 }, -- b - [0x1D450] = { 0, 1.1, 0 }, -- c - [0x1D451] = { 0, 1, 0.05, 0.8 }, -- d - [0x1D452] = { 0, 1.1, 0.05 }, -- e - [0x1D453] = { 0.15, 1.15, 0.1, 1.2 }, -- f - [0x1D454] = { 0.1, 1.2, 0.1 }, -- g - [0x0210E] = { 0, 1.1, 0, 1.4 }, -- h - [0x1D457] = { 0.2, 1.25, 0.05 }, -- j - [0x1D458] = { 0, 1, 0, 1.25 }, -- k - [0x1D459] = { 0, 1, 0.05 }, -- l - [0x1D45D] = { 0.15, 1.15, 0, 1.4 }, -- p - [0x1D45E] = { 0, 1.05, 0 }, -- q - [0x1D45F] = { 0, 1.05, 0 }, -- r - [0x1D461] = { 0, 1, 0.1 }, -- t - [0x1D465] = { 0.05, 1.1, 0.05 }, -- x - [0x1D466] = { 0.2, 1.2, 0, 1.35 }, -- y - [0x1D6FD] = { 0.05, 1.1, 0.05 }, -- \beta - [0x1D6FE] = { 0, 1.05, 0 }, -- \gamma - [0x1D6FF] = { 0, 1, 0.1 }, -- \delta - [0x1D716] = { 0, 1.1, 0 }, -- \epsilon - [0x1D700] = { 0, 1.1, 0 }, -- \varepsilon - [0x1D701] = { 0, 1, 0.15 }, -- \zeta - [0x1D703] = { 0, 1, 0.1 }, -- \theta - [0x1D705] = { 0, 1, 0.1 }, -- \kappa - [0x1D706] = { 0.05, 1.1, 0 }, -- \lambda - [0x1D707] = { 0.05, 1.05, 0 }, -- \mu - [0x1D708] = { 0, 1.1, 0 }, -- \nu - [0x1D709] = { 0, 1.1, 0 }, -- \xi - [0x1D70B] = { 0, 1.05, 0 }, -- \pi - [0x1D70C] = { 0.2, 1.2, 0 }, -- \rho - [0x1D70E] = { 0, 1, 0.1 }, -- \sigma - [0x1D70F] = { 0.05, 1.05, 0.1 }, -- \tau - [0x1D712] = { 0.15, 1.2, 0.05 }, -- \chi - [0x1D713] = { 0.05, 1.05, 0.05 }, -- \psi + [0x002C7] = { yoffset = -0.1 }, -- check + [0x020D7] = { yoffset = -0.1 }, -- vec + + [0x00300] = { yoffset = -0.12 , all = true }, -- widegrave + [0x00301] = { yoffset = -0.12 , all = true }, -- wideacute + [0x00302] = { yoffset = -0.12 , all = true }, -- widehat + [0x00303] = { yoffset = -0.12 , all = true }, -- widetilde + [0x00304] = { yoffset = -0.12 , all = true }, -- widebar + [0x00306] = { yoffset = -0.12 , all = true }, -- widebreve + [0x00307] = { yoffset = -0.12 , all = true }, -- widedot + [0x00308] = { yoffset = -0.12 , all = true }, -- wideddot + -- [0x020DB] = { yoffset = -0.1 , all = true }, -- widedddot + [0x0030A] = { yoffset = -0.12 , all = true }, -- widering + [0x0030C] = { yoffset = -0.12 , all = true }, -- widecheck + + -- [0x002C6] = { scale =.85, yoffset = .1, width = .85, height = .935 }, -- hat + + [0x00393] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Gamma + -- [0x003A6] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \Phi difficult! + [0x003A8] = { xoffset = 0.05, width = 1.05, italic = 0.075 }, -- \Psi + [0x02113] = { xoffset = 0, width = 1, italic = 0.075 }, -- \ell + [0x1D436] = { xoffset = 0, width = 1, italic = 0.05 }, -- C + [0x1D43D] = { xoffset = 0.3, width = 1.4, italic = 0.1 }, -- J + [0x1D44B] = { xoffset = 0, width = 1, italic = 0.05 }, -- X + [0x1D44F] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- b + [0x1D450] = { xoffset = 0, width = 1.1, italic = 0 }, -- c + [0x1D451] = { xoffset = 0, width = 1, italic = 0.05, 0.8 }, -- d + [0x1D452] = { xoffset = 0, width = 1.1, italic = 0.05 }, -- e + [0x1D453] = { xoffset = 0.15, width = 1.15, italic = 0.1, 1.2 }, -- f + [0x1D454] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- g + [0x0210E] = { xoffset = 0, width = 1.1, italic = 0, 1.4 }, -- h + [0x1D457] = { xoffset = 0.2, width = 1.25, italic = 0.05 }, -- j + [0x1D458] = { xoffset = 0, width = 1, italic = 0, 1.25 }, -- k + [0x1D459] = { xoffset = 0, width = 1, italic = 0.05 }, -- l + [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, 1.4 }, -- p + [0x1D45E] = { xoffset = 0, width = 1.05, italic = 0 }, -- q + [0x1D45F] = { xoffset = 0, width = 1.05, italic = 0 }, -- r + [0x1D461] = { xoffset = 0, width = 1, italic = 0.1 }, -- t + [0x1D465] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- x + [0x1D466] = { xoffset = 0.2, width = 1.2, italic = 0, 1.35 }, -- y + [0x1D6FD] = { xoffset = 0.05, width = 1.1, italic = 0.05 }, -- \beta + [0x1D6FE] = { xoffset = 0, width = 1.05, italic = 0 }, -- \gamma + [0x1D6FF] = { xoffset = 0, width = 1, italic = 0.1 }, -- \delta + [0x1D716] = { xoffset = 0, width = 1.1, italic = 0 }, -- \epsilon + [0x1D700] = { xoffset = 0, width = 1.1, italic = 0 }, -- \varepsilon + [0x1D701] = { xoffset = 0, width = 1, italic = 0.15 }, -- \zeta + [0x1D703] = { xoffset = 0, width = 1, italic = 0.1 }, -- \theta + [0x1D705] = { xoffset = 0, width = 1, italic = 0.1 }, -- \kappa + [0x1D706] = { xoffset = 0.05, width = 1.1, italic = 0 }, -- \lambda + [0x1D707] = { xoffset = 0.05, width = 1.05, italic = 0 }, -- \mu + [0x1D708] = { xoffset = 0, width = 1.1, italic = 0 }, -- \nu + [0x1D709] = { xoffset = 0, width = 1.1, italic = 0 }, -- \xi + [0x1D70B] = { xoffset = 0, width = 1.05, italic = 0 }, -- \pi + [0x1D70C] = { xoffset = 0.2, width = 1.2, italic = 0 }, -- \rho + [0x1D70E] = { xoffset = 0, width = 1, italic = 0.1 }, -- \sigma + [0x1D70F] = { xoffset = 0.05, width = 1.05, italic = 0.1 }, -- \tau + [0x1D712] = { xoffset = 0.15, width = 1.2, italic = 0.05 }, -- \chi + [0x1D713] = { xoffset = 0.05, width = 1.05, italic = 0.05 }, -- \psi }, }, { diff --git a/tex/context/fonts/mkiv/generic-math.lfg b/tex/context/fonts/mkiv/generic-math.lfg index c14067cc5..d50d49af9 100644 --- a/tex/context/fonts/mkiv/generic-math.lfg +++ b/tex/context/fonts/mkiv/generic-math.lfg @@ -1,8 +1,10 @@ +-- We will add a few more examplex to this file. + return { name = "generic-math", version = "1.00", comment = "A starting point.", - author = "Hans Hagen", + author = "Hans Hagen & Mikael Sundqvist", copyright = "ConTeXt development team", mathematics = { parameters = { @@ -22,6 +24,9 @@ return { AccentBottomShiftDown = 0, AccentBaseDepth = 0, AccentFlattenedBaseDepth = 0, + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- XXXX in font }, tweaks = { aftercopying = { diff --git a/tex/context/fonts/mkiv/kpfonts-math.lfg b/tex/context/fonts/mkiv/kpfonts-math.lfg index 490b7b297..ffec77b56 100644 --- a/tex/context/fonts/mkiv/kpfonts-math.lfg +++ b/tex/context/fonts/mkiv/kpfonts-math.lfg @@ -6,10 +6,15 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - -- AccentBaseHeight = 0, - AccentBaseDepth = 30, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + RadicalDegreeBottomRaisePercent = 70, + -- RadicalRuleThickness = 50, -- 50 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1500 in font (only one) }, tweaks = { aftercopying = { diff --git a/tex/context/fonts/mkiv/libertinus-math.lfg b/tex/context/fonts/mkiv/libertinus-math.lfg index 2d683cc3c..c5a4bcbcb 100644 --- a/tex/context/fonts/mkiv/libertinus-math.lfg +++ b/tex/context/fonts/mkiv/libertinus-math.lfg @@ -12,14 +12,20 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 1000, - FractionRuleThickness = 50, - OverbarRuleThickness = 50, - -- RadicalRuleThickness = 50, - UnderbarRuleThickness = 50, - -- AccentTopShiftUp = 0, - AccentBaseDepth = 10, + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + FractionRuleThickness = 50, + OverbarRuleThickness = 50, + -- RadicalRuleThickness = 50, + UnderbarRuleThickness = 50, + -- AccentTopShiftUp = 0, + AccentBaseDepth = 10, + RadicalDegreeBottomRaisePercent = 60, + RadicalKernAfterDegree = -425, + -- RadicalRuleThickness = 40, -- 40 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1250 in font (only one) }, tweaks = { aftercopying = { @@ -31,33 +37,35 @@ return { { tweak = "dimensions", list = { - [0x00060] = { yoffset = -0.075 }, -- grave - [0x000B4] = { yoffset = -0.075 }, -- acute - [0x002C6] = { yoffset = -0.075 }, -- hat - [0x002DC] = { yoffset = -0.075 }, -- tilde - -- [0x000AF] = { yoffset = -0.1 }, -- bar - [0x002D8] = { yoffset = -0.075 }, -- breve - [0x002D9] = { yoffset = -0.05 }, -- dot - [0x000A8] = { yoffset = -0.02 }, -- ddot - [0x020DB] = { yoffset = -0.02 }, -- dddot - [0x002DA] = { yoffset = -0.1 }, -- ring - -- [0x002C7] = { yoffset = -0.1 }, -- check - [0x020D7] = { yoffset = -0.1 }, -- vec - [0x00300] = { yoffset = -0.1 , all=true }, -- widegrave - [0x00301] = { yoffset = -0.1 , all=true }, -- wideacute - [0x00302] = { yoffset = -0.1 , all=true }, -- widehat - [0x00303] = { yoffset = -0.09 , all=true }, -- widetilde - -- [0x00304] = { yoffset = -0.12 , all=true }, -- widebar - [0x00306] = { yoffset = -0.05 , all=true }, -- widebreve - [0x00307] = { yoffset = -0.02 , all=true }, -- widedot - [0x00308] = { yoffset = -0.02 , all=true }, -- wideddot - -- [0x020DB] = { yoffset = -0.1 , all=true }, -- widedddot - [0x0030A] = { yoffset = -0.12 , all=true }, -- widering - [0x0030C] = { yoffset = -0.04 , all=true }, -- widecheck - -- [0x1D44F] = { 0, 1, 0, 1.5 }, -- b (6.8) - -- [0x1D451] = { 0, 1, 0, 1.2 }, -- d (6.8) - -- [0x0210E] = { 0, 1, 0, 1.5 }, -- h (6.8) - -- [0x1D458] = { 0, 1, 0, 1.5 }, -- k (6.8) + [0x00060] = { yoffset = -0.075 }, -- grave + [0x000B4] = { yoffset = -0.075 }, -- acute + [0x002C6] = { yoffset = -0.075 }, -- hat + [0x002DC] = { yoffset = -0.075 }, -- tilde + -- [0x000AF] = { yoffset = -0.1 }, -- bar + [0x002D8] = { yoffset = -0.075 }, -- breve + [0x002D9] = { yoffset = -0.05 }, -- dot + [0x000A8] = { yoffset = -0.02 }, -- ddot + [0x020DB] = { yoffset = -0.02 }, -- dddot + [0x002DA] = { yoffset = -0.1 }, -- ring + -- [0x002C7] = { yoffset = -0.1 }, -- check + [0x020D7] = { yoffset = -0.1 }, -- vec + + [0x00300] = { yoffset = -0.1, all = true }, -- widegrave + [0x00301] = { yoffset = -0.1, all = true }, -- wideacute + [0x00302] = { yoffset = -0.1, all = true }, -- widehat + [0x00303] = { yoffset = -0.09, all = true }, -- widetilde + -- [0x00304] = { yoffset = -0.12, all = true }, -- widebar + [0x00306] = { yoffset = -0.05, all = true }, -- widebreve + [0x00307] = { yoffset = -0.02, all = true }, -- widedot + [0x00308] = { yoffset = -0.02, all = true }, -- wideddot + -- [0x020DB] = { yoffset = -0.1, all = true }, -- widedddot + [0x0030A] = { yoffset = -0.12, all = true }, -- widering + [0x0030C] = { yoffset = -0.04, all = true }, -- widecheck + + -- [0x1D44F] = { width = 1, italic = 0, anchor = 1.5 }, -- b (6.8) + -- [0x1D451] = { width = 1, italic = 0, anchor = 1.2 }, -- d (6.8) + -- [0x0210E] = { width = 1, italic = 0, anchor = 1.5 }, -- h (6.8) + -- [0x1D458] = { width = 1, italic = 0, anchor = 1.5 }, -- k (6.8) }, }, { diff --git a/tex/context/fonts/mkiv/lm.lfg b/tex/context/fonts/mkiv/lm.lfg index 5ea043b55..0c0b0a1dc 100644 --- a/tex/context/fonts/mkiv/lm.lfg +++ b/tex/context/fonts/mkiv/lm.lfg @@ -9,6 +9,11 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then kerns = { [0x1D449] = kern_150, -- [0x1D44A] = kern_200, -- 𝑊 + + [0x1D4AB] = { + -- topleft = { { kern = -200 } }, + bottomright = { { kern = -200 } }, + }, } dimensions = { @@ -24,6 +29,7 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then height = 960, depth = 40, }, + -- [0xFE932] = { xoffset = 50, width = 290 }, -- used prime -- [0x2032] = { xoffset = 50, width = 290 }, -- prime }, @@ -64,41 +70,367 @@ return { { tweak = "dimensions", list = { - [0x00060] = { yoffset = -0.05 }, -- grave - [0x000B4] = { yoffset = -0.05 }, -- acute - [0x002C6] = { yoffset = -0.05 }, -- hat - [0x002DC] = { yoffset = -0.05 }, -- tilde - [0x000AF] = { yoffset = -0.1 }, -- bar - [0x002D8] = { yoffset = -0.05 }, -- breve - [0x002D9] = { yoffset = -0.05 }, -- dot - [0x000A8] = { yoffset = -0.05 }, -- ddot - [0x020DB] = { yoffset = -0.15 }, -- dddot (seem to hit some max) - [0x002DA] = { yoffset = -0.05 }, -- ring - [0x002C7] = { yoffset = -0.05 }, -- check - [0x020D7] = { yoffset = -0.05 }, -- vec - [0x00300] = { yoffset = -0.07, all = true }, -- widegrave - [0x00301] = { yoffset = -0.07, all = true }, -- wideacute - [0x00302] = { yoffset = -0.1, all = true }, -- widehat - [0x00303] = { yoffset = -0.09, all = true }, -- widetilde - [0x00304] = { yoffset = -0.1, all = true }, -- widebar - [0x00306] = { yoffset = -0.07, all = true }, -- widebreve - [0x00307] = { yoffset = -0.05, all = true }, -- widedot - [0x00308] = { yoffset = -0.05, all = true }, -- wideddot - [0x020DB] = { yoffset = -0.075, all = true }, -- widedddot - [0x0030A] = { yoffset = -0.05, all = true }, -- widering - [0x0030C] = { yoffset = -0.075, all = true }, -- widecheck + -- [0x00060] = { yoffset = -0.05 }, -- grave + -- [0x000B4] = { yoffset = -0.05 }, -- acute + -- -- [0x002C6] = { yoffset = -0.05 }, -- hat + -- [0x002DC] = { yoffset = -0.05 }, -- tilde + -- [0x000AF] = { yoffset = -0.075 }, -- bar + -- [0x002D8] = { yoffset = -0.05 }, -- breve + -- [0x002D9] = { yoffset = -0.05 }, -- dot + -- [0x000A8] = { yoffset = -0.05 }, -- ddot + -- [0x020DB] = { yoffset = 0.2 }, -- dddot (done below!) + [0x002DA] = { width = 0, }, -- ring (bounding box is wrong) + -- [0x002C7] = { yoffset = -0.05 }, -- check + -- [0x020D7] = { yoffset = -0.05 }, -- vec + [0x00300] = { yoffset = -0.03, all = true }, -- widegrave + [0x00301] = { yoffset = -0.03, all = true }, -- wideacute + [0x00302] = { yoffset = -0.075, all = true }, -- widehat + [0x00303] = { yoffset = -0.05, all = true }, -- widetilde + [0x00304] = { yoffset = -0.02, all = true }, -- widebar + [0x00306] = { yoffset = -0.05, all = true }, -- widebreve + [0x00307] = { yoffset = -0.027, all = true }, -- widedot + [0x00308] = { yoffset = -0.027, all = true }, -- wideddot + [0x020DB] = { yoffset = -0.065, all = true }, -- widedddot + [0x0030C] = { yoffset = -0.05, all = true }, -- widecheck + [0x0030A] = { yoffset = -0.025, all = true }, -- widering + + -- [0x0212C] = { width = 0.95, italic = 0.05 }, -- script B + -- [0x1D49E] = { width = 0.8, italic = 0.25 }, -- script C + -- [0x1D49F] = { width = 0.9, italic = 0.11 }, -- script D + -- [0x02130] = { width = 0.85, italic = 0.18 }, -- script E + -- [0x02131] = { width = 0.75, italic = 0.3 }, -- script F + -- [0x1D4A2] = { width = 0.9, italic = 0.11 }, -- script G + -- [0x0210B] = { width = 0.85, italic = 0.18 }, -- script H + -- [0x02110] = { width = 0.8, italic = 0.25 }, -- script I + -- [0x1D4A5] = { width = 0.8, italic = 0.25 }, -- script J + -- [0x1D4A6] = { width = 0.9, italic = 0.11 }, -- script K + -- [0x02112] = { width = 0.95, italic = 0.05 }, -- script L + -- [0x02133] = { width = 0.9, italic = 0.11 }, -- script M + -- [0x1D4A9] = { width = 0.85, italic = 0.18 }, -- script N + -- [0x1D4AA] = { width = 0.95, italic = 0.05 }, -- script O + -- [0x1D4AB] = { width = 0.8, italic = 0.25 }, -- script P + -- [0x1D4AB] = { width = 0.95, italic = 0.05 }, -- script Q + -- [0x0211B] = { width = 0.95, italic = 0.05 }, -- script R + -- [0x1D4AE] = { width = 0.9, italic = 0.11 }, -- script S + -- [0x1D4AF] = { width = 0.75, italic = 0.33 }, -- script T + -- [0x1D4B0] = { width = 0.9, italic = 0.11 }, -- script U + -- [0x1D4B1] = { width = 0.8, italic = 0.25 }, -- script V + -- [0x1D4B2] = { width = 0.8, italic = 0.25 }, -- script W + -- [0x1D4B3] = { width = 0.9, italic = 0.11 }, -- script X + -- [0x1D4B4] = { width = 0.85, italic = 0.18 }, -- script Y + -- [0x1D4B5] = { width = 0.95, italic = 0.05 }, -- script Z + + -- Setting anchors to shift the location of accents + -- Note: Many non-italic alphabets are wiped below + -- Todo: Check the less common italic alphabets + -- [0x1D483] = { anchor = 1.15, }, -- bold italic b + -- [0x1D485] = { anchor = 0.8, }, -- bold italic d + [0x1D487] = { anchor = 0.9, }, -- bold italic f + [0x1D489] = { anchor = 1.2, }, -- bold italic h + [0x1D48C] = { anchor = 1.2, }, -- bold italic k + [0x1D48F] = { anchor = 1.1, }, -- bold italic n + [0x1D491] = { anchor = 1.2, }, -- bold italic p + [0x1D492] = { anchor = 0.9, }, -- bold italic q + [0x1D49B] = { anchor = 0.9, }, -- bold italic z + + [0x1D736] = { anchor = 0.9, }, -- bold italic alpha + [0x1D737] = { anchor = 0.9, }, -- bold italic beta + [0x1D738] = { anchor = 1.1, }, -- bold italic gamma + [0x1D740] = { anchor = 1.2, }, -- bold italic lambda + [0x1D744] = { anchor = 1.2, }, -- bold italic omicron + + [0x1D6FE] = { anchor = 1.1, }, -- italic gamma + [0x1D702] = { anchor = 1.1, }, -- italic eta + -- [0x1D70A] = { anchor = 1.2, }, -- italic omicron -- no difference + -- [0x1D70D] = { anchor = 1.2, }, -- italic varsigma -- no difference + + [0x1D44F] = { anchor = 1.15, }, -- italic b + [0x1D451] = { anchor = 0.8, }, -- italic d + [0x1D455] = { anchor = 1.15, }, -- italic h + -- [0x1D456] = { anchor = 1.15, }, -- italic i (wrong code?) + [0x1D458] = { anchor = 1.15, }, -- italic k + [0x1D45B] = { anchor = 1.1, }, -- italic n + [0x1D45D] = { anchor = 1.1, }, -- italic p + [0x1D45E] = { anchor = 0.9, }, -- italic q + [0x1D467] = { anchor = 0.9, }, -- italic z + + [0x1D6FE] = { anchor = 1.2, }, -- italic gamma + [0x1D706] = { anchor = 1.2, }, -- italic lambda + [0x1D70A] = { anchor = 1.1, }, -- italic omikron + [0x1D70D] = { anchor = 1.1, }, -- italic varsigma + + [0x1D46A] = { anchor = 0.75, }, -- bold italic C + [0x1D46B] = { anchor = 1.1, }, -- bold italic D + [0x1D46E] = { anchor = 0.75, }, -- bold italic G + [0x1D479] = { anchor = 1.2, }, -- bold italic R + [0x1D47A] = { anchor = 0.8, }, -- bold italic S + + -- uppercaseboldscript could be improved + + [0x1D435] = { anchor = 1.05, }, -- italic B + [0x1D436] = { anchor = 0.7, }, -- italic C + [0x1D437] = { anchor = 1.05, }, -- italic D + [0x1D43A] = { anchor = 0.8, }, -- italic G + [0x1D443] = { anchor = 1.1, }, -- italic P + [0x1D445] = { anchor = 1.05, }, -- italic R + [0x1D446] = { anchor = 0.85, }, -- italic S + + [0x1D49C] = { anchor = 0.9 }, -- script A + [0x1D49D] = { anchor = 0.95, }, -- script B + [0x1D49E] = { anchor = 0.8, }, -- script C + [0x1D49F] = { anchor = 0.95, }, -- script D + [0x1D4A0] = { anchor = 0.85, }, -- script E + [0x1D4A1] = { anchor = 0.75, }, -- script F + [0x1D4A2] = { anchor = 0.9, }, -- script G + [0x1D4A3] = { anchor = 0.85, }, -- script H + [0x1D4A4] = { anchor = 0.8, }, -- script I + [0x1D4A5] = { anchor = 0.8, }, -- script J + [0x1D4A6] = { anchor = 0.85, }, -- script K + [0x1D4A7] = { anchor = 0.75, }, -- script L + [0x1D4A8] = { anchor = 0.9, }, -- script M + [0x1D4A9] = { anchor = 0.85, }, -- script N + [0x1D4AA] = { anchor = 0.95, }, -- script O + [0x1D4AB] = { anchor = 0.95, }, -- script P + [0x1D4AC] = { anchor = 0.95, }, -- script Q + [0x1D4AD] = { anchor = 0.95, }, -- script R + [0x1D4AE] = { anchor = 0.9, }, -- script S + [0x1D4AF] = { anchor = 0.75, }, -- script T + [0x1D4B0] = { anchor = 0.9, }, -- script U + [0x1D4B1] = { anchor = 0.95, }, -- script V + [0x1D4B2] = { anchor = 0.95, }, -- script W + [0x1D4B3] = { anchor = 0.95, }, -- script X + [0x1D4B4] = { anchor = 0.9, }, -- script Y + [0x1D4B5] = { anchor = 1, }, -- script Z + +-- [984874]={ squeeze = 0.50, height = 0.50, depth = 0.50 }, +-- [984881]={ squeeze = 0.50, height = 0.50, depth = 0.50 }, +-- [984888]={ squeeze = 0.50, height = 0.50, depth = 0.50 }, +-- [984895]={ squeeze = 0.50, height = 0.50, depth = 0.50 }, +-- [984902]={ squeeze = 0.50, height = 0.50, depth = 0.50 }, +-- [984909]={ squeeze = 0.50, height = 0.50, depth = 0.50 }, +-- [984916]={ squeeze = 0.50, height = 0.50, depth = 0.50 }, +-- ["0x7C.variants.*"]={ squeeze = 0.75, height = 0.75, depth = 0.75, extend = 1.15, width = 1.15 }, -- squeeze: glyph, height, depth: bbox +-- ["0x7C.variants.*"]={ squeeze = 0.75, height = 0.8, depth = 0.8, extend = 1.1, width = 1.1 }, -- squeeze: glyph, height, depth: bbox + + +["0x7C.variants.1"]={ squeeze = 0.90, height = 0.90, depth = 0.90 }, +["0x7C.variants.2"]={ squeeze = 0.85, height = 0.85, depth = 0.85 }, +["0x7C.variants.3"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, +["0x7C.variants.4"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, +["0x7C.variants.5"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, +["0x7C.variants.6"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, +["0x7C.variants.7"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, + + +-- [utf.byte("1")] = { +-- original = utf.byte("2"), +-- mode = 1, +-- scale = 2, +-- }, +-- ["lowercasegreeksansserifbolditalic"] = { +-- delta = 0x003B1 - 0x1D7AA, +-- slant = 0.4, +-- slant = -0.2, +-- line = 0.1, +-- -- line = 0.4, +-- mode = 1, +-- width = 1.25, +-- width = 0.95, +-- scale = 0.975, +-- }, }, }, { + -- Here we modify "corner kerns". + -- We started with 0x2F, the solidus + -- to have the 2 in x^2/5 a bit over the slash tweak = "kerns", list = { [0x2F] = { topleft = -0.2, -- bottomleft = 0, -- topright = 0, - bottomright = -0.2, - }, + bottomright = -0.2, + }, -- solidus + [0x1D49C] = { bottomright = -0.05, }, -- script A + [0x1D49D] = { bottomright = -0.05, }, -- script B + [0x1D49E] = { bottomright = -0.25, }, -- script C + [0x1D49F] = { bottomright = -0.11, }, -- script D + [0x1D4A0] = { bottomright = -0.18, }, -- script E + [0x1D4A1] = { bottomright = -0.30, }, -- script F + [0x1D4A2] = { bottomright = -0.11, }, -- script G + [0x1D4A3] = { bottomright = -0.18, }, -- script H + [0x1D4A4] = { bottomright = -0.25, }, -- script I + [0x1D4A5] = { bottomright = -0.25, }, -- script J + [0x1D4A6] = { bottomright = -0.11, }, -- script K + [0x1D4A7] = { bottomright = -0.05, }, -- script L + [0x1D4A8] = { bottomright = -0.11, }, -- script M + [0x1D4A9] = { bottomright = -0.18, }, -- script N + [0x1D4AA] = { bottomright = -0.05, }, -- script O + [0x1D4AB] = { bottomright = -0.25, }, -- script P + [0x1D4AC] = { bottomright = -0.05, }, -- script Q + [0x1D4AD] = { bottomright = -0.05, }, -- script R + [0x1D4AE] = { bottomright = -0.11, }, -- script S + [0x1D4AF] = { bottomright = -0.33, }, -- script T + [0x1D4B0] = { bottomright = -0.11, }, -- script U + [0x1D4B1] = { bottomright = -0.25, }, -- script V + [0x1D4B2] = { bottomright = -0.25, }, -- script W + [0x1D4B3] = { bottomright = -0.11, }, -- script X + [0x1D4B4] = { bottomright = -0.18, }, -- script Y + [0x1D4B5] = { bottomright = -0.05, }, -- script Z + }, + }, + -- { + -- tweak = "staircase", + -- list = { + -- }, + -- }, + { + -- For upright alphabets, we unset the anchor. + -- This means that accents are placed + -- centered over the character + tweak = "wipeanchors", + -- list = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 }, -- todo: ranges + list = { + "digitsbold", + "digitsdoublestruck", + "digitsmonospace", + "digitsnormal", + "digitssansserifbold", + "digitssansserifnormal", + "lowercasebold", + "lowercaseboldfraktur", + "lowercasedoublestruck", + "lowercasefraktur", + "lowercasegreekbold", + "lowercasegreeknormal", + "lowercasegreeksansserifbold", + "lowercasemonospace", + "lowercasenormal", + "lowercasesansserifbold", + "lowercasesansserifnormal", + "uppercasebold", + "uppercaseboldfraktur", + "uppercasedoublestruck", + "uppercasefraktur", + "uppercasegreekbold", + "uppercasegreeknormal", + "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasenormal", -- they are italic! + "uppercasesansserifbold", + "uppercasesansserifnormal", + }, + }, + { + -- For non-italic alphabets we + -- remove italic correction. + tweak = "wipeitalics", + list = { + -- "digitsbold", + -- "digitsdoublestruck", + -- "digitsmonospace", + -- "digitsnormal", + -- "digitssansserifbold", + -- "digitssansserifnormal", + -- "lowercasebold", + -- "lowercaseboldfraktur", + -- "lowercasedoublestruck", + -- "lowercasefraktur", + "lowercasemonospace", + "lowercasenormal", + -- "lowercasesansserifbold", + -- "lowercasesansserifnormal", + -- "lowercasegreeknormal", + "uppercasebold", + -- "uppercaseboldfraktur", + -- "uppercasedoublestruck", + -- "uppercasefraktur", + -- "uppercasegreekbold", + -- "uppercasegreeknormal", + -- "uppercasegreeksansserifbold", + "uppercasemonospace", + "uppercasesansserifbold", + "uppercasesanserifnormal", }, + }, + { + -- This one fakes margins to get larger/smaller accents + -- with for example \widetilde. + tweak = "margins", + list = { + [0x1D487] = { left = -.2, right = -.2 }, -- bold italic f + [0x1D489] = { left = -.2, right = -.2 }, -- bold italic h + [0x1D496] = { left = -.1, right = -.1 }, -- bold italic u + [0x1D499] = { left = -.1, right = -.1 }, -- bold italic x + + [0x1D711] = { left = -.1, right = -.1 }, -- italic varphi + [0x1D713] = { left = -.1, right = -.1 }, -- italic psi + + [0x1D659] = { left = -.1, right = -.1 }, -- sans bold italic d + [0x1D65C] = { left = -.1, right = -.1 }, -- sans bold italic g + + [0x1D409] = { left = .1, right = .1 }, -- bold upright J + [0x1D412] = { left = .1, right = .1 }, -- bold upright S + + [0x1D509] = { left = .1, right = .1 }, -- fraktur F + [0x1D50C] = { left = .1, right = .1 }, -- fraktur I + [0x1D50D] = { left = .1, right = .1 }, -- fraktur J + [0x1D51D] = { left = .1, right = .1 }, -- fraktur Z + + [0x1D538] = { left = .1, right = .1 }, -- doublestruck A + [0x1D539] = { left = .1, right = .1 }, -- doublestruck B + [0x1D53C] = { left = .1, right = .1 }, -- doublestruck E + [0x1D53D] = { left = .1, right = .1 }, -- doublestruck F + [0x1D541] = { left = .1, right = .1 }, -- doublestruck J + [0x1D542] = { left = .1, right = .1 }, -- doublestruck K + [0x1D543] = { left = .1, right = .1 }, -- doublestruck L + [0x1D547] = { left = .1, right = .1 }, -- doublestruck P + [0x1D549] = { left = .1, right = .1 }, -- doublestruck R + [0x1D54A] = { left = .1, right = .1 }, -- doublestruck S + [0x1D54B] = { left = .1, right = .1 }, -- doublestruck T + [0x1D54D] = { left = .1, right = .1 }, -- doublestruck V + [0x1D550] = { left = .1, right = .1 }, -- doublestruck Y + + [0x1D506] = { left = .1, right = .1 }, -- fraktur C + + [0x00393] = { left = .1, right = .1 }, -- upfight Gamma + [0x00396] = { left = .1, right = .1 }, -- upfight Zeta + + + [0x1D5D8] = { left = .1, right = .1 }, -- sans bold E + [0x1D5D9] = { left = .1, right = .1 }, -- sans bold F + -- [0x1D5DD] = { left = .2, right = .2 }, -- sans bold J -- nope + [0x1D5DF] = { left = .1, right = .1 }, -- sans bold L + [0x1D5E6] = { left = .1, right = .1 }, -- sans bold S + + [0x1D61A] = { left = .1, right = .1 }, -- sans italic S + + [0x1D5A2] = { left = .1, right = .1 }, -- sans C + [0x1D5A4] = { left = .1, right = .1 }, -- sans E + [0x1D5A5] = { left = .1, right = .1 }, -- sans F + -- [0x1D5AB] = { left = .1, right = .1 }, -- sans L -- nope + [0x1D5AF] = { left = .1, right = .1 }, -- sans P + [0x1D5B2] = { left = .1, right = .1 }, -- sans S + [0x1D5B9] = { left = .1, right = .1 }, -- sans Z + + [0x1D4A0] = { left = .1, right = .1 }, -- script E + [0x1D4AE] = { left = .1, right = .1 }, -- script S + [0x1D4B4] = { left = .1, right = .1 }, -- script Y + + -- [0x4A] = { left = .2, right = .2 }, -- J + [0x4C] = { left = .1, right = .1 }, -- L + [0x53] = { left = .1, right = .1 }, -- S + [0x5A] = { left = .1, right = .1 }, -- Z + + [0x1D43D] = { left = -.1, right = -.1 }, -- italic J + + [0x1D409] = { left = -.1, right = -.1 }, -- bold J + + [0x1D471] = { left = -.1, right = -.1 }, -- bold italic J + + [0x1D4D9] = { left = -.05, right = -.05 }, -- bold script J + }, }, { tweak = "fixprimes", @@ -122,17 +454,29 @@ return { { tweak = "addrules", }, + -- { + -- tweak = "wipevariants", + -- list = { + -- 0x7C, + -- }, + -- }, }, }, parameters = { FractionNumeratorDisplayStyleShiftUp = 600, -- used to be a function NoLimitSupFactor = 0, NoLimitSubFactor = 900, - -- AccentBaseHeight = 0, - AccentBaseDepth = 50, + -- AccentBaseHeight = 0, + -- AccentBaseDepth = 0, + -- AccentTopOvershoot = 66, + AccentSuperscriptDrop = 100, -- drop the superscripts if accents are present. Amount in percentage of height of accent(?) + AccentSuperscriptPercent = 0, + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) }, bigslots = { - 1, 3, 5, 7 + 1, 3, 5, 7 -- In fact, 6 is the last one. }, -- -- experimental fixes for mkiv: diff --git a/tex/context/fonts/mkiv/lucida-opentype-math.lfg b/tex/context/fonts/mkiv/lucida-opentype-math.lfg index 44d470650..20dc3aeb1 100644 --- a/tex/context/fonts/mkiv/lucida-opentype-math.lfg +++ b/tex/context/fonts/mkiv/lucida-opentype-math.lfg @@ -2,7 +2,6 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then -- local kern_250 = { bottomright = { { kern = -250 } }, force = true } - -- kerns = { -- [0x1D449] = kern_250, -- -- [0x1D44A] = kern_250, -- 𝑊 @@ -10,7 +9,7 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then dimensions = { default = { -- experimental values --- [0x02044] = { xoffset = 275, width = 600 }, + -- [0x02044] = { xoffset = 275, width = 600 }, -- primes [0xFE932] = { width = 200 }, [0xFE933] = { width = 500 }, @@ -33,12 +32,18 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - RadicalDisplayStyleVerticalGap = 100, - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - FractionRuleThickness = 55, - -- AccentBaseHeight = 650, - AccentBaseDepth = 150, + RadicalDisplayStyleVerticalGap = 100, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + FractionRuleThickness = 55, + -- AccentBaseHeight = 650, + AccentBaseDepth = 150, + RadicalDegreeBottomRaisePercent = 50, + RadicalKernAfterDegree = -600, + RadicalRuleThickness = 35, -- 40 in font (46 in demi) + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) }, tweaks = { aftercopying = { @@ -80,13 +85,21 @@ return { ["0x23DD.parts.2"] = { depth = .8, yoffset = 0.2 }, ["0x23DD.parts.3"] = { xoffset = 0.075, depth = .8, yoffset = 0.2 }, -- The < and > are slightly too small. We scale them by 867/795 - ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057}, - ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057}, + ["0x003C"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, + ["0x003E"] = { scale = 1.09057, width = 1.09057, height = 1.09057 }, -- The = is too big if in ss03. We scale it by 795/867 (not working like this) - -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955}, + -- ["0x003D.ss03"] = { scale = 0.916955, width = 0.916955, height = 0.916955 }, -- these are done later using the AccentBase* parameters - -- [0x23DC] = { height = .2, yoffset = -0.8 }, - -- [0x23DD] = { depth = .6, yoffset = 0.4 }, + -- [0x23DC] = { height = .2, yoffset = -0.8 }, + -- [0x23DD] = { depth = .6, yoffset = 0.4 }, + + -- ["0x7C.variants.1"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, + -- ["0x7C.variants.2"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, + -- ["0x7C.variants.3"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, + -- ["0x7C.variants.4"] = { squeeze = 0.75, height = 0.75, depth = 0.75 }, + -- going zero makes them be ignored + ["0x7C.variants.3"]={ squeeze = 0.90, height = 0.90, depth = 0.90 }, + ["0x7C.variants.4"]={ squeeze = 0.80, height = 0.80, depth = 0.80 }, }, }, { diff --git a/tex/context/fonts/mkiv/minion-math.lfg b/tex/context/fonts/mkiv/minion-math.lfg index c80ade9be..8ebca4c91 100644 --- a/tex/context/fonts/mkiv/minion-math.lfg +++ b/tex/context/fonts/mkiv/minion-math.lfg @@ -1,3 +1,7 @@ +-- This math font has not yet been set up. We will only do that when those involved +-- ConTeXt (math) develoipment have official copies of all the text minion and math +-- fonts without restrictions of usage in documents. + local dimensions, kerns if CONTEXTLMTXMODE == 0 then local kern_W = { bottomright = { { kern = -150 } } } diff --git a/tex/context/fonts/mkiv/newcomputermodern-math.lfg b/tex/context/fonts/mkiv/newcomputermodern-math.lfg index db05cb947..2e0c3169d 100644 --- a/tex/context/fonts/mkiv/newcomputermodern-math.lfg +++ b/tex/context/fonts/mkiv/newcomputermodern-math.lfg @@ -1,5 +1,6 @@ -- In order to be able to use beta math fonts, we use our own file name and --- always remap. +-- always remap. As this font is experimental we don't spend too much time +-- on it now. Even then, we migth stick to design sizes only. local dimensions, kerns if CONTEXTLMTXMODE == 0 then @@ -47,7 +48,6 @@ local dimensions, kerns if CONTEXTLMTXMODE == 0 then end - return { name = "newcomputermodern", version = "1.00", @@ -65,8 +65,11 @@ return { end return o * target.parameters.factor end, - NoLimitSupFactor = 0, - NoLimitSubFactor = 1200, + NoLimitSupFactor = 0, + NoLimitSubFactor = 1200, + DelimiterPercent = 90, + DelimiterShortfall = 400, + -- DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) }, tweaks = { aftercopying = { diff --git a/tex/context/fonts/mkiv/pagella-math.lfg b/tex/context/fonts/mkiv/pagella-math.lfg index 17f59d952..4ace3e650 100644 --- a/tex/context/fonts/mkiv/pagella-math.lfg +++ b/tex/context/fonts/mkiv/pagella-math.lfg @@ -35,11 +35,17 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - AccentTopShiftUp = 30, - -- AccentBaseHeight = 0, - AccentBaseDepth = 80, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + AccentTopShiftUp = 30, + -- AccentBaseHeight = 0, + AccentBaseDepth = 80, + RadicalDegreeBottomRaisePercent = 60, + RadicalKernAfterDegree = -500, + RadicalRuleThickness = 54, -- 60 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1500 in font }, tweaks = { aftercopying = { @@ -66,51 +72,54 @@ return { -- [0x00302] = { scale=.85, yoffset = .1, width = .85, height = .935 }, -- hat -- [0x002C6] = { scale=.75, yoffset = .2, advance = .75, width = .75, height = .90 }, -- hat -- [0x00302] = { scale=.75, yoffset = .2, advance = .75, width = .75, height = .90 }, -- hat + [0x00060] = { yoffset = -0.035 }, -- grave [0x000B4] = { yoffset = -0.035 }, -- acute [0x002C6] = { yoffset = -0.035 }, -- hat [0x002DC] = { yoffset = -0.035 }, -- tilde - [0x000AF] = { yoffset = -0.05 }, -- bar + [0x000AF] = { yoffset = -0.05 }, -- bar [0x002D8] = { yoffset = -0.035 }, -- breve [0x002D9] = { yoffset = -0.035 }, -- dot - [0x000A8] = { yoffset = -0.05 }, -- ddot - [0x020DB] = { yoffset = -0.06 }, -- dddot - -- [0x002DA] = { yoffset = -0.05 }, -- ring - -- [0x002C7] = { yoffset = -0.05 }, -- check - [0x020D7] = { yoffset = -0.05 }, -- vec - -- [0x00300] = { yoffset = -0.07 , all=true }, -- widegrave - -- [0x00301] = { yoffset = -0.07 , all=true }, -- wideacute - [0x00302] = { yoffset = -0.02 , all=true }, -- widehat - [0x00303] = { yoffset = -0.02 , all=true }, -- widetilde - [0x00304] = { yoffset = -0.05 , all=true }, -- widebar - [0x00306] = { yoffset = -0.03 , all=true }, -- widebreve - [0x00307] = { yoffset = -0.03 , all=true }, -- widedot - [0x00308] = { yoffset = -0.03 , all=true }, -- wideddot - -- [0x020DB] = { yoffset = 0.0 , all=true }, -- widedddot - -- [0x0030A] = { yoffset = -0.05 , all=true }, -- widering - [0x0030C] = { yoffset = -0.03 , all=true }, -- widecheck - [0x1D44E] = { 0, 1, 0, 0.9 }, -- a - [0x1D44F] = { 0, 1, 0, 1.3 }, -- b - [0x1D450] = { 0, 1, 0, 0.9 }, -- c - [0x1D451] = { 0, 1, 0, 0.7 }, -- d - [0x1D452] = { 0, 1, 0, 0.9 }, -- e - [0x1D453] = { 0.50, 1.70, 0.6 }, -- f - [0x1D454] = { 0.10, 1.15, 0.2 }, -- g - [0x0210E] = { 0, 1, 0, 1.3 }, -- h - [0x1D458] = { 0, 1, 0, 1.3 }, -- k - [0x1D459] = { 0, 1, 0, 0.9 }, -- l - [0x1D45E] = { 0, 1, 0, 0.9 }, -- q - [0x1D463] = { 0, 1, 0, 1.25 }, -- v - [0x1D464] = { 0, 1, 0, 1.2 }, -- w - [0x1D6FE] = { 0, 1, 0, 1.2 }, -- \gamma - [0x1D706] = { 0, 1, 0, 1.05 }, -- \lambda - [0x1D70A] = { 0, 1, 0, 1.2 }, -- \omicron - [0x1D70D] = { 0, 1, 0, 1.2 }, -- \varsigma - [0x1D70E] = { 0, 1, 0, 1.1 }, -- \sigma - [0x1D70F] = { -.10, 1, 0, 0.95 }, -- \tau - [0x1D712] = { 0.1, 1.2, 0.1 }, -- \chi - [0x1D713] = { -0.05, 0.95, 0.1 }, -- \psi - [0x1D71D] = { 0, 1, 0, 0.7 }, -- \varpi + [0x000A8] = { yoffset = -0.05 }, -- ddot + [0x020DB] = { yoffset = -0.06 }, -- dddot + -- [0x002DA] = { yoffset = -0.05 }, -- ring + -- [0x002C7] = { yoffset = -0.05 }, -- check + [0x020D7] = { yoffset = -0.05 }, -- vec + + -- [0x00300] = { yoffset = -0.07, all=true }, -- widegrave + -- [0x00301] = { yoffset = -0.07, all=true }, -- wideacute + [0x00302] = { yoffset = -0.02, all=true }, -- widehat + [0x00303] = { yoffset = -0.02, all=true }, -- widetilde + [0x00304] = { yoffset = -0.05, all=true }, -- widebar + [0x00306] = { yoffset = -0.03, all=true }, -- widebreve + [0x00307] = { yoffset = -0.03, all=true }, -- widedot + [0x00308] = { yoffset = -0.03, all=true }, -- wideddot + -- [0x020DB] = { yoffset = 0, all=true }, -- widedddot + -- [0x0030A] = { yoffset = -0.05, all=true }, -- widering + [0x0030C] = { yoffset = -0.03, all=true }, -- widecheck + + [0x1D44E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- a + [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b + [0x1D450] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- c + [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- d + [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e + [0x1D453] = { xoffset = 0.50, width = 1.70, italic = 0.6 }, -- f + [0x1D454] = { xoffset = 0.10, width = 1.15, italic = 0.2 }, -- g + [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h + [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k + [0x1D459] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- l + [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q + [0x1D463] = { xoffset = 0, width = 1, italic = 0, anchor = 1.25 }, -- v + [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- w + [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \gamma + [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda + [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron + [0x1D70D] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \varsigma + [0x1D70E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \sigma + [0x1D70F] = { xoffset = -.10, width = 1, italic = 0, anchor = 0.95 }, -- \tau + [0x1D712] = { xoffset = 0.1, width = 1.2, italic = 0.1 }, -- \chi + [0x1D713] = { xoffset = -0.05, width = 0.95, italic = 0.1 }, -- \psi + [0x1D71D] = { xoffset = 0, width = 1, italic = 0, anchor = 0.7 }, -- \varpi }, }, { diff --git a/tex/context/fonts/mkiv/schola-math.lfg b/tex/context/fonts/mkiv/schola-math.lfg index 02bfa8925..21062320c 100644 --- a/tex/context/fonts/mkiv/schola-math.lfg +++ b/tex/context/fonts/mkiv/schola-math.lfg @@ -18,10 +18,16 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - -- AccentBaseHeight = 0, - AccentBaseDepth = 30, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + RadicalDegreeBottomRaisePercent = 60, + RadicalKernAfterDegree = -500, + RadicalRuleThickness = 64, -- 70 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1333 in font }, tweaks = { aftercopying = { @@ -42,7 +48,7 @@ return { topleft = -0.2, -- bottomleft = 0, -- topright = 0, - bottomright = -0.2, + bottomright = -0.2, }, }, }, @@ -76,6 +82,6 @@ return { -- experimental fixes for mkiv: -- dimensions = dimensions, - kerns = kerns, + kerns = kerns, }, } diff --git a/tex/context/fonts/mkiv/stix-two-math.lfg b/tex/context/fonts/mkiv/stix-two-math.lfg index 5761e53a2..b61b0b2bf 100644 --- a/tex/context/fonts/mkiv/stix-two-math.lfg +++ b/tex/context/fonts/mkiv/stix-two-math.lfg @@ -21,10 +21,18 @@ return { circled = { feature = 'ss16', value = 1, comment = "Mathematical Alternative Circled Operators" }, }, parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 1000, - -- AccentBaseHeight = 0, - AccentBaseDepth = 30, + NoLimitSupFactor = 0, + NoLimitSubFactor = 1000, + -- AccentBaseHeight = 0, + AccentBaseDepth = 30, + RadicalDegreeBottomRaisePercent = 65, + -- RadicalKernBeforeDegree = 500, + RadicalKernAfterDegree = -500, + RadicalVerticalGap = 10, + -- RadicalRuleThickness = 68, -- 68 in font (but shifted down) + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1800 in font }, tweaks = { aftercopying = { @@ -39,7 +47,7 @@ return { topleft = -0.2, -- bottomleft = 0, -- topright = 0, - bottomright = -0.2, + bottomright = -0.2, }, }, }, @@ -64,24 +72,25 @@ return { -- [0x000B4] = { yoffset = -0.035 }, -- acute -- [0x002C6] = { yoffset = -0.035 }, -- hat -- [0x002DC] = { yoffset = -0.035 }, -- tilde - -- [0x000AF] = { yoffset = -0.05 }, -- bar + -- [0x000AF] = { yoffset = -0.05 }, -- bar -- [0x002D8] = { yoffset = -0.035 }, -- breve - [0x002D9] = { yoffset = -0.02 }, -- dot - [0x000A8] = { yoffset = -0.02 }, -- ddot - [0x020DB] = { yoffset = 0.04 }, -- dddot - -- [0x002DA] = { yoffset = -0.05 }, -- ring - -- [0x002C7] = { yoffset = -0.05 }, -- check - [0x020D7] = { yoffset = -0.07 }, -- vec - -- [0x00300] = { yoffset = -0.07 , all=true }, -- widegrave - -- [0x00301] = { yoffset = -0.07 , all=true }, -- wideacute - -- [0x00302] = { yoffset = -0.02 , all=true }, -- widehat - -- [0x00303] = { yoffset = -0.02 , all=true }, -- widetilde - -- [0x00304] = { yoffset = -0.05 , all=true }, -- widebar - -- [0x00306] = { yoffset = -0.03 , all=true }, -- widebreve - -- [0x00307] = { yoffset = -0.03 , all=true }, -- widedot - -- [0x00308] = { yoffset = -0.03 , all=true }, -- wideddot - -- [0x020DB] = { yoffset = 0.0 , all=true }, -- widedddot - -- [0x0030A] = { yoffset = -0.05 , all=true }, -- widering + [0x002D9] = { yoffset = -0.02 }, -- dot + [0x000A8] = { yoffset = -0.02 }, -- ddot + [0x020DB] = { yoffset = 0.04 }, -- dddot + -- [0x002DA] = { yoffset = -0.05 }, -- ring + -- [0x002C7] = { yoffset = -0.05 }, -- check + [0x020D7] = { yoffset = -0.07 }, -- vec + + -- [0x00300] = { yoffset = -0.07, all=true }, -- widegrave + -- [0x00301] = { yoffset = -0.07, all=true }, -- wideacute + -- [0x00302] = { yoffset = -0.02, all=true }, -- widehat + -- [0x00303] = { yoffset = -0.02, all=true }, -- widetilde + -- [0x00304] = { yoffset = -0.05, all=true }, -- widebar + -- [0x00306] = { yoffset = -0.03, all=true }, -- widebreve + -- [0x00307] = { yoffset = -0.03, all=true }, -- widedot + -- [0x00308] = { yoffset = -0.03, all=true }, -- wideddot + -- [0x020DB] = { yoffset = 0, all=true }, -- widedddot + -- [0x0030A] = { yoffset = -0.05, all=true }, -- widering }, }, { diff --git a/tex/context/fonts/mkiv/termes-math.lfg b/tex/context/fonts/mkiv/termes-math.lfg index e9796dc31..977217b1c 100644 --- a/tex/context/fonts/mkiv/termes-math.lfg +++ b/tex/context/fonts/mkiv/termes-math.lfg @@ -26,10 +26,15 @@ return { copyright = "ConTeXt development team", mathematics = { parameters = { - NoLimitSupFactor = 0, - NoLimitSubFactor = 900, - -- AccentBaseHeight = 0, - AccentBaseDepth = 50, + NoLimitSupFactor = 0, + NoLimitSubFactor = 900, + -- AccentBaseHeight = 0, + AccentBaseDepth = 50, + RadicalDegreeBottomRaisePercent = 60, + RadicalRuleThickness = 46, -- 52 in font + DelimiterPercent = 90, + DelimiterShortfall = 400, + DisplayOperatorMinHeight = 1800, -- 1300 in font (only one) }, tweaks = { aftercopying = { @@ -40,20 +45,20 @@ return { { tweak = "dimensions", list = { - [0x1D44F] = { 0, 1, 0, 1.3 }, -- b - [0x1D451] = { 0, 1, 0, 0.8 }, -- d - [0x1D452] = { 0, 1, 0, 0.9 }, -- e - [0x0210E] = { 0, 1, 0, 1.3 }, -- h - [0x1D458] = { 0, 1, 0, 1.3 }, -- k - [0x1D453] = { 0.6, 1.4, 1.2, 1.5 }, -- f - [0x1D457] = { 0.5, 1.3, 1.7 }, -- j - [0x1D45D] = { 0.15, 1.15, 0, 1.4 }, -- p - [0x1D45E] = { 0, 1, 0, 0.9 }, -- q - [0x1D464] = { 0, 1, 0, 1.1 }, -- w - [0x1D6FE] = { 0, 1, 0, 1.1 }, -- \gamma - [0x1D706] = { 0, 1, 0, 1.05 }, -- \lambda - [0x1D70A] = { 0, 1, 0, 1.2 }, -- \omicron - [0x1D70F] = { 0, 1, 0, 1.05 }, -- \tau + [0x1D44F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- b + [0x1D451] = { xoffset = 0, width = 1, italic = 0, anchor = 0.8 }, -- d + [0x1D452] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- e + [0x0210E] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- h + [0x1D458] = { xoffset = 0, width = 1, italic = 0, anchor = 1.3 }, -- k + [0x1D453] = { xoffset = 0.6, width = 1.4, italic = 1.2, anchor = 1.5 }, -- f + [0x1D457] = { xoffset = 0.5, width = 1.3, italic = 1.7 }, -- j + [0x1D45D] = { xoffset = 0.15, width = 1.15, italic = 0, anchor = 1.4 }, -- p + [0x1D45E] = { xoffset = 0, width = 1, italic = 0, anchor = 0.9 }, -- q + [0x1D464] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- w + [0x1D6FE] = { xoffset = 0, width = 1, italic = 0, anchor = 1.1 }, -- \gamma + [0x1D706] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \lambda + [0x1D70A] = { xoffset = 0, width = 1, italic = 0, anchor = 1.2 }, -- \omicron + [0x1D70F] = { xoffset = 0, width = 1, italic = 0, anchor = 1.05 }, -- \tau }, }, { @@ -63,7 +68,7 @@ return { topleft = -0.2, -- bottomleft = 0, -- topright = 0, - bottomright = -0.2, + bottomright = -0.2, }, }, }, diff --git a/tex/context/fonts/mkiv/type-imp-alegreya.mkiv b/tex/context/fonts/mkiv/type-imp-alegreya.mkiv new file mode 100644 index 000000000..892173210 --- /dev/null +++ b/tex/context/fonts/mkiv/type-imp-alegreya.mkiv @@ -0,0 +1,86 @@ +%D \module +%D [ file=type-imp-dejavu, +%D version=2010.06.21, +%D title=\CONTEXT\ Typescript Macros, +%D subtitle=Alegreya fonts, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This is cleaned up ersion of thwe one on the wiki. The font can be fetched from: +%D +%D \type {https://www.huertatipografica.com/en/fonts/alegreya-ht-pro} + +% \usetypescriptfile[alegreya] +% +% \usebodyfont[alegreya-light] +% \usebodyfont[alegreya-medium] +% +% \setupbodyfont[alegreya] +% +% \setuplayout[tight] +% +% \starttext +% \switchtobodyfont[alegreya-light] \input tufte \par +% \switchtobodyfont[alegreya] \input tufte \par +% \switchtobodyfont[alegreya-medium] \input tufte \par +% \switchtobodyfont[alegreya-light,sans] \input tufte \par +% \switchtobodyfont[alegreya,sans] \input tufte \par +% \switchtobodyfont[alegreya-medium,sans] \input tufte \par +% \stoptext + +\starttypescriptcollection[alegreya] + +\usetypescriptfile + [imp-gentium] + +\definefontfallback + [alegreyagentium-fallback] + [name:gentium] + [greekandcoptic,greekextended] + +\starttypescript [serif] [alegreya-serif,alegreya-light-serif,alegreya-medium-serif] [name] + \setups[font:fallback:serif] + \definefontsynonym[Serif] [name:alegreyaregular] [features=default,fallbacks=alegreya-gentium-fallback] + \definefontsynonym[SerifItalic] [name:alegreyaitalic] [features=default,fallbacks=alegreya-gentium-fallback] + \definefontsynonym[SerifBold] [name:alegreyabold] [features=default,fallbacks=alegreya-gentium-fallback] + \definefontsynonym[SerifBoldItalic] [name:alegreyabolditalic] [features=default,fallbacks=alegreya-gentium-fallback] +\stoptypescript + +\starttypescript [sans] [alegreya-sans] [name] + \setups[font:fallback:sans] + \definefontsynonym [Sans] [name:alegreyasansregular] [features=default] + \definefontsynonym [SansItalic] [name:alegreyasansitalic] [features=default] + \definefontsynonym [SansBold] [name:alegreyasansbold] [features=default] + \definefontsynonym [SansBoldItalic] [name:alegreyasansbolditalic] [features=default] +\stoptypescript + +\starttypescript [sans] [alegreya-light-sans] [name] + \setups[font:fallback:sans] + \definefontsynonym [Sans] [name:alegreyasanslight] [features=default] + \definefontsynonym [SansItalic] [name:alegreyasanslightitalic] [features=default] + \definefontsynonym [SansBold] [name:alegreyasansmedium] [features=default] + \definefontsynonym [SansBoldItalic] [name:alegreyasansmediumitalic] [features=default] +\stoptypescript + +\starttypescript [sans] [alegreya-medium-sans] [name] + \setups[font:fallback:sans] + \definefontsynonym [Sans] [name:alegreyasansmedium] [features=default] + \definefontsynonym [SansItalic] [name:alegreyasansmediumitalic] [features=default] + \definefontsynonym [SansBold] [name:alegreyasansextrabold] [features=default] + \definefontsynonym [SansBoldItalic] [name:alegreyasansextrabolditalic] [features=default] +\stoptypescript + +\starttypescript [alegreya,alegreya-light,alegreya-medium] + \definefallbackfamily[alegreya][serif][gentium][range={greekandcoptic,greekextended}] + \definetypeface [\typescriptone] [rm] [serif] [\typescriptone-serif] [default] + \definetypeface [\typescriptone] [ss] [sans] [\typescriptone-sans] [default] + \definetypeface [\typescriptone] [tt] [mono] [modern] [default] + \definetypeface [\typescriptone] [mm] [math] [default] [default] +\stoptypescript + +\stoptypescriptcollection diff --git a/tex/context/fonts/mkiv/type-imp-gentium.mkiv b/tex/context/fonts/mkiv/type-imp-gentium.mkiv index 751ca87e7..20e6f79ff 100644 --- a/tex/context/fonts/mkiv/type-imp-gentium.mkiv +++ b/tex/context/fonts/mkiv/type-imp-gentium.mkiv @@ -1,36 +1,81 @@ %D \module %D [ file=type-gentium, -%D version=2013.05.02, +%D version=20220521,, %D title=\CONTEXT\ Typescript Macros, %D subtitle=Typescript file for Gentium, -%D author={Thomas A. Schmitz and Mojca Miklavec}, +%D author=Hans Hagen, %D date=\currentdate, -%D copyright={Mojca and Thomas}] - -% One probably has to enable the 'aalt' feature too. - -\starttypescript [serif] [gentium] - \definefontsynonym [Gentium-Roman] [file:GentiumPlus-R] [features=default] - \definefontsynonym [Gentium-Italic] [file:GentiumPlus-I] [features=default] - \definefontsynonym [Gentium-Bold] [file:GenBasB] [features=default] - \definefontsynonym [Gentium-BoldItalic] [file:GenBasBI] [features=default] - \definefontsynonym [Gentium-Slanted] [Gentium-Italic] - \definefontsynonym [Gentium-BoldSlanted] [Gentium-BoldItalic] - \definefontsynonym [Gentium-RomanCaps] [file:GentiumPlus-R] [features=smallcaps] +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] + +% The file is derived from one by Thomas and Mojca (20130502). + +\usetypescriptfile[dejavu] + +\starttypescript [serif] [gentium,gentiumplus] + \definefontsynonym [Gentium-Roman] [file:GentiumPlus-Regular] [features=default] + \definefontsynonym [Gentium-Italic] [file:GentiumPlus-Italic] [features=default] + \definefontsynonym [Gentium-Bold] [file:GentiumPlus-Bold] [features=default] + \definefontsynonym [Gentium-BoldItalic] [file:GentiumPlus-BoldItalic] [features=default] + \definefontsynonym [Gentium-Slanted] [file:GentiumPlus-Regular] [features={default,slanted}] + \definefontsynonym [Gentium-BoldSlanted] [file:GentiumPlus-Bold] [features={default,slanted}] +\stoptypescript + +\starttypescript [serif] [gentiumbook] + \definefontsynonym [Gentium-Roman] [file:GentiumBookPlus-Regular] [features=default] + \definefontsynonym [Gentium-Italic] [file:GentiumBookPlus-Italic] [features=default] + \definefontsynonym [Gentium-Bold] [file:GentiumBookPlus-Bold] [features=default] + \definefontsynonym [Gentium-BoldItalic] [file:GentiumBookPlus-BoldItalic] [features=default] + \definefontsynonym [Gentium-Slanted] [file:GentiumBookPlus-Regular] [features={default,slanted}] + \definefontsynonym [Gentium-BoldSlanted] [file:GentiumBookPlus-Bold] [features={default,slanted}] \stoptypescript -\starttypescript [serif] [gentium] [name] +\starttypescript [serif] [gentium,gentiumplus,gentiumbook] [name] \definefontsynonym [Serif] [Gentium-Roman] \definefontsynonym [SerifItalic] [Gentium-Italic] \definefontsynonym [SerifBold] [Gentium-Bold] \definefontsynonym [SerifBoldItalic] [Gentium-BoldItalic] \definefontsynonym [SerifSlanted] [Gentium-Slanted] \definefontsynonym [SerifBoldSlanted] [Gentium-BoldSlanted] - \definefontsynonym [SerifCaps] [Serif] - \definefontsynonym [OldStyle] [Serif] - \definefontsynonym [SerifCaps] [Gentium-RomanCaps] \stoptypescript -\starttypescript [gentium] - \definetypeface [gentium] [rm] [serif] [gentium] [default] [features=default] +% HH: we probably need to rscale dejavu here .. feel free to suggest + +\starttypescript [gentium,gentiumplus,gentiumbook] + \definetypeface [\typescriptone] [rm] [serif] [\typescriptone] [default] [features=default] + \definetypeface [\typescriptone] [ss] [sans] [dejavu] [default] [features=default] + \definetypeface [\typescriptone] [tt] [mono] [dejavu] [default] [features=default] + \definetypeface [\typescriptone] [mm] [math] [dejavu] [default] \stoptypescript + +\continueifinputfile{type-imp-gentium.mkiv} + +\usemodule[article-basic,scite] + +\setuplayout[tight] + +\usebodyfont [gentiumbook] +\setupbodyfont[gentiumplus] + +\starttext + +\protected\def\TestLine#1{% + \NC #1 + \NC \switchtobodyfont[#1]\tf normal + \NC \switchtobodyfont[#1]\bf bold + \NC \switchtobodyfont[#1]\it italic + \NC \switchtobodyfont[#1]\bi bolditalic + \NC \switchtobodyfont[#1]\sl slanted + \NC \switchtobodyfont[#1]\bs boldslanted + \NC \NR +} + +\starttabulate[|T|c|c|c|c|c|c|] + \TestLine{gentiumplus} + \TestLine{gentiumbook} +\stoptabulate + +\switchtobodyfont[8pt] + +\typefile[option=TEX]{type-imp-gentium.mkiv} + +\stoptext diff --git a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv index dc31715a4..cf5052c82 100644 --- a/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv +++ b/tex/context/fonts/mkiv/type-imp-latinmodern.mkiv @@ -235,7 +235,7 @@ %D It doesn't hurt to have these, at least for the moment (can go to type-imp-symbol) -\definefontsynonym [ZapfDingbats] [\s!file:uzdr*dingbats] % works better with symbols +\definefontsynonym [ZapfDingbats] [\s!file:uzdr*dingbats]% works better with symbols % \definefontsynonym [ZapfDingbats] [\s!file:uzdr] [\s!features=dingbats]% [\s!goodies=dingbats] diff --git a/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv b/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv index 2494d1af2..f62855a59 100644 --- a/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv +++ b/tex/context/fonts/mkiv/type-imp-modernlatin.mkiv @@ -22,7 +22,7 @@ \doifunknownfontfeature {lm-math-regular} {\definefontfeature[lm-math-regular] [boldened-15]} \doifunknownfontfeature {lm-math-bold} {\definefontfeature[lm-math-bold] [boldened-30]} - \starttypescript [\s!serif] [modern-latin] + \starttypescript [\s!serif] [modernlatin,modern-latin] % \loadfontgoodies[lm] \definefontsynonym [Serif] [\s!file:lmroman10-regular] [\s!features={\s!default,lm-serif-regular}] \definefontsynonym [SerifItalic] [\s!file:lmroman10-italic] [\s!features={\s!default,lm-serif-regular}] @@ -32,7 +32,17 @@ \definefontsynonym [SerifBoldSlanted][\s!file:lmromanslant10-regular] [\s!features={\s!default,lm-serif-bold}] \stoptypescript - \starttypescript [\s!sans] [modern-latin] + \starttypescript [\s!serif] [lessmodernlatin,less-modern-latin] + % \loadfontgoodies[lm] + \definefontsynonym [Serif] [\s!file:lmroman10-regular] [\s!features={\s!default,lm-serif-regular}] + \definefontsynonym [SerifItalic] [\s!file:lmroman10-italic] [\s!features={\s!default,lm-serif-regular}] + \definefontsynonym [SerifSlanted] [\s!file:lmromanslant10-regular] [\s!features={\s!default,lm-serif-regular}] + \definefontsynonym [SerifBold] [\s!file:lmroman10-bold] [\s!features={\s!default,lm-serif-regular}] + \definefontsynonym [SerifBoldItalic] [\s!file:lmroman10-bolditalic] [\s!features={\s!default,lm-serif-regular}] + \definefontsynonym [SerifBoldSlanted][\s!file:lmromanslant10-bold] [\s!features={\s!default,lm-serif-regular}] + \stoptypescript + + \starttypescript [\s!sans] [modernlatin,modern-latin] % \loadfontgoodies[lm] \definefontsynonym [Sans] [\s!file:lmsans10-regular] [\s!features={\s!default,lm-sans-regular}] \definefontsynonym [SansItalic] [\s!file:lmsans10-oblique] [\s!features={\s!default,lm-sans-regular}] @@ -42,7 +52,17 @@ \definefontsynonym [SansBoldSlanted][\s!file:lmsans10-oblique] [\s!features={\s!default,lm-sans-bold}] \stoptypescript - \starttypescript [\s!mono] [modern-latin] + \starttypescript [\s!sans] [lessmodernlatin,less-modern-latin] + % \loadfontgoodies[lm] + \definefontsynonym [Sans] [\s!file:lmsans10-regular] [\s!features={\s!default,lm-sans-regular}] + \definefontsynonym [SansItalic] [\s!file:lmsans10-oblique] [\s!features={\s!default,lm-sans-regular}] + \definefontsynonym [SansSlanted] [\s!file:lmsans10-boldoblique] [\s!features={\s!default,lm-sans-regular}] + \definefontsynonym [SansBold] [\s!file:lmsans10-bold] [\s!features={\s!default,lm-sans-regular}] + \definefontsynonym [SansBoldItalic] [\s!file:lmsans10-boldoblique] [\s!features={\s!default,lm-sans-regular}] + \definefontsynonym [SansBoldSlanted][\s!file:lmsans10-boldoblique] [\s!features={\s!default,lm-sans-regular}] + \stoptypescript + + \starttypescript [\s!mono] [modernlatin,modern-latin] % \loadfontgoodies[lm] \definefontsynonym [Mono] [\s!file:lmmono10-regular] [\s!features={\s!default,lm-mono-regular}] \definefontsynonym [MonoItalic] [\s!file:lmmono10-italic] [\s!features={\s!default,lm-mono-regular}] @@ -52,17 +72,27 @@ \definefontsynonym [MonoBoldSlanted][\s!file:lmmonoslant10-regular] [\s!features={\s!default,lm-mono-bold}] \stoptypescript - \starttypescript [\s!math] [modern-latin] + \starttypescript [\s!mono] [lessmodernlatin,less-modern-latin] + % \loadfontgoodies[lm] + \definefontsynonym [Mono] [\s!file:lmmono10-regular] [\s!features={\s!default,lm-mono-regular}] + \definefontsynonym [MonoItalic] [\s!file:lmmono10-italic] [\s!features={\s!default,lm-mono-regular}] + \definefontsynonym [MonoSlanted] [\s!file:lmmonoslant10-regular] [\s!features={\s!default,lm-mono-regular}] + \definefontsynonym [MonoBold] [\s!file:lmmono10-bold] [\s!features={\s!default,lm-mono-regular}] + \definefontsynonym [MonoBoldItalic] [\s!file:lmmono10-bolditalic] [\s!features={\s!default,lm-mono-regular}] + \definefontsynonym [MonoBoldSlanted][\s!file:lmmonoslant10-regular] [\s!features={\s!default,lm-mono-bold}] + \stoptypescript + + \starttypescript [\s!math] [modernlatin,modern-latin,lessmodernlatin,less-modern-latin] \loadfontgoodies[lm] \definefontsynonym [MathRoman] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,lm-math-regular,mathextra},\s!goodies=lm] \definefontsynonym [MathRomanBold] [\v!file:latinmodern-math-regular.otf] [\s!features={\s!math\mathsizesuffix,lm-math,lm-math-bold,mathextra},\s!goodies=lm] \stoptypescript - \starttypescript [modern-latin,modernlatin] - \definetypeface [\typescriptone] [\s!rm] [\s!serif] [modern-latin] [\s!default] - \definetypeface [\typescriptone] [\s!ss] [\s!sans] [modern-latin] [\s!default] - \definetypeface [\typescriptone] [\s!tt] [\s!mono] [modern-latin] [\s!default] - \definetypeface [\typescriptone] [\s!mm] [\s!math] [modern-latin] [\s!default] + \starttypescript [modern-latin,modernlatin,less-modern-latin,lessmodernlatin] + \definetypeface [\typescriptone] [\s!rm] [\s!serif] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!ss] [\s!sans] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!tt] [\s!mono] [\typescriptone] [\s!default] + \definetypeface [\typescriptone] [\s!mm] [\s!math] [\typescriptone] [\s!default] \quittypescriptscanning \stoptypescript diff --git a/tex/context/fonts/mkiv/xits-math.lfg b/tex/context/fonts/mkiv/xits-math.lfg index dfb0e54bb..cf3050369 100644 --- a/tex/context/fonts/mkiv/xits-math.lfg +++ b/tex/context/fonts/mkiv/xits-math.lfg @@ -40,7 +40,7 @@ return { -- feature = false, -- use the saved ones (see typescript) selector = 0xFE00, }, - -- 0xFEO1 should be roundhand style, if present + -- 0xFEO1 should be roundhand style, if present { tweak = "variants", kind = "script", diff --git a/tex/context/interface/mkii/keys-cs.xml b/tex/context/interface/mkii/keys-cs.xml index 798a94760..5b470d75b 100644 --- a/tex/context/interface/mkii/keys-cs.xml +++ b/tex/context/interface/mkii/keys-cs.xml @@ -647,6 +647,7 @@ + @@ -1059,6 +1060,8 @@ + + @@ -1069,6 +1072,7 @@ + @@ -1240,6 +1244,8 @@ + + diff --git a/tex/context/interface/mkii/keys-en.xml b/tex/context/interface/mkii/keys-en.xml index 9533b43f6..39538688d 100644 --- a/tex/context/interface/mkii/keys-en.xml +++ b/tex/context/interface/mkii/keys-en.xml @@ -876,6 +876,7 @@ + @@ -956,6 +957,7 @@ + @@ -1014,6 +1016,7 @@ + @@ -1060,6 +1063,8 @@ + + @@ -1070,6 +1075,7 @@ + @@ -1123,6 +1129,7 @@ + @@ -1176,6 +1183,7 @@ + diff --git a/tex/context/interface/mkii/keys-pe.xml b/tex/context/interface/mkii/keys-pe.xml index 598b3092c..ba477f82e 100644 --- a/tex/context/interface/mkii/keys-pe.xml +++ b/tex/context/interface/mkii/keys-pe.xml @@ -876,6 +876,7 @@ + @@ -956,6 +957,7 @@ + @@ -1014,6 +1016,7 @@ + @@ -1060,6 +1063,8 @@ + + @@ -1070,6 +1075,7 @@ + @@ -1123,6 +1129,7 @@ + @@ -1176,6 +1183,7 @@ + diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml index d15ee78f1..175143c2c 100644 --- a/tex/context/interface/mkii/keys-ro.xml +++ b/tex/context/interface/mkii/keys-ro.xml @@ -1060,6 +1060,8 @@ + + @@ -1070,6 +1072,7 @@ + diff --git a/tex/context/modules/mkiv/m-simulate.mkiv b/tex/context/modules/mkiv/m-simulate.mkiv index dc4448903..c4817b95e 100644 --- a/tex/context/modules/mkiv/m-simulate.mkiv +++ b/tex/context/modules/mkiv/m-simulate.mkiv @@ -109,7 +109,7 @@ \else \discretionary{\p_hyphen}{}{\kern\scratchdimenthree}% \fi\fi\fi\fi\fi\fi}% - \edef\truncated##1##2\relax{##1}% + \def\truncated##1##2\relax{##1}% % trialtypesetting: tricky \ifx\p_random\empty \else \pushrandomseed diff --git a/tex/context/modules/mkiv/m-zint.mkiv b/tex/context/modules/mkiv/m-zint.mkiv index 87e0d382c..4880aa39b 100644 --- a/tex/context/modules/mkiv/m-zint.mkiv +++ b/tex/context/modules/mkiv/m-zint.mkiv @@ -108,8 +108,8 @@ end % \blank % \barcode[alternative=isbn,text=9789490688011,width=3cm] % \blank - \barcode[alternative=datamatrix,text=whatever,width=3cm,option=--square] - +% \barcode[alternative=datamatrix,text=whatever,width=3cm,option=--square,suffix=png] + \barcode[alternative=maxicode,text=whatever,width=3cm,suffix=png] \stoptext diff --git a/tex/context/modules/mkiv/s-math-characters.lua b/tex/context/modules/mkiv/s-math-characters.lua index aed3258d2..b634a203f 100644 --- a/tex/context/modules/mkiv/s-math-characters.lua +++ b/tex/context/modules/mkiv/s-math-characters.lua @@ -113,36 +113,38 @@ function moduledata.math.characters.showlist(specification) end else -local function collectalllookups(tfmdata,script,language) - local all = setmetatableindex(function(t,k) local v = setmetatableindex("table") t[k] = v return v end) - local shared = tfmdata.shared - local rawdata = shared and shared.rawdata - if rawdata then - local features = rawdata.resources.features - if features.gsub then - for kind, feature in next, features.gsub do - local validlookups, lookuplist = fonts.handlers.otf.collectlookups(rawdata,kind,script,language) - if validlookups then - for i=1,#lookuplist do - local lookup = lookuplist[i] - local steps = lookup.steps - for i=1,lookup.nofsteps do - local coverage = steps[i].coverage - if coverage then - for k, v in next, coverage do - all[k][lookup.type][kind] = v + local function collectalllookups(tfmdata,script,language) + local all = setmetatableindex(function(t,k) local v = setmetatableindex("table") t[k] = v return v end) + local shared = tfmdata.shared + local rawdata = shared and shared.rawdata + if rawdata then + local features = rawdata.resources.features + if features.gsub then + for kind, feature in next, features.gsub do + local validlookups, lookuplist = fonts.handlers.otf.collectlookups(rawdata,kind,script,language) + if validlookups then + for i=1,#lookuplist do + local lookup = lookuplist[i] + local steps = lookup.steps + for i=1,lookup.nofsteps do + local coverage = steps[i].coverage + if coverage then + for k, v in next, coverage do + all[k][lookup.type][kind] = v + end + end end end end end end end + return all end - end - return all -end -local alllookups = collectalllookups(tfmdata,"math","dflt") + local alllookups = collectalllookups(tfmdata,"math","dflt") + + local luametatex = LUATEXENGINE == "luametatex" context.showmathcharactersstart() for _, unicode in next, sorted do @@ -163,10 +165,29 @@ local alllookups = collectalllookups(tfmdata,"math","dflt") local mathspec = info.mathspec local mathsymbol = info.mathsymbol local description = info.description or no_description - context.showmathcharactersstartentry() - context.showmathcharactersreference(f_unicode(unicode)) - context.showmathcharactersentryhexdectit(f_unicode(code),code,lower(description)) - context.showmathcharactersentrywdhtdpic(round(char.width or 0),round(char.height or 0),round(char.depth or 0),round(char.italic or 0)) + context.showmathcharactersstartentry( + ) + context.showmathcharactersreference( + f_unicode(unicode) + ) + context.showmathcharactersentryhexdectit( + f_unicode(code), + code, + lower(description) + ) + if luametatex then + context.showmathcharactersentrywdhtdpicta( + code + ) + else + context.showmathcharactersentrywdhtdpicta( + round(char.width or 0), + round(char.height or 0), + round(char.depth or 0), + round(char.italic or 0), + round(char.topaccent or 0) + ) + end if virtual and commands then local t = { } for i=1,#commands do diff --git a/tex/context/modules/mkiv/s-math-repertoire.mkiv b/tex/context/modules/mkiv/s-math-repertoire.mkiv index 826c13fb0..59a2b828b 100644 --- a/tex/context/modules/mkiv/s-math-repertoire.mkiv +++ b/tex/context/modules/mkiv/s-math-repertoire.mkiv @@ -34,6 +34,8 @@ \definecolor[backgroundcolory][g=.6] \definecolor[baselinecolor] [a=1,t=.5,s=.6] \definecolor[charactercolor] [b=.6] +\definecolor[italiccolor] [r=.6] +\definecolor[anchorcolor] [s=1] \definecolor[pagecolor] [s=.1] \definecolor[nonecolor] [s=.5] \definecolor[textcolor] [s=.9] @@ -225,24 +227,68 @@ {\iffontchar\font#2\relax \scale [sx=#1,sy=#1] - {\dontleavehmode - \begingroup - \setbox\scratchbox\hbox{\charactercolor\char#2}% - \scratchdimen\wd\scratchbox - \ifdim\scratchdimen>\zeropoint + {\dontleavehmode\hbox\bgroup + \setbox\scratchbox\hbox\bgroup + \charactercolor + \char#2\relax + \egroup + \scratchwidth \wd\scratchbox + \scratchheight\ht\scratchbox + \scratchdepth \dp\scratchbox + \scratchitalic\ifdefined\glyphscale\glyphxscaled\fontcharic\font#2\relax\else\zeropoint\fi + \setbox\scratchbox\hbox\bgroup + \ifdim\scratchitalic=\zeropoint\else + \hskip\scratchwidth + \ifdim\scratchitalic<\zeropoint + \hskip\scratchitalic + \scratchitalic-\scratchitalic + \fi + \italiccolor + \vrule + width \scratchitalic + height \scratchheight + depth \scratchdepth + \relax + \hskip-\dimexpr\scratchwidth+\scratchitalic\relax + \fi + \unhbox\scratchbox + \egroup + \scratchtotal\dimexpr\scratchwidth+\scratchitalic\relax + \wd\scratchbox\scratchtotal + % + \ifdim\scratchtotal>\zeropoint \backgroundline[backgroundcolor]{\box\scratchbox}% - \else\ifdim\scratchdimen<\zeropoint - \scratchdimen-\scratchdimen - \setbox\scratchbox\hbox to \scratchdimen{\hss\charactercolor\char#2}% + \else\ifdim\scratchtotal<\zeropoint + % really negative width? + \scratchtotal-\scratchtotal + \setbox\scratchbox\hbox to \scratchtotal{\hss\charactercolor\char#2}% \backgroundline[backgroundcolorx]{\box\scratchbox}% \else \setbox\scratchbox\hbox to \emwidth{\hss\charactercolor\char#2}% - \scratchdimen\wd\scratchbox + \scratchtotal\wd\scratchbox \backgroundline[backgroundcolory]{\box\scratchbox}% \fi\fi - \hskip-\scratchdimen - \baselinecolor\vrule width \scratchdimen height .05\exheight depth .05\exheight - \endgroup}% + \hskip-\scratchtotal + \baselinecolor\vrule width \scratchtotal height .05\exheight depth .05\exheight + % + \ifdefined\glyphscale + \scratchdimen\glyphyscaled\fontcharta\font#2\relax + \ifdim\scratchdimen=\zeropoint\else + \hskip-\scratchtotal + \hbox to \scratchwidth yoffset \scratchheight \bgroup + \hskip\scratchdimen + \anchorcolor + \vrule + width .10\exheight + height .05\exheight + depth .05\exheight + \relax + \hss + \egroup + \hskip\scratchitalic + \fi + \fi + \egroup}% \fi} \unexpanded\def\showmathcharactersmth#1#2% @@ -325,17 +371,50 @@ [preset=middlebottom,voffset=5mm] {\showmathcharactersbodyfontschars{#2}}}} -% dimensions - -\unexpanded\def\showmathcharactersentrywdhtdpic#1#2#3#4% - {\setlayer - [page] - [preset=leftbottom,offset=5mm] - {\somedata[align=normal,width=5cm] - {\strut width \hfill \the\dimexpr#1\scaledpoint\par - \strut height\hfill \the\dimexpr#2\scaledpoint\par - \strut depth \hfill \the\dimexpr#3\scaledpoint\par - \strut italic\hfill \the\dimexpr#4\scaledpoint}}} +% dimensions (we can ask them in tex) + +\ifcase\contextlmtxmode + + \unexpanded\def\showmathcharactersentrywdhtdpicta#1#2#3#4#5% + {\setlayer + [page] + [preset=leftbottom,offset=5mm] + {\somedata[align=normal,width=5cm] + {\strut width \hfill \the\dimexpr#1\scaledpoint\par + \strut height\hfill \the\dimexpr#2\scaledpoint\par + \strut depth \hfill \the\dimexpr#3\scaledpoint\par + \ifnum#4=\zerocount\else + \strut italic\hfill \the\dimexpr#4\scaledpoint\par + \fi + \ifnum#5=\zerocount\else + \strut accent\hfill \the\dimexpr#5\scaledpoint + \fi + }}} + +\else + + \unexpanded\def\showmathcharactersentrywdhtdpicta#1% + {\setlayer + [page] + [preset=leftbottom,offset=5mm] + {\somedata[align=normal,width=5cm] + {\scratchwidth \glyphxscaled\fontcharwd\font#1% + \scratchheight\glyphxscaled\fontcharht\font#1% + \scratchdepth \glyphxscaled\fontchardp\font#1% + \scratchitalic\glyphxscaled\fontcharic\font#1% + \scratchdimen \glyphxscaled\fontcharta\font#1% + \strut width \hfill \the\scratchwidth \par + \strut height\hfill \the\scratchheight\par + \strut depth \hfill \the\scratchdepth \par + \ifnum\scratchitalic=\zerocount\else + \strut italic\hfill \the\scratchitalic\par + \fi + \ifnum\scratchdimen=\zerocount\else + \strut accent\hfill \the\scratchdimen + \fi + }}} + +\fi \unexpanded\def\showmathcharactersentryresource#1% {} % {virtual: #1\par} @@ -459,16 +538,20 @@ \continueifinputfile{s-math-repertoire.mkiv} +% \enabledirectives[math.nogoodies] + % \showmathcharacterssetbodyfonts{lucidaot,cambria,xits,stixtwo,modern,pagella,termes,bonum,schola,dejavu} +\showmathcharacterssetbodyfonts{lucidaot,cambria,stixtwo,modern,pagella,termes,bonum,schola,ebgaramond,dejavu,modernlatin} % \showmathcharacterssetbodyfonts{newcomputermodern-book,lucidaot,cambria,stixtwo,modern,pagella,termes,bonum,schola,dejavu} % \showmathcharacterssetbodyfonts{newcomputermodern-book,stixtwo,modern,pagella,termes,bonum,schola,dejavu} -\showmathcharacterssetbodyfonts{newcomputermodern-book,lucidaot,cambria,stixtwo,modern,pagella,termes,schola,dejavu} +% \showmathcharacterssetbodyfonts{newcomputermodern-book,lucidaot,cambria,stixtwo,modern,pagella,termes,schola,dejavu} +% \showmathcharacterssetbodyfonts{modernlatin,lucidaot,cambria,stixtwo,modern,pagella,termes,schola,dejavu} \starttext \doifelse {\getdocumentargument{bodyfont}} {} { - % \setupbodyfont[cambria, 12pt] + \setupbodyfont[cambria, 12pt] % \setupbodyfont[modern, 12pt] % \setupbodyfont[lmvirtual, 12pt] % \setupbodyfont[pxvirtual, 12pt] @@ -484,7 +567,7 @@ % \setupbodyfont[schola, 12pt] % \setupbodyfont[dejavu, 12pt] % \setupbodyfont[lucidaot, 12pt] - \setupbodyfont[newcomputermodern-book, 12pt] + % \setupbodyfont[newcomputermodern-book, 12pt] } { diff --git a/tex/context/modules/mkxl/m-barcodes.mkxl b/tex/context/modules/mkxl/m-barcodes.mkxl index 43540e457..0ded9bbd6 100644 --- a/tex/context/modules/mkxl/m-barcodes.mkxl +++ b/tex/context/modules/mkxl/m-barcodes.mkxl @@ -31,10 +31,13 @@ \continueifinputfile{m-barcodes.mkxl} \starttext - \startTEXpage - \barcode[type=isbn,text=978-9490688011] - \blank - \barcode[type=isbn,text=9780500518724] + \startTEXpage[offset=1dk] + \startcombination[2*2] + {\barcode[type=isbn,text=978-9490688011,width=3cm]} {} + {\barcode[type=isbn,text=9780500518724,width=3cm]} {} + {\barcode[type=datamatrix,text=whatever,width=3cm,option=--square]} {} + {\barcode[type=maxicode,text=whatever,width=3cm]} {} + \stopcombination \stopTEXpage \stoptext diff --git a/tex/context/modules/mkxl/m-json.mkxl b/tex/context/modules/mkxl/m-json.mkxl index 46c2f79a7..893abbe75 100644 --- a/tex/context/modules/mkxl/m-json.mkxl +++ b/tex/context/modules/mkxl/m-json.mkxl @@ -41,7 +41,7 @@ end, arguments = "2 arguments", public = true, -protected = true, + protected = true, } interfaces.implement { diff --git a/tex/context/modules/mkxl/m-oldmath.mkxl b/tex/context/modules/mkxl/m-oldmath.mkxl new file mode 100644 index 000000000..248ff66bd --- /dev/null +++ b/tex/context/modules/mkxl/m-oldmath.mkxl @@ -0,0 +1,142 @@ +%D \module +%D [ file=m-oldmath, +%D version=2022.06.17, +%D title=Math, +%D subtitle=Fallback to old stuff, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is therefore copyrighted +%D by \PRAGMA. See mreadme.pdf for details. + +%D For the \type {\over} die|-|hards (for this occasion I checked out Outlaw Vern's +%D updated review on that movie): + +\unprotect + +\mathgroupingmode \zerocount + +\permanent\protected\def\eqalign#1% rather plain, is this used at all ... + {\dontleavehmode + \mskip\thinmuskip\vcenter\bgroup % \vcenter \s!class \mathwrappercode \bgroup + \mathsurround\zeropoint % \math_eqalign_set_defaults + \ialign + {\strut + \hfil + \mathbeginclass\mathordcode + \mathendclass \mathordcode + \startforceddisplaymath\aligncontent\stopforceddisplaymath + \aligntab + \mathbeginclass\mathordcode + \mathendclass \mathordcode + \startforceddisplaymath\aligncontent\stopforceddisplaymath + \hfil + \crcr + #1% + \crcr}% + \egroup\mskip\thinmuskip} % \egroup + +%D Obsolete: + +% \permanent\protected\def\displaylines#1% +% {\the\mathdisplayaligntweaks +% \tabskip\zeroskip +% \halign +% {\hbox to \displaywidth{% +% \normalstartimath\tabskip\zeroskip\everycr\emptytoks\hfil\displaystyle\alignmark\alignmark\hfil\normalstopimath}\crcr +% #1\crcr}} + +%D no longer defined: + +% \permanent\def\ialign % initialized \halign, to be used grouped! +% {\everycr\emptytoks +% \tabskip\zeroskip +% \halign} +% +% \permanent\def\oalign#1% +% {\leavevmode % plain tex uses this +% \vtop +% {\baselineskip\zeroskip +% \lineskip.25\exheight +% \ialign{\alignmark\alignmark\crcr#1\crcr}}} +% +% \permanent\def\ooalign % chars over each other +% {\lineskiplimit-\maxdimen +% \oalign} + +%D More old plain stuff: + +\permanent\protected\def\buildrel#1\over#2% + {\mathrel{\mathop{\kern\zeropoint#2}\limits^{#1}}} + +\permanent\protected\def\math_openup + {\afterassignment\math_openup_indeed\scratchdimen} + +\aliased\let\math_closeup\relax + +\def\math_openup_indeed + {\enforced\permanent\protected\edef\math_closeup + {\lineskip \the\lineskip + \baselineskip \the\baselineskip + \lineskiplimit\the\lineskiplimit + \relax}% + \advance\lineskip \scratchdimen + \advance\baselineskip \scratchdimen + \advance\lineskiplimit\scratchdimen} + +\permanent\protected\def\openup {\math_openup } % the low level ones are used elsewhere +\permanent\protected\def\closeup{\math_closeup} % the low level ones are used elsewhere + +%D Who knows: + +\permanent\protected\def\choose{\atopwithdelims()} % used in korean test file, has to go +\permanent\protected\def\brack {\atopwithdelims[]} +\permanent\protected\def\brace {\atopwithdelims\{\}} + +%D We have better ways: + +\permanent\protected\def\cases#1% + {\left\{% + \mskip\thinmuskip + \vcenter + {\normalbaselines + \mathsurround\zeropoint + \ialign{% + \normalstartimath\alignmark\alignmark\hfil\normalstopimath + \aligntab + \quad\alignmark\alignmark\hfil + \crcr + #1% + \crcr}}% + \right.} + +\permanent\protected\def\matrix#1% + {\emptyhbox + \mskip\thinmuskip + \vcenter + {\normalbaselines + \mathsurround\zeropoint + \ialign{% + \hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil + \aligntab + \aligntab + \quad\hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil + \crcr + \mathstrut + \crcr + \noalign{\kern-\baselineskip} + #1\crcr + \mathstrut + \crcr + \noalign{\kern-\baselineskip}}}% + \mskip\thinmuskip} + +\permanent\protected\def\pmatrix#1% + {\left(\matrix{#1}\right)} + + + +\protect + +\endinput diff --git a/tex/context/modules/mkxl/s-layout-show.mkxl b/tex/context/modules/mkxl/s-layout-show.mkxl index 95a6d3371..948b0953f 100644 --- a/tex/context/modules/mkxl/s-layout-show.mkxl +++ b/tex/context/modules/mkxl/s-layout-show.mkxl @@ -118,6 +118,36 @@ \NC inner margin \NC \the\innermarginwidth \NC \NR \stoptabulate} +\permanent\protected\gdef\showcentering + {\setupbackgrounds + [\v!text] + [\c!background=centeringlines]} + +\defineoverlay + [centeringlines] + [\vpack to \d_overlay_height \bgroup + \vfill + \hpack to \d_overlay_width \bgroup + \hss + \hskip1cm + \dorecurse{15}{% + \kern-.25\onepoint + \ifodd\recurselevel + \darkred + \else + \darkblue + \fi + \vrule + height.5\d_overlay_height + depth .5\d_overlay_height + width .5\onepoint + \hskip1cm + }% + \hss + \egroup + \vfill + \egroup] + %D Page grids: \newconstant\c_page_grids_location diff --git a/tex/context/modules/mkxl/s-math-tweaks.mkxl b/tex/context/modules/mkxl/s-math-tweaks.mkxl index 2579f1ec4..8a70d431f 100644 --- a/tex/context/modules/mkxl/s-math-tweaks.mkxl +++ b/tex/context/modules/mkxl/s-math-tweaks.mkxl @@ -147,6 +147,151 @@ \stopsubject \stoptexdefinition +\starttexdefinition protected showmathalphabettweaks_check_flush #1 + \dontleavehmode + \hbox \bgroup + \smallinfofont + \setstrut + \lower \dimexpr\dp\scratchbox+\ht\strutbox\relax \hbox to \wd\scratchbox\bgroup + \hss + \strut + \hexnumber{#1} + \hss + \egroup + \hskip-\wd\scratchbox + \box\scratchbox + \egroup +\stoptexdefinition + +\starttexdefinition protected showmathalphabettweaks_check_scripts + \subscript 1 + \superscript 2 + \subprescript 3 + \superprescript4 +\stoptexdefinition + +\starttexdefinition protected showmathalphabettweaks_check_hat #1 + \setbox\scratchbox\ruledhbox { + \im { + \resetmathattributes + \widehat{\Uchar#1} + \showmathalphabettweaks_check_scripts + } + } + \showmathalphabettweaks_check_flush{#1} +\stoptexdefinition + +\starttexdefinition protected showmathalphabettweaks_check_fences #1 + \setbox\scratchbox\ruledhbox { + \im { + \resetmathattributes + \left( + \Uchar#1 + \showmathalphabettweaks_check_scripts + \right) + } + } + \showmathalphabettweaks_check_flush{#1} +\stoptexdefinition + +\starttexdefinition protected showmathalphabettweaks_check #1#2 + \startsubsubsubject[title=#1] + \traverseblock {#1} { + \begingroup + \showglyphs + \showfontitalics + \showfontkerns + #2{##1}% + \endgroup + \space\space + } + \removeunwantedspaces + \stopsubsubsubject +\stoptexdefinition + +\starttexdefinition protected showmathalphabettweaks_all #1 + \startsubsubject[title={Numbers}] + \showmathalphabettweaks_check{digits normal}#1 + \showmathalphabettweaks_check{digits bold}#1 + \showmathalphabettweaks_check{digits sansserif normal}#1 + \showmathalphabettweaks_check{digits sansserif bold}#1 + \showmathalphabettweaks_check{digits monospace}#1 + \showmathalphabettweaks_check{digits doublestruck}#1 + \stopsubsubject + \startsubsubject[title={Lowercase}] + \showmathalphabettweaks_check{lowercase normal}#1 + \showmathalphabettweaks_check{lowercase italic}#1 + \showmathalphabettweaks_check{lowercase bold}#1 + \showmathalphabettweaks_check{lowercase bold italic}#1 + \showmathalphabettweaks_check{lowercase sansserif normal}#1 + \showmathalphabettweaks_check{lowercase sansserif italic}#1 + \showmathalphabettweaks_check{lowercase sansserif bold}#1 + \showmathalphabettweaks_check{lowercase sansserif bolditalic}#1 + \showmathalphabettweaks_check{lowercase monospace}#1 + \showmathalphabettweaks_check{lowercase fraktur}#1 + \showmathalphabettweaks_check{lowercase bold fraktur}#1 + \showmathalphabettweaks_check{lowercase script}#1 + \showmathalphabettweaks_check{lowercase bold script}#1 + \showmathalphabettweaks_check{lowercase doublestruck}#1 + \showmathalphabettweaks_check{lowercase greek normal}#1 + \showmathalphabettweaks_check{lowercase greek italic}#1 + \showmathalphabettweaks_check{lowercase greek bold}#1 + \showmathalphabettweaks_check{lowercase greek bold italic}#1 + % \showmathalphabettweaks_check{lowercase greek sansserif normal}#1 + % \showmathalphabettweaks_check{lowercase greek sansserif italic}#1 + \showmathalphabettweaks_check{lowercase greek sansserif bold}#1 + \showmathalphabettweaks_check{lowercase greek sansserif bolditalic}#1 + \stopsubsubject + \startsubsubject[title={Uppercase}] + \showmathalphabettweaks_check{uppercase normal}#1 + \showmathalphabettweaks_check{uppercase italic}#1 + \showmathalphabettweaks_check{uppercase bold}#1 + \showmathalphabettweaks_check{uppercase bolditalic}#1 + \showmathalphabettweaks_check{uppercase sansserif normal}#1 + \showmathalphabettweaks_check{uppercase sansserif italic}#1 + \showmathalphabettweaks_check{uppercase sansserif bold}#1 + \showmathalphabettweaks_check{uppercase sansserif bolditalic}#1 + \showmathalphabettweaks_check{uppercase monospace}#1 + \showmathalphabettweaks_check{uppercase fraktur}#1 + \showmathalphabettweaks_check{uppercase bold fraktur}#1 + \showmathalphabettweaks_check{uppercase script}#1 + \showmathalphabettweaks_check{uppercase bold script}#1 + \showmathalphabettweaks_check{uppercase doublestruck}#1 + \showmathalphabettweaks_check{uppercase greek normal}#1 + \showmathalphabettweaks_check{uppercase greek italic}#1 + \showmathalphabettweaks_check{uppercase greek bold}#1 + \showmathalphabettweaks_check{uppercase greek bolditalic}#1 + \showmathalphabettweaks_check{uppercase greek sansserif bold}#1 + \showmathalphabettweaks_check{uppercase greek sansserif bolditalic}#1 + \stopsubsubject +\stoptexdefinition + +\starttexdefinition protected showmathaccenttweaks + \showmathalphabettweaks_all\showmathalphabettweaks_check_hat +\stoptexdefinition + +\starttexdefinition protected showmathfencetweaks + \showmathalphabettweaks_all\showmathalphabettweaks_check_fences +\stoptexdefinition + +\starttexdefinition protected showmathmiddletweaks + \dostepwiserecurse {5} {75} {1} { + $\left\{ + \mathatom class \mathconstructcode \bgroup \vcenter \bgroup \hbox \bgroup + \blackrule + [\c!height=\dimexpr##1pt/2\relax, + \c!depth=\dimexpr##1pt/2\relax, + \c!width=\emwidth, + \c!color=darkblue]% + \egroup \egroup \egroup + \middle| + % \begingroup\darkblue\scriptscriptstyle\mathtt{##1}\endgroup + \right)$ + \space + } + \removeunwantedspaces +\stoptexdefinition + \protect \stopmodule @@ -156,30 +301,55 @@ \setuplayout [tight] +\setuphead + [chapter] + [style=\bfd] + +\setuphead + [section] + [style=\bfc] + +\setuphead + [subsection] + [style=\bfb] + +\setuphead + [subsubsection] + [before=\blank, + style=\bfa] + +% \enabletrackers[math.tweaks] + \starttext -\definefontfeature[mathextra][compose=yes] +% \definefontfeature[mathextra][compose=yes] -% \number"23DC \doifelse {\getdocumentargument{bodyfont}} {} { % \setupbodyfont[cambria,10pt] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle -% \setupbodyfont[modern] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[modern] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle % \setupbodyfont[pagella] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle % \setupbodyfont[termes] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle % \setupbodyfont[bonum] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle % \setupbodyfont[schola] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle % \setupbodyfont[lucidaot,10pt] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle - \setupbodyfont[ebgaramond] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[ebgaramond] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle % \setupbodyfont[stixtwo] \starttitle[title=\fontclass] \showmathfonttweaks \stoptitle +% \setupbodyfont[bonum] \starttitle[title=\fontclass] \showmathaccenttweaks \stoptitle + +% \setupbodyfont[bonum] \starttitle[title=\fontclass] \showmathfencetweaks \stoptitle + \setupbodyfont[bonum] \starttitle[title=\fontclass] \showmathmiddletweaks \stoptitle +% \setupbodyfont[modern] \starttitle[title=\fontclass] \showmathfencetweaks \stoptitle + } { \normalexpanded{\setupbodyfont[\getdocumentargument{bodyfont},12pt]} \showmathfonttweaks - + \showmathaccenttweaks + \showmathfencetweaks + \showmathmiddletweaks } - \stoptext diff --git a/tex/context/modules/mkxl/x-mathml.lmt b/tex/context/modules/mkxl/x-mathml.lmt index 5d4653268..30a435cde 100644 --- a/tex/context/modules/mkxl/x-mathml.lmt +++ b/tex/context/modules/mkxl/x-mathml.lmt @@ -610,44 +610,108 @@ function mathml.mfenced(id) -- multiple separators ctx_disabledelimiter() end -local function flush(e,tag,toggle) - if tag == "none" then - -- if not toggle then - context("{}") -- {} starts a new ^_ set - -- end - elseif toggle then - context("^{") - xmlsprint(e.dt) - context("}{}") -- {} starts a new ^_ set - else - context("_{") - xmlsprint(e.dt) - context("}") - end - return not toggle -end +-- local function flush(e,tag,toggle) +-- if tag == "none" then +-- -- if not toggle then +-- context("{}") -- {} starts a new ^_ set +-- -- end +-- elseif toggle then +-- context("^{") +-- xmlsprint(e.dt) +-- context("}{}") -- {} starts a new ^_ set +-- else +-- context("_{") +-- xmlsprint(e.dt) +-- context("}") +-- end +-- return not toggle +-- end +-- +-- function mathml.mmultiscripts(id) +-- local done, toggle = false, false +-- for e in lxmlcollected(id,"/*") do +-- local tag = e.tg +-- if tag == "mprescripts" then +-- context("{}") +-- done = true +-- elseif done then +-- toggle = flush(e,tag,toggle) +-- end +-- end +-- local done, toggle = false, false +-- for e in lxmlcollected(id,"/*") do +-- local tag = e.tg +-- if tag == "mprescripts" then +-- break +-- elseif done then +-- toggle = flush(e,tag,toggle) +-- else +-- xmlsprint(e) +-- done = true +-- end +-- end +-- end function mathml.mmultiscripts(id) - local done, toggle = false, false + local prescripts = false + local subscripts = true + local firstdone = false for e in lxmlcollected(id,"/*") do - local tag = e.tg - if tag == "mprescripts" then - context("{}") - done = true - elseif done then - toggle = flush(e,tag,toggle) + if firstdone then + xmlsprint(e.dt) + firstdone = true + else + local tag = e.tg + if tag == "none" then + subscripts = not subscripts + elseif tag == "prescripts" then + prescripts = true + subscripts = true + elseif subscripts then + if prescripts then + context("\\subprescript{") + xmlsprint(e.dt) + context("}") + end + subscripts = false + else + if prescripts then + context("\\superprescript{") + xmlsprint(e.dt) + context("}") + end + subscripts = true + end end end - local done, toggle = false, false + local prescripts = false + local subscripts = true + local firstdone = false for e in lxmlcollected(id,"/*") do - local tag = e.tg - if tag == "mprescripts" then - break - elseif done then - toggle = flush(e,tag,toggle) + if firstdone then + firstdone = true else - xmlsprint(e) - done = true + local tag = e.tg + if tag == "none" then + subscripts = not subscripts + elseif tag == "prescripts" then + prescripts = true + subscripts = true + elseif subscripts then + if not prescripts then + context("\\subscript{") + xmlsprint(e.dt) + context("}") + end + subscripts = false + else + if not prescripts then + context("\\superscript{") + xmlsprint(e.dt) + context("}") + end + subscripts = true + end end end end diff --git a/tex/context/modules/mkxl/x-mathml.mkxl b/tex/context/modules/mkxl/x-mathml.mkxl index 11da32126..07faea353 100644 --- a/tex/context/modules/mkxl/x-mathml.mkxl +++ b/tex/context/modules/mkxl/x-mathml.mkxl @@ -11,6 +11,8 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. +%D We should update this one wrt grouping and styles. + % \xmlfilter{#1}{/*/name()} -> \xmltag % This implementation looks like a hack ... this is because we deal with all weird @@ -1299,7 +1301,8 @@ } } { % beware, the second {} is needed for the superscript - \xmlconcatrange{#1}{/*}{2}{}{}\normalsuperscript\prime + % \xmlconcatrange{#1}{/*}{2}{}{}\normalsuperscript\prime + \xmlconcatrange{#1}{/*}{2}{}{}\prime } } } { @@ -2023,11 +2026,9 @@ % probably not yet ok \setdimensionwithunit\scratchdimen\mmlfraclinethickness{pt} } - { - {\mmlfirst{#1}} - \above\scratchdimen - {\mmlsecond{#1}} - } +% { + \Uabove\scratchdimen{\mmlfirst{#1}}{\mmlsecond{#1}} +% } \fi \endgroup \stopxmlsetups diff --git a/tex/context/patterns/common/lang-gr.rme b/tex/context/patterns/common/lang-gr.rme new file mode 100644 index 000000000..fff218f71 --- /dev/null +++ b/tex/context/patterns/common/lang-gr.rme @@ -0,0 +1,3 @@ +% generated by mtxrun --script pattern --convert + +% no comment \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-gr.hyp b/tex/context/patterns/mkii/lang-gr.hyp new file mode 100644 index 000000000..408149a8e --- /dev/null +++ b/tex/context/patterns/mkii/lang-gr.hyp @@ -0,0 +1,8 @@ +% generated by mtxrun --script pattern --convert + +% for comment and copyright, see lang-gr.rme + +% used: + +\hyphenation{ +} \ No newline at end of file diff --git a/tex/context/patterns/mkii/lang-gr.pat b/tex/context/patterns/mkii/lang-gr.pat new file mode 100644 index 000000000..96cfdb290 --- /dev/null +++ b/tex/context/patterns/mkii/lang-gr.pat @@ -0,0 +1,579 @@ +% generated by mtxrun --script pattern --convert + +% for comment and copyright, see lang-gr.rme + +% used: ' ʼ ΐ ά έ ή ί ΰ α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϊ ϋ ό ύ ώ ϲ ά έ ή ί ό ύ ώ ᾽ ᾿ + +\patterns{ +α1 +ε1 +η1 +ι1 +ο1 +υ1 +ω1 +ϊ1 +ϋ1 +ά1 +έ1 +ή1 +ί1 +ό1 +ύ1 +ώ1 +ΐ1 +ΰ1 +α2ι +α2ί +α2ί +ά2ι +ά2ι +ά2ϊ +ά2ϊ +α2υ +α2ύ +α2ύ +ά3υ +ά3υ +ε2ι +ε2ί +ε2ί +έ2ι +έ2ι +έ2ϊ +έ2ϊ +ε2υ +ε2ύ +ε2ύ +έ3υ +έ3υ +η2υ +η2ύ +η2ύ +ή3υ +ή3υ +ο2ι +ο2ί +ο2ί +ό2ι +ό2ι +ό2ϊ +ό2ϊ +ο2υ +ο2ύ +ο2ύ +ό3υ +ό3υ +υ2ι +υ2ί +υ2ί +ύ3ι +ύ3ι +α2η +ά3η. +ά3η. +α2ϊ +ά3ι. +ά3ι. +α2ϋ +ε2ϊ +ε2ϋ +ο2ει +ο2η +ό3η. +ό3η. +ο2ϊ +ό3ι. +ό3ι. +ι2α +ι2ά +ι2ά +ι2ε +ι2έ +ι2έ +ι2ο +ι2ό +ι2ό +ο3ϊ3ό +ο3ϊ3ό +ι2ω +ι2ώ +ι2ώ +.ι3 +.ί3 +.ί3 +η2α +η2ά +η2ά +η2ε +η2έ +η2έ +η2ο +η2ό +η2ό +η2ω +η2ώ +η2ώ +.η3 +.ή3 +.ή3 +υ2α +υ2ά +υ2ά +υ2ο +υ2ό +υ2ό +υ2ω +υ2ώ +υ2ώ +.υ3 +.ύ3 +.ύ3 +4β. +4γ. +4γκ. +4δ. +4ζ. +4θ. +4κ. +4λ. +4μ. +4μπ. +4ν. +4ντ. +4ξ. +4π. +4ρ. +4σ. +4ϲ. +4ς. +4τ. +4τζ. +4τσ. +4τϲ. +4τς. +4φ. +4χ. +4ψ. +4' +4ʼ +4᾿ +4β' +4βʼ +4β᾿ +4γ' +4γʼ +4γ᾿ +4δ' +4δʼ +4δ᾿ +4ζ' +4ζʼ +4ζ᾿ +4θ' +4θʼ +4θ᾿ +4κ' +4κʼ +4κ᾿ +4λ' +4λʼ +4λ᾿ +4μ' +4μʼ +4μ᾿ +4μπ' +4μπʼ +4μπ᾿ +4ν' +4νʼ +4ν᾿ +4ντ' +4ντ᾿ +4ξ' +4ξʼ +4ξ᾿ +4π' +4πʼ +4π᾿ +4ρ' +4ρʼ +4ρ᾿ +4σ' +4σʼ +4σ᾿ +4ϲ' +4ϲʼ +4ϲ᾿ +4τ' +4τʼ +4τ᾿ +4τζ' +4τζʼ +4τζ᾿ +4τσ' +4τσʼ +4τσ᾽ +4τϲ' +4τϲʼ +4τϲ᾿ +4φ' +4φʼ +4φ᾿ +4χ' +4χʼ +4χ᾿ +4ψ' +4ψʼ +4ψ᾿ +.β4 +.γ4 +.δ4 +.ζ4 +.θ4 +.κ4 +.λ4 +.μ4 +.ν4 +.ξ4 +.π4 +.ρ4 +.σ4 +.ϲ4 +.τ4 +.φ4 +.χ4 +.ψ4 +4β1β +4γ1γ +4δ1δ +4ζ1ζ +4θ1θ +4κ1κ +4λ1λ +4μ1μ +4ν1ν +4π1π +4ρ1ρ +4σ1σ +4ϲ1ϲ +4τ1τ +4φ1φ +4χ1χ +4ψ1ψ +4β1ζ +4β1θ +4β1κ +4β1μ +4β1ν +4β1ξ +4β1π +4β1σ +4β1ϲ +4β1τ +4β1φ +4β1χ +4β1ψ +4γ1β +4γ1ζ +4γ1θ +4γ1μ +4ρ5γ2μ +4γ1ξ +4γ1π +4γ1σ +4γ1ϲ +4γ1τ +4γ1φ +4γ1χ +4γ1ψ +4δ1β +4δ1γ +4δ1ζ +4δ1θ +4δ1κ +4δ1λ +4δ1ξ +4δ1π +4δ1σ +4δ1ϲ +4δ1τ +4δ1φ +4δ1χ +4δ1ψ +4ζ1β +4ζ1γ +4ζ1δ +4ζ1θ +4ζ1κ +4ζ1λ +4ζ1μ +τζ2μ +4ζ1ν +4ζ1ξ +4ζ1π +4ζ1ρ +4ζ1σ +4ζ1ϲ +4ζ1τ +4ζ1φ +4ζ1χ +4ζ1ψ +4θ1β +4θ1γ +4θ1δ +4θ1ζ +4θ1κ +4θ1μ +4ρ5θ2μ +σθ2μ +ϲθ2μ +4θ1ξ +4θ1π +4θ1σ +4θ1ϲ +4θ1τ +4θ1φ +4θ1χ +4θ1ψ +4κ1β +4κ1γ +4κ1δ +4κ1ζ +4κ1θ +4κ1μ +4λ5κ2μ +4ρ5κ2μ +4κ1ξ +4κ1π +4κ1σ +4κ1ϲ +4κ1φ +4ν5κ2φ +4κ1χ +4κ1ψ +4λ1β +4λ1γ +4λ1δ +4λ1ζ +4λ1θ +4λ1κ +4λ1μ +4λ1ν +4λ1ξ +4λ1π +4λ1ρ +4λ1σ +4λ1ϲ +4λ1τ +4λ1φ +4λ1χ +4λ1ψ +4μ1β +4μ1γ +4μ1δ +4μ1ζ +4μ1θ +4μ1κ +4μ1λ +4μ1ξ +4μ1ρ +4μ1σ +4μ1ϲ +4μ1τ +4μ1φ +4μ1χ +4μ1ψ +4ν1β +4ν1γ +4ν1δ +4ν1ζ +4ν1θ +4ν1κ +4ν1λ +4ν1μ +4ν1ξ +4ν1π +4ν1ρ +4ν1σ +4ν1ϲ +4ν1φ +4ν1χ +4ν1ψ +4ξ1β +4ξ1γ +4ξ1δ +4ξ1ζ +4ξ1θ +4ξ1κ +4ξ1λ +4ξ1μ +4ξ1ν +4ξ1π +4ξ1ρ +4ξ1σ +4ξ1ϲ +4ξ1τ +4γ5ξ2τ +4ρ5ξ2τ +4ξ1φ +4ξ1χ +4ξ1ψ +4π1β +4π1γ +4π1δ +4π1ζ +4π1θ +4π1κ +4π1μ +4π1ξ +4π1σ +4π1ϲ +4π1φ +4π1χ +4π1ψ +4ρ1β +4ρ1γ +4ρ1δ +4ρ1ζ +4ρ1θ +4ρ1κ +4ρ1λ +4ρ1μ +4ρ1ν +4ρ1ξ +4ρ1π +4ρ1σ +4ρ1ϲ +4ρ1τ +4ρ1φ +4ρ1χ +4ρ1ψ +4σ1δ +4ϲ1δ +4σ1ζ +4ϲ1ζ +4σ1ν +4ϲ1ν +4σ1ξ +4ϲ1ξ +4σ1ρ +4ϲ1ρ +4σ1ψ +4ϲ1ψ +4τ1β +4τ1γ +4τ1δ +4τ1θ +4τ1κ +4τ1ν +4τ1ξ +4τ1π +4τ1φ +στ2φ +ϲτ2φ +4τ1χ +4τ1ψ +4φ1β +4φ1γ +4φ1δ +4φ1ζ +4φ1κ +4φ1μ +4φ1ν +4ρ5φ2ν +4φ1ξ +4φ1π +4φ1σ +4φ1ϲ +4φ1χ +4φ1ψ +4χ1β +4χ1γ +4χ1δ +4χ1ζ +4χ1κ +4χ1μ +4ρ5χ2μ +4χ1ξ +4χ1π +4χ1σ +4χ1ϲ +4χ1φ +4χ1ψ +4ψ1β +4ψ1γ +4ψ1δ +4ψ1ζ +4ψ1θ +4ψ1κ +4ψ1λ +4ψ1μ +4ψ1ν +4ψ1ξ +4ψ1π +4ψ1ρ +4ψ1σ +4ψ1ϲ +4ψ1τ +4μ5ψ2τ +4ψ1φ +4ψ1χ +4γ5κ2φ +4γ1κτ +4μ1πτ +4ν1τζ +4ν1τσ +4ν1τϲ +4βρ. +4γλ. +4κλ. +4κτ. +4γκς. +4γκϲ. +4γκσ. +6κς. +6κϲ. +4κσ. +4λς. +4λϲ. +4λσ. +4μπλ. +4μπν. +4μπρ. +4μς. +4μϲ. +4μσ. +4νς. +4νϲ. +4νσ. +4ρς. +4ρϲ. +4ρσ. +4σκ. +4ϲκ. +4στ. +4ϲτ. +4τλ. +4τρ. +4ντς. +4ντϲ. +4ντσ. +4φτ. +4χτ. +4γκ1μπ +4γκ1ντ +4γκ1τζ +4γκ1τσ +4γκ1τϲ +4μπ1ντ +4μπ1τζ +4μπ1τσ +4μπ1τϲ +4ντ1μπ +4τσ1γκ +4τϲ1γκ +4τσ1μπ +4τϲ1μπ +4τσ1ντ +4τϲ1ντ} \ No newline at end of file diff --git a/tex/context/patterns/mkiv/lang-gr.lua b/tex/context/patterns/mkiv/lang-gr.lua new file mode 100644 index 000000000..14439457f --- /dev/null +++ b/tex/context/patterns/mkiv/lang-gr.lua @@ -0,0 +1,20 @@ +return { + ["comment"]="% generated by mtxrun --script pattern --convert", + ["exceptions"]={ + ["n"]=0, + }, + ["metadata"]={ + ["mnemonic"]="gr", + ["source"]="hyph-el-monoton", + ["texcomment"]="% no comment", + }, + ["patterns"]={ + ["characters"]="'ʼΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϲάέήίόύώ᾽᾿’", + ["data"]="α1 ε1 η1 ι1 ο1 υ1 ω1 ϊ1 ϋ1 ά1 έ1 ή1 ί1 ό1 ύ1 ώ1 ΐ1 ΰ1 α2ι α2ί α2ί ά2ι ά2ι ά2ϊ ά2ϊ α2υ α2ύ α2ύ ά3υ ά3υ ε2ι ε2ί ε2ί έ2ι έ2ι έ2ϊ έ2ϊ ε2υ ε2ύ ε2ύ έ3υ έ3υ η2υ η2ύ η2ύ ή3υ ή3υ ο2ι ο2ί ο2ί ό2ι ό2ι ό2ϊ ό2ϊ ο2υ ο2ύ ο2ύ ό3υ ό3υ υ2ι υ2ί υ2ί ύ3ι ύ3ι α2η ά3η. ά3η. α2ϊ ά3ι. ά3ι. α2ϋ ε2ϊ ε2ϋ ο2ει ο2η ό3η. ό3η. ο2ϊ ό3ι. ό3ι. ι2α ι2ά ι2ά ι2ε ι2έ ι2έ ι2ο ι2ό ι2ό ο3ϊ3ό ο3ϊ3ό ι2ω ι2ώ ι2ώ .ι3 .ί3 .ί3 η2α η2ά η2ά η2ε η2έ η2έ η2ο η2ό η2ό η2ω η2ώ η2ώ .η3 .ή3 .ή3 υ2α υ2ά υ2ά υ2ο υ2ό υ2ό υ2ω υ2ώ υ2ώ .υ3 .ύ3 .ύ3 4β. 4γ. 4γκ. 4δ. 4ζ. 4θ. 4κ. 4λ. 4μ. 4μπ. 4ν. 4ντ. 4ξ. 4π. 4ρ. 4σ. 4ϲ. 4ς. 4τ. 4τζ. 4τσ. 4τϲ. 4τς. 4φ. 4χ. 4ψ. 4' 4ʼ 4᾿ 4β' 4βʼ 4β᾿ 4γ' 4γʼ 4γ᾿ 4δ' 4δʼ 4δ᾿ 4ζ' 4ζʼ 4ζ᾿ 4θ' 4θʼ 4θ᾿ 4κ' 4κʼ 4κ᾿ 4λ' 4λʼ 4λ᾿ 4μ' 4μʼ 4μ᾿ 4μπ' 4μπʼ 4μπ᾿ 4ν' 4νʼ 4ν᾿ 4ντ' 4ντ’ 4ντ᾿ 4ξ' 4ξʼ 4ξ᾿ 4π' 4πʼ 4π᾿ 4ρ' 4ρʼ 4ρ᾿ 4σ' 4σʼ 4σ᾿ 4ϲ' 4ϲʼ 4ϲ᾿ 4τ' 4τʼ 4τ᾿ 4τζ' 4τζʼ 4τζ᾿ 4τσ' 4τσʼ 4τσ᾽ 4τϲ' 4τϲʼ 4τϲ᾿ 4φ' 4φʼ 4φ᾿ 4χ' 4χʼ 4χ᾿ 4ψ' 4ψʼ 4ψ᾿ .β4 .γ4 .δ4 .ζ4 .θ4 .κ4 .λ4 .μ4 .ν4 .ξ4 .π4 .ρ4 .σ4 .ϲ4 .τ4 .φ4 .χ4 .ψ4 4β1β 4γ1γ 4δ1δ 4ζ1ζ 4θ1θ 4κ1κ 4λ1λ 4μ1μ 4ν1ν 4π1π 4ρ1ρ 4σ1σ 4ϲ1ϲ 4τ1τ 4φ1φ 4χ1χ 4ψ1ψ 4β1ζ 4β1θ 4β1κ 4β1μ 4β1ν 4β1ξ 4β1π 4β1σ 4β1ϲ 4β1τ 4β1φ 4β1χ 4β1ψ 4γ1β 4γ1ζ 4γ1θ 4γ1μ 4ρ5γ2μ 4γ1ξ 4γ1π 4γ1σ 4γ1ϲ 4γ1τ 4γ1φ 4γ1χ 4γ1ψ 4δ1β 4δ1γ 4δ1ζ 4δ1θ 4δ1κ 4δ1λ 4δ1ξ 4δ1π 4δ1σ 4δ1ϲ 4δ1τ 4δ1φ 4δ1χ 4δ1ψ 4ζ1β 4ζ1γ 4ζ1δ 4ζ1θ 4ζ1κ 4ζ1λ 4ζ1μ τζ2μ 4ζ1ν 4ζ1ξ 4ζ1π 4ζ1ρ 4ζ1σ 4ζ1ϲ 4ζ1τ 4ζ1φ 4ζ1χ 4ζ1ψ 4θ1β 4θ1γ 4θ1δ 4θ1ζ 4θ1κ 4θ1μ 4ρ5θ2μ σθ2μ ϲθ2μ 4θ1ξ 4θ1π 4θ1σ 4θ1ϲ 4θ1τ 4θ1φ 4θ1χ 4θ1ψ 4κ1β 4κ1γ 4κ1δ 4κ1ζ 4κ1θ 4κ1μ 4λ5κ2μ 4ρ5κ2μ 4κ1ξ 4κ1π 4κ1σ 4κ1ϲ 4κ1φ 4ν5κ2φ 4κ1χ 4κ1ψ 4λ1β 4λ1γ 4λ1δ 4λ1ζ 4λ1θ 4λ1κ 4λ1μ 4λ1ν 4λ1ξ 4λ1π 4λ1ρ 4λ1σ 4λ1ϲ 4λ1τ 4λ1φ 4λ1χ 4λ1ψ 4μ1β 4μ1γ 4μ1δ 4μ1ζ 4μ1θ 4μ1κ 4μ1λ 4μ1ξ 4μ1ρ 4μ1σ 4μ1ϲ 4μ1τ 4μ1φ 4μ1χ 4μ1ψ 4ν1β 4ν1γ 4ν1δ 4ν1ζ 4ν1θ 4ν1κ 4ν1λ 4ν1μ 4ν1ξ 4ν1π 4ν1ρ 4ν1σ 4ν1ϲ 4ν1φ 4ν1χ 4ν1ψ 4ξ1β 4ξ1γ 4ξ1δ 4ξ1ζ 4ξ1θ 4ξ1κ 4ξ1λ 4ξ1μ 4ξ1ν 4ξ1π 4ξ1ρ 4ξ1σ 4ξ1ϲ 4ξ1τ 4γ5ξ2τ 4ρ5ξ2τ 4ξ1φ 4ξ1χ 4ξ1ψ 4π1β 4π1γ 4π1δ 4π1ζ 4π1θ 4π1κ 4π1μ 4π1ξ 4π1σ 4π1ϲ 4π1φ 4π1χ 4π1ψ 4ρ1β 4ρ1γ 4ρ1δ 4ρ1ζ 4ρ1θ 4ρ1κ 4ρ1λ 4ρ1μ 4ρ1ν 4ρ1ξ 4ρ1π 4ρ1σ 4ρ1ϲ 4ρ1τ 4ρ1φ 4ρ1χ 4ρ1ψ 4σ1δ 4ϲ1δ 4σ1ζ 4ϲ1ζ 4σ1ν 4ϲ1ν 4σ1ξ 4ϲ1ξ 4σ1ρ 4ϲ1ρ 4σ1ψ 4ϲ1ψ 4τ1β 4τ1γ 4τ1δ 4τ1θ 4τ1κ 4τ1ν 4τ1ξ 4τ1π 4τ1φ στ2φ ϲτ2φ 4τ1χ 4τ1ψ 4φ1β 4φ1γ 4φ1δ 4φ1ζ 4φ1κ 4φ1μ 4φ1ν 4ρ5φ2ν 4φ1ξ 4φ1π 4φ1σ 4φ1ϲ 4φ1χ 4φ1ψ 4χ1β 4χ1γ 4χ1δ 4χ1ζ 4χ1κ 4χ1μ 4ρ5χ2μ 4χ1ξ 4χ1π 4χ1σ 4χ1ϲ 4χ1φ 4χ1ψ 4ψ1β 4ψ1γ 4ψ1δ 4ψ1ζ 4ψ1θ 4ψ1κ 4ψ1λ 4ψ1μ 4ψ1ν 4ψ1ξ 4ψ1π 4ψ1ρ 4ψ1σ 4ψ1ϲ 4ψ1τ 4μ5ψ2τ 4ψ1φ 4ψ1χ 4γ5κ2φ 4γ1κτ 4μ1πτ 4ν1τζ 4ν1τσ 4ν1τϲ 4βρ. 4γλ. 4κλ. 4κτ. 4γκς. 4γκϲ. 4γκσ. 6κς. 6κϲ. 4κσ. 4λς. 4λϲ. 4λσ. 4μπλ. 4μπν. 4μπρ. 4μς. 4μϲ. 4μσ. 4νς. 4νϲ. 4νσ. 4ρς. 4ρϲ. 4ρσ. 4σκ. 4ϲκ. 4στ. 4ϲτ. 4τλ. 4τρ. 4ντς. 4ντϲ. 4ντσ. 4φτ. 4χτ. 4γκ1μπ 4γκ1ντ 4γκ1τζ 4γκ1τσ 4γκ1τϲ 4μπ1ντ 4μπ1τζ 4μπ1τσ 4μπ1τϲ 4ντ1μπ 4τσ1γκ 4τϲ1γκ 4τσ1μπ 4τϲ1μπ 4τσ1ντ 4τϲ1ντ", + ["lefthyphenmin"]=1, + ["length"]=3904, + ["n"]=573, + ["righthyphenmax"]=1, + }, + ["version"]="1.001", +} \ No newline at end of file diff --git a/tex/generic/context/luatex/luatex-basics-chr.lua b/tex/generic/context/luatex/luatex-basics-chr.lua index 53f576fe8..3bbb693ab 100644 --- a/tex/generic/context/luatex/luatex-basics-chr.lua +++ b/tex/generic/context/luatex/luatex-basics-chr.lua @@ -3839,5 +3839,3 @@ characters.indicgroups={ } -- done - -return characters.indicgroups diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index eb084d8ed..33524ae92 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 : 2022-05-11 11:34 +-- merge date : 2022-07-06 21:34 do -- begin closure to overcome local limits and interference @@ -3031,8 +3031,14 @@ if not math.ceiling then math.ceiling=math.ceil end if not math.round then - local floor=math.floor - function math.round(x) return floor(x+0.5) end + if xmath then + math.round=xmath.round + else + local floor=math.floor + function math.round(x) + return x<0 and -floor(-x+0.5) or floor(x+0.5) + end + end end if not math.div then local floor=math.floor @@ -9034,7 +9040,6 @@ characters.indicgroups={ [43249]=true, }, } -return characters.indicgroups end -- closure @@ -18686,7 +18691,7 @@ do local scriptoffset=tableoffset+readushort(f) local featureoffset=tableoffset+readushort(f) local lookupoffset=tableoffset+readushort(f) - local variationsoffset=version>0x00010000 and (tableoffset+readulong(f)) or 0 + local variationsoffset=version>0x00010000 and readulong(f) or 0 if not scriptoffset then return end @@ -18706,7 +18711,7 @@ do resolvelookups(f,lookupoffset,fontdata,lookups,lookuptypes,lookuphandlers,what,tableoffset) end if variationsoffset>0 then - loadvariations(f,fontdata,variationsoffset,lookuptypes,featurehash,featureorder) + loadvariations(f,fontdata,tableoffset+variationsoffset,lookuptypes,featurehash,featureorder) end end end @@ -31707,14 +31712,6 @@ if not modules then modules={} end modules ['font-osd']={ copyright="TAT Zetwerk / PRAGMA ADE / ConTeXt Development Team", license="see context related readme files" } -local experiment1=false -local experiment2=false -local experiment2b1=false -local experiment2b2=false -experiments.register("fonts.indic.experiment1",function(v) experiment1=v end) -experiments.register("fonts.indic.experiment2",function(v) experiment2=v end) -experiments.register("fonts.indic.experiment2b1",function(v) experiment2b1=v end) -experiments.register("fonts.indic.experiment2b2",function(v) experiment2b2=v end) local insert,remove,imerge,copy,tohash=table.insert,table.remove,table.imerge,table.copy,table.tohash local next,type,rawget=next,type,rawget local formatters=string.formatters -- cgit v1.2.3