From a8c525cd14d77b94662021671ef8eb62d5a7fe50 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Mon, 13 Sep 2021 10:02:31 +0200 Subject: 2021-09-13 09:40:00 --- .../context/lexers/data/scite-context-data-tex.lua | 4 +- .../context/scite-context-data-tex.properties | 97 ++++----- .../context/data/scite-context-data-tex.lua | 4 +- .../context/syntaxes/context-syntax-tex.json | 2 +- .../general/manuals/lowlevel-alignments.pdf | Bin 73590 -> 74011 bytes .../documents/general/manuals/lowlevel-boxes.pdf | Bin 78543 -> 73060 bytes .../general/manuals/lowlevel-characters.pdf | Bin 52979 -> 48469 bytes .../general/manuals/lowlevel-conditionals.pdf | Bin 104674 -> 96046 bytes .../general/manuals/lowlevel-expansion.pdf | Bin 85769 -> 86301 bytes .../general/manuals/lowlevel-grouping.pdf | Bin 30762 -> 28200 bytes .../documents/general/manuals/lowlevel-inserts.pdf | Bin 0 -> 38122 bytes .../documents/general/manuals/lowlevel-macros.pdf | Bin 85117 -> 82764 bytes .../documents/general/manuals/lowlevel-marks.pdf | Bin 62467 -> 62989 bytes .../general/manuals/lowlevel-paragraphs.pdf | Bin 266886 -> 268073 bytes .../general/manuals/lowlevel-registers.pdf | Bin 43435 -> 43739 bytes .../documents/general/manuals/lowlevel-scope.pdf | Bin 46060 -> 44386 bytes .../general/manuals/lowlevel-security.pdf | Bin 41760 -> 40571 bytes doc/context/documents/general/manuals/lowlevel.pdf | Bin 0 -> 657745 bytes .../manuals/lowlevel/lowlevel-alignments.tex | 28 +-- .../general/manuals/lowlevel/lowlevel-boxes.tex | 26 ++- .../manuals/lowlevel/lowlevel-characters.tex | 28 +-- .../manuals/lowlevel/lowlevel-conditionals.tex | 212 ++++++++++---------- .../manuals/lowlevel/lowlevel-expansion.tex | 24 +-- .../general/manuals/lowlevel/lowlevel-grouping.tex | 38 ++-- .../general/manuals/lowlevel/lowlevel-inserts.tex | 202 +++++++++++++++++++ .../general/manuals/lowlevel/lowlevel-macros.tex | 58 +++--- .../general/manuals/lowlevel/lowlevel-marks.tex | 33 ++-- .../manuals/lowlevel/lowlevel-paragraphs.tex | 38 ++-- .../manuals/lowlevel/lowlevel-registers.tex | 22 ++- .../general/manuals/lowlevel/lowlevel-scope.tex | 16 +- .../general/manuals/lowlevel/lowlevel-security.tex | 16 +- .../general/manuals/lowlevel/lowlevel-style.tex | 39 +++- .../sources/general/manuals/lowlevel/lowlevel.tex | 39 ++++ scripts/context/lua/mtxrun.lua | 6 +- scripts/context/stubs/mswin/mtxrun.lua | 6 +- scripts/context/stubs/unix/mtxrun | 6 +- scripts/context/stubs/win64/mtxrun.lua | 6 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/font-ots.lua | 64 ++++-- tex/context/base/mkiv/mult-prm.lua | 4 + tex/context/base/mkiv/node-fin.lua | 2 +- tex/context/base/mkiv/node-tra.lua | 96 +++++---- tex/context/base/mkiv/page-inj.mkvi | 10 +- tex/context/base/mkiv/page-mix.lua | 41 +++- tex/context/base/mkiv/page-one.mkiv | 24 ++- tex/context/base/mkiv/status-files.pdf | Bin 24895 -> 24888 bytes tex/context/base/mkiv/status-lua.pdf | Bin 251457 -> 251989 bytes tex/context/base/mkiv/util-prs.lua | 4 +- tex/context/base/mkxl/buff-ver.mkxl | 2 +- tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/font-ots.lmt | 71 +++++-- tex/context/base/mkxl/lpdf-img.lmt | 67 ++++--- tex/context/base/mkxl/lpdf-lmt.lmt | 38 ++-- tex/context/base/mkxl/meta-imp-bitmaps.mkxl | 51 ++++- tex/context/base/mkxl/mlib-scn.lmt | 5 + tex/context/base/mkxl/mult-aux.mkxl | 3 + tex/context/base/mkxl/node-fin.lmt | 2 +- tex/context/base/mkxl/node-nut.lmt | 2 + tex/context/base/mkxl/node-res.lmt | 18 ++ tex/context/base/mkxl/node-tra.lmt | 91 +++++---- tex/context/base/mkxl/page-ini.mkxl | 26 +-- tex/context/base/mkxl/page-inj.mklx | 10 +- tex/context/base/mkxl/page-ins.mkxl | 25 +-- tex/context/base/mkxl/page-mix.mkxl | 18 ++ tex/context/base/mkxl/page-one.mkxl | 65 +++++- tex/context/base/mkxl/page-pcl.mkxl | 64 ++++-- tex/context/base/mkxl/page-sid.mkxl | 63 +++--- tex/context/base/mkxl/spac-ver.lmt | 218 ++++++++++++++------- tex/context/base/mkxl/strc-mat.mkxl | 8 +- tex/context/base/mkxl/strc-not.mklx | 3 +- tex/context/base/mkxl/syst-ini.mkxl | 6 + tex/context/base/mkxl/trac-vis.lmt | 23 +-- tex/context/base/mkxl/typo-bld.lmt | 4 +- tex/generic/context/luatex/luatex-fonts-merged.lua | 57 ++++-- 78 files changed, 1412 insertions(+), 735 deletions(-) create mode 100644 doc/context/documents/general/manuals/lowlevel-inserts.pdf create mode 100644 doc/context/documents/general/manuals/lowlevel.pdf create mode 100644 doc/context/sources/general/manuals/lowlevel/lowlevel-inserts.tex create mode 100644 doc/context/sources/general/manuals/lowlevel/lowlevel.tex diff --git a/context/data/scite/context/lexers/data/scite-context-data-tex.lua b/context/data/scite/context/lexers/data/scite-context-data-tex.lua index 82e0db1ea..da46c364a 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"]={ "UUskewed", "UUskewedwithdelims", "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaccentbaseheight", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubshift", "Umathextrasuppreshift", "Umathextrasupshift", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathspacebeforescript", "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathvextensiblevariant", "Umathvoid", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "aligntab", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "boundary", "boxattribute", "boxdirection", "boxorientation", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecifiedsize", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphyoffset", "glyphyscale", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmode", "insertmultiplier", "insertprogress", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastchkdim", "lastchknum", "lastnamedcs", "lastnodesubtype", "lastparcontext", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letprotected", "lettonothing", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathitalicsmode", "mathnolimitsmode", "mathpenaltiesmode", "mathrulesfam", "mathrulesmode", "mathrulethicknessmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathstyle", "mathsurroundmode", "mathsurroundskip", "mugluespecdef", "mutable", "noaligned", "noboundary", "nohrule", "norelax", "normalizelinemode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orunless", "outputbox", "overloaded", "overloadmode", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingalignments", "tracingexpressions", "tracingfonts", "tracinghyphenation", "tracingmarks", "tracingmath", "undent", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoksapp", "xtokspre" }, + ["luatex"]={ "UUskewed", "UUskewedwithdelims", "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaccentbaseheight", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubshift", "Umathextrasuppreshift", "Umathextrasupshift", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathspacebeforescript", "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathvextensiblevariant", "Umathvoid", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "aligntab", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "boundary", "boxattribute", "boxdirection", "boxorientation", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecifiedsize", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphyoffset", "glyphyscale", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmode", "insertmultiplier", "insertprogress", "insertstorage", "insertstoring", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastchkdim", "lastchknum", "lastnamedcs", "lastnodesubtype", "lastparcontext", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letprotected", "lettonothing", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathitalicsmode", "mathnolimitsmode", "mathpenaltiesmode", "mathrulesfam", "mathrulesmode", "mathrulethicknessmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathstyle", "mathsurroundmode", "mathsurroundskip", "mugluespecdef", "mutable", "noaligned", "noboundary", "nohrule", "norelax", "normalizelinemode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orunless", "outputbox", "overloaded", "overloadmode", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingalignments", "tracingexpressions", "tracingfonts", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "undent", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoksapp", "xtokspre" }, ["omega"]={ "Omegaminorversion", "Omegarevision", "Omegaversion" }, ["pdftex"]={ "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfignoreunknownimages", "pdfimageaddfilename", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinfoomitdate", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmajorversion", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfomitcharset", "pdfomitcidset", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkfixeddpi", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrecompress", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdfsuppressoptionalinfo", "pdfsuppressptexinfo", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdftrailerid", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformmargin", "pdfxformname", "pdfxformresources", "pdfximage" }, - ["tex"]={ " ", "-", "/", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "aligncontent", "atop", "atopwithdelims", "badness", "baselineskip", "batchmode", "begingroup", "beginsimplegroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "botmark", "box", "boxmaxdepth", "brokenpenalty", "catcode", "char", "chardef", "cleaders", "clubpenalty", "copy", "count", "countdef", "cr", "crcr", "csname", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "dimen", "dimendef", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "edef", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "endsimplegroup", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "fam", "fi", "finalhyphendemerits", "firstmark", "floatingpenalty", "font", "fontdimen", "fontname", "fontspecifiedname", "futurelet", "gdef", "global", "globaldefs", "glyph", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifcase", "ifcat", "ifdim", "iffalse", "ifhbox", "ifhmode", "ifinner", "ifmmode", "ifnum", "ifodd", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "indent", "input", "inputlineno", "insert", "insertpenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastpenalty", "lastskip", "lccode", "leaders", "left", "lefthyphenmin", "leftskip", "leqno", "let", "limits", "linepenalty", "lineskip", "lineskiplimit", "long", "looseness", "lower", "lowercase", "mark", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "meaningfull", "meaningless", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "multiply", "muskip", "muskipdef", "newlinechar", "noalign", "noexpand", "noindent", "nolimits", "nonscript", "nonstopmode", "nulldelimiterspace", "nullfont", "number", "omit", "or", "outer", "output", "outputpenalty", "over", "overfullrule", "overline", "overshoot", "overwithdelims", "pagedepth", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageshrink", "pagestretch", "pagetotal", "par", "parfillleftskip", "parfillskip", "parindent", "parshape", "parskip", "patterns", "pausing", "penalty", "postdisplaypenalty", "predisplaypenalty", "predisplaysize", "pretolerance", "prevdepth", "prevgraf", "radical", "raise", "relax", "relpenalty", "right", "righthyphenmin", "rightskip", "romannumeral", "scaledfontdimen", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showlists", "shownodedetails", "showthe", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "splitbotmark", "splitfirstmark", "splitmaxdepth", "splittopskip", "string", "tabskip", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "todimension", "tointeger", "toks", "toksdef", "tolerance", "topmark", "topskip", "toscaled", "tracingcommands", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingstats", "uccode", "uchyph", "underline", "unhbox", "unhcopy", "unhpack", "unkern", "unpenalty", "unskip", "unvbox", "unvcopy", "unvpack", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalty", "xdef", "xleaders", "xspaceskip", "year" }, + ["tex"]={ " ", "-", "/", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "aligncontent", "atop", "atopwithdelims", "badness", "baselineskip", "batchmode", "begingroup", "beginsimplegroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "botmark", "box", "boxmaxdepth", "brokenpenalty", "catcode", "char", "chardef", "cleaders", "clubpenalty", "copy", "count", "countdef", "cr", "crcr", "csname", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "dimen", "dimendef", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "edef", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "endsimplegroup", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "fam", "fi", "finalhyphendemerits", "firstmark", "floatingpenalty", "font", "fontdimen", "fontname", "fontspecifiedname", "futurelet", "gdef", "global", "globaldefs", "glyph", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifcase", "ifcat", "ifdim", "iffalse", "ifhbox", "ifhmode", "ifinner", "ifmmode", "ifnum", "ifodd", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "indent", "input", "inputlineno", "insert", "insertpenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastpenalty", "lastskip", "lccode", "leaders", "left", "lefthyphenmin", "leftskip", "leqno", "let", "limits", "linepenalty", "lineskip", "lineskiplimit", "long", "looseness", "lower", "lowercase", "mark", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "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", "pagevsize", "par", "parfillleftskip", "parfillskip", "parindent", "parshape", "parskip", "patterns", "pausing", "penalty", "postdisplaypenalty", "predisplaypenalty", "predisplaysize", "pretolerance", "prevdepth", "prevgraf", "radical", "raise", "relax", "relpenalty", "right", "righthyphenmin", "rightskip", "romannumeral", "scaledfontdimen", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showlists", "shownodedetails", "showthe", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "splitbotmark", "splitfirstmark", "splitmaxdepth", "splittopskip", "string", "tabskip", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "todimension", "tointeger", "toks", "toksdef", "tolerance", "topmark", "topskip", "toscaled", "tracingcommands", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingstats", "uccode", "uchyph", "underline", "unhbox", "unhcopy", "unhpack", "unkern", "unpenalty", "unskip", "unvbox", "unvcopy", "unvpack", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalty", "xdef", "xleaders", "xspaceskip", "year" }, ["xetex"]={ "XeTeXversion" }, } \ No newline at end of file diff --git a/context/data/scite/context/scite-context-data-tex.properties b/context/data/scite/context/scite-context-data-tex.properties index bd6917036..e83bc62b6 100644 --- a/context/data/scite/context/scite-context-data-tex.properties +++ b/context/data/scite/context/scite-context-data-tex.properties @@ -83,31 +83,32 @@ ifmathparameter ifmathstyle ifnumexpression ifnumval ifparameter \ ifparameters ifrelax iftok ignorearguments ignorepars \ immediate immutable initcatcodetable insertbox insertcopy \ insertdepth insertdistance insertheight insertheights insertlimit \ -insertmode insertmultiplier insertprogress insertunbox insertuncopy \ -insertwidth instance integerdef lastarguments lastchkdim \ -lastchknum lastnamedcs lastnodesubtype lastparcontext leftmarginkern \ -letcharcode letcsname letfrozen letprotected lettonothing \ -linedirection localbrokenpenalty localcontrol localcontrolled localinterlinepenalty \ -localleftbox localrightbox lpcode luabytecode luabytecodecall \ -luacopyinputnodes luadef luaescapestring luafunction luafunctioncall \ -luatexbanner luatexrevision luatexversion mathcontrolmode mathdelimitersmode \ -mathdirection mathdisplayskipmode matheqnogapstep mathflattenmode mathfontcontrol \ -mathitalicsmode mathnolimitsmode mathpenaltiesmode mathrulesfam mathrulesmode \ -mathrulethicknessmode mathscale mathscriptboxmode mathscriptcharmode mathscriptsmode \ -mathstyle mathsurroundmode mathsurroundskip mugluespecdef mutable \ -noaligned noboundary nohrule norelax normalizelinemode \ -nospaces novrule numericscale numexpression orelse \ -orunless outputbox overloaded overloadmode parametercount \ -parametermark parattribute pardirection permanent postexhyphenchar \ -posthyphenchar prebinoppenalty predisplaygapfactor preexhyphenchar prehyphenchar \ -prerelpenalty protrudechars protrusionboundary pxdimen quitvmode \ -retokenized rightmarginkern rpcode savecatcodetable scantextokens \ -semiexpanded semiprotected setfontid snapshotpar supmarkmode \ -swapcsvalues tabsize textdirection thewithoutunit tokenized \ -toksapp tokspre tolerant tpack tracingalignments \ -tracingexpressions tracingfonts tracinghyphenation tracingmarks tracingmath \ -undent unletfrozen unletprotected untraced vpack \ -wordboundary wrapuppar xdefcsname xtoksapp xtokspre +insertmode insertmultiplier insertprogress insertstorage insertstoring \ +insertunbox insertuncopy insertwidth instance integerdef \ +lastarguments lastchkdim lastchknum lastnamedcs lastnodesubtype \ +lastparcontext leftmarginkern letcharcode letcsname letfrozen \ +letprotected lettonothing linedirection localbrokenpenalty localcontrol \ +localcontrolled localinterlinepenalty localleftbox localrightbox lpcode \ +luabytecode luabytecodecall luacopyinputnodes luadef luaescapestring \ +luafunction luafunctioncall luatexbanner luatexrevision luatexversion \ +mathcontrolmode mathdelimitersmode mathdirection mathdisplayskipmode matheqnogapstep \ +mathflattenmode mathfontcontrol mathitalicsmode mathnolimitsmode mathpenaltiesmode \ +mathrulesfam mathrulesmode mathrulethicknessmode mathscale mathscriptboxmode \ +mathscriptcharmode mathscriptsmode mathstyle mathsurroundmode mathsurroundskip \ +mugluespecdef mutable noaligned noboundary nohrule \ +norelax normalizelinemode nospaces novrule numericscale \ +numexpression orelse orunless outputbox overloaded \ +overloadmode parametercount parametermark parattribute pardirection \ +permanent postexhyphenchar posthyphenchar prebinoppenalty predisplaygapfactor \ +preexhyphenchar prehyphenchar prerelpenalty protrudechars protrusionboundary \ +pxdimen quitvmode retokenized rightmarginkern rpcode \ +savecatcodetable scantextokens semiexpanded semiprotected setfontid \ +snapshotpar supmarkmode swapcsvalues tabsize textdirection \ +thewithoutunit tokenized toksapp tokspre tolerant \ +tpack tracingalignments tracingexpressions tracingfonts tracinghyphenation \ +tracinginserts tracingmarks tracingmath undent unletfrozen \ +unletprotected untraced vpack wordboundary wrapuppar \ +xdefcsname xtoksapp xtokspre keywordclass.tex.omega=\ Omegaminorversion Omegarevision Omegaversion @@ -182,29 +183,29 @@ nulldelimiterspace nullfont number omit or \ outer output outputpenalty over overfullrule \ overline overshoot overwithdelims pagedepth pagefilllstretch \ pagefillstretch pagefilstretch pagegoal pageshrink pagestretch \ -pagetotal par parfillleftskip parfillskip parindent \ -parshape parskip patterns pausing penalty \ -postdisplaypenalty predisplaypenalty predisplaysize pretolerance prevdepth \ -prevgraf radical raise relax relpenalty \ -right righthyphenmin rightskip romannumeral scaledfontdimen \ -scriptfont scriptscriptfont scriptscriptstyle scriptspace scriptstyle \ -scrollmode setbox setlanguage sfcode shipout \ -show showbox showboxbreadth showboxdepth showlists \ -shownodedetails showthe skewchar skip skipdef \ -spacefactor spaceskip span splitbotmark splitfirstmark \ -splitmaxdepth splittopskip string tabskip textfont \ -textstyle the thickmuskip thinmuskip time \ -todimension tointeger toks toksdef tolerance \ -topmark topskip toscaled tracingcommands tracinglostchars \ -tracingmacros tracingonline tracingoutput tracingpages tracingparagraphs \ -tracingrestores tracingstats uccode uchyph underline \ -unhbox unhcopy unhpack unkern unpenalty \ -unskip unvbox unvcopy unvpack uppercase \ -vadjust valign vbadness vbox vcenter \ -vfil vfill vfilneg vfuzz vrule \ -vsize vskip vsplit vss vtop \ -wd widowpenalty xdef xleaders xspaceskip \ -year +pagetotal pagevsize par parfillleftskip parfillskip \ +parindent parshape parskip patterns pausing \ +penalty postdisplaypenalty predisplaypenalty predisplaysize pretolerance \ +prevdepth prevgraf radical raise relax \ +relpenalty right righthyphenmin rightskip romannumeral \ +scaledfontdimen scriptfont scriptscriptfont scriptscriptstyle scriptspace \ +scriptstyle scrollmode setbox setlanguage sfcode \ +shipout show showbox showboxbreadth showboxdepth \ +showlists shownodedetails showthe skewchar skip \ +skipdef spacefactor spaceskip span splitbotmark \ +splitfirstmark splitmaxdepth splittopskip string tabskip \ +textfont textstyle the thickmuskip thinmuskip \ +time todimension tointeger toks toksdef \ +tolerance topmark topskip toscaled tracingcommands \ +tracinglostchars tracingmacros tracingonline tracingoutput tracingpages \ +tracingparagraphs tracingrestores tracingstats uccode uchyph \ +underline unhbox unhcopy unhpack unkern \ +unpenalty unskip unvbox unvcopy unvpack \ +uppercase vadjust valign vbadness vbox \ +vcenter vfil vfill vfilneg vfuzz \ +vrule vsize vskip vsplit vss \ +vtop wd widowpenalty xdef xleaders \ +xspaceskip year keywordclass.tex.xetex=\ XeTeXversion diff --git a/context/data/textadept/context/data/scite-context-data-tex.lua b/context/data/textadept/context/data/scite-context-data-tex.lua index 82e0db1ea..da46c364a 100644 --- a/context/data/textadept/context/data/scite-context-data-tex.lua +++ b/context/data/textadept/context/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"]={ "UUskewed", "UUskewedwithdelims", "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaccentbaseheight", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubshift", "Umathextrasuppreshift", "Umathextrasupshift", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathspacebeforescript", "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathvextensiblevariant", "Umathvoid", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "aligntab", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "boundary", "boxattribute", "boxdirection", "boxorientation", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecifiedsize", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphyoffset", "glyphyscale", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmode", "insertmultiplier", "insertprogress", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastchkdim", "lastchknum", "lastnamedcs", "lastnodesubtype", "lastparcontext", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letprotected", "lettonothing", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathitalicsmode", "mathnolimitsmode", "mathpenaltiesmode", "mathrulesfam", "mathrulesmode", "mathrulethicknessmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathstyle", "mathsurroundmode", "mathsurroundskip", "mugluespecdef", "mutable", "noaligned", "noboundary", "nohrule", "norelax", "normalizelinemode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orunless", "outputbox", "overloaded", "overloadmode", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingalignments", "tracingexpressions", "tracingfonts", "tracinghyphenation", "tracingmarks", "tracingmath", "undent", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoksapp", "xtokspre" }, + ["luatex"]={ "UUskewed", "UUskewedwithdelims", "Uabove", "Uabovewithdelims", "Uatop", "Uatopwithdelims", "Uchar", "Udelcode", "Udelcodenum", "Udelimiter", "Udelimiterover", "Udelimiterunder", "Uhextensible", "Uleft", "Umathaccent", "Umathaccentbaseheight", "Umathaccentvariant", "Umathadapttoleft", "Umathadapttoright", "Umathaxis", "Umathbinbinspacing", "Umathbinclosespacing", "Umathbininnerspacing", "Umathbinopenspacing", "Umathbinopspacing", "Umathbinordspacing", "Umathbinpunctspacing", "Umathbinrelspacing", "Umathbotaccentvariant", "Umathchar", "Umathcharclass", "Umathchardef", "Umathcharfam", "Umathcharnum", "Umathcharnumdef", "Umathcharslot", "Umathclass", "Umathclosebinspacing", "Umathcloseclosespacing", "Umathcloseinnerspacing", "Umathcloseopenspacing", "Umathcloseopspacing", "Umathcloseordspacing", "Umathclosepunctspacing", "Umathcloserelspacing", "Umathcode", "Umathcodenum", "Umathconnectoroverlapmin", "Umathdegreevariant", "Umathdelimiterovervariant", "Umathdelimiterundervariant", "Umathdenominatorvariant", "Umathextrasubpreshift", "Umathextrasubshift", "Umathextrasuppreshift", "Umathextrasupshift", "Umathfractiondelsize", "Umathfractiondenomdown", "Umathfractiondenomvgap", "Umathfractionnumup", "Umathfractionnumvgap", "Umathfractionrule", "Umathfractionvariant", "Umathhextensiblevariant", "Umathinnerbinspacing", "Umathinnerclosespacing", "Umathinnerinnerspacing", "Umathinneropenspacing", "Umathinneropspacing", "Umathinnerordspacing", "Umathinnerpunctspacing", "Umathinnerrelspacing", "Umathlimitabovebgap", "Umathlimitabovekern", "Umathlimitabovevgap", "Umathlimitbelowbgap", "Umathlimitbelowkern", "Umathlimitbelowvgap", "Umathlimits", "Umathnoaxis", "Umathnolimits", "Umathnolimitsubfactor", "Umathnolimitsupfactor", "Umathnumeratorvariant", "Umathopbinspacing", "Umathopclosespacing", "Umathopenbinspacing", "Umathopenclosespacing", "Umathopeninnerspacing", "Umathopenopenspacing", "Umathopenopspacing", "Umathopenordspacing", "Umathopenpunctspacing", "Umathopenrelspacing", "Umathopenupdepth", "Umathopenupheight", "Umathoperatorsize", "Umathopinnerspacing", "Umathopopenspacing", "Umathopopspacing", "Umathopordspacing", "Umathoppunctspacing", "Umathoprelspacing", "Umathordbinspacing", "Umathordclosespacing", "Umathordinnerspacing", "Umathordopenspacing", "Umathordopspacing", "Umathordordspacing", "Umathordpunctspacing", "Umathordrelspacing", "Umathoverbarkern", "Umathoverbarrule", "Umathoverbarvgap", "Umathoverdelimiterbgap", "Umathoverdelimitervariant", "Umathoverdelimitervgap", "Umathoverlayaccentvariant", "Umathoverlinevariant", "Umathphantom", "Umathpunctbinspacing", "Umathpunctclosespacing", "Umathpunctinnerspacing", "Umathpunctopenspacing", "Umathpunctopspacing", "Umathpunctordspacing", "Umathpunctpunctspacing", "Umathpunctrelspacing", "Umathquad", "Umathradicaldegreeafter", "Umathradicaldegreebefore", "Umathradicaldegreeraise", "Umathradicalkern", "Umathradicalrule", "Umathradicalvariant", "Umathradicalvgap", "Umathrelbinspacing", "Umathrelclosespacing", "Umathrelinnerspacing", "Umathrelopenspacing", "Umathrelopspacing", "Umathrelordspacing", "Umathrelpunctspacing", "Umathrelrelspacing", "Umathskewedfractionhgap", "Umathskewedfractionvgap", "Umathspaceafterscript", "Umathspacebeforescript", "Umathspacingmode", "Umathstackdenomdown", "Umathstacknumup", "Umathstackvariant", "Umathstackvgap", "Umathsubscriptvariant", "Umathsubshiftdown", "Umathsubshiftdrop", "Umathsubsupshiftdown", "Umathsubsupvgap", "Umathsubtopmax", "Umathsupbottommin", "Umathsuperscriptvariant", "Umathsupshiftdrop", "Umathsupshiftup", "Umathsupsubbottommax", "Umathtopaccentvariant", "Umathunderbarkern", "Umathunderbarrule", "Umathunderbarvgap", "Umathunderdelimiterbgap", "Umathunderdelimitervariant", "Umathunderdelimitervgap", "Umathunderlinevariant", "Umathvextensiblevariant", "Umathvoid", "Umiddle", "Unosubprescript", "Unosubscript", "Unosuperprescript", "Unosuperscript", "Uover", "Uoverdelimiter", "Uoverwithdelims", "Uradical", "Uright", "Uroot", "Uskewed", "Uskewedwithdelims", "Ustack", "Ustartdisplaymath", "Ustartmath", "Ustopdisplaymath", "Ustopmath", "Ustyle", "Usubprescript", "Usubscript", "Usuperprescript", "Usuperscript", "Uunderdelimiter", "Uvextensible", "adjustspacing", "adjustspacingshrink", "adjustspacingstep", "adjustspacingstretch", "afterassigned", "aftergrouped", "aliased", "alignmark", "aligntab", "atendofgroup", "atendofgrouped", "attribute", "attributedef", "automaticdiscretionary", "automatichyphenpenalty", "automigrationmode", "autoparagraphmode", "begincsname", "beginlocalcontrol", "boundary", "boxattribute", "boxdirection", "boxorientation", "boxtotal", "boxxmove", "boxxoffset", "boxymove", "boxyoffset", "catcodetable", "clearmarks", "crampeddisplaystyle", "crampedscriptscriptstyle", "crampedscriptstyle", "crampedtextstyle", "csstring", "currentmarks", "defcsname", "dimensiondef", "dimexpression", "directlua", "edefcsname", "efcode", "endlocalcontrol", "enforced", "etoksapp", "etokspre", "everybeforepar", "everytab", "exceptionpenalty", "expand", "expandafterpars", "expandafterspaces", "expandcstoken", "expanded", "expandtoken", "explicitdiscretionary", "explicithyphenpenalty", "firstvalidlanguage", "flushmarks", "fontid", "fontmathcontrol", "fontspecifiedsize", "fonttextcontrol", "formatname", "frozen", "futurecsname", "futuredef", "futureexpand", "futureexpandis", "futureexpandisap", "gdefcsname", "gleaders", "glet", "gletcsname", "glettonothing", "gluespecdef", "glyphdatafield", "glyphoptions", "glyphscale", "glyphscriptfield", "glyphscriptscale", "glyphscriptscriptscale", "glyphstatefield", "glyphtextscale", "glyphxoffset", "glyphxscale", "glyphyoffset", "glyphyscale", "gtoksapp", "gtokspre", "hccode", "hjcode", "hpack", "hyphenationmin", "hyphenationmode", "ifabsdim", "ifabsnum", "ifarguments", "ifboolean", "ifchkdim", "ifchknum", "ifcmpdim", "ifcmpnum", "ifcondition", "ifcstok", "ifdimexpression", "ifdimval", "ifempty", "ifflags", "ifhaschar", "ifhastok", "ifhastoks", "ifhasxtoks", "ifincsname", "ifinsert", "ifmathparameter", "ifmathstyle", "ifnumexpression", "ifnumval", "ifparameter", "ifparameters", "ifrelax", "iftok", "ignorearguments", "ignorepars", "immediate", "immutable", "initcatcodetable", "insertbox", "insertcopy", "insertdepth", "insertdistance", "insertheight", "insertheights", "insertlimit", "insertmode", "insertmultiplier", "insertprogress", "insertstorage", "insertstoring", "insertunbox", "insertuncopy", "insertwidth", "instance", "integerdef", "lastarguments", "lastchkdim", "lastchknum", "lastnamedcs", "lastnodesubtype", "lastparcontext", "leftmarginkern", "letcharcode", "letcsname", "letfrozen", "letprotected", "lettonothing", "linedirection", "localbrokenpenalty", "localcontrol", "localcontrolled", "localinterlinepenalty", "localleftbox", "localrightbox", "lpcode", "luabytecode", "luabytecodecall", "luacopyinputnodes", "luadef", "luaescapestring", "luafunction", "luafunctioncall", "luatexbanner", "luatexrevision", "luatexversion", "mathcontrolmode", "mathdelimitersmode", "mathdirection", "mathdisplayskipmode", "matheqnogapstep", "mathflattenmode", "mathfontcontrol", "mathitalicsmode", "mathnolimitsmode", "mathpenaltiesmode", "mathrulesfam", "mathrulesmode", "mathrulethicknessmode", "mathscale", "mathscriptboxmode", "mathscriptcharmode", "mathscriptsmode", "mathstyle", "mathsurroundmode", "mathsurroundskip", "mugluespecdef", "mutable", "noaligned", "noboundary", "nohrule", "norelax", "normalizelinemode", "nospaces", "novrule", "numericscale", "numexpression", "orelse", "orunless", "outputbox", "overloaded", "overloadmode", "parametercount", "parametermark", "parattribute", "pardirection", "permanent", "postexhyphenchar", "posthyphenchar", "prebinoppenalty", "predisplaygapfactor", "preexhyphenchar", "prehyphenchar", "prerelpenalty", "protrudechars", "protrusionboundary", "pxdimen", "quitvmode", "retokenized", "rightmarginkern", "rpcode", "savecatcodetable", "scantextokens", "semiexpanded", "semiprotected", "setfontid", "snapshotpar", "supmarkmode", "swapcsvalues", "tabsize", "textdirection", "thewithoutunit", "tokenized", "toksapp", "tokspre", "tolerant", "tpack", "tracingalignments", "tracingexpressions", "tracingfonts", "tracinghyphenation", "tracinginserts", "tracingmarks", "tracingmath", "undent", "unletfrozen", "unletprotected", "untraced", "vpack", "wordboundary", "wrapuppar", "xdefcsname", "xtoksapp", "xtokspre" }, ["omega"]={ "Omegaminorversion", "Omegarevision", "Omegaversion" }, ["pdftex"]={ "ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "pdfadjustspacing", "pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit", "pdfcompresslevel", "pdfcopyfont", "pdfcreationdate", "pdfdecimaldigits", "pdfdest", "pdfdestmargin", "pdfdraftmode", "pdfeachlinedepth", "pdfeachlineheight", "pdfendlink", "pdfendthread", "pdffirstlineheight", "pdffontattr", "pdffontexpand", "pdffontname", "pdffontobjnum", "pdffontsize", "pdfgamma", "pdfgentounicode", "pdfglyphtounicode", "pdfhorigin", "pdfignoreddimen", "pdfignoreunknownimages", "pdfimageaddfilename", "pdfimageapplygamma", "pdfimagegamma", "pdfimagehicolor", "pdfimageresolution", "pdfincludechars", "pdfinclusioncopyfonts", "pdfinclusionerrorlevel", "pdfinfo", "pdfinfoomitdate", "pdfinsertht", "pdflastannot", "pdflastlinedepth", "pdflastlink", "pdflastobj", "pdflastxform", "pdflastximage", "pdflastximagepages", "pdflastxpos", "pdflastypos", "pdflinkmargin", "pdfliteral", "pdfmajorversion", "pdfmapfile", "pdfmapline", "pdfminorversion", "pdfnames", "pdfnoligatures", "pdfnormaldeviate", "pdfobj", "pdfobjcompresslevel", "pdfomitcharset", "pdfomitcidset", "pdfoutline", "pdfoutput", "pdfpageattr", "pdfpagebox", "pdfpageheight", "pdfpageref", "pdfpageresources", "pdfpagesattr", "pdfpagewidth", "pdfpkfixeddpi", "pdfpkmode", "pdfpkresolution", "pdfprimitive", "pdfprotrudechars", "pdfpxdimen", "pdfrandomseed", "pdfrecompress", "pdfrefobj", "pdfrefxform", "pdfrefximage", "pdfreplacefont", "pdfrestore", "pdfretval", "pdfsave", "pdfsavepos", "pdfsetmatrix", "pdfsetrandomseed", "pdfstartlink", "pdfstartthread", "pdfsuppressoptionalinfo", "pdfsuppressptexinfo", "pdftexbanner", "pdftexrevision", "pdftexversion", "pdfthread", "pdfthreadmargin", "pdftracingfonts", "pdftrailer", "pdftrailerid", "pdfuniformdeviate", "pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr", "pdfxformmargin", "pdfxformname", "pdfxformresources", "pdfximage" }, - ["tex"]={ " ", "-", "/", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "aligncontent", "atop", "atopwithdelims", "badness", "baselineskip", "batchmode", "begingroup", "beginsimplegroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "botmark", "box", "boxmaxdepth", "brokenpenalty", "catcode", "char", "chardef", "cleaders", "clubpenalty", "copy", "count", "countdef", "cr", "crcr", "csname", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "dimen", "dimendef", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "edef", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "endsimplegroup", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "fam", "fi", "finalhyphendemerits", "firstmark", "floatingpenalty", "font", "fontdimen", "fontname", "fontspecifiedname", "futurelet", "gdef", "global", "globaldefs", "glyph", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifcase", "ifcat", "ifdim", "iffalse", "ifhbox", "ifhmode", "ifinner", "ifmmode", "ifnum", "ifodd", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "indent", "input", "inputlineno", "insert", "insertpenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastpenalty", "lastskip", "lccode", "leaders", "left", "lefthyphenmin", "leftskip", "leqno", "let", "limits", "linepenalty", "lineskip", "lineskiplimit", "long", "looseness", "lower", "lowercase", "mark", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "meaningfull", "meaningless", "medmuskip", "message", "middle", "mkern", "month", "moveleft", "moveright", "mskip", "multiply", "muskip", "muskipdef", "newlinechar", "noalign", "noexpand", "noindent", "nolimits", "nonscript", "nonstopmode", "nulldelimiterspace", "nullfont", "number", "omit", "or", "outer", "output", "outputpenalty", "over", "overfullrule", "overline", "overshoot", "overwithdelims", "pagedepth", "pagefilllstretch", "pagefillstretch", "pagefilstretch", "pagegoal", "pageshrink", "pagestretch", "pagetotal", "par", "parfillleftskip", "parfillskip", "parindent", "parshape", "parskip", "patterns", "pausing", "penalty", "postdisplaypenalty", "predisplaypenalty", "predisplaysize", "pretolerance", "prevdepth", "prevgraf", "radical", "raise", "relax", "relpenalty", "right", "righthyphenmin", "rightskip", "romannumeral", "scaledfontdimen", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showlists", "shownodedetails", "showthe", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "splitbotmark", "splitfirstmark", "splitmaxdepth", "splittopskip", "string", "tabskip", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "todimension", "tointeger", "toks", "toksdef", "tolerance", "topmark", "topskip", "toscaled", "tracingcommands", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingstats", "uccode", "uchyph", "underline", "unhbox", "unhcopy", "unhpack", "unkern", "unpenalty", "unskip", "unvbox", "unvcopy", "unvpack", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalty", "xdef", "xleaders", "xspaceskip", "year" }, + ["tex"]={ " ", "-", "/", "above", "abovedisplayshortskip", "abovedisplayskip", "abovewithdelims", "accent", "adjdemerits", "advance", "afterassignment", "aftergroup", "aligncontent", "atop", "atopwithdelims", "badness", "baselineskip", "batchmode", "begingroup", "beginsimplegroup", "belowdisplayshortskip", "belowdisplayskip", "binoppenalty", "botmark", "box", "boxmaxdepth", "brokenpenalty", "catcode", "char", "chardef", "cleaders", "clubpenalty", "copy", "count", "countdef", "cr", "crcr", "csname", "day", "deadcycles", "def", "defaulthyphenchar", "defaultskewchar", "delcode", "delimiter", "delimiterfactor", "delimitershortfall", "dimen", "dimendef", "discretionary", "displayindent", "displaylimits", "displaystyle", "displaywidowpenalty", "displaywidth", "divide", "doublehyphendemerits", "dp", "dump", "edef", "else", "emergencystretch", "end", "endcsname", "endgroup", "endinput", "endlinechar", "endsimplegroup", "eqno", "errhelp", "errmessage", "errorcontextlines", "errorstopmode", "escapechar", "everycr", "everydisplay", "everyhbox", "everyjob", "everymath", "everypar", "everyvbox", "exhyphenchar", "exhyphenpenalty", "expandafter", "fam", "fi", "finalhyphendemerits", "firstmark", "floatingpenalty", "font", "fontdimen", "fontname", "fontspecifiedname", "futurelet", "gdef", "global", "globaldefs", "glyph", "halign", "hangafter", "hangindent", "hbadness", "hbox", "hfil", "hfill", "hfilneg", "hfuzz", "holdinginserts", "hrule", "hsize", "hskip", "hss", "ht", "hyphenation", "hyphenchar", "hyphenpenalty", "if", "ifcase", "ifcat", "ifdim", "iffalse", "ifhbox", "ifhmode", "ifinner", "ifmmode", "ifnum", "ifodd", "iftrue", "ifvbox", "ifvmode", "ifvoid", "ifx", "ignorespaces", "indent", "input", "inputlineno", "insert", "insertpenalties", "interlinepenalty", "jobname", "kern", "language", "lastbox", "lastkern", "lastpenalty", "lastskip", "lccode", "leaders", "left", "lefthyphenmin", "leftskip", "leqno", "let", "limits", "linepenalty", "lineskip", "lineskiplimit", "long", "looseness", "lower", "lowercase", "mark", "mathaccent", "mathbin", "mathchar", "mathchardef", "mathchoice", "mathclose", "mathcode", "mathinner", "mathop", "mathopen", "mathord", "mathpunct", "mathrel", "mathsurround", "maxdeadcycles", "maxdepth", "meaning", "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", "pagevsize", "par", "parfillleftskip", "parfillskip", "parindent", "parshape", "parskip", "patterns", "pausing", "penalty", "postdisplaypenalty", "predisplaypenalty", "predisplaysize", "pretolerance", "prevdepth", "prevgraf", "radical", "raise", "relax", "relpenalty", "right", "righthyphenmin", "rightskip", "romannumeral", "scaledfontdimen", "scriptfont", "scriptscriptfont", "scriptscriptstyle", "scriptspace", "scriptstyle", "scrollmode", "setbox", "setlanguage", "sfcode", "shipout", "show", "showbox", "showboxbreadth", "showboxdepth", "showlists", "shownodedetails", "showthe", "skewchar", "skip", "skipdef", "spacefactor", "spaceskip", "span", "splitbotmark", "splitfirstmark", "splitmaxdepth", "splittopskip", "string", "tabskip", "textfont", "textstyle", "the", "thickmuskip", "thinmuskip", "time", "todimension", "tointeger", "toks", "toksdef", "tolerance", "topmark", "topskip", "toscaled", "tracingcommands", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingpages", "tracingparagraphs", "tracingrestores", "tracingstats", "uccode", "uchyph", "underline", "unhbox", "unhcopy", "unhpack", "unkern", "unpenalty", "unskip", "unvbox", "unvcopy", "unvpack", "uppercase", "vadjust", "valign", "vbadness", "vbox", "vcenter", "vfil", "vfill", "vfilneg", "vfuzz", "vrule", "vsize", "vskip", "vsplit", "vss", "vtop", "wd", "widowpenalty", "xdef", "xleaders", "xspaceskip", "year" }, ["xetex"]={ "XeTeXversion" }, } \ No newline at end of file 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 f60c3726e..f71986cd5 100644 --- a/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json +++ b/context/data/vscode/extensions/context/syntaxes/context-syntax-tex.json @@ -216,7 +216,7 @@ ] }, "primitive" : { - "match" : "\u005C\u005C(year|xtokspre|xtoksapp|xspaceskip|xleaders|xdefcsname|xdef|wrapuppar|wordboundary|widowpenalty|widowpenalties|wd|vtop|vss|vsplit|vskip|vsize|vrule|vpack|vfuzz|vfilneg|vfill|vfil|vcenter|vbox|vbadness|valign|vadjust|uppercase|unvpack|unvcopy|unvbox|untraced|unskip|unpenalty|unletprotected|unletfrozen|unless|unkern|unhpack|unhcopy|unhbox|underline|undent|uchyph|uccode|tracingstats|tracingrestores|tracingparagraphs|tracingpages|tracingoutput|tracingonline|tracingnesting|tracingmath|tracingmarks|tracingmacros|tracinglostchars|tracinglevels|tracingifs|tracinghyphenation|tracinggroups|tracingfonts|tracingexpressions|tracingcommands|tracingassigns|tracingalignments|tpack|toscaled|topskip|topmarks|topmark|tolerant|tolerance|tokspre|toksdef|toksapp|toks|tokenized|tointeger|todimension|time|thinmuskip|thickmuskip|thewithoutunit|the|textstyle|textfont|textdirection|tabskip|tabsize|swapcsvalues|supmarkmode|string|splittopskip|splitmaxdepth|splitfirstmarks|splitfirstmark|splitdiscards|splitbotmarks|splitbotmark|span|spaceskip|spacefactor|snapshotpar|skipdef|skip|skewchar|showtokens|showthe|shownodedetails|showlists|showifs|showgroups|showboxdepth|showboxbreadth|showbox|show|shipout|sfcode|setlanguage|setfontid|setbox|semiprotected|semiexpanded|scrollmode|scriptstyle|scriptspace|scriptscriptstyle|scriptscriptfont|scriptfont|scantokens|scantextokens|scaledfontdimen|savingvdiscards|savinghyphcodes|savecatcodetable|rpcode|romannumeral|rightskip|rightmarginkern|righthyphenmin|right|retokenized|relpenalty|relax|raise|radical|quitvmode|pxdimen|protrusionboundary|protrudechars|protected|prevgraf|prevdepth|pretolerance|prerelpenalty|prehyphenchar|preexhyphenchar|predisplaysize|predisplaypenalty|predisplaygapfactor|predisplaydirection|prebinoppenalty|posthyphenchar|postexhyphenchar|postdisplaypenalty|permanent|penalty|pdfximage|pdfxformresources|pdfxformname|pdfxformmargin|pdfxformattr|pdfxform|pdfvorigin|pdfuniqueresname|pdfuniformdeviate|pdftrailerid|pdftrailer|pdftracingfonts|pdfthreadmargin|pdfthread|pdftexversion|pdftexrevision|pdftexbanner|pdfsuppressptexinfo|pdfsuppressoptionalinfo|pdfstartthread|pdfstartlink|pdfsetrandomseed|pdfsetmatrix|pdfsavepos|pdfsave|pdfretval|pdfrestore|pdfreplacefont|pdfrefximage|pdfrefxform|pdfrefobj|pdfrecompress|pdfrandomseed|pdfpxdimen|pdfprotrudechars|pdfprimitive|pdfpkresolution|pdfpkmode|pdfpkfixeddpi|pdfpagewidth|pdfpagesattr|pdfpageresources|pdfpageref|pdfpageheight|pdfpagebox|pdfpageattr|pdfoutput|pdfoutline|pdfomitcidset|pdfomitcharset|pdfobjcompresslevel|pdfobj|pdfnormaldeviate|pdfnoligatures|pdfnames|pdfminorversion|pdfmapline|pdfmapfile|pdfmajorversion|pdfliteral|pdflinkmargin|pdflastypos|pdflastxpos|pdflastximagepages|pdflastximage|pdflastxform|pdflastobj|pdflastlink|pdflastlinedepth|pdflastannot|pdfinsertht|pdfinfoomitdate|pdfinfo|pdfinclusionerrorlevel|pdfinclusioncopyfonts|pdfincludechars|pdfimageresolution|pdfimagehicolor|pdfimagegamma|pdfimageapplygamma|pdfimageaddfilename|pdfignoreunknownimages|pdfignoreddimen|pdfhorigin|pdfglyphtounicode|pdfgentounicode|pdfgamma|pdffontsize|pdffontobjnum|pdffontname|pdffontexpand|pdffontattr|pdffirstlineheight|pdfendthread|pdfendlink|pdfeachlineheight|pdfeachlinedepth|pdfdraftmode|pdfdestmargin|pdfdest|pdfdecimaldigits|pdfcreationdate|pdfcopyfont|pdfcompresslevel|pdfcolorstackinit|pdfcolorstack|pdfcatalog|pdfannot|pdfadjustspacing|pausing|patterns|parskip|parshapelength|parshapeindent|parshapedimen|parshape|parindent|parfillskip|pardirection|parattribute|parametermark|parametercount|par|pagetotal|pagestretch|pageshrink|pagegoal|pagefilstretch|pagefillstretch|pagefilllstretch|pagediscards|pagedepth|overwithdelims|overshoot|overloadmode|overloaded|overline|overfullrule|over|outputpenalty|outputbox|output|outer|orunless|orelse|or|omit|numexpression|numexpr|numericscale|number|nullfont|nulldelimiterspace|novrule|nospaces|normalyear|normalxtokspre|normalxtoksapp|normalxspaceskip|normalxleaders|normalxdefcsname|normalxdef|normalwrapuppar|normalwordboundary|normalwidowpenalty|normalwidowpenalties|normalwd|normalvtop|normalvss|normalvsplit|normalvskip|normalvsize|normalvrule|normalvpack|normalvfuzz|normalvfilneg|normalvfill|normalvfil|normalvcenter|normalvbox|normalvbadness|normalvalign|normalvadjust|normaluppercase|normalunvpack|normalunvcopy|normalunvbox|normaluntraced|normalunskip|normalunpenalty|normalunletprotected|normalunletfrozen|normalunless|normalunkern|normalunhpack|normalunhcopy|normalunhbox|normalunexpanded|normalunderline|normalundent|normaluchyph|normaluccode|normaltracingstats|normaltracingrestores|normaltracingparagraphs|normaltracingpages|normaltracingoutput|normaltracingonline|normaltracingnesting|normaltracingmath|normaltracingmarks|normaltracingmacros|normaltracinglostchars|normaltracinglevels|normaltracingifs|normaltracinghyphenation|normaltracinggroups|normaltracingfonts|normaltracingexpressions|normaltracingcommands|normaltracingassigns|normaltracingalignments|normaltpack|normaltoscaled|normaltopskip|normaltopmarks|normaltopmark|normaltolerant|normaltolerance|normaltokspre|normaltoksdef|normaltoksapp|normaltoks|normaltokenized|normaltointeger|normaltodimension|normaltime|normalthinmuskip|normalthickmuskip|normalthewithoutunit|normalthe|normaltextstyle|normaltextfont|normaltextdirection|normaltabskip|normaltabsize|normalswapcsvalues|normalsupmarkmode|normalstring|normalsplittopskip|normalsplitmaxdepth|normalsplitfirstmarks|normalsplitfirstmark|normalsplitdiscards|normalsplitbotmarks|normalsplitbotmark|normalspan|normalspaceskip|normalspacefactor|normalsnapshotpar|normalskipdef|normalskip|normalskewchar|normalshowtokens|normalshowthe|normalshownodedetails|normalshowlists|normalshowifs|normalshowgroups|normalshowboxdepth|normalshowboxbreadth|normalshowbox|normalshow|normalshipout|normalsfcode|normalsetlanguage|normalsetfontid|normalsetbox|normalsemiprotected|normalsemiexpanded|normalscrollmode|normalscriptstyle|normalscriptspace|normalscriptscriptstyle|normalscriptscriptfont|normalscriptfont|normalscantokens|normalscantextokens|normalscaledfontdimen|normalsavingvdiscards|normalsavinghyphcodes|normalsavecatcodetable|normalrpcode|normalromannumeral|normalrightskip|normalrightmarginkern|normalrighthyphenmin|normalright|normalretokenized|normalrelpenalty|normalrelax|normalraise|normalradical|normalquitvmode|normalpxdimen|normalprotrusionboundary|normalprotrudechars|normalprotected|normalprevgraf|normalprevdepth|normalpretolerance|normalprerelpenalty|normalprehyphenchar|normalpreexhyphenchar|normalpredisplaysize|normalpredisplaypenalty|normalpredisplaygapfactor|normalpredisplaydirection|normalprebinoppenalty|normalposthyphenchar|normalpostexhyphenchar|normalpostdisplaypenalty|normalpermanent|normalpenalty|normalpdfximage|normalpdfxformresources|normalpdfxformname|normalpdfxformmargin|normalpdfxformattr|normalpdfxform|normalpdfvorigin|normalpdfuniqueresname|normalpdfuniformdeviate|normalpdftrailerid|normalpdftrailer|normalpdftracingfonts|normalpdfthreadmargin|normalpdfthread|normalpdftexversion|normalpdftexrevision|normalpdftexbanner|normalpdfsuppressptexinfo|normalpdfsuppressoptionalinfo|normalpdfstartthread|normalpdfstartlink|normalpdfsetrandomseed|normalpdfsetmatrix|normalpdfsavepos|normalpdfsave|normalpdfretval|normalpdfrestore|normalpdfreplacefont|normalpdfrefximage|normalpdfrefxform|normalpdfrefobj|normalpdfrecompress|normalpdfrandomseed|normalpdfpxdimen|normalpdfprotrudechars|normalpdfprimitive|normalpdfpkresolution|normalpdfpkmode|normalpdfpkfixeddpi|normalpdfpagewidth|normalpdfpagesattr|normalpdfpageresources|normalpdfpageref|normalpdfpageheight|normalpdfpagebox|normalpdfpageattr|normalpdfoutput|normalpdfoutline|normalpdfomitcidset|normalpdfomitcharset|normalpdfobjcompresslevel|normalpdfobj|normalpdfnormaldeviate|normalpdfnoligatures|normalpdfnames|normalpdfminorversion|normalpdfmapline|normalpdfmapfile|normalpdfmajorversion|normalpdfliteral|normalpdflinkmargin|normalpdflastypos|normalpdflastxpos|normalpdflastximagepages|normalpdflastximage|normalpdflastxform|normalpdflastobj|normalpdflastlink|normalpdflastlinedepth|normalpdflastannot|normalpdfinsertht|normalpdfinfoomitdate|normalpdfinfo|normalpdfinclusionerrorlevel|normalpdfinclusioncopyfonts|normalpdfincludechars|normalpdfimageresolution|normalpdfimagehicolor|normalpdfimagegamma|normalpdfimageapplygamma|normalpdfimageaddfilename|normalpdfignoreunknownimages|normalpdfignoreddimen|normalpdfhorigin|normalpdfglyphtounicode|normalpdfgentounicode|normalpdfgamma|normalpdffontsize|normalpdffontobjnum|normalpdffontname|normalpdffontexpand|normalpdffontattr|normalpdffirstlineheight|normalpdfendthread|normalpdfendlink|normalpdfeachlineheight|normalpdfeachlinedepth|normalpdfdraftmode|normalpdfdestmargin|normalpdfdest|normalpdfdecimaldigits|normalpdfcreationdate|normalpdfcopyfont|normalpdfcompresslevel|normalpdfcolorstackinit|normalpdfcolorstack|normalpdfcatalog|normalpdfannot|normalpdfadjustspacing|normalpausing|normalpatterns|normalparskip|normalparshapelength|normalparshapeindent|normalparshapedimen|normalparshape|normalparindent|normalparfillskip|normalparfillleftskip|normalpardirection|normalparattribute|normalparametermark|normalparametercount|normalpar|normalpagetotal|normalpagestretch|normalpageshrink|normalpagegoal|normalpagefilstretch|normalpagefillstretch|normalpagefilllstretch|normalpagediscards|normalpagedepth|normaloverwithdelims|normalovershoot|normaloverloadmode|normaloverloaded|normaloverline|normaloverfullrule|normalover|normaloutputpenalty|normaloutputbox|normaloutput|normalouter|normalorunless|normalorelse|normalor|normalomit|normalnumexpression|normalnumexpr|normalnumericscale|normalnumber|normalnullfont|normalnulldelimiterspace|normalnovrule|normalnospaces|normalnormalizelinemode|normalnorelax|normalnonstopmode|normalnonscript|normalnolimits|normalnoindent|normalnohrule|normalnoexpand|normalnoboundary|normalnoaligned|normalnoalign|normalnewlinechar|normalmutoglue|normalmutable|normalmuskipdef|normalmuskip|normalmultiply|normalmugluespecdef|normalmuexpr|normalmskip|normalmoveright|normalmoveleft|normalmonth|normalmkern|normalmiddle|normalmessage|normalmedmuskip|normalmeaningless|normalmeaningfull|normalmeaning|normalmaxdepth|normalmaxdeadcycles|normalmathsurroundskip|normalmathsurroundmode|normalmathsurround|normalmathstyle|normalmathscriptsmode|normalmathscriptcharmode|normalmathscriptboxmode|normalmathscale|normalmathrulethicknessmode|normalmathrulesmode|normalmathrulesfam|normalmathrel|normalmathpunct|normalmathpenaltiesmode|normalmathord|normalmathopen|normalmathop|normalmathnolimitsmode|normalmathitalicsmode|normalmathinner|normalmathfontcontrol|normalmathflattenmode|normalmatheqnogapstep|normalmathdisplayskipmode|normalmathdirection|normalmathdelimitersmode|normalmathcontrolmode|normalmathcode|normalmathclose|normalmathchoice|normalmathchardef|normalmathchar|normalmathbin|normalmathaccent|normalmarks|normalmark|normalluatexversion|normalluatexrevision|normalluatexbanner|normalluafunctioncall|normalluafunction|normalluaescapestring|normalluadef|normalluacopyinputnodes|normalluabytecodecall|normalluabytecode|normallpcode|normallowercase|normallower|normallooseness|normallong|normallocalrightbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolled|normallocalcontrol|normallocalbrokenpenalty|normallineskiplimit|normallineskip|normallinepenalty|normallinedirection|normallimits|normallettonothing|normalletprotected|normalletfrozen|normalletcsname|normalletcharcode|normallet|normalleqno|normalleftskip|normalleftmarginkern|normallefthyphenmin|normalleft|normalleaders|normallccode|normallastskip|normallastpenalty|normallastparcontext|normallastnodetype|normallastnodesubtype|normallastnamedcs|normallastlinefit|normallastkern|normallastchknum|normallastchkdim|normallastbox|normallastarguments|normallanguage|normalkern|normaljobname|normalizelinemode|normalinterlinepenalty|normalinterlinepenalties|normalinteractionmode|normalintegerdef|normalinstance|normalinsertwidth|normalinsertuncopy|normalinsertunbox|normalinsertprogress|normalinsertpenalties|normalinsertmultiplier|normalinsertmode|normalinsertlimit|normalinsertheights|normalinsertheight|normalinsertdistance|normalinsertdepth|normalinsertcopy|normalinsertbox|normalinsert|normalinputlineno|normalinput|normalinitcatcodetable|normalindent|normalimmutable|normalimmediate|normalignorespaces|normalignorepars|normalignorearguments|normalifx|normalifvoid|normalifvmode|normalifvbox|normaliftrue|normaliftok|normalifrelax|normalifpdfprimitive|normalifpdfabsnum|normalifpdfabsdim|normalifparameters|normalifparameter|normalifodd|normalifnumval|normalifnumexpression|normalifnum|normalifmmode|normalifmathstyle|normalifmathparameter|normalifinsert|normalifinner|normalifincsname|normalifhmode|normalifhbox|normalifhasxtoks|normalifhastoks|normalifhastok|normalifhaschar|normaliffontchar|normalifflags|normaliffalse|normalifempty|normalifdimval|normalifdimexpression|normalifdim|normalifdefined|normalifcstok|normalifcsname|normalifcondition|normalifcmpnum|normalifcmpdim|normalifchknum|normalifchkdim|normalifcat|normalifcase|normalifboolean|normalifarguments|normalifabsnum|normalifabsdim|normalif|normalhyphenpenalty|normalhyphenchar|normalhyphenationmode|normalhyphenationmin|normalhyphenation|normalht|normalhss|normalhskip|normalhsize|normalhrule|normalhpack|normalholdinginserts|normalhjcode|normalhfuzz|normalhfilneg|normalhfill|normalhfil|normalhccode|normalhbox|normalhbadness|normalhangindent|normalhangafter|normalhalign|normalgtokspre|normalgtoksapp|normalglyphyscale|normalglyphyoffset|normalglyphxscale|normalglyphxoffset|normalglyphtextscale|normalglyphstatefield|normalglyphscriptscriptscale|normalglyphscriptscale|normalglyphscriptfield|normalglyphscale|normalglyphoptions|normalglyphdatafield|normalglyph|normalgluetomu|normalgluestretchorder|normalgluestretch|normalgluespecdef|normalglueshrinkorder|normalglueshrink|normalglueexpr|normalglobaldefs|normalglobal|normalglettonothing|normalgletcsname|normalglet|normalgleaders|normalgdefcsname|normalgdef|normalfuturelet|normalfutureexpandisap|normalfutureexpandis|normalfutureexpand|normalfuturedef|normalfuturecsname|normalfrozen|normalformatname|normalfonttextcontrol|normalfontspecifiedsize|normalfontspecifiedname|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normalescapechar|normalerrorstopmode|normalerrorcontextlines|normalerrmessage|normalerrhelp|normaleqno|normalenforced|normalendsimplegroup|normalendlocalcontrol|normalendlinechar|normalendinput|normalendgroup|normalendcsname|normalend|normalemergencystretch|normalelse|normalefcode|normaledefcsname|normaledef|normaldump|normaldp|normaldoublehyphendemerits|normaldivide|normaldisplaywidth|normaldisplaywidowpenalty|normaldisplaywidowpenalties|normaldisplaystyle|normaldisplaylimits|normaldisplayindent|normaldiscretionary|normaldirectlua|normaldimexpression|normaldimexpr|normaldimensiondef|normaldimendef|normaldimen|normaldetokenize|normaldelimitershortfall|normaldelimiterfactor|normaldelimiter|normaldelcode|normaldefcsname|normaldefaultskewchar|normaldefaulthyphenchar|normaldef|normaldeadcycles|normalday|normalcurrentmarks|normalcurrentiftype|normalcurrentiflevel|normalcurrentifbranch|normalcurrentgrouptype|normalcurrentgrouplevel|normalcsstring|normalcsname|normalcrcr|normalcrampedtextstyle|normalcrampedscriptstyle|normalcrampedscriptscriptstyle|normalcrampeddisplaystyle|normalcr|normalcountdef|normalcount|normalcopy|normalclubpenalty|normalclubpenalties|normalclearmarks|normalcleaders|normalchardef|normalchar|normalcatcodetable|normalcatcode|normalbrokenpenalty|normalboxyoffset|normalboxymove|normalboxxoffset|normalboxxmove|normalboxtotal|normalboxorientation|normalboxmaxdepth|normalboxdirection|normalboxattribute|normalbox|normalboundary|normalbotmarks|normalbotmark|normalbinoppenalty|normalbelowdisplayskip|normalbelowdisplayshortskip|normalbeginsimplegroup|normalbeginlocalcontrol|normalbegingroup|normalbegincsname|normalbatchmode|normalbaselineskip|normalbadness|normalautoparagraphmode|normalautomigrationmode|normalautomatichyphenpenalty|normalautomaticdiscretionary|normalattributedef|normalattribute|normalatopwithdelims|normalatop|normalatendofgrouped|normalatendofgroup|normalaligntab|normalalignmark|normalaligncontent|normalaliased|normalaftergrouped|normalaftergroup|normalafterassignment|normalafterassigned|normaladvance|normaladjustspacingstretch|normaladjustspacingstep|normaladjustspacingshrink|normaladjustspacing|normaladjdemerits|normalaccent|normalabovewithdelims|normalabovedisplayskip|normalabovedisplayshortskip|normalabove|normalXeTeXversion|normalUvextensible|normalUunderdelimiter|normalUsuperscript|normalUsuperprescript|normalUsubscript|normalUsubprescript|normalUstyle|normalUstopmath|normalUstopdisplaymath|normalUstartmath|normalUstartdisplaymath|normalUstack|normalUskewedwithdelims|normalUskewed|normalUroot|normalUright|normalUradical|normalUoverwithdelims|normalUoverdelimiter|normalUover|normalUnosuperscript|normalUnosuperprescript|normalUnosubscript|normalUnosubprescript|normalUmiddle|normalUmathvoid|normalUmathvextensiblevariant|normalUmathunderlinevariant|normalUmathunderdelimitervgap|normalUmathunderdelimitervariant|normalUmathunderdelimiterbgap|normalUmathunderbarvgap|normalUmathunderbarrule|normalUmathunderbarkern|normalUmathtopaccentvariant|normalUmathsupsubbottommax|normalUmathsupshiftup|normalUmathsupshiftdrop|normalUmathsuperscriptvariant|normalUmathsupbottommin|normalUmathsubtopmax|normalUmathsubsupvgap|normalUmathsubsupshiftdown|normalUmathsubshiftdrop|normalUmathsubshiftdown|normalUmathsubscriptvariant|normalUmathstackvgap|normalUmathstackvariant|normalUmathstacknumup|normalUmathstackdenomdown|normalUmathspacingmode|normalUmathspacebeforescript|normalUmathspaceafterscript|normalUmathskewedfractionvgap|normalUmathskewedfractionhgap|normalUmathrelrelspacing|normalUmathrelpunctspacing|normalUmathrelordspacing|normalUmathrelopspacing|normalUmathrelopenspacing|normalUmathrelinnerspacing|normalUmathrelclosespacing|normalUmathrelbinspacing|normalUmathradicalvgap|normalUmathradicalvariant|normalUmathradicalrule|normalUmathradicalkern|normalUmathradicaldegreeraise|normalUmathradicaldegreebefore|normalUmathradicaldegreeafter|normalUmathquad|normalUmathpunctrelspacing|normalUmathpunctpunctspacing|normalUmathpunctordspacing|normalUmathpunctopspacing|normalUmathpunctopenspacing|normalUmathpunctinnerspacing|normalUmathpunctclosespacing|normalUmathpunctbinspacing|normalUmathphantom|normalUmathoverlinevariant|normalUmathoverlayaccentvariant|normalUmathoverdelimitervgap|normalUmathoverdelimitervariant|normalUmathoverdelimiterbgap|normalUmathoverbarvgap|normalUmathoverbarrule|normalUmathoverbarkern|normalUmathordrelspacing|normalUmathordpunctspacing|normalUmathordordspacing|normalUmathordopspacing|normalUmathordopenspacing|normalUmathordinnerspacing|normalUmathordclosespacing|normalUmathordbinspacing|normalUmathoprelspacing|normalUmathoppunctspacing|normalUmathopordspacing|normalUmathopopspacing|normalUmathopopenspacing|normalUmathopinnerspacing|normalUmathoperatorsize|normalUmathopenupheight|normalUmathopenupdepth|normalUmathopenrelspacing|normalUmathopenpunctspacing|normalUmathopenordspacing|normalUmathopenopspacing|normalUmathopenopenspacing|normalUmathopeninnerspacing|normalUmathopenclosespacing|normalUmathopenbinspacing|normalUmathopclosespacing|normalUmathopbinspacing|normalUmathnumeratorvariant|normalUmathnolimitsupfactor|normalUmathnolimitsubfactor|normalUmathnolimits|normalUmathnoaxis|normalUmathlimits|normalUmathlimitbelowvgap|normalUmathlimitbelowkern|normalUmathlimitbelowbgap|normalUmathlimitabovevgap|normalUmathlimitabovekern|normalUmathlimitabovebgap|normalUmathinnerrelspacing|normalUmathinnerpunctspacing|normalUmathinnerordspacing|normalUmathinneropspacing|normalUmathinneropenspacing|normalUmathinnerinnerspacing|normalUmathinnerclosespacing|normalUmathinnerbinspacing|normalUmathhextensiblevariant|normalUmathfractionvariant|normalUmathfractionrule|normalUmathfractionnumvgap|normalUmathfractionnumup|normalUmathfractiondenomvgap|normalUmathfractiondenomdown|normalUmathfractiondelsize|normalUmathextrasupshift|normalUmathextrasuppreshift|normalUmathextrasubshift|normalUmathextrasubpreshift|normalUmathdenominatorvariant|normalUmathdelimiterundervariant|normalUmathdelimiterovervariant|normalUmathdegreevariant|normalUmathconnectoroverlapmin|normalUmathcodenum|normalUmathcode|normalUmathcloserelspacing|normalUmathclosepunctspacing|normalUmathcloseordspacing|normalUmathcloseopspacing|normalUmathcloseopenspacing|normalUmathcloseinnerspacing|normalUmathcloseclosespacing|normalUmathclosebinspacing|normalUmathclass|normalUmathcharslot|normalUmathcharnumdef|normalUmathcharnum|normalUmathcharfam|normalUmathchardef|normalUmathcharclass|normalUmathchar|normalUmathbotaccentvariant|normalUmathbinrelspacing|normalUmathbinpunctspacing|normalUmathbinordspacing|normalUmathbinopspacing|normalUmathbinopenspacing|normalUmathbininnerspacing|normalUmathbinclosespacing|normalUmathbinbinspacing|normalUmathaxis|normalUmathadapttoright|normalUmathadapttoleft|normalUmathaccentvariant|normalUmathaccentbaseheight|normalUmathaccent|normalUleft|normalUhextensible|normalUdelimiterunder|normalUdelimiterover|normalUdelimiter|normalUdelcodenum|normalUdelcode|normalUchar|normalUatopwithdelims|normalUatop|normalUabovewithdelims|normalUabove|normalUUskewedwithdelims|normalUUskewed|normalOmegaversion|normalOmegarevision|normalOmegaminorversion|normalAlephversion|normalAlephrevision|normalAlephminorversion|normal |norelax|nonstopmode|nonscript|nolimits|noindent|nohrule|noexpand|noboundary|noaligned|noalign|newlinechar|mutoglue|mutable|muskipdef|muskip|multiply|mugluespecdef|muexpr|mskip|moveright|moveleft|month|mkern|middle|message|medmuskip|meaningless|meaningfull|meaning|maxdepth|maxdeadcycles|mathsurroundskip|mathsurroundmode|mathsurround|mathstyle|mathscriptsmode|mathscriptcharmode|mathscriptboxmode|mathscale|mathrulethicknessmode|mathrulesmode|mathrulesfam|mathrel|mathpunct|mathpenaltiesmode|mathord|mathopen|mathop|mathnolimitsmode|mathitalicsmode|mathinner|mathfontcontrol|mathflattenmode|matheqnogapstep|mathdisplayskipmode|mathdirection|mathdelimitersmode|mathcontrolmode|mathcode|mathclose|mathchoice|mathchardef|mathchar|mathbin|mathaccent|marks|mark|luatexversion|luatexrevision|luatexbanner|luafunctioncall|luafunction|luaescapestring|luadef|luacopyinputnodes|luabytecodecall|luabytecode|lpcode|lowercase|lower|looseness|long|localrightbox|localleftbox|localinterlinepenalty|localcontrolled|localcontrol|localbrokenpenalty|lineskiplimit|lineskip|linepenalty|linedirection|limits|lettonothing|letprotected|letfrozen|letcsname|letcharcode|let|leqno|leftskip|leftmarginkern|lefthyphenmin|left|leaders|lccode|lastskip|lastpenalty|lastparcontext|lastnodetype|lastnodesubtype|lastnamedcs|lastlinefit|lastkern|lastchknum|lastchkdim|lastbox|lastarguments|language|kern|jobname|interlinepenalty|interlinepenalties|interactionmode|integerdef|instance|insertwidth|insertuncopy|insertunbox|insertprogress|insertpenalties|insertmultiplier|insertmode|insertlimit|insertheights|insertheight|insertdistance|insertdepth|insertcopy|insertbox|insert|inputlineno|input|initcatcodetable|indent|immutable|immediate|ignorespaces|ignorepars|ignorearguments|ifx|ifvoid|ifvmode|ifvbox|iftrue|iftok|ifrelax|ifpdfprimitive|ifpdfabsnum|ifpdfabsdim|ifparameters|ifparameter|ifodd|ifnumval|ifnumexpression|ifnum|ifmmode|ifmathstyle|ifmathparameter|ifinsert|ifinner|ifincsname|ifhmode|ifhbox|ifhasxtoks|ifhastoks|ifhastok|ifhaschar|iffontchar|ifflags|iffalse|ifempty|ifdimval|ifdimexpression|ifdim|ifdefined|ifcstok|ifcsname|ifcondition|ifcmpnum|ifcmpdim|ifchknum|ifchkdim|ifcat|ifcase|ifboolean|ifarguments|ifabsnum|ifabsdim|if|hyphenpenalty|hyphenchar|hyphenationmode|hyphenationmin|hyphenation|ht|hss|hskip|hsize|hrule|hpack|holdinginserts|hjcode|hfuzz|hfilneg|hfill|hfil|hccode|hbox|hbadness|hangindent|hangafter|halign|gtokspre|gtoksapp|glyphyscale|glyphyoffset|glyphxscale|glyphxoffset|glyphtextscale|glyphstatefield|glyphscriptscriptscale|glyphscriptscale|glyphscriptfield|glyphscale|glyphoptions|glyphdatafield|glyph|gluetomu|gluestretchorder|gluestretch|gluespecdef|glueshrinkorder|glueshrink|glueexpr|globaldefs|global|glettonothing|gletcsname|glet|gleaders|gdefcsname|gdef|futurelet|futureexpandisap|futureexpandis|futureexpand|futuredef|futurecsname|frozen|formatname|fonttextcontrol|fontspecifiedsize|fontspecifiedname|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|escapechar|errorstopmode|errorcontextlines|errmessage|errhelp|eqno|enforced|endsimplegroup|endlocalcontrol|endlinechar|endinput|endgroup|endcsname|end|emergencystretch|else|efcode|edefcsname|edef|dump|dp|doublehyphendemerits|divide|displaywidth|displaywidowpenalty|displaywidowpenalties|displaystyle|displaylimits|displayindent|discretionary|directlua|dimexpression|dimexpr|dimensiondef|dimendef|dimen|detokenize|delimitershortfall|delimiterfactor|delimiter|delcode|defcsname|defaultskewchar|defaulthyphenchar|def|deadcycles|day|currentmarks|currentiftype|currentiflevel|currentifbranch|currentgrouptype|currentgrouplevel|csstring|csname|crcr|crampedtextstyle|crampedscriptstyle|crampedscriptscriptstyle|crampeddisplaystyle|cr|countdef|count|copy|clubpenalty|clubpenalties|clearmarks|cleaders|chardef|char|catcodetable|catcode|brokenpenalty|boxyoffset|boxymove|boxxoffset|boxxmove|boxtotal|boxorientation|boxmaxdepth|boxdirection|boxattribute|box|boundary|botmarks|botmark|binoppenalty|belowdisplayskip|belowdisplayshortskip|beginsimplegroup|beginlocalcontrol|begingroup|begincsname|batchmode|baselineskip|badness|autoparagraphmode|automigrationmode|automatichyphenpenalty|automaticdiscretionary|attributedef|attribute|atopwithdelims|atop|atendofgrouped|atendofgroup|aligntab|alignmark|aligncontent|aliased|aftergrouped|aftergroup|afterassignment|afterassigned|advance|adjustspacingstretch|adjustspacingstep|adjustspacingshrink|adjustspacing|adjdemerits|accent|abovewithdelims|abovedisplayskip|abovedisplayshortskip|above|XeTeXversion|Uvextensible|Uunderdelimiter|Usuperscript|Usuperprescript|Usubscript|Usubprescript|Ustyle|Ustopmath|Ustopdisplaymath|Ustartmath|Ustartdisplaymath|Ustack|Uskewedwithdelims|Uskewed|Uroot|Uright|Uradical|Uoverwithdelims|Uoverdelimiter|Uover|Unosuperscript|Unosuperprescript|Unosubscript|Unosubprescript|Umiddle|Umathvoid|Umathvextensiblevariant|Umathunderlinevariant|Umathunderdelimitervgap|Umathunderdelimitervariant|Umathunderdelimiterbgap|Umathunderbarvgap|Umathunderbarrule|Umathunderbarkern|Umathtopaccentvariant|Umathsupsubbottommax|Umathsupshiftup|Umathsupshiftdrop|Umathsuperscriptvariant|Umathsupbottommin|Umathsubtopmax|Umathsubsupvgap|Umathsubsupshiftdown|Umathsubshiftdrop|Umathsubshiftdown|Umathsubscriptvariant|Umathstackvgap|Umathstackvariant|Umathstacknumup|Umathstackdenomdown|Umathspacingmode|Umathspacebeforescript|Umathspaceafterscript|Umathskewedfractionvgap|Umathskewedfractionhgap|Umathrelrelspacing|Umathrelpunctspacing|Umathrelordspacing|Umathrelopspacing|Umathrelopenspacing|Umathrelinnerspacing|Umathrelclosespacing|Umathrelbinspacing|Umathradicalvgap|Umathradicalvariant|Umathradicalrule|Umathradicalkern|Umathradicaldegreeraise|Umathradicaldegreebefore|Umathradicaldegreeafter|Umathquad|Umathpunctrelspacing|Umathpunctpunctspacing|Umathpunctordspacing|Umathpunctopspacing|Umathpunctopenspacing|Umathpunctinnerspacing|Umathpunctclosespacing|Umathpunctbinspacing|Umathphantom|Umathoverlinevariant|Umathoverlayaccentvariant|Umathoverdelimitervgap|Umathoverdelimitervariant|Umathoverdelimiterbgap|Umathoverbarvgap|Umathoverbarrule|Umathoverbarkern|Umathordrelspacing|Umathordpunctspacing|Umathordordspacing|Umathordopspacing|Umathordopenspacing|Umathordinnerspacing|Umathordclosespacing|Umathordbinspacing|Umathoprelspacing|Umathoppunctspacing|Umathopordspacing|Umathopopspacing|Umathopopenspacing|Umathopinnerspacing|Umathoperatorsize|Umathopenupheight|Umathopenupdepth|Umathopenrelspacing|Umathopenpunctspacing|Umathopenordspacing|Umathopenopspacing|Umathopenopenspacing|Umathopeninnerspacing|Umathopenclosespacing|Umathopenbinspacing|Umathopclosespacing|Umathopbinspacing|Umathnumeratorvariant|Umathnolimitsupfactor|Umathnolimitsubfactor|Umathnolimits|Umathnoaxis|Umathlimits|Umathlimitbelowvgap|Umathlimitbelowkern|Umathlimitbelowbgap|Umathlimitabovevgap|Umathlimitabovekern|Umathlimitabovebgap|Umathinnerrelspacing|Umathinnerpunctspacing|Umathinnerordspacing|Umathinneropspacing|Umathinneropenspacing|Umathinnerinnerspacing|Umathinnerclosespacing|Umathinnerbinspacing|Umathhextensiblevariant|Umathfractionvariant|Umathfractionrule|Umathfractionnumvgap|Umathfractionnumup|Umathfractiondenomvgap|Umathfractiondenomdown|Umathfractiondelsize|Umathextrasupshift|Umathextrasuppreshift|Umathextrasubshift|Umathextrasubpreshift|Umathdenominatorvariant|Umathdelimiterundervariant|Umathdelimiterovervariant|Umathdegreevariant|Umathconnectoroverlapmin|Umathcodenum|Umathcode|Umathcloserelspacing|Umathclosepunctspacing|Umathcloseordspacing|Umathcloseopspacing|Umathcloseopenspacing|Umathcloseinnerspacing|Umathcloseclosespacing|Umathclosebinspacing|Umathclass|Umathcharslot|Umathcharnumdef|Umathcharnum|Umathcharfam|Umathchardef|Umathcharclass|Umathchar|Umathbotaccentvariant|Umathbinrelspacing|Umathbinpunctspacing|Umathbinordspacing|Umathbinopspacing|Umathbinopenspacing|Umathbininnerspacing|Umathbinclosespacing|Umathbinbinspacing|Umathaxis|Umathadapttoright|Umathadapttoleft|Umathaccentvariant|Umathaccentbaseheight|Umathaccent|Uleft|Uhextensible|Udelimiterunder|Udelimiterover|Udelimiter|Udelcodenum|Udelcode|Uchar|Uatopwithdelims|Uatop|Uabovewithdelims|Uabove|UUskewedwithdelims|UUskewed|Omegaversion|Omegarevision|Omegaminorversion|Alephversion|Alephrevision|Alephminorversion| )(?=[^a-zA-Z])", + "match" : "\u005C\u005C(year|xtokspre|xtoksapp|xspaceskip|xleaders|xdefcsname|xdef|wrapuppar|wordboundary|widowpenalty|widowpenalties|wd|vtop|vss|vsplit|vskip|vsize|vrule|vpack|vfuzz|vfilneg|vfill|vfil|vcenter|vbox|vbadness|valign|vadjust|uppercase|unvpack|unvcopy|unvbox|untraced|unskip|unpenalty|unletprotected|unletfrozen|unless|unkern|unhpack|unhcopy|unhbox|underline|undent|uchyph|uccode|tracingstats|tracingrestores|tracingparagraphs|tracingpages|tracingoutput|tracingonline|tracingnesting|tracingmath|tracingmarks|tracingmacros|tracinglostchars|tracinglevels|tracinginserts|tracingifs|tracinghyphenation|tracinggroups|tracingfonts|tracingexpressions|tracingcommands|tracingassigns|tracingalignments|tpack|toscaled|topskip|topmarks|topmark|tolerant|tolerance|tokspre|toksdef|toksapp|toks|tokenized|tointeger|todimension|time|thinmuskip|thickmuskip|thewithoutunit|the|textstyle|textfont|textdirection|tabskip|tabsize|swapcsvalues|supmarkmode|string|splittopskip|splitmaxdepth|splitfirstmarks|splitfirstmark|splitdiscards|splitbotmarks|splitbotmark|span|spaceskip|spacefactor|snapshotpar|skipdef|skip|skewchar|showtokens|showthe|shownodedetails|showlists|showifs|showgroups|showboxdepth|showboxbreadth|showbox|show|shipout|sfcode|setlanguage|setfontid|setbox|semiprotected|semiexpanded|scrollmode|scriptstyle|scriptspace|scriptscriptstyle|scriptscriptfont|scriptfont|scantokens|scantextokens|scaledfontdimen|savingvdiscards|savinghyphcodes|savecatcodetable|rpcode|romannumeral|rightskip|rightmarginkern|righthyphenmin|right|retokenized|relpenalty|relax|raise|radical|quitvmode|pxdimen|protrusionboundary|protrudechars|protected|prevgraf|prevdepth|pretolerance|prerelpenalty|prehyphenchar|preexhyphenchar|predisplaysize|predisplaypenalty|predisplaygapfactor|predisplaydirection|prebinoppenalty|posthyphenchar|postexhyphenchar|postdisplaypenalty|permanent|penalty|pdfximage|pdfxformresources|pdfxformname|pdfxformmargin|pdfxformattr|pdfxform|pdfvorigin|pdfuniqueresname|pdfuniformdeviate|pdftrailerid|pdftrailer|pdftracingfonts|pdfthreadmargin|pdfthread|pdftexversion|pdftexrevision|pdftexbanner|pdfsuppressptexinfo|pdfsuppressoptionalinfo|pdfstartthread|pdfstartlink|pdfsetrandomseed|pdfsetmatrix|pdfsavepos|pdfsave|pdfretval|pdfrestore|pdfreplacefont|pdfrefximage|pdfrefxform|pdfrefobj|pdfrecompress|pdfrandomseed|pdfpxdimen|pdfprotrudechars|pdfprimitive|pdfpkresolution|pdfpkmode|pdfpkfixeddpi|pdfpagewidth|pdfpagesattr|pdfpageresources|pdfpageref|pdfpageheight|pdfpagebox|pdfpageattr|pdfoutput|pdfoutline|pdfomitcidset|pdfomitcharset|pdfobjcompresslevel|pdfobj|pdfnormaldeviate|pdfnoligatures|pdfnames|pdfminorversion|pdfmapline|pdfmapfile|pdfmajorversion|pdfliteral|pdflinkmargin|pdflastypos|pdflastxpos|pdflastximagepages|pdflastximage|pdflastxform|pdflastobj|pdflastlink|pdflastlinedepth|pdflastannot|pdfinsertht|pdfinfoomitdate|pdfinfo|pdfinclusionerrorlevel|pdfinclusioncopyfonts|pdfincludechars|pdfimageresolution|pdfimagehicolor|pdfimagegamma|pdfimageapplygamma|pdfimageaddfilename|pdfignoreunknownimages|pdfignoreddimen|pdfhorigin|pdfglyphtounicode|pdfgentounicode|pdfgamma|pdffontsize|pdffontobjnum|pdffontname|pdffontexpand|pdffontattr|pdffirstlineheight|pdfendthread|pdfendlink|pdfeachlineheight|pdfeachlinedepth|pdfdraftmode|pdfdestmargin|pdfdest|pdfdecimaldigits|pdfcreationdate|pdfcopyfont|pdfcompresslevel|pdfcolorstackinit|pdfcolorstack|pdfcatalog|pdfannot|pdfadjustspacing|pausing|patterns|parskip|parshapelength|parshapeindent|parshapedimen|parshape|parindent|parfillskip|pardirection|parattribute|parametermark|parametercount|par|pagevsize|pagetotal|pagestretch|pageshrink|pagegoal|pagefilstretch|pagefillstretch|pagefilllstretch|pagediscards|pagedepth|overwithdelims|overshoot|overloadmode|overloaded|overline|overfullrule|over|outputpenalty|outputbox|output|outer|orunless|orelse|or|omit|numexpression|numexpr|numericscale|number|nullfont|nulldelimiterspace|novrule|nospaces|normalyear|normalxtokspre|normalxtoksapp|normalxspaceskip|normalxleaders|normalxdefcsname|normalxdef|normalwrapuppar|normalwordboundary|normalwidowpenalty|normalwidowpenalties|normalwd|normalvtop|normalvss|normalvsplit|normalvskip|normalvsize|normalvrule|normalvpack|normalvfuzz|normalvfilneg|normalvfill|normalvfil|normalvcenter|normalvbox|normalvbadness|normalvalign|normalvadjust|normaluppercase|normalunvpack|normalunvcopy|normalunvbox|normaluntraced|normalunskip|normalunpenalty|normalunletprotected|normalunletfrozen|normalunless|normalunkern|normalunhpack|normalunhcopy|normalunhbox|normalunexpanded|normalunderline|normalundent|normaluchyph|normaluccode|normaltracingstats|normaltracingrestores|normaltracingparagraphs|normaltracingpages|normaltracingoutput|normaltracingonline|normaltracingnesting|normaltracingmath|normaltracingmarks|normaltracingmacros|normaltracinglostchars|normaltracinglevels|normaltracinginserts|normaltracingifs|normaltracinghyphenation|normaltracinggroups|normaltracingfonts|normaltracingexpressions|normaltracingcommands|normaltracingassigns|normaltracingalignments|normaltpack|normaltoscaled|normaltopskip|normaltopmarks|normaltopmark|normaltolerant|normaltolerance|normaltokspre|normaltoksdef|normaltoksapp|normaltoks|normaltokenized|normaltointeger|normaltodimension|normaltime|normalthinmuskip|normalthickmuskip|normalthewithoutunit|normalthe|normaltextstyle|normaltextfont|normaltextdirection|normaltabskip|normaltabsize|normalswapcsvalues|normalsupmarkmode|normalstring|normalsplittopskip|normalsplitmaxdepth|normalsplitfirstmarks|normalsplitfirstmark|normalsplitdiscards|normalsplitbotmarks|normalsplitbotmark|normalspan|normalspaceskip|normalspacefactor|normalsnapshotpar|normalskipdef|normalskip|normalskewchar|normalshowtokens|normalshowthe|normalshownodedetails|normalshowlists|normalshowifs|normalshowgroups|normalshowboxdepth|normalshowboxbreadth|normalshowbox|normalshow|normalshipout|normalsfcode|normalsetlanguage|normalsetfontid|normalsetbox|normalsemiprotected|normalsemiexpanded|normalscrollmode|normalscriptstyle|normalscriptspace|normalscriptscriptstyle|normalscriptscriptfont|normalscriptfont|normalscantokens|normalscantextokens|normalscaledfontdimen|normalsavingvdiscards|normalsavinghyphcodes|normalsavecatcodetable|normalrpcode|normalromannumeral|normalrightskip|normalrightmarginkern|normalrighthyphenmin|normalright|normalretokenized|normalrelpenalty|normalrelax|normalraise|normalradical|normalquitvmode|normalpxdimen|normalprotrusionboundary|normalprotrudechars|normalprotected|normalprevgraf|normalprevdepth|normalpretolerance|normalprerelpenalty|normalprehyphenchar|normalpreexhyphenchar|normalpredisplaysize|normalpredisplaypenalty|normalpredisplaygapfactor|normalpredisplaydirection|normalprebinoppenalty|normalposthyphenchar|normalpostexhyphenchar|normalpostdisplaypenalty|normalpermanent|normalpenalty|normalpdfximage|normalpdfxformresources|normalpdfxformname|normalpdfxformmargin|normalpdfxformattr|normalpdfxform|normalpdfvorigin|normalpdfuniqueresname|normalpdfuniformdeviate|normalpdftrailerid|normalpdftrailer|normalpdftracingfonts|normalpdfthreadmargin|normalpdfthread|normalpdftexversion|normalpdftexrevision|normalpdftexbanner|normalpdfsuppressptexinfo|normalpdfsuppressoptionalinfo|normalpdfstartthread|normalpdfstartlink|normalpdfsetrandomseed|normalpdfsetmatrix|normalpdfsavepos|normalpdfsave|normalpdfretval|normalpdfrestore|normalpdfreplacefont|normalpdfrefximage|normalpdfrefxform|normalpdfrefobj|normalpdfrecompress|normalpdfrandomseed|normalpdfpxdimen|normalpdfprotrudechars|normalpdfprimitive|normalpdfpkresolution|normalpdfpkmode|normalpdfpkfixeddpi|normalpdfpagewidth|normalpdfpagesattr|normalpdfpageresources|normalpdfpageref|normalpdfpageheight|normalpdfpagebox|normalpdfpageattr|normalpdfoutput|normalpdfoutline|normalpdfomitcidset|normalpdfomitcharset|normalpdfobjcompresslevel|normalpdfobj|normalpdfnormaldeviate|normalpdfnoligatures|normalpdfnames|normalpdfminorversion|normalpdfmapline|normalpdfmapfile|normalpdfmajorversion|normalpdfliteral|normalpdflinkmargin|normalpdflastypos|normalpdflastxpos|normalpdflastximagepages|normalpdflastximage|normalpdflastxform|normalpdflastobj|normalpdflastlink|normalpdflastlinedepth|normalpdflastannot|normalpdfinsertht|normalpdfinfoomitdate|normalpdfinfo|normalpdfinclusionerrorlevel|normalpdfinclusioncopyfonts|normalpdfincludechars|normalpdfimageresolution|normalpdfimagehicolor|normalpdfimagegamma|normalpdfimageapplygamma|normalpdfimageaddfilename|normalpdfignoreunknownimages|normalpdfignoreddimen|normalpdfhorigin|normalpdfglyphtounicode|normalpdfgentounicode|normalpdfgamma|normalpdffontsize|normalpdffontobjnum|normalpdffontname|normalpdffontexpand|normalpdffontattr|normalpdffirstlineheight|normalpdfendthread|normalpdfendlink|normalpdfeachlineheight|normalpdfeachlinedepth|normalpdfdraftmode|normalpdfdestmargin|normalpdfdest|normalpdfdecimaldigits|normalpdfcreationdate|normalpdfcopyfont|normalpdfcompresslevel|normalpdfcolorstackinit|normalpdfcolorstack|normalpdfcatalog|normalpdfannot|normalpdfadjustspacing|normalpausing|normalpatterns|normalparskip|normalparshapelength|normalparshapeindent|normalparshapedimen|normalparshape|normalparindent|normalparfillskip|normalparfillleftskip|normalpardirection|normalparattribute|normalparametermark|normalparametercount|normalpar|normalpagevsize|normalpagetotal|normalpagestretch|normalpageshrink|normalpagegoal|normalpagefilstretch|normalpagefillstretch|normalpagefilllstretch|normalpagediscards|normalpagedepth|normaloverwithdelims|normalovershoot|normaloverloadmode|normaloverloaded|normaloverline|normaloverfullrule|normalover|normaloutputpenalty|normaloutputbox|normaloutput|normalouter|normalorunless|normalorelse|normalor|normalomit|normalnumexpression|normalnumexpr|normalnumericscale|normalnumber|normalnullfont|normalnulldelimiterspace|normalnovrule|normalnospaces|normalnormalizelinemode|normalnorelax|normalnonstopmode|normalnonscript|normalnolimits|normalnoindent|normalnohrule|normalnoexpand|normalnoboundary|normalnoaligned|normalnoalign|normalnewlinechar|normalmutoglue|normalmutable|normalmuskipdef|normalmuskip|normalmultiply|normalmugluespecdef|normalmuexpr|normalmskip|normalmoveright|normalmoveleft|normalmonth|normalmkern|normalmiddle|normalmessage|normalmedmuskip|normalmeaningless|normalmeaningfull|normalmeaning|normalmaxdepth|normalmaxdeadcycles|normalmathsurroundskip|normalmathsurroundmode|normalmathsurround|normalmathstyle|normalmathscriptsmode|normalmathscriptcharmode|normalmathscriptboxmode|normalmathscale|normalmathrulethicknessmode|normalmathrulesmode|normalmathrulesfam|normalmathrel|normalmathpunct|normalmathpenaltiesmode|normalmathord|normalmathopen|normalmathop|normalmathnolimitsmode|normalmathitalicsmode|normalmathinner|normalmathfontcontrol|normalmathflattenmode|normalmatheqnogapstep|normalmathdisplayskipmode|normalmathdirection|normalmathdelimitersmode|normalmathcontrolmode|normalmathcode|normalmathclose|normalmathchoice|normalmathchardef|normalmathchar|normalmathbin|normalmathaccent|normalmarks|normalmark|normalluatexversion|normalluatexrevision|normalluatexbanner|normalluafunctioncall|normalluafunction|normalluaescapestring|normalluadef|normalluacopyinputnodes|normalluabytecodecall|normalluabytecode|normallpcode|normallowercase|normallower|normallooseness|normallong|normallocalrightbox|normallocalleftbox|normallocalinterlinepenalty|normallocalcontrolled|normallocalcontrol|normallocalbrokenpenalty|normallineskiplimit|normallineskip|normallinepenalty|normallinedirection|normallimits|normallettonothing|normalletprotected|normalletfrozen|normalletcsname|normalletcharcode|normallet|normalleqno|normalleftskip|normalleftmarginkern|normallefthyphenmin|normalleft|normalleaders|normallccode|normallastskip|normallastpenalty|normallastparcontext|normallastnodetype|normallastnodesubtype|normallastnamedcs|normallastlinefit|normallastkern|normallastchknum|normallastchkdim|normallastbox|normallastarguments|normallanguage|normalkern|normaljobname|normalizelinemode|normalinterlinepenalty|normalinterlinepenalties|normalinteractionmode|normalintegerdef|normalinstance|normalinsertwidth|normalinsertuncopy|normalinsertunbox|normalinsertstoring|normalinsertstorage|normalinsertprogress|normalinsertpenalties|normalinsertmultiplier|normalinsertmode|normalinsertlimit|normalinsertheights|normalinsertheight|normalinsertdistance|normalinsertdepth|normalinsertcopy|normalinsertbox|normalinsert|normalinputlineno|normalinput|normalinitcatcodetable|normalindent|normalimmutable|normalimmediate|normalignorespaces|normalignorepars|normalignorearguments|normalifx|normalifvoid|normalifvmode|normalifvbox|normaliftrue|normaliftok|normalifrelax|normalifpdfprimitive|normalifpdfabsnum|normalifpdfabsdim|normalifparameters|normalifparameter|normalifodd|normalifnumval|normalifnumexpression|normalifnum|normalifmmode|normalifmathstyle|normalifmathparameter|normalifinsert|normalifinner|normalifincsname|normalifhmode|normalifhbox|normalifhasxtoks|normalifhastoks|normalifhastok|normalifhaschar|normaliffontchar|normalifflags|normaliffalse|normalifempty|normalifdimval|normalifdimexpression|normalifdim|normalifdefined|normalifcstok|normalifcsname|normalifcondition|normalifcmpnum|normalifcmpdim|normalifchknum|normalifchkdim|normalifcat|normalifcase|normalifboolean|normalifarguments|normalifabsnum|normalifabsdim|normalif|normalhyphenpenalty|normalhyphenchar|normalhyphenationmode|normalhyphenationmin|normalhyphenation|normalht|normalhss|normalhskip|normalhsize|normalhrule|normalhpack|normalholdinginserts|normalhjcode|normalhfuzz|normalhfilneg|normalhfill|normalhfil|normalhccode|normalhbox|normalhbadness|normalhangindent|normalhangafter|normalhalign|normalgtokspre|normalgtoksapp|normalglyphyscale|normalglyphyoffset|normalglyphxscale|normalglyphxoffset|normalglyphtextscale|normalglyphstatefield|normalglyphscriptscriptscale|normalglyphscriptscale|normalglyphscriptfield|normalglyphscale|normalglyphoptions|normalglyphdatafield|normalglyph|normalgluetomu|normalgluestretchorder|normalgluestretch|normalgluespecdef|normalglueshrinkorder|normalglueshrink|normalglueexpr|normalglobaldefs|normalglobal|normalglettonothing|normalgletcsname|normalglet|normalgleaders|normalgdefcsname|normalgdef|normalfuturelet|normalfutureexpandisap|normalfutureexpandis|normalfutureexpand|normalfuturedef|normalfuturecsname|normalfrozen|normalformatname|normalfonttextcontrol|normalfontspecifiedsize|normalfontspecifiedname|normalfontname|normalfontmathcontrol|normalfontid|normalfontdimen|normalfontcharwd|normalfontcharic|normalfontcharht|normalfontchardp|normalfont|normalflushmarks|normalfloatingpenalty|normalfirstvalidlanguage|normalfirstmarks|normalfirstmark|normalfinalhyphendemerits|normalfi|normalfam|normalexplicithyphenpenalty|normalexplicitdiscretionary|normalexpandtoken|normalexpanded|normalexpandcstoken|normalexpandafterspaces|normalexpandafterpars|normalexpandafter|normalexpand|normalexhyphenpenalty|normalexhyphenchar|normalexceptionpenalty|normaleveryvbox|normaleverytab|normaleverypar|normaleverymath|normaleveryjob|normaleveryhbox|normaleveryeof|normaleverydisplay|normaleverycr|normaleverybeforepar|normaletokspre|normaletoksapp|normalescapechar|normalerrorstopmode|normalerrorcontextlines|normalerrmessage|normalerrhelp|normaleqno|normalenforced|normalendsimplegroup|normalendlocalcontrol|normalendlinechar|normalendinput|normalendgroup|normalendcsname|normalend|normalemergencystretch|normalelse|normalefcode|normaledefcsname|normaledef|normaldump|normaldp|normaldoublehyphendemerits|normaldivide|normaldisplaywidth|normaldisplaywidowpenalty|normaldisplaywidowpenalties|normaldisplaystyle|normaldisplaylimits|normaldisplayindent|normaldiscretionary|normaldirectlua|normaldimexpression|normaldimexpr|normaldimensiondef|normaldimendef|normaldimen|normaldetokenize|normaldelimitershortfall|normaldelimiterfactor|normaldelimiter|normaldelcode|normaldefcsname|normaldefaultskewchar|normaldefaulthyphenchar|normaldef|normaldeadcycles|normalday|normalcurrentmarks|normalcurrentiftype|normalcurrentiflevel|normalcurrentifbranch|normalcurrentgrouptype|normalcurrentgrouplevel|normalcsstring|normalcsname|normalcrcr|normalcrampedtextstyle|normalcrampedscriptstyle|normalcrampedscriptscriptstyle|normalcrampeddisplaystyle|normalcr|normalcountdef|normalcount|normalcopy|normalclubpenalty|normalclubpenalties|normalclearmarks|normalcleaders|normalchardef|normalchar|normalcatcodetable|normalcatcode|normalbrokenpenalty|normalboxyoffset|normalboxymove|normalboxxoffset|normalboxxmove|normalboxtotal|normalboxorientation|normalboxmaxdepth|normalboxdirection|normalboxattribute|normalbox|normalboundary|normalbotmarks|normalbotmark|normalbinoppenalty|normalbelowdisplayskip|normalbelowdisplayshortskip|normalbeginsimplegroup|normalbeginlocalcontrol|normalbegingroup|normalbegincsname|normalbatchmode|normalbaselineskip|normalbadness|normalautoparagraphmode|normalautomigrationmode|normalautomatichyphenpenalty|normalautomaticdiscretionary|normalattributedef|normalattribute|normalatopwithdelims|normalatop|normalatendofgrouped|normalatendofgroup|normalaligntab|normalalignmark|normalaligncontent|normalaliased|normalaftergrouped|normalaftergroup|normalafterassignment|normalafterassigned|normaladvance|normaladjustspacingstretch|normaladjustspacingstep|normaladjustspacingshrink|normaladjustspacing|normaladjdemerits|normalaccent|normalabovewithdelims|normalabovedisplayskip|normalabovedisplayshortskip|normalabove|normalXeTeXversion|normalUvextensible|normalUunderdelimiter|normalUsuperscript|normalUsuperprescript|normalUsubscript|normalUsubprescript|normalUstyle|normalUstopmath|normalUstopdisplaymath|normalUstartmath|normalUstartdisplaymath|normalUstack|normalUskewedwithdelims|normalUskewed|normalUroot|normalUright|normalUradical|normalUoverwithdelims|normalUoverdelimiter|normalUover|normalUnosuperscript|normalUnosuperprescript|normalUnosubscript|normalUnosubprescript|normalUmiddle|normalUmathvoid|normalUmathvextensiblevariant|normalUmathunderlinevariant|normalUmathunderdelimitervgap|normalUmathunderdelimitervariant|normalUmathunderdelimiterbgap|normalUmathunderbarvgap|normalUmathunderbarrule|normalUmathunderbarkern|normalUmathtopaccentvariant|normalUmathsupsubbottommax|normalUmathsupshiftup|normalUmathsupshiftdrop|normalUmathsuperscriptvariant|normalUmathsupbottommin|normalUmathsubtopmax|normalUmathsubsupvgap|normalUmathsubsupshiftdown|normalUmathsubshiftdrop|normalUmathsubshiftdown|normalUmathsubscriptvariant|normalUmathstackvgap|normalUmathstackvariant|normalUmathstacknumup|normalUmathstackdenomdown|normalUmathspacingmode|normalUmathspacebeforescript|normalUmathspaceafterscript|normalUmathskewedfractionvgap|normalUmathskewedfractionhgap|normalUmathrelrelspacing|normalUmathrelpunctspacing|normalUmathrelordspacing|normalUmathrelopspacing|normalUmathrelopenspacing|normalUmathrelinnerspacing|normalUmathrelclosespacing|normalUmathrelbinspacing|normalUmathradicalvgap|normalUmathradicalvariant|normalUmathradicalrule|normalUmathradicalkern|normalUmathradicaldegreeraise|normalUmathradicaldegreebefore|normalUmathradicaldegreeafter|normalUmathquad|normalUmathpunctrelspacing|normalUmathpunctpunctspacing|normalUmathpunctordspacing|normalUmathpunctopspacing|normalUmathpunctopenspacing|normalUmathpunctinnerspacing|normalUmathpunctclosespacing|normalUmathpunctbinspacing|normalUmathphantom|normalUmathoverlinevariant|normalUmathoverlayaccentvariant|normalUmathoverdelimitervgap|normalUmathoverdelimitervariant|normalUmathoverdelimiterbgap|normalUmathoverbarvgap|normalUmathoverbarrule|normalUmathoverbarkern|normalUmathordrelspacing|normalUmathordpunctspacing|normalUmathordordspacing|normalUmathordopspacing|normalUmathordopenspacing|normalUmathordinnerspacing|normalUmathordclosespacing|normalUmathordbinspacing|normalUmathoprelspacing|normalUmathoppunctspacing|normalUmathopordspacing|normalUmathopopspacing|normalUmathopopenspacing|normalUmathopinnerspacing|normalUmathoperatorsize|normalUmathopenupheight|normalUmathopenupdepth|normalUmathopenrelspacing|normalUmathopenpunctspacing|normalUmathopenordspacing|normalUmathopenopspacing|normalUmathopenopenspacing|normalUmathopeninnerspacing|normalUmathopenclosespacing|normalUmathopenbinspacing|normalUmathopclosespacing|normalUmathopbinspacing|normalUmathnumeratorvariant|normalUmathnolimitsupfactor|normalUmathnolimitsubfactor|normalUmathnolimits|normalUmathnoaxis|normalUmathlimits|normalUmathlimitbelowvgap|normalUmathlimitbelowkern|normalUmathlimitbelowbgap|normalUmathlimitabovevgap|normalUmathlimitabovekern|normalUmathlimitabovebgap|normalUmathinnerrelspacing|normalUmathinnerpunctspacing|normalUmathinnerordspacing|normalUmathinneropspacing|normalUmathinneropenspacing|normalUmathinnerinnerspacing|normalUmathinnerclosespacing|normalUmathinnerbinspacing|normalUmathhextensiblevariant|normalUmathfractionvariant|normalUmathfractionrule|normalUmathfractionnumvgap|normalUmathfractionnumup|normalUmathfractiondenomvgap|normalUmathfractiondenomdown|normalUmathfractiondelsize|normalUmathextrasupshift|normalUmathextrasuppreshift|normalUmathextrasubshift|normalUmathextrasubpreshift|normalUmathdenominatorvariant|normalUmathdelimiterundervariant|normalUmathdelimiterovervariant|normalUmathdegreevariant|normalUmathconnectoroverlapmin|normalUmathcodenum|normalUmathcode|normalUmathcloserelspacing|normalUmathclosepunctspacing|normalUmathcloseordspacing|normalUmathcloseopspacing|normalUmathcloseopenspacing|normalUmathcloseinnerspacing|normalUmathcloseclosespacing|normalUmathclosebinspacing|normalUmathclass|normalUmathcharslot|normalUmathcharnumdef|normalUmathcharnum|normalUmathcharfam|normalUmathchardef|normalUmathcharclass|normalUmathchar|normalUmathbotaccentvariant|normalUmathbinrelspacing|normalUmathbinpunctspacing|normalUmathbinordspacing|normalUmathbinopspacing|normalUmathbinopenspacing|normalUmathbininnerspacing|normalUmathbinclosespacing|normalUmathbinbinspacing|normalUmathaxis|normalUmathadapttoright|normalUmathadapttoleft|normalUmathaccentvariant|normalUmathaccentbaseheight|normalUmathaccent|normalUleft|normalUhextensible|normalUdelimiterunder|normalUdelimiterover|normalUdelimiter|normalUdelcodenum|normalUdelcode|normalUchar|normalUatopwithdelims|normalUatop|normalUabovewithdelims|normalUabove|normalUUskewedwithdelims|normalUUskewed|normalOmegaversion|normalOmegarevision|normalOmegaminorversion|normalAlephversion|normalAlephrevision|normalAlephminorversion|normal |norelax|nonstopmode|nonscript|nolimits|noindent|nohrule|noexpand|noboundary|noaligned|noalign|newlinechar|mutoglue|mutable|muskipdef|muskip|multiply|mugluespecdef|muexpr|mskip|moveright|moveleft|month|mkern|middle|message|medmuskip|meaningless|meaningfull|meaning|maxdepth|maxdeadcycles|mathsurroundskip|mathsurroundmode|mathsurround|mathstyle|mathscriptsmode|mathscriptcharmode|mathscriptboxmode|mathscale|mathrulethicknessmode|mathrulesmode|mathrulesfam|mathrel|mathpunct|mathpenaltiesmode|mathord|mathopen|mathop|mathnolimitsmode|mathitalicsmode|mathinner|mathfontcontrol|mathflattenmode|matheqnogapstep|mathdisplayskipmode|mathdirection|mathdelimitersmode|mathcontrolmode|mathcode|mathclose|mathchoice|mathchardef|mathchar|mathbin|mathaccent|marks|mark|luatexversion|luatexrevision|luatexbanner|luafunctioncall|luafunction|luaescapestring|luadef|luacopyinputnodes|luabytecodecall|luabytecode|lpcode|lowercase|lower|looseness|long|localrightbox|localleftbox|localinterlinepenalty|localcontrolled|localcontrol|localbrokenpenalty|lineskiplimit|lineskip|linepenalty|linedirection|limits|lettonothing|letprotected|letfrozen|letcsname|letcharcode|let|leqno|leftskip|leftmarginkern|lefthyphenmin|left|leaders|lccode|lastskip|lastpenalty|lastparcontext|lastnodetype|lastnodesubtype|lastnamedcs|lastlinefit|lastkern|lastchknum|lastchkdim|lastbox|lastarguments|language|kern|jobname|interlinepenalty|interlinepenalties|interactionmode|integerdef|instance|insertwidth|insertuncopy|insertunbox|insertstoring|insertstorage|insertprogress|insertpenalties|insertmultiplier|insertmode|insertlimit|insertheights|insertheight|insertdistance|insertdepth|insertcopy|insertbox|insert|inputlineno|input|initcatcodetable|indent|immutable|immediate|ignorespaces|ignorepars|ignorearguments|ifx|ifvoid|ifvmode|ifvbox|iftrue|iftok|ifrelax|ifpdfprimitive|ifpdfabsnum|ifpdfabsdim|ifparameters|ifparameter|ifodd|ifnumval|ifnumexpression|ifnum|ifmmode|ifmathstyle|ifmathparameter|ifinsert|ifinner|ifincsname|ifhmode|ifhbox|ifhasxtoks|ifhastoks|ifhastok|ifhaschar|iffontchar|ifflags|iffalse|ifempty|ifdimval|ifdimexpression|ifdim|ifdefined|ifcstok|ifcsname|ifcondition|ifcmpnum|ifcmpdim|ifchknum|ifchkdim|ifcat|ifcase|ifboolean|ifarguments|ifabsnum|ifabsdim|if|hyphenpenalty|hyphenchar|hyphenationmode|hyphenationmin|hyphenation|ht|hss|hskip|hsize|hrule|hpack|holdinginserts|hjcode|hfuzz|hfilneg|hfill|hfil|hccode|hbox|hbadness|hangindent|hangafter|halign|gtokspre|gtoksapp|glyphyscale|glyphyoffset|glyphxscale|glyphxoffset|glyphtextscale|glyphstatefield|glyphscriptscriptscale|glyphscriptscale|glyphscriptfield|glyphscale|glyphoptions|glyphdatafield|glyph|gluetomu|gluestretchorder|gluestretch|gluespecdef|glueshrinkorder|glueshrink|glueexpr|globaldefs|global|glettonothing|gletcsname|glet|gleaders|gdefcsname|gdef|futurelet|futureexpandisap|futureexpandis|futureexpand|futuredef|futurecsname|frozen|formatname|fonttextcontrol|fontspecifiedsize|fontspecifiedname|fontname|fontmathcontrol|fontid|fontdimen|fontcharwd|fontcharic|fontcharht|fontchardp|font|flushmarks|floatingpenalty|firstvalidlanguage|firstmarks|firstmark|finalhyphendemerits|fi|fam|explicithyphenpenalty|explicitdiscretionary|expandtoken|expandcstoken|expandafterspaces|expandafterpars|expandafter|expand|exhyphenpenalty|exhyphenchar|exceptionpenalty|everyvbox|everytab|everypar|everymath|everyjob|everyhbox|everyeof|everydisplay|everycr|everybeforepar|etokspre|etoksapp|escapechar|errorstopmode|errorcontextlines|errmessage|errhelp|eqno|enforced|endsimplegroup|endlocalcontrol|endlinechar|endinput|endgroup|endcsname|end|emergencystretch|else|efcode|edefcsname|edef|dump|dp|doublehyphendemerits|divide|displaywidth|displaywidowpenalty|displaywidowpenalties|displaystyle|displaylimits|displayindent|discretionary|directlua|dimexpression|dimexpr|dimensiondef|dimendef|dimen|detokenize|delimitershortfall|delimiterfactor|delimiter|delcode|defcsname|defaultskewchar|defaulthyphenchar|def|deadcycles|day|currentmarks|currentiftype|currentiflevel|currentifbranch|currentgrouptype|currentgrouplevel|csstring|csname|crcr|crampedtextstyle|crampedscriptstyle|crampedscriptscriptstyle|crampeddisplaystyle|cr|countdef|count|copy|clubpenalty|clubpenalties|clearmarks|cleaders|chardef|char|catcodetable|catcode|brokenpenalty|boxyoffset|boxymove|boxxoffset|boxxmove|boxtotal|boxorientation|boxmaxdepth|boxdirection|boxattribute|box|boundary|botmarks|botmark|binoppenalty|belowdisplayskip|belowdisplayshortskip|beginsimplegroup|beginlocalcontrol|begingroup|begincsname|batchmode|baselineskip|badness|autoparagraphmode|automigrationmode|automatichyphenpenalty|automaticdiscretionary|attributedef|attribute|atopwithdelims|atop|atendofgrouped|atendofgroup|aligntab|alignmark|aligncontent|aliased|aftergrouped|aftergroup|afterassignment|afterassigned|advance|adjustspacingstretch|adjustspacingstep|adjustspacingshrink|adjustspacing|adjdemerits|accent|abovewithdelims|abovedisplayskip|abovedisplayshortskip|above|XeTeXversion|Uvextensible|Uunderdelimiter|Usuperscript|Usuperprescript|Usubscript|Usubprescript|Ustyle|Ustopmath|Ustopdisplaymath|Ustartmath|Ustartdisplaymath|Ustack|Uskewedwithdelims|Uskewed|Uroot|Uright|Uradical|Uoverwithdelims|Uoverdelimiter|Uover|Unosuperscript|Unosuperprescript|Unosubscript|Unosubprescript|Umiddle|Umathvoid|Umathvextensiblevariant|Umathunderlinevariant|Umathunderdelimitervgap|Umathunderdelimitervariant|Umathunderdelimiterbgap|Umathunderbarvgap|Umathunderbarrule|Umathunderbarkern|Umathtopaccentvariant|Umathsupsubbottommax|Umathsupshiftup|Umathsupshiftdrop|Umathsuperscriptvariant|Umathsupbottommin|Umathsubtopmax|Umathsubsupvgap|Umathsubsupshiftdown|Umathsubshiftdrop|Umathsubshiftdown|Umathsubscriptvariant|Umathstackvgap|Umathstackvariant|Umathstacknumup|Umathstackdenomdown|Umathspacingmode|Umathspacebeforescript|Umathspaceafterscript|Umathskewedfractionvgap|Umathskewedfractionhgap|Umathrelrelspacing|Umathrelpunctspacing|Umathrelordspacing|Umathrelopspacing|Umathrelopenspacing|Umathrelinnerspacing|Umathrelclosespacing|Umathrelbinspacing|Umathradicalvgap|Umathradicalvariant|Umathradicalrule|Umathradicalkern|Umathradicaldegreeraise|Umathradicaldegreebefore|Umathradicaldegreeafter|Umathquad|Umathpunctrelspacing|Umathpunctpunctspacing|Umathpunctordspacing|Umathpunctopspacing|Umathpunctopenspacing|Umathpunctinnerspacing|Umathpunctclosespacing|Umathpunctbinspacing|Umathphantom|Umathoverlinevariant|Umathoverlayaccentvariant|Umathoverdelimitervgap|Umathoverdelimitervariant|Umathoverdelimiterbgap|Umathoverbarvgap|Umathoverbarrule|Umathoverbarkern|Umathordrelspacing|Umathordpunctspacing|Umathordordspacing|Umathordopspacing|Umathordopenspacing|Umathordinnerspacing|Umathordclosespacing|Umathordbinspacing|Umathoprelspacing|Umathoppunctspacing|Umathopordspacing|Umathopopspacing|Umathopopenspacing|Umathopinnerspacing|Umathoperatorsize|Umathopenupheight|Umathopenupdepth|Umathopenrelspacing|Umathopenpunctspacing|Umathopenordspacing|Umathopenopspacing|Umathopenopenspacing|Umathopeninnerspacing|Umathopenclosespacing|Umathopenbinspacing|Umathopclosespacing|Umathopbinspacing|Umathnumeratorvariant|Umathnolimitsupfactor|Umathnolimitsubfactor|Umathnolimits|Umathnoaxis|Umathlimits|Umathlimitbelowvgap|Umathlimitbelowkern|Umathlimitbelowbgap|Umathlimitabovevgap|Umathlimitabovekern|Umathlimitabovebgap|Umathinnerrelspacing|Umathinnerpunctspacing|Umathinnerordspacing|Umathinneropspacing|Umathinneropenspacing|Umathinnerinnerspacing|Umathinnerclosespacing|Umathinnerbinspacing|Umathhextensiblevariant|Umathfractionvariant|Umathfractionrule|Umathfractionnumvgap|Umathfractionnumup|Umathfractiondenomvgap|Umathfractiondenomdown|Umathfractiondelsize|Umathextrasupshift|Umathextrasuppreshift|Umathextrasubshift|Umathextrasubpreshift|Umathdenominatorvariant|Umathdelimiterundervariant|Umathdelimiterovervariant|Umathdegreevariant|Umathconnectoroverlapmin|Umathcodenum|Umathcode|Umathcloserelspacing|Umathclosepunctspacing|Umathcloseordspacing|Umathcloseopspacing|Umathcloseopenspacing|Umathcloseinnerspacing|Umathcloseclosespacing|Umathclosebinspacing|Umathclass|Umathcharslot|Umathcharnumdef|Umathcharnum|Umathcharfam|Umathchardef|Umathcharclass|Umathchar|Umathbotaccentvariant|Umathbinrelspacing|Umathbinpunctspacing|Umathbinordspacing|Umathbinopspacing|Umathbinopenspacing|Umathbininnerspacing|Umathbinclosespacing|Umathbinbinspacing|Umathaxis|Umathadapttoright|Umathadapttoleft|Umathaccentvariant|Umathaccentbaseheight|Umathaccent|Uleft|Uhextensible|Udelimiterunder|Udelimiterover|Udelimiter|Udelcodenum|Udelcode|Uchar|Uatopwithdelims|Uatop|Uabovewithdelims|Uabove|UUskewedwithdelims|UUskewed|Omegaversion|Omegarevision|Omegaminorversion|Alephversion|Alephrevision|Alephminorversion| )(?=[^a-zA-Z])", "name" : "context.primitive.commands.primitive.tex" }, "reserved" : { diff --git a/doc/context/documents/general/manuals/lowlevel-alignments.pdf b/doc/context/documents/general/manuals/lowlevel-alignments.pdf index bbd187dfb..abeebfee9 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-alignments.pdf and b/doc/context/documents/general/manuals/lowlevel-alignments.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-boxes.pdf b/doc/context/documents/general/manuals/lowlevel-boxes.pdf index 0ee0f66a1..f0da0d506 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-boxes.pdf and b/doc/context/documents/general/manuals/lowlevel-boxes.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-characters.pdf b/doc/context/documents/general/manuals/lowlevel-characters.pdf index e3e130630..13867666b 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-characters.pdf and b/doc/context/documents/general/manuals/lowlevel-characters.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-conditionals.pdf b/doc/context/documents/general/manuals/lowlevel-conditionals.pdf index 6de0090b3..251ccc758 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-conditionals.pdf and b/doc/context/documents/general/manuals/lowlevel-conditionals.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-expansion.pdf b/doc/context/documents/general/manuals/lowlevel-expansion.pdf index 6f50c6d22..d9f2528bc 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-expansion.pdf and b/doc/context/documents/general/manuals/lowlevel-expansion.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-grouping.pdf b/doc/context/documents/general/manuals/lowlevel-grouping.pdf index a8d103236..316edda67 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-grouping.pdf and b/doc/context/documents/general/manuals/lowlevel-grouping.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-inserts.pdf b/doc/context/documents/general/manuals/lowlevel-inserts.pdf new file mode 100644 index 000000000..d305899c1 Binary files /dev/null and b/doc/context/documents/general/manuals/lowlevel-inserts.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-macros.pdf b/doc/context/documents/general/manuals/lowlevel-macros.pdf index 9894d0484..5f89d204f 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-macros.pdf and b/doc/context/documents/general/manuals/lowlevel-macros.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-marks.pdf b/doc/context/documents/general/manuals/lowlevel-marks.pdf index e4f600b5d..a00a7f2ae 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-marks.pdf and b/doc/context/documents/general/manuals/lowlevel-marks.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-paragraphs.pdf b/doc/context/documents/general/manuals/lowlevel-paragraphs.pdf index ab46092b2..ad6be78bb 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-paragraphs.pdf and b/doc/context/documents/general/manuals/lowlevel-paragraphs.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-registers.pdf b/doc/context/documents/general/manuals/lowlevel-registers.pdf index d00daa0cc..5c5400ec6 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-registers.pdf and b/doc/context/documents/general/manuals/lowlevel-registers.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-scope.pdf b/doc/context/documents/general/manuals/lowlevel-scope.pdf index 0a17a314c..d5b628396 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-scope.pdf and b/doc/context/documents/general/manuals/lowlevel-scope.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel-security.pdf b/doc/context/documents/general/manuals/lowlevel-security.pdf index b92f00ce3..d4c7d871c 100644 Binary files a/doc/context/documents/general/manuals/lowlevel-security.pdf and b/doc/context/documents/general/manuals/lowlevel-security.pdf differ diff --git a/doc/context/documents/general/manuals/lowlevel.pdf b/doc/context/documents/general/manuals/lowlevel.pdf new file mode 100644 index 000000000..8290f2118 Binary files /dev/null and b/doc/context/documents/general/manuals/lowlevel.pdf differ diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-alignments.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-alignments.tex index bdc7fecf1..79fc86aae 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-alignments.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-alignments.tex @@ -8,7 +8,7 @@ [title=alignments, color=middlegreen] -\startsection[title=Introduction] +\startsectionlevel[title=Introduction] \TEX\ has a couple of subsystems and alignments is one of them. This mechanism is used to construct tables or alike. Because alignments use low level primitives to @@ -115,9 +115,9 @@ that relates to a parameter and alignment tab (and in \CONTEXT\ that is not the case). The \TEX book has plenty alignment examples so if you really want to learn about them, consult that must|-|have|-|book. -\stopsection +\stopsectionlevel -\startsection[title=Between the lines] +\startsectionlevel[title=Between the lines] The individual rows of a horizontal alignment are treated as lines. This means that, as we see in the previous section, the interline spacing is okay. However, that also @@ -240,9 +240,9 @@ there. A third overhaul of the code actually did lead to some adaptations in the way alignments are constructed so let's move on to that. -\stopsection +\stopsectionlevel -\startsection[title={Pre-, inter- and post-tab skips}] +\startsectionlevel[title={Pre-, inter- and post-tab skips}] The basic structure of a preamble and row is actually not that complex: it is a mix of tab skip glue and cells (that are just boxes): @@ -372,9 +372,9 @@ skips and it triggers a check later on when the rows are constructed. The \type {} is what get injected in the cell (represented by \type {\alignmark}). The pseudo primitives are internal and not public. -\stopsection +\stopsectionlevel -\startsection[title={Cell widths}] +\startsectionlevel[title={Cell widths}] Imagine this: @@ -428,9 +428,9 @@ So, both the sparse skip and new \type {\tabsize} feature help to make these extreme tables (spanning hundreds of pages) not consume irrelevant memory and also make that later on we don't have to consult useless nodes. -\stopsection +\stopsectionlevel -\startsection[title=Plugins] +\startsectionlevel[title=Plugins] Yet another \LUAMETATEX\ extension is a callback that kicks in between the preamble preroll and finalizing the alignment. Initially as test and @@ -556,9 +556,9 @@ instead?} As always with such mechanisms, the question is \quotation {Where to stop?} But it makes for nice demos and as long as little code is needed it doesn't hurt. -\stopsection +\stopsectionlevel -\startsection[title=Pitfalls and tricks] +\startsectionlevel[title=Pitfalls and tricks] The next example mixes bidirectional typesetting. It might look weird at first sight but the result conforms to what we discussed in previous paragraphs. @@ -679,9 +679,9 @@ that it's a lot of work but by providing a set of helpers like here might change that a bit. Keep in mind that much of the above is not new in the sense that we could not achieve the same already, it's just a bit programmer friendly. -\stopsection +\stopsectionlevel -\startsection[title=Remark] +\startsectionlevel[title=Remark] It can be that the way alignments are interfaced with respect to attributes is a bit different between \LUATEX\ and \LUAMETATEX\ but because the former is frozen (in @@ -692,7 +692,7 @@ In principle we can have hooks into the rows for pre and post material but it doesn't really pay of as grouping will still interfere. So for now I decided not to add these. -\stopsection +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-boxes.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-boxes.tex index 8fbd796b4..d5105fc8c 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-boxes.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-boxes.tex @@ -9,7 +9,7 @@ [title=boxes, color=middlered] -\startsection[title=Introduction] +\startsectionlevel[title=Introduction] An average \CONTEXT\ user will not use the low level box primitives but a basic understanding of how \TEX\ works doesn't hurt. In fact, occasionally using a box @@ -23,9 +23,9 @@ about all kind of glues, kerns and penalties, just boxes it is. This explanation will be extended when I feel the need (or users have questions that can be answered here). -\stopsection +\stopsectionlevel -\startsection[title=Boxes] +\startsectionlevel[title=Boxes] This paragraph of text is made from lines that contain words that themselves contain symbolic representations of characters. Each line is wrapped in a so @@ -66,11 +66,9 @@ other hand wraps a linked list of so called nodes: glyphs, kerns, glue, penalties, rules, boxes, etc. It is a container with properties like width, height, depth and shift. -\stopsection +\stopsectionlevel -\stopsection - -\startsection[title={\TEX\ primitives}] +\startsectionlevel[title={\TEX\ primitives}] The box model is reflected in \TEX's user interface but not by that many commands, most noticeably \type {\hbox}, \type {\vbox} and \type {\vtop}. Here is @@ -218,9 +216,9 @@ we use copy because it serves the examples. \box \scratchbox \stoptyping -\stopsection +\stopsectionlevel -\startsection[title={\ETEX\ primitives}] +\startsectionlevel[title={\ETEX\ primitives}] The \ETEX\ extensions don't add something relevant for boxes, apart from that you can use the expressions mechanism to mess around with their dimensions. There is @@ -229,9 +227,9 @@ capabilities and doesn't change much as it's mostly a way to trick the backend into outputting a stretch of text in the other direction. This feature is not available in \LUATEX\ because it has an alternative direction mechanism. -\stopsection +\stopsectionlevel -\startsection[title={\LUATEX\ primitives}] +\startsectionlevel[title={\LUATEX\ primitives}] The concept of boxes is the same in \LUATEX\ as in its predecessors but there are some aspects to keep in mind. When a box is typeset this happens in \LUATEX: @@ -289,9 +287,9 @@ but because in \LUAMETATEX\ there are only two. Because this model has been upgr it will be discusses in the next section. A \CONTEXT\ user is supposed to use the official \CONTEXT\ interfaces in order to be downward compatible. -\stopsection +\stopsectionlevel -\startsection[title={\LUAMETATEX\ primitives}] +\startsectionlevel[title={\LUAMETATEX\ primitives}] There are two possible directions: left to right (the default) and right to left for Hebrew and Arabic. Here is an example that shows how it'd done with low level @@ -691,7 +689,7 @@ test\quad \ruledhbox{\getbuffer} \stoplinecorrection -\stopsection +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-characters.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-characters.tex index c3d417e44..777182b84 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-characters.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-characters.tex @@ -6,15 +6,15 @@ [title=characters, color=middlered] -\startsection[title=Introduction] +\startsectionlevel[title=Introduction] This explanation is part of the low level manuals because in practice users will not have to deal with these matters in \MKIV\ and even less in \LMTX. You can skip to the last section for commands. -\stopsection +\stopsectionlevel -\startsection[title=History] +\startsectionlevel[title=History] If we travel back in time to when \TEX\ was written we end up in eight bit character universe. In fact, the first versions assumed seven bits, but for @@ -79,9 +79,9 @@ depending on the (local) language, referencing the relevant font. It permits users to enter the text in their preferred input encoding and also get the words properly hyphenated. But we can leave these \MKII\ details behind. -\stopsection +\stopsectionlevel -\startsection[title=The heritage] +\startsectionlevel[title=The heritage] In \MKIV\ we got rid of input and font encodings, although one can still load files in a specific code page. \footnote {I'm not sure if users ever depend on an @@ -112,9 +112,9 @@ format file. \footnote {In \MKII\ we have an abstract front|-|end with respect t encodings and also an abstract backend with respect to supported drivers but both approaches no longer make sense today.} -\stopsection +\stopsectionlevel -\startsection[title=The \LMTX\ approach] +\startsectionlevel[title=The \LMTX\ approach] In the process of tagging all (public) macros in \LMTX\ (which happened in 2020|-|2021) I wondered if we should keep these one character macros, the @@ -220,19 +220,7 @@ We get this list: Some combinations are special for \CONTEXT\ because \UNICODE\ doesn't specify decomposition for all composed characters. -\stopsection - -\startsubject[title=Colofon] - -\starttabulate -\NC Author \NC Hans Hagen \NC \NR -\NC \CONTEXT \NC \contextversion \NC \NR -\NC \LUAMETATEX \NC \texengineversion \NC \NR -\NC Support \NC www.pragma-ade.com \NC \NR -\NC \NC contextgarden.net \NC \NR -\stoptabulate - -\stopsubject +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-conditionals.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-conditionals.tex index dfff4ac72..288521bdd 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-conditionals.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-conditionals.tex @@ -8,9 +8,9 @@ \pushoverloadmode -\startsection[title=Preamble] +\startsectionlevel[title=Preamble] -\startsubsection[title=Introduction] +\startsectionlevel[title=Introduction] You seldom need the low level conditionals because there are quite some so called support macros available in \CONTEXT . For instance, when you want to compare two @@ -53,9 +53,9 @@ The others are often wrapped into support macros that are more convenient. In due time I might add more examples and explanations. Also, maybe some more tests will show up as part of the \LUAMETATEX\ project. -\stopsubsection +\stopsectionlevel -\startsubsection[title={Number and dimensions}] +\startsectionlevel[title={Number and dimensions}] Numbers and dimensions are basic data types in \TEX. When you enter one, a number is just that but a dimension gets a unit. Compare: @@ -289,13 +289,13 @@ assuming that the fraction is within the maximum permitted) so these numbers the are the same. Anyway, this is not different in other programming languages and just something you need to be aware of. -\stopsubsection +\stopsectionlevel -\stopsection +\stopsectionlevel -\startsection[title={\TEX\ primitives}] +\startsectionlevel[title={\TEX\ primitives}] -\startsubsection[title={\tex{if}}] +\startsectionlevel[title={\tex{if}}] I seldom use this one. Internally \TEX\ stores (and thinks) in terms of tokens. If you see for instance \type {\def} or \type {\dimen} or \type {\hbox} these all @@ -330,9 +330,9 @@ We get: \inlinebuffer . % protected macros -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifcat}}] +\startsectionlevel[title={\tex{ifcat}}] In \TEX\ characters (in the input) get interpreted according to their so called catcodes. The most common are letters (alphabetic) and and other (symbols) but @@ -377,9 +377,9 @@ You can use \type {\noexpand} to prevent expansion: We get: \inlinebuffer, so who still thinks that \TEX\ is easy to understand for a novice user? -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifnum}}] +\startsectionlevel[title={\tex{ifnum}}] This condition compares its argument with another one, separated by an \type {<}, \type {=} or \type {>} character. @@ -410,9 +410,9 @@ case the dimension is in scaled points. Of course this equal treatment of a dimension and number is only true when the dimension is a register or box property. -\stopsubsection +\stopsectionlevel -\startsection[title={\tex{ifdim}}] +\startsectionlevel[title={\tex{ifdim}}] This condition compares one dimension with another one, separated by an \type {<}, \type {=} or \type {>} sign. @@ -430,9 +430,9 @@ This condition compares one dimension with another one, separated by an \type {< While when comparing numbers a dimension is a valid quantity but here you cannot mix them: something with a unit is expected. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifodd}}] +\startsectionlevel[title={\tex{ifodd}}] This one can come in handy, although in \CONTEXT\ it is only used in checking for an odd of even page number. @@ -454,9 +454,9 @@ too, which is then interpreted as representing scaled points. Here we get: \getbuffer \stoplines -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifvmode}}] +\startsectionlevel[title={\tex{ifvmode}}] This is a rather trivial check. It takes no arguments and just is true when we're in vertical mode. Here is an example: @@ -470,9 +470,9 @@ in vertical mode. Here is an example: We're always in horizontal mode and issuing a \type {\par} inside a horizontal box doesn't change that, so we get: \ruledhbox{\inlinebuffer}. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifhmode}}] +\startsectionlevel[title={\tex{ifhmode}}] As with \type {\ifvmode} this one has no argument and just tells if we're in vertical mode. @@ -494,9 +494,9 @@ content (or command) is done more than once: \ruledhbox{\inlinebuffer} \stoplinecorrection -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifmmode}}] +\startsectionlevel[title={\tex{ifmmode}}] Math is something very \TEX\ so naturally you can check if you're in math mode. here is an example of using this test: @@ -507,9 +507,9 @@ here is an example of using this test: Of course in reality macros that do such things are more advanced than this one. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifinner}}] +\startsectionlevel[title={\tex{ifinner}}] \startbuffer \def\ShowMode @@ -549,9 +549,9 @@ By the way, moving the \type {\ifinner} test outside the branches (to the top of the macro) won't work because once the word \type {inner} is typeset we're no longer in vertical mode, if we were at all. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifvoid}}] +\startsectionlevel[title={\tex{ifvoid}}] A box is one of the basic concepts in \TEX. In order to understand this primitive we present four cases: @@ -601,15 +601,15 @@ Setting a dimension of a void voix (empty) box doesn't make it less void: \getbuffer \stoplines -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifhbox}}] +\startsectionlevel[title={\tex{ifhbox}}] This test takes a box number and gives true when it is an hbox. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifvbox}}] +\startsectionlevel[title={\tex{ifvbox}}] This test takes a box number and gives true when it is an vbox. Both a \type {\vbox} and \type {\vtop} are vboxes, the difference is in the height and depth @@ -627,9 +627,9 @@ And in a \type {\vtop} the first line takes control: but, once wrapped, both internally are just vlists. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifx}}] +\startsectionlevel[title={\tex{ifx}}] This test is actually used a lot in \CONTEXT: it compares two token(list)s: @@ -651,29 +651,29 @@ that get compared, like in: \edef\TempA{...}\edef\TempB{...}\ifx\TempA\TempB ...\else ...\fi \stoptyping -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifeof}}] +\startsectionlevel[title={\tex{ifeof}}] This test checks if a the pointer in a given input channel has reached its end. It is also true when the file is not present. The argument is a number which relates to the \type {\openin} primitive that is used to open files for reading. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{iftrue}}] +\startsectionlevel[title={\tex{iftrue}}] It does what it says: always true. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{iffalse}}] +\startsectionlevel[title={\tex{iffalse}}] It does what it says: always false. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifcase}}] +\startsectionlevel[title={\tex{ifcase}}] The general layout of an \type {\ifcase} tests is as follows: @@ -693,13 +693,13 @@ The general layout of an \type {\ifcase} tests is as follows: As in other places a number is a sequence of signs followed by one of more digits -\stopsubsection +\stopsectionlevel -\stopsection +\stopsectionlevel -\startsection[title={\ETEX\ primitives}] +\startsectionlevel[title={\ETEX\ primitives}] -\startsubsection[title={\tex{ifdefined}}] +\startsectionlevel[title={\tex{ifdefined}}] This primitive was introduced for checking the existence of a macro (or primitive) and with good reason. Say that you want to know if \type {\MyMacro} is defined? One @@ -736,9 +736,9 @@ In order to catch the last problem there is the option to test directly: This (or course) results in: \inlinebuffer, but the macro is still sort of defined (with no meaning). The next section shows how to get around this. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifcsname}}] +\startsectionlevel[title={\tex{ifcsname}}] A macro is often defined using a ready made name, as in: @@ -795,9 +795,9 @@ during this test, and in \LUAMETATEX\ that is default. This means that tests can be made quite robust as it is pretty safe to assume that names that make sense are constructed from regular characters and not boxes, font switches, etc. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{iffontchar}}] +\startsectionlevel[title={\tex{iffontchar}}] This test was also part of the \ETEX\ extensions and it can be used to see if a font has a character. @@ -824,9 +824,9 @@ In the perspective of \LUAMETATEX\ I considered also supporting \type {\fontid} but it got a bit messy due to the fact that this primitive expands in a different way so this extension was rejected. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{unless}}] +\startsectionlevel[title={\tex{unless}}] You can negate the results of a test by using the \type {\unless} prefix, so for instance you can replace: @@ -847,41 +847,41 @@ by: \fi \stoptyping -\stopsubsection +\stopsectionlevel -\stopsection +\stopsectionlevel -\startsection[title={\LUATEX\ primitives}] +\startsectionlevel[title={\LUATEX\ primitives}] -\startsubsection[title={\tex{ifincsname}}] +\startsectionlevel[title={\tex{ifincsname}}] As it had no real practical usage uit might get dropped in \LUAMETATEX, so it will not be discussed here. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifprimitive}}] +\startsectionlevel[title={\tex{ifprimitive}}] As it had no real practical usage due to limitations, this one is not available in \LUAMETATEX\ so it will not be discussed here. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifabsnum}}] +\startsectionlevel[title={\tex{ifabsnum}}] This test is inherited from \PDFTEX\ and behaves like \type {\ifnum} but first turns a negative number into a positive one. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifabsdim}}] +\startsectionlevel[title={\tex{ifabsdim}}] This test is inherited from \PDFTEX\ and behaves like \type {\ifdim} but first turns a negative dimension into a positive one. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifcondition}}] +\startsectionlevel[title={\tex{ifcondition}}] This is not really a test but in order to unstand that you need to know how \TEX\ internally deals with tests. @@ -1061,13 +1061,13 @@ permits more complex arguments, like: Another trick is that we use an integer division (the \type {:}) which is an operator supported by \LUAMETATEX . -\stopsubsection +\stopsectionlevel -\stopsection +\stopsectionlevel -\startsection[title={\LUAMETATEX\ primitives}] +\startsectionlevel[title={\LUAMETATEX\ primitives}] -\startsubsection[title={\tex{ifcmpnum}}] +\startsectionlevel[title={\tex{ifcmpnum}}] This one is part of s set of three tests that all are a variant of a \type {\ifcase} test. A simple example of the first test is this: @@ -1080,9 +1080,9 @@ The test scans for two numbers, which of course can be registers or expressions, and sets the case value to 0, 1 or 2, which means that you then use the normal \type {\or} and \type {\else} primitives for follow up on the test. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifchknum}}] +\startsectionlevel[title={\tex{ifchknum}}] This test scans a number and when it's okay sets the case value to 1, and otherwise to 2. So you can do the next: @@ -1097,9 +1097,9 @@ recovery token, although in fact we just use the fast scanner mode that comes with the \type {\ifcase}: because the result is 1 or 2, we never see invalid tokens. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifnumval}}] +\startsectionlevel[title={\tex{ifnumval}}] A sort of combination of the previous two is \type {\ifnumval} which checks a number but also if it's less, equal or more than zero: @@ -1113,29 +1113,29 @@ You can decide to ignore the bad number or do something that makes more sense. Often the to be checked value will be the content of a macro or an argument like \type {#1}. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifcmpdim}}] +\startsectionlevel[title={\tex{ifcmpdim}}] This test is like \type {\ifcmpnum} but for dimensions. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifchkdim}}] +\startsectionlevel[title={\tex{ifchkdim}}] This test is like \type {\ifchknum} but for dimensions. The last checked value is available as \type {\lastchknum}. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifdimval}}] +\startsectionlevel[title={\tex{ifdimval}}] This test is like \type {\ifnumval} but for dimensions. The last checked value is available as \type {\lastchkdim} -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{iftok}}] +\startsectionlevel[title={\tex{iftok}}] Although this test is still experimental it can be used. What happens is that two to be compared \quote {things} get scanned for. For each we first gobble @@ -1195,49 +1195,49 @@ Case one and four mixed: The last case is more a catch: it will issue an error when no number is given. Eventually that might become a bit more clever (depending on our needs.) -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifcstok}}] +\startsectionlevel[title={\tex{ifcstok}}] There is a subtle difference between this one and \type {iftok}: spaces and \type {\relax} tokens are skipped but nothing gets expanded. So, when we arrive at the to be compared \quote {things} we look at what is there, as|-|is. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{iffrozen}}] +\startsectionlevel[title={\tex{iffrozen}}] {\em This is an experimental test.} Commands can be defined with the \type {\frozen} prefix and this test can be used to check if that has been the case. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifprotected}}] +\startsectionlevel[title={\tex{ifprotected}}] Commands can be defined with the \type {\protected} prefix (or in \CONTEXT, for historic reasons, with \type {\unexpanded}) and this test can be used to check if that has been the case. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifusercmd}}] +\startsectionlevel[title={\tex{ifusercmd}}] {\em This is an experimental test.} It can be used to see if the command is defined at the user level or is a build in one. This one might evolve. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{ifarguments}}] +\startsectionlevel[title={\tex{ifarguments}}] This conditional can be used to check how many arguments were matched. It only makes sense when used with macros defined with the \type {\tolerant} prefix and|/|or when the sentinel \type {\ignorearguments} after the arguments is used. More details can be found in the lowlevel macros manual. -\stopsubsection +\stopsectionlevel -\startsubsection[title={\tex{orelse}}] +\startsectionlevel[title={\tex{orelse}}] This it not really a test primitive but it does act that way. Say that we have this: @@ -1297,13 +1297,13 @@ This permits: where, of course, the quitting normally is the result of some intermediate extra test. But let me play safe here: beware of side effects. -\stopsubsection +\stopsectionlevel -\stopsection +\stopsectionlevel -\startsection[title={For the brave}] +\startsectionlevel[title={For the brave}] -\startsubsection[title={Full expansion}] +\startsectionlevel[title={Full expansion}] If you don't understand the following code, don't worry. There is seldom much reason to go this complex but obscure \TEX\ code attracts some users so \unknown @@ -1361,9 +1361,9 @@ different: they contain the assignments and the test for the character is actually done when constructing the content of the \type {\edef}, but for the current font. So, basically that test is now useless. -\stopsubsection +\stopsectionlevel -\startsubsection[title={User defined if's}] +\startsectionlevel[title={User defined if's}] There is a \type {\newif} macro that defines three other macros: @@ -1411,11 +1411,11 @@ This one is cheaper on the hash and doesn't need the two extra macros per test. The price is the use of \type {\ifconditional}, which is {\em not} to confused with \type {\ifcondition} (it has bitten me already a few times). -\stopsubsection +\stopsectionlevel -\stopsection +\stopsectionlevel -\startsection[title=Relaxing] +\startsectionlevel[title=Relaxing] When \TEX\ scans for a number or dimension it has to check tokens one by one. On the case of a number, the scanning stops when there is no digit, in the case of a @@ -1532,19 +1532,7 @@ it acts as relax, but otherwise it just is ignored and disappears. \typebuffer[c] \getbuffer[c,b] -\stopsection - -\startsubject[title=Colofon] - -\starttabulate -\NC Author \NC Hans Hagen \NC \NR -\NC \CONTEXT \NC \contextversion \NC \NR -\NC \LUAMETATEX \NC \texengineversion \NC \NR -\NC Support \NC www.pragma-ade.com \NC \NR -\NC \NC contextgarden.net \NC \NR -\stoptabulate - -\stopsubject +\stopsectionlevel \popoverloadmode diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-expansion.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-expansion.tex index 98f533859..6e9134914 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-expansion.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-expansion.tex @@ -11,7 +11,7 @@ [title=expansion, color=middleyellow] -\startsection[title=Preamble] +\startsectionlevel[title=Preamble] This short manual demonstrates a couple of properties of the macro language. It is not an in|-|depth philosophical expose about macro languages, tokens, @@ -23,9 +23,9 @@ book does and although there is no way to avoid the word \quote {token} I will d my best to not complicate matters by too much token speak. Examples show best what we mean. -\stopsection +\stopsectionlevel -\startsection[title={\TEX\ primitives}] +\startsectionlevel[title={\TEX\ primitives}] The \TEX\ language provides quite some commands and those built in are called primitives. User defined commands are called macros. A macro is a shortcut to a @@ -316,9 +316,9 @@ The first one gives \inlinebuffer[a], while the second gives \inlinebuffer[b]. % \afterassignment % \aftergroup -\stopsection +\stopsectionlevel -\startsection[title={\ETEX\ primitives}] +\startsectionlevel[title={\ETEX\ primitives}] In this engine a couple of extensions were added and later on \PDFTEX\ added some more. We only discuss a few that relate to expansion. There is however a pitfall @@ -439,9 +439,9 @@ letters. The next snippet shows these catcodes: The result is \quotation {\tt\inlinebuffer}: two characters are marked as \quote {letter} and two fall in the \quote {other} category. -\stopsection +\stopsectionlevel -\startsection[title={\LUATEX\ primitives}] +\startsectionlevel[title={\LUATEX\ primitives}] This engine adds a little to the expansion repertoire. First of all it offers a way to extend token lists registers: @@ -484,9 +484,9 @@ or token lists, simply because in the process \TEX\ has to create tokens lists too, but sometimes they're just more convenient to use. In \CONTEXT\ we actually do benefit from these. -\stopsection +\stopsectionlevel -\startsection[title={\LUAMETATEX\ primitives}] +\startsectionlevel[title={\LUAMETATEX\ primitives}] We already saw that macro's can be defined protected which means that @@ -999,9 +999,9 @@ performance or bloating the source. % tex.runlocal : function|number(register)|string(macro)|userdata(token) + expand + grouped % mplib.expandtex : mpx + kind + string|userdata + [string|true|table|userdata|number]* -\stopsection +\stopsectionlevel -\startsection[title=Dirty tricks] +\startsectionlevel[title=Dirty tricks] When I was updating this manual Hans vd Meer and I had some discussions about expansion and tokenization related issues when combining of \XML\ processing with @@ -1116,7 +1116,7 @@ so that we can do: A companion macro of this is \type {\wipetoken} but for that one you need to look into the source. -\stopsection +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-grouping.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-grouping.tex index a3bfe79c9..12d12f7f4 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-grouping.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-grouping.tex @@ -6,15 +6,15 @@ [title=grouping, color=middlecyan] -\startsection[title=Introduction] +\startsectionlevel[title=Introduction] This is a rather short explanation. I decided to write it after presenting the other topics at the 2019 \CONTEXT\ meeting where there was a question about grouping. -\stopsection +\stopsectionlevel -\startsection[title=\PASCAL] +\startsectionlevel[title=\PASCAL] In a language like \PASCAL, the language that \TEX\ has been written in, or \MODULA, its successor, there is no concept of grouping like in \TEX. But we can @@ -30,9 +30,9 @@ instance an assignment in \METAPOST\ uses \type {:=} too. However, the \type can have local variables in a procedure or function but the block is just a way to pack a sequence of statements. -\stopsection +\stopsectionlevel -\startsection[title=\TEX] +\startsectionlevel[title=\TEX] In \TEX\ macros (or source code) the following can occur: @@ -79,9 +79,9 @@ The bottomline is: if you want a value to persist after the group, you need to explicitly change its value globally. This makes a lot of sense in the perspective of \TEX. -\stopsection +\stopsectionlevel -\startsection[title=\METAPOST] +\startsectionlevel[title=\METAPOST] The \METAPOST\ language also has a concept of grouping but in this case it's more like a programming language. @@ -110,9 +110,9 @@ implicit. So, in \METAPOST\ all assignments are global, unless a variable is explicitly saved inside a group. -\stopsection +\stopsectionlevel -\startsection[title=\LUA] +\startsectionlevel[title=\LUA] In \LUA\ all assignments are global unless a variable is defines local: @@ -132,9 +132,9 @@ some \METAPOST\ coding or using \type {end} instead of \type {endfor} in \METAPOST\ which can make the library wait for more without triggering an error. Proper syntax highlighting in an editor clearly helps. -\stopsection +\stopsectionlevel -\startsection[title=\CCODE] +\startsectionlevel[title=\CCODE] The \LUA\ language is a mix between \PASCAL\ (which is one reason why I like it) and \CCODE. @@ -151,20 +151,6 @@ for (i=1; i<=10;i++) { The semicolon is also used in \PASCAL\ but there it is a separator and not a statement end, while in \METAPOST\ it does end a statement (expression). -\stopsection - -\stopsection - -\startsubject[title=Colofon] - -\starttabulate -\NC Author \NC Hans Hagen \NC \NR -\NC \CONTEXT \NC \contextversion \NC \NR -\NC \LUAMETATEX \NC \texengineversion \NC \NR -\NC Support \NC www.pragma-ade.com \NC \NR -\NC \NC contextgarden.net \NC \NR -\stoptabulate - -\stopsubject +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-inserts.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-inserts.tex new file mode 100644 index 000000000..4976ce564 --- /dev/null +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-inserts.tex @@ -0,0 +1,202 @@ +% language=us runpath=texruns:manuals/lowlevel + +\environment lowlevel-style + +\startdocument + [title=inserts, + color=middlecyan] + +\startsectionlevel[title=Introduction] + +This document is a mixed bag. We do discuss inserts but also touch elements of +the page builder because inserts and regular page content are handled there. +Examples of mechanisms that use inserts are footnotes. These have an anchor in +the running text and some content that ends up (normally) at the bottom of the +page. When considering a page break the engine tries to make sure that the anchor +(reference) and the content end up on the same page. When there is too much, it +will distribute (split) the content over pages. + +We can discuss page breaks in a (pseudo) scientific way and explore how to +optimize this process, taking into accounts also inserts that contain images but +it doesn't make much sense to do that because in practice we can encounter all +kind of interferences. Theory and practice are too different because a document +can contain a wild mix of text, figures, formulas, notes, have backgrounds and +location dependent processing. It get seven more complex when we are dealing with +columns because \TEX\ doesn't really know that concept. + +I will therefore stick to some practical aspects and the main reason for this +document is that I sort of document engine features and at the same time give an +impression of what we deal with. I will do that in the perspective of +\LUAMETATEX, which has a few more options and tracing than other engines. + +{\em Currently this document is mostly for myself to keep track of the state of +inserts and the page builder in \LUAMETATEX\ and \CONTEXT\ \LMTX. The text is not +yet corrected and can have errors.} + +\stopsectionlevel + +\startsectionlevel[title=The page builder] + +When your document is processed content eventually gets added to the so called +main vertical list (mvl). Content first get appended to the list of contributions +and at specific moments it will be handed over to the mvl. This process is called +page building. There we can encounter the following elements (nodes): + +\starttabulate +\NC \type {glue} \NC a vertical skip \NC \NR +\NC \type {penalty} \NC a vertical penalty \NC \NR +\NC \type {kern} \NC a vertical kern \NC \NR +\NC \type {vlist} \NC a a vertical box \NC \NR +\NC \type {hlist} \NC a horizontal box (often a line) \NC \NR +\NC \type {rule} \NC a horizontal rule \NC \NR +\NC \type {boundary} \NC a boundary node \NC \NR +\NC \type {whatsit} \NC a node that is used by user code (often some extension) \NC \NR +\NC \type {mark} \NC a token list (as used for running headers) \NC \NR +\NC \type {insert} \NC a node list (as used for notes) \NC \NR +\stoptabulate + +The engine itself will not insert anything other than this but \LUA\ code can +mess up the contribution list and the mvl and that can trigger an error. Handing +over the contributions is done by the page builder and that one kicks in in +several places: + +\startitemize[packed] +\startitem + When a penalty gets inserted it is part of evaluating if the output routine + should be triggered. This triggering can be enforced by values equal or below + 10.000 that then can be checked in the set routine. +\stopitem +\startitem + The builder is {\em not} exercised when a glue or kern is injected so there can + be multiple of them before another element triggers the builder. +\stopitem +\startitem + Adding a box triggers the builder as does the result of an alignment which can + be a list of boxes. +\stopitem +\startitem + When the output routine is finished the builder is executed because the + routine can have pushed back content. +\stopitem +\startitem + When a new paragraph is triggered by the \type {\par} command the builder kicks in + but only when the engine was able to enter vertical mode. +\stopitem +\startitem + When the job is finished the builder will make sure that pending content is handled. +\stopitem +\startitem + An insert and vadjust {\em can} trigger the builder but only at the nesting level zero + which normally is not the case (I need an example). +\stopitem +\startitem + At the beginning of a paragraph (like text), before display math is entered, + and when display math ends the builder is also activated. +\stopitem +\stopitemize + +At the \TEX\ the builder is triggered automatically in the mentioned cases but at +the \LUA\ end you can use \type {tex.triggerbuildpage()} to flush the pending +contributions. + +The properties that relate to the page look like counter and dimension registers ut +they are not. These variables are global and managed differently. + +\starttabulate +\NC \type {\pagegoal} \NC the available space \NC \NR +\NC \type {\pagetotal} \NC the accumulated space \NC \NR +\NC \type {\pagestretch} \NC the possible zero order stretch \NC \NR +\NC \type {\pagefilstretch} \NC the possible one order stretch \NC \NR +\NC \type {\pagefillstretch} \NC the possible second order stretch \NC \NR +\NC \type {\pagefilllstretch} \NC the possible third order stretch \NC \NR +\NC \type {\pageshrink} \NC the possible shrink \NC \NR +\NC \type {\pagedepth} \NC the current page depth \NC \NR +\NC \type {\pagevsize} \NC the initial page goal \NC \NR +\stoptabulate + +When the first content is added to an empty page the \type {\pagegoal} gets the +value of \type {\vsize} and gets frozen but the value is diminished by the space +needed by left over inserts. These inserts are managed via a separate list so +they don't interfere with the page that itself of course can have additional +inserts. The \type {\pagevsize} is just a (\LUAMETATEX) status variable that hold +the initial \type {\pagegoal} but it might play a role in future extensions. + +Another variable is \type {\deadcycles} that registers the number of times the +output routine is called without returning result. + +\stopsectionlevel + +\startsectionlevel[title=Inserts] + +We now come to inserts. In traditional \TEX\ an insert is a data structure that +runs on top of registers: a box, count, dimension and skip. An insert is accessed +by a number so for instance insert 123 will use the four registers of that +number. Because \TEX\ only offers a command alias mechanism for registers (like +\type {\countdef}) a macro package will implement some allocator management +subsystem (like \type {\newcount}). A \type {\newinsert} has to be defined in a +way that the four registers are not clashing with other allocators. When you +start with \TEX\ seeing code that deals with in (in plain \TEX) can be puzzling +but it follows from the way \TEX\ is set up. But inserts are probably not what +you start exploring right away away. + +In \LUAMETATEX\ you can set \type {\insertmode} to 1 and that is what we do in +\CONTEXT. In that mode inserts are taken from a pool instead of registers. A side +effect is that like the page properties the insert properties are global too but +that is normally no problem and can be managed well by a macro package (that +probably would assign register the values globally too). The insert pool will +grow dynamically on demand so one can just start at 1; in \CONTEXT\ \MKIV\ we use +the range 127 upto 255 in order to avoid a clash with registers. In \LMTX\ we start +at 1 because there are no clashes. + +A consequence of this approach is that we use dedicated commands to set the insert +properties: + +\starttabulate[|l|l|p|] +\NC \type {\insertdistance} \NC glue \NC the space before the first instance (on a page) \NC \NR +\NC \type {\insertmultiplier} \NC count \NC a factor that is used to calculate the height used \NC \NR +\NC \type {\insertlimit} \NC dimen \NC the maximum amount of space on a page to be taken \NC \NR +\NC \type {\insertpenalty} \NC count \NC the floating penalty (used when set) \NC \NR +\NC \type {\insertmaxdepth} \NC dimen \NC the maximum split depth (used when set) \NC \NR +\NC \type {\insertstorage} \NC count \NC signals that the insert has to be stored for later \NC \NR +\NC \type {\insertheight} \NC dimen \NC the accumulated height of the inserts so far \NC \NR +\NC \type {\insertdepth} \NC dimen \NC the current depth of the inserts so far \NC \NR +\NC \type {\insertwidth} \NC dimen \NC the width of the inserts \NC \NR +\stoptabulate + +These commands take a number and an integer, dimension or glue specification. +They can be set and queried but setting the dimensions can have side effects. The +accumulated height of the inserts is available in \type {\insertheights} (which +can be set too). The \type {\floatingpenalty} variable determines the penalty +applied when a split is needed. + +In the output routine the original \TEX\ variable \type {\insertpenalties} is a +counter that keeps the number of insertions that didn't fit on the page while +otherwise if has the accumulated penalties of the split insertions. When \type +{\holdinginserts} is non zero the inserts in the list are not collected for +output, which permits the list to be fed back for reprocessing. + +The \LUAMETATEX\ specific storage mode \type {\insertstoring} variable is +explained in the next section. + +\stopsectionlevel + +\startsectionlevel[title=Storing] + +This feature is kind of special and still experimental. When \type +{\insertstoring} is set 1, all inserts that have their storage flag set will be +saved. Think of a multi column setup where inserts have to end up in the last +column. If there are three columns, the first two will store inserts. Then when +the last column is dealt with \type {\insertstoring} can be set to 2 and that +will signal the builder that we will inject the inserts. In both cases, the value +of this register will be set to zero so that it doesn't influence further +processing. + +\stopsectionlevel + +\startsectionlevel[title=Callbacks] + +{\em Todo, nothing new there, so no hurry.} + +\stopsectionlevel + +\stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-macros.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-macros.tex index a69eec797..200cd8650 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-macros.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-macros.tex @@ -22,7 +22,7 @@ [title=macros, color=middleorange] -\startsection[title=Preamble] +\startsectionlevel[title=Preamble] This chapter overlaps with other chapters but brings together some extensions to the macro definition and expansion parts. As these mechanisms were stepwise @@ -33,9 +33,9 @@ have \TEX\ act like before. We keep the charm of the macro language but these additions make for easier definitions, but (at least initially) none that could not be done before using more code. -\stopsection +\stopsectionlevel -\startsection[title=Definitions] +\startsectionlevel[title=Definitions] A macro definition normally looks like like this: \footnote {The \type {\dontleavehmode} command make the examples stay on one line.} @@ -563,9 +563,9 @@ when the matching quits. Gobbling spaces versus pushing back is an interface design decision because it has to do with consistency. -\stopsection +\stopsectionlevel -\startsection[title=Runaway arguments] +\startsectionlevel[title=Runaway arguments] There is a particular troublesome case left: a runaway argument. The solution is not pretty but it's the only way: we need to tell the parser that it can quit. @@ -611,9 +611,9 @@ offset by some inefficient styling. Of course another gain of loosing some indirectness is that error messages point to the macro that the user called for and not to some follow up. -\stopsection +\stopsectionlevel -\startsection[title=Introspection] +\startsectionlevel[title=Introspection] A macro has a meaning. You can serialize that meaning as follows: @@ -659,9 +659,9 @@ macro is a special version of the online variant: That one is always available and shows a similar list on the console. Again, users normally don't want to know such details. -\stopsection +\stopsectionlevel -\startsection[title=nesting] +\startsectionlevel[title=nesting] You can nest macros, as in: @@ -760,9 +760,9 @@ sure I do know why I dislike some languages for it). The \TEX\ system is not the only one where dollars, percent signs, ampersands and hashes have special meaning. -\stopsection +\stopsectionlevel -\startsection[title=Prefixes] +\startsectionlevel[title=Prefixes] Traditional \TEX\ has three prefixes that can be used with macros: \type {\global}, \type {\outer} and \type {\long}. The last two are no|-|op's in \LUAMETATEX\ and @@ -903,24 +903,24 @@ The level of checking is controlled with the \type {\overloadmode} but I'm still not sure about how many levels we need there. A zero value disables checking, the values 1 and 3 give warnings and the values 2 and 4 trigger an error. -\stopsection +\stopsectionlevel \stopdocument -freezing pitfalls: - -- \futurelet : \overloaded needed -- \let : \overloaded sometimes needed - -primitive protection: - -\newif\iffoo \footrue \foofalse : problem when we make iftrue and iffalse -permanent ... they inherit, so we can't let them, we need a not permanent -alias which is again tricky ... something native? - -immutable : still \count000 but we can consider blocking that, for instance -by \def\count{some error} - -\defcsname -\edefcsname -\letcsname +% freezing pitfalls: +% +% - \futurelet : \overloaded needed +% - \let : \overloaded sometimes needed +% +% primitive protection: +% +% \newif\iffoo \footrue \foofalse : problem when we make iftrue and iffalse +% permanent ... they inherit, so we can't let them, we need a not permanent +% alias which is again tricky ... something native? +% +% immutable : still \count000 but we can consider blocking that, for instance +% by \def\count{some error} +% +% \defcsname +% \edefcsname +% \letcsname diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-marks.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-marks.tex index 6eef0dd01..0ea92f150 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-marks.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-marks.tex @@ -1,14 +1,12 @@ % language=us runpath=texruns:manuals/lowlevel -\startcomponent lowlevel-marks - \environment lowlevel-style \startdocument [title=marks, color=middlemagenta] -\startsection[title=Introduction] +\startsectionlevel[title=Introduction] Marks are one of the subsystems of \TEX, as are for instance alignments and math as well as inserts which they share some properties with. Both inserts and marks @@ -50,9 +48,9 @@ In this document we discuss marks but assume that \LUAMETATEX\ is used with a few \LUA\ mechanisms, but it is to be seen if that will be either a replacement or an alternative. -\stopsection +\stopsectionlevel -\startsection[title=The basics] +\startsectionlevel[title=The basics] Although the original \TEX\ primitives are there, the plural \ETEX\ mark commands are to be used. Marks, signals with token lists, are set with: @@ -117,9 +115,9 @@ The current, latest assigned, value of a mark is available too: Using this value in for instance headers and footers makes no sense because the last node set can be on a following page. -\stopsection +\stopsectionlevel -\startsection[title=Migration] +\startsectionlevel[title=Migration] In the introduction we mentioned that \LUAMETATEX\ has migration built in. In \MKIV\ we have this as option too, but there it is delegated to \LUA. It permits @@ -306,9 +304,9 @@ Here \type {sm} means \quote {set mark} while \type {rm} would indicate a \quote the box and thereby have become a a specific box property as can be seen in the above trace. -\stopsection +\stopsectionlevel -\startsection[title=Tracing] +\startsectionlevel[title=Tracing] The \LUAMETATEX\ engine has a dedicated tracing option for marks. The fact that the traditional engine doesn't have this can be seen as indication that this is @@ -355,9 +353,9 @@ When tracing is set to 2 you also get details we get a list of marks of the anal 1:9: ..bot {sample 9.1} \stoptyping -\stopsection +\stopsectionlevel -\startsection[title=High level commands] +\startsectionlevel[title=High level commands] I think that not that many users define their own marks. They are useful for showing section related titles in headers and footers but the implementation of @@ -493,14 +491,21 @@ The following three variants are (what is called) fully expandable: % \resetsynchronizemarking[#1]% % \synchronizemarking[#1][#2][#3]% (#3: options (no longer used)) -\stopsection +\stopsectionlevel -\startsection[title=Pitfalls] +\startsectionlevel[title=Pitfalls] The main pitfall is that a (re)setting a mark will inject a node which in vertical mode can interfere with spacing. In for instance section commands we wrap them with the title so there it should work out okay. -\stopsection +\stopsectionlevel \stopdocument + +% Musical timestamp: videos showing up on YT with Nandi Bushell performing with +% Dave Grohl (e.g. https://www.youtube.com/watch?v=_AVkGj41RuA) ... the highlight +% of a nice and emotional thread of exchange between a young and capable energetic +% drummer challenging an experienced musician. During the pandemic one could +% witness quite some interesting musical experiments and Nandi and Yoyoka are some +% inspiring discoveries. diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-paragraphs.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-paragraphs.tex index 1c0264630..b4a3c5da3 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-paragraphs.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-paragraphs.tex @@ -6,7 +6,7 @@ [title=paragraphs, color=middlecyan] -\startsection[title=Introduction] +\startsectionlevel[title=Introduction] This manual is mostly discussing a few low level wrappers around low level \TEX\ features. Its writing is triggered by an update to the \METAFUN\ and \LUAMETAFUN\ @@ -29,9 +29,9 @@ they get enabled by default. \footnote {For this we have \type them, make sure they don't interfere; they are not part of the updates, contrary to \type {cont-new.mkxl}.} -\stopsection +\stopsectionlevel -\startsection[title=Paragraphs] +\startsectionlevel[title=Paragraphs] Before we demonstrate some trickery, let's see what a paragraph is. Normally a document source is formatted like this: @@ -200,9 +200,9 @@ program it using macros: pickup a token, check and push it back when it's not a par equivalent token. The primitive is is just nicer (and easier on the log when tracing is enabled). -\stopsection +\stopsectionlevel -\startsection[title=Properties] +\startsectionlevel[title=Properties] A paragraph is just a collection of lines that result from one input line that got broken. This process of breaking into lines is influenced by quite some @@ -319,9 +319,9 @@ this new mechanism has been active for a while. Actually, when you now change a parameter inside the paragraph its new value will not be applied (unless you prefix it with \type {\frozen} or snapshot it) but no one did that anyway. -\stopsection +\stopsectionlevel -\startsection[title=Wrapping up] +\startsectionlevel[title=Wrapping up] In \CONTEXT\ \LMTX\ we have a mechanism to exercise macros (or content) before a paragraph ends. This is implemented using the \type {\wrapuppar} primitive. The @@ -343,9 +343,9 @@ question is: where do we apply it in old mechanisms and where not. % $$x = \vcenter{vcenter : \wrapuppar{1}test\par x\wrapuppar{2}test}$$\blank % x\vadjust{vadjust : \wrapuppar{1}test\par x\wrapuppar{2}test}x\blank -\stopsection +\stopsectionlevel -\startsection[title=Hanging] +\startsectionlevel[title=Hanging] There are two mechanisms for getting a specific paragraph shape: rectangular hanging and arbitrary shapes. Both mechanisms work top|-|down. The first @@ -377,9 +377,9 @@ uses at the same time). \stopcombination \stopplacefigure -\stopsection +\stopsectionlevel -\startsection[title=Shapes] +\startsectionlevel[title=Shapes] In \CONTEXT\ we don't use \type {\parshape} a lot. It is used in for instance side floats but even there not in all cases. It's more meant for special @@ -970,10 +970,10 @@ examples are visualized in \in {figure} [fig:flow]. \stopcombination \stopplacefigure -\stopsection +\stopsectionlevel -% \startsection[title=Linebreaks] -\startsection[title=Modes] +% \startsectionlevel[title=Linebreaks] +\startsectionlevel[title=Modes] % \ruledvbox{1\ifhmode\writestatus{!}{HMODE 1}\fi} % hsize % \ruledvbox{\hbox{\strut 2}\ifhmode\writestatus{!}{HMODE 2}\fi} % fit @@ -984,15 +984,15 @@ examples are visualized in \in {figure} [fig:flow]. {\em todo: some of the side effects of so called modes} -\stopsection +\stopsectionlevel -\startsection[title=Normalization] +\startsectionlevel[title=Normalization] {\em todo: users don't need to bother about this but it might be interesting anyway} -\stopsection +\stopsectionlevel -\startsection[title=Dirty tricks] +\startsectionlevel[title=Dirty tricks] {\em todo: explain example for combining paragraphs} @@ -1008,7 +1008,7 @@ examples are visualized in \in {figure} [fig:flow]. % % test -\stopsection +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-registers.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-registers.tex index f24019f0d..4dbee67cd 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-registers.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-registers.tex @@ -6,7 +6,7 @@ [title=registers, color=darkmagenta] -\startsection[title=Preamble] +\startsectionlevel[title=Preamble] Registers are sets of variables that are accessed by index and a such resemble registers in a processing unit. You can store a quantity in a register, retrieve @@ -14,9 +14,9 @@ it, and also manipulate it. There is hardly any need to use them in \CONTEXT\ so we keep it simple. -\stopsection +\stopsectionlevel -\startsection[title={\TEX\ primitives}] +\startsectionlevel[title={\TEX\ primitives}] There are several categories: @@ -105,9 +105,11 @@ but in a macro package you should not use that one but the higher level \type Watch the difference: +\pushoverloadmode \startlines\tt \getbuffer[1,2] \stoplines +\popoverloadmode The first definition uses a yet free register so you won't get a clash. The second one is just a shortcut using a macro and the third one too but again @@ -182,9 +184,9 @@ If you want to know more about all these quantities, \quotation {\TEX\ By Topic} provides a good summary of what \TEX\ has to offer, and there is no need to repeat it here. -\stopsection +\stopsectionlevel -\startsection[title={\ETEX\ primitives}] +\startsectionlevel[title={\ETEX\ primitives}] Apart from the ability to use expressions, the contribution to registers that \ETEX\ brought was that suddenly we could use upto 65K of them, which is more @@ -194,9 +196,9 @@ and later \LUATEX\ regular arrays were used, at the cost of more memory which in the meantime has become cheap. As \CONTEXT\ moved to \ETEX\ rather early its users never had to worry about it. -\stopsection +\stopsectionlevel -\startsection[title={\LUATEX\ primitives}] +\startsectionlevel[title={\LUATEX\ primitives}] The \LUATEX\ engine introduced attributes. These are numeric properties that are bound to the nodes that are the result of typesetting operations. They are @@ -239,13 +241,13 @@ Just be aware that defining attributes can have an impact on performance. As you cannot access them at the \TEX\ end you seldom need them. If you do you can better use the proper more high level definers (not discussed here). -\stopsection +\stopsectionlevel -\startsection[title={\LUAMETATEX\ primitives}] +\startsectionlevel[title={\LUAMETATEX\ primitives}] {\em todo} -\stopsection +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-scope.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-scope.tex index 484e80a0b..cfd9f9611 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-scope.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-scope.tex @@ -9,15 +9,15 @@ [title=scope, color=middleblue] -\startsection[title=Introduction] +\startsectionlevel[title=Introduction] When I visited the file where register allocations are implemented I wondered to what extend it made sense to limit allocation to global instances only. This chapter deals with this phenomena. -\stopsection +\stopsectionlevel -\startsection[title=Registers] +\startsectionlevel[title=Registers] In \TEX\ definitions can be local or global. Most assignments are local within a group. Registers and definitions can be assigned global by using the \type @@ -108,9 +108,9 @@ here the dimension is \the\scratchdimen\par \typebuffer[option=TEX] \startlines \getbuffer \stoplines -\stopsection +\stopsectionlevel -\startsection[title=Allocation] +\startsectionlevel[title=Allocation] The plain \TEX\ format has set some standards and one of them is that registers are allocated with \type {\new...} commands. So we can say: @@ -252,9 +252,9 @@ So, again we get: When used in the body of the macro there is of course a little overhead involved in the repetitive allocation but normally that can be neglected. -\stopsection +\stopsectionlevel -\startsection[title=Files] +\startsectionlevel[title=Files] When adding these new allocators I also wondered about the read and write allocators. We don't use them in \CONTEXT\ but maybe users like them, so let's @@ -334,7 +334,7 @@ SOME LINE 3 As you see in these examples, we an locally define a read channel without getting a message about it already being defined. -\stopsection +\stopsectionlevel \stopdocument diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-security.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-security.tex index 0abc557b6..bdb3a5b87 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-security.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-security.tex @@ -21,7 +21,7 @@ [title=security, color=middleorange] -\startsection[title=Preamble] +\startsectionlevel[title=Preamble] Here I will discuss a moderate security subsystem of \LUAMETATEX\ and therefore \CONTEXT\ \LMTX. This is not about security in the sense of the typesetting @@ -35,9 +35,9 @@ might take a few years before the security model is finalized and all files are updated accordingly. There are lots of files and macros involved. In the process the underlying features in the engine might evolve. -\stopsection +\stopsectionlevel -\startsection[title=Flags] +\startsectionlevel[title=Flags] Before we go into the security levels we see what flags can be set. The \TEX\ language has a couple of so called prefixes that can be used when setting values @@ -205,9 +205,9 @@ really want to avoid that you can set the overload mode to 255 after which it cannot be set any more. However, it can be useful to set the mode to zero (or some warning level) when foreign macro packages are used. -\stopsection +\stopsectionlevel -\startsection[title=Complications] +\startsectionlevel[title=Complications] One side effect of all this is that all those prefixes can lead to more code. On the other hand we save some due to the extended macro argument handling features. @@ -220,9 +220,9 @@ about the same. \footnote {And if you wonder about memory, by compacting the use (often scattered) token memory before dumping I manages to save some 512K on the format file, so often the loss and gain are somewhere else.} -\stopsection +\stopsectionlevel -\startsection[title=Introspection] +\startsectionlevel[title=Introspection] In case you want to get some details about the properties of a macro, you can check its meaning. The full variant shows all of them. @@ -241,7 +241,7 @@ check its meaning. The full variant shows all of them. \startpacked \getbuffer \stoppacked -\stopsection +\stopsectionlevel % In \CONTEXT: % c! v! s! ?? diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel-style.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel-style.tex index 12ccee0b5..a8eba991e 100644 --- a/doc/context/sources/general/manuals/lowlevel/lowlevel-style.tex +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel-style.tex @@ -44,6 +44,10 @@ [style=\bfa, color=darkgray] +\setuplist + [chapter] + [style=bold] + \setupfootertexts [section] % [\documentvariable{title}] @@ -87,6 +91,15 @@ withcolor "white" ; \stopuseMPgraphic +\definesectionlevels + [default] + [%{chapter,title}, + {section,subject}, + {subsection,subsubject}, + {subsubsection,subsubsubject}, + {subsubsubsection,subsubsubject}, + {subsubsubsubsection,subsubsubject}] + \startsetups document:start \startMPpage @@ -95,9 +108,29 @@ \page - \startsubject[title=Contents] - \placelist[section][criterium=previous] - \stopsubject + \startsubjectlevel[title=Contents] + \placelist[chapter,section] [criterium=previous] + \stopsubjectlevel + +\stopsetups + +\startsetups document:stop + +\testpage[6] + +%startsubjectlevel[title=Colofon] +\startsectionlevel[title=Colofon,number=no,saveinlist=no] + + \starttabulate + \NC Author \NC Hans Hagen \NC \NR + \NC \CONTEXT \NC \contextversion \NC \NR + \NC \LUAMETATEX \NC \texengineversion \NC \NR + \NC Support \NC www.pragma-ade.com \NC \NR + \NC \NC contextgarden.net \NC \NR + \stoptabulate + +\stopsectionlevel +%stopsubjectlevel \stopsetups diff --git a/doc/context/sources/general/manuals/lowlevel/lowlevel.tex b/doc/context/sources/general/manuals/lowlevel/lowlevel.tex new file mode 100644 index 000000000..b958308a2 --- /dev/null +++ b/doc/context/sources/general/manuals/lowlevel/lowlevel.tex @@ -0,0 +1,39 @@ +% language=us runpath=texruns:manuals/lowlevel + +\environment lowlevel-style + +%D This is a bit if a cheat. The low level manuals are independent but I want an +%D overview document on the website. Therefore we use sectionlevels in the documents +%D that we we then overload here (we push the chapter level in front). + +\starttext + + \definesectionlevels + [default] + [{chapter,title}, + {section,subject}, + {subsection,subsubject}, + {subsubsection,subsubsubject}, + {subsubsubsection,subsubsubject}, + {subsubsubsubsection,subsubsubject}] + + \startdocument[title=lowlevel,color=middlegray] + \stopdocument + + \startsectionlevel[title=Conditionals] \component [lowlevel-conditionals] \stopsectionlevel + \startsectionlevel[title=Boxes] \component [lowlevel-boxes] \stopsectionlevel + \startsectionlevel[title=Expansion] \component [lowlevel-expansion] \stopsectionlevel + \startsectionlevel[title=Registers] \component [lowlevel-registers] \stopsectionlevel + \startsectionlevel[title=Macros] \component [lowlevel-macros] \stopsectionlevel + \startsectionlevel[title=Grouping] \component [lowlevel-grouping] \stopsectionlevel + \startsectionlevel[title=Security] \component [lowlevel-security] \stopsectionlevel + \startsectionlevel[title=Characters] \component [lowlevel-characters] \stopsectionlevel + \startsectionlevel[title=Scope] \component [lowlevel-scope] \stopsectionlevel + \startsectionlevel[title=Paragraphs] \component [lowlevel-paragraphs] \stopsectionlevel + \startsectionlevel[title=Alignments] \component [lowlevel-alignments] \stopsectionlevel + \startsectionlevel[title=Marks] \component [lowlevel-marks] \stopsectionlevel + \startsectionlevel[title=Inserts] \component [lowlevel-inserts] \stopsectionlevel + +\stoptext + + diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua index 199de001e..dc06a5f11 100644 --- a/scripts/context/lua/mtxrun.lua +++ b/scripts/context/lua/mtxrun.lua @@ -9233,7 +9233,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24819, stripped down to: 16424 +-- original size: 24815, stripped down to: 16424 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -25932,8 +25932,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 : 1027105 --- stripped bytes : 403441 +-- original bytes : 1027101 +-- stripped bytes : 403437 -- end library merge diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua index 199de001e..dc06a5f11 100644 --- a/scripts/context/stubs/mswin/mtxrun.lua +++ b/scripts/context/stubs/mswin/mtxrun.lua @@ -9233,7 +9233,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24819, stripped down to: 16424 +-- original size: 24815, stripped down to: 16424 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -25932,8 +25932,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 : 1027105 --- stripped bytes : 403441 +-- original bytes : 1027101 +-- stripped bytes : 403437 -- end library merge diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun index 199de001e..dc06a5f11 100644 --- a/scripts/context/stubs/unix/mtxrun +++ b/scripts/context/stubs/unix/mtxrun @@ -9233,7 +9233,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24819, stripped down to: 16424 +-- original size: 24815, stripped down to: 16424 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -25932,8 +25932,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 : 1027105 --- stripped bytes : 403441 +-- original bytes : 1027101 +-- stripped bytes : 403437 -- end library merge diff --git a/scripts/context/stubs/win64/mtxrun.lua b/scripts/context/stubs/win64/mtxrun.lua index 199de001e..dc06a5f11 100644 --- a/scripts/context/stubs/win64/mtxrun.lua +++ b/scripts/context/stubs/win64/mtxrun.lua @@ -9233,7 +9233,7 @@ do -- create closure to overcome 200 locals limit package.loaded["util-prs"] = package.loaded["util-prs"] or true --- original size: 24819, stripped down to: 16424 +-- original size: 24815, stripped down to: 16424 if not modules then modules={} end modules ['util-prs']={ version=1.001, @@ -25932,8 +25932,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 : 1027105 --- stripped bytes : 403441 +-- original bytes : 1027101 +-- stripped bytes : 403437 -- end library merge diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 49c89aecc..98286f8e9 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2021.09.06 11:44} +\newcontextversion{2021.09.13 09:37} %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 cbe239ec2..a39318d4b 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2021.09.06 11:44} +\edef\contextversion{2021.09.13 09:37} %D For those who want to use this: diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index e26f62fa3..68a07fb83 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.09.06 11:44} +\newcontextversion{2021.09.13 09:37} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index 3ad868f86..159c8ebc7 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -45,7 +45,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2021.09.06 11:44} +\edef\contextversion{2021.09.13 09:37} %D Kind of special: diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua index 8e8be6f95..7de108d4c 100644 --- a/tex/context/base/mkiv/font-ots.lua +++ b/tex/context/base/mkiv/font-ots.lua @@ -163,6 +163,8 @@ local trace_testruns = false registertracker("otf.testruns", function local forcediscretionaries = false local forcepairadvance = false -- for testing +local repeatablemultiples = context or false + directives.register("otf.forcediscretionaries",function(v) forcediscretionaries = v end) @@ -648,16 +650,52 @@ local function multiple_glyphs(head,start,multiple,skiphash,what,stop) -- what t insertnodeafter(head,start,n) start = n end - if what == true then - -- we're ok - elseif what > 1 then - local m = multiple[nofmultiples] - for i=2,what do - local n = copy_node(start) -- ignore components - resetinjection(n) - setchar(n,m) - insertnodeafter(head,start,n) - start = n + if what ~= true and repeatablemultiples then + -- This is just some experimental code; we might introduce gsub_extensible + -- some day instead. Beware: when we have a feature that mixes alternates and + -- multiples we need to make sure we don't handle the alternate string values + -- here. This might eventually become an lmtx only feature. + local kind = type(what) + local m, f, l + if kind == "string" then + local what, n = string.match(what,"^repeat(.-)[:=](%d+)$") + if what == "middle" then + m = tonumber(n) + elseif what == "first" then + f = tonumber(n) + elseif what == "last" then + l = tonumber(n) + end + elseif kind == "table" then + -- won't happen because currently we don't split these values + m = what.middle + f = what.first + l = what.last + end + if f or m or l then + if m and m > 1 and nofmultiples == 3 then + local middle = getnext(first) + for i=2,m do + local n = copynode(middle) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if f and f > 1 then + for i=2,f do + local n = copynode(first) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if l and l > 1 then + for i=2,l do + local n = copynode(start) -- ignore components + resetinjection(n) + insertnodeafter(head,start,n) + start = n + end + end end end end @@ -1052,7 +1090,7 @@ function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode, end return head, start, true elseif trace_bugs then - -- onetimemessage(currentfont,basechar,"no base anchors",report_fonts) + -- onetimemessage(currentfont,basechar,"no base anchors") logwarning("%s: mark %s is not anchored to %s",pref(dataset,sequence),gref(markchar),gref(basechar)) end elseif trace_bugs then @@ -1118,7 +1156,7 @@ function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlm end elseif trace_bugs then -- logwarning("%s: char %s is missing in font",pref(dataset,sequence),gref(basechar)) - onetimemessage(currentfont,basechar,"no base anchors",report_fonts) + onetimemessage(currentfont,basechar,"no base anchors") end elseif trace_bugs then logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1) @@ -1858,7 +1896,7 @@ function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup, end end elseif trace_bugs then - onetimemessage(currentfont,startchar,"no entry anchors",report_fonts) + onetimemessage(currentfont,startchar,"no entry anchors") end break end diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 28a8f41de..288067563 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -401,6 +401,8 @@ return { "insertmode", "insertmultiplier", "insertprogress", + "insertstorage", + "insertstoring", "insertunbox", "insertuncopy", "insertwidth", @@ -511,6 +513,7 @@ return { "tracingexpressions", "tracingfonts", "tracinghyphenation", + "tracinginserts", "tracingmarks", "tracingmath", "undent", @@ -864,6 +867,7 @@ return { "pageshrink", "pagestretch", "pagetotal", + "pagevsize", "par", "parfillleftskip", "parfillskip", diff --git a/tex/context/base/mkiv/node-fin.lua b/tex/context/base/mkiv/node-fin.lua index 42c24378f..b9ba169dd 100644 --- a/tex/context/base/mkiv/node-fin.lua +++ b/tex/context/base/mkiv/node-fin.lua @@ -203,7 +203,7 @@ local function process(attribute,head,inheritance,default) -- one attribute current = default end elseif current ~= outer then - head = insertnodebefore(head,stack,copy_node(nsdata[c])) + head = insertnodebefore(head,stack,copy_node(nsdata[c])) -- hm, what is c ... bug current = outer end elseif default and inheritance then diff --git a/tex/context/base/mkiv/node-tra.lua b/tex/context/base/mkiv/node-tra.lua index d3d35dae0..67435f1c7 100644 --- a/tex/context/base/mkiv/node-tra.lua +++ b/tex/context/base/mkiv/node-tra.lua @@ -77,6 +77,7 @@ local rule_code = nodecodes.rule local dir_code = nodecodes.dir local par_code = nodecodes.par local whatsit_code = nodecodes.whatsit +local passive_code = nodecodes.passive local dimenfactors = number.dimenfactors local formatters = string.formatters @@ -303,57 +304,68 @@ end nodes.showsimplelist = function(h,depth) showsimplelist(h,depth,0) end local function listtoutf(h,joiner,textonly,last,nodisc) - local w = { } - local n = 0 - local g = formatters["<%i>"] - local d = formatters["[%s|%s|%s]"] - while h do - local c, id = isglyph(h) - if c then - n = n + 1 ; w[n] = c >= 0 and utfchar(c) or g(c) - if joiner then - n = n + 1 ; w[n] = joiner - end - elseif id == disc_code then - local pre, pos, rep = getdisc(h) - if not nodisc then - n = n + 1 ; w[n] = d( - pre and listtoutf(pre,joiner,textonly) or "", - pos and listtoutf(pos,joiner,textonly) or "", - rep and listtoutf(rep,joiner,textonly) or "" - ) - elseif rep then - n = n + 1 ; w[n] = listtoutf(rep,joiner,textonly) or "" - end - if joiner then - n = n + 1 ; w[n] = joiner - end - elseif textonly then - if id == glue_code then - if getwidth(h) > 0 then - n = n + 1 ; w[n] = " " + if h then + local w = { } + local n = 0 + local g = formatters["<%i>"] + local d = formatters["[%s|%s|%s]"] + while h do + local c, id = isglyph(h) + if c then + n = n + 1 ; w[n] = c >= 0 and utfchar(c) or g(c) + if joiner then + n = n + 1 ; w[n] = joiner + end + elseif id == disc_code then + local pre, pos, rep = getdisc(h) + if not nodisc then + n = n + 1 ; w[n] = d( + pre and listtoutf(pre,joiner,textonly) or "", + pos and listtoutf(pos,joiner,textonly) or "", + rep and listtoutf(rep,joiner,textonly) or "" + ) + elseif rep then + n = n + 1 ; w[n] = listtoutf(rep,joiner,textonly) or "" + end + if joiner then + n = n + 1 ; w[n] = joiner + end + elseif id == passive_code then + -- smells like a bug in luatex + print("weird: passive node in listtoutf") + return "" + elseif textonly then + if id == glue_code then + if getwidth(h) > 0 then + n = n + 1 ; w[n] = " " + end + elseif id == hlist_code or id == vlist_code then + local l = getlist(h) + n = n + 1 ; w[n] = "[" + if l then + n = n + 1 ; w[n] = listtoutf(l,joiner,textonly,last,nodisc) + end + n = n + 1 ; w[n] = "]" end - elseif id == hlist_code or id == vlist_code then - n = n + 1 ; w[n] = "[" - n = n + 1 ; w[n] = listtoutf(getlist(h),joiner,textonly,last,nodisc) - n = n + 1 ; w[n] = "]" + else + n = n + 1 ; w[n] = "[-]" + end + if h == last then + break + else + h = getnext(h) end - else - n = n + 1 ; w[n] = "[-]" - end - if h == last then - break - else - h = getnext(h) end + return concat(w,"",1,(w[n] == joiner) and (n-1) or n) + else + return "" end - return concat(w,"",1,(w[n] == joiner) and (n-1) or n) end function nodes.listtoutf(h,joiner,textonly,last,nodisc) if h then local joiner = joiner == true and utfchar(0x200C) or joiner -- zwnj - return listtoutf(tonut(h),joiner,textonly,last and tonut(last),nodisc) + return listtoutf(tonut(h),joiner,textonly,last and tonut(last) or nil,nodisc) else return "" end diff --git a/tex/context/base/mkiv/page-inj.mkvi b/tex/context/base/mkiv/page-inj.mkvi index f1b520f5e..0adfca92d 100644 --- a/tex/context/base/mkiv/page-inj.mkvi +++ b/tex/context/base/mkiv/page-inj.mkvi @@ -33,8 +33,14 @@ \let\page_boxes_flush_after \clf_flushpageinjectionsafter \def\page_injections_flush_indeed - {\scrn_canvas_synchronize_set{\pageinjectionparameter\c!width}{\pageinjectionparameter\c!height}% - \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}% + {\begingroup + \setbox\scratchbox\normalhpack + {\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}% + \printpaperwidth \wd\scratchbox + \printpaperheight\ht\scratchbox + \scrn_canvas_synchronize_only + \invokepagehandler\v!normal{\box\scratchbox}% + \endgroup \scrn_canvas_synchronize_reset} \def\page_injections_flush_saved#name#parameters% diff --git a/tex/context/base/mkiv/page-mix.lua b/tex/context/base/mkiv/page-mix.lua index 7828b7e56..a4e08063d 100644 --- a/tex/context/base/mkiv/page-mix.lua +++ b/tex/context/base/mkiv/page-mix.lua @@ -251,12 +251,19 @@ local function preparesplit(specification) -- a rather large function report_state("fatal error, no list") return end - local head = getlist(list) or specification.originalhead + local head = nil + if getid(list) == hlist_code then + head = list + else + head = getlist(list) or specification.originalhead + end if not head then report_state("fatal error, no head") return end + slidenodes(head) -- we can have set prev's to nil to prevent backtracking + local discarded = { } local originalhead = head local originalwidth = specification.originalwidth or getwidth(list) @@ -441,6 +448,7 @@ local function preparesplit(specification) -- a rather large function if column == nofcolumns then column = 0 -- nicer in trace rest = head +-- rest = nil return false, 0 else local skipped @@ -637,7 +645,6 @@ local function preparesplit(specification) -- a rather large function end local function process_list(current,nxt) --- print(nuts.getpre(current),nuts.getpost(current)) local nxtid = nxt and getid(nxt) line = line + 1 local inserts, insertskips, nextskips, inserttotal = nil, 0, 0, 0 @@ -773,7 +780,6 @@ local function preparesplit(specification) -- a rather large function specification.rest = rest specification.overflow = overflow specification.discarded = discarded - setlist(getbox(specification.box)) return specification @@ -900,6 +906,7 @@ local function getsplit(result,n) end setprev(h) -- move up + local strutht = result.strutht local strutdp = result.strutdp local lineheight = strutht + strutdp @@ -908,6 +915,19 @@ local function getsplit(result,n) local v = new_vlist() setlist(v,h) + -- safeguard ... i need to figure this out some day + + local c = r.head + while c do + if c == result.rest then + report_state("flush, column %s, %s",n,"suspicous rest") + result.rest = nil + break + else + c = getnext(c) + end + end + -- local v = vpack(h,"exactly",height) if isglobal then -- option @@ -1067,7 +1087,10 @@ implement { arguments = "integer", actions = function(n) if result then - context(tonode(getsplit(result,n))) + local list = getsplit(result,n) + if list then + context(tonode(list)) + end end end, } @@ -1085,7 +1108,10 @@ implement { name = "mixflushrest", actions = function() if result then - context(tonode(getrest(result))) + local rest = getrest(result) + if rest then + context(tonode(rest)) + end end end } @@ -1094,7 +1120,10 @@ implement { name = "mixflushlist", actions = function() if result then - context(tonode(getlist(result))) + local list = getlist(result) + if list then + context(tonode(list)) + end end end } diff --git a/tex/context/base/mkiv/page-one.mkiv b/tex/context/base/mkiv/page-one.mkiv index 54e53035f..dbed7429a 100644 --- a/tex/context/base/mkiv/page-one.mkiv +++ b/tex/context/base/mkiv/page-one.mkiv @@ -63,6 +63,22 @@ % \fi % \fi} +% \unexpanded\def\page_one_command_set_vsize +% {\ifgridsnapping +% \ifcase\layoutlines +% \getrawnoflines\textheight +% \else +% \noflines\layoutlines +% \fi +% \global\vsize\noflines\openlineheight +% \else +% \global\vsize\textheight +% \fi +% \global\advance\vsize\d_page_adapts_delta +% % alternatively we could set it in builders.buildpage_filter +% % \ifdim\pagegoal<\maxdimen .. \fi +% \pagegoal\dimexpr\vsize-\d_page_floats_inserted_top-\d_page_floats_inserted_bottom\relax} + \unexpanded\def\page_one_command_set_vsize {\ifgridsnapping \ifcase\layoutlines @@ -75,10 +91,10 @@ \global\vsize\textheight \fi \global\advance\vsize\d_page_adapts_delta - % alternatively we could set it in builders.buildpage_filter - % \ifdim\pagegoal<\maxdimen .. \fi - \pagegoal\dimexpr\vsize-\d_page_floats_inserted_top-\d_page_floats_inserted_bottom\relax} - + % \pagegoal\dimexpr\vsize-\d_page_floats_inserted_top-\d_page_floats_inserted_bottom\relax} + % per 2021/9/9 : otherwise weird notes overlap with side floats + \settotalinsertionheight + \pagegoal\dimexpr\vsize-\totalinsertionheight\relax} % 1 = partial page, 2 = whole page, 3 = partial page diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 9c9066b38..2eaad3b9c 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 3812c41a2..05e942bc1 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/util-prs.lua b/tex/context/base/mkiv/util-prs.lua index 6fcc66082..f74bc3b12 100644 --- a/tex/context/base/mkiv/util-prs.lua +++ b/tex/context/base/mkiv/util-prs.lua @@ -572,9 +572,9 @@ end -- "1","2","3","4" -- "5","6","7","8" -- ]] --- + -- local mycsvsplitter = parsers.csvsplitter { numbers = true } --- + -- local list = mycsvsplitter(crap) inspect(list) -- and this is a slightly patched version of a version posted by Philipp Gesang diff --git a/tex/context/base/mkxl/buff-ver.mkxl b/tex/context/base/mkxl/buff-ver.mkxl index 3cde23d5e..fd49bd421 100644 --- a/tex/context/base/mkxl/buff-ver.mkxl +++ b/tex/context/base/mkxl/buff-ver.mkxl @@ -149,7 +149,7 @@ \installcommandhandler \??type {type} \??type \appendtoks - \frozen\instance\setuevalue{\currenttype}{\buff_verbatim_type{\currenttype}}% + \frozen\instance\protected\edefcsname\currenttype\endcsname{\buff_verbatim_type{\currenttype}}% \to \everydefinetype \appendtoks diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 61a039f6b..c9e67279a 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.09.06 11:44} +\newcontextversion{2021.09.13 09:37} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index a923267f2..97035d34e 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2021.09.06 11:44} +\immutable\edef\contextversion{2021.09.13 09:37} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt index dcafac025..f83fd8776 100644 --- a/tex/context/base/mkxl/font-ots.lmt +++ b/tex/context/base/mkxl/font-ots.lmt @@ -162,6 +162,8 @@ local trace_testruns = false registertracker("otf.testruns", function local forcediscretionaries = false local forcepairadvance = false -- for testing +local repeatlastmultiple = context and true + directives.register("otf.forcediscretionaries",function(v) forcediscretionaries = v end) @@ -650,11 +652,12 @@ end local function multiple_glyphs(head,start,multiple,skiphash,what,stop) -- what to do with skiphash matches here local nofmultiples = #multiple if nofmultiples > 0 then + local first = start resetinjection(start) setchar(start,multiple[1]) if nofmultiples > 1 then - local sn = getnext(start) - for k=2,nofmultiples do + -- local sn = getnext(start) + for i=2,nofmultiples do -- untested: -- -- while ignoremarks and marks[getchar(sn)] then @@ -662,20 +665,56 @@ local function multiple_glyphs(head,start,multiple,skiphash,what,stop) -- what t -- end local n = copynode(start) -- ignore components resetinjection(n) - setchar(n,multiple[k]) + setchar(n,multiple[i]) insertnodeafter(head,start,n) start = n end - if what == true then - -- we're ok - elseif what > 1 then - local m = multiple[nofmultiples] - for i=2,what do - local n = copynode(start) -- ignore components - resetinjection(n) - setchar(n,m) - insertnodeafter(head,start,n) - start = n + end + if what ~= true then + -- This is just some experimental code; we might introduce gsub_extensible + -- some day instead. Beware: when we have a feature that mixes alternates and + -- multiples we need to make sure we don't handle the alternate string values + -- here. + local kind = type(what) + local m, f, l + if kind == "string" then + local what, n = string.match(what,"^repeat(.-)[:=](%d+)$") + if what == "middle" then + m = tonumber(n) + elseif what == "first" then + f = tonumber(n) + elseif what == "last" then + l = tonumber(n) + end + elseif kind == "table" then + -- won't happen because currently we don't split these values + m = what.middle + f = what.first + l = what.last + end + if f or m or l then + if m and m > 1 and nofmultiples == 3 then + local middle = getnext(first) + for i=2,m do + local n = copynode(middle) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if f and f > 1 then + for i=2,f do + local n = copynode(first) -- ignore components + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if l and l > 1 then + for i=2,l do + local n = copynode(start) -- ignore components + resetinjection(n) + insertnodeafter(head,start,n) + start = n + end end end end @@ -1085,7 +1124,7 @@ function handlers.gpos_mark2base(head,start,dataset,sequence,markanchors,rlmode, end return head, start, true elseif trace_bugs then - -- onetimemessage(currentfont,basechar,"no base anchors",report_fonts) + -- onetimemessage(currentfont,basechar,"no base anchors") logwarning("%s: mark %s is not anchored to %s",pref(dataset,sequence),gref(markchar),gref(basechar)) end elseif trace_bugs then @@ -1152,7 +1191,7 @@ function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlm end elseif trace_bugs then -- logwarning("%s: char %s is missing in font",pref(dataset,sequence),gref(basechar)) - onetimemessage(currentfont,basechar,"no base anchors",report_fonts) + onetimemessage(currentfont,basechar,"no base anchors") end elseif trace_bugs then logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1) @@ -1900,7 +1939,7 @@ function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup, end end elseif trace_bugs then - onetimemessage(currentfont,startchar,"no entry anchors",report_fonts) + onetimemessage(currentfont,startchar,"no entry anchors") end break end diff --git a/tex/context/base/mkxl/lpdf-img.lmt b/tex/context/base/mkxl/lpdf-img.lmt index ecd154bbf..8e7427ae6 100644 --- a/tex/context/base/mkxl/lpdf-img.lmt +++ b/tex/context/base/mkxl/lpdf-img.lmt @@ -1239,38 +1239,41 @@ do s = - s end if s > 0 then - if s == 1 then - for i=1,y do - local r = d[i] - for j=1,x do - n = n + 1 ; t[n] = chars[r[j]] - end - end - elseif s == 2 then - for i=1,y do - local r = d[i] - for j=1,x do - local c = r[j] - n = n + 1 ; t[n] = chars[c[1]] - n = n + 1 ; t[n] = chars[c[2]] - n = n + 1 ; t[n] = chars[c[3]] - -- n = n + 1 ; t[n] = char(c[1],c[2],c[3]) -- test this - end - end - elseif s == 3 then - for i=1,y do - local r = d[i] - for j=1,x do - local c = r[j] - n = n + 1 ; t[n] = chars[c[1]] - n = n + 1 ; t[n] = chars[c[2]] - n = n + 1 ; t[n] = chars[c[3]] - n = n + 1 ; t[n] = chars[c[4]] - -- n = n + 1 ; t[n] = char(c[1],c[2],c[3],c[4]) -- test this - end - end - end - return concat(t) + -- if true then + return string.packrowscolumns(d) + -- end + -- if s == 1 then + -- for i=1,y do + -- local r = d[i] + -- for j=1,x do + -- n = n + 1 ; t[n] = chars[r[j]] + -- end + -- end + -- elseif s == 2 then + -- for i=1,y do + -- local r = d[i] + -- for j=1,x do + -- local c = r[j] + -- n = n + 1 ; t[n] = chars[c[1]] + -- n = n + 1 ; t[n] = chars[c[2]] + -- n = n + 1 ; t[n] = chars[c[3]] + -- -- n = n + 1 ; t[n] = char(c[1],c[2],c[3]) -- test this + -- end + -- end + -- elseif s == 3 then + -- for i=1,y do + -- local r = d[i] + -- for j=1,x do + -- local c = r[j] + -- n = n + 1 ; t[n] = chars[c[1]] + -- n = n + 1 ; t[n] = chars[c[2]] + -- n = n + 1 ; t[n] = chars[c[3]] + -- n = n + 1 ; t[n] = chars[c[4]] + -- -- n = n + 1 ; t[n] = char(c[1],c[2],c[3],c[4]) -- test this + -- end + -- end + -- end + -- return concat(t) else local z = d[0] and 0 or 1 if s == -1 then diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index 8d3fc7fde..e1637228a 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -47,6 +47,7 @@ local zlibcompresssize = xzip.compresssize local nuts = nodes.nuts local tonut = nodes.tonut +local tonode = nuts.tonode local pdfreference = lpdf.reference local pdfdictionary = lpdf.dictionary @@ -986,16 +987,18 @@ local localconverter = nil -- will be set local flushimage do - local rulecodes = nodes.rulecodes - local newrule = nodes.pool.rule + local newimagerule = nuts.pool.imagerule + local newboxrule = nuts.pool.boxrule local setprop = nuts.setprop local getprop = nuts.getprop + local setattrlist = nuts.setattrlist local getwhd = nuts.getwhd local flushlist = nuts.flushlist local getdata = nuts.getdata + local rulecodes = nodes.rulecodes local normalrule_code = rulecodes.normal local boxrule_code = rulecodes.box local imagerule_code = rulecodes.image @@ -1083,10 +1086,10 @@ local flushimage do else wd, ht, dp = l.width, l.height, l.depth end - local rule = newrule(wd,ht,dp) -- newboxrule - rule.subtype = boxrule_code - setprop(tonut(rule),"index",index) - return rule, wd, ht, dp + local rule = newboxrule(wd,ht,dp) + setattrlist(rule,true) + setprop(rule,"index",index) + return tonode(rule), wd, ht, dp else report("no box resource %S",index) end @@ -2749,9 +2752,9 @@ do local imagetypes = images.types -- pdf png jpg jp2 jbig2 stream local img_none = imagetypes.none - local rulecodes = nodes.rulecodes - - local setprop = nodes.nuts.setprop + local newimagerule = nuts.pool.imagerule + local setattrlist = nuts.setattrlist + local setprop = nuts.setprop local report_images = logs.reporter("backend","images") @@ -2759,7 +2762,6 @@ do local indices = { } local bpfactor = number.dimenfactors.bp - local imagerule_code = rulecodes.image function codeinjections.newimage(specification) return specification @@ -2849,14 +2851,14 @@ do embedimage(specification) end -- - local width = specification.width or 0 - local height = specification.height or 0 - local depth = specification.depth or 0 - -- newimagerule - local n = nodes.pool.rule(width,height,depth) - n.subtype = imagerule_code - setprop(tonut(n),"index",specification.index) - return n + local n = newimagerule( + specification.width or 0, + specification.height or 0, + specification.depth or 0 + ) + setattrlist(n,true) + setprop(n,"index",specification.index) + return tonode(n) end pdfincludeimage = function(index) diff --git a/tex/context/base/mkxl/meta-imp-bitmaps.mkxl b/tex/context/base/mkxl/meta-imp-bitmaps.mkxl index e7846a1e8..069b74207 100644 --- a/tex/context/base/mkxl/meta-imp-bitmaps.mkxl +++ b/tex/context/base/mkxl/meta-imp-bitmaps.mkxl @@ -251,6 +251,21 @@ end end + function graphics.bitmaps.manipulators.evening(b,m) + local xsize = b.xsize + local ysize = b.ysize + local data = b.data + local colorspace = b.colorspace + if colorspace == 1 then + for r=1,ysize do + local row = data[r] + for c=1,xsize do + row[c] = row[c] // 2 + end + end + end + end + context.startTEXpage() local b = graphics.bitmaps.load("hacker.jpg") graphics.bitmaps.manipulators.myframe(b,20) @@ -265,20 +280,34 @@ graphics.bitmaps.tocontext(b,50*65536,nil) context.stopTEXpage() - local m = table.setmetatableindex(function(t,k) local v = { k, k, k } t[k] = v return v end) + do + + local m = table.setmetatableindex(function(t,k) local v = { k, k, k } t[k] = v return v end) + + -- local c = { 255, 0, 0 } for i=0x00,0x1F do m[i] = c end + -- local c = { 0, 255, 0 } for i=0x20,0x3F do m[i] = c end + -- local c = { 0, 0, 255 } for i=0x40,0x5F do m[i] = c end + -- local c = { 255, 255, 0 } for i=0x60,0x7F do m[i] = c end + -- local c = { 255, 0, 255 } for i=0x80,0x9F do m[i] = c end + -- local c = { 0, 255, 255 } for i=0xA0,0xBF do m[i] = c end + -- local c = { 255, 255, 255 } for i=0xC0,0xDF do m[i] = c end + -- local c = { 0, 0, 0 } for i=0xE0,0xFF do m[i] = c end --- local c = { 255, 0, 0 } for i=0x00,0x1F do m[i] = c end --- local c = { 0, 255, 0 } for i=0x20,0x3F do m[i] = c end - local c = { 0, 0, 255 } for i=0x40,0x5F do m[i] = c end --- local c = { 255, 255, 0 } for i=0x60,0x7F do m[i] = c end --- local c = { 255, 0, 255 } for i=0x80,0x9F do m[i] = c end --- local c = { 0, 255, 255 } for i=0xA0,0xBF do m[i] = c end --- local c = { 255, 255, 255 } for i=0xC0,0xDF do m[i] = c end --- local c = { 0, 0, 0 } for i=0xE0,0xFF do m[i] = c end + local c = { 0, 0, 255 } for i=0x40,0x5F do m[i] = c end + local c = { 0, 255, 0 } for i=0x80,0x9F do m[i] = c end + local c = { 255, 0, 0 } for i=0xB0,0xCF do m[i] = c end + + context.startTEXpage() + local b = graphics.bitmaps.load("mill.png") + graphics.bitmaps.manipulators.colorize(b,m) + graphics.bitmaps.tocontext(b,50*65536,nil) + context.stopTEXpage() + + end context.startTEXpage() local b = graphics.bitmaps.load("mill.png") - graphics.bitmaps.manipulators.colorize(b,m) + graphics.bitmaps.manipulators.evening(b) graphics.bitmaps.tocontext(b,50*65536,nil) context.stopTEXpage() @@ -291,6 +320,8 @@ graphics.bitmaps.tocontext(b,50*65536,nil) }} +% This is inefficient because textext processes twice, so a "todo". + \startMPpage picture p ; p := textext("\MyImage{mill.png}") ; diff --git a/tex/context/base/mkxl/mlib-scn.lmt b/tex/context/base/mkxl/mlib-scn.lmt index d92ef1385..33aa74ad2 100644 --- a/tex/context/base/mkxl/mlib-scn.lmt +++ b/tex/context/base/mkxl/mlib-scn.lmt @@ -658,6 +658,11 @@ local function getparameterpath() end if type(v) == "table" then return injectpath(v,connector,close) + elseif type(v) == "string" then + local code = load("return " .. v) + if code then + return code() + end else return injectpair(0,0) end diff --git a/tex/context/base/mkxl/mult-aux.mkxl b/tex/context/base/mkxl/mult-aux.mkxl index ba0572d15..64623efe6 100644 --- a/tex/context/base/mkxl/mult-aux.mkxl +++ b/tex/context/base/mkxl/mult-aux.mkxl @@ -957,6 +957,9 @@ \expandafter\firstofoneargument \fi} +\permanent\def\ifcommandhandler#1#2% namespace name + {\ifcsname#1#2:\s!parent\endcsname} + % another set of (fast) helpers (grep for usage): \permanent\def\expandnamespaceparameter#1#2#3% \??xx \getp \c!xx \v!yy diff --git a/tex/context/base/mkxl/node-fin.lmt b/tex/context/base/mkxl/node-fin.lmt index 2e744a48a..4bf8663be 100644 --- a/tex/context/base/mkxl/node-fin.lmt +++ b/tex/context/base/mkxl/node-fin.lmt @@ -193,7 +193,7 @@ local function process(attribute,head,inheritance,default) -- one attribute current = default end elseif current ~= outer then - head = insertnodebefore(head,stack,copy_node(nsdata[c])) + head = insertnodebefore(head,stack,copy_node(nsdata[outer])) current = outer end elseif default and inheritance then diff --git a/tex/context/base/mkxl/node-nut.lmt b/tex/context/base/mkxl/node-nut.lmt index f78e1add6..8675ba05e 100644 --- a/tex/context/base/mkxl/node-nut.lmt +++ b/tex/context/base/mkxl/node-nut.lmt @@ -263,6 +263,8 @@ local nuts = { xscaled = direct.xscaled, yscaled = direct.yscaled, -- getxyoffsets = direct.getxyoffsets, + getspeciallist = direct.getspeciallist, + setspeciallist = direct.setspeciallist, } nodes.nuts = nuts diff --git a/tex/context/base/mkxl/node-res.lmt b/tex/context/base/mkxl/node-res.lmt index a1fa24bbd..4c456b263 100644 --- a/tex/context/base/mkxl/node-res.lmt +++ b/tex/context/base/mkxl/node-res.lmt @@ -183,6 +183,8 @@ local rule = register_nut(new_nut(rule_code)) -- local emptyrule = register_nut(new_nut(rule_code,rulecodes.empty)) -- setdirection(rule, lefttoright_code) local userrule = register_nut(new_nut(rule_code,rulecodes.user)) -- setdirection(rule, lefttoright_code) local outlinerule = register_nut(new_nut(rule_code,rulecodes.outline)) -- setdirection(rule, lefttoright_code) +local imagerule = register_nut(new_nut(rule_code,rulecodes.image)) -- setdirection(rule, lefttoright_code) +local boxrule = register_nut(new_nut(rule_code,rulecodes.box)) -- setdirection(rule, lefttoright_code) local hlist = register_nut(new_nut(nodecodes.hlist)) setdirection(hlist,lefttoright_code) local vlist = register_nut(new_nut(nodecodes.vlist)) setdirection(vlist,lefttoright_code) @@ -374,6 +376,22 @@ function nutpool.outlinerule(width,height,depth,line) -- w/h/d == nil will let t return n end +function nutpool.imagerule(width,height,depth) -- w/h/d == nil will let them adapt + local n = copy_nut(imagerule) + if width or height or depth then + setwhd(n,width,height,depth) + end + return n +end + +function nutpool.boxrule(width,height,depth) -- w/h/d == nil will let them adapt + local n = copy_nut(boxrule) + if width or height or depth then + setwhd(n,width,height,depth) + end + return n +end + function nutpool.leader(width,list) local n = copy_nut(cleader) if width then diff --git a/tex/context/base/mkxl/node-tra.lmt b/tex/context/base/mkxl/node-tra.lmt index 6fe2e2081..214c8a27c 100644 --- a/tex/context/base/mkxl/node-tra.lmt +++ b/tex/context/base/mkxl/node-tra.lmt @@ -307,57 +307,64 @@ end nodes.showsimplelist = function(h,depth) showsimplelist(h,depth,0) end local function listtoutf(h,joiner,textonly,last,nodisc) - local w = { } - local n = 0 - local g = formatters["<%i>"] - local d = formatters["[%s|%s|%s]"] - while h do - local c, id = isglyph(h) - if c then - n = n + 1 ; w[n] = c >= 0 and utfchar(c) or g(c) - if joiner then - n = n + 1 ; w[n] = joiner - end - elseif id == disc_code then - local pre, pos, rep = getdisc(h) - if not nodisc then - n = n + 1 ; w[n] = d( - pre and listtoutf(pre,joiner,textonly) or "", - pos and listtoutf(pos,joiner,textonly) or "", - rep and listtoutf(rep,joiner,textonly) or "" - ) - elseif rep then - n = n + 1 ; w[n] = listtoutf(rep,joiner,textonly) or "" - end - if joiner then - n = n + 1 ; w[n] = joiner - end - elseif textonly then - if id == glue_code then - if getwidth(h) > 0 then - n = n + 1 ; w[n] = " " + if h then + local w = { } + local n = 0 + local g = formatters["<%i>"] + local d = formatters["[%s|%s|%s]"] + while h do + local c, id = isglyph(h) + if c then + n = n + 1 ; w[n] = c >= 0 and utfchar(c) or g(c) + if joiner then + n = n + 1 ; w[n] = joiner + end + elseif id == disc_code then + local pre, pos, rep = getdisc(h) + if not nodisc then + n = n + 1 ; w[n] = d( + pre and listtoutf(pre,joiner,textonly) or "", + pos and listtoutf(pos,joiner,textonly) or "", + rep and listtoutf(rep,joiner,textonly) or "" + ) + elseif rep then + n = n + 1 ; w[n] = listtoutf(rep,joiner,textonly) or "" + end + if joiner then + n = n + 1 ; w[n] = joiner + end + elseif textonly then + if id == glue_code then + if getwidth(h) > 0 then + n = n + 1 ; w[n] = " " + end + elseif id == hlist_code or id == vlist_code then + local l = getlist(h) + n = n + 1 ; w[n] = "[" + if l then + n = n + 1 ; w[n] = listtoutf(l,joiner,textonly,last,nodisc) + end + n = n + 1 ; w[n] = "]" end - elseif id == hlist_code or id == vlist_code then - n = n + 1 ; w[n] = "[" - n = n + 1 ; w[n] = listtoutf(getlist(h),joiner,textonly,last,nodisc) - n = n + 1 ; w[n] = "]" + else + n = n + 1 ; w[n] = "[-]" + end + if h == last then + break + else + h = getnext(h) end - else - n = n + 1 ; w[n] = "[-]" - end - if h == last then - break - else - h = getnext(h) end + return concat(w,"",1,(w[n] == joiner) and (n-1) or n) + else + return "" end - return concat(w,"",1,(w[n] == joiner) and (n-1) or n) end function nodes.listtoutf(h,joiner,textonly,last,nodisc) if h then local joiner = joiner == true and utfchar(0x200C) or joiner -- zwnj - return listtoutf(tonut(h),joiner,textonly,last and tonut(last),nodisc) + return listtoutf(tonut(h),joiner,textonly,last and tonut(last) or nil,nodisc) else return "" end diff --git a/tex/context/base/mkxl/page-ini.mkxl b/tex/context/base/mkxl/page-ini.mkxl index 71158e0a7..e179b6d03 100644 --- a/tex/context/base/mkxl/page-ini.mkxl +++ b/tex/context/base/mkxl/page-ini.mkxl @@ -353,18 +353,20 @@ \newconstant\c_page_force_strut_depth_trace_mode -\installtextracker - {otr.forcestrutdepth} - {\c_page_force_strut_depth_trace_mode\plusone} - {\c_page_force_strut_depth_trace_mode\zerocount} - -\installoutputroutine\forcestrutdepth - {\clf_forcestrutdepth\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode - \unvbox\normalpagebox} - -\installoutputroutine\forcestrutdepthplus % experimental - {\clf_forcestrutdepthplus\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode - \unvbox\normalpagebox} +% \installtextracker +% {otr.forcestrutdepth} +% {\c_page_force_strut_depth_trace_mode\plusone} +% {\c_page_force_strut_depth_trace_mode\zerocount} + +% todo: only in mvl! + +% \installoutputroutine\forcestrutdepth +% {\clf_forcestrutdepth\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode +% \unvbox\normalpagebox} + +% \installoutputroutine\forcestrutdepthplus % experimental +% {\clf_forcestrutdepthplus\normalpagebox\strutdp\c_page_force_strut_depth_trace_mode +% \unvbox\normalpagebox} % maybe better: % diff --git a/tex/context/base/mkxl/page-inj.mklx b/tex/context/base/mkxl/page-inj.mklx index fda757dbe..8732e2628 100644 --- a/tex/context/base/mkxl/page-inj.mklx +++ b/tex/context/base/mkxl/page-inj.mklx @@ -33,8 +33,14 @@ \let\page_boxes_flush_after \clf_flushpageinjectionsafter \def\page_injections_flush_indeed - {\scrn_canvas_synchronize_set{\pageinjectionparameter\c!width}{\pageinjectionparameter\c!height}% - \invokepagehandler\v!normal{\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}% + {\begingroup + \setbox\scratchbox\normalhpack + {\inheritedpageinjectionframed{\texsetup\p_page_injectionalternative_rederingsetup}}% + \printpaperwidth \wd\scratchbox + \printpaperheight\ht\scratchbox + \scrn_canvas_synchronize_only + \invokepagehandler\v!normal{\box\scratchbox}% + \endgroup \scrn_canvas_synchronize_reset} \def\page_injections_flush_saved#name#parameters% diff --git a/tex/context/base/mkxl/page-ins.mkxl b/tex/context/base/mkxl/page-ins.mkxl index 978f62f7c..b1e0d7bd7 100644 --- a/tex/context/base/mkxl/page-ins.mkxl +++ b/tex/context/base/mkxl/page-ins.mkxl @@ -60,7 +60,7 @@ \newtoks\t_page_inserts_list -\mutable\let\doprocessinsert\relax % probably kind of obsolete now +\mutable\let\doprocessinsert\gobbleoneargument % probably kind of obsolete now %D Maybe some day we will move settings here. @@ -87,14 +87,14 @@ \permanent\protected\def\processinsertions {\the\t_page_inserts_list} -\permanent\protected\def\synchronizeinsertions - {\let\doprocessinsert\page_inserts_synchronize - \processinsertions} - -\protected\def\page_inserts_synchronize#1% yes or no - {\ifvoid#1\else - \page_inserts_inject#1{\unvbox#1}% - \fi} +% \permanent\protected\def\synchronizeinsertions +% {\let\doprocessinsert\page_inserts_synchronize +% \processinsertions} +% +% \protected\def\page_inserts_synchronize#1% yes or no +% {\ifvoid#1\else +% \page_inserts_inject#1{\unvbox#1}% +% \fi} \permanent\protected\def\doifelseinsertion#1% {\ifcsname\??insertionnumber#1\endcsname @@ -180,9 +180,10 @@ number \currentinsertionnumber }% \relax - \t_page_inserts_list\expandafter\expandafter\expandafter - {\expandafter\the\expandafter\t_page_inserts_list - \expandafter\page_inserts_process\csname\??insertionnumber\currentinsertion\endcsname}% +% \t_page_inserts_list\expandafter\expandafter\expandafter +% {\expandafter\the\expandafter\t_page_inserts_list +% \expandafter\page_inserts_process\csname\??insertionnumber\currentinsertion\endcsname}% + \xtoksapp\t_page_inserts_list{\page_inserts_process{\currentinsertion}}% \page_inserts_set_multiplier\currentinsertionnumber\plusthousand \page_inserts_set_distance \currentinsertionnumber\zeropoint \page_inserts_set_limit \currentinsertionnumber\maxdimen diff --git a/tex/context/base/mkxl/page-mix.mkxl b/tex/context/base/mkxl/page-mix.mkxl index daafa4843..446185e43 100644 --- a/tex/context/base/mkxl/page-mix.mkxl +++ b/tex/context/base/mkxl/page-mix.mkxl @@ -31,6 +31,24 @@ % offsets (inner ones, so we change the hsize ... needed with backgrounds % when no content we currently loose the page +% nasty test case from mailing list (rest issue) +% +% \starttext +% . \blank[32*big] +% \startitemize +% \item 0 \startchoice[text] \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice \blank[6*big] +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \item 0 \startchoice \item 0 \item 0 \item 0 \item 0 \stopchoice +% \stopitemize +% \stoptext + \registerctxluafile{page-mix}{} \unprotect diff --git a/tex/context/base/mkxl/page-one.mkxl b/tex/context/base/mkxl/page-one.mkxl index 4a4ce6014..116f2146d 100644 --- a/tex/context/base/mkxl/page-one.mkxl +++ b/tex/context/base/mkxl/page-one.mkxl @@ -35,6 +35,39 @@ \protected\def\page_one_command_set_float_hsize {\global\hsize\textwidth} +%D It's complicated: + +\newconditional\c_page_one_set_vsize_tmp + +\installtextracker{otr.insertheights} + {\settrue\c_page_one_set_vsize_tmp} + {\setfalse\c_page_one_set_vsize_tmp} + +\def\page_one_command_set_vsize_tmp + {\settotalinsertionheight + \writestatus + {set vsize one} + {insert heights=\the\insertheights, + total insertion height=\the\totalinsertionheight, + delta=\the\dimexpr\insertheights-\totalinsertionheight}% + \page_one_command_set_vsize_new} + +\def\page_one_command_set_vsize_old + {\settotalinsertionheight + \pagegoal\dimexpr + \vsize + -\totalinsertionheight + \relax} + +\def\page_one_command_set_vsize_new + {\pagegoal\dimexpr + \vsize + -\d_page_floats_inserted_top + -\d_page_floats_inserted_bottom + -\insertheights + \relax + \insertheights\zeropoint} + \protected\def\page_one_command_set_vsize {\ifgridsnapping \ifcase\layoutlines @@ -49,12 +82,14 @@ \global\advance\vsize\d_page_adapts_delta % alternatively we could set it in builders.buildpage_filter % \ifdim\pagegoal<\maxdimen .. \fi - \pagegoal\dimexpr - \vsize - -\d_page_floats_inserted_top - -\d_page_floats_inserted_bottom - -\insertheights - \relax} + % \writestatus{!!!!!!!!}{\the\vsize-> v:\the\pagevsize,g:\the\pagegoal,t:\the\pagetotal,i:\the\insertheights}% + \ifconditional\c_page_one_set_vsize_tmp + \page_one_command_set_vsize_tmp + \orelse\ifzeropt\insertheights + \page_one_command_set_vsize_old + \else + \page_one_command_set_vsize_new + \fi} % 1 = partial page, 2 = whole page, 3 = partial page @@ -581,14 +616,24 @@ % \page_floats_report_total % \dohandlenextfloatindent} +% \def\page_one_place_float_here_indeed +% {\ifgridsnapping +% % otherwise real bad outcome +% \else +% % this was not really applied (delayed) +% % \baselinecorrection % this has to be done better (and definitely not in column mode) +% % so we now use this: +% \checkprevdepth +% \fi +% \doplacefloatbox +% \page_floats_report_total +% \dohandlenextfloatindent} + \def\page_one_place_float_here_indeed {\ifgridsnapping % otherwise real bad outcome \else - % this was not really applied (delayed) - % \baselinecorrection % this has to be done better (and definitely not in column mode) - % so we now use this: - \checkprevdepth + \forcestrutdepth \fi \doplacefloatbox \page_floats_report_total diff --git a/tex/context/base/mkxl/page-pcl.mkxl b/tex/context/base/mkxl/page-pcl.mkxl index 3ef07c9c5..b9838e771 100644 --- a/tex/context/base/mkxl/page-pcl.mkxl +++ b/tex/context/base/mkxl/page-pcl.mkxl @@ -100,20 +100,6 @@ %D \unknown -\protected\def\page_col_command_set_vsize % \page_one_command_set_vsize minus the pagegoal setting - {\ifgridsnapping - \ifcase\layoutlines - \getrawnoflines\textheight - \else - \noflines\layoutlines - \fi - \global\vsize\noflines\openlineheight - \else - \global\vsize\textheight - \fi} - -%D \unknown - \def\page_col_registered_text_area_b#1% {\begingroup \makeupwidth\d_page_col_column_width @@ -234,6 +220,8 @@ \global\advance\c_page_col_current\plusone \fi % + \page_col_notes_synchronize + % \page_col_command_set_vsize \page_col_command_set_hsize} @@ -719,8 +707,8 @@ \c!direction=\v!normal] \appendtoks % could become an option - \frozen\instance\setuevalue{\e!start\currentpagecolumns}{\startpagecolumns[\currentpagecolumns]}% - \frozen\instance\setuevalue{\e!stop \currentpagecolumns}{\stoppagecolumns}% + \frozen\instance\protected\edefcsname\e!start\currentpagecolumns\endcsname{\startpagecolumns[\currentpagecolumns]}% + \frozen\instance\protected\edefcsname\e!stop \currentpagecolumns\endcsname{\stoppagecolumns}% \to \everydefinepagecolumns \def\page_col_pickup_preceding @@ -754,6 +742,47 @@ \endgroup \fi} +% \let\page_col_notes_initialize \relax +% \let\page_col_notes_synchronize\relax +% \let\page_col_notes_reset \relax +% +% \protected\def\page_col_command_set_vsize % \page_one_command_set_vsize minus the pagegoal setting +% {\ifgridsnapping +% \ifcase\layoutlines +% \getrawnoflines\textheight +% \else +% \noflines\layoutlines +% \fi +% \global\vsize\noflines\openlineheight +% \else +% \global\vsize\textheight +% \fi} + +\newconditional\c_page_col_notes_lastcolumn + +\def\page_col_notes_synchronize + {\insertstoring\zerocount + \ifnum\c_page_col_current=\c_page_col_n_of_columns\relax + \strc_notes_process\page_col_notes_inject + \ifconditional\c_page_col_notes_lastcolumn + \insertstoring\plusone + \fi + \else + \strc_notes_process\page_col_notes_delay + \ifconditional\c_page_col_notes_lastcolumn + \insertstoring\plustwo + \fi + \fi} + +\def\page_col_notes_delay {\setfalse\c_page_col_notes_lastcolumn\ifcstok{\noteparameter\c!location}\v!lastcolumn\settrue\c_page_col_notes_lastcolumn\insertstorage\currentnoteinsertionnumber\plusone \fi} +\def\page_col_notes_inject{\setfalse\c_page_col_notes_lastcolumn\ifcstok{\noteparameter\c!location}\v!lastcolumn\settrue\c_page_col_notes_lastcolumn\insertstorage\currentnoteinsertionnumber\zerocount\fi} + +\def\page_col_notes_initialize {\insertstoring\zerocount\strc_notes_process\page_col_notes_delay} +\def\page_col_notes_reset {\insertstoring\zerocount\strc_notes_process\page_col_notes_inject} + +\protected\def\page_col_command_set_vsize % different ! + {\page_one_command_set_vsize} + \permanent\tolerant\protected\def\startpagecolumns[#1]% {\begingroup \begingroup @@ -823,6 +852,8 @@ % \setupfloats[\c!ntop=\plusthousand]% % \setupfloats[\c!nbottom=\plusthousand]% + % + \page_col_notes_initialize % \page_col_command_set_vsize \page_col_command_set_hsize @@ -843,6 +874,7 @@ \page_otr_command_set_vsize \page_otr_command_set_hsize \page + \page_col_notes_reset \endgroup} \protected\def\page_col_stop_nop diff --git a/tex/context/base/mkxl/page-sid.mkxl b/tex/context/base/mkxl/page-sid.mkxl index dccfcbce9..20e92ad19 100644 --- a/tex/context/base/mkxl/page-sid.mkxl +++ b/tex/context/base/mkxl/page-sid.mkxl @@ -84,7 +84,7 @@ \newcount \c_page_sides_m_of_lines \newconditional \c_page_sides_delayed -\newconditional \c_page_sides_check_same_page +%newconditional \c_page_sides_check_same_page \newif \iftracesidefloats % public (might change) @@ -397,24 +397,31 @@ %D preceding material has more depth than that already. This way anchoring %D becomes predictable. +% \protected\def\page_sides_force_depth +% {\iftracesidefloats +% \begingroup +% \c_page_force_strut_depth_trace_mode\plusone +% \ifconditional\c_page_sides_check_same_page +% \forcestrutdepthplus +% \else +% \forcestrutdepth +% \fi +% \endgroup +% \else +% \ifconditional\c_page_sides_check_same_page +% \forcestrutdepthplus +% \else +% \forcestrutdepth +% \fi +% \fi +% \page_otr_command_set_vsize} % new + \protected\def\page_sides_force_depth {\iftracesidefloats - \begingroup - \c_page_force_strut_depth_trace_mode\plusone - \ifconditional\c_page_sides_check_same_page - \forcestrutdepthplus - \else - \forcestrutdepth - \fi - \endgroup - \else - \ifconditional\c_page_sides_check_same_page - \forcestrutdepthplus - \else - \forcestrutdepth - \fi + \enabletrackers[otr.forcestrutdepth]% \c_page_force_strut_depth_trace_mode\plusone \fi - \page_otr_command_set_vsize} % new + \forcestrutdepth + \page_otr_command_set_vsize} % new, no longer really needed \def\page_sides_flush_floats {\par @@ -781,18 +788,18 @@ \def\page_sides_analyse_space {\page_sides_analyse_space_stage_one - \ifconditional\c_page_sides_check_same_page - \ifdim\d_spac_prevcontent>\zeropoint - \ifdim\dimexpr\scratchdimenone+\d_spac_prevcontent>\scratchdimentwo - \clf_pushatsame - \setbox\scratchbox\vpack{\clf_popatsame}% - \page - \box\scratchbox - \vskip-\lineskip - \page_sides_analyse_space_stage_one - \fi - \fi - \fi + % \ifconditional\c_page_sides_check_same_page + % \ifdim\d_spac_prevcontent>\zeropoint + % \ifdim\dimexpr\scratchdimenone+\d_spac_prevcontent>\scratchdimentwo + % \clf_pushatsame + % \setbox\scratchbox\vpack{\clf_popatsame}% + % \page + % \box\scratchbox + % \vskip-\lineskip + % \page_sides_analyse_space_stage_one + % \fi + % \fi + % \fi \page_sides_analyse_space_stage_two} %D As we have no clear end of one or more paragraphs we only have pre float diff --git a/tex/context/base/mkxl/spac-ver.lmt b/tex/context/base/mkxl/spac-ver.lmt index 26ad8e43a..cd6dd46ad 100644 --- a/tex/context/base/mkxl/spac-ver.lmt +++ b/tex/context/base/mkxl/spac-ver.lmt @@ -2331,14 +2331,14 @@ do end local trace = false - local last = nil + -- local last = nil local vmode_code = tex.modelevels.vertical local temp_code = nodecodes.temp local texgetnest = tex.getnest local texgetlist = tex.getlist local getnodetail = nodes.tail - trackers.register("vspacing.forcestrutdepth",function(v) trace = v end) + -- trackers.register("vspacing.forcestrutdepth",function(v) trace = v end) -- abs : negative is inner @@ -2375,69 +2375,144 @@ do actions = vspacing.checkstrutdepth, } - function vspacing.forcestrutdepth(n,depth,trace_mode,plus) - local box = texgetbox(n) - if box then - box = tonut(box) - local head = getlist(box) - if head then - local tail = find_node_tail(head) - if tail then - if getid(tail) == hlist_code then - local dp = getdepth(tail) - if dp < depth then - setdepth(tail,depth) - outer.prevdepth = depth - if trace or trace_mode > 0 then - nuts.setvisual(tail,"depth") - end - end + -- function vspacing.forcestrutdepth(n,depth,trace_mode,plus) + -- local box = texgetbox(n) + -- if box then + -- box = tonut(box) + -- local head = getlist(box) + -- if head then + -- local tail = find_node_tail(head) + -- if tail then + -- if getid(tail) == hlist_code then + -- local dp = getdepth(tail) + -- if dp < depth then + -- setdepth(tail,depth) + -- outer.prevdepth = depth + -- if trace or trace_mode > 0 then + -- nuts.setvisual(tail,"depth") + -- end + -- end + -- end + -- -- last = nil + -- -- if plus then + -- -- -- penalty / skip ... + -- -- local height = 0 + -- -- local sofar = 0 + -- -- local same = false + -- -- local seen = false + -- -- local list = { } + -- -- last = nil + -- -- while tail do + -- -- local id = getid(tail) + -- -- if id == hlist_code or id == vlist_code then + -- -- local w, h, d = getwhd(tail) + -- -- height = height + h + d + sofar + -- -- sofar = 0 + -- -- last = tail + -- -- elseif id == kern_code then + -- -- sofar = sofar + getkern(tail) + -- -- elseif id == glue_code then + -- -- if seen then + -- -- sofar = sofar + getwidth(tail) + -- -- seen = false + -- -- else + -- -- break + -- -- end + -- -- elseif id == penalty_code then + -- -- local p = getpenalty(tail) + -- -- if p >= 10000 then + -- -- same = true + -- -- seen = true + -- -- else + -- -- break + -- -- end + -- -- else + -- -- break + -- -- end + -- -- tail = getprev(tail) + -- -- end + -- -- texsetdimen("global","d_spac_prevcontent",same and height or 0) + -- -- end + -- end + -- end + -- end + -- end + + local hlist_code = nodes.nodecodes.hlist + local line_code = nodes.listcodes.line + + local nuts = nodes.nuts + local getid = nuts.getid + local getsubtype = nuts.getsubtype + local getdepth = nuts.getdepth + local setdepth = nuts.setdepth + local gettotal = nuts.gettotal + local getspeciallist = nuts.getspeciallist + local setspeciallist = nuts.setspeciallist + + local triggerbuildpage = tex.triggerbuildpage + + local texgetdimen = tex.getdimen + local texsetdimen = tex.setdimen + local texgetnest = tex.getnest + local texget = tex.get + local texset = tex.set + + local trace = false trackers.register("otr.forcestrutdepth", function(v) + trace = v and function(n) + nuts.setvisual(nuts.tonut(n),nodes.visualizers.modes.depth) + end + end) + + function vspacing.forcestrutdepth() + -- check if in mvl + if texgetnest("ptr") == 0 then + triggerbuildpage() -- return true when mvl + local head, tail = getspeciallist("page_head") + if tail and getid(tail) == hlist_code and getsubtype(tail) == line_code then -- isline(tail) + local strutdp = texgetdimen("strutdp") + local delta = strutdp - getdepth(tail) + if delta > 0 then + setdepth(tail,strutdp) + texset("pagetotal",texget("pagetotal") + delta) + texset("pagedepth",strutdp) + if trace then + trace(tail) end - last = nil - if plus then - -- penalty / skip ... - local height = 0 - local sofar = 0 - local same = false - local seen = false - local list = { } - last = nil - while tail do - local id = getid(tail) - if id == hlist_code or id == vlist_code then - local w, h, d = getwhd(tail) - height = height + h + d + sofar - sofar = 0 - last = tail - elseif id == kern_code then - sofar = sofar + getkern(tail) - elseif id == glue_code then - if seen then - sofar = sofar + getwidth(tail) - seen = false - else - break - end - elseif id == penalty_code then - local p = getpenalty(tail) - if p >= 10000 then - same = true - seen = true - else - break - end - else - break - end - tail = getprev(tail) - end - texsetdimen("global","d_spac_prevcontent",same and height or 0) + end + end + else + local nest = texgetnest() + -- if abs(nest.mode) == vmode_code and nest.head then + local tail = nest.tail + if tail.id == hlist_code and tail.subtype == line_code then + local strutdp = texgetdimen("strutdp") + if tail.depth < strutdp then + tail.depth = strutdp + end + nest.prevdepth = strutdp + if trace then + trace(tail) end end - end + -- end end end + -- interfaces.implement { + -- name = "removelastline", + -- actions = function() + -- local h, t = getspeciallist("page_head") + -- if t and getid(t) == hlist_code and getsubtype(t) == line_code then + -- local total = gettotal(t) + -- h = remove_node(h,t,true) + -- setspeciallist(h) + -- texset("pagetotal",texget("pagetotal") - total) + -- -- set prevdepth + -- end + -- end + -- } + function vspacing.pushatsame() -- needs better checking ! if last then -- setsplit @@ -2488,18 +2563,25 @@ do scope = "private" } - implement { - name = "forcestrutdepth", - arguments = { "integer", "dimension", "integer" }, - actions = vspacing.forcestrutdepth, - scope = "private" - } + -- implement { + -- name = "forcestrutdepth", + -- arguments = { "integer", "dimension", "integer" }, + -- actions = vspacing.forcestrutdepth, + -- scope = "private" + -- } + + -- implement { + -- name = "forcestrutdepthplus", + -- arguments = { "integer", "dimension", "integer", true }, + -- actions = vspacing.forcestrutdepth, + -- scope = "private" + -- } implement { - name = "forcestrutdepthplus", - arguments = { "integer", "dimension", "integer", true }, + name = "forcestrutdepth", + public = true, + protected = true, actions = vspacing.forcestrutdepth, - scope = "private" } implement { diff --git a/tex/context/base/mkxl/strc-mat.mkxl b/tex/context/base/mkxl/strc-mat.mkxl index 94a273f80..5f929b5db 100644 --- a/tex/context/base/mkxl/strc-mat.mkxl +++ b/tex/context/base/mkxl/strc-mat.mkxl @@ -144,15 +144,15 @@ \definelist[\v!formula] -\permanent\defcsname\e!start\v!formula\endcsname{\strc_formulas_start_formula{}} -\permanent\defcsname\e!stop \v!formula\endcsname{\strc_formulas_stop_formula} +\permanent\protected\defcsname\e!start\v!formula\endcsname{\strc_formulas_start_formula{}} +\permanent\protected\defcsname\e!stop \v!formula\endcsname{\strc_formulas_stop_formula} \let\strc_formulas_start_formula\relax % defined later \let\strc_formulas_stop_formula \relax % defined later \permanent\tolerant\protected\def\defineformulaalternative[#1]#*[#2]#*[#3]% - {\frozen\instance\defcsname\e!start#1\v!formula\endcsname{#2}% - \frozen\instance\defcsname\e!stop #1\v!formula\endcsname{#3}} + {\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 diff --git a/tex/context/base/mkxl/strc-not.mklx b/tex/context/base/mkxl/strc-not.mklx index 857e7ce24..3bc6bf581 100644 --- a/tex/context/base/mkxl/strc-not.mklx +++ b/tex/context/base/mkxl/strc-not.mklx @@ -419,7 +419,8 @@ \doifelseinsertion\currentnote \donothing {\defineinsertion[\currentnote]% could be an option - \normalexpanded{\t_strc_notes{\the\t_strc_notes\noexpand\strc_notes_process_list{\currentnote}}}}% +% \normalexpanded{\t_strc_notes{\the\t_strc_notes\noexpand\strc_notes_process_list{\currentnote}}}}% + \xtoksapp\t_strc_notes{\noexpand\strc_notes_process_list{\currentnote}}}% \letnoteparameter\s!insert\currentnote \definenotation[\currentnote][\c!type=\v!note]% \else diff --git a/tex/context/base/mkxl/syst-ini.mkxl b/tex/context/base/mkxl/syst-ini.mkxl index 911d0144b..a873d15a3 100644 --- a/tex/context/base/mkxl/syst-ini.mkxl +++ b/tex/context/base/mkxl/syst-ini.mkxl @@ -779,6 +779,12 @@ \showboxbreadth \maxcount \showboxdepth \maxcount} +\permanent\protected\def\tracingless + {\tracingall + \tracingoutput \zerocount + \showboxbreadth \maxcount + \showboxdepth \plusten} + \permanent\protected\def\loggingall {\tracingall \tracingonline \zerocount} diff --git a/tex/context/base/mkxl/trac-vis.lmt b/tex/context/base/mkxl/trac-vis.lmt index 48e8ceeb8..3300d2f75 100644 --- a/tex/context/base/mkxl/trac-vis.lmt +++ b/tex/context/base/mkxl/trac-vis.lmt @@ -109,23 +109,6 @@ local a_layer = attributes.private("viewerlayer") local enableaction = nodes.tasks.enableaction --- local trace_hbox --- local trace_vbox --- local trace_vtop --- local trace_kern --- local trace_glue --- local trace_penalty --- local trace_fontkern --- local trace_strut --- local trace_whatsit --- local trace_user --- local trace_math --- local trace_italic --- local trace_discretionary --- local trace_expansion --- local trace_line --- local trace_space - local report_visualize = logs.reporter("visualize") local modes = { @@ -161,6 +144,8 @@ local modes = { insert = 0x4000000, } +visualizers.modes = modes + local usedfont, exheight, emwidth local l_penalty, l_glue, l_kern, l_fontkern, l_hbox, l_vbox, l_vtop, l_strut, l_whatsit, l_glyph, l_user, l_math, l_marginkern, l_mathlistkern, l_italic, l_origin, l_discretionary, l_expansion, l_line, l_space, l_depth, l_dir, l_whatsit, l_mark, l_insert @@ -280,7 +265,7 @@ local function setvisual(n,a,what,list) -- this will become more efficient when else a = a | preset_all end - else + elseif type(n) == "string" then for s in gmatch(n,"[a-z]+") do local m = modes[s] if not m then @@ -291,6 +276,8 @@ local function setvisual(n,a,what,list) -- this will become more efficient when a = a | m end end + elseif type(n) == "number" then + a = a | n end if not a or a == 0 or a == unsetvalue then return unsetvalue diff --git a/tex/context/base/mkxl/typo-bld.lmt b/tex/context/base/mkxl/typo-bld.lmt index d9cd78385..31cc0bb59 100644 --- a/tex/context/base/mkxl/typo-bld.lmt +++ b/tex/context/base/mkxl/typo-bld.lmt @@ -259,8 +259,8 @@ function builders.buildpage_filter(groupcode) end end -registercallback('vpack_filter', builders.vpack_filter, "vertical spacing etc") -registercallback('buildpage_filter', builders.buildpage_filter, "vertical spacing etc (mvl)") +registercallback('vpack_filter', builders.vpack_filter, "vertical spacing etc") +registercallback('buildpage_filter', builders.buildpage_filter, "vertical spacing etc (mvl)") statistics.register("v-node processing time", function() return statistics.elapsedseconds(builders) diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index c83cc1320..66e8b627e 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2021-09-06 11:44 +-- merge date : 2021-09-13 09:37 do -- begin closure to overcome local limits and interference @@ -26899,6 +26899,7 @@ local trace_compruns=false registertracker("otf.compruns",function(v) trace_com local trace_testruns=false registertracker("otf.testruns",function(v) trace_testruns=v end) local forcediscretionaries=false local forcepairadvance=false +local repeatablemultiples=context or false directives.register("otf.forcediscretionaries",function(v) forcediscretionaries=v end) @@ -27277,15 +27278,47 @@ local function multiple_glyphs(head,start,multiple,skiphash,what,stop) insertnodeafter(head,start,n) start=n end - if what==true then - elseif what>1 then - local m=multiple[nofmultiples] - for i=2,what do - local n=copy_node(start) - resetinjection(n) - setchar(n,m) - insertnodeafter(head,start,n) - start=n + if what~=true and repeatablemultiples then + local kind=type(what) + local m,f,l + if kind=="string" then + local what,n=string.match(what,"^repeat(.-)[:=](%d+)$") + if what=="middle" then + m=tonumber(n) + elseif what=="first" then + f=tonumber(n) + elseif what=="last" then + l=tonumber(n) + end + elseif kind=="table" then + m=what.middle + f=what.first + l=what.last + end + if f or m or l then + if m and m>1 and nofmultiples==3 then + local middle=getnext(first) + for i=2,m do + local n=copynode(middle) + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if f and f>1 then + for i=2,f do + local n=copynode(first) + resetinjection(n) + insertnodeafter(head,first,n) + end + end + if l and l>1 then + for i=2,l do + local n=copynode(start) + resetinjection(n) + insertnodeafter(head,start,n) + start=n + end + end end end end @@ -27699,7 +27732,7 @@ function handlers.gpos_mark2ligature(head,start,dataset,sequence,markanchors,rlm end end elseif trace_bugs then - onetimemessage(currentfont,basechar,"no base anchors",report_fonts) + onetimemessage(currentfont,basechar,"no base anchors") end elseif trace_bugs then logwarning("%s: prev node is no char, case %i",pref(dataset,sequence),1) @@ -28339,7 +28372,7 @@ function chainprocs.gpos_cursive(head,start,stop,dataset,sequence,currentlookup, end end elseif trace_bugs then - onetimemessage(currentfont,startchar,"no entry anchors",report_fonts) + onetimemessage(currentfont,startchar,"no entry anchors") end break end -- cgit v1.2.3