summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--context/data/scite/lexers/data/scite-context-data-context.lua4
-rw-r--r--context/data/scite/lexers/scite-context-lexer-tex.lua2
-rw-r--r--context/data/scite/scite-context-data-context.properties127
-rw-r--r--scripts/context/lua/mtx-context.lua8
-rw-r--r--scripts/context/lua/mtxrun.lua4
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua4
-rwxr-xr-xscripts/context/stubs/unix/mtxrun4
-rw-r--r--tex/context/base/anch-bck.mkvi13
-rw-r--r--tex/context/base/anch-pgr.mkiv54
-rw-r--r--tex/context/base/anch-pos.mkiv2
-rw-r--r--tex/context/base/anch-tab.mkiv4
-rw-r--r--tex/context/base/attr-col.lua2
-rw-r--r--tex/context/base/attr-col.mkiv2
-rw-r--r--tex/context/base/attr-lay.mkiv2
-rw-r--r--tex/context/base/back-exp.mkiv24
-rw-r--r--tex/context/base/back-ini.mkiv27
-rw-r--r--tex/context/base/back-pdf.mkiv94
-rw-r--r--tex/context/base/buff-ini.mkiv186
-rw-r--r--tex/context/base/buff-ver.mkiv50
-rw-r--r--tex/context/base/chem-str.mkiv18
-rw-r--r--tex/context/base/colo-ext.mkiv84
-rw-r--r--tex/context/base/colo-grp.mkiv168
-rw-r--r--tex/context/base/colo-imp-dem.mkiv260
-rw-r--r--tex/context/base/colo-imp-rgb.mkiv262
-rw-r--r--tex/context/base/colo-ini.lua134
-rw-r--r--tex/context/base/colo-ini.mkiv979
-rw-r--r--tex/context/base/colo-run.lua66
-rw-r--r--tex/context/base/colo-run.mkiv277
-rw-r--r--tex/context/base/cont-log.mkiv87
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv23
-rw-r--r--tex/context/base/context-version.pdfbin4072 -> 4075 bytes
-rw-r--r--tex/context/base/context-version.pngbin106000 -> 101989 bytes
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv11
-rw-r--r--tex/context/base/core-con.mkiv154
-rw-r--r--tex/context/base/core-ctx.mkiv10
-rw-r--r--tex/context/base/core-env.mkiv497
-rw-r--r--tex/context/base/core-fnt.mkiv40
-rw-r--r--tex/context/base/core-gen.mkiv166
-rw-r--r--tex/context/base/core-mis.mkiv277
-rw-r--r--tex/context/base/core-sys.mkiv206
-rw-r--r--tex/context/base/core-two.mkiv48
-rw-r--r--tex/context/base/core-uti.lua2
-rw-r--r--tex/context/base/core-uti.mkiv9
-rw-r--r--tex/context/base/core-var.mkiv9
-rw-r--r--tex/context/base/file-job.mkvi36
-rw-r--r--tex/context/base/file-syn.mkvi8
-rw-r--r--tex/context/base/font-ext.lua102
-rw-r--r--tex/context/base/font-gds.mkiv10
-rw-r--r--tex/context/base/font-ini.mkiv364
-rw-r--r--tex/context/base/grph-trf.mkiv363
-rw-r--r--tex/context/base/hand-ini.mkiv45
-rw-r--r--tex/context/base/java-ini.lua8
-rw-r--r--tex/context/base/java-ini.mkiv27
-rw-r--r--tex/context/base/l-math.lua4
-rw-r--r--tex/context/base/lang-ini.mkiv113
-rw-r--r--tex/context/base/lang-lab.mkiv61
-rw-r--r--tex/context/base/lang-mis.mkiv242
-rw-r--r--tex/context/base/lang-url.mkiv53
-rw-r--r--tex/context/base/lang-wrd.lua6
-rw-r--r--tex/context/base/lang-wrd.mkiv35
-rw-r--r--tex/context/base/lpdf-col.lua13
-rw-r--r--tex/context/base/luat-mac.lua2
-rw-r--r--tex/context/base/luat-sto.lua6
-rw-r--r--tex/context/base/lxml-ctx.mkiv3
-rw-r--r--tex/context/base/lxml-ini.mkiv138
-rw-r--r--tex/context/base/lxml-sor.mkiv10
-rw-r--r--tex/context/base/m-chart.mkvi8
-rw-r--r--tex/context/base/m-database.mkiv4
-rw-r--r--tex/context/base/math-ali.mkiv53
-rw-r--r--tex/context/base/math-for.mkiv7
-rw-r--r--tex/context/base/meta-fig.mkiv2
-rw-r--r--tex/context/base/meta-ini.mkiv153
-rw-r--r--tex/context/base/meta-tex.mkiv38
-rw-r--r--tex/context/base/mlib-pdf.mkiv18
-rw-r--r--tex/context/base/mlib-pps.mkiv19
-rw-r--r--tex/context/base/mult-aux.mkiv185
-rw-r--r--tex/context/base/mult-de.mkii3
-rw-r--r--tex/context/base/mult-def.lua13
-rw-r--r--tex/context/base/mult-dim.mkvi123
-rw-r--r--tex/context/base/mult-en.mkii3
-rw-r--r--tex/context/base/mult-fr.mkii3
-rw-r--r--tex/context/base/mult-ini.lua43
-rw-r--r--tex/context/base/mult-ini.mkiv24
-rw-r--r--tex/context/base/mult-it.mkii3
-rw-r--r--tex/context/base/mult-low.lua8
-rw-r--r--tex/context/base/mult-nl.mkii3
-rw-r--r--tex/context/base/mult-pe.mkii3
-rw-r--r--tex/context/base/mult-ro.mkii3
-rw-r--r--tex/context/base/mult-sys.mkiv205
-rw-r--r--tex/context/base/node-bck.mkiv66
-rw-r--r--tex/context/base/node-fin.mkiv14
-rw-r--r--tex/context/base/node-ini.mkiv2
-rw-r--r--tex/context/base/node-par.mkiv30
-rw-r--r--tex/context/base/node-rul.mkiv233
-rw-r--r--tex/context/base/node-shp.lua8
-rw-r--r--tex/context/base/pack-bck.mkvi7
-rw-r--r--tex/context/base/pack-box.mkiv514
-rw-r--r--tex/context/base/pack-fen.mkiv16
-rw-r--r--tex/context/base/pack-lyr.mkiv733
-rw-r--r--tex/context/base/pack-mis.mkvi4
-rw-r--r--tex/context/base/pack-pos.mkiv2
-rw-r--r--tex/context/base/pack-rul.mkiv150
-rw-r--r--tex/context/base/page-app.mkiv4
-rw-r--r--tex/context/base/page-bck.mkiv4
-rw-r--r--tex/context/base/page-com.mkiv2
-rw-r--r--tex/context/base/page-imp.mkiv24
-rw-r--r--tex/context/base/page-inf.mkiv10
-rw-r--r--tex/context/base/page-ini.mkiv8
-rw-r--r--tex/context/base/page-lay.mkiv259
-rw-r--r--tex/context/base/page-mak.mkvi11
-rw-r--r--tex/context/base/page-mbk.mkvi37
-rw-r--r--tex/context/base/page-mis.mkiv2
-rw-r--r--tex/context/base/page-mrk.mkiv6
-rw-r--r--tex/context/base/page-mul.mkiv37
-rw-r--r--tex/context/base/page-one.mkiv13
-rw-r--r--tex/context/base/page-plg.mkiv16
-rw-r--r--tex/context/base/page-txt.mkvi169
-rw-r--r--tex/context/base/phys-dim.mkiv18
-rw-r--r--tex/context/base/s-inf-01.mkvi2
-rw-r--r--tex/context/base/s-inf-03.mkiv13
-rw-r--r--tex/context/base/scrn-bar.mkvi5
-rw-r--r--tex/context/base/scrn-but.mkvi77
-rw-r--r--tex/context/base/scrn-fld.mkvi99
-rw-r--r--tex/context/base/scrn-hlp.mkvi6
-rw-r--r--tex/context/base/scrn-ini.mkvi4
-rw-r--r--tex/context/base/scrn-pag.mkvi6
-rw-r--r--tex/context/base/scrn-wid.mkvi52
-rw-r--r--tex/context/base/scrp-ini.mkiv4
-rw-r--r--tex/context/base/spac-ali.mkiv1172
-rw-r--r--tex/context/base/spac-def.mkiv2
-rw-r--r--tex/context/base/spac-pag.mkiv52
-rw-r--r--tex/context/base/spac-ver.mkiv66
-rw-r--r--tex/context/base/status-files.pdfbin24080 -> 24490 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin169690 -> 170135 bytes
-rw-r--r--tex/context/base/status-mkiv.lua1394
-rw-r--r--tex/context/base/status-mkiv.tex83
-rw-r--r--tex/context/base/strc-blk.mkiv4
-rw-r--r--tex/context/base/strc-des.mkiv8
-rw-r--r--tex/context/base/strc-flt.mkvi24
-rw-r--r--tex/context/base/strc-itm.mkvi191
-rw-r--r--tex/context/base/strc-lst.mkiv77
-rw-r--r--tex/context/base/strc-mar.lua2
-rw-r--r--tex/context/base/strc-mar.mkiv65
-rw-r--r--tex/context/base/strc-not.mkiv2
-rw-r--r--tex/context/base/strc-pag.mkiv6
-rw-r--r--tex/context/base/strc-ref.mkvi4
-rw-r--r--tex/context/base/strc-sec.mkiv67
-rw-r--r--tex/context/base/strc-syn.mkiv10
-rw-r--r--tex/context/base/strc-tag.mkiv2
-rw-r--r--tex/context/base/supp-mat.mkiv30
-rw-r--r--tex/context/base/supp-ran.mkiv16
-rw-r--r--tex/context/base/symb-ini.mkiv191
-rw-r--r--tex/context/base/syst-aux.mkiv83
-rw-r--r--tex/context/base/tabl-tbl.mkiv19
-rw-r--r--tex/context/base/tabl-xnt.mkvi2
-rw-r--r--tex/context/base/tabl-xtb.mkvi26
-rw-r--r--tex/context/base/trac-deb.mkiv28
-rw-r--r--tex/context/base/trac-tex.mkiv12
-rw-r--r--tex/context/base/type-ini.mkiv10
-rw-r--r--tex/context/base/type-otf.mkiv58
-rw-r--r--tex/context/base/typo-cap.mkiv9
-rw-r--r--tex/context/base/typo-mar.mkiv37
-rw-r--r--tex/context/base/typo-par.mkiv4
-rw-r--r--tex/context/base/typo-prc.mkvi9
-rw-r--r--tex/context/base/unic-ini.mkiv14
-rw-r--r--tex/context/base/x-xtag.mkiv60
-rw-r--r--tex/context/base/xtag-ini.mkii3
-rw-r--r--tex/context/interface/keys-cs.xml3
-rw-r--r--tex/context/interface/keys-de.xml3
-rw-r--r--tex/context/interface/keys-en.xml3
-rw-r--r--tex/context/interface/keys-fr.xml3
-rw-r--r--tex/context/interface/keys-it.xml3
-rw-r--r--tex/context/interface/keys-nl.xml3
-rw-r--r--tex/context/interface/keys-pe.xml3
-rw-r--r--tex/context/interface/keys-ro.xml3
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua6
178 files changed, 7654 insertions, 5862 deletions
diff --git a/context/data/scite/lexers/data/scite-context-data-context.lua b/context/data/scite/lexers/data/scite-context-data-context.lua
index 4bbf3a77a..e49edef9c 100644
--- a/context/data/scite/lexers/data/scite-context-data-context.lua
+++ b/context/data/scite/lexers/data/scite-context-data-context.lua
@@ -1,4 +1,4 @@
return {
- ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "plussixteen", "plushundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "etexversion", "pdftexversion", "xetexversion", "xetexrevision", "activecatcode", "bgroup", "egroup", "endline", "attributeunsetvalue", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "spaceasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "startmode", "stopmode", "startnotmode", "stopnotmode", "doifmode", "doifmodeelse", "doifnotmode", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startdocument", "stopdocument", "documentvariable", "startmodule", "stopmodule", "usemodule" },
- ["helpers"]={ "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", "htdp", "unvoidbox", "vfilll", "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", "scratchcounter", "globalscratchcounter", "scratchdimen", "globalscratchdimen", "scratchskip", "globalscratchskip", "scratchmuskip", "globalscratchmuskip", "scratchtoks", "globalscratchtoks", "scratchbox", "globalscratchbox", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchboxone", "scratchboxtwo", "scratchboxthree", "doif", "doifnot", "doifelse", "doifinset", "doifnotinset", "doifinsetelse", "doifnextcharelse", "doifnextoptionalelse", "doifnextparenthesiselse", "doiffastoptionalcheckelse", "doifundefinedelse", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifdimensionelse", "doifnumberelse", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifinstringelse", "doifassignmentelse", "tracingall", "tracingnone", "loggingall", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "empty", "null", "space", "obeyspaces", "obeylines", "normalspace", "executeifdefined", "singleexpandafter", "doubleexpandafter", "tripleexpandafter", "dontleavehmode", "wait", "writestatus", "define", "redefine", "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "measure", "getvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", "unexpanded", "expanded", "startexpanded", "stopexpanded", "protected", "protect", "unprotect", "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "newconstant", "setnewconstant", "newconditional", "settrue", "setfalse", "setconstant", "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty", "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty", "nopdfcompression", "maximumpdfcompression", "normalpdfcompression", "modulonumber", "dividenumber", "getfirstcharacter", "doiffirstcharelse", "startnointerference", "stopnointerference", "strut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd" },
+ ["constants"]={ "zerocount", "minusone", "minustwo", "plusone", "plustwo", "plusthree", "plusfour", "plusfive", "plussix", "plusseven", "pluseight", "plusnine", "plusten", "plussixteen", "plushundred", "plusthousand", "plustenthousand", "plustwentythousand", "medcard", "maxcard", "zeropoint", "onepoint", "halfapoint", "onebasepoint", "maxdimen", "scaledpoint", "thousandpoint", "points", "halfpoint", "zeroskip", "pluscxxvii", "pluscxxviii", "pluscclv", "pluscclvi", "normalpagebox", "endoflinetoken", "outputnewlinechar", "emptytoks", "empty", "undefined", "voidbox", "emptybox", "emptyvbox", "emptyhbox", "bigskipamount", "medskipamount", "smallskipamount", "fmtname", "fmtversion", "texengine", "texenginename", "texengineversion", "luatexengine", "pdftexengine", "xetexengine", "unknownengine", "etexversion", "pdftexversion", "xetexversion", "xetexrevision", "activecatcode", "bgroup", "egroup", "endline", "attributeunsetvalue", "uprotationangle", "rightrotationangle", "downrotationangle", "leftrotationangle", "inicatcodes", "ctxcatcodes", "texcatcodes", "notcatcodes", "txtcatcodes", "vrbcatcodes", "prtcatcodes", "nilcatcodes", "luacatcodes", "tpacatcodes", "tpbcatcodes", "xmlcatcodes", "escapecatcode", "begingroupcatcode", "endgroupcatcode", "mathshiftcatcode", "alignmentcatcode", "endoflinecatcode", "parametercatcode", "superscriptcatcode", "subscriptcatcode", "ignorecatcode", "spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode", "tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode", "spaceasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode", "colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode", "leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode", "lessthanasciicode", "morethanasciicode", "doublecommentsignal", "atsignasciicode", "exclamationmarkasciicode", "questionmarkasciicode", "doublequoteasciicode", "singlequoteasciicode", "forwardslashasciicode", "activetabtoken", "activeformfeedtoken", "activeendoflinetoken", "startmode", "stopmode", "startnotmode", "stopnotmode", "doifmode", "doifmodeelse", "doifnotmode", "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifallmodeselse", "doifnotallmodes", "startenvironment", "stopenvironment", "environment", "startcomponent", "stopcomponent", "component", "startproduct", "stopproduct", "product", "startproject", "stopproject", "project", "starttext", "stoptext", "startdocument", "stopdocument", "documentvariable", "startmodule", "stopmodule", "usemodule" },
+ ["helpers"]={ "startsetups", "stopsetups", "startxmlsetups", "stopxmlsetups", "startluasetups", "stopluasetups", "starttexsetups", "stoptexsetups", "startrawsetups", "stoprawsetups", "startlocalsetups", "stoplocalsetups", "starttexdefinition", "stoptexdefinition", "starttexcode", "stoptexcode", "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newread", "newwrite", "newmarks", "newinsert", "newattribute", "newif", "newlanguage", "newfamily", "newfam", "newhelp", "htdp", "unvoidbox", "vfilll", "currentcatcodetable", "defaultcatcodetable", "catcodetablename", "newcatcodetable", "startcatcodetable", "stopcatcodetable", "startextendcatcodetable", "stopextendcatcodetable", "pushcatcodetable", "popcatcodetable", "restorecatcodes", "setcatcodetable", "letcatcodecommand", "defcatcodecommand", "uedcatcodecommand", "hglue", "vglue", "hfillneg", "vfillneg", "hfilllneg", "vfilllneg", "ruledhss", "ruledhfil", "ruledhfill", "ruledhfilneg", "ruledhfillneg", "normalhfillneg", "ruledvss", "ruledvfil", "ruledvfill", "ruledvfilneg", "ruledvfillneg", "normalvfillneg", "ruledhbox", "ruledvbox", "ruledvtop", "ruledvcenter", "ruledhskip", "ruledvskip", "ruledkern", "ruledmskip", "ruledmkern", "ruledhglue", "ruledvglue", "normalhglue", "normalvglue", "ruledpenalty", "scratchcounter", "globalscratchcounter", "scratchdimen", "globalscratchdimen", "scratchskip", "globalscratchskip", "scratchmuskip", "globalscratchmuskip", "scratchtoks", "globalscratchtoks", "scratchbox", "globalscratchbox", "nextbox", "dowithnextbox", "dowithnextboxcs", "dowithnextboxcontent", "dowithnextboxcontentcs", "scratchwidth", "scratchheight", "scratchdepth", "scratchoffset", "scratchcounterone", "scratchcountertwo", "scratchcounterthree", "scratchdimenone", "scratchdimentwo", "scratchdimenthree", "scratchskipone", "scratchskiptwo", "scratchskipthree", "scratchmuskipone", "scratchmuskiptwo", "scratchmuskipthree", "scratchtoksone", "scratchtokstwo", "scratchtoksthree", "scratchboxone", "scratchboxtwo", "scratchboxthree", "doif", "doifnot", "doifelse", "doifinset", "doifnotinset", "doifinsetelse", "doifnextcharelse", "doifnextoptionalelse", "doifnextparenthesiselse", "doiffastoptionalcheckelse", "doifundefinedelse", "doifdefinedelse", "doifundefined", "doifdefined", "doifelsevalue", "doifvalue", "doifnotvalue", "doifnothing", "doifsomething", "doifelsenothing", "doifsomethingelse", "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing", "doifdimensionelse", "doifnumberelse", "doifcommonelse", "doifcommon", "doifnotcommon", "doifinstring", "doifnotinstring", "doifinstringelse", "doifassignmentelse", "tracingall", "tracingnone", "loggingall", "appendtoks", "prependtoks", "appendtotoks", "prependtotoks", "to", "endgraf", "empty", "null", "space", "obeyspaces", "obeylines", "normalspace", "executeifdefined", "singleexpandafter", "doubleexpandafter", "tripleexpandafter", "dontleavehmode", "wait", "writestatus", "define", "redefine", "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "measure", "getvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue", "resetvalue", "undefinevalue", "ignorevalue", "setuvalue", "setuevalue", "setugvalue", "setuxvalue", "globallet", "glet", "getparameters", "geteparameters", "getgparameters", "getxparameters", "forgetparameters", "processcommalist", "processcommacommand", "quitcommalist", "quitprevcommalist", "processaction", "processallactions", "processfirstactioninset", "processallactionsinset", "unexpanded", "expanded", "startexpanded", "stopexpanded", "protected", "protect", "unprotect", "firstofoneargument", "firstoftwoarguments", "secondoftwoarguments", "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments", "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments", "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments", "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments", "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments", "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals", "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth", "newconstant", "setnewconstant", "newconditional", "settrue", "setfalse", "setconstant", "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty", "dosingleargument", "dodoubleargument", "dotripleargument", "doquadrupleargument", "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty", "nopdfcompression", "maximumpdfcompression", "normalpdfcompression", "modulonumber", "dividenumber", "getfirstcharacter", "doiffirstcharelse", "startnointerference", "stopnointerference", "strut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd" },
} \ No newline at end of file
diff --git a/context/data/scite/lexers/scite-context-lexer-tex.lua b/context/data/scite/lexers/scite-context-lexer-tex.lua
index 1990c3d51..f7ba0a8e6 100644
--- a/context/data/scite/lexers/scite-context-lexer-tex.lua
+++ b/context/data/scite/lexers/scite-context-lexer-tex.lua
@@ -380,7 +380,7 @@ end
local luaenvironment = P("luacode")
local inlinelua = P("\\") * (
- P("ctx") * ( P("lua") + P("command") + P("latelua") )
+ P("ctx") * ( P("lua") + P("command") + P("late") * (P("lua") + P("command")) )
+ P("cld") * ( P("command") + P("context") )
)
diff --git a/context/data/scite/scite-context-data-context.properties b/context/data/scite/scite-context-data-context.properties
index a5668ccf2..064e68888 100644
--- a/context/data/scite/scite-context-data-context.properties
+++ b/context/data/scite/scite-context-data-context.properties
@@ -1,62 +1,64 @@
keywordclass.context.helpers=\
startsetups stopsetups startxmlsetups stopxmlsetups \
-starttexdefinition stoptexdefinition starttexcode stoptexcode newcount \
-newdimen newskip newmuskip newbox newtoks \
-newread newwrite newmarks newinsert newattribute \
-newif newlanguage newfamily newfam newhelp \
-htdp unvoidbox vfilll currentcatcodetable defaultcatcodetable \
-catcodetablename newcatcodetable startcatcodetable stopcatcodetable startextendcatcodetable \
-stopextendcatcodetable pushcatcodetable popcatcodetable restorecatcodes setcatcodetable \
-letcatcodecommand defcatcodecommand uedcatcodecommand hglue vglue \
-hfillneg vfillneg hfilllneg vfilllneg ruledhss \
-ruledhfil ruledhfill ruledhfilneg ruledhfillneg normalhfillneg \
-ruledvss ruledvfil ruledvfill ruledvfilneg ruledvfillneg \
-normalvfillneg ruledhbox ruledvbox ruledvtop ruledvcenter \
-ruledhskip ruledvskip ruledkern ruledmskip ruledmkern \
-ruledhglue ruledvglue normalhglue normalvglue ruledpenalty \
-scratchcounter globalscratchcounter scratchdimen globalscratchdimen scratchskip \
-globalscratchskip scratchmuskip globalscratchmuskip scratchtoks globalscratchtoks \
-scratchbox globalscratchbox nextbox dowithnextbox dowithnextboxcs \
-dowithnextboxcontent dowithnextboxcontentcs scratchwidth scratchheight scratchdepth \
-scratchoffset scratchcounterone scratchcountertwo scratchcounterthree scratchdimenone \
-scratchdimentwo scratchdimenthree scratchskipone scratchskiptwo scratchskipthree \
-scratchmuskipone scratchmuskiptwo scratchmuskipthree scratchtoksone scratchtokstwo \
-scratchtoksthree scratchboxone scratchboxtwo scratchboxthree doif \
-doifnot doifelse doifinset doifnotinset doifinsetelse \
-doifnextcharelse doifnextoptionalelse doifnextparenthesiselse doiffastoptionalcheckelse doifundefinedelse \
-doifdefinedelse doifundefined doifdefined doifelsevalue doifvalue \
-doifnotvalue doifnothing doifsomething doifelsenothing doifsomethingelse \
-doifvaluenothing doifvaluesomething doifelsevaluenothing doifdimensionelse doifnumberelse \
-doifcommonelse doifcommon doifnotcommon doifinstring doifnotinstring \
-doifinstringelse doifassignmentelse tracingall tracingnone loggingall \
-appendtoks prependtoks appendtotoks prependtotoks to \
-endgraf empty null space obeyspaces \
-obeylines normalspace executeifdefined singleexpandafter doubleexpandafter \
-tripleexpandafter dontleavehmode wait writestatus define \
-redefine setmeasure setemeasure setgmeasure setxmeasure \
-definemeasure measure getvalue setvalue setevalue \
-setgvalue setxvalue letvalue letgvalue resetvalue \
-undefinevalue ignorevalue setuvalue setuevalue setugvalue \
-setuxvalue globallet glet getparameters geteparameters \
-getgparameters getxparameters forgetparameters processcommalist processcommacommand \
-quitcommalist quitprevcommalist processaction processallactions processfirstactioninset \
-processallactionsinset unexpanded expanded startexpanded stopexpanded \
-protected protect unprotect firstofoneargument firstoftwoarguments \
-secondoftwoarguments firstofthreearguments secondofthreearguments thirdofthreearguments firstoffourarguments \
-secondoffourarguments thirdoffourarguments fourthoffourarguments firstoffivearguments secondoffivearguments \
-thirdoffivearguments fourthoffivearguments fifthoffivearguments firstofsixarguments secondofsixarguments \
-thirdofsixarguments fourthofsixarguments fifthofsixarguments sixthofsixarguments gobbleoneargument \
-gobbletwoarguments gobblethreearguments gobblefourarguments gobblefivearguments gobblesixarguments \
-gobblesevenarguments gobbleeightarguments gobbleninearguments gobbletenarguments gobbleoneoptional \
-gobbletwooptionals gobblethreeoptionals gobblefouroptionals gobblefiveoptionals dorecurse \
-doloop exitloop dostepwiserecurse recurselevel recursedepth \
-newconstant setnewconstant newconditional settrue setfalse \
-setconstant dosingleempty dodoubleempty dotripleempty doquadrupleempty \
-doquintupleempty dosixtupleempty doseventupleempty dosinglegroupempty dodoublegroupempty \
-dotriplegroupempty doquadruplegroupempty doquintuplegroupempty nopdfcompression maximumpdfcompression \
-normalpdfcompression modulonumber dividenumber getfirstcharacter doiffirstcharelse \
-startnointerference stopnointerference strut setstrut strutbox \
-strutht strutdp strutwd
+startluasetups stopluasetups starttexsetups stoptexsetups startrawsetups \
+stoprawsetups startlocalsetups stoplocalsetups starttexdefinition stoptexdefinition \
+starttexcode stoptexcode newcount newdimen newskip \
+newmuskip newbox newtoks newread newwrite \
+newmarks newinsert newattribute newif newlanguage \
+newfamily newfam newhelp htdp unvoidbox \
+vfilll currentcatcodetable defaultcatcodetable catcodetablename newcatcodetable \
+startcatcodetable stopcatcodetable startextendcatcodetable stopextendcatcodetable pushcatcodetable \
+popcatcodetable restorecatcodes setcatcodetable letcatcodecommand defcatcodecommand \
+uedcatcodecommand hglue vglue hfillneg vfillneg \
+hfilllneg vfilllneg ruledhss ruledhfil ruledhfill \
+ruledhfilneg ruledhfillneg normalhfillneg ruledvss ruledvfil \
+ruledvfill ruledvfilneg ruledvfillneg normalvfillneg ruledhbox \
+ruledvbox ruledvtop ruledvcenter ruledhskip ruledvskip \
+ruledkern ruledmskip ruledmkern ruledhglue ruledvglue \
+normalhglue normalvglue ruledpenalty scratchcounter globalscratchcounter \
+scratchdimen globalscratchdimen scratchskip globalscratchskip scratchmuskip \
+globalscratchmuskip scratchtoks globalscratchtoks scratchbox globalscratchbox \
+nextbox dowithnextbox dowithnextboxcs dowithnextboxcontent dowithnextboxcontentcs \
+scratchwidth scratchheight scratchdepth scratchoffset scratchcounterone \
+scratchcountertwo scratchcounterthree scratchdimenone scratchdimentwo scratchdimenthree \
+scratchskipone scratchskiptwo scratchskipthree scratchmuskipone scratchmuskiptwo \
+scratchmuskipthree scratchtoksone scratchtokstwo scratchtoksthree scratchboxone \
+scratchboxtwo scratchboxthree doif doifnot doifelse \
+doifinset doifnotinset doifinsetelse doifnextcharelse doifnextoptionalelse \
+doifnextparenthesiselse doiffastoptionalcheckelse doifundefinedelse doifdefinedelse doifundefined \
+doifdefined doifelsevalue doifvalue doifnotvalue doifnothing \
+doifsomething doifelsenothing doifsomethingelse doifvaluenothing doifvaluesomething \
+doifelsevaluenothing doifdimensionelse doifnumberelse doifcommonelse doifcommon \
+doifnotcommon doifinstring doifnotinstring doifinstringelse doifassignmentelse \
+tracingall tracingnone loggingall appendtoks prependtoks \
+appendtotoks prependtotoks to endgraf empty \
+null space obeyspaces obeylines normalspace \
+executeifdefined singleexpandafter doubleexpandafter tripleexpandafter dontleavehmode \
+wait writestatus define redefine setmeasure \
+setemeasure setgmeasure setxmeasure definemeasure measure \
+getvalue setvalue setevalue setgvalue setxvalue \
+letvalue letgvalue resetvalue undefinevalue ignorevalue \
+setuvalue setuevalue setugvalue setuxvalue globallet \
+glet getparameters geteparameters getgparameters getxparameters \
+forgetparameters processcommalist processcommacommand quitcommalist quitprevcommalist \
+processaction processallactions processfirstactioninset processallactionsinset unexpanded \
+expanded startexpanded stopexpanded protected protect \
+unprotect firstofoneargument firstoftwoarguments secondoftwoarguments firstofthreearguments \
+secondofthreearguments thirdofthreearguments firstoffourarguments secondoffourarguments thirdoffourarguments \
+fourthoffourarguments firstoffivearguments secondoffivearguments thirdoffivearguments fourthoffivearguments \
+fifthoffivearguments firstofsixarguments secondofsixarguments thirdofsixarguments fourthofsixarguments \
+fifthofsixarguments sixthofsixarguments gobbleoneargument gobbletwoarguments gobblethreearguments \
+gobblefourarguments gobblefivearguments gobblesixarguments gobblesevenarguments gobbleeightarguments \
+gobbleninearguments gobbletenarguments gobbleoneoptional gobbletwooptionals gobblethreeoptionals \
+gobblefouroptionals gobblefiveoptionals dorecurse doloop exitloop \
+dostepwiserecurse recurselevel recursedepth newconstant setnewconstant \
+newconditional settrue setfalse setconstant dosingleempty \
+dodoubleempty dotripleempty doquadrupleempty doquintupleempty dosixtupleempty \
+doseventupleempty dosingleargument dodoubleargument dotripleargument doquadrupleargument \
+dosinglegroupempty dodoublegroupempty dotriplegroupempty doquadruplegroupempty doquintuplegroupempty \
+nopdfcompression maximumpdfcompression normalpdfcompression modulonumber dividenumber \
+getfirstcharacter doiffirstcharelse startnointerference stopnointerference strut \
+setstrut strutbox strutht strutdp strutwd
keywordclass.context.constants=\
zerocount minusone minustwo plusone \
@@ -86,9 +88,10 @@ tildeasciicode delasciicode lessthanasciicode morethanasciicode doublecommentsig
atsignasciicode exclamationmarkasciicode questionmarkasciicode doublequoteasciicode singlequoteasciicode \
forwardslashasciicode activetabtoken activeformfeedtoken activeendoflinetoken startmode \
stopmode startnotmode stopnotmode doifmode doifmodeelse \
-doifnotmode startenvironment stopenvironment environment startcomponent \
-stopcomponent component startproduct stopproduct product \
-startproject stopproject project starttext stoptext \
-startdocument stopdocument documentvariable startmodule stopmodule \
-usemodule
+doifnotmode startallmodes stopallmodes startnotallmodes stopnotallmodes \
+doifallmodes doifallmodeselse doifnotallmodes startenvironment stopenvironment \
+environment startcomponent stopcomponent component startproduct \
+stopproduct product startproject stopproject project \
+starttext stoptext startdocument stopdocument documentvariable \
+startmodule stopmodule usemodule
diff --git a/scripts/context/lua/mtx-context.lua b/scripts/context/lua/mtx-context.lua
index 7323e8b04..16e8962c4 100644
--- a/scripts/context/lua/mtx-context.lua
+++ b/scripts/context/lua/mtx-context.lua
@@ -642,14 +642,16 @@ scripts.context.defaultformats = {
-- "plain"
}
+local lpegpatterns, Cs, P = lpeg.patterns, lpeg.Cs, lpeg.P
+
+local pattern = lpegpatterns.utfbom^-1 * (P("%% ") + P("% ")) * Cs((1-lpegpatterns.newline)^1)
+
local function analyze(filename) -- only files on current path
local f = io.open(file.addsuffix(filename,"tex"))
if f then
local t = { }
local line = f:read("*line") or ""
- -- there can be an utf bomb in front: \254\255 or \255\254
- -- a template line starts with % or %% (used in asciimode) followed by one or more spaces
- local preamble = match(line,"^[\254\255]*%%%%?%s+(.+)$")
+ local preamble = lpeg.match(pattern,line)
if preamble then
for key, value in gmatch(preamble,"(%S+)%s*=%s*(%S+)") do
t[key] = value
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 175263748..f3c09d598 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -4079,8 +4079,8 @@ if not math.sind then
end
if not math.odd then
- function math.odd (n) return n % 2 == 0 end
- function math.even(n) return n % 2 ~= 0 end
+ function math.odd (n) return n % 2 ~= 0 end
+ function math.even(n) return n % 2 == 0 end
end
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 175263748..f3c09d598 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -4079,8 +4079,8 @@ if not math.sind then
end
if not math.odd then
- function math.odd (n) return n % 2 == 0 end
- function math.even(n) return n % 2 ~= 0 end
+ function math.odd (n) return n % 2 ~= 0 end
+ function math.even(n) return n % 2 == 0 end
end
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 175263748..f3c09d598 100755
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -4079,8 +4079,8 @@ if not math.sind then
end
if not math.odd then
- function math.odd (n) return n % 2 == 0 end
- function math.even(n) return n % 2 ~= 0 end
+ function math.odd (n) return n % 2 ~= 0 end
+ function math.even(n) return n % 2 == 0 end
end
diff --git a/tex/context/base/anch-bck.mkvi b/tex/context/base/anch-bck.mkvi
index 75a7f05a5..cf5b82967 100644
--- a/tex/context/base/anch-bck.mkvi
+++ b/tex/context/base/anch-bck.mkvi
@@ -112,7 +112,10 @@
\newcount\c_backgrounds_text_level
-\installcommandhandler \??td {textbackground} \??td
+\installcorenamespace{textbackground}
+\installcorenamespace{textbackgroundlevel}
+
+\installcommandhandler \??textbackground {textbackground} \??textbackground
\appendtoks
\setuevalue{\currenttextbackground}{\groupedcommand{\starttextbackground[\currenttextbackground]}{\stoptextbackground}}%
@@ -147,11 +150,11 @@
\let\backgrounds_text_start_indeed\relax
\let\backgrounds_text_stop_indeed \relax
-\setvalue{\??td:l:\v!text}%
+\setvalue{\??textbackgroundlevel\v!text}%
{\let\backgrounds_text_start_indeed\backgrounds_text_start_txt
\let\backgrounds_text_stop_indeed \dostoptextbackgroundtxt}
-\setvalue{\??td:l:\v!paragraph}%
+\setvalue{\??textbackgroundlevel\v!paragraph}%
{\ifnum\c_backgrounds_text_level>\plusone
\let\backgrounds_text_start_indeed\backgrounds_text_start_txt
\let\backgrounds_text_stop_indeed \dostoptextbackgroundtxt
@@ -160,7 +163,7 @@
\let\backgrounds_text_stop_indeed \dostoptextbackgroundpar
\fi}
-\setvalue{\??td:l:\v!none}%
+\setvalue{\??textbackgroundlevel\v!none}%
{\backgrounds_text_preset_nop}
\def\backgrounds_text_preset_nop
@@ -169,7 +172,7 @@
\def\backgrounds_text_preset_yes
{\backgrounds_text_preset_nop
- \csname\??td:l:\textbackgroundparameter\c!location\endcsname
+ \csname\??textbackgroundlevel\textbackgroundparameter\c!location\endcsname
\edef\m_backgrounds_text_frame {\textbackgroundparameter\c!frame}%
\edef\m_backgrounds_text_corner {\textbackgroundparameter\c!corner}%
\edef\m_backgrounds_text_background{\textbackgroundparameter\c!background}%
diff --git a/tex/context/base/anch-pgr.mkiv b/tex/context/base/anch-pgr.mkiv
index a30a2e3eb..c7acc0b32 100644
--- a/tex/context/base/anch-pgr.mkiv
+++ b/tex/context/base/anch-pgr.mkiv
@@ -39,27 +39,28 @@
\newtoks\everyinsertpositionaction
\newtoks\everycleanpositionaction
-\let\POSactionprefix\POSprefix
+\installcorenamespace{positionaction}
+\installcorenamespace{positioncleanup}
\unexpanded\def\dosetpositionaction#1%
- {\setgvalue{\POSactionprefix#1::}}
+ {\setgvalue{\??positionaction#1}}
\def\doifpositionaction#1%
- {\ifcsname\POSactionprefix#1::\endcsname
+ {\ifcsname\??positionaction#1\endcsname
\expandafter\firstofoneargument
\else
\expandafter\gobbleoneargument
\fi}
\def\doifpositionactionelse#1%
- {\ifcsname\POSactionprefix#1::\endcsname
+ {\ifcsname\??positionaction#1\endcsname
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
\fi}
\def\dopositionaction#1% test saves hash entry in etex
- {\ifcsname\POSactionprefix#1::\endcsname
+ {\ifcsname\??positionaction#1\endcsname
\positions_action_indeed{#1}%
\fi}
@@ -72,7 +73,7 @@
{\traceposstring\clap\red{<#1>}%
\the\everyinsertpositionaction
\the\everypositionaction
- \csname\POSactionprefix#1::\endcsname
+ \csname\??positionaction#1\endcsname
\positions_cleanup_action{#1}}%
\smashedbox\scratchbox % smashing is really needed else we get problems with too big overlays
\endgroup
@@ -80,39 +81,38 @@
%D Here the complication has to do with collecting actions
%D for later execution. This collection is especially handy
-%D when we want to move actions to a specific layer.
-%D Such series of actions are stored in a macro (the one
-%D with the funny \type {++}) which is cleaned up after each
-%D invocation.
+%D when we want to move actions to a specific layer. Such
+%D series of actions are stored in a macro that is cleaned up
+%D after each invocation.
% this can probably be done better
% \def\positions_cleanup_action#1% not in trialtypesetting
-% {\ifcsname\POSactionprefix#1++\endcsname
+% {\ifcsname\??positioncleanup#1\endcsname
% \the\everycleanpositionaction
% \iflocalpositioning
-% \letgvalue{\POSactionprefix#1++}\empty
+% \letgvalue{\??positioncleanup#1}\empty
% \else
-% \setxvalue{\POSactionprefix#1++}{\getvalue{\POSactionprefix#1++}}%
+% \setxvalue{\??positioncleanup#1}{\getvalue{\??positioncleanup#1}}%
% \fi
% \fi}
\def\positions_cleanup_action#1% not in trialtypesetting
- {\ifcsname\POSactionprefix#1++\endcsname
+ {\ifcsname\??positioncleanup#1\endcsname
\the\everycleanpositionaction
\iflocalpositioning
% erase
- \expandafter\let\csname\POSactionprefix#1++\endcsname\empty
+ \expandafter\let\csname\??positioncleanup#1\endcsname\empty
\else
% globalize
- \global\expandafter\let\csname\POSactionprefix#1++\expandafter\endcsname\csname\POSactionprefix#1++\endcsname
+ \global\expandafter\let\csname\??positioncleanup#1\expandafter\endcsname\csname\??positioncleanup#1\endcsname
\fi
\fi}
\def\handlepositionaction#1\with#2\on#3% ugly
{\begingroup
\edef\!!stringa{\ifx\currentpositionoverlay\empty#3\else\currentpositionoverlay::\MPanchoridentifier\fi}%
- \edef\!!stringc{\POSactionprefix\!!stringa++}%
+ \edef\!!stringc{\??positioncleanup\!!stringa}%
\normalexpanded{\dosetpositionaction{\!!stringa}{\noexpand\getvalue{\!!stringc}}}%
\global\let#1\relax
\edef\!!stringb{\ifcsname\!!stringc\endcsname\csname\!!stringc\endcsname\fi}% why ...
@@ -368,13 +368,17 @@
%D graphic, used immediately, with zero dimensions, so that a
%D sequence of them does not harm.
+\installcorenamespace{positiongraphic}
+\installcorenamespace{positionmethod}
+%installcorenamespace{graphicvariable}
+
\newbox\positiongraphicbox
\def\startMPpositiongraphic % id setups
{\dodoublegroupempty\positions_mp_graphic_start}
\def\positions_mp_graphic_start#1#2#3\stopMPpositiongraphic % tag list mpcode
- {\setgvalue{\??gp:#1}{\positions_mp_graphic_use{#1}{#2}{#3}}}
+ {\setgvalue{\??positiongraphic#1}{\positions_mp_graphic_use{#1}{#2}{#3}}}
\let\stopMPpositiongraphic\relax
@@ -397,9 +401,9 @@
{\dodoublegroupempty\positions_mp_graphic_direct}
\def\positions_mp_graphic_direct#1% tag setups
- {\ifcsname\??gq:#1\endcsname % method
+ {\ifcsname\??positionmethod#1\endcsname % method
\expandafter\positions_mp_graphic_direct_indeed_method
- \else\ifcsname \??gp:#1\endcsname
+ \else\ifcsname\??positiongraphic#1\endcsname
\doubleexpandafter\positions_mp_graphic_direct_indeed_normal
\else
\doubleexpandafter\positions_mp_graphic_direct_indeed_unknown
@@ -408,10 +412,10 @@
\let\positions_mp_graphic_direct_indeed_unknown\gobbletwoarguments
\def\positions_mp_graphic_direct_indeed_method
- {\positions_mp_graphic_direct_indeed\??gq}
+ {\positions_mp_graphic_direct_indeed\??positionmethod}
\def\positions_mp_graphic_direct_indeed_normal
- {\positions_mp_graphic_direct_indeed\??gp}
+ {\positions_mp_graphic_direct_indeed\??positiongraphic}
\def\positions_mp_graphic_direct_indeed#1#2#3% what tag setups
{\begingroup
@@ -421,7 +425,7 @@
\ignoreMPboxdepth
\def\positions_mp_graphic_direct{\positions_mp_graphic_nested{#3}}% takes two extra arguments
\setbox\positiongraphicbox\hbox
- {\ignorespaces\csname#1:#2\endcsname\removelastspace}%
+ {\ignorespaces\csname#1#2\endcsname\removelastspace}%
\smashbox\positiongraphicbox
\box\positiongraphicbox
\endgroup}
@@ -431,11 +435,11 @@
\setupMPvariables[#2][#1,#3]%
\edef\currentmpvariableclass{#2}%
\positions_mp_graphic_prepare
- \getvalue{\??gp:#2}%
+ \getvalue{\??positiongraphic#2}%
\endgroup}%
\def\startMPpositionmethod#1#2\stopMPpositionmethod
- {\setgvalue{\??gq:#1}{#2}} % todo: var list here
+ {\setgvalue{\??positionmethod#1}{#2}} % todo: var list here
\let\stopMPpositionmethod\relax
diff --git a/tex/context/base/anch-pos.mkiv b/tex/context/base/anch-pos.mkiv
index 898607cb4..01a662ae2 100644
--- a/tex/context/base/anch-pos.mkiv
+++ b/tex/context/base/anch-pos.mkiv
@@ -151,7 +151,7 @@
\appendtoks
\localpositioningfalse
-\to \everypagebody
+\to \everybeforepagebody
%D \macros
%D {MPp, MPx, MPy, MPw, MPh, MPd,
diff --git a/tex/context/base/anch-tab.mkiv b/tex/context/base/anch-tab.mkiv
index 137b96889..62b46dc46 100644
--- a/tex/context/base/anch-tab.mkiv
+++ b/tex/context/base/anch-tab.mkiv
@@ -33,8 +33,10 @@
\def\dotablebpos{\bpos}
\def\dotableepos{\epos}
+\installcorenamespace{positiontables}
+
\def\tbPOSprefix
- {tbp:\number\noftabpositions:}
+ {\??positiontables\number\noftabpositions:}
\def\tablepos
{\normalexpanded{\global\posXCtoks\emptytoks\the\posXCtoks}}
diff --git a/tex/context/base/attr-col.lua b/tex/context/base/attr-col.lua
index 6683e9a2d..c592d1dc1 100644
--- a/tex/context/base/attr-col.lua
+++ b/tex/context/base/attr-col.lua
@@ -48,7 +48,7 @@ local unsetvalue = attributes.unsetvalue
-- we can also collapse the two attributes: n, n+1, n+2 and then
-- at the tex end add 0, 1, 2, but this is not faster and less
-- flexible (since sometimes we freeze color attribute values at
--- the lua end of the game
+-- the lua end of the game)
--
-- we also need to store the colorvalues because we need then in mp
--
diff --git a/tex/context/base/attr-col.mkiv b/tex/context/base/attr-col.mkiv
index 47a26df22..6231755e9 100644
--- a/tex/context/base/attr-col.mkiv
+++ b/tex/context/base/attr-col.mkiv
@@ -17,6 +17,6 @@
\unprotect
-% We implement this elsewhere.
+% We implement this elsewhere but some coce might end up here.
\protect \endinput
diff --git a/tex/context/base/attr-lay.mkiv b/tex/context/base/attr-lay.mkiv
index 047bbcd45..67cd204e2 100644
--- a/tex/context/base/attr-lay.mkiv
+++ b/tex/context/base/attr-lay.mkiv
@@ -63,7 +63,7 @@
\appendtoks
\let\currentviewerlayer\empty
-\to \everypagebody
+\to \everybeforepagebody
% layout components are implemented rather directly (speed)
diff --git a/tex/context/base/back-exp.mkiv b/tex/context/base/back-exp.mkiv
index 202171a91..7fcb27ff2 100644
--- a/tex/context/base/back-exp.mkiv
+++ b/tex/context/base/back-exp.mkiv
@@ -29,17 +29,17 @@
\definesystemattribute[taggedpar][public]
\unexpanded\def\setelementexporttag
- {\dotripleargument\dosetelementexporttag}
+ {\dotripleargument\backend_set_element_export_tag}
-\def\dosetelementexporttag
+\def\back_set_element_export_tag
{\ifthirdargument
- \expandafter\dosetelementexporttaga
+ \expandafter \backend_set_element_export_tag_a
\else\ifsecondargument
- \expandafter\expandafter\expandafter\dosetelementexporttagb
+ \doubleexpandafter\backend_set_element_export_tag_b
\fi\fi}
-\unexpanded\def\dosetelementexporttaga[#1][#2][#3]{\taggedctxcommand{settagproperty("#1","#2","#3")}}
-\unexpanded\def\dosetelementexporttagb[#1][#2][#3]{\taggedctxcommand{settagproperty("#1","export","#2")}}
+\def\backend_set_element_export_tag_a[#1][#2][#3]{\taggedctxcommand{settagproperty("#1","#2","#3")}}
+\def\backend_set_element_export_tag_a[#1][#2][#3]{\taggedctxcommand{settagproperty("#1","export","#2")}}
% todo: no need for calls when trialtypesetting
@@ -119,16 +119,14 @@
% The action: \setupbackend[export=yes] % or filename
-% maybe we will move css to setupexport ? or just support both
-
-\def\c!export {export} % maybe: option={css,xhtml}
-\def\c!css {css}
-\def\c!xhtml {xhtml}
+% maybe xhtml css settings will move to setupexport
% maybe some day a definer
-\installparameterhandler \??be {export}
-\installsetuphandler \??be {export}
+\installcorenamespace{export}
+
+\installparameterhandler \??export {export}
+\installsetuphandler \??export {export}
\setupexport
[\c!align=\number\raggedstatus,
diff --git a/tex/context/base/back-ini.mkiv b/tex/context/base/back-ini.mkiv
index f2301b7a3..4324a9eb5 100644
--- a/tex/context/base/back-ini.mkiv
+++ b/tex/context/base/back-ini.mkiv
@@ -138,28 +138,19 @@
%D know what the target file will be. In other driver
%D modules we wil set \type {\jobsuffix} to \type {pdf}.
-\def\jobsuffix{pdf}
+%D Backend configuration:
-\ifdefined\resetsystemmode \else % can't happen
- \let\setsystemmode \gobbleoneargument
- \let\resetsystemmode\gobbleoneargument
-\fi
+\installcorenamespace{backend}
-\def\setjobsuffix#1%
- {\resetsystemmode\jobsuffix
- \edef\jobsuffix{#1}%
- \setsystemmode\jobsuffix}
-
-\unexpanded\def\setupoutput[#1]{} % will be command line switch
+\installdirectcommandhandler \??backend {backend}
-%D New:
+\let\jobsuffix\empty
-\newtoks\everysetupbackend
-
-\def\backendparameter#1{\csname\ifcsname\??bc#1\endcsname\??bc#1\else\s!empty\fi\endcsname}
+\unexpanded\def\backend_set_job_suffix#1% % checking could happen in mode
+ {\ifx\jobsuffix\empty\else\resetsystemmode\jobsuffix\fi
+ \edef\jobsuffix{#1}%
+ \ifx\jobsuffix\empty\else\setsystemmode \jobsuffix\fi}
-\def\setupbackend[#1]%
- {\getparameters[\??bc][#1]%
- \the\everysetupbackend}
+\backend_set_job_suffix{pdf} % default
\protect \endinput
diff --git a/tex/context/base/back-pdf.mkiv b/tex/context/base/back-pdf.mkiv
index bd0b12733..8d4f0d6c7 100644
--- a/tex/context/base/back-pdf.mkiv
+++ b/tex/context/base/back-pdf.mkiv
@@ -56,9 +56,9 @@
%D This one can be consulted by users although the suffix is also
%D a system mode.
-\setjobsuffix{pdf}
+\backend_set_job_suffix{pdf}
-%D PDF/X (matbe combine the two lua calls)
+%D PDF/X (maybe combine the two lua calls)
\setupbackend
[xmpfile=]
@@ -87,22 +87,21 @@
%D These are the only official methods to add stuff to the resources.
-\def\pdfbackendsetcatalog #1#2{\ctxlua{lpdf.addtocatalog ("#1",\!!bs#2\!!es)}}
-\def\pdfbackendsetinfo #1#2{\ctxlua{lpdf.addtoinfo ("#1",\!!bs#2\!!es)}}
-\def\pdfbackendsetname #1#2{\ctxlua{lpdf.addtonames ("#1",\!!bs#2\!!es)}}
+\unexpanded\def\pdfbackendsetcatalog #1#2{\ctxlua{lpdf.addtocatalog ("#1",\!!bs#2\!!es)}}
+\unexpanded\def\pdfbackendsetinfo #1#2{\ctxlua{lpdf.addtoinfo ("#1",\!!bs#2\!!es)}}
+\unexpanded\def\pdfbackendsetname #1#2{\ctxlua{lpdf.addtonames ("#1",\!!bs#2\!!es)}}
-\def\pdfbackendsetpageattribute #1#2{\ctxlua{lpdf.addtopageattributes ("#1",\!!bs#2\!!es)}}
-\def\pdfbackendsetpagesattribute#1#2{\ctxlua{lpdf.addtopagesattributes("#1",\!!bs#2\!!es)}}
-\def\pdfbackendsetpageresource #1#2{\ctxlua{lpdf.addtopageresources ("#1",\!!bs#2\!!es)}}
+\unexpanded\def\pdfbackendsetpageattribute #1#2{\ctxlua{lpdf.addtopageattributes ("#1",\!!bs#2\!!es)}}
+\unexpanded\def\pdfbackendsetpagesattribute#1#2{\ctxlua{lpdf.addtopagesattributes("#1",\!!bs#2\!!es)}}
+\unexpanded\def\pdfbackendsetpageresource #1#2{\ctxlua{lpdf.addtopageresources ("#1",\!!bs#2\!!es)}}
-\def\pdfbackendsetextgstate #1#2{\ctxlua{lpdf.adddocumentextgstate ("#1",lpdf.verbose(\!!bs#2\!!es))}}
-\def\pdfbackendsetcolorspace #1#2{\ctxlua{lpdf.adddocumentcolorspace("#1",lpdf.verbose(\!!bs#2\!!es))}}
-\def\pdfbackendsetpattern #1#2{\ctxlua{lpdf.adddocumentpattern ("#1",lpdf.verbose(\!!bs#2\!!es))}}
-\def\pdfbackendsetshade #1#2{\ctxlua{lpdf.adddocumentshade ("#1",lpdf.verbose(\!!bs#2\!!es))}}
+\unexpanded\def\pdfbackendsetextgstate #1#2{\ctxlua{lpdf.adddocumentextgstate ("#1",lpdf.verbose(\!!bs#2\!!es))}}
+\unexpanded\def\pdfbackendsetcolorspace #1#2{\ctxlua{lpdf.adddocumentcolorspace("#1",lpdf.verbose(\!!bs#2\!!es))}}
+\unexpanded\def\pdfbackendsetpattern #1#2{\ctxlua{lpdf.adddocumentpattern ("#1",lpdf.verbose(\!!bs#2\!!es))}}
+\unexpanded\def\pdfbackendsetshade #1#2{\ctxlua{lpdf.adddocumentshade ("#1",lpdf.verbose(\!!bs#2\!!es))}}
-\def\pdfbackendcurrentresources {\cldcontext{lpdf.collectedresources()}}
-
-\def\pdfcolor #1{\ctxlua{lpdf.pdfcolor(\thecolorattribute{#1})}} \let\PDFcolor\pdfcolor
+ \def\pdfbackendcurrentresources {\cldcontext{lpdf.collectedresources()}}
+ \def\pdfcolor #1{\ctxlua{lpdf.pdfcolor(\thecolorattribute{#1})}} \let\PDFcolor\pdfcolor
%D Let's block these:
@@ -223,13 +222,13 @@
\def\dostartobject#1#2#3#4#5%
{\bgroup
\setbox\objectbox\vbox\bgroup
- \def\dodostopobject{\egroup\doregisterobject{#1}{#2}}}
+ \def\backend_stop_object{\egroup\backend_register_object{#1}{#2}}}
\def\dostopobject
- {\dodostopobject
+ {\backend_stop_object
\egroup}
-\def\doregisterobject#1#2%
+\def\backend_register_object#1#2%
{\the\pdfbackendeveryxform
\finalizeobjectbox\objectbox
\immediate\pdfxform resources {\pdfbackendcurrentresources}\objectbox
@@ -241,7 +240,8 @@
\def\doinsertobject#1#2%
{\begingroup
\doifobjectreferencefoundelse{#1}{#2}
- {\dogetobjectreference{#1}{#2}\PDFobjectreference\pdfrefxform\PDFobjectreference}%
+ {\dogetobjectreference{#1}{#2}\m_backend_object_reference
+ \pdfrefxform\m_backend_object_reference}%
\donothing
\endgroup}
@@ -251,8 +251,8 @@
{\begingroup
\xdef\lastpredefinedsymbol{#1}%
\settightobject{SYM}{#1}\hbox{\symbol[#1]}% to be checked ... maybe only fitting
- \dogetobjectreference{SYM}{#1}\lastref
- \ctxlua{backends.codeinjections.registersymbol("#1",\lastref)}%
+ \dogetobjectreference{SYM}{#1}\m_backend_object_reference
+ \ctxlua{backends.codeinjections.registersymbol("#1",\m_backend_object_reference)}%
\endgroup}
% for the moment here
@@ -268,24 +268,39 @@
%D implemented in the \POSTSCRIPT\ driver. This code is
%D somewhat obsolete as we now have metapost embedded.
-\def\doPDFovalcalc#1#2#3%
- {\PointsToBigPoints{\dimexpr#1+#2\relax}#3}
+% \def\backend_oval_calc#1#2#3%
+% {\PointsToBigPoints{\dimexpr#2+#3\relax}#1}
-\unexpanded\def\doovalbox#1#2#3#4#5#6#7#8% todo: \scratchdimen/\scatchbox
+\unexpanded\def\doovalbox#1#2#3#4#5#6#7#8%
{\forcecolorhack
\bgroup
- \dimen0=#4\divide\dimen0 \plustwo
- \doPDFovalcalc{0pt}{+\dimen0}\xmin
- \doPDFovalcalc{#1}{-\dimen0}\xmax
- \doPDFovalcalc{#2}{-\dimen0}\ymax
- \doPDFovalcalc{-#3}{+\dimen0}\ymin
- \advance\dimen0 by #5%
- \doPDFovalcalc{0pt}{+\dimen0}\xxmin
- \doPDFovalcalc{#1}{-\dimen0}\xxmax
- \doPDFovalcalc{#2}{-\dimen0}\yymax
- \doPDFovalcalc{-#3}{+\dimen0}\yymin
- \doPDFovalcalc{#4}{\zeropoint}\stroke
- \doPDFovalcalc{#5}{\zeropoint}\radius
+% \scratchdimen#4%
+% \divide\scratchdimen\plustwo
+% \backend_oval_calc\xmin \zeropoint\scratchdimen
+% \backend_oval_calc\xmax {#1}{-\scratchdimen}%
+% \backend_oval_calc\ymax {#2}{-\scratchdimen}%
+% \backend_oval_calc\ymin {-#3}\scratchdimen
+% \advance\scratchdimen by #5%
+% \backend_oval_calc\xxmin \zeropoint\scratchdimen
+% \backend_oval_calc\xxmax {#1}{-\scratchdimen}%
+% \backend_oval_calc\yymax {#2}{-\scratchdimen}%
+% \backend_oval_calc\yymin {-#3}\scratchdimen
+% \backend_oval_calc\stroke{#4}\zeropoint
+% \backend_oval_calc\radius{#5}\zeropoint
+ %
+ \PointsToBigPoints{#4} \stroke
+ \PointsToBigPoints{#5} \radius
+ \scratchdimen\dimexpr#4/\plustwo\relax
+ \PointsToBigPoints \scratchdimen \xmin
+ \PointsToBigPoints{\dimexpr #1-\scratchdimen}\xmax
+ \PointsToBigPoints{\dimexpr #2-\scratchdimen}\ymax
+ \PointsToBigPoints{\dimexpr-#3+\scratchdimen}\ymin
+ \advance\scratchdimen by #5\relax
+ \PointsToBigPoints \scratchdimen \xxmin
+ \PointsToBigPoints{\dimexpr #1-\scratchdimen}\xxmax
+ \PointsToBigPoints{\dimexpr #2-\scratchdimen}\yymax
+ \PointsToBigPoints{\dimexpr-#3+\scratchdimen}\yymin
+ %
\edef\dostroke{#6}%
\edef\dofill{#7}%
\edef\mode{\number#8 \space}%
@@ -483,10 +498,13 @@
\fi
Q}%
\fi}%
- \wd\scratchbox#1\ht\scratchbox#2\dp\scratchbox#3\box\scratchbox
+ \wd\scratchbox#1%
+ \ht\scratchbox#2%
+ \dp\scratchbox#3%
+ \box\scratchbox
\egroup}
-\unexpanded\def\pdfactualtext#1#2%
+\unexpanded\def\pdfactualtext#1#2% not interfaced
{\pdfliteral direct{/Span <</ActualText \ctxlua{tex.write(lpdf.tosixteen("#2"))} >> BDC}%
#1%
\pdfliteral direct{EMC}}
diff --git a/tex/context/base/buff-ini.mkiv b/tex/context/base/buff-ini.mkiv
index 7fedd3b60..3fe9f18dd 100644
--- a/tex/context/base/buff-ini.mkiv
+++ b/tex/context/base/buff-ini.mkiv
@@ -27,150 +27,128 @@
\def\doifelsebuffer#1%
{\ctxcommand{doifelsebuffer("#1")}}
-\def\resetbuffer
- {\dosingleempty\doresetbuffer}
+\unexpanded\def\resetbuffer
+ {\dosingleempty\buffers_reset}
-\def\doresetbuffer[#1]%
+\def\buffers_reset[#1]%
{\ctxcommand{erasebuffer("#1")}}
-\unexpanded\def\dostartdefinedbuffer
+\setuvalue{\e!start\v!buffer}%
{\bgroup
\obeylines
- \doquadrupleempty\dodostartbuffer}
+ \dosingleempty\buffers_start}
-\let\dostartbuffer\dostartdefinedbuffer % used in some modules
+\def\buffers_start[#1]%
+ {\buffers_start_indeed{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}}
-\def\dodostartbuffer[#1][#2][#3][#4]% [category] [name] [start] [stop]
- {\iffourthargument
- \def\next{\dododostartbuffer{#1}{#2}{#3}{#4}}%
- \else
- \def\next{\dododostartbuffer {}{#1}{#2}{#3}}%
- \fi
- \next}
-
-\def\dododostartbuffer#1#2#3#4% \donothing needed !
- {\normalexpanded{\dodowithbuffer{#2}{#3}{#4}{\donothing}{\egroup\noexpand\getvalue{#4}}}}
+\def\buffers_start_indeed#1#2#3#4% \donothing needed !
+ {\normalexpanded{\buffers_pickup{#2}{#3}{#4}{}{\buffers_stop{#4}}}}
-\setvalue{\e!start\v!buffer}%
+\unexpanded\def\grabbufferdata % was: \dostartbuffer
{\bgroup
\obeylines
- \dosingleempty\redostartbuffer}
+ \doquadrupleempty\buffers_grab_direct_indeed}
-\def\redostartbuffer[#1]%
- {\dododostartbuffer{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}}
+\unexpanded\def\grabbufferdatadirect % name start stop
+ {\buffers_start_indeed\empty}
-\def\dowithbuffer#1#2#3% name, startsequence, stopsequence, before, after
- {\normalexpanded{\dodowithbuffer{#1}{#2}{#3}}}
+\def\buffers_grab_direct_indeed % [category] [name] [start] [stop]
+ {\iffourthargument
+ \expandafter\buffers_grab_direct_indeed_a
+ \else
+ \expandafter\buffers_grab_direct_indeed_b
+ \fi}
+
+\def\buffers_grab_direct_indeed_a[#1][#2][#3][#4]{\buffers_start_indeed{#1}{#2}{#3}{#4}}
+\def\buffers_grab_direct_indeed_b[#1][#2][#3][#4]{\buffers_start_indeed\empty{#1}{#2}{#3}}
-\unexpanded\long\def\dodowithbuffer#1#2#3#4#5% name, startsequence, stopsequence, before, after
+\unexpanded\def\buffers_pickup#1#2#3#4#5% name, startsequence, stopsequence, before, after
{#4%
\bgroup
\edef\catcodetableofbuffer{\number\catcodetable}%
\ctxcommand{erasebuffer("#1")}%
- \setcatcodetable \vrbcatcodes
- \long\def\nododowithbuffer
+ \setcatcodetable\vrbcatcodes
+ \def\buffers_finish
{\egroup
#5}%
- \long\def\dododowithbuffer##1#3% is detokenize needed? TEST
+ \def\buffers_gobble##1#3% is detokenize needed? TEST
%{\ctxcommand{grabbuffer("#1","#2","#3",\!!bs\detokenize{##1}\!!es)} % space ?
{\ctxcommand{grabbuffer("#1","#2","#3",\!!bs>##1\!!es,\catcodetableofbuffer)}% space ?
- \dododowithbuffer
- \nododowithbuffer}%
- \dododowithbuffer}
+ \buffers_gobble
+ \buffers_finish}%
+ \buffers_gobble}
-\def\setbuffer
- {\dosingleempty\dosetbuffer}
+\unexpanded\def\buffers_stop#1%
+ {\egroup
+ \getvalue{#1}}
+
+\unexpanded\def\setbuffer
+ {\dosingleempty\buffers_set}
\let\endbuffer\relax
-\long\def\dosetbuffer[#1]#2\endbuffer % seldom used so we just pass #2
+\def\buffers_set[#1]#2\endbuffer % seldom used so we just pass #2
{\ctxcommand{assignbuffer("#1",\!!bs\detokenize{#2}\!!es,\number\catcodetable)}}
-\def\namedbufferparameter#1#2{\csname\??bu#1#2\endcsname}
+% beware, never adapt the global buffer settings, actually we might introduce
+% a broken parent chain for this purpose but on the other hand it's not that
+% different from framed cum suis
-\unexpanded\def\setupbuffer
- {\dodoubleempty\dosetupbuffer}
+\installcorenamespace{buffer}
-\def\dosetupbuffer[#1][#2]%
- {\ifsecondargument
- \getparameters[\??bu#1][#2]%
- \else
- \getparameters[\??bu][#1]%
- \fi}
-
-\newtoks\everydefinebuffer
-
-\unexpanded\def\definebuffer
- {\dodoubleempty\dodefinebuffer}
-
-\def\dodefinebuffer[#1][#2]%
- {\iffirstargument
- \global\advance\nofdefinedbuffers\plusone
- \setevalue{\??bu#1\c!number}{\number\nofdefinedbuffers}%
- \def\currentbuffer{#1}%
- \getparameters[\??bu#1][#2]%
- \the\everydefinebuffer
- \else
- % fatal error
- \fi}
+\installcommandhandler \??buffer {buffer} \??buffer
-\def\thebuffernumber #1{\csname\??bu#1\c!number\endcsname}
-\def\thedefinedbuffer#1{def-\csname\??bu#1\c!number\endcsname}
+\setupbuffer
+ [\c!before=,
+ \c!after=]
\appendtoks
- \setuevalue{\e!start\currentbuffer}%
- {\noexpand\dostartdefinedbuffer
- [\currentbuffer]%
- [def-\number\nofdefinedbuffers]%
- [\e!start\currentbuffer]%
- [\e!stop\currentbuffer]}%
- \setuevalue{\e!get\currentbuffer}%
- {\noexpand\dogetdefinedbuffer
- [\currentbuffer]%
- [def-\number\nofdefinedbuffers]}%
+ \global\advance\nofdefinedbuffers\plusone
+ \setexpandedbufferparameter\c!number{\number\nofdefinedbuffers}%
+ \setuevalue{\e!start\currentbuffer}{\buffers_start_indeed
+ {\currentbuffer}{def-\number\nofdefinedbuffers}{\e!start\currentbuffer}{\e!stop\currentbuffer}}%
+ \setuevalue{\e!get\currentbuffer}{\buffers_get_stored
+ {\currentbuffer}{def-\number\nofdefinedbuffers}}%
\to \everydefinebuffer
-\def\doprocessbufferlist#1#2%
- {\doifelsenothing{#1}
- {\dododogetbuffer\empty}
- {\processcommalist[#1]#2}}
+\def\thebuffernumber #1{\namedbufferparameter{#1}\c!number}
+\def\thedefinedbuffer#1{def-\namedbufferparameter{#1}\c!number}
\unexpanded\def\getbuffer % no [settings yet]
- {\dosingleempty\dogetbuffer}
+ {\dosingleempty\buffers_get}
-\unexpanded\def\dogetbuffer[#1]% [name]
+\unexpanded\def\buffers_get[#1]% [name]
{\namedbufferparameter\empty\c!before
- \doprocessbufferlist{#1}\dododogetbuffer
+ \doifelsenothing{#1}
+ {\buffers_get_stored_indeed\empty}
+ {\processcommalist[#1]\buffers_get_stored_indeed}%
\namedbufferparameter\empty\c!after}
-\def\dogetdefinedbuffer[#1][#2]%
+\unexpanded\def\buffers_get_stored#1#2%
{\namedbufferparameter{#1}\c!before
- \dododogetbuffer{#2}%
+ \buffers_get_stored_indeed{#2}%
\namedbufferparameter{#1}\c!after}
-\unexpanded\def\dododogetbuffer#1%
+\unexpanded\def\buffers_get_stored_indeed#1%
{\ctxcommand{getbuffer("#1")}}
-\definebuffer[\v!hiding] \setupbuffer[\v!hiding][\c!before=,\c!after=]
+\definebuffer
+ [\v!hiding]
+
+\setupbuffer
+ [\v!hiding]
+ [\c!before=,
+ \c!after=]
-% \let\processTEXbuffer\getbuffer % handy synonym
+\unexpanded\def\processTEXbuffer
+ {\dosingleempty\buffers_process_tex}
-\unexpanded\def\doprocesstexbuffer#1%
+\def\buffers_process_tex[#1]%
{\pushcatcodetable
\catcodetable\ctxcatcodes % \setcatcodetable
- \dododogetbuffer{#1}%
+ \buffers_get_stored_indeed{#1}%
\popcatcodetable}
-\unexpanded\def\processTEXbuffer
- {\dosingleempty\doprocessTEXbuffer}
-
-\def\doprocessTEXbuffer[#1]%
- {\doprocesstexbuffer{#1}}
-
-\setupbuffer
- [\c!before=,
- \c!after=]
-
% only mkiv:
%
% \startbuffer[x]
@@ -179,9 +157,11 @@
%
% \savebuffer[x][temp.log]
-\unexpanded\def\savebuffer{\dodoubleempty\dosavebuffer}
+\unexpanded\def\savebuffer
+ {\dodoubleempty\buffers_save}
-\def\dosavebuffer[#1][#2]{\ctxcommand{savebuffer("#1","#2")}}
+\def\buffers_save[#1][#2]%
+ {\ctxcommand{savebuffer("#1","#2")}}
%D Experimental: no expansion of commands in buffer!
@@ -194,11 +174,17 @@
%
% \ctxluabuffer[what] \ctxluabuffer
-\def\ctxluabuffer {\dosingleempty\doctxluabuffer}
-\def\mkvibuffer {\dosingleempty\domkvibuffer}
-\def\mkvibufferraw{\dosingleempty\domkvibufferraw}
+\unexpanded\def\ctxluabuffer {\dosingleempty\buffers_ctxlua}
+\unexpanded\def\mkvibuffer {\dosingleempty\buffers_mkvi}
+% what was: \mkvibufferraw
+
+\def\buffers_ctxlua[#1]{\ctxcommand{getbufferctxlua("#1")}}
+\def\buffers_mkvi [#1]{\ctxcommand{getbuffermkvi("#1")}}
+
+% used elsewhere
+
+\unexpanded\def\doprocesstexbuffer#1{\buffers_process_tex[#1]} % still used?
-\def\doctxluabuffer [#1]{\ctxcommand{getbufferctxlua("#1")}}
-\def\domkvibuffer [#1]{\ctxcommand{getbuffermkvi("#1")}}
+\let\dostartbuffer\grabbufferdata % for old times sake
\protect \endinput
diff --git a/tex/context/base/buff-ver.mkiv b/tex/context/base/buff-ver.mkiv
index 36f9130ef..9f767be32 100644
--- a/tex/context/base/buff-ver.mkiv
+++ b/tex/context/base/buff-ver.mkiv
@@ -23,6 +23,10 @@
%D Initializations.
+\installcorenamespace{typinglines}
+\installcorenamespace{typingspace}
+\installcorenamespace{typingblank} % needs checking ... used?
+
\newtoks\everyinitializeverbatim
\appendtoks
@@ -37,31 +41,31 @@
\unexpanded\def\specialcontrolspace{\hskip\zeropoint\fastcontrolspace\hskip\zeropoint}
-\setvalue{\??tp:\c!lines:\v!yes }{\obeybreakpoints}
-\setvalue{\??tp:\c!lines:\v!hyphenated}{\obeyhyphens}
+\setvalue{\??typinglines\v!yes }{\obeybreakpoints}
+\setvalue{\??typinglines\v!hyphenated}{\obeyhyphens}
-\setvalue{\??tp:\c!space:\v!on }{\let\obeyedspace\specialcontrolspace}
-\setvalue{\??tp:\c!space:\v!stretch }{\let\obeyedspace\specialstretchedspace}
-\setvalue{\??tp:\c!space:\v!normal }{}
-\setvalue{\??tp:\c!space:\v!fixed }{\let\obeyedspace\specialfixedspace}
+\setvalue{\??typingspace\v!on }{\let\obeyedspace\specialcontrolspace}
+\setvalue{\??typingspace\v!stretch }{\let\obeyedspace\specialstretchedspace}
+\setvalue{\??typingspace\v!normal }{}
+\setvalue{\??typingspace\v!fixed }{\let\obeyedspace\specialfixedspace}
-\setvalue{\??tp:\c!blank:\v!standard }{\ctxparskip}
-\setvalue{\??tp:\c!blank:\v!small }{\smallskipamount}
-\setvalue{\??tp:\c!blank:\v!medium }{\medskipamount}
-\setvalue{\??tp:\c!blank:\v!big }{\bigskipamount}
-\setvalue{\??tp:\c!blank:\v!halfline }{.5\baselineskip}
-\setvalue{\??tp:\c!blank:\v!line }{\baselineskip}
-\setvalue{\??tp:\c!blank:\v!none }{\zeropoint}
+\setvalue{\??typingblank\v!standard }{\ctxparskip}
+\setvalue{\??typingblank\v!small }{\smallskipamount}
+\setvalue{\??typingblank\v!medium }{\medskipamount}
+\setvalue{\??typingblank\v!big }{\bigskipamount}
+\setvalue{\??typingblank\v!halfline }{.5\baselineskip}
+\setvalue{\??typingblank\v!line }{\baselineskip}
+\setvalue{\??typingblank\v!none }{\zeropoint}
\def\secondstageinitializetype
{\let\obeyedspace\specialobeyedspace
- \csname\??tp:\c!space:\typeparameter\c!space\endcsname
+ \csname\??typingspace\typeparameter\c!space\endcsname
\relax\the\everyinitializeverbatim\relax}
\def\secondstageinitializetyping
{\let\obeyedspace\specialobeyedspace
- \csname\??tp:\c!space:\typingparameter\c!space\endcsname
- \csname\??tp:\c!lines:\typingparameter\c!lines\endcsname
+ \csname\??typingspace\typingparameter\c!space\endcsname
+ \csname\??typinglines\typingparameter\c!lines\endcsname
\relax\the\everyinitializeverbatim\relax}
\def\firststageinitializetype
@@ -108,7 +112,9 @@
%D Specific inline verbatim commands can be defined with the
%D following command.
-\installcommandhandler \??ty {type} \??ty
+\installcorenamespace{type}
+
+\installcommandhandler \??type {type} \??type
\appendtoks
\normalexpanded{\dodefinetype{\currenttype}}%
@@ -138,7 +144,9 @@
%D
%D The definitions default to the standard typing values.
-\installcommandhandler \??tp {typing} \??tp
+\installcorenamespace{typing}
+
+\installcommandhandler \??typing {typing} \??typing
\appendtoks
\setuevalue{\e!start\currenttyping}{\dostarttyping{\currenttyping}}%
@@ -420,7 +428,7 @@
\normalexpanded{\dotypeblockverbatim{\e!start\currenttyping}{\e!stop\currenttyping}}}
\unexpanded\def\dotypeblockverbatim#1#2%
- {\dowithbuffer{_typing_}{#1}{#2}{}{\dodotypeblockverbatim{#1}{#2}}}
+ {\buffers_pickup{_typing_}{#1}{#2}{}{\dodotypeblockverbatim{#1}{#2}}} % was dowithbuffer
\def\dodotypeblockverbatim#1#2%
{\secondstageinitializetyping
@@ -649,8 +657,8 @@
\definetyping[\v!typing]
-\setuptyping[\v!file] [\s!parent=\??tp\v!typing] % we don't want \start..\stop overload
-\setuptyping[\v!buffer][\s!parent=\??tp\v!file] % we don't want \start..\stop overload
+\setuptyping[\v!file] [\s!parent=\??typing\v!typing] % we don't want \start..\stop overload
+\setuptyping[\v!buffer][\s!parent=\??typing\v!file] % we don't want \start..\stop overload
%D The setups for inline verbatim default to:
diff --git a/tex/context/base/chem-str.mkiv b/tex/context/base/chem-str.mkiv
index 998ff942a..40e631c87 100644
--- a/tex/context/base/chem-str.mkiv
+++ b/tex/context/base/chem-str.mkiv
@@ -49,6 +49,8 @@
\unprotect
+\installcorenamespace{chemicalsymbol}
+
\unexpanded\def\setupchemical
{\dosingleempty\dosetupchemical}
@@ -80,16 +82,16 @@
{\dodoubleempty\dodefinechemicalsymbol}
\def\dodefinechemicalsymbol[#1][#2]%
- {\setvalue{\??cm::#1}{#2}}
+ {\setvalue{\??chemicalsymbol#1}{#2}}
\unexpanded\def\chemicalsymbol[#1]%
- {\getvalue{\??cm::#1}}
+ {\getvalue{\??chemicalsymbol#1}}
% size (small medium big)
\unexpanded\def\dosetchemicaltext
- {\dousestyleparameter\@cmstyle
- \dousecolorparameter\@cmcolor}
+ {\dousestyleparameter\@@cmstyle
+ \dousecolorparameter\@@cmcolor}
\edef\chemicaltoplocation{t}
\edef\chemicalbotlocation{b}
@@ -505,17 +507,17 @@
% \formulachemicalmid\expandafter{\the\formulachemicalmid\dodochemicalformulamid{#1}&}}
%
% \def\dodochemicalformulamid#1%
-% {\ifcsname\??cm::\detokenize{#1}\endcsname
-% \csname\??cm::\detokenize{#1}\expandafter\endcsname{}{}%
+% {\ifcsname\??chemicalsymbol\detokenize{#1}\endcsname
+% \csname\??chemicalsymbol\detokenize{#1}\expandafter\endcsname{}{}%
% \else
% \molecule{#1}{}{}%
% \fi}
\def\domidformulachemical#1%
- {\csname\??cm::\detokenize{#1}\endcsname}
+ {\csname\??chemicalsymbol\detokenize{#1}\endcsname}
\def\doformulachemical#1#2#3% we could do hboxes and measure
- {\ifcsname\??cm::\detokenize{#1}\endcsname
+ {\ifcsname\??chemicalsymbol\detokenize{#1}\endcsname
\formulachemicalmid\expandafter{\the\formulachemicalmid\domidformulachemical{#1}{#2}{#3}}%
\else
\ifthirdargument
diff --git a/tex/context/base/colo-ext.mkiv b/tex/context/base/colo-ext.mkiv
index 6cb02f88b..12af6798a 100644
--- a/tex/context/base/colo-ext.mkiv
+++ b/tex/context/base/colo-ext.mkiv
@@ -29,10 +29,10 @@
%D
%D will negate the colors in box zero.
-\def\negatecolorbox#1%
+\unexpanded\def\negatecolorbox#1%
{\setbox#1\hbox
{\startnegativeproperty % might change
- \startcolor[white]\vrule\!!height\ht#1\!!depth\dp#1\!!width\wd#1\stopcolor
+ \startcolor[\s!white]\vrule\!!height\ht#1\!!depth\dp#1\!!width\wd#1\stopcolor
\hskip-\wd#1%
\box#1%
\stopnegativeproperty}}
@@ -43,89 +43,57 @@
%D We can move the stack and attribute setting to the \LUA\ end.
-\def\registercolorintent#1#2%
- {\setevalue{\??qi:#1}{\attribute\colorintentattribute\ctxcommand{registercolorintent('#2')} }}
+\installcorenamespace{colorintent}
-\def\dotriggercolorintent
+\unexpanded\def\registercolorintent#1#2%
+ {\setevalue{\??colorintent#1}{\attribute\colorintentattribute\ctxcommand{registercolorintent('#2')} }}
+
+\unexpanded\def\colors_trigger_intent
{\ctxcommand{enablecolorintents()}%
- \gdef\dotriggercolorintent##1{\csname\??qi:##1\endcsname}%
- \dotriggercolorintent}
+ \unexpanded\gdef\colors_trigger_intent##1{\csname\??colorintent##1\endcsname}%
+ \colors_trigger_intent}
\registercolorintent{knockout} {knockout}
\registercolorintent{overprint}{overprint}
\installattributestack\colorintentattribute
-\setevalue{\??qi:\v!none}{\attribute\colorintentattribute\attributeunsetvalue} % or reset? used at all?
+\setevalue{\??colorintent\v!none}{\attribute\colorintentattribute\attributeunsetvalue} % or reset? used at all?
\unexpanded\def\startcolorintent[#1]%
{\pushattribute\colorintentattribute
- \dotriggercolorintent{#1}}
+ \colors_trigger_intent{#1}}
\unexpanded\def\stopcolorintent
{\popattribute\colorintentattribute}
\unexpanded\def\startoverprint{\startcolorintent[\v!overprint]}
-\unexpanded\def\stopoverprint {\stopcolorintent}
-
\unexpanded\def\startknockout {\startcolorintent[\v!knockout ]}
-\unexpanded\def\stopknockout {\stopcolorintent}
+
+\let\stopoverprint\stopcolorintent
+\let\stopknockout \stopcolorintent
\let\starttextcolorintent\relax
\let\stoptextcolorintent \relax
-\setupcolors
- [\c!overprint=\v!no]
-
\appendtoks
- \dosettextcolorintent
+ \colors_set_text_intent
\to \everysetupcolors
-\def\dosettextcolorintent
- {\doifnot\@@clintent\v!none
- {\xdef\starttextcolorintent{\noexpand\dotriggercolorintent{\@@clintent}}%
- \glet\dosettextcolorintent\relax
- \dotriggercolorintent\@@clintent}}
+\let\p_colors_intent\empty
+
+\def\colors_set_text_intent
+ {\edef\p_colors_intent{\colorsparameter\c!intent}%
+ \ifx\p_colors_intent\v!none \else
+ \unexpanded\xdef\starttextcolorintent{\colors_trigger_intent{\p_colors_intent}}%
+ \glet\colors_set_text_intent\relax
+ \colors_trigger_intent\p_colors_intent
+ \fi}
\appendtoks \starttextcolorintent \to \everystarttextproperties
\appendtoks \stoptextcolorintent \to \everystoptextproperties
-\setupcolors[\c!intent=\v!none]
-
-% A goodie that replaces the startMPcolor hackery
-
-% \definecolor[red-t] [r=1,t=0.5,a=1]
-% \definecolor[green-t][g=1,t=0.5,a=1]
-%
-% \defineintermediatecolor[mycolora][0.5,red,green]
-% \defineintermediatecolor[mycolorb][0.5,red-t,green-t]
-%
-% \definecolor[mycolorc][.5(blue,red)]
-% \definecolor[mycolord][.5(blue)]
-%
-% \enabledirectives[colors.pgf]
-% \definecolor[mycolorx][magenta!50!yellow]
-%
-% \starttext
-% test {\mycolora OEPS} test
-% test {\mycolorb OEPS} test
-% test {\mycolorc OEPS} test
-% test {\mycolord OEPS} test
-% test {\mycolorx OEPS} test
-% \stoptext
-
-\unexpanded\def\defineintermediatecolor
- {\dotripleempty\dodefineintermediatecolor}
-
-\def\dodefineintermediatecolor[#1][#2][#3]% \dotripleempty adds {} inside []
- {\dododefineintermediatecolor[#1][#2][#3]}
-
-\def\dododefineintermediatecolor[#1][#2,#3,#4][#5]%
- {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
- \ctxcommand{defineintermediatecolor("#1","#2",
- \thecolorattribute{#3},\thecolorattribute{#4},
- \thetransparencyattribute{#3},\thetransparencyattribute{#4},
- "#5",false,\iffreezecolors true\else false\fi)}% not global
- \dodefinecolorcommand\setvalue{#1}}
+\setupcolors
+ [\c!intent=\v!none]
\protect \endinput
diff --git a/tex/context/base/colo-grp.mkiv b/tex/context/base/colo-grp.mkiv
new file mode 100644
index 000000000..a6cf0fbf3
--- /dev/null
+++ b/tex/context/base/colo-grp.mkiv
@@ -0,0 +1,168 @@
+%D \module
+%D [ file=colo-grp,
+%D version=2011.12.27, % moved from colo-ini
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Groups,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Regular colors and palets are used most, contrary to groups
+%D which is why we define their support in a separate module.
+
+\writestatus{loading}{ConTeXt Color Macros / Groups}
+
+\unprotect
+
+%D \macros
+%D {definecolorgroup}
+%D
+%D The naming of the colors in this palet suggests some
+%D ordening, which in turn is suported by color grouping.
+%D
+%D \starttyping
+%D \definecolorgroup
+%D [red]
+%D [1.00:0.90:0.90,
+%D 1.00:0.80:0.80,
+%D 1.00:0.70:0.70,
+%D 1.00:0.55:0.55,
+%D 1.00:0.40:0.40,
+%D 1.00:0.25:0.25,
+%D 1.00:0.15:0.15,
+%D 0.90:0.00:0.00]
+%D \stoptyping
+%D
+%D In such a color group colors are numbered from~$1$ to~$n$.
+%D
+%D \showsetup{definecolorgroup}
+%D
+%D This kind of specification is not only more compact than
+%D defining each color separate, it also loads faster and takes
+%D less bytes.
+
+\installcorenamespace{colorgroup}
+\installcorenamespace{colorgroupsetter}
+
+\newcount\c_colors_group_n % scratch counter
+
+\unexpanded\def\definecolorgroup % sort of obsolete, just use palets directly
+ {\dotripleempty\colors_define_color_group}
+
+\def\colors_define_color_group
+ {\ifthirdargument
+ \expandafter\colors_define_color_group_normal
+ \else
+ \expandafter\colors_define_color_group_checked
+ \fi}
+
+\def\colors_define_color_group_normal[#1][#2][#3]%
+ {\c_colors_group_n\zerocount
+ \processcommalist[#3]{\colors_define_color_group_entry{#1}{#2}}}
+
+\def\colors_define_color_group_checked[#1][#2][#3]%
+ {\doifinstringelse{:}{#2}
+ {\colors_define_color_group_normal[#1][\v!rgb][#2]}
+ {\doloop % inherited
+ {\ifcsname\??colorgroup#2:\recurselevel\endcsname
+ \setevalue{\??colorgroup#1:\recurselevel}{\csname\??colorgroup#2:\recurselevel\endcsname}%
+ \else
+ \exitloop
+ \fi}}}
+
+\def\colors_define_color_group_entry#1#2#3% name mode specification
+ {\advance\c_colors_group_n\plusone
+ \csname\??colorgroupsetter\ifcsname\??colorgroupssetter#2\endcsname#2\else\s!rgb\fi\endcsname[#1:\the\c_colors_group_n][#3:0:0:0:0]}
+
+\setvalue{\??colorgroupsetter\s!gray}[#1][#2:#3]{\definecolor[#1][s=#2]}
+\setvalue{\??colorgroupsetter\s!rgb }[#1][#2:#3:#4:#5]{\definecolor[#1][r=#2,g=#3,b=#4]}
+\setvalue{\??colorgroupsetter\s!cmyk}[#1][#2:#3:#4:#5:#6]{\definecolor[#1][c=#2,m=#3=,y=#4,k=#5]}
+\setvalue{\??colorgroupsetter\s!spot}[#1][#2:#3:#4]{\definespotcolor[#1][#2][p=#3]}
+
+%D \macros
+%D {showcolorgroup}
+%D
+%D We can show the group by:
+%D
+%D \startbuffer
+%D \showcolorgroup [blue] [horizontal,name,number,value]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D or in color:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D which uses:
+%D
+%D \showsetup{showcolorgroup}
+
+\fetchruntimecommand \showcolorgroup {\f!colorprefix\s!run}
+
+%D There are ten predefined color groups, like
+%D \color[green]{\em groen}, \color[red]{\em rood},
+%D \color[blue]{\em blauw}, \color[cyan]{\em cyaan},
+%D \color[magenta]{\em magenta} and \color[yellow]{\em geel}.
+%D
+%D \startlinecorrection
+%D \hbox to \hsize
+%D {\hss
+%D \showcolorgroup [red] [vertical,name,number]\hss
+%D \showcolorgroup [green] [vertical,name]\hss
+%D \showcolorgroup [blue] [vertical,name]\hss
+%D \showcolorgroup [cyan] [vertical,name]\hss
+%D \showcolorgroup [magenta][vertical,name]\hss
+%D \showcolorgroup [yellow] [vertical,name]\hss}
+%D \stoplinecorrection
+%D
+%D These groups are used to define palets {\em alfa} upto {\em
+%D zeta}. As long as we don't use colors from the same row, we
+%D get ourselves distinctive palets. By activating such a palet
+%D one gains access to its members {\em top} to {\em charm} (of
+%D course one should use more suitable names than these).
+%D
+%D \startlinecorrection
+%D \hbox to \hsize
+%D {\showpalet [alfa] [vertical,name,number]\hss
+%D \showpalet [beta] [vertical,name]\hss
+%D \showpalet [gamma] [vertical,name]\hss
+%D \showpalet [delta] [vertical,name]\hss
+%D \showpalet [epsilon] [vertical,name]\hss
+%D \showpalet [zeta] [vertical,name]}
+%D \stoplinecorrection
+%D
+%D By using the keyword \type {value} the individual color
+%D components are shown too. When printed in color, these
+%D showcases show both the colors and the gray value.
+
+%D \macros
+%D {comparecolorgroup}
+%D
+%D The similar command:
+%D
+%D \startbuffer
+%D \comparecolorgroup [blue]
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D shows color groups:
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+%D
+%D this commands are defined as:
+%D
+%D \showsetup{comparecolorgroup}
+
+\fetchruntimecommand \comparecolorgroup {\f!colorprefix\s!run}
+
+\protect \endinput
diff --git a/tex/context/base/colo-imp-dem.mkiv b/tex/context/base/colo-imp-dem.mkiv
new file mode 100644
index 000000000..5b794c551
--- /dev/null
+++ b/tex/context/base/colo-imp-dem.mkiv
@@ -0,0 +1,260 @@
+%D \module
+%D [ file=colo-dem, % moved from colo-rgb,
+%D version=1995.01.01,
+%D title=\CONTEXT\ Color Macros,
+%D subtitle=Demo Palets and Groups,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Like colors, we first define the english colorgroups. These
+%D colorgroups are tuned for distinctive gray scale printing.
+
+\definecolorgroup
+ [gray]
+ [0.95:0.95:0.95,
+ 0.90:0.90:0.90,
+ 0.80:0.80:0.80,
+ 0.70:0.70:0.70,
+ 0.60:0.60:0.60,
+ 0.50:0.50:0.50,
+ 0.40:0.40:0.40,
+ 0.30:0.30:0.30,
+ 0.20:0.20:0.20,
+ 0.10:0.10:0.10,
+ 0.00:0.00:0.00]
+
+\definecolorgroup
+ [red]
+ [1.00:0.90:0.90,
+ 1.00:0.80:0.80,
+ 1.00:0.70:0.70,
+ 1.00:0.55:0.55,
+ 1.00:0.40:0.40,
+ 1.00:0.25:0.25,
+ 1.00:0.15:0.15,
+ 0.90:0.00:0.00]
+
+\definecolorgroup
+ [green]
+ [0.90:1.00:0.90,
+ 0.70:1.00:0.70,
+ 0.50:1.00:0.50,
+ 0.30:1.00:0.30,
+ 0.15:0.90:0.15,
+ 0.00:0.80:0.00,
+ 0.00:0.65:0.00,
+ 0.00:0.50:0.00]
+
+\definecolorgroup
+ [blue]
+ [0.90:0.95:1.00,
+ 0.80:0.90:1.00,
+ 0.55:0.85:1.00,
+ 0.30:0.80:1.00,
+ 0.15:0.75:1.00,
+ 0.00:0.70:1.00,
+ 0.00:0.55:1.00,
+ 0.00:0.40:1.00]
+
+\definecolorgroup
+ [cyan]
+ [0.80:1.00:1.00,
+ 0.60:1.00:1.00,
+ 0.30:1.00:1.00,
+ 0.00:0.95:0.95,
+ 0.00:0.85:0.85,
+ 0.00:0.75:0.75,
+ 0.00:0.60:0.60,
+ 0.00:0.50:0.50]
+
+\definecolorgroup
+ [magenta]
+ [1.00:0.90:1.00,
+ 1.00:0.80:1.00,
+ 1.00:0.65:1.00,
+ 1.00:0.50:1.00,
+ 1.00:0.35:1.00,
+ 1.00:0.15:1.00,
+ 0.90:0.05:0.90,
+ 0.80:0.00:0.80]
+
+\definecolorgroup
+ [yellow]
+ [1.00:1.00:0.70,
+ 1.00:1.00:0.00,
+ 1.00:0.85:0.05,
+ 1.00:0.70:0.00,
+ 1.00:0.55:0.00,
+ 0.95:0.40:0.00,
+ 0.80:0.30:0.00,
+ 0.60:0.30:0.00]
+
+\definecolorgroup
+ [red*]
+ [1.00:0.95:0.95,
+ 1.00:0.90:0.90,
+ 1.00:0.80:0.80,
+ 1.00:0.70:0.70,
+ 1.00:0.60:0.60,
+ 1.00:0.50:0.50,
+ 1.00:0.40:0.40,
+ 1.00:0.30:0.30]
+
+\definecolorgroup
+ [green*]
+ [0.95:1.00:0.95,
+ 0.90:1.00:0.90,
+ 0.80:1.00:0.80,
+ 0.70:1.00:0.70,
+ 0.60:1.00:0.60,
+ 0.50:1.00:0.50,
+ 0.40:1.00:0.40,
+ 0.30:1.00:0.30]
+
+\definecolorgroup
+ [blue*]
+ [0.95:0.95:1.00,
+ 0.90:0.90:1.00,
+ 0.80:0.80:1.00,
+ 0.70:0.70:1.00,
+ 0.60:0.60:1.00,
+ 0.50:0.50:1.00,
+ 0.40:0.40:1.00,
+ 0.30:0.30:1.00]
+
+\definecolorgroup
+ [yellow*]
+ [1.00:1.00:0.10,
+ 1.00:1.00:0.00,
+ 0.90:0.90:0.00,
+ 0.80:0.80:0.00,
+ 0.70:0.70:0.00,
+ 0.60:0.60:0.00,
+ 0.50:0.50:0.00,
+ 0.40:0.40:0.00]
+
+%D For the sake of implementing interface dependant color
+%D groups we support colorgroup duplication.
+
+\startinterface dutch
+ \definecolorgroup [grijs] [gray]
+ \definecolorgroup [rood] [red]
+ \definecolorgroup [groen] [green]
+ \definecolorgroup [blauw] [blue]
+ \definecolorgroup [cyaan] [cyan]
+ \definecolorgroup [magenta] [magenta]
+ \definecolorgroup [geel] [yellow]
+ \definecolorgroup [rood*] [red*]
+ \definecolorgroup [groen*] [green*]
+ \definecolorgroup [blauw*] [blue*]
+ \definecolorgroup [geel*] [yellow*]
+\stopinterface
+
+\startinterface german
+ \definecolorgroup [grau] [gray]
+ \definecolorgroup [rot] [red]
+ \definecolorgroup [gruen] [green]
+ \definecolorgroup [blau] [blue]
+ \definecolorgroup [cyan] [cyan]
+ \definecolorgroup [magenta] [magenta]
+ \definecolorgroup [gelb] [yellow]
+ \definecolorgroup [rot*] [red*]
+ \definecolorgroup [gruen*] [green*]
+ \definecolorgroup [blau*] [blue*]
+ \definecolorgroup [gelb*] [yellow*]
+\stopinterface
+
+\startinterface czech
+ \definecolorgroup [seda] [gray]
+ \definecolorgroup [cervena] [red]
+ \definecolorgroup [zelena] [green]
+ \definecolorgroup [modra] [blue]
+ \definecolorgroup [azurova] [cyan]
+ \definecolorgroup [fialova] [magenta]
+ \definecolorgroup [zluta] [yellow]
+ \definecolorgroup [cervena*] [red*]
+ \definecolorgroup [zelena*] [green*]
+ \definecolorgroup [modra*] [blue*]
+ \definecolorgroup [zluta*] [yellow*]
+\stopinterface
+
+\startinterface italian
+ \definecolorgroup [grigio] [gray]
+ \definecolorgroup [rosso] [red]
+ \definecolorgroup [verde] [green]
+ \definecolorgroup [blu] [blue]
+ \definecolorgroup [ciano] [cyan]
+ \definecolorgroup [azzurro] [cyan]
+ \definecolorgroup [turchino][cyan]
+ \definecolorgroup [magenta] [magenta]
+ \definecolorgroup [cremisi] [magenta]
+ \definecolorgroup [giallo] [yellow]
+ \definecolorgroup [rosso*] [red*]
+ \definecolorgroup [verde*] [green*]
+ \definecolorgroup [blu*] [blue*]
+ \definecolorgroup [giallo*] [yellow*]
+\stopinterface
+
+%D The next set of color palets is quite language independant.
+%D These palets are meant as examples.
+
+\definepalet
+ [alfa]
+ [ top=red:7,
+ bottom=green:6,
+ up=blue:5,
+ down=cyan:4,
+ strange=magenta:3,
+ charm=yellow:2]
+
+\definepalet
+ [beta]
+ [ top=red:7,
+ bottom=green:5,
+ up=blue:3,
+ down=cyan:6,
+ strange=magenta:2,
+ charm=yellow:1]
+
+\definepalet
+ [gamma]
+ [ top=red:2,
+ bottom=green:5,
+ up=blue:3,
+ down=cyan:6,
+ strange=magenta:7,
+ charm=yellow:4]
+
+\definepalet
+ [delta]
+ [ top=yellow*:5,
+ bottom=yellow*:3,
+ up=yellow*:2,
+ down=magenta:6,
+ strange=blue:4,
+ charm=blue:1]
+
+\definepalet
+ [epsilon]
+ [ top=cyan:7,
+ bottom=cyan:5,
+ up=blue:3,
+ down=yellow:6,
+ strange=yellow:4,
+ charm=yellow:2]
+
+\definepalet
+ [zeta]
+ [ top=red:6,
+ bottom=green:5,
+ up=blue:7,
+ down=cyan:4,
+ strange=magenta:3,
+ charm=yellow:2]
+
+\endinput
diff --git a/tex/context/base/colo-imp-rgb.mkiv b/tex/context/base/colo-imp-rgb.mkiv
index 68fb4e839..9bc6befba 100644
--- a/tex/context/base/colo-imp-rgb.mkiv
+++ b/tex/context/base/colo-imp-rgb.mkiv
@@ -18,8 +18,8 @@
%D interface dependant colors. We use the color inheritance
%D mechanisms to implement the interface dependant ones.
-%D First we define some simple primary \cap{RGB} and \cap{CMYK}
-%D colors. All colors are defined in \cap{RGB} color space.
+%D For historic reasons all colors are defined in \RGB\ color
+%D space and there is no reason to change this.
\definecolor [red] [r=1, g=0, b=0]
\definecolor [green] [r=0, g=1, b=0]
@@ -266,264 +266,8 @@
\stopinterface
-%D Like colors, we first define the english colorgroups. These
-%D colorgroups are tuned for distinctive gray scale printing.
-
-% todo : more efficient and real gray
-
-\definecolorgroup
- [gray]
- [0.95:0.95:0.95,
- 0.90:0.90:0.90,
- 0.80:0.80:0.80,
- 0.70:0.70:0.70,
- 0.60:0.60:0.60,
- 0.50:0.50:0.50,
- 0.40:0.40:0.40,
- 0.30:0.30:0.30,
- 0.20:0.20:0.20,
- 0.10:0.10:0.10,
- 0.00:0.00:0.00]
-
-\definecolorgroup
- [red]
- [1.00:0.90:0.90,
- 1.00:0.80:0.80,
- 1.00:0.70:0.70,
- 1.00:0.55:0.55,
- 1.00:0.40:0.40,
- 1.00:0.25:0.25,
- 1.00:0.15:0.15,
- 0.90:0.00:0.00]
-
-\definecolorgroup
- [green]
- [0.90:1.00:0.90,
- 0.70:1.00:0.70,
- 0.50:1.00:0.50,
- 0.30:1.00:0.30,
- 0.15:0.90:0.15,
- 0.00:0.80:0.00,
- 0.00:0.65:0.00,
- 0.00:0.50:0.00]
-
-\definecolorgroup
- [blue]
- [0.90:0.95:1.00,
- 0.80:0.90:1.00,
- 0.55:0.85:1.00,
- 0.30:0.80:1.00,
- 0.15:0.75:1.00,
- 0.00:0.70:1.00,
- 0.00:0.55:1.00,
- 0.00:0.40:1.00]
-
-\definecolorgroup
- [cyan]
- [0.80:1.00:1.00,
- 0.60:1.00:1.00,
- 0.30:1.00:1.00,
- 0.00:0.95:0.95,
- 0.00:0.85:0.85,
- 0.00:0.75:0.75,
- 0.00:0.60:0.60,
- 0.00:0.50:0.50]
-
-\definecolorgroup
- [magenta]
- [1.00:0.90:1.00,
- 1.00:0.80:1.00,
- 1.00:0.65:1.00,
- 1.00:0.50:1.00,
- 1.00:0.35:1.00,
- 1.00:0.15:1.00,
- 0.90:0.05:0.90,
- 0.80:0.00:0.80]
-
-\definecolorgroup
- [yellow]
- [1.00:1.00:0.70,
- 1.00:1.00:0.00,
- 1.00:0.85:0.05,
- 1.00:0.70:0.00,
- 1.00:0.55:0.00,
- 0.95:0.40:0.00,
- 0.80:0.30:0.00,
- 0.60:0.30:0.00]
-
-\definecolorgroup
- [red*]
- [1.00:0.95:0.95,
- 1.00:0.90:0.90,
- 1.00:0.80:0.80,
- 1.00:0.70:0.70,
- 1.00:0.60:0.60,
- 1.00:0.50:0.50,
- 1.00:0.40:0.40,
- 1.00:0.30:0.30]
-
-\definecolorgroup
- [green*]
- [0.95:1.00:0.95,
- 0.90:1.00:0.90,
- 0.80:1.00:0.80,
- 0.70:1.00:0.70,
- 0.60:1.00:0.60,
- 0.50:1.00:0.50,
- 0.40:1.00:0.40,
- 0.30:1.00:0.30]
-
-\definecolorgroup
- [blue*]
- [0.95:0.95:1.00,
- 0.90:0.90:1.00,
- 0.80:0.80:1.00,
- 0.70:0.70:1.00,
- 0.60:0.60:1.00,
- 0.50:0.50:1.00,
- 0.40:0.40:1.00,
- 0.30:0.30:1.00]
-
-\definecolorgroup
- [yellow*]
- [1.00:1.00:0.10,
- 1.00:1.00:0.00,
- 0.90:0.90:0.00,
- 0.80:0.80:0.00,
- 0.70:0.70:0.00,
- 0.60:0.60:0.00,
- 0.50:0.50:0.00,
- 0.40:0.40:0.00]
-
-%D For the sake of implementing interface dependant color
-%D groups we support colorgroup duplication.
-
-\startinterface dutch
- \definecolorgroup [grijs] [gray]
- \definecolorgroup [rood] [red]
- \definecolorgroup [groen] [green]
- \definecolorgroup [blauw] [blue]
- \definecolorgroup [cyaan] [cyan]
- \definecolorgroup [magenta] [magenta]
- \definecolorgroup [geel] [yellow]
- \definecolorgroup [rood*] [red*]
- \definecolorgroup [groen*] [green*]
- \definecolorgroup [blauw*] [blue*]
- \definecolorgroup [geel*] [yellow*]
-\stopinterface
-
-\startinterface german
- \definecolorgroup [grau] [gray]
- \definecolorgroup [rot] [red]
- \definecolorgroup [gruen] [green]
- \definecolorgroup [blau] [blue]
- \definecolorgroup [cyan] [cyan]
- \definecolorgroup [magenta] [magenta]
- \definecolorgroup [gelb] [yellow]
- \definecolorgroup [rot*] [red*]
- \definecolorgroup [gruen*] [green*]
- \definecolorgroup [blau*] [blue*]
- \definecolorgroup [gelb*] [yellow*]
-\stopinterface
-
-\startinterface czech
- \definecolorgroup [seda] [gray]
- \definecolorgroup [cervena] [red]
- \definecolorgroup [zelena] [green]
- \definecolorgroup [modra] [blue]
- \definecolorgroup [azurova] [cyan]
- \definecolorgroup [fialova] [magenta]
- \definecolorgroup [zluta] [yellow]
- \definecolorgroup [cervena*] [red*]
- \definecolorgroup [zelena*] [green*]
- \definecolorgroup [modra*] [blue*]
- \definecolorgroup [zluta*] [yellow*]
-\stopinterface
-
-\startinterface italian
- \definecolorgroup [grigio] [gray]
- \definecolorgroup [rosso] [red]
- \definecolorgroup [verde] [green]
- \definecolorgroup [blu] [blue]
- \definecolorgroup [ciano] [cyan]
- \definecolorgroup [azzurro] [cyan]
- \definecolorgroup [turchino][cyan]
- \definecolorgroup [magenta] [magenta]
- \definecolorgroup [cremisi] [magenta]
- \definecolorgroup [giallo] [yellow]
- \definecolorgroup [rosso*] [red*]
- \definecolorgroup [verde*] [green*]
- \definecolorgroup [blu*] [blue*]
- \definecolorgroup [giallo*] [yellow*]
-\stopinterface
-
-%D The next set of color palets is quite language independant.
-%D These palets are meant as examples.
-
-\definepalet
- [alfa]
- [ top=red:7,
- bottom=green:6,
- up=blue:5,
- down=cyan:4,
- strange=magenta:3,
- charm=yellow:2]
-
-\definepalet
- [beta]
- [ top=red:7,
- bottom=green:5,
- up=blue:3,
- down=cyan:6,
- strange=magenta:2,
- charm=yellow:1]
-
-\definepalet
- [gamma]
- [ top=red:2,
- bottom=green:5,
- up=blue:3,
- down=cyan:6,
- strange=magenta:7,
- charm=yellow:4]
-
-\definepalet
- [delta]
- [ top=yellow*:5,
- bottom=yellow*:3,
- up=yellow*:2,
- down=magenta:6,
- strange=blue:4,
- charm=blue:1]
-
-\definepalet
- [epsilon]
- [ top=cyan:7,
- bottom=cyan:5,
- up=blue:3,
- down=yellow:6,
- strange=yellow:4,
- charm=yellow:2]
-
-\definepalet
- [zeta]
- [ top=red:6,
- bottom=green:5,
- up=blue:7,
- down=cyan:4,
- strange=magenta:3,
- charm=yellow:2]
-
-%D The next four colors are used for typesetting verbatim \TEX\
-%D in color.
-
-\definecolor [texcolorone] [middlered]
-\definecolor [texcolortwo] [middlegreen]
-\definecolor [texcolorthree] [middleblue]
-\definecolor [texcolorfour] [darkyellow]
-
%D Bonus (needed for FO test):
-\definecolor [orange] [r=1,g=.5]
+\definecolor [orange] [r=1,g=.5]
\endinput
diff --git a/tex/context/base/colo-ini.lua b/tex/context/base/colo-ini.lua
index 5e504e388..474651fea 100644
--- a/tex/context/base/colo-ini.lua
+++ b/tex/context/base/colo-ini.lua
@@ -7,7 +7,7 @@ if not modules then modules = { } end modules ['colo-ini'] = {
}
local type, tonumber = type, tonumber
-local concat = table.concat
+local concat, insert, remove = table.concat, table.insert, table.remove
local format, gmatch, gsub, lower, match, find = string.format, string.gmatch, string.gsub, string.lower, string.match, string.find
local P, R, C, Cc = lpeg.P, lpeg.R, lpeg.C, lpeg.Cc
local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
@@ -20,19 +20,48 @@ local attributes, context, commands = attributes, context, commands
local settings_to_hash_strict = utilities.parsers.settings_to_hash_strict
-local colors = attributes.colors
-local transparencies = attributes.transparencies
-local colorintents = attributes.colorintents
-local registrations = backends.registrations
-local settexattribute = tex.setattribute
-local gettexattribute = tex.getattribute
+local colors = attributes.colors
+local transparencies = attributes.transparencies
+local colorintents = attributes.colorintents
+local registrations = backends.registrations
+local settexattribute = tex.setattribute
+local gettexattribute = tex.getattribute
-local a_color = attributes.private('color')
-local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
+local a_color = attributes.private('color')
+local a_transparency = attributes.private('transparency')
+local a_colorspace = attributes.private('colormodel')
-local register_color = colors.register
-local attributes_list = attributes.list
+local register_color = colors.register
+local attributes_list = attributes.list
+
+local colorvalues = colors.values
+local transparencyvalues = transparencies.values
+
+colors.sets = colors.sets or { } -- sets are mostly used for
+local colorsets = colors.sets -- showing lists of defined
+local colorset = { } -- colors
+colorsets.default = colorset
+
+storage.register("attributes/colors/sets",colorsets,"attributes.colors.sets")
+
+local stack = { }
+
+function colors.pushset(name)
+ insert(stack,colorset)
+ colorset = colorsets[name]
+ if not colorset then
+ colorset = { }
+ colorsets[name] = colorset
+ end
+end
+
+function colors.popset(name)
+ colorset = remove(stack)
+end
+
+function colors.setlist(name)
+ return table.sortedkeys(name and name ~= "" and colorsets[name] or colorsets.default or {})
+end
local function definecolor(name, ca, global)
if ca and ca > 0 then
@@ -54,6 +83,7 @@ local function definecolor(name, ca, global)
context.colordefrlc(name)
end
end
+ colorset[name] = true-- maybe we can store more
end
local function inheritcolor(name, ca, global)
@@ -76,6 +106,7 @@ local function inheritcolor(name, ca, global)
context.colordefrlc(name)
end
end
+ colorset[name] = true-- maybe we can store more
end
local function definetransparent(name, ta, global)
@@ -142,11 +173,6 @@ local transparent = {
luminosity = 16,
}
--- backend driven limitations
-
-colors.supported = true -- always true
-transparencies.supported = true
-
local gray_okay, rgb_okay, cmyk_okay, spot_okay, multichannel_okay, forced = true, true, true, true, true, false
function colors.forcesupport(gray,rgb,cmyk,spot,multichannel) -- pdfx driven
@@ -210,8 +236,7 @@ local registered = { }
local function do_registerspotcolor(parent,name,parentnumber,e,f,d,p)
if not registered[parent] then
---~ print("!!!1",parent)
- local v = colors.values[parentnumber]
+ local v = colorvalues[parentnumber]
if v then
local model = colors.default -- else problems with shading etc
if model == 1 then model = v[1] end
@@ -232,8 +257,7 @@ end
local function do_registermultitonecolor(parent,name,parentnumber,e,f,d,p) -- same as spot but different template
if not registered[parent] then
---~ print("!!!2",parent)
- local v = colors.values[parentnumber]
+ local v = colorvalues[parentnumber]
if v then
local model = colors.default -- else problems with shading etc
if model == 1 then model = v[1] end
@@ -346,10 +370,11 @@ function colors.defineprocesscolor(name,str,global,freeze) -- still inconsistent
-- end
end
end
+ colorset[name] = true-- maybe we can store more
end
function colors.isblack(ca) -- maybe commands
- local cv = ca > 0 and colors.value(ca)
+ local cv = ca > 0 and colorvalues[ca]
return (cv and cv[2] == 0) or false
end
@@ -376,6 +401,7 @@ function colors.definespotcolor(name,parent,str,global)
end
end
end
+ colorset[name] = true-- maybe we can store more
end
function colors.registerspotcolor(parent, str)
@@ -430,12 +456,13 @@ function colors.definemultitonecolor(name,multispec,colorspec,selfspec)
end
end
end
+ colorset[name] = true-- maybe we can store more
end
local function mpcolor(model,ca,ta,default) -- will move to mlib-col
- local cv = colors.supported and colors.value(ca) -- faster when direct colors.values[ca]
+ local cv = colorvalues[ca]
if cv then
- local tv = transparencies.supported and transparencies.value(ta)
+ local tv = transparencyvalues[ta]
if model == 1 then
model = cv[1]
end
@@ -468,9 +495,9 @@ local function mpcolor(model,ca,ta,default) -- will move to mlib-col
end
--~ local function mpcolor(model,ca,ta,default) -- will move to mlib-col
---~ local cv = colors.supported and colors.value(ca) -- faster when direct colors.values[ca]
+--~ local cv = colorvalues[ca]
--~ if cv then
---~ local tv = transparencies.supported and transparencies.value(ta)
+--~ local tv = transparencyvalues[ta]
--~ if model == 1 then
--~ model = cv[1]
--~ end
@@ -510,7 +537,7 @@ colors.mpcolor = mpcolor
colors.mpoptions = mpoptions
function colors.formatcolor(ca,separator)
- local cv = colors.value(ca)
+ local cv = colorvalues[ca]
if cv then
local c, cn, f, t, model = { }, 0, 13, 13, cv[1]
if model == 2 then
@@ -531,12 +558,12 @@ function colors.formatcolor(ca,separator)
end
function colors.formatgray(ca,separator)
- local cv = colors.value(ca)
+ local cv = colorvalues[ca]
return format("%0.3f",(cv and cv[2]) or 0)
end
function colors.colorcomponents(ca) -- return list
- local cv = colors.value(ca)
+ local cv = colorvalues[ca]
if cv then
local model = cv[1]
if model == 2 then
@@ -556,7 +583,7 @@ function colors.colorcomponents(ca) -- return list
end
function colors.transparencycomponents(ta)
- local tv = transparencies.value(ta)
+ local tv = transparencyvalues[ta]
if tv then
return format("a=%1.3f t=%1.3f",tv[1],tv[2])
else
@@ -565,7 +592,7 @@ function colors.transparencycomponents(ta)
end
function colors.spotcolorname(ca,default)
- local cv, v = colors.value(ca), "unknown"
+ local cv, v = colorvalues[ca], "unknown"
if cv and cv[1] == 5 then
v = cv[10]
end
@@ -573,7 +600,7 @@ function colors.spotcolorname(ca,default)
end
function colors.spotcolorparent(ca,default)
- local cv, v = colors.value(ca), "unknown"
+ local cv, v = colorvalues[ca], "unknown"
if cv and cv[1] == 5 then
v = cv[12]
if v == "" then
@@ -584,7 +611,7 @@ function colors.spotcolorparent(ca,default)
end
function colors.spotcolorvalue(ca,default)
- local cv, v = colors.value(ca), 0
+ local cv, v = colorvalues[ca], 0
if cv and cv[1] == 5 then
v = cv[13]
end
@@ -608,7 +635,7 @@ end
function colors.defineintermediatecolor(name,fraction,c_one,c_two,a_one,a_two,specs,global,freeze)
fraction = tonumber(fraction) or 1
- local one, two = colors.value(c_one), colors.value(c_two)
+ local one, two = colorvalues[c_one], colorvalues[c_two]
if one then
if two then
local csone, cstwo = one[1], two[1]
@@ -652,7 +679,7 @@ function colors.defineintermediatecolor(name,fraction,c_one,c_two,a_one,a_two,sp
definecolor(name,ca,global,freeze)
end
end
- local one, two = transparencies.value(a_one), transparencies.value(a_two)
+ local one, two = transparencyvalues[a_one], transparencyvalues[a_two]
local t = settings_to_hash_strict(specs)
local ta = tonumber((t and t.a) or (one and one[1]) or (two and two[1]))
local tt = tonumber((t and t.t) or (one and two and f(one,two,2,fraction)))
@@ -670,7 +697,7 @@ end
--~ end
--~ function colors.defineduocolor(name,fraction_one,c_one,fraction_two,c_two,global,freeze)
---~ local one, two = colors.value(c_one), colors.value(c_two)
+--~ local one, two = colorvalues[c_one], colorvalues[c_two]
--~ if one and two then
--~ fraction_one = tonumber(fraction_one) or 1
--~ fraction_two = tonumber(fraction_two) or 1
@@ -708,7 +735,7 @@ end
function colors.definemixcolor(name,fractions,cs,global,freeze)
local values = { }
for i=1,#cs do -- do fraction in here
- local v = colors.value(cs[i])
+ local v = colorvalues[cs[i]]
if not v then
return
end
@@ -739,13 +766,15 @@ local patterns = { "colo-imp-%s.mkiv", "colo-imp-%s.tex", "colo-%s.mkiv", "colo-
local function action(name,foundname)
context.startreadingfile()
+ context.startcolorset { name }
context.input(foundname)
- context.showcolormessage("colors",4,name)
+ context.showmessage("colors",4,name)
+ context.stopcolorset()
context.stopreadingfile()
end
local function failure(name)
- context.showcolormessage("colors",5,name)
+ context.showmessage("colors",5,name)
end
function colors.usecolors(name)
@@ -766,9 +795,9 @@ function commands.setcolormodel(model,weight)
settexattribute(a_colorspace,setcolormodel(model,weight))
end
-function commands.setrastercolor(name,s)
- settexattribute(a_color,colors.definesimplegray(name,s))
-end
+-- function commands.setrastercolor(name,s)
+-- settexattribute(a_color,colors.definesimplegray(name,s))
+-- end
function commands.registermaintextcolor(a)
colors.main = a
@@ -804,4 +833,25 @@ function commands.doifdrawingblackelse()
commands.doifelse(colors.isblack(gettexattribute(a_color)))
end
+-- function commands.withcolorsinset(name,command)
+-- local set
+-- if name and name ~= "" then
+-- set = colorsets[name]
+-- else
+-- set = colorsets.default
+-- end
+-- if set then
+-- if command then
+-- for name in table.sortedhash(set) do
+-- context[command](name)
+-- end
+-- else
+-- context(concat(table.sortedkeys(set),","))
+-- end
+-- end
+-- end
+
+commands.startcolorset = colors.pushset
+commands.stopcolorset = colors.popset
+
commands.usecolors = colors.usecolors
diff --git a/tex/context/base/colo-ini.mkiv b/tex/context/base/colo-ini.mkiv
index 6c752f3ae..1e75c29a2 100644
--- a/tex/context/base/colo-ini.mkiv
+++ b/tex/context/base/colo-ini.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D We need to clean this up further but first we hav eto make sure that mkiv
+%D We need to clean this up further but first we have to make sure that mkiv
%D code works ok.
\writestatus{loading}{ConTeXt Color Macros / Initialization}
@@ -26,68 +26,48 @@
%D In \MKIV\ we have independent color, colorspace and transparency
%D but I'm still not sure if I keep it that way as it's probably more
-%D efficient to combine them (less attributes and finalizing).
+%D efficient to combine them (less attributes and finalizing). If
+%D it becomes a bottleneck we can set up a more complex system
+%D with one shared attribute for colorspace, color and transparency.
%D
-%D We use a couple of local registers. That way we don't have
-%D to group when converting colors. By the way, this is not
-%D really faster. We can sqeeze half a second runtime for 50K
-%D switches on a 1G machine, but the macros will become rather
-%D ugly then. To mention one such improvement: no colon
-%D after the key character (.25 sec).
-
-\newcount\colorcount
-
-%D When typesetting for paper, we prefer using the \cap{CMYK}
-%D color space, but for on||screen viewing we prefer \cap{RGB}
-%D (the previous implementation supported only this scheme).
-%D Independant of such specifications, we support some automatic
-%D conversions:
+%D When typesetting for paper, we prefer using the \CMYK\ color space,
+%D but for on||screen viewing we prefer \RGB\ (the previous
+%D implementation supported only this scheme). Independant of such
+%D specifications, we support some automatic conversions:
%D
%D \startitemize[packed]
-%D \item convert all colors to \cap{RGB}
-%D \item convert all colors to \cap{CMYK}
+%D \item convert all colors to \RGB
+%D \item convert all colors to \CMYK
%D \item convert all colors to gray scales
%D \stopitemize
%D
-%D We also support optimization of colors to gray scales.
-%D
-%D \startitemize[continue]
-%D \item reduce gray colors to gray scales
-%D \item reduce \cap{CMY} components to \cap{K}
-%D \stopitemize
-%D
%D These options are communicated by means of:
-\newif\ifRGBsupported
-\newif\ifCMYKsupported
-\newif\ifSPOTsupported
-\newif\ifpreferGRAY
-\newif\ifGRAYprefered
-\newif\ifconvertGRAY \convertGRAYtrue
-\newif\ifreduceCMYK
-\newif\ifconverttoGRAY
-\newif\ifweightGRAY \weightGRAYtrue
-
-%D The last boolean controls reduction of \cap{CMYK} to
-%D \cap{CMY} colors. When set to true, the black component
-%D is added to the other ones.
-%D
-%D Prefering gray is not the same as converting to gray.
-%D Conversion treats each color components in a different way,
-%D while prefering is just a reduction and thus a
-%D space||saving option.
-
-\newif\iffreezecolors \freezecolorsfalse
-\newif\ifincolor % not used outside this module
-
-\let\colorlist \empty
-\let\currentspotcolor \empty
-\let\allspotcolors \empty
-\let\usedspotcolors \empty
-\let\currentpalet \empty
+\newconditional\c_colors_rgb_supported
+\newconditional\c_colors_cmyk_supported
+\newconditional\c_colors_spot_supported % backend driven
+\newconditional\c_colors_weight_gray \settrue\c_colors_weight_gray
+\newconditional\c_colors_convert_gray \settrue\c_colors_convert_gray
+\newconditional\c_colors_enabled
+\newconditional\c_colors_expanded
+
+\let\currentcolormodel \empty
+\let\currentcolorname \empty
+\let\currentcolorpalet \empty
+\let\currentcolorprefix\empty % \currentcolorpalet:
+
+\installcorenamespace{color}
+\installcorenamespace{colorattribute}
+\installcorenamespace{transparencyattribute}
+\installcorenamespace{colorsetter}
+\installcorenamespace{transparencysetter}
+\installcorenamespace{colorpaletspecification}
+\installcorenamespace{colorpalet}
+\installcorenamespace{colorstack}
%D \macros
-%D {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor}
+%D {definecolor,defineglobalcolor,definenamedcolor,definespotcolor,definemultitonecolor,
+%D definetransparency}
%D
%D \startbuffer
%D \definecolor [blue] [c=1,m=.38,y=0,k=.64] % pantone pms 2965 uncoated m
@@ -110,80 +90,80 @@
%D
%D \getbuffer \typebuffer
-\unexpanded\def\definecolor {\dodoubleargument\dodefinecolor}
-\unexpanded\def\defineglobalcolor {\dodoubleargument\dodefineglobalcolor}
-\unexpanded\def\definenamedcolor {\dodoubleargument\dodefinenamedcolor}
-\unexpanded\def\definespotcolor {\dotripleargument\dodefinespotcolor}
-\unexpanded\def\definemultitonecolor{\doquadrupleempty\dodefinemultitonecolor}
+\unexpanded\def\definecolor {\dodoubleargument\colors_define}
+\unexpanded\def\defineglobalcolor {\dodoubleargument\colors_define_global}
+\unexpanded\def\definenamedcolor {\dodoubleargument\colors_define_named}
+\unexpanded\def\definespotcolor {\dotripleargument\colors_define_spot}
+\unexpanded\def\definemultitonecolor{\doquadrupleempty\colors_define_multitone}
+\unexpanded\def\definetransparency {\dodoubleargument\colors_define_transpancy}
%D \macros
-%D {startcolor,stopcolor,
-%D faststartcolor,faststopcolor,
-%D startraster,stopraster,raster,
-%D color,graycolor}
+%D {startcolor,stopcolor,color,graycolor}
%D
-%D The local and global and raster commands are here just
-%D for compatibility with \MKII.
+%D The local and global commands are here just for compatibility
+%D with \MKII.
%D
%D \showsetup{startcolor}
%D
-%D \macros
-%D {color,graycolor}
-%D
-%D This leaves the simple color command:
-%D
-%D \showsetup{color}
-%D \showsetup{graycolor}
-%D
-%D This leaves the simple color command:
+%D The simple color commands are:
%D
%D \showsetup{color}
%D \showsetup{graycolor}
-\unexpanded\def\switchtocolor [#1]{\csname#1\endcsname}
-\unexpanded\def\color [#1]{\groupedcommand{\doactivatecolor{#1}}{}}
-\unexpanded\def\startcolor [#1]{\begingroup\doactivatecolor{#1}}
-\unexpanded\def\stopcolor {\endgroup}
-\unexpanded\def\graycolor [#1]{\groupedcommand{\dosetcolormodel{gray}\doactivatecolor{#1}}{}}
-\unexpanded\def\colored [#1]{\groupedcommand{\definecolor[@colored@][#1]\doactivatecolor{@colored@}}{}}
-\unexpanded\def\fastcolored [#1]#2{\begingroup\dodefinefastcolor[@colored@][#1]\doactivatecolor{@colored@}#2\endgroup}
-
-% some of this will go away
-
-\unexpanded\def\startcolorpage {\startcolor[\ifx\maintextcolor\empty\defaulttextcolor\else\maintextcolor\fi]}
-\unexpanded\def\stopcolorpage {\stopcolor}
-\unexpanded\def\startraster [#1]{\dosetrastercolor{#1}}
-\unexpanded\def\stopraster {}
-\unexpanded\def\raster [#1]{\groupedcommand{\dosetrastercolor{#1}}{}}
-\unexpanded\def\faststartcolor [#1]{\doactivatecolor{#1}}
-\unexpanded\def\faststopcolor {}
-
-\def\getcolorattributevalue#1#2% color macro (obsolete again, we have a better method)
- {\begingroup
- \doactivatecolor{#1}%
- \normalexpanded{\endgroup\edef\noexpand#2%
- {\ifnum\attribute\colorattribute=\attributeunsetvalue\else\number\attribute\colorattribute\fi}}}
+%D We expect sane behaviour in \MKIV\ so we don't used grouped command any
+%D longer.
-\let\grey\graycolor
+% \testfeatureonce{100000}{\color[red]{}} % 1.046 => 0.541
-%D Stacking:
+\def\@colored@{@colored@}
-% \colormodelattribute \colorattribute \transparencyattribute
+\unexpanded\def\switchtocolor[#1]{\csname#1\endcsname}
-\newcount\currentcolornesting
+%unexpanded\def\color [#1]{\groupedcommand{\colors_activate{#1}}{}}
-\unexpanded\def\pushcolor[#1]%
- {\global\advance\currentcolornesting\plusone
- \expandafter\edef\csname\??cl:s:\number\currentcolornesting\endcsname
- {\attribute\colormodelattribute \the\attribute\colormodelattribute
- \attribute\colorattribute \the\attribute\colorattribute
- \attribute\transparencyattribute\the\attribute\transparencyattribute
- \space}% stack
- \doactivatecolor{#1}}
+\unexpanded\def\color [#1]{\bgroup
+ \def\g_color{\colors_activate{#1}}%
+ \afterassignment\g_color
+ \let\nexttoken}
-\unexpanded\def\popcolor
- {\csname\??cl:s:\number\currentcolornesting\endcsname
- \global\advance\currentcolornesting\minusone}
+%unexpanded\def\graycolor [#1]{\groupedcommand{\colors_set_model\s!gray\colors_activate{#1}}{}} % special, all embeded also gray
+
+\unexpanded\def\graycolor [#1]{\bgroup
+ \def\g_color{\colors_set_model\s!gray\colors_activate{#1}}%
+ \afterassignment\g_color
+ \let\nexttoken}
+
+\unexpanded\def\startcolor [#1]{\begingroup
+ \colors_activate{#1}}
+
+\unexpanded\def\stopcolor {\endgroup}
+
+%unexpanded\def\colored [#1]{\groupedcommand{\colors_define[\@colored@][#1]\colors_activate\@colored@}{}}
+
+\unexpanded\def\colored [#1]{\bgroup
+ \def\g_color{\colors_define[\@colored@][#1]\colors_activate\@colored@}%
+ \afterassignment\g_color
+ \let\nexttoken}
+
+\unexpanded\def\fastcolored[#1]#2{\begingroup % is this command still needed?
+ \dodefinefastcolor[\@colored@][#1]%
+ \colors_activate\@colored@
+ #2%
+ \endgroup}
+
+
+%D The following command is obsolete:
+
+\unexpanded\def\startcolorpage {\startcolor[\ifx\maintextcolor\empty\defaulttextcolor\else\maintextcolor\fi]}
+\unexpanded\def\stopcolorpage {\stopcolor}
+
+\def\getcolorattributevalue#1#2% obsolete, use \thecolorattribute instead ...
+ {\begingroup
+ \colors_activate{#1}%
+ \normalexpanded{\endgroup\edef\noexpand#2%
+ {\ifnum\attribute\colorattribute=\attributeunsetvalue\else\number\attribute\colorattribute\fi}}}
+
+\let\grey\graycolor % these macros are only used in tracing
%D \macros
%D {startcurrentcolor,stopcurrentcolor}
@@ -197,91 +177,95 @@
%D Color definitions can be grouped in files with the name:
%D
%D \starttyping
-%D \f!colorprefix-identifier.tex
+%D colo-imp-tag.tex
%D \stoptyping
%D
-%D where \type{\f!colorprefix} is \unprotect {\tttf \f!colorprefix}.
-%D Loading such a file is done by \protect
+%D Loading such a file is done by:
%D
%D \showsetup{usecolors}
%D
-%D Some default colors are specified in \type{colo-rgb.tex},
-%D which is loaded into the format by:
+%D Some default colors are specified in \type {colo-imp-rgb},
+%D which is loaded into the format by default.
+%D
+%D Some demo palets and groups are defined in \type {colo-imp-dem}
+%D which can be loaded with:
%D
%D \starttyping
-%D \usecolors[rgb]
+%D \usecolors[dem]
%D \stoptyping
-\unexpanded\def\usecolors[#1]{\ctxcommand{usecolors(\!!bs#1\!!es)}}
+\unexpanded\def\startcolorset[#1]{\ctxcommand{startcolorset("#1")}}
+\unexpanded\def\stopcolorset {\ctxcommand{stopcolorset()}}
+\unexpanded\def\usecolors [#1]{\ctxcommand{usecolors("#1")}}
\let\setupcolor\usecolors
-%D \macros
-%D {definetransparency}
-%D
-%D This command numbers to names:
-
-\unexpanded\def\definetransparency
- {\dodoubleargument\dodefinetransparency}
+\installdirectcommandhandler \??color {colors}
-\unexpanded\def\setupcolors
- {\dosingleargument\dosetupcolors}
+\let\colors_show_message\gobblethreearguments
-\let\showcolormessage\gobblethreearguments
+% \newtoks\everysetupcolors
-\newtoks\everysetupcolors
+\let\v_colors_freeze_state\s!false
+\let\v_colors_weight_state\s!false
-\let\dosetcolorvalue \setvalue
-\def\colorfreezestate{false}
-
-\def\dosetupcolors[#1]% some no longer make sense in MkIV
- {\getparameters[\??cl][#1]%
- \doifelse\@@clspot\v!yes
- \SPOTsupportedtrue
- \SPOTsupportedfalse
- \doifelse\@@clreduction\v!yes
- \reduceCMYKtrue
- \reduceCMYKfalse
- \doifelse\@@clexpansion\v!yes
- \freezecolorstrue
- \freezecolorsfalse
- \iffreezecolors
- \let\dosetcolorvalue\setevalue
- \def\colorfreezestate{true}%
+\appendtoks % we could use \directcolorsparameter here
+ %
+ \doifelse{\colorsparameter\c!spot }\v!yes \settrue \setfalse\c_colors_spot_supported
+ \doifelse{\colorsparameter\c!expansion}\v!yes \settrue \setfalse\c_colors_expanded
+ \doifelse{\colorsparameter\c!factor }\v!no \setfalse\settrue \c_colors_weight_gray
+ \doifelse{\colorsparameter\c!rgb }\v!yes \settrue \setfalse\c_colors_rgb_supported
+ \doifelse{\colorsparameter\c!cmyk }\v!yes \settrue \setfalse\c_colors_cmyk_supported
+ \doifelse{\colorsparameter\c!state }\v!start\settrue \setfalse\c_colors_enabled
+ %
+ \ifconditional\c_colors_weight_gray
+ \let\v_colors_weight_state\s!true
\else
- \let\dosetcolorvalue\setvalue
- \def\colorfreezestate{false}%
+ \let\v_colors_weight_state\s!false
\fi
- \doifelse\@@clfactor\v!no
- \weightGRAYfalse
- \weightGRAYtrue
- \doifelse\@@clrgb\v!no
- {\ifRGBsupported \showcolormessage\m!colors {9}\v!rgb \RGBsupportedfalse \fi}
- {\ifRGBsupported \else\showcolormessage\m!colors{10}\v!rgb \RGBsupportedtrue \fi}%
- \doifelse\@@clcmyk\v!no
- {\ifCMYKsupported \showcolormessage\m!colors {9}\v!cmyk\CMYKsupportedfalse\fi}
- {\ifCMYKsupported\else\showcolormessage\m!colors{10}\v!cmyk\CMYKsupportedtrue \fi}%
- \preferGRAYfalse
- \convertGRAYtrue
- \processaction
- [\@@clconversion]
- [ \v!yes=>\preferGRAYtrue,
- \v!no=>\convertGRAYfalse,
- \v!never=>\convertGRAYfalse,
- \v!always=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]%
- \ifRGBsupported
- \converttoGRAYfalse
- \else\ifCMYKsupported
- \converttoGRAYfalse
+ %
+ \ifconditional\c_colors_expanded
+ \let\v_colors_freeze_state\s!true
\else
- \ifconverttoGRAY\else\showcolormessage\m!colors{11}\empty\fi
- \converttoGRAYtrue
- \fi\fi
- \doifelse\@@clstate\v!stop
- {\incolorfalse}%
- {\incolortrue\let\@@clstate\v!start}%
- \dosetupcolormodel
- \the\everysetupcolors}
+ \let\v_colors_freeze_state\s!false
+ \fi
+ %
+ \setfalse\c_colors_convert_gray
+ \processaction
+ [\colorsparameter\c!conversion] % no == never (was different in mkii)
+ [ \v!yes=>\settrue \c_colors_convert_gray,
+ \v!always=>\settrue \c_colors_convert_gray
+ \setfalse\c_colors_rgb_supported
+ \setfalse\c_colors_cmyk_supported]%
+ \ifconditional\c_colors_rgb_supported \colors_show_message\m!colors9\v!rgb \fi
+ \ifconditional\c_colors_cmyk_supported\colors_show_message\m!colors9\v!cmyk\fi
+ \colors_setup_current_model
+\to \everysetupcolors
+
+\appendtoks
+ \setupcolors[\c!state=\v!start]%
+ \ctxcommand{enablecolor()}% % this can as well happen when
+ \ctxcommand{enabletransparency()}% % the handler is defined in lua
+ \let\colors_show_message\showmessage
+\to \everyjob
+
+%D We provide stacking independent of grouping.
+
+\newcount\c_colors_nesting
+
+
+\unexpanded\def\pushcolor[#1]%
+ {\global\advance\c_colors_nesting\plusone
+ \expandafter\edef\csname\??colorstack\number\c_colors_nesting\endcsname
+ {\attribute\colormodelattribute \the\attribute\colormodelattribute
+ \attribute\colorattribute \the\attribute\colorattribute
+ \attribute\transparencyattribute\the\attribute\transparencyattribute
+ \relax}% stack
+ \colors_activate{#1}}
+
+\unexpanded\def\popcolor
+ {\csname\??colorstack\number\c_colors_nesting\endcsname
+ \global\advance\c_colors_nesting\minusone}
%D In this documentation we will not go into too much details
%D on palets. Curious users can find more information on this
@@ -348,29 +332,34 @@
%D This saves us some typing in for instance the modules that
%D deal with pretty verbatim typesetting.
+\let\m_colors_palet_tmp\empty
+
\unexpanded\def\definepalet
- {\dodoubleargument\dodefinepalet}
+ {\dodoubleargument\colors_define_palet}
-\def\dodefinepalet[#1][#2]%
+\unexpanded\def\colors_define_palet[#1][#2]% todo
{\doifassignmentelse{#2}
- {%\showcolormessage\m!colors6{#1}%
- \letvalueempty{\??pa#1}%
- \setevalue{\??pa\??pa#1}{#2}%
- \def\dodododefinepalet[##1=##2]%
- {\doifvaluesomething{\??pa#1}
- {\setevalue{\??pa#1}{\csname\??pa#1\endcsname,}}%
- \setevalue{\??pa#1}{\csname\??pa#1\endcsname##1}%
- \dodefinepaletcolor{#1}{##1}{##2}}%
- \def\dododefinepalet##1%
- {\dodododefinepalet[##1]}%
- \processcommalist[#2]\dododefinepalet}
- {\doifdefined{\??pa#2}
- {\expanded{\dodefinepalet[#1][\csname\??pa\??pa#2\endcsname]}}}}
+ {%\colors_show_message\m!colors6{#1}%
+ \let\m_colors_palet_tmp\empty
+ \setevalue{\??colorpaletspecification#1}{#2}%
+ \processcommalist[#2]{\colors_define_palet_one{#1}}%
+ \letvalue{\??colorpalet#1}\m_colors_palet_tmp
+ \let\m_colors_palet_tmp\empty}
+ {\ifcsname\??colorpaletspecification#2\endcsname
+ \normalexpanded{\colors_define_palet[#1][\csname\??colorpaletspecification#2\endcsname]}%
+ \fi}}
+
+\def\colors_define_palet_one#1#2% get rid of { } in #2
+ {\colors_define_palet_two{#1}[#2]}%
+
+\def\colors_define_palet_two#1[#2=#3]%
+ {\edef\m_colors_palet_tmp{\ifx\m_colors_palet_tmp\empty\else\m_colors_palet_tmp,\fi#2}%
+ \colors_define_palet_set{#1}{#2}{#3}}%
\let\paletsize\!!zerocount
\def\getpaletsize[#1]%
- {\getcommacommandsize[\csname\??pa\??pa#1\endcsname]%
+ {\getcommacommandsize[\csname\??colorpaletspecification#1\endcsname]%
\edef\paletsize{\number\commalistsize}}
%D Instead of refering to colors, one can also directly specify
@@ -389,22 +378,25 @@
%D
%D \showsetup{setuppalet}
-\let\currentpalet\empty
+\newtoks\everysetuppalet
\unexpanded\def\setuppalet
- {\dosingleempty\dosetuppalet}
+ {\dosingleempty\colors_setup_palet}
-\def\dosetuppalet[#1]%
- {\edef\currentpalet{#1}%
- \ifx\currentpalet\empty
+\def\colors_setup_palet[#1]%
+ {\edef\currentcolorpalet{#1}%
+ \ifx\currentcolorpalet\empty
% seems to be a reset
- \else\ifcsname\??pa\currentpalet\endcsname
- \edef\currentpalet{#1:}%
+ \let\currentcolorprefix\empty
+ \else\ifcsname\??colorpalet\currentcolorpalet\endcsname
+ \edef\currentcolorprefix{#1:}%
\else
- \showcolormessage\m!colors7\currentpalet
- \let\currentpalet\empty
+ \colors_show_message\m!colors7\currentcolorpalet
+ \let\currentcolorpalet\empty
+ \let\currentcolorprefix\empty
\fi\fi
- \initializemaintextcolor}
+ \the\everysetuppalet
+ \color_initialize_maintextcolor}
%D \macros
%D {showpalet}
@@ -429,120 +421,6 @@
\fetchruntimecommand \showcolorcomponents {\f!colorprefix\s!run}
%D \macros
-%D {definecolorgroup}
-%D
-%D The naming of the colors in this palet suggests some
-%D ordening, which in turn is suported by color grouping.
-%D
-%D \starttyping
-%D \definecolorgroup
-%D [red]
-%D [1.00:0.90:0.90,
-%D 1.00:0.80:0.80,
-%D 1.00:0.70:0.70,
-%D 1.00:0.55:0.55,
-%D 1.00:0.40:0.40,
-%D 1.00:0.25:0.25,
-%D 1.00:0.15:0.15,
-%D 0.90:0.00:0.00]
-%D \stoptyping
-%D
-%D In such a color group colors are numbered from~$1$ to~$n$.
-%D
-%D \showsetup{definecolorgroup}
-%D
-%D This kind of specification is not only more compact than
-%D defining each color separate, it also loads faster and takes
-%D less bytes.
-
-\unexpanded\def\definecolorgroup
- {\dotripleempty\dodefinecolorgroup}
-
-\def\dododefinecolorgroupgray [#1][#2:#3]{\definecolor [#1:\the\colorcount][s=#2]}
-\def\dododefinecolorgrouprgb [#1][#2:#3:#4:#5]{\definecolor [#1:\the\colorcount][r=#2,g=#3,b=#4]}
-\def\dododefinecolorgroupcmyk[#1][#2:#3:#4:#5:#6]{\definecolor [#1:\the\colorcount][c=#2,m=#3=,y=#4,k=#5]}
-\def\dododefinecolorgroupspot [#1][#2:#3:#4]{\definespotcolor[#1:\the\colorcount][#2][p=#3]}
-
-\def\dododefinecolorgroup#1#2%
- {\advance\colorcount\plusone
- \getvalue{dododefinecolorgroup\currentcolorspace}[#1][#2:0:0:0:0]}
-
-\def\dodefinecolorgroup[#1][#2][#3]% obsolete, just use palets
- {\ifthirdargument
- \doifelsenothing{#2}{\let\currentcolorspace\v!rgb}{\def\currentcolorspace{#2}}%
- \colorcount\zerocount
- \processcommalist[#3]{\dododefinecolorgroup{#1}}%
- \else
- \doifinstringelse{:}{#2}
- {\definecolorgroup[#1][\v!rgb][#2]}
- {\doloop
- {\ifcsname\??cr#2:\recurselevel\endcsname
- \setevalue{\??cr#1:\recurselevel}{\csname\??cr#2:\recurselevel\endcsname}%
- \else
- \exitloop
- \fi}}%
- \fi}
-
-%D \macros
-%D {showcolorgroup}
-%D
-%D We can show the group by:
-%D
-%D \startbuffer
-%D \showcolorgroup [blue] [horizontal,name,number,value]
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D or in color:
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-%D
-%D which uses:
-%D
-%D \showsetup{showcolorgroup}
-
-\fetchruntimecommand \showcolorgroup {\f!colorprefix\s!run}
-
-%D There are ten predefined color groups, like
-%D \color[green]{\em groen}, \color[red]{\em rood},
-%D \color[blue]{\em blauw}, \color[cyan]{\em cyaan},
-%D \color[magenta]{\em magenta} and \color[yellow]{\em geel}.
-%D
-%D \startlinecorrection
-%D \hbox to \hsize
-%D {\hss
-%D \showcolorgroup [red] [vertical,name,number]\hss
-%D \showcolorgroup [green] [vertical,name]\hss
-%D \showcolorgroup [blue] [vertical,name]\hss
-%D \showcolorgroup [cyan] [vertical,name]\hss
-%D \showcolorgroup [magenta][vertical,name]\hss
-%D \showcolorgroup [yellow] [vertical,name]\hss}
-%D \stoplinecorrection
-%D
-%D These groups are used to define palets {\em alfa} upto {\em
-%D zeta}. As long as we don't use colors from the same row, we
-%D get ourselves distinctive palets. By activating such a palet
-%D one gains access to its members {\em top} to {\em charm} (of
-%D course one should use more suitable names than these).
-%D
-%D \startlinecorrection
-%D \hbox to \hsize
-%D {\showpalet [alfa] [vertical,name,number]\hss
-%D \showpalet [beta] [vertical,name]\hss
-%D \showpalet [gamma] [vertical,name]\hss
-%D \showpalet [delta] [vertical,name]\hss
-%D \showpalet [epsilon] [vertical,name]\hss
-%D \showpalet [zeta] [vertical,name]}
-%D \stoplinecorrection
-%D
-%D By using the keyword \type {value} the individual color
-%D components are shown too. When printed in color, these
-%D showcases show both the colors and the gray value.
-
-%D \macros
%D {comparepalet}
%D
%D There are some more testing macros available:
@@ -566,29 +444,6 @@
\fetchruntimecommand \comparepalet {\f!colorprefix\s!run}
%D \macros
-%D {comparecolorgroup}
-%D
-%D The similar command:
-%D
-%D \startbuffer
-%D \comparecolorgroup [blue]
-%D \stopbuffer
-%D
-%D \typebuffer
-%D
-%D shows color groups:
-%D
-%D \startlinecorrection
-%D \getbuffer
-%D \stoplinecorrection
-%D
-%D this commands are defined as:
-%D
-%D \showsetup{comparecolorgroup}
-
-\fetchruntimecommand \comparecolorgroup {\f!colorprefix\s!run}
-
-%D \macros
%D {showcolor}
%D
%D But let's not forget that we also have the more traditional
@@ -639,46 +494,22 @@
%D \MPcolor{my own red}
%D \stoptyping
%D
-%D This macro returns a \METAPOST\ triplet \type{(R,G,B)}.
-%D Unless \CMYK\ color support is turned on with \type
-%D {MPcmyk}, only \cap{RGB} colors and gray scales are
-%D supported.
-
+%D This macro returns \METAPOST\ code that represents the
+%D color.
+%D
%D For the moment we keep the next downward compatibility
%D switch, i.e.\ expanded colors. However, predefined colors
%D and palets are no longer expanded (which is what I wanted
%D in the first place).
%D
-%D Well, in case we want to do color separation and use CMYK
-%D colors only, this is dangerous since unwanted remapping may
-%D take place. Especially when we redefine already defined
-%D colors in another color space (e.g. darkgreen is
-%D predefined in RGB color space, so a redefinition in CMYK
-%D coordinates before RGB mode is disabled, would give
-%D unexpected results due to the already frozen color spec.)
-
-%D In \MKIV\ we don't support color separation as we might now assume
-%D that printing houses have the right programs to do it themselves.
-%D The \MKII\ color separator was implemented as part of a project
-%D that needed. If it's ever needed in \MKIV\ i'll do it in the
-%D backend.
-
-\let\doifseparatingcolorselse\secondoftwoarguments
-\let\doifcolorchannelelse \secondofthreearguments
-\let\resetcolorseparation \relax
-\let\colorchannelprefix \empty
-\let\colorchannelsuffix \empty
-
-%D We now define the low level macros:
+%D In \MKIV\ we don't support color separation as we might now
+%D assume that printing houses have the right programs to do
+%D it themselves. If it's ever needed in \MKIV\ It is relatively
+%D easy to support it in the backend code.
% todo: palets in definecolor
% todo: {\red xx} vs \red{xx}
-% check: registerusedspotcolors
-% check: \currentcolorname
-% check: \outercolorname
-% check: \startcolormode
-
% \def\mptexcolor#1{"\dogetattributeid\s!color \somecolorattribute{#1} A"}
%
% \startMPpage
@@ -688,46 +519,42 @@
% draw btex test etex withprescript \mptexcolor{blue} ;
% \stopMPpage
-% \ifx\currentcolormodel\undefined \newcount\currentcolormodel \fi
-
-\def\currentcolormodel{\attribute\colormodelattribute}
+\unexpanded\def\setcolormodel[#1]% % beware, \setupcolors will overload this, so this one is
+ {\colors_set_model{#1}} % only for local usage
-\def\dosetcolormodel#1% no message
- {\ctxcommand{setcolormodel('#1',\ifweightGRAY true\else false\fi)}} % sets attribute
+\def\colors_set_model#1% direct
+ {\edef\currentcolormodel{#1}%
+ \ctxcommand{setcolormodel('\currentcolormodel',\v_colors_weight_state)}} % sets attribute at lua end
-\dosetcolormodel{all}
+\colors_set_model\s!all
-\def\dosetupcolormodel
- {\ifincolor
- \ifRGBsupported
- \ifCMYKsupported
- \dosetcolormodel{all}%
+\def\colors_setup_current_model
+ {\ifconditional\c_colors_enabled
+ \ifconditional\c_colors_rgb_supported
+ \ifconditional\c_colors_cmyk_supported
+ \colors_set_model\s!all
\else
- \dosetcolormodel{rgb}%
+ \colors_set_model\s!rgb
\fi
\else
- \ifCMYKsupported
- \dosetcolormodel{cmyk}%
+ \ifconditional\c_colors_cmyk_supported
+ \colors_set_model\s!cmyk
\else
- \ifconvertGRAY
- \dosetcolormodel{gray}%
+ \ifconditional\c_colors_convert_gray
+ \colors_set_model\s!gray
\else
- \dosetcolormodel{none}%
+ \colors_set_model\s!none
\fi
\fi
\fi
\else
- \ifconvertGRAY
- \dosetcolormodel{gray}%
+ \ifconditional\c_colors_convert_gray
+ \colors_set_model\s!gray
\else
- \dosetcolormodel{none}%
+ \colors_set_model\s!none
\fi
\fi}
-\appendtoks
- \dosetupcolormodel
-\to \everyjob
-
% Currently in mkiv transparency is implemented independent of color. This costs
% a bit more processing time but gives the possibility to apply transparency
% independently in the future. Is this useful? If not we may as well combine them
@@ -737,49 +564,34 @@
% Since we couple definitions, we could stick to one test. Todo. Same for mpcolor.
-% : in currentpalet, maybe not, ugly (some day at the lua end)
-
-\letvalueempty{\??qc:-}
-\letvalueempty{\??qt:-}
-
-% \unexpanded\def\doactivatecolor#1% : in currentpalet, maybe not, ugly (some day at the lua end)
-% {\edef\currentcolorname{#1}%
-% \ifcsname\??qc:\currentpalet\currentcolorname\endcsname
-% \csname\??qc:\currentpalet\currentcolorname\endcsname
-% \csname\??qt:\currentpalet\currentcolorname\endcsname
-% \else\ifcsname\??qc:\currentcolorname\endcsname
-% \csname\??qc:\currentcolorname\endcsname
-% \csname\??qt:\currentcolorname\endcsname
-% \fi\fi}
+\letvalue{\??colorsetter-}\empty % used?
+\letvalue{\??transparencysetter-}\empty % used?
-\unexpanded\def\doactivatecolor#1% not that much faster but less tracing
- {\edef\currentcolorname{#1}%
- \ifx\currentpalet\empty
- \expandafter\doactivatecolor_nop
+\def\colors_activate % two-step is not that much faster but less tracing
+ {\ifx\currentcolorprefix\empty
+ \expandafter\colors_activate_nop
\else
- \expandafter\doactivatecolor_yes
+ \expandafter\colors_activate_yes
\fi}
-\unexpanded\def\doactivatecolor_yes
- {\ifcsname\??qc:\currentpalet\currentcolorname\endcsname
- \csname\??qc:\currentpalet\currentcolorname\endcsname
- \csname\??qt:\currentpalet\currentcolorname\endcsname
- \else\ifcsname\??qc:\currentcolorname\endcsname
- \csname\??qc:\currentcolorname\endcsname
- \csname\??qt:\currentcolorname\endcsname
+\def\colors_activate_yes#1%
+ {\edef\currentcolorname{#1}%
+ \ifcsname\??colorsetter\currentcolorprefix\currentcolorname\endcsname
+ \csname\??colorsetter\currentcolorprefix\currentcolorname\endcsname
+ \csname\??transparencysetter\currentcolorprefix\currentcolorname\endcsname
+ \else\ifcsname\??colorsetter\currentcolorname\endcsname
+ \csname\??colorsetter\currentcolorname\endcsname
+ \csname\??transparencysetter\currentcolorname\endcsname
\fi\fi}
-\unexpanded\def\doactivatecolor_nop
- {\ifcsname\??qc:\currentcolorname\endcsname
- \csname\??qc:\currentcolorname\endcsname
- \csname\??qt:\currentcolorname\endcsname
+\def\colors_activate_nop#1%
+ {\edef\currentcolorname{#1}%
+ \ifcsname\??colorsetter\currentcolorname\endcsname
+ \csname\??colorsetter\currentcolorname\endcsname
+ \csname\??transparencysetter\currentcolorname\endcsname
\fi}
-\let\normaldoactivatecolor\doactivatecolor
-
-% new:
-
-\let\dousecolorparameter\doactivatecolor
+\let\dousecolorparameter\colors_activate
\unexpanded\def\dousecolorhashparameter#1#2%
{\ifcsname#1#2\endcsname
@@ -788,82 +600,89 @@
\unexpanded\def\dousecurrentcolorparameter
{\let\currentcolorname\currentcolorparameter % maybe only when success
- \ifcsname\??qc:\currentpalet\currentcolorparameter\endcsname
- \csname\??qc:\currentpalet\currentcolorparameter\endcsname
- \csname\??qt:\currentpalet\currentcolorparameter\endcsname
- \else\ifcsname\??qc:\currentcolorparameter\endcsname
- \csname\??qc:\currentcolorparameter\endcsname
- \csname\??qt:\currentcolorparameter\endcsname
+ \ifcsname\??colorsetter\currentcolorprefix\currentcolorparameter\endcsname
+ \csname\??colorsetter\currentcolorprefix\currentcolorparameter\endcsname
+ \csname\??transparencysetter\currentcolorprefix\currentcolorparameter\endcsname
+ \else\ifcsname\??colorsetter\currentcolorparameter\endcsname
+ \csname\??colorsetter\currentcolorparameter\endcsname
+ \csname\??transparencysetter\currentcolorparameter\endcsname
\fi\fi}
\let\dosetcolorattribute\dousecolorhashparameter % for a while
-% if it becomes a bottleneck we can set up a more complex system with one shared
-% attribute for colorspace, color and transparency
-%
-% maybe always on
-
-\def\doactivatecolor
- {\ifproductionrun
- \ctxcommand{enablecolor() commands.enabletransparency()}% not that efficient but at least robust
- \let\doactivatecolor\normaldoactivatecolor
- \expandafter\doactivatecolor
- \else
- \expandafter\normaldoactivatecolor
- \fi}
-
-\def\deactivatecolor
+\unexpanded\def\deactivatecolor
{\let\currentcolorname\s!black
\attribute\colorattribute\attributeunsetvalue
\attribute\transparencyattribute\attributeunsetvalue}
-\def\dodefinecolorcommand#1#2%
- {\unexpanded#1{#2}{\doactivatecolor{#2}}}
-
-\let\colorlist\empty % not really used, only for colo-run
-\setfalse\collectcolorsinlist
-\def\collectcolorinlist#1{\doglobal\addtocommalist{#1}\colorlist}
+\def\colors_define[#1][#2]%
+ {\ctxcommand{defineprocesscolor("#1","#2",false,\v_colors_freeze_state)}%
+ \unexpanded\setvalue{#1}{\colors_activate{#1}}}
-\def\doregistercolor#1#2%
- {\ctxcommand{defineprocesscolor("#1","#2",false,\colorfreezestate)}}
+\def\colors_define_global[#1][#2]%
+ {\ctxcommand{defineprocesscolor("#1","#2",true,\v_colors_freeze_state)}%
+ \unexpanded\setgvalue{#1}{\colors_activate{#1}}}
-\def\dodefinecolor[#1][#2]%
- {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
- \ctxcommand{defineprocesscolor("#1","#2",false,\colorfreezestate)}%
- \dodefinecolorcommand\setvalue{#1}}
+\def\colors_define_named[#1][#2]%
+ {\ctxcommand{defineprocesscolor("#1","#2",false,\v_colors_freeze_state)}%
+ \unexpanded\setvalue{#1}{\colors_activate{#1}}}
-\def\dodefineglobalcolor[#1][#2]%
- {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
- \ctxcommand{defineprocesscolor("#1","#2",true,\colorfreezestate)}%
- \dodefinecolorcommand\setgvalue{#1}}
+\def\dodefinefastcolor[#1][#2]% still not fast but ok (might change)
+ {\ctxcommand{defineprocesscolor("#1","#2",false,\v_colors_freeze_state)}%
+ \unexpanded\setvalue{#1}{\colors_activate{#1}}}
-\def\dodefinenamedcolor[#1][#2]%
- {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
- \ctxcommand{defineprocesscolor("#1","#2",false,\colorfreezestate)}%
- \dodefinecolorcommand\setvalue{#1}}
+% Spotcolors used setxvalue but that messes up currentcolor
+% and probably no global is needed either but they are global
+% at the lua end (true argument) so we keep that if only because
+% spot colors often are a document wide property
-\def\dodefinespotcolor[#1][#2][#3]%
- {\ifconditional\collectcolorsinlist\collectcolorinlist{#1}\fi
- \ctxcommand{definespotcolor("#1","#2","#3",true)}%
- \dodefinecolorcommand\setxvalue{#1}}
+\def\colors_define_spot[#1][#2][#3]%
+ {\ctxcommand{definespotcolor("#1","#2","#3",true)}%
+ \unexpanded\setgvalue{#1}{\colors_activate{#1}}}
-\def\dodefinemultitonecolor[#1][#2][#3][#4]%
+\def\colors_define_multitone[#1][#2][#3][#4]%
{\ctxcommand{definemultitonecolor("#1","#2","#3","#4",true)}%
- \dodefinecolorcommand\setxvalue{#1}}
+ \unexpanded\setgvalue{#1}{\colors_activate{#1}}}
-\def\dodefinetransparency[#1][#2]%
+%D Transparencies (only):
+
+\def\colors_define_transpancy[#1][#2]%
{\ctxcommand{definetransparency("#1",#2)}}
-\def\dosetrastercolor#1% slow, we need a fast one
- {\edef\@@rastervalue{#1}%
- \ifx\@@rastervalue\empty
- \let\@@rastervalue\@@rsscreen
- \fi
- \ctxcommand{setrastercolor("_raster_",\@@rastervalue)}} % sets attribute
+% A goodie that replaces the startMPcolor hackery
-\def\dodefinefastcolor[#1][#2]% still not fast but ok
- {\ctxcommand{defineprocesscolor("#1","#2",false,\colorfreezestate)}%
- \dodefinecolorcommand\setvalue{#1}}
+% \definecolor[red-t] [r=1,t=0.5,a=1]
+% \definecolor[green-t][g=1,t=0.5,a=1]
+%
+% \defineintermediatecolor[mycolora][0.5,red,green]
+% \defineintermediatecolor[mycolorb][0.5,red-t,green-t]
+%
+% \definecolor[mycolorc][.5(blue,red)]
+% \definecolor[mycolord][.5(blue)]
+%
+% \enabledirectives[colors.pgf]
+% \definecolor[mycolorx][magenta!50!yellow]
+%
+% \starttext
+% test {\mycolora OEPS} test
+% test {\mycolorb OEPS} test
+% test {\mycolorc OEPS} test
+% test {\mycolord OEPS} test
+% test {\mycolorx OEPS} test
+% \stoptext
+
+\unexpanded\def\defineintermediatecolor
+ {\dotripleempty\colors_define_intermediate}
+
+\def\colors_define_intermediate[#1][#2][#3]% \dotripleempty adds {} inside []
+ {\colors_define_intermediate_indeed[#1][#2][#3]}
+
+\def\colors_define_intermediate_indeed[#1][#2,#3,#4][#5]%
+ {\ctxcommand{defineintermediatecolor("#1","#2",
+ \thecolorattribute{#3},\thecolorattribute{#4},
+ \thetransparencyattribute{#3},\thetransparencyattribute{#4},
+ "#5",false,\iffreezecolors true\else false\fi)}% not global
+ \unexpanded\setvalue{#1}{\colors_activate{#1}}}
%D \macros
%D {doifcolorelse, doifcolor}
@@ -873,33 +692,24 @@
%D define ourselves a color conditional first.
\def\doifcolorelse#1%
- {\ifcsname\??qa:\currentpalet#1\endcsname
+ {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname
\expandafter\firstoftwoarguments
- \else\ifcsname\??qa:#1\endcsname
+ \else\ifcsname\??colorattribute#1\endcsname
\doubleexpandafter\firstoftwoarguments
\else
\doubleexpandafter\secondoftwoarguments
\fi\fi}
\def\doifcolor#1%
- {\ifcsname\??qa:\currentpalet#1\endcsname
+ {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname
\expandafter\firstofoneargument
- \else\ifcsname\??qa:#1\endcsname
+ \else\ifcsname\??colorattribute#1\endcsname
\doubleexpandafter\firstofoneargument
\else
\doubleexpandafter\gobbleoneargument
\fi\fi}
%D \macros
-%D {colored}
-%D
-%D A bit like \type {\definedfont}:
-
-\unexpanded\def\colored[#1]%
- {\ctxcommand{defineprocesscolor("@colored@","#1",false,false)}%
- \groupedcommand{\doactivatecolor{@colored@}}{}}
-
-%D \macros
%D {startregistercolor,stopregistercolor,permitcolormode}
%D
%D If you only want to register a color, the switch \type
@@ -925,94 +735,107 @@
%D \stopregistercolor
%D \stoptyping
-% can be cleaned up
-
\let\maintextcolor \empty
\def\defaulttextcolor {black}
-\def\@@themaintextcolor{themaintextcolor}
+\def\s!themaintextcolor{themaintextcolor}
\appendtoks
- \deactivatecolor
- \ifx\maintextcolor\empty\else\doactivatecolor\maintextcolor\fi
+ \deactivatecolor
+ \ifx\maintextcolor\empty\else\colors_activate\maintextcolor\fi
\to \everybeforeoutput
-\def\registermaintextcolor
- {\ctxcommand{registermaintextcolor(\thecolorattribute\maintextcolor)}}
+\def\colors_switch_to_maintextcolor#1%
+ {\let\maintextcolor\s!themaintextcolor
+ \definecolor[\maintextcolor][#1]%
+ \colors_activate\maintextcolor
+ \ctxcommand{registermaintextcolor(\thecolorattribute\maintextcolor)}}
\unexpanded\def\starttextcolor[#1]%
{\doifsomething{#1}
- {\definecolor[\@@themaintextcolor][#1]%
- \let\maintextcolor\@@themaintextcolor
- \doactivatecolor\maintextcolor
- \registermaintextcolor}}
+ {\colors_switch_to_maintextcolor{#1}}}
\let\stoptextcolor\relax
-\def\initializemaintextcolor
- {\doifelsenothing\@@cltextcolor
- {\definecolor[\@@themaintextcolor][\defaulttextcolor]}
- {\definecolor[\@@themaintextcolor][\@@cltextcolor]}%
- \let\maintextcolor\@@themaintextcolor
- \doactivatecolor\maintextcolor
- \registermaintextcolor}
+\let\p_colors_textcolor\empty
+
+\def\color_initialize_maintextcolor
+ {\edef\p_colors_textcolor{\colorsparameter\c!textcolor}%
+ \ifx\p_colors_textcolor\empty
+ \colors_switch_to_maintextcolor\defaulttextcolor
+ \else
+ \colors_switch_to_maintextcolor\p_colors_textcolor
+ \fi}
+
+\appendtoks \color_initialize_maintextcolor \to \everyjob
+\appendtoks \color_initialize_maintextcolor \to \everysetupcolors
-\appendtoks \initializemaintextcolor \to \everyjob
-\appendtoks \initializemaintextcolor \to \everysetupcolors
+\def\colors_inherited_direct_cs#1{\csname\??colorsetter \ifcsname\??colorsetter #1\endcsname#1\fi\endcsname}
+\def\colors_inherited_direct_ca#1{\csname\??colorattribute \ifcsname\??colorattribute #1\endcsname#1\fi\endcsname}
+\def\colors_inherited_direct_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter #1\endcsname#1\fi\endcsname}
+\def\colors_inherited_direct_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute#1\endcsname#1\fi\endcsname}
-\def\doinheritdirectcs#1{\csname\??qc:\ifcsname\??qc:#1\endcsname#1\fi\endcsname}
-\def\doinheritdirectca#1{\csname\??qa:\ifcsname\??qa:#1\endcsname#1\fi\endcsname}
-\def\doinheritdirectts#1{\csname\??qt:\ifcsname\??qt:#1\endcsname#1\fi\endcsname}
-\def\doinheritdirectta#1{\csname\??qs:\ifcsname\??qs:#1\endcsname#1\fi\endcsname}
+\def\colors_inherited_palet_ca#1#2{\csname\??colorattribute \ifcsname\??colorattribute \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname}
+\def\colors_inherited_palet_cs#1#2{\csname\??colorsetter \ifcsname\??colorsetter \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname}
+\def\colors_inherited_palet_ta#1#2{\csname\??transparencyattribute\ifcsname\??transparencyattribute\??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname}
+\def\colors_inherited_palet_ts#1#2{\csname\??transparencysetter \ifcsname\??transparencysetter \??colorpalet#1:#2\endcsname\??colorpalet#1:#2\fi\endcsname}
-\def\doinheritpaletca#1#2{\csname\??qa:\ifcsname\??qa:\??pa#1:#2\endcsname\??pa#1:#2\fi\endcsname}
-\def\doinheritpaletcs#1#2{\csname\??qc:\ifcsname\??qc:\??pa#1:#2\endcsname\??pa#1:#2\fi\endcsname}
-\def\doinheritpaletta#1#2{\csname\??qs:\ifcsname\??qs:\??pa#1:#2\endcsname\??pa#1:#2\fi\endcsname}
-\def\doinheritpaletts#1#2{\csname\??qt:\ifcsname\??qt:\??pa#1:#2\endcsname\??pa#1:#2\fi\endcsname}
+\let\colors_set_value\setvalue
+
+\appendtoks
+ \ifconditional\c_colors_expanded
+ \let\colors_set_value\setevalue
+ \else
+ \let\colors_set_value\setvalue
+ \fi
+\to \everysetupcolors
-\def\dodefinepaletcolor#1#2#3%
+\def\colors_define_palet_set#1#2#3%
{\doifassignmentelse{#3}% \definepalet[test][xx={y=.4}]
- {\definecolor[\??pa#1:#2][#3]%
- \dosetcolorvalue{\??qc:#1:#2}{\doinheritpaletca{#1}{#2}}%
- \dosetcolorvalue{\??qa:#1:#2}{\doinheritpaletcs{#1}{#2}}%
- \dosetcolorvalue{\??qt:#1:#2}{\doinheritpaletta{#1}{#2}}%
- \dosetcolorvalue{\??qs:#1:#2}{\doinheritpaletts{#1}{#2}}}
- {\ifcsname\??qc:#3\endcsname % \definepalet[test][xx=green]
- \dosetcolorvalue{\??qc:#1:#2}{\doinheritdirectcs{#3}}%
- \dosetcolorvalue{\??qa:#1:#2}{\doinheritdirectca{#3}}%
- \dosetcolorvalue{\??qt:#1:#2}{\doinheritdirectts{#3}}%
- \dosetcolorvalue{\??qs:#1:#2}{\doinheritdirectta{#3}}%
+ {\definecolor[\??colorpalet#1:#2][#3]%
+ \colors_set_value{\??colorsetter #1:#2}{\colors_inherited_palet_ca{#1}{#2}}%
+ \colors_set_value{\??colorattribute #1:#2}{\colors_inherited_palet_cs{#1}{#2}}%
+ \colors_set_value{\??transparencysetter #1:#2}{\colors_inherited_palet_ta{#1}{#2}}%
+ \colors_set_value{\??transparencyattribute#1:#2}{\colors_inherited_palet_ts{#1}{#2}}}
+ {\ifcsname\??colorsetter#3\endcsname % \definepalet[test][xx=green]
+ \colors_set_value{\??colorsetter #1:#2}{\colors_inherited_direct_cs{#3}}%
+ \colors_set_value{\??colorattribute #1:#2}{\colors_inherited_direct_ca{#3}}%
+ \colors_set_value{\??transparencysetter #1:#2}{\colors_inherited_direct_ts{#3}}%
+ \colors_set_value{\??transparencyattribute#1:#2}{\colors_inherited_direct_ta{#3}}%
\else
% not entered when making format
- \localundefine{\??qc:#1:#2}%
- \localundefine{\??qa:#1:#2}%
- \localundefine{\??qt:#1:#2}%
- \localundefine{\??qs:#1:#2}%
+ \localundefine{\??colorsetter #1:#2}%
+ \localundefine{\??colorattribute #1:#2}%
+ \localundefine{\??transparencysetter #1:#2}%
+ \localundefine{\??transparencyattribute#1:#2}%
\fi}}
-\setvalue{\??qc:}{} \setvalue{\??qa:}{0}
-\setvalue{\??qt:}{} \setvalue{\??qs:}{0}
+\letvalue{\??colorsetter }\empty \letvalue{\??colorattribute }\!!zerocount
+\letvalue{\??transparencysetter}\empty \letvalue{\??transparencyattribute}\!!zerocount
+
+\setvalue{\??colorattribute currentcolor}{\the\attribute\colorattribute} % for mpcolor
+\setvalue{\??transparencyattribute currentcolor}{\the\attribute\transparencyattribute} % for mpcolor
-\def\doinheritca#1{\csname\??qa:\ifcsname\??qa:\currentpalet#1\endcsname\currentpalet#1\else\ifcsname\??qa:#1\endcsname#1\fi\fi\endcsname}
-\def\doinheritcs#1{\csname\??qc:\ifcsname\??qc:\currentpalet#1\endcsname\currentpalet#1\else\ifcsname\??qc:#1\endcsname#1\fi\fi\endcsname}
-\def\doinheritta#1{\csname\??qs:\ifcsname\??qs:\currentpalet#1\endcsname\currentpalet#1\else\ifcsname\??qs:#1\endcsname#1\fi\fi\endcsname}
-\def\doinheritts#1{\csname\??qt:\ifcsname\??qt:\currentpalet#1\endcsname\currentpalet#1\else\ifcsname\??qt:#1\endcsname#1\fi\fi\endcsname}
+\def\colors_inherited_ca#1{\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname}
+\def\colors_inherited_cs#1{\csname\??colorsetter \ifcsname\??colorsetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorsetter #1\endcsname#1\fi\fi\endcsname}
+\def\colors_inherited_ta#1{\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname}
+\def\colors_inherited_ts#1{\csname\??transparencysetter \ifcsname\??transparencysetter \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencysetter #1\endcsname#1\fi\fi\endcsname}
%D Low level defs:
-\def\colordefalc#1#2{\setevalue{\??qa:#1}{#2}\setvalue {\??qc:#1}{\attribute\colorattribute #2 }}
-\def\colordefagc#1#2{\setxvalue{\??qa:#1}{#2}\setgvalue{\??qc:#1}{\attribute\colorattribute #2 }} % was not g
-\def\colordefalt#1#2{\setevalue{\??qs:#1}{#2}\setvalue {\??qt:#1}{\attribute\transparencyattribute#2 }}
-\def\colordefagt#1#2{\setxvalue{\??qs:#1}{#2}\setgvalue{\??qt:#1}{\attribute\transparencyattribute#2 }}
+\unexpanded\def\colordefalc#1#2{\setevalue{\??colorattribute #1}{#2}\setvalue {\??colorsetter #1}{\attribute\colorattribute #2 }}
+\unexpanded\def\colordefagc#1#2{\setxvalue{\??colorattribute #1}{#2}\setgvalue{\??colorsetter #1}{\attribute\colorattribute #2 }} % was not g
+\unexpanded\def\colordefalt#1#2{\setevalue{\??transparencyattribute#1}{#2}\setvalue {\??transparencysetter#1}{\attribute\transparencyattribute#2 }}
+\unexpanded\def\colordefagt#1#2{\setxvalue{\??transparencyattribute#1}{#2}\setgvalue{\??transparencysetter#1}{\attribute\transparencyattribute#2 }}
-\def\colordefflc#1#2{\setvalue {\??qa:#1}{\doinheritca{#2}}\setvalue {\??qc:#1}{\doinheritcs{#2}}}
-\def\colordeffgc#1#2{\setgvalue{\??qa:#1}{\doinheritca{#2}}\setvalue {\??qc:#1}{\doinheritcs{#2}}}
-\def\colordefflt#1#2{\setvalue {\??qs:#1}{\doinheritta{#2}}\setvalue {\??qt:#1}{\doinheritts{#2}}}
-\def\colordeffgt#1#2{\setgvalue{\??qs:#1}{\doinheritta{#2}}\setgvalue{\??qt:#1}{\doinheritts{#2}}}
+\unexpanded\def\colordefflc#1#2{\setvalue {\??colorattribute #1}{\colors_inherited_ca{#2}}\setvalue {\??colorsetter #1}{\colors_inherited_cs{#2}}}
+\unexpanded\def\colordeffgc#1#2{\setgvalue{\??colorattribute #1}{\colors_inherited_ca{#2}}\setvalue {\??colorsetter #1}{\colors_inherited_cs{#2}}}
+\unexpanded\def\colordefflt#1#2{\setvalue {\??transparencyattribute#1}{\colors_inherited_ta{#2}}\setvalue {\??transparencysetter#1}{\colors_inherited_ts{#2}}}
+\unexpanded\def\colordeffgt#1#2{\setgvalue{\??transparencyattribute#1}{\colors_inherited_ta{#2}}\setgvalue{\??transparencysetter#1}{\colors_inherited_ts{#2}}}
-\def\colordefrlc #1{\localundefine {\??qa:#1}\localundefine {\??qc:#1}}
-\def\colordefrgc #1{\globalundefine{\??qa:#1}\globalundefine{\??qc:#1}}
-\def\colordefrlt #1{\localundefine {\??qs:#1}\localundefine {\??qt:#1}}
-\def\colordefrgt #1{\globalundefine{\??qs:#1}\globalundefine{\??qt:#1}}
+\unexpanded\def\colordefrlc #1{\localundefine {\??colorattribute #1}\localundefine {\??colorsetter #1}}
+\unexpanded\def\colordefrgc #1{\globalundefine{\??colorattribute #1}\globalundefine{\??colorsetter #1}}
+\unexpanded\def\colordefrlt #1{\localundefine {\??transparencyattribute#1}\localundefine {\??transparencysetter#1}}
+\unexpanded\def\colordefrgt #1{\globalundefine{\??transparencyattribute#1}\globalundefine{\??transparencysetter#1}}
%D \macros
%D {colorvalue, grayvalue}
@@ -1038,11 +861,13 @@
\let\colorformatseparator\space
-\def\MPcolor #1{\ctxcommand{mpcolor(\number\currentcolormodel,\number\doinheritca{#1},\number\doinheritta{#1})}}
-\def\MPoptions #1{\ctxcommand{mpoptions(\number\currentcolormodel,\number\doinheritca{#1},\number\doinheritta{#1})}}
+\def\MPcolor #1{\ctxcommand{mpcolor(\number\attribute\colormodelattribute,\number\colors_inherited_ca{#1},\number\colors_inherited_ta{#1})}}
+\def\MPoptions #1{\ctxcommand{mpoptions(\number\attribute\colormodelattribute,\number\colors_inherited_ca{#1},\number\colors_inherited_ta{#1})}}
-\def\thecolorattribute #1{\number\csname\??qa:\ifcsname\??qa:\currentpalet#1\endcsname\currentpalet#1\else\ifcsname\??qa:#1\endcsname#1\fi\fi\endcsname}
-\def\thetransparencyattribute#1{\number\csname\??qs:\ifcsname\??qs:\currentpalet#1\endcsname\currentpalet#1\else\ifcsname\??qs:#1\endcsname#1\fi\fi\endcsname}
+\def\thecolorattribute #1{\number\csname\??colorattribute \ifcsname\??colorattribute \currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??colorattribute #1\endcsname#1\fi\fi\endcsname}
+\def\thetransparencyattribute#1{\number\csname\??transparencyattribute\ifcsname\??transparencyattribute\currentcolorprefix#1\endcsname\currentcolorprefix#1\else\ifcsname\??transparencyattribute#1\endcsname#1\fi\fi\endcsname}
+
+\def\thecolormodelattribute {\the\attribute\colormodelattribute}
\def\internalspotcolorname #1{\ctxcommand{spotcolorname(\thecolorattribute{#1})}}
\def\internalspotcolorparent #1{\ctxcommand{spotcolorparent(\thecolorattribute{#1})}}
@@ -1079,10 +904,9 @@
\unexpanded\def\forcecolorhack{\leaders\hrule\normalhskip\zeropoint}
-%D We default to the colors defined in \type {colo-rgb} and
-%D support both \cap{RGB} and \cap{CMYK} output. As you can
-%D see, color support is turned off by default. Reduction of
-%D gray colors to gray scales is turned on.
+%D We default to the colors defined in \type {colo-imp-rgb} and
+%D support both \RGB\ and \CMYK\ output. Transparencies are defined
+%D here:
\definecolor[black][s=0]
\definecolor[white][s=1]
@@ -1106,27 +930,14 @@
\definetransparency [luminosity] [16]
\setupcolors
- [\c!state=\v!stop, % will be enabled later on
+ [\c!state=\v!stop, % color will be enabled later on
\c!conversion=\v!yes,
- \c!reduction=\v!no,
\c!rgb=\v!yes,
\c!cmyk=\v!yes,
\c!spot=\v!yes,
- \c!mp\c!cmyk=\@@clcmyk,
- \c!mp\c!spot=\@@clspot,
\c!expansion=\v!no,
\c!textcolor=,
- \c!split=\v!no, % obsolete
- \c!factor=\v!yes,
- \c!criterium=\v!all] % obsolete
-
-\appendtoks
- \setupcolors[\c!state=\v!start]% later direct
-\to \everyjob
-
-\appendtoks
- \let\showcolormessage\showmessage
-\to \everyjob
+ \c!factor=\v!yes]
\setupcolor
[\v!rgb]
diff --git a/tex/context/base/colo-run.lua b/tex/context/base/colo-run.lua
new file mode 100644
index 000000000..4f1916d5a
--- /dev/null
+++ b/tex/context/base/colo-run.lua
@@ -0,0 +1,66 @@
+if not modules then modules = { } end modules ['colo-run'] = {
+ version = 1.000,
+ comment = "companion to colo-run.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- For historic reasons the core has a couple of tracing
+-- features. Nowadays these would end up in modules.
+
+local colors= attributes.colors
+
+function commands.showcolorset(name)
+ local set = colors.setlist(name)
+ context.starttabulate { "|l|l|l|l|l|l|l|" }
+ for i=1,#set do
+ local s = set[i]
+ local r = { width = "4em", height = "max", depth = "max", color = s }
+ context.NC()
+ context.setcolormodel { "gray" }
+ context.blackrule(r)
+ context.NC()
+ context.blackrule(r)
+ context.NC()
+ context.grayvalue(s)
+ context.NC()
+ context.colorvalue(s)
+ context.NC()
+ context(s)
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+end
+
+function commands.showcolorcomponents(list)
+ local set = utilities.parsers.settings_to_array(list)
+ context.starttabulate { "|lT|lT|lT|lT|" }
+ context.NC()
+ context("color")
+ context.NC()
+ context("name")
+ context.NC()
+ context("transparency")
+ context.NC()
+ context("specification ")
+ context.NC()
+ context.NR()
+ context.TB()
+ for i=1,#set do
+ local s = set[i]
+ context.NC()
+ context.showcolorbar { s }
+ context.NC()
+ context(s)
+ context.NC()
+ context.transparencycomponents(s)
+ context.NC()
+ context.colorcomponents(s)
+ context.NC()
+ context.NR()
+ end
+ context.stoptabulate()
+end
+
diff --git a/tex/context/base/colo-run.mkiv b/tex/context/base/colo-run.mkiv
index 363b39c47..7d24b1d89 100644
--- a/tex/context/base/colo-run.mkiv
+++ b/tex/context/base/colo-run.mkiv
@@ -11,57 +11,70 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+\registerctxluafile{colo-run}{1.000}
+
\unprotect
-% temp hack (not do be documented)
+%D Colors
+
+% These are nicer in \LUA\ code than in \TEX\ code but not more
+% efficient.
+
+\unexpanded\gdef\showcolorbar[#1]%
+ {\backgroundline[#1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}}
-% \gdef\doformatcolorP#1:#2:#3:#4:#5:#6\od % was undefined in colo-ini
-% {#1\colorformatseparator
-% \dodoformatcolor{#2}\colorformatseparator
-% \dodoformatcolor{#3}\colorformatseparator
-% \dodoformatcolor{#4}\colorformatseparator}
+\unexpanded\gdef\showcolor {\dosingleempty\colors_show}
+\unexpanded\gdef\showcolorset {\dosingleempty\colors_show_set}
+\unexpanded\gdef\showcolorcomponents{\dosingleempty\colors_show_components}
-% \gdef\doformatgrayP#1:#2:#3:#4:#5:#6\od
-% {todo}
+\gdef\colors_show_set [#1]{\ctxcommand{showcolorset("#1")}}
+\gdef\colors_show_components[#1]{\ctxcommand{showcolorcomponents("#1")}}
-% so far
+\gdef\colors_show[#1]% % we do this at the tex end as loading happens
+ {\usecolors [#1]% % delayed and we can only ask for the set if
+ \showcolorset[#1]} % loading has happened
-\gdef\showpalet
+% The rest might also be done in \LUA\ although there is not much
+% beauty to gain here (too much typesetting specific). Also, these
+% macros are pretty old and hardly used so best keep them as they
+% are.
+
+%D Palets
+
+\unexpanded\gdef\showpalet
{\dodoubleargument\doshowpalet}
\gdef\doshowpalet[#1][#2]%
- {\doifdefined{\??pa#1}
- {\doifinsetelse\v!vertical{#2}
- {\showverticalpalet[#1][#2]}
- {\showhorizontalpalet[#1][#2]}}}
+ {\ifcsname\??colorpalet#1\endcsname
+ \doifinsetelse\v!vertical{#2} \colors_show_palet_vertical \colors_show_palet_horizontal [#1][#2]%
+ \fi}
-\gdef\showverticalpalet[#1][#2]%
+\gdef\colors_show_palet_vertical[#1][#2]%
{\localvbox
{\offinterlineskip
\setuppalet[#1]
- \def\rule
- {\vrule\!!width3em\!!height\strutht\!!depth\strutdp}
\tabskip\zeropoint
- \def\doshowpalet##1%
+ \def\show_palet##1%
{\doifinsetelse\v!number{#2}{##1\hskip.5em}{}&
- \color[##1]{\rule}\graycolor[##1]{\rule}&
+ \color[##1]{\vrule\!!width3em\!!height\strutht\!!depth\strutdp}%
+ \graycolor[##1]{\vrule\!!width3em\!!height\strutht\!!depth\strutdp}&
\doifinset\v!value{#2}{\hskip.5em\colorvalue{##1}}\crcr}
\halign
{\hss##&\hss##\hss&##\cr
- &\doifinset{\v!name}{#2}{\strut#1}&\cr%
- \processpalet[#1]\doshowpalet\crcr}}}
+ &\doifinset\v!name{#2}{\strut#1}&\cr%
+ \colors_process_palet[#1]\show_palet\crcr}}}
-\gdef\showhorizontalpalet[#1][#2]% todo: bTABLE etc
+\gdef\colors_show_palet_horizontal[#1][#2]% todo: bTABLE etc
{\localvbox
{\offinterlineskip
\setuppalet[#1]
\tabskip\zeropoint
\!!widtha\zeropoint
\doifinset\v!number{#2}
- {\def\doshowpalet##1%
+ {\def\show_palet##1%
{\setbox0\hbox{##1}%
\ifdim\!!widtha<\wd0\!!widtha\wd0\fi}%
- \processpalet[#1]\doshowpalet}%
+ \colors_process_palet[#1]\show_palet}%
\advance\!!widtha 1em
\ifdim\!!widtha<5em
\!!widtha5em
@@ -69,18 +82,18 @@
\halign
{##&&\hbox to \!!widtha{\hss##\hss}\cr
\doifinset\v!number{#2}
- {\def\doshowpalet##1{&\strut##1}%
- \processpalet[#1]\doshowpalet}\cr
+ {\def\show_palet##1{&\strut##1}%
+ \colors_process_palet[#1]\show_palet}\cr
\doifinset\v!name{#2}{#1\hskip.5em}%
- \def\doshowpalet##1%
+ \def\show_palet##1%
{&\strut\color[##1]{\vrule\!!width\!!widtha\!!height\strutht\!!depth\zeropoint}}%
- \processpalet[#1]\doshowpalet\crcr
+ \colors_process_palet[#1]\show_palet\crcr
\noalign{\vskip-\strutdepth}%
- \def\doshowpalet##1%
+ \def\show_palet##1%
{&\graycolor[##1]{\vrule\!!width\!!widtha\!!height\zeropoint\!!depth\strutdp}}%
- \processpalet[#1]\doshowpalet\crcr
+ \colors_process_palet[#1]\show_palet\crcr
\doifinset\v!value{#2}
- {\def\doshowpalet##1%
+ {\def\show_palet##1%
{&\vbox
{\hsize\!!widtha
\vskip.25ex
@@ -88,39 +101,67 @@
\veryraggedcenter
\let\colorformatseparator\endgraf
\colorvalue{##1}}}%
- \processpalet[#1]\doshowpalet}%
+ \colors_process_palet[#1]\show_palet}%
\crcr}}}
-\gdef\processpalet[#1]%
- {\expanded{\globalprocesscommalist[\getvalue{\??pa#1}]}}
+\gdef\colors_process_palet[#1]%
+ {\expanded{\globalprocesscommalist[\getvalue{\??colorpalet#1}]}}
+
+\unexpanded\gdef\comparepalet
+ {\dosingleargument\colors_compare_palet}
-\gdef\showcolorgroup
- {\dodoubleargument\doshowcolorgroup}
+\gdef\colors_compare_palet[#1]%
+ {\ifcsname\??colorpalet#1\endcsname
+ \hbox
+ {\colors_compare_palet_indeed\color[#1]%
+ \quad
+ \colors_compare_palet_indeed\graycolor[#1]}%
+ \fi}
-\gdef\doshowcolorgroup[#1][#2]%
+\gdef\colors_compare_palet_indeed#1[#2]%
+ {\localvbox
+ {\offinterlineskip
+ \setuppalet[#2]
+ \getcommacommandsize[\getvalue{\??colorpalet#2}]
+ \!!widtha2em\relax
+ \hsize\commalistsize\!!widtha
+ \def\compare_palet##1%
+ {\hbox
+ {\setbox0\hbox
+ {#1[##1]{\vrule\!!width\hsize\!!height3ex}}%
+ \wd0\zeropoint
+ \box0
+ \hbox to \hsize
+ {\def\compare_palet####1%
+ {\hbox to \!!widtha
+ {\hss#1[####1]{\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}\hss}}%
+ \processcommacommand[\getvalue{\??colorpalet#2}]\compare_palet}}
+ \endgraf}
+ \processcommacommand[\getvalue{\??colorpalet#2}]\compare_palet}}
+
+%D Groups
+
+\unexpanded\gdef\showcolorgroup
+ {\dodoubleargument\colors_show_group}
+
+\gdef\colors_show_group[#1][#2]%
{\doifcolor{#1:1}
- {\doifinsetelse\v!vertical{#2}
- {\showverticalcolorgroup[#1][#2]}
- {\showhorizontalcolorgroup[#1][#2]}}}
+ {\doifinsetelse\v!vertical{#2} \colors_show_group_vertical \colors_show_group_horizontal [#1][#2]}}
-\gdef\showhorizontalcolorgroup[#1][#2]%
+\gdef\colors_show_group_horizontal[#1][#2]%
{\localvbox
{\offinterlineskip
\setuppalet
\tabskip\zeropoint
- \def\rule
- {\vrule\!!width4em\!!height\strutht\!!depth\strutdp}
\def\colorformatseparator{\strut\cr}
- \def\dodoshowgroup##1%
- {\halign
- {\hss####\hss\cr
- \doifinset\v!number{#2}{\strut##1}\cr
- \color[#1:##1]{\vrule\!!width4em\!!height\strutht\!!depth\zeropoint}\cr
- \graycolor[#1:##1]{\vrule\!!width4em\!!height\zeropoint\!!depth\strutdp}\cr
- \doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}
- \def\doshowgroup##1%
- {\doifcolor{#1:##1}
- {\vbox{\dodoshowgroup{##1}}}}%
+ \def\show_group##1%
+ {\doifcolor{#1:##1}{\vbox
+ {\halign
+ {\hss####\hss\cr
+ \doifinset\v!number{#2}{\strut##1}\cr
+ \color[#1:##1]{\vrule\!!width4em\!!height\strutht\!!depth\zeropoint}\cr
+ \graycolor[#1:##1]{\vrule\!!width4em\!!height\zeropoint\!!depth\strutdp}\cr
+ \doifinset\v!value{#2}{\colorvalue{#1:##1}\strut}\crcr}}}}%
\hbox
{\doifinset\v!name{#2}
{\strut
@@ -128,130 +169,52 @@
{\raise3\lineheight\hbox{#1\hskip.5em}}
{#1}%
\hskip.5em}%
- \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4%
- \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}}
+ \show_group1\show_group2\show_group3\show_group4%
+ \show_group5\show_group6\show_group7\show_group8}}}
-\gdef\showverticalcolorgroup[#1][#2]%
+\gdef\colors_show_group_vertical[#1][#2]%
{\localvbox
{\offinterlineskip
\setuppalet
\tabskip\zeropoint
- \def\rule
- {\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}%
- \def\doshowgroup##1%
+ \def\show_group##1%
{\doifcolor{#1:##1}
{\doifinset\v!number{#2}{##1\hskip.5em}&
- \color[#1:##1]{\rule}\graycolor[#1:##1]{\rule}&
+ \color[#1:##1]{\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}%
+ \graycolor[#1:##1]{\vrule\!!width2.5em\!!height\strutht\!!depth\strutdp}&
\doifinset\v!value{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}%
\halign
{\hss##&\hss##\hss&##\hss\cr
&\doifinset\v!name{#2}{\strut#1}&\crcr
- \doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4%
- \doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}}
+ \show_group1\show_group2\show_group3\show_group4%
+ \show_group5\show_group6\show_group7\show_group8}}}
-\gdef\showcolor
- {\dosingleempty\doshowcolor}
+\unexpanded\gdef\comparecolorgroup
+ {\dosingleargument\colors_compare_group}
-\gdef\doshowcolor[#1]%
- {\bgroup
- \iffirstargument
- \let\colorlist\empty % not really used, only for colo-run
- \let\colorstyle\empty
- \settrue\collectcolorsinlist
- \setupcolor[#1]%
- \fi
- \def\rule
- {\vrule\!!width4em\!!height\strutht\!!depth\strutdp}%
- \def\docommand##1%
- {\NC\graycolor[##1]{\rule}\NC\color[##1]{\rule}\NC\grayvalue{##1}\NC\colorvalue{##1}\NC##1\NC\NR}%
- \starttabulate[|l|l|l|l|l|l|l|]
- \expanded{\globalprocesscommalist[\colorlist]}\docommand
- \stoptabulate
- \egroup}
-
-\gdef\comparepalet
- {\dosingleargument\docomparepalet}
-
-\gdef\docomparepalet[#1]%
- {\doifdefined{\??pa#1}
- {\hbox
- {\dodocomparepalet\color[#1]%
- \quad
- \dodocomparepalet\graycolor[#1]}}}
-
-\gdef\dodocomparepalet#1[#2]%
- {\localvbox
- {\offinterlineskip
- \setuppalet[#2]
- \getcommacommandsize[\getvalue{\??pa#2}]
- \!!widtha2em\relax
- \hsize\commalistsize\!!widtha
- \def\rule%
- {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
- \def\dododocomparepalet##1%
- {\hbox
- {\setbox0\hbox
- {#1[##1]{\vrule\!!width\hsize\!!height3ex}}%
- \wd0\zeropoint
- \box0
- \hbox to \hsize
- {\def\dododocomparepalet####1%
- {\hbox to \!!widtha
- {\hss#1[####1]{\rule}\hss}}%
- \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}}
- \endgraf}
- \processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}}
-
-\gdef\comparecolorgroup
- {\dosingleargument\docomparecolorgroup}
-
-\gdef\docomparecolorgroup[#1]%
+\gdef\colors_compare_group[#1]%
{\doifcolor{#1:1}
{\hbox
- {\dodocomparecolorgroup\color[#1]%
+ {\colors_compare_group_indeed\color[#1]%
\quad
- \dodocomparecolorgroup\graycolor[#1]}}}
+ \colors_compare_group_indeed\graycolor[#1]}}}
-\gdef\dodocomparecolorgroup#1[#2]%
+\gdef\colors_compare_group_indeed#1[#2]%
{\localvbox
{\!!counta\zerocount
- \dorecurse{15}
- {\doifcolor{#2:\recurselevel}{\advance\!!counta\plusone}}
+ \dorecurse{15}{\doifcolor{#2:\recurselevel}{\advance\!!counta\plusone}}
\!!widtha2em\relax
\hsize\!!counta\!!widtha
- \def\rule
- {\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
- \def\dododocomparecolorgroup##1%
- {\hbox to \hsize
- {\setbox0\hbox
- {#1[#2:##1]{\vrule\!!width\hsize\!!height3ex}}%
- \wd0\zeropoint
- \box0
- \hbox to \hsize
- {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\rule}\hss}}}
- \endgraf}
- \dorecurse\!!counta{\dododocomparecolorgroup\recurselevel}}}
-
-\gdef\dogetcolorcomponents#1%
- {\doifelsenothing{#1}
- {\appendtoks
- \TB
- \to \scratchtoks}
- {\appendtoks
- \NC\showcolorbar[#1]\NC#1\NC\transparencycomponents{#1}\NC\colorcomponents{#1}\NC \NR
- \to \scratchtoks}}
-
-\gdef\showcolorbar[#1]%
- {\backgroundline[#1]{\strut\enspace\color[white]{white}\enspace\color[black]{black}\enspace}}
-
-\gdef\showcolorcomponents[#1]%
- {\begingroup
- \scratchtoks{\TB}%
- \processcommacommand[#1]\dogetcolorcomponents
- \starttabulate[|lT|lT|lT|lT|]
- \NC color \NC name \NC transparency \NC specification \NC\NR
- \the\scratchtoks
- \stoptabulate
- \endgroup}
+ \dorecurse\!!counta{\colors_compare_group_step{#1}{#2}\recurselevel}}}
+
+\def\colors_compare_group_step#1#2#3%
+ {\hbox to \hsize
+ {\setbox0\hbox
+ {#1[#2:#3]{\vrule\!!width\hsize\!!height3ex}}%
+ \wd0\zeropoint
+ \box0
+ \hbox to \hsize
+ {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}\hss}}}
+ \endgraf}
\protect \endinput
diff --git a/tex/context/base/cont-log.mkiv b/tex/context/base/cont-log.mkiv
index 0e866d665..16f94a495 100644
--- a/tex/context/base/cont-log.mkiv
+++ b/tex/context/base/cont-log.mkiv
@@ -20,25 +20,31 @@
\unprotect
-\def\Mkern#1%
- {{\setbox\scratchbox\hbox{M}\kern#1\wd\scratchbox}}
-
\unexpanded\def\TeX
- {T%
- \Mkern{-.1667}\lower.5ex\hbox{E}%
- \Mkern{-.125}X}
+ {\dontleavehmode
+ \begingroup
+ \setbox\scratchbox\hbox{M}%
+ T%
+ \kern-.1667\wd\scratchbox
+ \lower.5ex\hbox{E}%
+ \kern-.125\wd\scratchbox
+ X%
+ \endgroup}
\unexpanded\def\ConTeXt{Con\TeX t}
\unexpanded\def\PPCHTeX{ppch\TeX}
\unexpanded\def\PRAGMA {Pragma ADE}
\unexpanded\def\LaTeX % requested by erik frambach
- {{\setbox\scratchbox\hbox{L}%
- \scratchdimen\ht\scratchbox
- \setbox\scratchbox\hbox{\txx A}%
- L\kern-.55\wd\scratchbox
- \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}%
- \kern-.2\wd\scratchbox\TeX}}
+ {\dontleavehmode
+ \begingroup
+ \setbox\scratchbox\hbox{L}%
+ \scratchdimen\ht\scratchbox
+ \setbox\scratchbox\hbox{\txx A}%
+ L\kern-.55\wd\scratchbox
+ \raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}%
+ \kern-.2\wd\scratchbox\TeX
+ \endgroup}
\unexpanded\def\TaBlE
{T%
@@ -53,25 +59,27 @@
\kern-.075em C%
\kern-.11em\TeX}
-\def\AMSswitch#1%
+\def\logo_ams_script#1%
{$\cal\ifdim\bodyfontsize>1.1em\scriptstyle\fi#1$}
\unexpanded\def\AmSTeX
- {\AMSswitch A%
- \kern-.1667em\lower.5ex\hbox{\AMSswitch M}%
- \kern-.125em\AMSswitch S%
+ {\dontleavehmode
+ \logo_ams_script A%
+ \kern-.1667em\lower.5ex\hbox{\logo_ams_script M}%
+ \kern-.125em\logo_ams_script S%
-\TeX}
\unexpanded\def\LamSTeX
{L%
- \kern-.4em\raise.3ex\hbox{\AMSswitch A}%
- \kern-.25em\lower.4ex\hbox{\AMSswitch M}%
- \kern-.1em{\AMSswitch S}%
+ \kern-.4em\raise.3ex\hbox{\logo_ams_script A}%
+ \kern-.25em\lower.4ex\hbox{\logo_ams_script M}%
+ \kern-.1em{\logo_ams_script S}%
-\TeX}
\unexpanded\def\AmSLaTeX
- {\AMSswitch A%
- \kern-.1667em\lower.5ex\hbox{\AMSswitch M}%
+ {\dontleavehmode
+ \logo_ams_script A%
+ \kern-.1667em\lower.5ex\hbox{\logo_ams_script M}%
\kern-.125em\AMSswitch S%
-\LaTeX}
@@ -84,16 +92,19 @@
%D I changed this into one that adapts itself:
\unexpanded\def\Context
- {{C\kern -.0667em\getscaledglyph{.8}\empty{O\kern -.0667emN\kern
+ {\dontleavehmode
+ \begingroup
+ C\kern -.0667em\getscaledglyph{.8}\empty{O\kern -.0667emN\kern
-.0549emT\doifitalicelse{\kern-.1em}{\kern-.1667em}\lower.5ex\hbox
- {E}\doifitalicelse\empty{\kern-.11em}X\kern-.055emT}}}
+ {E}\doifitalicelse\empty{\kern-.11em}X\kern-.055emT}%
+ \endgroup}
%D The \METAFONT\ and \METAPOST\ logos adapt themselves to the
%D current fontsize, an ugly but usefull hack.
\let\logofont\nullfont
-\loadmapfile[original-base.map]
+\loadmapfile[original-base.map] % stil needed?
\unexpanded\def\setMFPfont% more sensitive for low level changes
{\font\logofont=logo%
@@ -106,14 +117,20 @@
10 at \currentfontscale\bodyfontsize % there is no afm in the minimals yet
\logofont}
-\def\MetaHyphen% there is no hyphenchar in this font
+\def\logo_meta_hyphen % there is no hyphenchar in this font
{\discretionary{\vrule\!!height.33em\!!depth-.27em\!!width.33em}{}{}}
\unexpanded\def\MetaFont
- {{\setMFPfont META\MetaHyphen FONT}}
+ {\dontleavehmode
+ \begingroup
+ \setMFPfont META\logo_meta_hyphen FONT%
+ \endgroup}
\unexpanded\def\MetaPost
- {{\setMFPfont META\MetaHyphen POST}}
+ {\dontleavehmode
+ \begingroup
+ \setMFPfont META\logo_meta_hyphen POST%
+ \endgroup}
\unexpanded\def\MetaFun
{MetaFun}
@@ -158,7 +175,7 @@
% Adapted from a patch by Mojca:
-\def\@XeTeX@
+\def\logo_xetex_e
{\setbox\scratchbox\hbox{E}%
\raise\dimexpr\ht\scratchbox+\dp\scratchbox\relax\hbox{\rotate[\c!rotation=180]{\box\scratchbox}}}
@@ -169,14 +186,14 @@
\iffontchar\font"018E\relax
\char"018E%
\else
- \ifx\fontalternative\c!bf\mirror{E}\else
- \ifx\fontalternative\c!it \@XeTeX@\else
- \ifx\fontalternative\c!sl \@XeTeX@\else
- \ifx\fontalternative\c!bi \@XeTeX@\else
- \ifx\fontalternative\c!bs \@XeTeX@\else
- \mirror{E}\fi\fi\fi\fi\fi
+ \ifx\fontalternative\c!bf \mirror{E}\else
+ \ifx\fontalternative\c!it\logo_xetex_e\else
+ \ifx\fontalternative\c!sl\logo_xetex_e\else
+ \ifx\fontalternative\c!bi\logo_xetex_e\else
+ \ifx\fontalternative\c!bs\logo_xetex_e\else
+ \mirror{E}\fi\fi\fi\fi\fi
\fi}%
- \kern-.1667em \TeX}
+ \kern-.1667em\TeX}
\let\ETEX \eTeX
\let\PDFTEX \pdfTeX
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 9b77a93bf..62231b388 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.12.23 09:52}
+\newcontextversion{2011.12.31 13:16}
%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/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index ca975ac2a..e6f938585 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2011.12.23 09:52}
+\newcontextversion{2011.12.31 13:16}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
@@ -326,8 +326,6 @@
% \the\dimexpr(\dimchoice{11pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}})
% \the\dimexpr(\dimchoice{14pt}{{<10pt}{8pt}{<12pt}{9pt}{<15pt}{10pt}{=11pt}{12pt}})
-\def\showsetupsdefinition[#1]{\showvalue{\??su:#1}} % temp hack for debugging
-
\def\tabulaterule % to be redone, not correct
{\dotabulaterule
{\hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax
@@ -434,25 +432,6 @@
\setinnerparpositions % see "techniek" for application
\to \everytabulate
-\def\fontclassname#1#2%
- {\ifcsname\??ff#1#2\endcsname
- \fontclassname{#1}{\csname\??ff#1#2\endcsname}%
- \else\ifcsname\??ff#2\endcsname
- \fontclassname{#1}{\csname\??ff#2\endcsname}%
- \else
- #2%
- \fi\fi}
-
-\def\defineclassfontsynonym
- {\dotripleargument\dodefineclassfontsynonym}
-
-\def\dodefineclassfontsynonym[#1][#2][#3]%
- {\definefontsynonym[#1][\fontclassname{#2}{#3}]}
-
-%\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}]
-%
-%\defineclassfontsynonym [KopFont] [officina] [SerifBold]
-
\def\startcolumnmakeup % don't change
{\bgroup
\getrawnoflines\textheight % teksthoogte kan topskip hebben, dus raw
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index ffed26193..481fbd3e9 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index fca899a4d..cddb71cf5 100644
--- a/tex/context/base/context-version.png
+++ b/tex/context/base/context-version.png
Binary files differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index e179ef31b..2140c36b3 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.12.23 09:52}
+\edef\contextversion{2011.12.31 13:16}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index b68913a10..b608a1a59 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -23,7 +23,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2011.12.23 09:52}
+\edef\contextversion{2011.12.31 13:16}
%D For those who want to use this:
@@ -110,6 +110,7 @@
\loadmarkfile{mult-def}
\loadmarkfile{mult-chk}
\loadmarkfile{mult-aux}
+\loadmkvifile{mult-dim}
\loadmarkfile{cldf-int} % interface
@@ -153,7 +154,7 @@
\loadmarkfile{supp-ran}
\loadmarkfile{supp-mat}
\loadmarkfile{supp-ali}
-\loadmarkfile{supp-num}
+\loadmarkfile{supp-num} % replaced
\loadmarkfile{typo-ini}
@@ -175,11 +176,11 @@
\loadmarkfile{unic-ini}
-\loadmarkfile{core-gen}
\loadmarkfile{core-uti}
\loadmarkfile{core-two}
\loadmarkfile{colo-ini}
+\loadmarkfile{colo-grp} % optional
\loadmarkfile{colo-ext}
\loadmarkfile{node-bck} % overloads anch-pgr (experimental and undocumented)
@@ -224,9 +225,9 @@
\loadmarkfile{strc-reg}
\loadmarkfile{strc-lev} % experiment
+\loadmarkfile{spac-ali}
\loadmarkfile{spac-hor}
\loadmarkfile{spac-ver}
-\loadmarkfile{spac-ali}
\loadmarkfile{spac-pag}
\loadmarkfile{spac-fnt}
\loadmarkfile{spac-par}
@@ -446,8 +447,8 @@
\loadmarkfile{back-pdf} % actually, this one should load the next three
\loadmarkfile{mlib-pdf}
\loadmarkfile{mlib-pps}
-\loadmarkfile{grph-epd}
\loadmarkfile{meta-pdf}
+\loadmarkfile{grph-epd}
\loadmarkfile{back-exp}
diff --git a/tex/context/base/core-con.mkiv b/tex/context/base/core-con.mkiv
index 6bffc3f41..8db66a5fc 100644
--- a/tex/context/base/core-con.mkiv
+++ b/tex/context/base/core-con.mkiv
@@ -208,19 +208,17 @@
%D
%D Anyhow, the conversion looks like:
-\def\doconvertmonthlong #1{\ctxcommand{month(#1)}}
-\def\doconvertmonthshort#1{\ctxcommand{monthmnem(#1)}}
+\def\monthlong #1{\ctxcommand{month(#1)}}
+\def\monthshort#1{\ctxcommand{monthmnem(#1)}}
-\let\doconvertmonth\doconvertmonthlong
+\let\convertmonth\monthlong % for old times sake
%D We redefine the \TEX\ primitive \type{\month} as:
%D
%D \showsetup{month}
%D \showsetup{MONTH}
-\let\monthlong \doconvertmonthlong % was \def
-\let\monthshort\doconvertmonthshort % was \def
-\let\month \doconvertmonth % was \def
+\let\month \monthlong
\def\MONTH #1{\WORD{\month {#1}}}
\def\MONTHLONG #1{\WORD{\monthlong {#1}}}
@@ -237,23 +235,26 @@
%D \item exept years that can be divided by 100
%D \item unless years can be divided by 400
%D \stopitemize
+
+%D \macros
+%D {weekday,WEEKDAY}
%D
-%D This makes the year 1900 into a normal year and 1996 and
-%D 2000 into leap years, right? Well, converting to string
-%D looks familiar:
+%D The first one is sort of redundant. It takes the day
+%D number argument.
+%D
+%D \showsetup{weekday}
+%D \showsetup{WEEKDAY}
-\def\doconvertday#1{\ctxcommand{day(#1)}}
+\def\weekday#1{\ctxcommand{day(#1)}}
+\def\WEEKDAY#1{\WORD{\weekday{#1}}}
%D \macros
%D {getdayoftheweek, dayoftheweek}
\newcount\normalweekday
-% \def\getdayoftheweek#1#2#3{\normalweekday\ctxcommand{weekday(\number#1,\number#2,\number#3)}}
-% \def\dayoftheweek #1#2#3{\doconvertday{\ctxcommand{weekday(\number#1,\number#2,\number#3)}}}
-
-\def\getdayoftheweek#1#2#3{\normalweekday\ctxcommand{weekday(\number#1,\number#2,\number#3)}\relax} % number
-\def\dayoftheweek #1#2#3{\ctxcommand{weekdayname(\number#1,\number#2,\number#3)}} % name
+ \def\dayoftheweek #1#2#3{\ctxcommand{weekdayname(\number#1,\number#2,\number#3)}} % name
+\unexpanded\def\getdayoftheweek#1#2#3{\normalweekday\ctxcommand{weekday(\number#1,\number#2,\number#3)}\relax} % number
%D Using this macro in
%D
@@ -280,31 +281,6 @@
%D the number \type {\normalweekday}.
%D \macros
-%D {weekday,WEEKDAY}
-%D
-%D The first one is sort of redundant. It takes the day
-%D number argument.
-%D
-%D \showsetup{weekday}
-%D \showsetup{WEEKDAY}
-
-\def\weekday
- {\doconvertday}
-
-\def\WEEKDAY#1%
- {\WORD{\doconvertday{#1}}}
-
-%D \macros
-%D {weekoftheday}
-%D
-%D {\em not yet implemented:}
-%D
-%D \starttyping
-%D \def\weekoftheday#1#2#3%
-%D {}
-%D \stoptyping
-
-%D \macros
%D {doifleapyearelse,
%D getdayspermonth}
%D
@@ -327,7 +303,7 @@
\def\doifleapyearelse#1%
{\ctxcommand{doifleapyearelse(\number#1)}}
-\def\getdayspermonth#1#2%
+\unexpanded\def\getdayspermonth#1#2%
{\edef\numberofdays{\ctxcommand{nofdays(\number#1,\number#2)}}}
\def\dayspermonth#1#2%
@@ -439,9 +415,9 @@
\newtoks \everycurrentdate
\unexpanded\def\currentdate
- {\dosingleempty\docurrentdate}
+ {\dosingleempty\system_current_date}
-\def\docurrentdate[#1]%
+\def\system_current_date[#1]%
{\begingroup
\the\everycurrentdate
\doifsomething{#1}{\edef\currentdatespecification{#1}}%
@@ -449,9 +425,9 @@
\endgroup}
\unexpanded\def\date
- {\dodoubleempty\dodate}
+ {\dodoubleempty\system_date}
-\def\dodate[#1][#2]%
+\def\system_date[#1][#2]%
{\begingroup
\iffirstargument
\getparameters[\??da][d=\normalday,m=\normalmonth,y=\normalyear,#1]%
@@ -459,7 +435,7 @@
\normalmonth\@@dam\relax
\normalyear \@@day\relax
\fi
- \docurrentdate[#2]%
+ \system_current_date[#2]%
\endgroup}
\def\rawdate[#1]% expandable and no labels
@@ -479,17 +455,21 @@
\let\currenthour \!!plusone
\let\currentminute\!!plusone
+\let\currentsecond\!!plusone
\def\currenttimespecification{h,:,m}
-\def\complexcurrenttime[#1]%
+\unexpanded\def\currenttime
+ {\doifnextoptionalelse\system_current_time_yes\system_current_time_nop}
+
+
+\unexpanded\def\system_current_time_yes[#1]%
{\calculatecurrenttime
\processallactionsinset[#1][h=>\currenthour,m=>\currentminute,\s!unknown=>\commalistelement]}
-\def\simplecurrenttime
- {\expanded{\complexcurrenttime[\currenttimespecification]}}
+\unexpanded\def\system_current_time_nop
+ {\normalexpanded{\system_current_time_yes[\currenttimespecification]}}
-\definecomplexorsimple\currenttime
%D Because we're dealing with dates, we also introduce a few
%D day loops:
@@ -502,10 +482,10 @@
%D The counters \type {\normalyear}, \type {\normalmonth} and
%D \type{\normalday} can be used for for date manipulations.
-\def\processmonth#1#2#3% year month command
+\unexpanded\def\processmonth#1#2#3% year month command
{\begingroup
\getdayspermonth{#1}{#2}%
- \dostepwiserecurse1\numberofdays1%
+ \dostepwiserecurse\plusone\numberofdays\plusone
{\normalyear #1\relax
\normalmonth#2\relax
\normalday \recurselevel\relax
@@ -514,7 +494,7 @@
\def\lastmonth{12} % can be set to e.g. 1 when testing
-\def\processyear#1#2#3#4% year command before after
+\unexpanded\def\processyear#1#2#3#4% year command before after
{\begingroup
\dorecurse\lastmonth
{\normalyear #1\relax
@@ -546,62 +526,69 @@
%D \defineconversion [en] [whatever] [\something]
%D \stoptyping
+\installcorenamespace {conversion}
+\installcorenamespace {conversionarguments}
+\installcorenamespace {conversionwords}
+
\unexpanded\def\defineconversion
- {\dotripleempty\dodefineconversion}
+ {\dotripleempty\system_define_conversion}
-\def\dodefineconversion[#1][#2][#3]% from now on global (maybe local again some day)
+\def\system_define_conversion[#1][#2][#3]% from now on global (maybe local again some day)
{\ifthirdargument
- \dododefineconversion{#1#2}{#1:#2}{#3}%
+ \system_define_conversion_indeed{#1#2}{#1:#2}{#3}%
\else
- \dododefineconversion{#1}{#1}{#2}%
+ \system_define_conversion_indeed{#1}{#1}{#2}%
\fi}
-\def\dododefineconversion#1#2#3%
+\def\system_define_conversion_indeed#1#2#3%
{\doifinstringelse{,}{\detokenize{#3}}
{\ctxcommand{defineconversion("#2",\!!bs\detokenize{#3}\!!es)}%
- \setgvalue{\??cv#1}{\checkedconversion{#2}}}
- {\setgvalue{\??cv#1}{#3}}}
+ \setgvalue{\??conversion#1}{\system_checked_conversion{#2}}}
+ {\setgvalue{\??conversion#1}{#3}}}
-\def\checkedconversion#1#2%
+\def\system_checked_conversion#1#2%
{\ctxcommand{checkedconversion("#1",#2)}}
%D If a conversion is just a font switch then we need to make sure
%D that the number is indeed end up as number in the input, so we
%D need to handle the second argument.
-\def\convertnumber#1#2%
- {\csname
- \??cv=>% we want a fully expandable (no if interference)
- \ifcsname\??cv\currentlanguage#1\endcsname1\else
- \ifcsname\??cv #1\endcsname2\else
- 3\fi\fi
+\def\convertnumber#1#2% expandable
+ {\csname\??conversionarguments
+ \ifcsname\??conversion\currentlanguage#1\endcsname1\else
+ \ifcsname\??conversion #1\endcsname2\else
+ 3\fi\fi
\endcsname{#1}{\number#2}}
-\setvalue{\??cv=>1}#1{\csname\??cv\currentlanguage#1\endcsname}
-\setvalue{\??cv=>2}#1{\csname\??cv #1\endcsname}
-\letvalue{\??cv=>3}\checkedconversion
+\setvalue{\??conversionarguments1}#1{\csname\??conversion\currentlanguage#1\endcsname}
+\setvalue{\??conversionarguments2}#1{\csname\??conversion #1\endcsname}
+\letvalue{\??conversionarguments3}\system_checked_conversion
\def\doifconversiondefinedelse#1%
- {\ifcsname\??cv\currentlanguage#1\endcsname
+ {\ifcsname\??conversion\currentlanguage#1\endcsname
\expandafter\firstoftwoarguments
- \else\ifcsname\??cv#1\endcsname
+ \else\ifcsname\??conversion#1\endcsname
\doubleexpandafter\firstoftwoarguments
\else
\doubleexpandafter\secondoftwoarguments
\fi\fi}
-\def\doifelseconversionnumber#1#2% slow but seldom used
- {\doifdefinedelse{\??cv#1#2}}
+\def\doifelseconversionnumber#1#2%
+ {\ifcsname\??conversion#1#2\endcsname
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
%D Handy.
-\setvalue{\??cv:\c!n:\v!one }{1}
-\setvalue{\??cv:\c!n:\v!two }{2}
-\setvalue{\??cv:\c!n:\v!three}{3}
-\setvalue{\??cv:\c!n:\v!four }{4}
-\setvalue{\??cv:\c!n:\v!five }{5}
+\setvalue{\??conversionwords\v!one }{1}
+\setvalue{\??conversionwords\v!two }{2}
+\setvalue{\??conversionwords\v!three}{3}
+\setvalue{\??conversionwords\v!four }{4}
+\setvalue{\??conversionwords\v!five }{5}
-\def\wordtonumber#1#2{\ifcsname\??cv:\c!n:#1\endcsname\csname\??cv:\c!n:#1\endcsname\else#2\fi}
+\def\wordtonumber#1#2{\ifcsname\??conversionwords#1\endcsname\csname\??conversionwords#1\endcsname\else#2\fi}
% \defineconversion[ctx][c,o,n,t,e,x,t]
%
@@ -632,8 +619,8 @@
\defineconversion [\v!none] [\numbers]
\defineconversion [\s!default] [\numbers]
-\defineconversion [month] [\doconvertmonthlong]
-\defineconversion [month:mnem] [\doconvertmonthshort]
+\defineconversion [month] [\monthlong]
+\defineconversion [month:mnem] [\monthshort]
\defineconversion [\v!character] [\character]
\defineconversion [\v!Character] [\Character]
@@ -690,7 +677,6 @@
\defineconversion [persiannumerals] [\persiannumerals]
\defineconversion [arabicexnumerals] [\arabicexnumerals]
-
\defineconversion [koreannumerals] [\koreannumerals]
\defineconversion [koreanparentnumerals] [\koreanparentnumerals]
\defineconversion [koreancirclenumerals] [\koreancirclenumerals]
@@ -709,7 +695,7 @@
%D Symbol sets:
-\ifx\symbol\undefined \def\symbol[#1]{#1} \fi % todo
+\ifdefined\symbol \else \def\symbol[#1]{#1} \fi % todo
\defineconversion
[set 0]
diff --git a/tex/context/base/core-ctx.mkiv b/tex/context/base/core-ctx.mkiv
index 0595d0897..e178ee21b 100644
--- a/tex/context/base/core-ctx.mkiv
+++ b/tex/context/base/core-ctx.mkiv
@@ -19,10 +19,12 @@
\registerctxluafile{core-ctx}{1.000}
-\def\loadctxpreplist{\ctxcommand{loadctxpreplist()}\global\let\loadctxpreplist\relax}
+\def\loadctxpreplist
+ {\ctxcommand{loadctxpreplist()}%
+ \glet\loadctxpreplist\relax}
-% \prependtoks\loadctxpreplist\to\everyjob
-
-\appendtoks\loadctxpreplist\to\everystarttext % maybe too late but don't change it now
+\appendtoks
+ \loadctxpreplist
+\to \everystarttext % maybe too late but don't change it now
\protect \endinput
diff --git a/tex/context/base/core-env.mkiv b/tex/context/base/core-env.mkiv
index e81f1e6b3..d2113539a 100644
--- a/tex/context/base/core-env.mkiv
+++ b/tex/context/base/core-env.mkiv
@@ -40,11 +40,12 @@
%D level style does not want that. Preventing can be
%D considered a permanent disabling on forehand.
-\def\@mode@{@md@}
-\def\@mode@{mode}
-
\def\systemmodeprefix{*}
+% we will have \installcorenamespace{mode} but need some hackery at the lua end then
+
+\installcorenamespace{modestack}
+
% todo: check prevent mode, also at the lua end
\setnewconstant\disabledmode \zerocount
@@ -53,42 +54,42 @@
% fast internal ones
-\def\donewmode#1%
- {\@EA\newcount\csname\@mode@#1\endcsname}
+\def\system_modes_new#1%
+ {\expandafter\newcount\csname\s!mode#1\endcsname}
-\def\newmode#1%
- {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi}
+\unexpanded\def\newmode#1%
+ {\ifcsname\s!mode#1\endcsname\else\system_modes_new{#1}\fi}
-\def\setmode#1%
- {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi
- \csname\@mode@#1\endcsname\enabledmode}
+\unexpanded\def\setmode#1%
+ {\ifcsname\s!mode#1\endcsname\else\system_modes_new{#1}\fi
+ \csname\s!mode#1\endcsname\enabledmode}
-\def\resetmode#1%
- {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi
- \csname\@mode@#1\endcsname\disabledmode}
+\unexpanded\def\resetmode#1%
+ {\ifcsname\s!mode#1\endcsname\else\system_modes_new{#1}\fi
+ \csname\s!mode#1\endcsname\disabledmode}
-\def\newsystemmode#1%
- {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi}
+\unexpanded\def\newsystemmode#1%
+ {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\system_modes_new{\systemmodeprefix#1}\fi}
-\def\setsystemmode#1%
- {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi
- \csname\@mode@\systemmodeprefix#1\endcsname\enabledmode}
+\unexpanded\def\setsystemmode#1%
+ {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\system_modes_new{\systemmodeprefix#1}\fi
+ \csname\s!mode\systemmodeprefix#1\endcsname\enabledmode}
-\def\resetsystemmode#1%
- {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi
- \csname\@mode@\systemmodeprefix#1\endcsname\disabledmode}
+\unexpanded\def\resetsystemmode#1%
+ {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\system_modes_new{\systemmodeprefix#1}\fi
+ \csname\s!mode\systemmodeprefix#1\endcsname\disabledmode}
% \def\dosetsystemmode#1%
-% {\csname\@mode@\systemmodeprefix#1\endcsname\enabledmode}
+% {\csname\s!mode\systemmodeprefix#1\endcsname\enabledmode}
%
% \def\doresetsystemmode#1%
-% {\csname\@mode@\systemmodeprefix#1\endcsname\disabledmode}
+% {\csname\s!mode\systemmodeprefix#1\endcsname\disabledmode}
% demo: trialtypesetting is a systemmode as well as an if
-\newsystemmode{trialtypesetting}
+\newsystemmode{trialtypesetting} % the name of \@@trialtypesetting might change (also at the lua end)
-\expandafter\let\expandafter\@@trialtypesetting\csname\@mode@\systemmodeprefix trialtypesetting\endcsname % private !
+\expandafter\let\expandafter\@@trialtypesetting\csname\s!mode\systemmodeprefix trialtypesetting\endcsname % private !
\appendtoks
\@@trialtypesetting\enabledmode
@@ -100,133 +101,122 @@
% user ones
-\unexpanded\def\preventmode{\unprotect\dopreventmode}
-\unexpanded\def\enablemode {\unprotect\doenablemode }
-\unexpanded\def\disablemode{\unprotect\dodisablemode}
+\unexpanded\def\preventmode{\unprotect\system_modes_prevent}
+\unexpanded\def\enablemode {\unprotect\system_modes_enable }
+\unexpanded\def\disablemode{\unprotect\system_modes_disable}
\let\definemode\disablemode % nicer
-\def\dopreventmode[#1]{\protect\rawprocesscommacommand[#1]\dodopreventmode}
-\def\doenablemode [#1]{\protect\rawprocesscommacommand[#1]\dodoenablemode }
-\def\dodisablemode[#1]{\protect\rawprocesscommacommand[#1]\dododisablemode}
+\def\system_modes_prevent[#1]{\protect\rawprocesscommacommand[#1]\system_modes_prevent_indeed}
+\def\system_modes_enable [#1]{\protect\rawprocesscommacommand[#1]\system_modes_enable_indeed }
+\def\system_modes_disable[#1]{\protect\rawprocesscommacommand[#1]\system_modes_disable_indeed}
-\def\dodopreventmode#1%
- {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi
- \csname\@mode@#1\endcsname\preventedmode}
+\def\system_modes_prevent_indeed#1%
+ {\ifcsname\s!mode#1\endcsname\else\system_modes_new{#1}\fi
+ \csname\s!mode#1\endcsname\preventedmode}
-\def\dodoenablemode#1% we can speed it up by moving the new outside
- {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi
- \ifnum\csname\@mode@#1\endcsname=\preventedmode \else
- \csname\@mode@#1\endcsname\enabledmode
+\def\system_modes_enable_indeed#1% we can speed it up by moving the new outside
+ {\ifcsname\s!mode#1\endcsname\else\system_modes_new{#1}\fi
+ \ifnum\csname\s!mode#1\endcsname=\preventedmode \else
+ \csname\s!mode#1\endcsname\enabledmode
\fi}
-\def\dododisablemode#1%
- {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi
- \ifnum\csname\@mode@#1\endcsname=\preventedmode \else
- \csname\@mode@#1\endcsname\disabledmode
+\def\system_modes_disable_indeed#1%
+ {\ifcsname\s!mode#1\endcsname\else\system_modes_new{#1}\fi
+ \ifnum\csname\s!mode#1\endcsname=\preventedmode \else
+ \csname\s!mode#1\endcsname\disabledmode
\fi}
% handy for mp
\def\booleanmodevalue#1%
- {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname fals\else tru\fi\else fals\fi e}
+ {\ifcsname\s!mode#1\endcsname\ifcase\csname\s!mode#1\endcsname\s!false\else\s!true\fi\else\s!false\fi}
% check macros
-\newif\ifcheckedmode
-
-\def\dodocheckformode#1%
- {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname\else\checkedmodetrue\fi\fi}
-
-\def\docheckformode#1#2#3% will be sped up with a quit
- {\protect\checkedmodefalse\rawprocesscommacommand[#3]\dodocheckformode
- \ifcheckedmode\@EA#1\else\@EA#2\fi}
-
-\def\dodocheckforallmodes#1%
- {\ifcsname\@mode@#1\endcsname\ifcase\csname\@mode@#1\endcsname\checkedmodefalse\fi\else\checkedmodefalse\fi}
-
-\def\docheckforallmodes#1#2#3% will be sped up with a quit
- {\protect\checkedmodetrue\rawprocesscommacommand[#3]\dodocheckforallmodes
- \ifcheckedmode\@EA#1\else\@EA#2\fi}
-
-% simple ones
-
-\unexpanded\def\doifmodeelse{\unprotect\dodoifmodeelse}
-\unexpanded\def\doifmode {\unprotect\dodoifmode}
-\unexpanded\def\doifnotmode {\unprotect\dodoifnotmode}
-\unexpanded\def\startmode {\unprotect\dostartmode}
-\unexpanded\def\startnotmode{\unprotect\dostartnotmode}
-
-\def\dodoifmodeelse
- {\docheckformode\firstoftwoarguments\secondoftwoarguments}
-
-\def\dodoifmode
- {\docheckformode\firstofoneargument\gobbleoneargument}
+% For some reason the older version had an unprotect for grabbing the
+% mode list (only) which does not really make sense any more so that
+% has been removed. One should (un)protect at the outer level instead.
-\def\dodoifnotmode
- {\docheckformode\gobbleoneargument\firstofoneargument}
+\newconditional\c_checked_mode
-\unexpanded\def\dostartmode[#1]%
- {\docheckformode\donothing\dostopmode{#1}}
-
-\def\dostartnotmode[#1]%
- {\docheckformode\dostopnotmode\donothing{#1}}
-
-\unexpanded\def\stopmode {} % no relax
-\unexpanded\def\stopnotmode{} % no relax
-
-\def\dostopmode #1\stopmode {}
-\def\dostopnotmode#1\stopnotmode{}
-
-\unexpanded\def\doifallmodeselse{\unprotect\dodoifallmodeselse}
-\unexpanded\def\doifallmodes {\unprotect\dodoifallmodes}
-\unexpanded\def\doifnotallmodes {\unprotect\dodoifnotallmodes}
-\unexpanded\def\startallmodes {\unprotect\dostartallmodes}
-\unexpanded\def\startnotallmodes{\unprotect\dostartnotallmodes}
-
-\def\dodoifallmodeselse
- {\docheckforallmodes\firstoftwoarguments\secondoftwoarguments}
-
-\def\dodoifallmodes
- {\docheckforallmodes\firstofoneargument\gobbleoneargument}
-
-\def\dodoifnotallmodes
- {\docheckforallmodes\gobbleoneargument\firstofoneargument}
+\def\system_modes_check_indeed#1%
+ {\ifcsname\s!mode#1\endcsname
+ \ifcase\csname\s!mode#1\endcsname\else
+ \let\system_modes_check_step\gobbleoneargument
+ \fi
+ \fi}
-\def\dostartallmodes[#1]%
- {\docheckforallmodes\donothing\dostopallmodes{#1}}
+\def\system_modes_check#1#2#3%
+ {\let\system_modes_check_step\system_modes_check_indeed
+ \rawprocesscommacommand[#3]\system_modes_check_step
+ \ifx\system_modes_check_step\gobbleoneargument
+ \expandafter#1%
+ \else
+ \expandafter#2%
+ \fi}
-\def\dostartnotallmodes[#1]%
- {\docheckforallmodes\dostopnotallmodes\donothing{#1}}
+\def\system_modes_check_all_indeed#1%
+ {\ifcsname\s!mode#1\endcsname
+ \ifcase\csname\s!mode#1\endcsname
+ \let\system_modes_check_all_step\gobbleoneargument
+ \fi
+ \else
+ \let\system_modes_check_all_step\gobbleoneargument
+ \fi}
-\unexpanded\def\stopallmodes {} % no relax
-\unexpanded\def\stopnotallmodes{} % no relax
+\def\system_modes_check_all#1#2#3%
+ {\let\system_modes_check_all_step\system_modes_check_all_indeed
+ \rawprocesscommacommand[#3]\system_modes_check_all_step
+ \ifx\system_modes_check_all_step\gobbleoneargument
+ \expandafter#2
+ \else
+ \expandafter#1
+ \fi}
-\def\dostopallmodes #1\stopallmodes {}
-\def\dostopnotallmodes#1\stopnotallmodes{}
+\unexpanded\def\doifmodeelse {\system_modes_check\firstoftwoarguments\secondoftwoarguments}
+\unexpanded\def\doifmode {\system_modes_check\firstofoneargument\gobbleoneargument}
+\unexpanded\def\doifnotmode {\system_modes_check\gobbleoneargument\firstofoneargument}
+\unexpanded\def\startmode [#1]{\system_modes_check\donothing\system_modes_stop_yes{#1}}
+\unexpanded\def\startnotmode [#1]{\system_modes_check\system_modes_stop_nop\donothing{#1}}
+\unexpanded\def\doifallmodeselse {\system_modes_check_all\firstoftwoarguments\secondoftwoarguments}
+\unexpanded\def\doifallmodes {\system_modes_check_all\firstofoneargument\gobbleoneargument}
+\unexpanded\def\doifnotallmodes {\system_modes_check_all\gobbleoneargument\firstofoneargument}
+\unexpanded\def\startallmodes [#1]{\system_modes_check_all\donothing\system_modes_stop_all_yes{#1}}
+\unexpanded\def\startnotallmodes[#1]{\system_modes_check_all\system_modes_stop_all_nop\donothing{#1}}
+
+\unexpanded\def\stopmode {} % no relax
+\unexpanded\def\stopnotmode {} % no relax
+\unexpanded\def\stopallmodes {} % no relax
+\unexpanded\def\stopnotallmodes {} % no relax
+
+\def\system_modes_stop_yes #1\stopmode {}
+\def\system_modes_stop_nop #1\stopnotmode {}
+\def\system_modes_stop_all_yes#1\stopallmodes {}
+\def\system_modes_stop_all_nop#1\stopnotallmodes{}
%D Pushing/popping:
\unexpanded\def\pushmode[#1]%
- {\ifcsname\@mode@#1\endcsname\else\donewmode{#1}\fi
- \expandafter\edef\csname\@mode@:#1\endcsname{\number\csname\@mode@#1\endcsname}%
- \expandafter\pushmacro\csname\@mode@:#1\endcsname}
+ {\ifcsname\s!mode#1\endcsname\else\system_modes_new{#1}\fi
+ \expandafter\edef\csname\??modestack#1\endcsname{\number\csname\s!mode#1\endcsname}%
+ \expandafter\pushmacro\csname\??modestack#1\endcsname}
\unexpanded\def\popmode[#1]%
- {\ifcsname\@mode@:#1\endcsname
- \expandafter\popmacro\csname\@mode@:#1\endcsname
- \csname\@mode@#1\endcsname\csname\@mode@:#1\endcsname\relax
+ {\ifcsname\??modestack#1\endcsname
+ \expandafter\popmacro\csname\??modestack#1\endcsname
+ \csname\s!mode#1\endcsname\csname\??modestack#1\endcsname\relax
\fi}
\def\pushsystemmode#1%
- {\ifcsname\@mode@\systemmodeprefix#1\endcsname\else\donewmode{\systemmodeprefix#1}\fi
- \expandafter\edef\csname\@mode@:\systemmodeprefix#1\endcsname{\number\csname\@mode@\systemmodeprefix#1\endcsname}%
- \expandafter\pushmacro\csname\@mode@:\systemmodeprefix#1\endcsname}
+ {\ifcsname\s!mode\systemmodeprefix#1\endcsname\else\system_modes_new{\systemmodeprefix#1}\fi
+ \expandafter\edef\csname\??modestack\systemmodeprefix#1\endcsname{\number\csname\s!mode\systemmodeprefix#1\endcsname}%
+ \expandafter\pushmacro\csname\??modestack\systemmodeprefix#1\endcsname}
\def\popsystemmode#1%
- {\ifcsname\@mode@:\systemmodeprefix#1\endcsname
- \expandafter\popmacro\csname\@mode@:\systemmodeprefix#1\endcsname
- \csname\@mode@\systemmodeprefix#1\endcsname\csname\@mode@:\systemmodeprefix#1\endcsname\relax
+ {\ifcsname\??modestack\systemmodeprefix#1\endcsname
+ \expandafter\popmacro\csname\??modestack\systemmodeprefix#1\endcsname
+ \csname\s!mode\systemmodeprefix#1\endcsname\csname\??modestack\systemmodeprefix#1\endcsname\relax
\fi}
%D Lets now set a mode:
@@ -235,38 +225,40 @@
%D Setups:
+\installcorenamespace{setup} % we can probably get rid of some :'s later on
+
\unexpanded\def\startsetups{} % to please dep checker
\unexpanded\def\stopsetups {} % to please dep checker
\expanded % will become obsolete
- {\def\@EA\noexpand\csname\e!start\v!setups\endcsname
+ {\def\expandafter\noexpand\csname\e!start\v!setups\endcsname
{\begingroup\noexpand\doifnextoptionalelse
- {\noexpand\dostartsetupsA\@EA\noexpand\csname\e!stop\v!setups\endcsname}
- {\noexpand\dostartsetupsB\@EA\noexpand\csname\e!stop\v!setups\endcsname}}}
+ {\noexpand\dostartsetupsA\expandafter\noexpand\csname\e!stop\v!setups\endcsname}
+ {\noexpand\dostartsetupsB\expandafter\noexpand\csname\e!stop\v!setups\endcsname}}}
\letvalue{\e!stop\v!setups}\relax
-\unexpanded\def\setups{\doifnextbgroupelse\dosetupsA\dosetupsB} % {..} or [..]
-\unexpanded\def\setup {\doifnextbgroupelse\dosetups \dosetupsC} % {..} or [..]
+\unexpanded\def\setups{\doifnextbgroupelse\system_setups_a\system_setups_b} % {..} or [..]
+\unexpanded\def\setup {\doifnextbgroupelse\system_setups \system_setups_c} % {..} or [..]
-\def\dosetupsA #1{\processcommacommand[#1]\dosetups} % {..}
-\def\dosetupsB[#1]{\processcommacommand[#1]\dosetups} % [..]
-\def\dosetupsC[#1]{\dosetups{#1}} % [..]
+\def\system_setups_a #1{\processcommacommand[#1]\system_setups} % {..}
+\def\system_setups_b[#1]{\processcommacommand[#1]\system_setups} % [..]
+\def\system_setups_c[#1]{\system_setups{#1}} % [..]
-\letvalue{\??su:\letterpercent}\gobbleoneargument
+\letvalue{\??setup:\letterpercent}\gobbleoneargument
-\def\dosetups#1% the grid option will be extended to other main modes
- {\csname\??su
+\def\system_setups#1% the grid option will be extended to other main modes
+ {\csname\??setup
\ifgridsnapping
- \ifcsname\??su\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??su:#1\endcsname:#1\else:\letterpercent\fi\fi
+ \ifcsname\??setup\v!grid:#1\endcsname\v!grid:#1\else\ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi\fi
\else
- \ifcsname\??su:#1\endcsname:#1\else:\letterpercent\fi
+ \ifcsname\??setup:#1\endcsname:#1\else:\letterpercent\fi
\fi
\endcsname\empty} % takes one argument
% We can consider:
%
-% \setvalue{\??su->\v!auto}#1{\ctxcommand{autosetup("#1")}}
+% \setvalue{\??setup->\v!auto}#1{\ctxcommand{autosetup("#1")}}
%
% ":\letterpercent" => "->\v!auto" with "\endcsname{#1}"
%
@@ -283,7 +275,7 @@
\fi}
% \def\dodoprocesslocalsetups
-% {\@EA\processcommalist\@EA[\tobeprocessedsetups]\dosetups}
+% {\expandafter\processcommalist\expandafter[\tobeprocessedsetups]\system_setups}
% setups=S1
% setups=lua(S2)
@@ -297,13 +289,17 @@
{\ctxcommand{autosetups("#1")}}
\edef\setupwithargument#1% saves a few expansions
- {\noexpand\csname\??su:\noexpand\ifcsname\??su:#1\endcsname#1\noexpand\else\letterpercent\noexpand\fi\endcsname}
+ {\noexpand\csname\??setup:\noexpand\ifcsname\??setup:#1\endcsname#1\noexpand\else\letterpercent\noexpand\fi\endcsname}
-\let\directsetup\dosetups
-\let\texsetup \dosetups % nicer than \directsetup and more en par with xmlsetup and luasetup
+\let\directsetup\system_setups
+\let\texsetup \system_setups % nicer than \directsetup and more en par with xmlsetup and luasetup
\def\doifsetupselse#1% to be done: grid
- {\doifdefinedelse{\??su:#1}} % doto: ifcsname
+ {\ifcsname\??setup:#1\endcsname
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
% \startluasetups oeps
% context("DONE")
@@ -337,33 +333,35 @@
%
% \ctxluabuffer
-\newtoks\everydefinesetups \appendtoks
+\newtoks\t_system_setups_tex \appendtoks
\catcode\endoflineasciicode \ignorecatcode
-\to \everydefinesetups
+\to \t_system_setups_tex
-\newtoks\everydefinelocalsetups \appendtoks
+\newtoks\t_system_setups_loc \appendtoks
\catcode\endoflineasciicode \ignorecatcode
-\to \everydefinelocalsetups
+\to \t_system_setups_loc
-\newtoks\everydefinerawsetups \appendtoks
+\newtoks\t_system_setups_raw \appendtoks
% nothing
-\to \everydefinerawsetups
+\to \t_system_setups_raw
-\newtoks\everydefinexmlsetups \appendtoks
+\newtoks\t_system_setups_xml \appendtoks
\catcode\endoflineasciicode\ignorecatcode
\catcode\barasciicode \othercatcode
-\to \everydefinexmlsetups
+\to \t_system_setups_xml
-\newtoks\everydefineluasetups \appendtoks
+\newtoks\t_system_setups_lua \appendtoks
\obeylualines
\obeyluatokens
-\to \everydefineluasetups
+\to \t_system_setups_lua
-\unexpanded\def\startluasetups {\begingroup\doifnextoptionalelse\dostartluasetupsA \dostartluasetupsB }
-\unexpanded\def\startxmlsetups {\begingroup\doifnextoptionalelse\dostartxmlsetupsA \dostartxmlsetupsB }
-\unexpanded\def\startrawsetups {\begingroup\doifnextoptionalelse\dostartrawsetupsA \dostartrawsetupsB }
-\unexpanded\def\startlocalsetups{\begingroup\doifnextoptionalelse\dostartlocalsetupsA\dostartlocalsetupsB}
-\unexpanded\def\startsetups {\begingroup\doifnextoptionalelse\dostartsetupsA \dostartsetupsB }
+% Is doglobal still relevant? Maybe always global? Or never? Anyway, it will become obsolete.
+
+\unexpanded\def\startluasetups {\begingroup\doifnextoptionalelse\system_setups_start_lua_a\system_setups_start_lua_b}
+\unexpanded\def\startxmlsetups {\begingroup\doifnextoptionalelse\system_setups_start_xml_a\system_setups_start_xml_b}
+\unexpanded\def\startrawsetups {\begingroup\doifnextoptionalelse\system_setups_start_raw_a\system_setups_start_raw_b}
+\unexpanded\def\startlocalsetups{\begingroup\doifnextoptionalelse\system_setups_start_loc_a\system_setups_start_loc_b}
+\unexpanded\def\startsetups {\begingroup\doifnextoptionalelse\system_setups_start_tex_a\system_setups_start_tex_b}
\let\stopluasetups \relax
\let\stopxmlsetups \relax
@@ -371,59 +369,62 @@
\let\stoplocalsetups \relax
\let\stopsetups \relax
-\def\dodostartluasetups #1#2#3\stopluasetups {\endgroup\dodoglobal\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}}
-\def\dodostartxmlsetups #1#2#3\stopxmlsetups {\endgroup\dodoglobal\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}}
-\def\dodostartrawsetups #1#2#3\stoprawsetups {\endgroup\dodoglobal\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}}
-\def\dodostartlocalsetups #1#2#3\stoplocalsetups{\endgroup\dodoglobal\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}}
-\def\dodostartsetups #1#2#3\stopsetups {\endgroup\dodoglobal\@EA\def\csname\??su#1:#2\@EA\endcsname\@EA##\@EA1\@EA{#3}}
-
-\def\dostartluasetups {\ifsecondargument\@EA\dostartluasetupsC \else\@EA\dostartluasetupsD \fi}
-\def\dostartxmlsetups {\ifsecondargument\@EA\dostartxmlsetupsC \else\@EA\dostartxmlsetupsD \fi}
-\def\dostartrawsetups {\ifsecondargument\@EA\dostartrawsetupsC \else\@EA\dostartrawsetupsD \fi}
-\def\dostartlocalsetups {\ifsecondargument\@EA\dostartlocalsetupsC\else\@EA\dostartlocalsetupsD\fi}
-\def\dostartsetups {\ifsecondargument\@EA\dostartsetupsC \else\@EA\dostartsetupsD \fi}
-
-\def\dostartluasetupsA {\the\everydefineluasetups \dodoubleempty\dostartluasetups} % [ ] delimited
-\def\dostartxmlsetupsA {\the\everydefinexmlsetups \dodoubleempty\dostartxmlsetups} % [ ] delimited
-\def\dostartrawsetupsA {\the\everydefinerawsetups \dodoubleempty\dostartrawsetups} % [ ] delimited
-\def\dostartlocalsetupsA {\the\everydefinelocalsetups\dodoubleempty\dostartlocalsetups} % [ ] delimited
-\def\dostartsetupsA {\the\everydefinesetups \dodoubleempty\dostartsetups} % [ ] delimited
-
-% empty preserves inner {} (is removed by the \@EA{#3})
-
-\def\dostartluasetupsB #1 {\the\everydefineluasetups \dodostartluasetups \empty{#1}\empty} % space delimited
-\def\dostartxmlsetupsB #1 {\the\everydefinexmlsetups \dodostartxmlsetups \empty{#1}\empty} % space delimited
-\def\dostartrawsetupsB #1 {\the\everydefinerawsetups \dodostartrawsetups \empty{#1}\empty} % space delimited
-\def\dostartlocalsetupsB #1 {\the\everydefinelocalsetups\dodostartlocalsetups\empty{#1}\empty} % space delimited
-\def\dostartsetupsB #1 {\the\everydefinesetups \dodostartsetups \empty{#1}\empty} % space delimited
-
-\def\dostartluasetupsC [#1][#2]{\the\everydefineluasetups \dodostartluasetups {#1}{#2}\empty} % [..] [..]
-\def\dostartxmlsetupsC [#1][#2]{\the\everydefinexmlsetups \dodostartxmlsetups {#1}{#2}\empty} % [..] [..]
-\def\dostartrawsetupsC [#1][#2]{\the\everydefinerawsetups \dodostartrawsetups {#1}{#2}\empty} % [..] [..]
-\def\dostartlocalsetupsC[#1][#2]{\the\everydefinelocalsetups\dodostartlocalsetups{#1}{#2}\empty} % [..] [..]
-\def\dostartsetupsC [#1][#2]{\the\everydefinesetups \dodostartsetups {#1}{#2}\empty} % [..] [..]
-
-\def\dostartluasetupsD [#1][#2]{\the\everydefineluasetups \dodostartluasetups \empty{#1}\empty} % [..]
-\def\dostartxmlsetupsD [#1][#2]{\the\everydefinexmlsetups \dodostartxmlsetups \empty{#1}\empty} % [..]
-\def\dostartrawsetupsD [#1][#2]{\the\everydefinerawsetups \dodostartrawsetups \empty{#1}\empty} % [..]
-\def\dostartlocalsetupsD[#1][#2]{\the\everydefinelocalsetups\dodostartlocalsetups\empty{#1}\empty} % [..]
-\def\dostartsetupsD [#1][#2]{\the\everydefinesetups \dodostartsetups \empty{#1}\empty} % [..]
-
-\def\luasetup#1{\ctxlua{\dosetups{#1}}}
+\def\system_setups_start_lua_indeed#1#2#3\stopluasetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
+\def\system_setups_start_xml_indeed#1#2#3\stopxmlsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
+\def\system_setups_start_raw_indeed#1#2#3\stoprawsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
+\def\system_setups_start_loc_indeed#1#2#3\stoplocalsetups{\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
+\def\system_setups_start_tex_indeed#1#2#3\stopsetups {\endgroup\dodoglobal\expandafter\def\csname\??setup#1:#2\expandafter\endcsname\expandafter##\expandafter1\expandafter{#3}}
+
+\def\system_setups_start_lua{\ifsecondargument\expandafter\system_setups_start_lua_c\else\expandafter\system_setups_start_lua_d\fi}
+\def\system_setups_start_xml{\ifsecondargument\expandafter\system_setups_start_xml_c\else\expandafter\system_setups_start_xml_d\fi}
+\def\system_setups_start_raw{\ifsecondargument\expandafter\system_setups_start_raw_c\else\expandafter\system_setups_start_raw_d\fi}
+\def\system_setups_start_loc{\ifsecondargument\expandafter\system_setups_start_loc_c\else\expandafter\system_setups_start_loc_d\fi}
+\def\system_setups_start_tex{\ifsecondargument\expandafter\system_setups_start_tex_c\else\expandafter\system_setups_start_tex_d\fi}
+
+\def\system_setups_start_lua_a{\the\t_system_setups_lua\dodoubleempty\system_setups_start_lua} % [ ] delimited
+\def\system_setups_start_xml_a{\the\t_system_setups_xml\dodoubleempty\system_setups_start_xml} % [ ] delimited
+\def\system_setups_start_raw_a{\the\t_system_setups_raw\dodoubleempty\system_setups_start_raw} % [ ] delimited
+\def\system_setups_start_loc_a{\the\t_system_setups_loc\dodoubleempty\system_setups_start_loc} % [ ] delimited
+\def\system_setups_start_tex_a{\the\t_system_setups_tex\dodoubleempty\system_setups_start_tex} % [ ] delimited
+
+% empty preserves inner {} (is removed by the \expandafter{#3})
+
+\def\system_setups_start_lua_b#1 {\the\t_system_setups_lua\system_setups_start_lua_indeed\empty{#1}\empty} % space delimited
+\def\system_setups_start_xml_b#1 {\the\t_system_setups_xml\system_setups_start_xml_indeed\empty{#1}\empty} % space delimited
+\def\system_setups_start_raw_b#1 {\the\t_system_setups_raw\system_setups_start_raw_indeed\empty{#1}\empty} % space delimited
+\def\system_setups_start_loc_b#1 {\the\t_system_setups_loc\system_setups_start_loc_indeed\empty{#1}\empty} % space delimited
+\def\system_setups_start_tex_b#1 {\the\t_system_setups_tex\system_setups_start_tex_indeed\empty{#1}\empty} % space delimited
+
+\def\system_setups_start_lua_c[#1][#2]{\the\t_system_setups_lua\system_setups_start_lua_indeed{#1}{#2}\empty} % [..] [..]
+\def\system_setups_start_xml_c[#1][#2]{\the\t_system_setups_xml\system_setups_start_xml_indeed{#1}{#2}\empty} % [..] [..]
+\def\system_setups_start_raw_c[#1][#2]{\the\t_system_setups_raw\system_setups_start_raw_indeed{#1}{#2}\empty} % [..] [..]
+\def\system_setups_start_loc_c[#1][#2]{\the\t_system_setups_loc\system_setups_start_loc_indeed{#1}{#2}\empty} % [..] [..]
+\def\system_setups_start_tex_c[#1][#2]{\the\t_system_setups_tex\system_setups_start_tex_indeed{#1}{#2}\empty} % [..] [..]
+
+\def\system_setups_start_lua_d[#1][#2]{\the\t_system_setups_lua\system_setups_start_lua_indeed\empty{#1}\empty} % [..]
+\def\system_setups_start_xml_d[#1][#2]{\the\t_system_setups_xml\system_setups_start_xml_indeed\empty{#1}\empty} % [..]
+\def\system_setups_start_raw_d[#1][#2]{\the\t_system_setups_raw\system_setups_start_raw_indeed\empty{#1}\empty} % [..]
+\def\system_setups_start_loc_d[#1][#2]{\the\t_system_setups_loc\system_setups_start_loc_indeed\empty{#1}\empty} % [..]
+\def\system_setups_start_tex_d[#1][#2]{\the\t_system_setups_tex\system_setups_start_tex_indeed\empty{#1}\empty} % [..]
+
+\def\luasetup#1{\ctxlua{\system_setups{#1}}}
% % % %
\def\systemsetupsprefix{*}
-\def\systemsetups#1{\dosetups{\systemsetupsprefix#1}}
+\def\systemsetups#1{\system_setups{\systemsetupsprefix#1}}
\def\resetsetups[#1]% see x-fo for usage
- {\ifcsname\??su\ifgridsnapping\v!grid\fi:#1\endcsname
- \dodoglobal\letbeundefined{\??su\ifgridsnapping\v!grid\fi:#1}%
+ {\ifcsname\??setup\ifgridsnapping\v!grid\fi:#1\endcsname
+ \dodoglobal\letbeundefined{\??setup\ifgridsnapping\v!grid\fi:#1}%
\else
- \dodoglobal\letbeundefined{\??su:#1}%
+ \dodoglobal\letbeundefined{\??setup:#1}%
\fi}
-
+
+\def\showsetupsdefinition[#1]%
+ {\showvalue{\??setup:#1}} % temp hack for debugging
+
%D \macros
%D {setvariables,getvariable,getvariabledefault}
%D
@@ -436,40 +437,40 @@
%D \setvariables[xx][titletitel=e]
%D \stoptyping
-\def\??vars{@@vars}
+\installcorenamespace{variables}
-\unexpanded\def\setvariables {\dotripleargument\dosetvariables[\getrawparameters ]}
-\unexpanded\def\setevariables{\dotripleargument\dosetvariables[\getraweparameters]}
-\unexpanded\def\setgvariables{\dotripleargument\dosetvariables[\getrawgparameters]}
-\unexpanded\def\setxvariables{\dotripleargument\dosetvariables[\getrawxparameters]}
+\unexpanded\def\setvariables {\dotripleargument\system_variables_set[\getrawparameters ]}
+\unexpanded\def\setevariables{\dotripleargument\system_variables_set[\getraweparameters]}
+\unexpanded\def\setgvariables{\dotripleargument\system_variables_set[\getrawgparameters]}
+\unexpanded\def\setxvariables{\dotripleargument\system_variables_set[\getrawxparameters]}
\unexpanded\def\globalsetvariables % obsolete
- {\dotripleargument\dosetvariables[\globalgetrawparameters]}
+ {\dotripleargument\system_variables_set[\globalgetrawparameters]}
-\def\dosetvariables[#1][#2][#3]% tricky, test on s-pre-60
+\def\system_variables_set[#1][#2][#3]% tricky, test on s-pre-60
{\errorisfataltrue
\doifelse{#2}\currentvariableclass
- {#1[\??vars:#2:][#3]}%
+ {#1[\??variables#2:][#3]}%
{\pushmacro\currentvariableclass
\def\currentvariableclass{#2}%
\getvariable{#2}\s!reset
- #1[\??vars:#2:][#3]%
+ #1[\??variables#2:][#3]%
\getvariable{#2}\s!set
\popmacro\currentvariableclass}%
\errorisfatalfalse}
-\unexpanded\def\setvariable #1#2#3{\expandafter\def \csname\??vars:#1:#2\endcsname{#3}}
-\unexpanded\def\setevariable#1#2#3{\expandafter\edef\csname\??vars:#1:#2\endcsname{#3}}
-\unexpanded\def\setgvariable#1#2#3{\expandafter\gdef\csname\??vars:#1:#2\endcsname{#3}}
-\unexpanded\def\setxvariable#1#2#3{\expandafter\xdef\csname\??vars:#1:#2\endcsname{#3}}
+\unexpanded\def\setvariable #1#2#3{\expandafter\def \csname\??variables#1:#2\endcsname{#3}}
+\unexpanded\def\setevariable#1#2#3{\expandafter\edef\csname\??variables#1:#2\endcsname{#3}}
+\unexpanded\def\setgvariable#1#2#3{\expandafter\gdef\csname\??variables#1:#2\endcsname{#3}}
+\unexpanded\def\setxvariable#1#2#3{\expandafter\xdef\csname\??variables#1:#2\endcsname{#3}}
\def\getvariable#1#2%
{\csname
- \ifcsname\??vars:#1:#2\endcsname\??vars:#1:#2\else\s!empty\fi
+ \ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi
\endcsname}
\def\showvariable#1#2%
- {\showvalue{\ifcsname\??vars:#1:#2\endcsname\??vars:#1:#2\else\s!empty\fi}}
+ {\showvalue{\ifcsname\??variables#1:#2\endcsname\??variables#1:#2\else\s!empty\fi}}
\let\currentvariableclass\empty
@@ -478,20 +479,22 @@
%D
%D I'll probably forget that this on exists.
+\let\m_system_variables_temp\empty
+
\def\checkvariables
- {\dodoubleargument\docheckvariables}
+ {\dodoubleargument\system_variables_check}
-\def\docheckvariables
- {\dogetparameters\docheckrawvalue}
+\def\system_variables_check
+ {\dogetparameters\system_variables_check_value}
-\def\docheckrawvalue#1#2#3%
- {\ifcsname\??vars:#1:#2\endcsname
- \edef\checkedrawvalue{\csname\??vars:#1:#2\endcsname}%
- \ifx\checkedrawvalue\empty
- \expandafter\def\csname\??vars:#1:#2\endcsname{#3}%
+\def\system_variables_check_value#1#2#3%
+ {\ifcsname\??variables#1:#2\endcsname
+ \edef\m_system_variables_temp{\csname\??variables#1:#2\endcsname}%
+ \ifx\m_system_variables_temp\empty
+ \expandafter\def\csname\??variables#1:#2\endcsname{#3}%
\fi
\else
- \expandafter\def\csname\??vars:#1:#2\endcsname{#3}%
+ \expandafter\def\csname\??variables#1:#2\endcsname{#3}%
\fi}
%D \macros
@@ -499,55 +502,37 @@
%D
%D A few trivial macros:
-\def\doifelsevariable#1#2%
- {\ifcsname\??vars:#1:#2\endcsname
+\unexpanded\def\doifelsevariable#1#2%
+ {\ifcsname\??variables#1:#2\endcsname
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
\fi}
-\def\doifvariable#1#2%
- {\ifcsname\??vars:#1:#2\endcsname
+\unexpanded\def\doifvariable#1#2%
+ {\ifcsname\??variables#1:#2\endcsname
\expandafter\firstofoneargument
\else
\expandafter\gobbleoneargument
\fi}
-\def\doifnotvariable#1#2%
- {\ifcsname\??vars:#1:#2\endcsname
+\unexpanded\def\doifnotvariable#1#2%
+ {\ifcsname\??variables#1:#2\endcsname
\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
\fi}
\def\getvariabledefault#1#2% #3% can be command, so no ifcsname here
- {\executeifdefined{\??vars:#1:#2}}% {#3}
-
-% \unexpanded\def\setupenv{\dodoubleargument\rawgetparameters[\??en]}
-%
-% \def\doifenvelse#1{\doifdefinedelse{\??en#1}} % speed up
-% \def\doifenv #1{\doifdefined {\??en#1}} % speed up
-% \def\doifnotenv #1{\doifundefined {\??en#1}} % speed up
-%
-% \def\env#1{\csname\??en#1\endcsname}
-%
-% \def\envvar#1#2%
-% {\ifcsname\??en#1\endcsname
-% \csname\??en#1\endcsname\else#2%
-% \fi}
-%
-% low level change, now also accessible as \getvariable
-% {environment}{...}; the next macros will become obsolete
-% some day in favor of normal variables in the environment
-% namespace
-
-\def\s!environment{environment}
-
-\unexpanded\def\setupenv {\dotripleargument\dosetvariables[\getrawparameters][\s!environment]}
-\def\doifenvelse{\doifelsevariable \s!environment}
-\def\doifenv {\doifvariable \s!environment}
-\def\doifnotenv {\doifnotvariable \s!environment}
-\def\env {\getvariable \s!environment}
-\def\envvar {\getvariabledefault\s!environment}
+ {\executeifdefined{\??variables#1:#2}}% {#3}
+
+\unexpanded\def\setupenv
+ {\dotripleargument\system_variables_set[\getrawparameters][\s!environment]}
+
+\unexpanded\def\doifenvelse{\doifelsevariable \s!environment}
+\unexpanded\def\doifenv {\doifvariable \s!environment}
+\unexpanded\def\doifnotenv {\doifnotvariable \s!environment}
+\def\env {\getvariable \s!environment}
+\def\envvar {\getvariabledefault\s!environment}
\protect \endinput
diff --git a/tex/context/base/core-fnt.mkiv b/tex/context/base/core-fnt.mkiv
index 641411f00..5f08cf75b 100644
--- a/tex/context/base/core-fnt.mkiv
+++ b/tex/context/base/core-fnt.mkiv
@@ -249,44 +249,4 @@
%D
%D \getbuffer
-% %D \macros
-% %D {setupinitial,placeinitial,checkinitial}
-% %D
-% %D {\em To be documented.}
-% %D
-% %D \starttyping
-% %D \setupinitial[state=start] \placeinitial \input tufte
-% %D \stoptyping
-% %D
-% %D and
-% %D
-% %D \starttyping
-% %D \def\bpar{\ifvmode\checkinitial\fi}
-% %D \def\epar{\ifhmode\par\fi\checkinitial}
-% %D \stoptyping
-%
-% % to do: more fine tuning
-%
-% \unexpanded\def\setupinitial
-% {\dodoubleempty\getparameters[\??dc]}
-%
-% \definefontsynonym[Initial][Regular] % prefered initial identifier
-% \definefontsynonym[initial][Initial] % internal but accepted too
-%
-% \setupinitial
-% [\c!state=\v!stop,
-% \c!location=\v!text,
-% \c!n=3,
-% \c!distance=.125em,
-% \c!command=,
-% \s!font=initial]
-%
-% \def\AutoDroppedCapsCommand{\NiceDroppedCaps\@@dccommand\@@dcfont\@@dcdistance\@@dcn}%
-%
-% \unexpanded\def\placeinitial
-% {\doifelse\@@dclocation\v!margin{\chardef\DropMode\plusone}{\chardef\DropMode\zerocount}%
-% \doif \@@dcstate\v!start{\ifcase\@@dcn\else\AutoDroppedCaps\fi}}
-%
-% \let\checkinitial\CheckDroppedCaps
-
\protect \endinput
diff --git a/tex/context/base/core-gen.mkiv b/tex/context/base/core-gen.mkiv
deleted file mode 100644
index 0d7fcebe0..000000000
--- a/tex/context/base/core-gen.mkiv
+++ /dev/null
@@ -1,166 +0,0 @@
-%D \module
-%D [ file=core-gen,
-%D version=1995.10.10,
-%D title=\CONTEXT\ Core Macros,
-%D subtitle=General,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-\writestatus{loading}{ConTeXt Core Macros / General}
-
-\unprotect
-
-%D \macros
-%D {assigndimension,assignalfadimension}
-%D
-%D Hieronder worden enkele commando's gedefinieerd rond
-%D toekenningen. Allereerst een commando om waarden aan
-%D een \DIMENSION\ toe te kennen:
-%D
-%D \starttyping
-%D \assigndimension
-%D {<waarde>|klein|middel|groot|-klein|-middel|-groot|geen}
-%D {\dimension}
-%D {waarde klein}
-%D {waarde middel}
-%D {waarde groot}
-%D \stoptyping
-%D
-%D Hierbij krijgt de \DIMENSION\ \type{\dimension} een waarde
-%D afhankelijk van het meegegeven trefwoord.
-%D
-%D \startnarrower
-%D \startlines
-%D \type{(-)klein }\qquad (--) waarde klein
-%D \type{(-)middel}\qquad (--) waarde middel
-%D \type{(-)groot }\qquad (--) waarde groot
-%D \type{geen }\qquad 0pt
-%D \type{waarde }\qquad waarde
-%D \stoplines
-%D \stopnarrower
-%D
-%D Een trefwoord mag worden voorafgegaan door een \type{-}.
-%D Deze macro toont een voorbeeld van het gebruik van
-%D \type{\processaction} en constanten.
-%D
-%D Analoog aan het bovenstaande commando kennen we een
-%D commando om waarden toe te kennen aan een macro:
-%D
-%D \starttyping
-%D \assignalfadimension
-%D {<waarde>|klein|middel|groot|geen}
-%D {\macro}
-%D {waarde klein}
-%D {waarde middel}
-%D {waarde groot}
-%D \stoptyping
-
-% The third (optimized) version:
-
-\def\@ad@{@ad@}
-
-\setvalue{\@ad@ \v!none }{\zeropoint\gobblethreearguments}
-\setvalue{\@ad@ \v!big }{\thirdofthreearguments}
-\setvalue{\@ad@ \v!medium}{\secondofthreearguments}
-\setvalue{\@ad@ \v!small }{\firstofthreearguments}
-\setvalue{\@ad@-\v!big }{-\thirdofthreearguments}
-\setvalue{\@ad@-\v!medium}{-\secondofthreearguments}
-\setvalue{\@ad@-\v!small }{-\firstofthreearguments}
-
-\def\assigndimension#1#2% #3 #4 #5
- {#2=\ifcsname\@ad@#1\endcsname
- \csname\@ad@#1\expandafter\endcsname
- \else
- #1\expandafter\gobblethreearguments
- \fi}
-
-\def\@aa@{@aa@}
-
-\setvalue{\@aa@\v!none }{0\gobblethreearguments}
-\setvalue{\@aa@\v!big }{\thirdofthreearguments}
-\setvalue{\@aa@\v!medium}{\secondofthreearguments}
-\setvalue{\@aa@\v!small }{\firstofthreearguments}
-
-\def\assignalfadimension#1#2#3#4#5% #3#4#5 are single digits
- {\edef#2{\ifcsname\@aa@#1\endcsname
- \csname\@aa@#1\expandafter\endcsname
- \else
- #1\expandafter\gobblethreearguments
- \fi#3#4#5}}
-
-%D \macros
-%D {assignvalue}
-%D
-%D Een variant hierop is het commando:
-%D
-%D \starttyping
-%D \assignvalue
-%D {<waarde>|klein|middel|groot}
-%D {\macro}
-%D {waarde klein }
-%D {waarde middel}
-%D {waarde groot}
-%D \stoptyping
-%D
-%D Hierbij krijgt \type{\macro} een waarde afhankelijk van
-%D het meegegeven trefwoord:
-%D
-%D \startnarrower
-%D \startlines
-%D \type{klein }\qquad waarde klein
-%D \type{middel}\qquad waarde middel
-%D \type{groot }\qquad waarde groot
-%D \type{waarde}\qquad waarde
-%D \stoplines
-%D \stopnarrower
-%D
-%D Hier doet \type{geen} dus niet mee.
-
-\def\@av@{@av@}
-
-\letvalue{\@av@\v!big }\thirdofthreearguments
-\letvalue{\@av@\v!medium}\secondofthreearguments
-\letvalue{\@av@\v!small }\firstofthreearguments
-
-\def\assignvalue#1#2#3#4#5%
- {\edef#2{\ifcsname\@av@#1\endcsname
- \csname\@av@#1\expandafter\endcsname
- \else
- #1\expandafter\gobblethreearguments
- \fi{#3}{#4}{#5}}}
-
-%D \macros
-%D {assignwidth}
-%D
-%D Een breedte van een opgegeven tekst kan worden berekend en
-%D toegekend aan een \DIMENSION\ met:
-%D
-%D \starttyping
-%D \assignwidth
-%D {\dimension}
-%D {<waarde>|passend|ruim}
-%D {tekst}
-%D \stoptyping
-%D
-%D Dit commando sluit, evenals de bovenstaande
-%D \type{\assign}||commando's, aan op de wijze waarop
-%D in de andere \CONTEXT||modules toekenningen
-%D plaatsvinden. Bij \type{ruim} wordt de gemeten breedte
-%D met 1~em vermeerderd.
-
-\def\assignwidth#1#2#3#4%
- {\doifelsenothing{#2}
- {\setbox\scratchbox\hbox{#3}%
- #1\wd\scratchbox}
- {\doifinsetelse{#2}{\v!fit,\v!broad}
- {\setbox\scratchbox\hbox{#3}%
- #1\wd\scratchbox
- \doif{#2}\v!broad{\advance#1 #4}}%
- {#1=#2}}}%
-
-\protect \endinput
diff --git a/tex/context/base/core-mis.mkiv b/tex/context/base/core-mis.mkiv
index e08693fca..ad74c2084 100644
--- a/tex/context/base/core-mis.mkiv
+++ b/tex/context/base/core-mis.mkiv
@@ -13,7 +13,7 @@
\writestatus{loading}{ConTeXt Core Macros / Misc Commands}
-% todo: kleur in legenda + letter
+% needs to be redone
% %D You would not expect the next macro in \CONTEXT,
% %D wouldn't you? It's there to warn \LATEX\ users that
@@ -681,8 +681,6 @@
\unexpanded\def\startsubsentence{\beginofsubsentence \prewordbreak\beginofsubsentencespacing}
\unexpanded\def\stopsubsentence {\endofsubsentencespacing\prewordbreak\endofsubsentence}
\unexpanded\def\subsentence {\groupedcommand\startsubsentence\stopsubsentence}
-
-\enableactivediscretionaries
\definehspace [quotation] [\zeropoint]
\definehspace [interquotation] [.125em]
@@ -1971,278 +1969,7 @@
\unexpanded\def\placeontopofeachother{\placerelativetoeachother\halign\hss}
\unexpanded\def\placesidebyside {\placerelativetoeachother\valign\vss}
-
-%D A couple of examples, demonstrating how the depth is
-%D taken care of:
-%D
-%D \startbuffer
-%D test\rotate[frame=on, rotation=0] {gans}%
-%D test\rotate[frame=on, rotation=90] {gans}%
-%D test\rotate[frame=on, rotation=180]{gans}%
-%D test\rotate[frame=on, rotation=270]{gans}%
-%D test
-%D \stopbuffer
-%D
-%D \typebuffer \getbuffer
-
-% When we rotate over arbitrary angles, we need to relocate the
-% resulting box because rotation brings that box onto the negative
-% axis. The calculations (mostly sin and cosine) need to be tuned for
-% the way a box is packages (i.e. the refence point). A typical example
-% of drawing, scribbling, and going back to the days of school math.
-%
-% We do a bit more calculations than needed, simply because that way
-% it's easier to debug the code.
-
-% We can completely do this in lua .. when 'I'm bored ...
-
-\def\dododorotatenextbox
- {\setbox\nextbox\vbox to \@@layerysiz
- {\vfill
- \hbox to \@@layerxsiz
- {\dostartrotation\@@rorotation
- \nextboxwd\zeropoint
- \nextboxht\zeropoint
- \flushnextbox
- \dostoprotation
- \hfill}%
- \kern\@@layerypos}%
- \setbox\nextbox\hbox
- {\kern\@@layerxpos
- \kern\@@layerxoff
- \lower\@@layeryoff\flushnextbox}}
-
-\def\dodorotatenextbox#1#2% quite some trial and error -)
- {\dontshowcomposition
- \dontcomplain
- \ifnum#2=\plusfour
- % new, location=middle
- \!!widthb \nextboxwd
- \!!heightb\nextboxht
- \!!depthb \nextboxdp
- \setbox\nextbox\vbox{\vskip.5\nextboxht\hskip-.5\nextboxwd\flushnextbox}%
- \smashbox\nextbox
- \fi
- \!!widtha \nextboxwd
- \!!heighta\nextboxht
- \!!deptha \nextboxdp
- \!!doneafalse
- \!!donebfalse
- \ifcase#2\or
- % 1: fit
- \or
- % 2: depth, not fit
- \!!doneatrue
- \!!donebtrue
- \or
- % 3: depth, fit
- \!!donebtrue
- \fi
- \setbox\nextbox\vbox{\hbox{\raise\nextboxdp\flushnextbox}}%
- \!!dimena \nextboxht
- \setcalculatedcos\cos\@@rorotation
- \setcalculatedsin\sin\@@rorotation
- \@@layerxpos\zeropoint
- \@@layerypos\zeropoint
- \@@layerxoff\zeropoint
- \@@layeryoff\zeropoint
- \ifdim\sin\points>\zeropoint
- \ifdim\cos\points>\zeropoint
- \@@layerxsiz \cos\!!widtha
- \@@layerysiz \sin\!!widtha
- \advance\@@layerxsiz \sin\!!dimena
- \advance\@@layerysiz \cos\!!dimena
- \@@layerypos \cos\!!dimena
- \if!!donea
- \@@layerxoff \negated\sin\!!dimena
- \advance\@@layerxoff \sin\!!deptha
- \fi
- \if!!doneb
- \@@layeryoff \cos\!!deptha
- \fi
- \dododorotatenextbox
- \else
- \@@layerxsiz \negated\cos\!!widtha
- \@@layerysiz \sin\!!widtha
- \advance\@@layerxsiz \sin\!!dimena
- \advance\@@layerysiz \negated\cos\!!dimena
- \@@layerxpos \negated\cos\!!widtha
- \if!!donea
- \@@layerxoff -\@@layerxsiz
- \advance\@@layerxoff \sin\!!deptha
- \fi
- \if!!doneb
- \@@layeryoff \negated\cos\!!heighta
- \fi
- \dododorotatenextbox
- \wd\nextbox\if!!donea\sin\!!deptha\else\@@layerxsiz\fi
- \fi
- \else
- \ifdim\cos\points<\zeropoint
- \@@layerxsiz \negated\cos\!!widtha
- \@@layerysiz \negated\sin\!!widtha
- \advance\@@layerxsiz \negated\sin\!!dimena
- \advance\@@layerysiz \negated\cos\!!dimena
- \@@layerxpos \@@layerxsiz
- \@@layerypos \negated\sin\!!widtha
- \if!!donea
- \@@layerxoff -\@@layerxsiz
- \advance\@@layerxoff \negated\sin\!!heighta
- \fi
- \if!!doneb
- \@@layeryoff \@@layerysiz
- \advance\@@layeryoff \cos\!!deptha
- \fi
- \dododorotatenextbox
- \wd\nextbox\if!!donea\negated\sin\!!heighta\else\@@layerxsiz\fi
- \else
- \@@layerxsiz \cos\!!widtha
- \@@layerysiz \negated\sin\!!widtha
- \advance\@@layerxsiz \negated\sin\!!dimena
- \advance\@@layerysiz \cos\!!dimena
- \ifdim\sin\points=\zeropoint
- \@@layerxpos \zeropoint
- \@@layerxoff \zeropoint
- \@@layerypos \@@layerysiz
- \if!!doneb
- \@@layeryoff \!!deptha
- \fi
- \else
- \@@layerypos \@@layerysiz
- \@@layerxpos \negated\sin\!!dimena
- \if!!donea
- \@@layerxoff -\@@layerxsiz
- \advance\@@layerxoff \negated\sin\!!heighta
- \fi
- \if!!doneb
- \@@layeryoff \negated\sin\!!deptha
- \fi
- \fi
- \dododorotatenextbox
- \ifdim\sin\points=\zeropoint
- \else
- \wd\nextbox\if!!donea\negated\sin\!!heighta\else\@@layerxsiz\fi
- \fi
- \fi
- \fi
- % new, location=middle
- \ifnum#2=\plusfour
- \setbox\nextbox\vbox{\vskip-.5\!!heightb\hskip.5\!!heightb\flushnextbox}%
- \nextboxwd\!!widthb
- \nextboxht\!!heightb
- \nextboxdp\!!depthb
- \fi}
-
-% \def\dorotatenextbox#1#2%
-% {\doifsomething{#1}
-% {\edef\@@rorotation{\realnumber{#1}}% get rid of leading zeros and spaces
-% \setbox\nextbox\vbox{\flushnextbox}% not really needed
-% \dodorotatenextbox\@@rorotation#2}%
-% \hbox{\boxcursor\flushnextbox}}
-
-% \rotate[rotation=left]{\externalfigure[cow.pdf]}
-
-\def\dorotatenextbox#1#2%
- {\hbox\bgroup
- \edef\@@rorotation{#1}%
- \ifx\@@rorotation\empty
- \else
- \ifx\@@rorotation\v!left
- \doifoddpageelse{\edef\@@rorotation{90}}{\edef\@@rorotation{270}}%
- \else\ifx\@@rorotation\v!right
- \doifoddpageelse{\edef\@@rorotation{270}}{\edef\@@rorotation{90}}%
- \else\ifx\@@rorotation\v!inner
- \signalrightpage
- \doifrightpageelse{\edef\@@rorotation{270}}{\edef\@@rorotation{90}}%
- \else\ifx\@@rorotation\v!outer
- \signalrightpage
- \doifrightpageelse{\edef\@@rorotation{90}}{\edef\@@rorotation{270}}%
- \else
- \edef\@@rorotation{\realnumber{\@@rorotation}}% get rid of leading zeros and spaces
- \fi\fi\fi\fi
- \setbox\nextbox\vbox{\flushnextbox}% not really needed
- \dodorotatenextbox\@@rorotation#2%
- \fi
- \boxcursor\flushnextbox
- \egroup}
-
-
-\def\dodorotatebox#1% {angle} \hbox/\vbox/\vtop
- {\bgroup\hbox\bgroup % compatibility hack
- \dowithnextbox
- {\dorotatenextbox{#1}\plusone
- \egroup\egroup}}
-\def\dorotatebox#1% {angle} \hbox/\vbox/\vtop
- {\ifcase#1\relax
- \expandafter\gobbleoneargument
- \else
- \expandafter\dodorotatebox
- \fi{#1}}
-
-\unexpanded\def\rotate % \bgroup: \rotate kan argument zijn
- {\bgroup\complexorsimpleempty\rotate}
-
-% \def\complexrotate[#1]% framed met diepte !
-% {\getparameters[\??ro][#1]%
-% \processaction
-% [\@@rolocation]
-% [ \v!depth=>\!!counta\plusthree\donefalse,% depth fit - raw box
-% \v!fit=>\!!counta\plustwo \donefalse,% depth tight - raw box
-% \v!broad=>\!!counta\plusone \donefalse,% nodepth fit - raw box
-% \v!high=>\!!counta\plusone \donetrue ,% nodepth fit - framed
-% \v!middle=>\!!counta\plusfour \donefalse,% centered, keep dimensions
-% \s!default=>\!!counta\plusthree\donetrue ,% depth fit - framed
-% \s!unknown=>\!!counta\plusthree\donetrue ]% depth fit - framed
-% \ifdone
-% \def\docommand{\localframed[\??ro][#1,\c!location=]}%
-% \else
-% \let\docommand\relax
-% \fi
-% \dowithnextbox{\dorotatenextbox\@@rorotation\!!counta\egroup}\vbox\docommand}
-
-\setvalue{\??ro::\c!location::\v!depth }{\!!counta\plusthree\donefalse} % depth fit - raw box
-\setvalue{\??ro::\c!location::\v!fit }{\!!counta\plustwo \donefalse} % depth tight - raw box
-\setvalue{\??ro::\c!location::\v!broad }{\!!counta\plusone \donefalse} % nodepth fit - raw box
-\setvalue{\??ro::\c!location::\v!high }{\!!counta\plusone \donetrue } % nodepth fit - framed
-\setvalue{\??ro::\c!location::\v!middle }{\!!counta\plusfour \donefalse} % centered, keep dimensions
-\setvalue{\??ro::\c!location::\v!default}{\!!counta\plusthree\donetrue } % depth fit - framed
-
-\def\complexrotate[#1]% framed met diepte !
- {\getparameters[\??ro][#1]%
- \executeifdefined{\??ro::\c!location::\@@rolocation}{\!!counta\plusthree\donetrue}%
- \ifdone
- \def\docommand{\localframed[\??ro][#1,\c!location=]}%
- \else
- \let\docommand\relax
- \fi
- \dowithnextbox{\dorotatenextbox\@@rorotation\!!counta\egroup}\vbox\docommand}
-
-\presetlocalframed[\??ro]
-
-\unexpanded\def\setuprotate
- {\dodoubleargument\getparameters[\??ro]}
-
-\setuprotate
- [\c!rotation=90,
- \c!location=\v!normal,
- \c!width=\v!fit,
- \c!height=\v!fit,
- \c!offset=\v!overlay,
- \c!frame=\v!off]
-
-% \dostepwiserecurse{0}{360}{10}
-% {\startlinecorrection[blank]
-% \hbox
-% {\expanded{\setuprotate[rotation=\recurselevel]}%
-% \traceboxplacementtrue
-% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=depth] {\ruledhbox{\bfb (depth)}}}}%
-% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=fit] {\ruledhbox{\bfb (fit)}}}}%
-% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=broad] {\ruledhbox{\bfb (broad)}}}}%
-% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=normal]{\ruledhbox{\bfb (normal)}}}}%
-% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high] {\ruledhbox{\bfb (high)}}}}}
-% \stoplinecorrection}
-
% to be used in some other places! todo!
%
% divides \hsize in fractions, will be made a bit more
@@ -2256,8 +1983,6 @@
%
% \setuphorizontaldivision[afstand=,aantal=] (passend,passend)
-\def\??fr{@@fr}
-
\unexpanded\def\setuphorizontaldivision
{\dodoubleargument\getparameters[\??fr]}
diff --git a/tex/context/base/core-sys.mkiv b/tex/context/base/core-sys.mkiv
index bfacd3c48..9dc03d336 100644
--- a/tex/context/base/core-sys.mkiv
+++ b/tex/context/base/core-sys.mkiv
@@ -21,7 +21,7 @@
%D Version checking:
-\def\newcontextversion#1%
+\unexpanded\def\newcontextversion#1%
{\doifelse{#1}\contextversion
{\let\newcontextversion\gobbleoneargument}
{\writeline
@@ -36,7 +36,6 @@
%D line ending. I hate this mess.
\edef\operatingsystem {\cldcontext{os.platform}}
-
\def \jobfilename {\cldcontext{environment.jobfilename or ""}}
\def \jobfilesuffix {\cldcontext{environment.jobfilesuffix or ""}}
\def \inputfilebarename{\cldcontext{environment.inputfilebarename or ""}}
@@ -44,21 +43,18 @@
\def \inputfilename {\cldcontext{environment.inputfilename or ""}}
\def \outputfilename {\cldcontext{environment.outputfilename or ""}}
-\newtoks \everysetupsystem
-
-\unexpanded\def\setupsystem
- {\dosingleargument\dosetupsystem}
+\installcorenamespace{system}
-\def\dosetupsystem[#1]%
- {\getparameters[\??sv][#1]%
- \the\everysetupsystem}
+\installdirectcommandhandler \??system {system}
\appendtoks
- \edef\outputresolution{\@@svresolution}%
+ \edef\outputresolution{\directsystemparameter\c!resolution}%
+ \edef\outputfilename {\directsystemparameter\c!file }%
+ \edef\inputfilename {\directsystemparameter\c!inputfile }%
\to \everysetupsystem
\appendtoks
- \ifcase\@@svn
+ \ifcase\directsystemparameter\c!n\relax
% % 0 : unknown
\or
\setsystemmode\v!first % 1 : first run
@@ -71,17 +67,12 @@
\fi
\to \everysetupsystem
-\appendtoks
- \edef\outputfilename{\@@svfile}%
- \edef\inputfilename {\@@svinputfile}%
-\to \everysetupsystem
-
-\let\@@jobsuffix\s!unknown
+\let\m_system_job_suffix\s!unknown
\appendtoks
- \resetsystemmode{suffix-\@@jobsuffix}%
- \edef\@@jobsuffix{\jobsuffix}%
- \setsystemmode{suffix-\@@jobsuffix}%
+ \resetsystemmode{suffix-\m_system_job_suffix}%
+ \edef\m_system_job_suffix{\jobsuffix}%
+ \setsystemmode{suffix-\m_system_job_suffix}%
\to \everysetupsystem
\appendtoks
@@ -95,13 +86,11 @@
\def\jobfullname{\jobfilename.\jobfilesuffix}
-\def\setjobfullname#1% #1 = default if not given
+\unexpanded\def\setjobfullname#1% #1 = default if not given
{\doifelsenothing\jobfilename
{\let\jobfullname\empty}
{\doif\jobfilesuffix\c!tex{\edef\jobfullname{\jobfilename.#1}}}}
-\def\systemparameter#1{\executeifdefined{\??sv#1}\empty}
-
%D There are a couple of system states avaiable:
%D
%D \starttabulate [|T|T|]
@@ -130,7 +119,7 @@
\unexpanded\def\setuprandomize[#1]%
{\doifsomething{#1}
- {\bgroup
+ {\begingroup
% tex's time is in minutes
\scratchcounter\normaltime
\processaction
@@ -143,7 +132,7 @@
\s!unknown=>\scratchcounter#1]%
\expanded{\setrandomseed{\the\scratchcounter}}%
% \writestatus\m!system{randomseed: \the\scratchcounter}%
- \egroup}}
+ \endgroup}}
\setupsystem
[\c!directory=,
@@ -158,25 +147,9 @@
%D Remark: windows programs normally handle \type {cr|lf|crlf} but unix
%D is more picky, so we default to the \type {cr}. I never understood why
%D \type {crlf} was not used in all systems, since it makes most sense.
+%D But anyway, in \MKIV\ we avoid most of the complications anyway as we
+%D deal with much at the \LUA\ end.
-\def\dostartglobaldefs#1#2%
- {\edef\!!stringa{\the\globaldefs}%
- \ifnum\globaldefs#10
- \globaldefs-\globaldefs
- \fi
- \advance\globaldefs #21
- \setevalue{@gd@\the\globaldefs}{\!!stringa}}
-
-\def\dostopglobaldefs
- {\doifdefinedelse{@gd@\the\globaldefs}
- {\globaldefs\getvalue{@gd@\the\globaldefs}\relax}
- {\globaldefs\zerocount}}
-
-\unexpanded\def\startlocal {\dostartglobaldefs>-}
-\unexpanded\def\stoplocal {\dostopglobaldefs}
-\unexpanded\def\startglobal {\dostartglobaldefs<+}
-\unexpanded\def\stopglobal {\dostopglobaldefs}
-
\def\complexstart[#1]{\bgroup\getvalue{\e!start#1}}
\def\complexstop [#1]{\getvalue{\e!stop #1}\egroup}
@@ -188,7 +161,9 @@
% \c!before \c!after \c!inbetween \c!commands \c!style \c!color
-\installcommandhandler{\??be}{startstop}{\??be}
+\installcorenamespace{startstop}
+
+\installcommandhandler \??startstop {startstop} \??startstop
\appendtoks
\setuevalue{\e!start\currentstartstop}{\dostartstop_start {\currentstartstop}}%
@@ -219,7 +194,9 @@
\dostoptagged
\startstopparameter\c!inbetween}}
-\installcommandhandler{\??hl}{highlight}{\??hl} % we could do with less
+\installcorenamespace{highlight}
+
+\installcommandhandler \??highlight {highlight} \??highlight % we could do with less
\appendtoks
\setuevalue\currenthighlight{\dohighlight_indeed{\currenthighlight}}%
@@ -234,57 +211,26 @@
\usehighlightstyleandcolor\c!style\c!color
\dotaghighlight}
{\dostoptagged}}
-
-% \docommand kan niet worden gebruikt omdat deze macro
-% soms lokaal wordt gebruikt
-% te zijner tijd:
-%
-% \definevariable {pc} % ProtectedCommand
-%
-% \def\executeprotected#1%
-% {\csname\??pc\string#1\endcsname}
-%
-% \unexpanded\def\defineprotected#1#2%
-% {\expandafter\def\csname\??pc\string#2\endcsname}
-%
-% \unexpanded\def\defineunprotected#1%
-% {\def#1}
-%
-% \def\doprotected%
-% {\ifx\next\define
-% \let\next=\defineprotected
-% \else
-% \let\next=\executeprotected
-% \fi
-% \next}
-%
-% \def\unexpanded%
-% {\futurelet\next\doprotected}
-%
-% \unexpanded\define\ziezo{ziezo}
-%
-% \unexpanded\ziezo
+\unexpanded\def\define
+ {\doifnextoptionalelse\system_define_yes\def}
-\def\complexdefine[#1]#2#3%
- {\ifx#2\undefined
- \else
+\unexpanded\def\system_define_yes[#1]#2#3%
+ {\ifdefined#2%
\showmessage\m!system4{\string#2}%
\fi
- \ifcase0#1\def#2{#3}%
- \or\def#2##1{#3}%
- \or\def#2##1##2{#3}%
- \or\def#2##1##2##3{#3}%
- \or\def#2##1##2##3##4{#3}%
- \or\def#2##1##2##3##4##5{#3}%
- \or\def#2##1##2##3##4##5##6{#3}%
- \or\def#2##1##2##3##4##5##6##7{#3}%
- \or\def#2##1##2##3##4##5##6##7##8{#3}%
- \or\def#2##1##2##3##4##5##6##7##8##9{#3}%
- \else\def#2{#3}%
- \fi}
-
-\definecomplexorsimpleempty\define
+ \ifcase0#1\relax
+ \def#2{#3}\or
+ \def#2##1{#3}\or
+ \def#2##1##2{#3}\or
+ \def#2##1##2##3{#3}\or
+ \def#2##1##2##3##4{#3}\or
+ \def#2##1##2##3##4##5{#3}\or
+ \def#2##1##2##3##4##5##6{#3}\or
+ \def#2##1##2##3##4##5##6##7{#3}\or
+ \def#2##1##2##3##4##5##6##7##8{#3}\or
+ \def#2##1##2##3##4##5##6##7##8##9{#3}\else
+ \def#2{#3}\fi}
% \startluacode
% local contextsprint, ctxcatcodes = context.sprint, tex.ctxcatcodes
@@ -362,73 +308,19 @@
% \whateverb[A][B]{C}{D}
% \stoptext
+%D This is a checked variant of \type {\getvalue}.
+
\unexpanded\def\macroname#1% brrr
- {\executeifdefined{#1}\empty}
-
-\def\usecommands#1%
- {\bgroup
- \def\docommand##1{\setbox0\hbox{\getvalue{\string##1}##1}}%
- \processcommalist[#1]\docommand
- \egroup}
-
-\newif\ifforcefileexpansion % handy for document level overload
-
-%D The next implementation is about 4 times as faster than a
-%D processaction alternative on an string of average length.
-%D Since this feature is used in XML processing, it made sense
-%D to support this faster alternative. It's installable as well.
-%D
-%D We keep this around for \MKII\ \XML\ but it's not used in \MKIV\
-%D code as expansion is controlled in another way there.
-
-\def\installexpander#1#2#3% changed, no longer \convert..\to...
- {\setvalue{\s!do\c!expansion#1l}{#2}%
- \setvalue{\s!do\c!expansion#1g}{#3}}%
-
-% \convertexpanded is obsolete
-
-\long\def\doconvertexpanded#1#2#3% #4 % [l|g] \cs {kind} {data}
- {\csname % that we assign all exp a value
- \s!do\c!expansion
- \ifforcefileexpansion
- \v!yes
- \else\ifcsname\s!do\c!expansion#3#1\endcsname
- #3%
- \else
- \s!default
- \fi\fi
- #1%
- \endcsname#2}% #3
-
-\long\def\defconvertexpanded {\doconvertexpanded l}
-\long\def\gdefconvertexpanded{\doconvertexpanded g}
-
-\installexpander\v!command \defconvertedcommand \gdefconvertedcommand
-\installexpander\s!default \defconvertedargument \gdefconvertedargument
-\installexpander\empty \defconvertedargument \gdefconvertedargument
-\installexpander\v!no \defconvertedargument \gdefconvertedargument
-\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
-\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
-\installexpander\v!strict \defreducedargument \gdefreducedargument
-\installexpander {utf} \defreducedtoutf \gdefreducedtoutf
-
-\def\dodefconvertedmeaning#1#2#3% watch the double expansion !
- {\bgroup
- \xdef\@@globalexpanded{#3}%
- \xdef\@@globalexpanded{\@@globalexpanded}%
- \egroup
- #1#2\@@globalexpanded}
+ {\csname\ifcsname#1\endcsname#1\else\s!empty\fi\endcsname}
-\def\defconvertedmeaning {\dodefconvertedmeaning\defconvertedcommand}
-\def\gdefconvertedmeaning{\dodefconvertedmeaning\gdefconvertedcommand}
+% %D A weird one that I probably needed once, so it might as well become
+% %D obsolete.
+%
+% \unexpanded\def\usecommands#1%
+% {\begingroup
+% \def\docommand##1{\setbox\scratchbox\hbox{\csname\string##1\endcsname##1}}%
+% \processcommalist[#1]\docommand
+% \endgroup}
-\def\dodefreducedargument#1#2#3%
- {\begingroup
- \reducetocoding[raw]%
- \edef\ascii{#3}%
- \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}}
-\def\defreducedargument {\dodefreducedargument\edef}
-\def\gdefreducedargument{\dodefreducedargument\xdef}
-
\protect \endinput
diff --git a/tex/context/base/core-two.mkiv b/tex/context/base/core-two.mkiv
index 725573899..58662d030 100644
--- a/tex/context/base/core-two.mkiv
+++ b/tex/context/base/core-two.mkiv
@@ -71,15 +71,8 @@
\unprotect
-\let\twopassdatalist\empty
-
-\newif\iftwopassdatafound %% will become conditional
-
\registerctxluafile{core-two}{1.001}
-%D I'm not that sure if this behaves exactly like mkii. This needs a cleanup. Is \type
-%D {\normalexpanded} needed?
-
\def\immediatesavetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxcommand {savetwopassdata('#1',"#3")}}}
\def\savetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxlatecommand{savetwopassdata('#1',"#3")}}}
\def\lazysavetwopassdata #1#2#3{\normalexpanded{\noexpand\ctxlatecommand{savetwopassdata('#1',"#3")}}}
@@ -88,21 +81,40 @@
% temp hack: needs a proper \starteverytimeluacode
-\def\testtwopassdata{\ifx\twopassdata\empty\twopassdatafoundfalse\else\twopassdatafoundtrue\fi}
+\setfalse\twopassdatafound
+\let \twopassdata \empty
+\let \twopassdatalist \empty
+
+\newif \iftwopassdatafound % obsolete, will go
+
+\def\system_twopass_check
+ {\ifx\twopassdata\empty
+ \twopassdatafoundfalse % obsolete
+ \setfalse\twopassdatafound
+ \else
+ \twopassdatafoundtrue % obsolete
+ \settrue\twopassdatafound
+ \fi}
+
+\def\system_twopass_set_not_found
+ {\twopassdatafoundfalse % obsolete
+ \setfalse\twopassdatafound}
-% todo: move the edef to lua
+\def\system_twopass_set_found
+ {\twopassdatafoundtrue % obsolete
+ \settrue\twopassdatafound}
\unexpanded\def\definetwopasslist #1{\ctxcommand{definetwopasslist('#1')}}
- \def\gettwopassdata #1{\edef\twopassdata {\ctxcommand{gettwopassdata ("#1")}}\testtwopassdata}
- \def\checktwopassdata #1{\edef\twopassdata {\ctxcommand{checktwopassdata ("#1")}}\testtwopassdata}
- \def\findtwopassdata #1#2{\edef\twopassdata {\ctxcommand{findtwopassdata("#1","#2")}}\testtwopassdata}
- \def\getfirsttwopassdata #1{\edef\twopassdata {\ctxcommand{getfirsttwopassdata ("#1")}}\testtwopassdata}
- \def\getlasttwopassdata #1{\edef\twopassdata {\ctxcommand{getlasttwopassdata ("#1")}}%
- \edef\noftwopassitems{\ctxcommand{counttwopassdata ("#1")}}\testtwopassdata}
- \def\getnamedtwopassdatalist#1#2{\edef #1{\ctxcommand{gettwopassdatalist ("#2")}}}
- \def\gettwopassdatalist #1{\edef\twopassdatalist{\ctxcommand{gettwopassdatalist ("#1")}}}
+\unexpanded\def\gettwopassdata #1{\edef\twopassdata {\ctxcommand{gettwopassdata ("#1")}}\system_twopass_check}
+\unexpanded\def\checktwopassdata #1{\edef\twopassdata {\ctxcommand{checktwopassdata ("#1")}}\system_twopass_check}
+\unexpanded\def\findtwopassdata #1#2{\edef\twopassdata {\ctxcommand{findtwopassdata("#1","#2")}}\system_twopass_check}
+\unexpanded\def\getfirsttwopassdata #1{\edef\twopassdata {\ctxcommand{getfirsttwopassdata ("#1")}}\system_twopass_check}
+\unexpanded\def\getlasttwopassdata #1{\edef\twopassdata {\ctxcommand{getlasttwopassdata ("#1")}}%
+ \edef\noftwopassitems{\ctxcommand{counttwopassdata ("#1")}}\system_twopass_check}
+\unexpanded\def\getnamedtwopassdatalist#1#2{\edef #1{\ctxcommand{gettwopassdatalist ("#2")}}}
+\unexpanded\def\gettwopassdatalist #1{\edef\twopassdatalist{\ctxcommand{gettwopassdatalist ("#1")}}}
- \def\doifelseintwopassdata #1#2{\ctxcommand{doifelseintwopassdata("#1","#2")}}
+\unexpanded\def\doifelseintwopassdata #1#2{\ctxcommand{doifelseintwopassdata("#1","#2")}}
\let\getfromtwopassdata \findtwopassdata
diff --git a/tex/context/base/core-uti.lua b/tex/context/base/core-uti.lua
index 69b8fffe1..7834be963 100644
--- a/tex/context/base/core-uti.lua
+++ b/tex/context/base/core-uti.lua
@@ -135,6 +135,8 @@ local jobpacker = packers.new(packlist,1.01)
job.pack = true
+directives.register("job.pack",function(v) pack = v end)
+
local _save_, _load_, _others_ = { }, { }, { } -- registers timing
function job.save(filename) -- we could return a table but it can get pretty large
diff --git a/tex/context/base/core-uti.mkiv b/tex/context/base/core-uti.mkiv
index 6153bc847..9a783f78a 100644
--- a/tex/context/base/core-uti.mkiv
+++ b/tex/context/base/core-uti.mkiv
@@ -17,7 +17,7 @@
\registerctxluafile{core-uti}{1.001}
-\def\savecurrentvalue#1#2%
+\def\savecurrentvalue#1#2% immediate, so not \unexpanded
{\ctxlua{job.variables.save("\strippedcsname#1","#2")}}
\appendtoks
@@ -35,11 +35,4 @@
}%
\to \everyjob
-\def\notuccompression{\ctxlua{job.pack=false}}
-
-%D Some styles might use these use these commands:
-
-\def\installprogram {\dosingleempty\doinstallprogram}
-\def\doinstallprogram[#1]{\gobbleoneargument}
-
\protect \endinput
diff --git a/tex/context/base/core-var.mkiv b/tex/context/base/core-var.mkiv
index db056c3e7..26559f246 100644
--- a/tex/context/base/core-var.mkiv
+++ b/tex/context/base/core-var.mkiv
@@ -15,6 +15,8 @@
\unprotect
+%D Much of this will move to *-ini files.
+
%D We introduce a couple of variables that are used all over
%D \CONTEXT. Alternatively we could define them in each module
%D but as they are part of the bigger picture we prefer to do
@@ -65,12 +67,7 @@
\newtoks \everybeforepagebody
\newtoks \everyafterpagebody
-\let \everypagebody \everybeforepagebody % backward compatible
-
-%D Multipass:
-
-\newtoks \everybeforeutilityread
-\newtoks \everyafterutilityread
+\let \everypagebody \everybeforepagebody % backward compatible, will become obsolete
%D Floats:
diff --git a/tex/context/base/file-job.mkvi b/tex/context/base/file-job.mkvi
index 43179e156..8523be33a 100644
--- a/tex/context/base/file-job.mkvi
+++ b/tex/context/base/file-job.mkvi
@@ -85,12 +85,12 @@
\ifdefined\textlevel\else \newcount\textlevel \fi % might go away
-\def\dostarttext
+\unexpanded\def\dostarttext
{\glet\dostarttext\relax
\the\everystarttext
\global\everystarttext\emptytoks}
-\def\dostoptext
+\unexpanded\def\dostoptext
{\glet\dostoptext\relax
\flushfinallayoutpage % optional
\page % anyway
@@ -166,11 +166,11 @@
\def\currentproduct {\ctxcommand{currentproduct ()}}
\def\currentcomponent {\ctxcommand{currentcomponent ()}}
\def\currentenvironment {\ctxcommand{currentenvironment()}}
+\def\processedfile {\ctxcommand{processedfile()}}
+\def\processedfiles {\ctxcommand{processedfiles()}}
\unexpanded\def\dostarttextfile #name{\ctxcommand{dostarttextfile(name)}}
\unexpanded\def\dostoptextfile {\ctxcommand{dostoptextfile()}}
-\def\processedfile {\ctxcommand{processedfile()}}
-\def\processedfiles {\ctxcommand{processedfiles()}}
\unexpanded\def\loadtexfile [#name]{\ctxcommand{usetexfile("#name")}}
\unexpanded\def\loadluafile [#name]{\ctxcommand{useluafile("#name")}}
@@ -220,43 +220,43 @@
\newsystemmode\v!component
\newsystemmode\v!environment
-\def\startprojectindeed
+\unexpanded\def\startprojectindeed
{\starttext
\pushsystemmode\v!project
\setsystemmode\v!project}
-\def\stopprojectindeed
+\unexpanded\def\stopprojectindeed
{\popsystemmode\v!project
\stoptext
\signalendofinput\v!project}
-\def\startproductindeed
+\unexpanded\def\startproductindeed
{\starttext
\pushsystemmode\v!product
\setsystemmode\v!product}
-\def\stopproductindeed
+\unexpanded\def\stopproductindeed
{\popsystemmode\v!product
\stoptext
\signalendofinput\v!product}
-\def\startcomponentindeed
+\unexpanded\def\startcomponentindeed
{\starttext
\pushreferenceprefix\currentcomponent
\pushsystemmode\v!component
\setsystemmode\v!component}
-\def\stopcomponentindeed
+\unexpanded\def\stopcomponentindeed
{\popsystemmode\v!component
\popreferenceprefix
\stoptext
\signalendofinput\v!component}
-\def\startenvironmentindeed
+\unexpanded\def\startenvironmentindeed
{\pushsystemmode\v!environment
\setsystemmode\v!environment}
-\def\stopenvironmentindeed
+\unexpanded\def\stopenvironmentindeed
{\popsystemmode\v!environment
\signalendofinput\v!environment}
@@ -268,7 +268,7 @@
{\dosingleargument\start_document}
\unexpanded\def\start_document[#settings]%
- {\setvariables[document][#settings]%
+ {\setvariables[\s!document][#settings]%
\the\everysetupdocument\relax
\starttext
\documentvariable\c!before}
@@ -278,16 +278,16 @@
\stoptext}
\def\documentvariable#name%
- {\getvariable{document}{#name}}
+ {\getvariable\s!document{#name}}
-\unexpanded\def\setupdocument[#1]%
- {\setvariables[document][#1]%
+\unexpanded\def\setupdocument[#settings]%
+ {\setvariables[\s!document][#settings]%
\the\everysetupdocument\relax}
\setvariables
[document]
- [\c!before=\directsetup{document:start},
- \c!after=\directsetup{document:stop}]
+ [\c!before=\directsetup{\s!document:start},
+ \c!after=\directsetup{\s!document:stop}]
%S The document: namespace will be used elsewhere too.
diff --git a/tex/context/base/file-syn.mkvi b/tex/context/base/file-syn.mkvi
index 573c582d7..e823a3519 100644
--- a/tex/context/base/file-syn.mkvi
+++ b/tex/context/base/file-syn.mkvi
@@ -43,11 +43,11 @@
%D \usemodules[pictex,chemie,unit]
%D \stoptyping
-\unexpanded\def\definefilesynonym {\dodoubleempty \dodefinefilesynonym}
-\unexpanded\def\definefilefallback{\dodoubleargument\dodefinefilefallback} % still used?
+\unexpanded\def\definefilesynonym {\dodoubleempty \system_define_file_synonym }
+\unexpanded\def\definefilefallback{\dodoubleargument\system_define_file_fallback} % still used?
-\def\dodefinefilesynonym [#name][#realname]{\ctxcommand{definefilesynonym ("#name","#realname")}}
-\def\dodefinefilefallback[#name][#alternatives]{\ctxcommand{definefilefallback("#name","#alternatives")}}
+\def\system_define_file_synonym [#name][#realname]{\ctxcommand{definefilesynonym ("#name","#realname")}}
+\def\system_define_file_fallback[#name][#alternatives]{\ctxcommand{definefilefallback("#name","#alternatives")}}
%D \macros
%D {truefilename}
diff --git a/tex/context/base/font-ext.lua b/tex/context/base/font-ext.lua
index bb03aee8d..fc255d395 100644
--- a/tex/context/base/font-ext.lua
+++ b/tex/context/base/font-ext.lua
@@ -8,7 +8,7 @@ if not modules then modules = { } end modules ['font-ext'] = {
local utf = unicode.utf8
local next, type, byte = next, type, string.byte
-local gmatch, concat = string.gmatch, table.concat
+local gmatch, concat, format = string.gmatch, table.concat, string.format
local utfchar = utf.char
local getparameters = utilities.parsers.getparameters
@@ -706,6 +706,106 @@ registerotffeature {
}
}
+-- for zhichu chen (see mailing list archive): we might add a few more variants
+-- in due time
+--
+-- \definefontfeature[boxed][default][boundingbox=yes] % paleblue
+--
+-- maybe:
+--
+-- \definecolor[DummyColor][s=.75,t=.5,a=1] {\DummyColor test} \nopdfcompression
+--
+-- local gray = { "special", "pdf: /Tr1 gs .75 g" }
+-- local black = { "special", "pdf: /Tr0 gs 0 g" }
+
+local push = { "push" }
+local pop = { "pop" }
+local gray = { "special", "pdf: .75 g" }
+local black = { "special", "pdf: 0 g" }
+
+local downcache = { } -- handy for huge cjk fonts
+local rulecache = { } -- handy for huge cjk fonts
+
+setmetatableindex(downcache,function(t,d)
+ local v = { "down", d }
+ t[d] = v
+ return v
+end)
+
+setmetatableindex(rulecache,function(t,h)
+ local v = { }
+ t[h] = v
+ setmetatableindex(v,function(t,w)
+ local v = { "rule", h, w }
+ t[w] = v
+ return v
+ end)
+ return v
+end)
+
+local function showboundingbox(tfmdata,key,value)
+ if value then
+ local vfspecials = backends.pdf.tables.vfspecials
+ local gray = vfspecials and (vfspecials.rulecolors[value] or vfspecials.rulecolors.palegray) or gray
+ local characters = tfmdata.characters
+ local resources = tfmdata.resources
+ local additions = { }
+ local private = resources.private
+ for unicode, old_c in next, characters do
+ private = private + 1
+ local width = old_c.width or 0
+ local height = old_c.height or 0
+ local depth = old_c.depth or 0
+ local new_c
+ if depth == 0 then
+ new_c = {
+ width = width,
+ height = height,
+ commands = {
+ push,
+ gray,
+ rulecache[height][width],
+ black,
+ pop,
+ { "slot", 1, private },
+ }
+ }
+ else
+ new_c = {
+ width = width,
+ height = height,
+ depth = depth,
+ commands = {
+ push,
+ downcache[depth],
+ gray,
+ rulecache[height+depth][width],
+ black,
+ pop,
+ { "slot", 1, private },
+ }
+ }
+ end
+ setmetatableindex(new_c,old_c)
+ characters[unicode] = new_c
+ additions[private] = old_c
+ end
+ for k, v in next, additions do
+ characters[k] = v
+ end
+ resources.private = private
+ end
+end
+
+fonts.constructors.newfeatures("otf").register {
+ name = "boundingbox",
+ description = "show boundingbox",
+ manipulators = {
+ base = showboundingbox,
+ node = showboundingbox,
+ }
+}
+
-- -- historic stuff, move from font-ota (handled differently, typo-rep)
--
-- local delete_node = nodes.delete
diff --git a/tex/context/base/font-gds.mkiv b/tex/context/base/font-gds.mkiv
index 6e56c7f0a..d0c5be17d 100644
--- a/tex/context/base/font-gds.mkiv
+++ b/tex/context/base/font-gds.mkiv
@@ -17,8 +17,6 @@
\unprotect
-\def\loadfontgoodies[#1]{\ctxcommand{loadfontgoodies("#1")}}
-
% this will become colorgroups and move to font-col or so
\definecolor[colorscheme:1:1][s=.75]
@@ -39,12 +37,16 @@
\definesystemattribute[colorscheme][public]
-\def\setfontcolorscheme % will move to the lua end
+\unexpanded\def\loadfontgoodies[#1]%
+ {\ctxcommand{loadfontgoodies("#1")}}
+
+\unexpanded\def\setfontcolorscheme % will move to the lua end
{\ctxcommand{enablefontcolorschemes()}%
\xdef\setfontcolorscheme[##1]{\attribute\colorschemeattribute##1\relax}%
\setfontcolorscheme}
-\edef\resetfontcolorscheme{\attribute\colorschemeattribute\attributeunsetvalue}
+\unexpanded\def\resetfontcolorscheme
+ {\attribute\colorschemeattribute\attributeunsetvalue}
\protect \endinput
diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv
index 14376b733..4f0c40e7f 100644
--- a/tex/context/base/font-ini.mkiv
+++ b/tex/context/base/font-ini.mkiv
@@ -144,14 +144,14 @@
%
% \dostepwiserecurse{2}{15}{1}
% {{\switchtobodyfont[\recurselevel pt]\crap test}\endgraf}
-
+
% adapted, else wrong interlinespace
\unexpanded\def\setfontparameters
{\synchronizefontsfalse
\the\everybodyfont
\synchronizefontstrue}
-
+
% handy
\newcounter\pushedfont
@@ -452,19 +452,12 @@
%D We define some (very private) constants to improve speed,
%D memory usage and consistency.
-\def\@size@ {@f@si@} % bodyfont size prefix (12pt etc)
-\def\@style@ {@f@st@} % full style prefix (roman etc)
-\def\@shortstyle@ {@f@sh@} % short style prefix (rm etc)
-\def\@letter@ {@f@le@} % first alternative typeface
-\def\@noletter@ {@f@no@} % second alternative typeface
-\def\@fontclass@ {@f@cl@} % fontclass
-
-% \edef\@size@ {\??fh:b:} % bodyfont size prefix (12pt etc)
-% \edef\@style@ {\??fh:f:} % full style prefix (roman etc)
-% \edef\@shortstyle@ {\??fh:s:} % short style prefix (rm etc)
-% \edef\@letter@ {\??fh:l:} % first alternative typeface
-% \edef\@noletter@ {\??fh:n:} % second alternative typeface
-% \edef\@fontclass@ {\??fh:c:} % fontclass
+\installcorenamespace {fontfile} % file synonyms
+\installcorenamespace {fontsize} % bodyfont size prefix (12pt etc)
+\installcorenamespace {fontstyle} % full style prefix (roman etc)
+\installcorenamespace {fontshortstyle} % short style prefix (rm etc)
+\installcorenamespace {fontclassyes} % fontclass
+\installcorenamespace {fontclassnop} % nofontclass
%D \macros
%D {fontclass, defaultfontclass}
@@ -477,6 +470,24 @@
\let\fontclass \empty
\let\defaultfontclass\empty
+\def\fontclassname#1#2%
+ {\ifcsname\??fontfile#1#2\endcsname
+ \fontclassname{#1}{\csname\??fontfile#1#2\endcsname}%
+ \else\ifcsname\??fontfile#2\endcsname
+ \fontclassname{#1}{\csname\??fontfile#2\endcsname}%
+ \else
+ #2%
+ \fi\fi}
+
+\def\defineclassfontsynonym
+ {\dotripleargument\dodefineclassfontsynonym}
+
+\def\dodefineclassfontsynonym[#1][#2][#3]%
+ {\definefontsynonym[#1][\fontclassname{#2}{#3}]}
+
+%\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}]
+%
+%\defineclassfontsynonym [KopFont] [officina] [SerifBold]
%D \macros
%D {textonly}
%D
@@ -761,24 +772,27 @@
\ifconditional\pseudoboldmathstate\plussix\else\plusthree\fi
\fi}
-\letvalue{\??ff:\c!mr:\c!tf }\synchronizemathfamilymr
-\letvalue{\??ff:\c!mr:\c!sl }\synchronizemathfamilymr
-\letvalue{\??ff:\c!mr:\c!it }\synchronizemathfamilymr
-\letvalue{\??ff:\c!mr:\c!bf }\synchronizemathfamilymb
-\letvalue{\??ff:\c!mr:\c!bs }\synchronizemathfamilymb
-\letvalue{\??ff:\c!mr:\c!bi }\synchronizemathfamilymb
-\letvalue{\??ff:\c!mr:\empty}\synchronizemathfamilymr
+\installcorenamespace{fontmathsynchronizer}
+\installcorenamespace{fontmathstoredstrategy}
+
+\letvalue{\??fontmathsynchronizer\c!tf }\synchronizemathfamilymr
+\letvalue{\??fontmathsynchronizer\c!sl }\synchronizemathfamilymr
+\letvalue{\??fontmathsynchronizer\c!it }\synchronizemathfamilymr
+\letvalue{\??fontmathsynchronizer\c!bf }\synchronizemathfamilymb
+\letvalue{\??fontmathsynchronizer\c!bs }\synchronizemathfamilymb
+\letvalue{\??fontmathsynchronizer\c!bi }\synchronizemathfamilymb
+\letvalue{\??fontmathsynchronizer\empty}\synchronizemathfamilymr
\def\synchronizemathfamily
- {\csname\??ff:\c!mr:\ifcsname\??ff:\c!mr:\fontalternative\endcsname\fontalternative\fi\endcsname}
+ {\csname\??fontmathsynchronizer\ifcsname\??fontmathsynchronizer\fontalternative\endcsname\fontalternative\fi\endcsname}
-\ifdefined\fontid
+\ifdefined \fontid
\appendtoks
\ifnum\fontid\textfont\zerocount=\fontid\textfont\plusthree
- \letvalue{\??ff:ms:\fontclass}\dosetmathpartialboldstrategy % enables partial bold math
+ \letvalue{\??fontmathstoredstrategy\fontclass}\dosetmathpartialboldstrategy % enables partial bold math
\else
- \letvalue{\??ff:ms:\fontclass}\dosetmathfullboldstrategy % enables full bold math
+ \letvalue{\??fontmathstoredstrategy\fontclass}\dosetmathfullboldstrategy % enables full bold math
\fi
\to \mathstrategies
@@ -788,15 +802,15 @@
\edef\currentmathfontmr{\fontname\textfont\zerocount}%
\edef\currentmathfontmb{\fontname\textfont\plusthree}%
\ifx\currentmathfontmr\currentmathfontmb
- \letvalue{\??ff:ms:\fontclass}\dosetmathpartialboldstrategy % enables partial bold math
+ \letvalue{\??fontmathstoredstrategy\fontclass}\dosetmathpartialboldstrategy % enables partial bold math
\else
- \letvalue{\??ff:ms:\fontclass}\dosetmathfullboldstrategy % enables full bold math
+ \letvalue{\??fontmathstoredstrategy\fontclass}\dosetmathfullboldstrategy % enables full bold math
\fi
\to \mathstrategies
\fi
-\def\synchronizemathboldstrategy {\csname\??ff:ms:\fontclass\endcsname}
+\def\synchronizemathboldstrategy {\csname\??fontmathstoredstrategy\fontclass\endcsname}
\newconditional\pseudoboldmathstate
@@ -990,7 +1004,7 @@
% sets \scaledfontmode and \somefontname and \somefontsize
\ifcase\scaledfontmode\relax
% none, avoid the designsize if possible
- \scaledfontsize-1000\scaledpoint
+ \scaledfontsize-\plusthousand\scaledpoint
\or
% at
\scaledfontsize\somefontsize
@@ -1058,40 +1072,40 @@
% resolve
\def\@@thefeaturesyes#1%
- {\ifcsname\??ff\fontclass#1\s!features \endcsname\@EA\let\@EA\@@fontfeatures \csname\??ff\fontclass#1\s!features \endcsname\else
- \ifcsname\??ff #1\s!features \endcsname\@EA\let\@EA\@@fontfeatures \csname\??ff #1\s!features \endcsname\else
- \ifcsname\??ff\fontclass #1\endcsname\@EA \@@thefeaturesyes \csname\??ff\fontclass #1\endcsname\else
- \ifcsname\??ff #1\endcsname\@EA \@@thefeaturesyes \csname\??ff #1\endcsname\else
- \let \@@fontfeatures \empty \fi\fi\fi\fi}
+ {\ifcsname\??fontfile\fontclass#1\s!features \endcsname\@EA\let\@EA\@@fontfeatures \csname\??fontfile\fontclass#1\s!features \endcsname\else
+ \ifcsname\??fontfile #1\s!features \endcsname\@EA\let\@EA\@@fontfeatures \csname\??fontfile #1\s!features \endcsname\else
+ \ifcsname\??fontfile\fontclass #1\endcsname\@EA \@@thefeaturesyes \csname\??fontfile\fontclass #1\endcsname\else
+ \ifcsname\??fontfile #1\endcsname\@EA \@@thefeaturesyes \csname\??fontfile #1\endcsname\else
+ \let \@@fontfeatures \empty \fi\fi\fi\fi}
\def\@@thefallbacksyes#1%
- {\ifcsname\??ff\fontclass#1\s!fallbacks\endcsname\@EA\let\@EA\@@fontfallbacks \csname\??ff\fontclass#1\s!fallbacks\endcsname\else
- \ifcsname\??ff #1\s!fallbacks\endcsname\@EA\let\@EA\@@fontfallbacks \csname\??ff #1\s!fallbacks\endcsname\else
- \ifcsname\??ff\fontclass #1\endcsname\@EA \@@thefallbacksyes\csname\??ff\fontclass #1\endcsname\else
- \ifcsname\??ff #1\endcsname\@EA \@@thefallbacksyes\csname\??ff #1\endcsname\else
- \let \@@fontfallbacks \empty \fi\fi\fi\fi}
+ {\ifcsname\??fontfile\fontclass#1\s!fallbacks\endcsname\@EA\let\@EA\@@fontfallbacks \csname\??fontfile\fontclass#1\s!fallbacks\endcsname\else
+ \ifcsname\??fontfile #1\s!fallbacks\endcsname\@EA\let\@EA\@@fontfallbacks \csname\??fontfile #1\s!fallbacks\endcsname\else
+ \ifcsname\??fontfile\fontclass #1\endcsname\@EA \@@thefallbacksyes\csname\??fontfile\fontclass #1\endcsname\else
+ \ifcsname\??fontfile #1\endcsname\@EA \@@thefallbacksyes\csname\??fontfile #1\endcsname\else
+ \let \@@fontfallbacks \empty \fi\fi\fi\fi}
\def\@@thegoodiesyes#1%
- {\ifcsname\??ff\fontclass#1\s!goodies \endcsname\@EA\let\@EA\@@fontgoodies \csname\??ff\fontclass#1\s!goodies \endcsname\else
- \ifcsname\??ff #1\s!goodies \endcsname\@EA\let\@EA\@@fontgoodies \csname\??ff #1\s!goodies \endcsname\else
- \ifcsname\??ff\fontclass #1\endcsname\@EA \@@thegoodiesyes \csname\??ff\fontclass #1\endcsname\else
- \ifcsname\??ff #1\endcsname\@EA \@@thegoodiesyes \csname\??ff #1\endcsname\else
- \let \@@fontgoodies \empty \fi\fi\fi\fi}
+ {\ifcsname\??fontfile\fontclass#1\s!goodies \endcsname\@EA\let\@EA\@@fontgoodies \csname\??fontfile\fontclass#1\s!goodies \endcsname\else
+ \ifcsname\??fontfile #1\s!goodies \endcsname\@EA\let\@EA\@@fontgoodies \csname\??fontfile #1\s!goodies \endcsname\else
+ \ifcsname\??fontfile\fontclass #1\endcsname\@EA \@@thegoodiesyes \csname\??fontfile\fontclass #1\endcsname\else
+ \ifcsname\??fontfile #1\endcsname\@EA \@@thegoodiesyes \csname\??fontfile #1\endcsname\else
+ \let \@@fontgoodies \empty \fi\fi\fi\fi}
\def\@@thefeaturesnop#1%
- {\ifcsname\??ff#1\s!features \endcsname\@EA\let\@EA\@@fontfeatures \csname\??ff#1\s!features \endcsname\else
- \ifcsname\??ff #1\endcsname\@EA \@@thefeaturesnop \csname\??ff #1\endcsname\else
- \let \@@fontfeatures \empty \fi\fi}
+ {\ifcsname\??fontfile#1\s!features \endcsname\@EA\let\@EA\@@fontfeatures \csname\??fontfile#1\s!features \endcsname\else
+ \ifcsname\??fontfile #1\endcsname\@EA \@@thefeaturesnop \csname\??fontfile #1\endcsname\else
+ \let \@@fontfeatures \empty \fi\fi}
\def\@@thefallbacksnop#1%
- {\ifcsname\??ff#1\s!fallbacks\endcsname\@EA\let\@EA\@@fontfallbacks \csname\??ff#1\s!fallbacks\endcsname\else
- \ifcsname\??ff #1\endcsname\@EA \@@thefallbacksnop\csname\??ff #1\endcsname\else
- \let \@@fontfallbacks \empty \fi\fi}
+ {\ifcsname\??fontfile#1\s!fallbacks\endcsname\@EA\let\@EA\@@fontfallbacks \csname\??fontfile#1\s!fallbacks\endcsname\else
+ \ifcsname\??fontfile #1\endcsname\@EA \@@thefallbacksnop\csname\??fontfile #1\endcsname\else
+ \let \@@fontfallbacks \empty \fi\fi}
\def\@@thegoodiesnop#1%
- {\ifcsname\??ff#1\s!goodies \endcsname\@EA\let\@EA\@@fontgoodies \csname\??ff#1\s!goodies \endcsname\else
- \ifcsname\??ff #1\endcsname\@EA \@@thegoodiesnop \csname\??ff #1\endcsname\else
- \let \@@fontgoodies \empty \fi\fi}
+ {\ifcsname\??fontfile#1\s!goodies \endcsname\@EA\let\@EA\@@fontgoodies \csname\??fontfile#1\s!goodies \endcsname\else
+ \ifcsname\??fontfile #1\endcsname\@EA \@@thegoodiesnop \csname\??fontfile #1\endcsname\else
+ \let \@@fontgoodies \empty \fi\fi}
\def\updatefontparametersyes
{\@@thefeaturesyes \somefontname
@@ -1260,11 +1274,11 @@
\fi}
\def\dodefinefontsynonymnop
- {\@EA\let\csname\??ff\@@fontname\endcsname\@@fontfile % maybe just #1 #3, saves expansion
+ {\@EA\let\csname\??fontfile\@@fontname\endcsname\@@fontfile % maybe just #1 #3, saves expansion
\doifnextoptionalelse\dododefinefontsynonymnop\nonodefinefontsynonymnop}
\def\dodefinefontsynonymyes
- {\@EA\let\csname\??ff\fontclass\@@fontname\endcsname\@@fontfile % maybe just #1 #3, saves expansion
+ {\@EA\let\csname\??fontfile\fontclass\@@fontname\endcsname\@@fontfile % maybe just #1 #3, saves expansion
\doifnextoptionalelse\dododefinefontsynonymyes\nonodefinefontsynonymyes}
\def\dododefinefontsynonymnop[#1]%
@@ -1305,24 +1319,24 @@
% end of helpers
\def\nonodefinefontsynonymnop
- {\@EA\let\csname\??ff\@@fontname\s!features \endcsname\undefined
- \@EA\let\csname\??ff\@@fontname\s!fallbacks\endcsname\undefined
- \@EA\let\csname\??ff\@@fontname\s!goodies \endcsname\undefined}
+ {\@EA\let\csname\??fontfile\@@fontname\s!features \endcsname\undefined
+ \@EA\let\csname\??fontfile\@@fontname\s!fallbacks\endcsname\undefined
+ \@EA\let\csname\??fontfile\@@fontname\s!goodies \endcsname\undefined}
\def\nonodefinefontsynonymyes
- {\global\@EA\let\csname\??ff\fontclass\@@fontname\s!features \endcsname\undefined
- \global\@EA\let\csname\??ff\fontclass\@@fontname\s!fallbacks\endcsname\undefined
- \global\@EA\let\csname\??ff\fontclass\@@fontname\s!goodies \endcsname\undefined}
+ {\global\@EA\let\csname\??fontfile\fontclass\@@fontname\s!features \endcsname\undefined
+ \global\@EA\let\csname\??fontfile\fontclass\@@fontname\s!fallbacks\endcsname\undefined
+ \global\@EA\let\csname\??fontfile\fontclass\@@fontname\s!goodies \endcsname\undefined}
\def\dodododefinefontsynonymnop
- {\@EA\let\csname\??ff\@@fontname\s!features \endcsname\@@ff@@features
- \@EA\let\csname\??ff\@@fontname\s!fallbacks\endcsname\@@ff@@fallbacks
- \@EA\let\csname\??ff\@@fontname\s!goodies \endcsname\@@ff@@goodies}
+ {\@EA\let\csname\??fontfile\@@fontname\s!features \endcsname\@@ff@@features
+ \@EA\let\csname\??fontfile\@@fontname\s!fallbacks\endcsname\@@ff@@fallbacks
+ \@EA\let\csname\??fontfile\@@fontname\s!goodies \endcsname\@@ff@@goodies}
\def\dodododefinefontsynonymyes
- {\global\@EA\let\csname\??ff\fontclass\@@fontname\s!features \endcsname\@@ff@@features
- \global\@EA\let\csname\??ff\fontclass\@@fontname\s!fallbacks\endcsname\@@ff@@fallbacks
- \global\@EA\let\csname\??ff\fontclass\@@fontname\s!goodies \endcsname\@@ff@@goodies}
+ {\global\@EA\let\csname\??fontfile\fontclass\@@fontname\s!features \endcsname\@@ff@@features
+ \global\@EA\let\csname\??fontfile\fontclass\@@fontname\s!fallbacks\endcsname\@@ff@@fallbacks
+ \global\@EA\let\csname\??fontfile\fontclass\@@fontname\s!goodies \endcsname\@@ff@@goodies}
\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater
@@ -1336,23 +1350,23 @@
{\@EA\dotruefontname#1*\empty*\relax}
\def\dotruefontname#1*#2#3*#4\relax
- {\ifcsname\??ff\fontclass#1\endcsname
+ {\ifcsname\??fontfile\fontclass#1\endcsname
\ifx#2\empty
- \@EA\truefontname\csname\??ff\fontclass#1\endcsname
+ \@EA\truefontname\csname\??fontfile\fontclass#1\endcsname
\else
- \@EA\redotruefontname\csname\??ff\fontclass#1\endcsname*#2#3%
+ \@EA\redotruefontname\csname\??fontfile\fontclass#1\endcsname*#2#3%
\fi
- \else\ifcsname\??ff\defaultfontclass#1\endcsname
+ \else\ifcsname\??fontfile\defaultfontclass#1\endcsname
\ifx#2\empty
- \@EA\truefontname\csname\??ff\defaultfontclass#1\endcsname
+ \@EA\truefontname\csname\??fontfile\defaultfontclass#1\endcsname
\else
- \@EA\redotruefontname\csname\??ff\defaultfontclass#1\endcsname*#2#3%
+ \@EA\redotruefontname\csname\??fontfile\defaultfontclass#1\endcsname*#2#3%
\fi
- \else\ifcsname\??ff#1\endcsname
+ \else\ifcsname\??fontfile#1\endcsname
\ifx#2\empty
- \@EA\truefontname\csname\??ff#1\endcsname
+ \@EA\truefontname\csname\??fontfile#1\endcsname
\else
- \@EA\redotruefontname\csname\??ff#1\endcsname*#2#3%
+ \@EA\redotruefontname\csname\??fontfile#1\endcsname*#2#3%
\fi
\else
#1\ifx#2\empty\else*#2#3\fi
@@ -1362,27 +1376,27 @@
{\@EA\dodotruefontname#1*\relax}
\def\dodotruefontname#1*#2\relax
- {\ifcsname\??ff\fontclass#1\endcsname
- \@EA\redotruefontname\csname\??ff\fontclass#1\endcsname
- \else\ifcsname\??ff\defaultfontclass#1\endcsname
- \@EA\redotruefontname\csname\??ff\defaultfontclass#1\endcsname
- \else\ifcsname\??ff#1\endcsname
- \@EA\redotruefontname\csname\??ff#1\endcsname
+ {\ifcsname\??fontfile\fontclass#1\endcsname
+ \@EA\redotruefontname\csname\??fontfile\fontclass#1\endcsname
+ \else\ifcsname\??fontfile\defaultfontclass#1\endcsname
+ \@EA\redotruefontname\csname\??fontfile\defaultfontclass#1\endcsname
+ \else\ifcsname\??fontfile#1\endcsname
+ \@EA\redotruefontname\csname\??fontfile#1\endcsname
\else
#1%
\fi\fi\fi}
\def\expandfontsynonym#1#2% #2 := onelevelexpansion(#1)
- {\ifcsname\??ff\fontclass#2\endcsname
- \expandafter\def\expandafter#1\expandafter{\csname\??ff\fontclass#2\endcsname}%
- \else\ifcsname\??ff\defaultfontclass#2\endcsname
- \expandafter\def\expandafter#1\expandafter{\csname\??ff\defaultfontclass#2\endcsname}%
+ {\ifcsname\??fontfile\fontclass#2\endcsname
+ \expandafter\def\expandafter#1\expandafter{\csname\??fontfile\fontclass#2\endcsname}%
+ \else\ifcsname\??fontfile\defaultfontclass#2\endcsname
+ \expandafter\def\expandafter#1\expandafter{\csname\??fontfile\defaultfontclass#2\endcsname}%
\fi\fi}
\def\doifelsefontsynonym#1%
- {\ifcsname\??ff\fontclass#1\endcsname
+ {\ifcsname\??fontfile\fontclass#1\endcsname
\expandafter\firstoftwoarguments
- \else\ifcsname\??ff\defaultfontclass#1\endcsname
+ \else\ifcsname\??fontfile\defaultfontclass#1\endcsname
\doubleexpandafter\firstoftwoarguments
\else
\doubleexpandafter\secondoftwoarguments
@@ -1417,10 +1431,10 @@
%D A goody:
\def\tracedfontname#1%
- {#1\ifcsname\??ff\fontclass#1\endcsname
- \@EA\tracedfontname\csname\??ff\fontclass#1\endcsname
- \else\ifcsname\??ff#1\endcsname
- \@EA\tracedfontname\csname\??ff#1\endcsname
+ {#1\ifcsname\??fontfile\fontclass#1\endcsname
+ \@EA\tracedfontname\csname\??fontfile\fontclass#1\endcsname
+ \else\ifcsname\??fontfile#1\endcsname
+ \@EA\tracedfontname\csname\??fontfile#1\endcsname
\fi\fi}
%D \macros
@@ -1817,11 +1831,11 @@
%\@@endfontdef
% new code, see remark
\ifproductionrun
- \ifcsname\@size@#1\endcsname
+ \ifcsname\??fontsize#1\endcsname
% only once
\else
% prevent loop (hence \empty)
- \letvalueempty{\@size@#1}%
+ \letvalueempty{\??fontsize#1}%
\pushmacro\fontclass % new per 26102009
\edef\fontclass{#2}% % new per 26102009
\defineunknownfont{#1}%
@@ -1829,7 +1843,7 @@
\fi
\fi
% so far
- \setvalue{\@size@#1}{\docompletefontswitch[#1]}}
+ \setvalue{\??fontsize#1}{\docompletefontswitch[#1]}}
%D {\bf Remark:} We need to cover the following cases,
%D otherwise users can get confused:
@@ -1880,15 +1894,15 @@
[\??ft#1\tempbodyfontsize][\??ft\s!default]
[\c!interlinespace,\c!em]%
%\ifproductionrun
- \ifcsname\@size@\tempbodyfontsize\endcsname \else
- \letvalueempty{\@size@\tempbodyfontsize}% prevent loop
+ \ifcsname\??fontsize\tempbodyfontsize\endcsname \else
+ \letvalueempty{\??fontsize\tempbodyfontsize}% prevent loop
\pushmacro\fontclass
\edef\fontclass{#1}%
\normalexpanded{\defineunknownfont{\tempbodyfontsize}}% we can also inherit here
\popmacro\fontclass
\fi
%\fi
- \setevalue{\@size@#1}{\noexpand\docompletefontswitch[#1]}%
+ \setevalue{\??fontsize#1}{\noexpand\docompletefontswitch[#1]}%
\@@endfontdef}
% this one already catches both define/setup
@@ -2035,10 +2049,10 @@
\else
% Maybe there are default dependencies defined which we can use ([unknown]) and
% if not, then we have at least to make sure some basics are set up.
- \ifcsname\@size@#1\endcsname \else
+ \ifcsname\??fontsize#1\endcsname \else
\defineunknownfont{#1}%
\fi
- \ifcsname\@size@#1\endcsname \else
+ \ifcsname\??fontsize#1\endcsname \else
\definebodyfont[#1][\c!rm][]%
\fi
\fi\fi}
@@ -2174,7 +2188,7 @@
\fi}
\def\dodefineunknownsubfont#1#2%
- {\ifcsname\@size@\csname\??ft#1#2\endcsname\endcsname
+ {\ifcsname\??fontsize\csname\??ft#1#2\endcsname\endcsname
\else
\donetrue
\defineunknownfont{\csname\??ft#1#2\endcsname}%
@@ -2194,7 +2208,7 @@
{\dodefineunknownbodyfont{#1}}%
\ifdone
\donefalse
- \setvalue{\@size@#1}{\docompletefontswitch[#1]}%
+ \setvalue{\??fontsize#1}{\docompletefontswitch[#1]}%
\ifdefiningunknownfont \else
\definingunknownfonttrue
\processcommacommand[\fontrelativesizelist]{\dodefineunknownsubfont{#1}}%
@@ -2314,12 +2328,12 @@
{\normalexpanded{\dodoswitchpoints{#1}}}
\unexpanded\def\dodoswitchpoints#1%
- {\ifcsname\@size@#1\endcsname \else
+ {\ifcsname\??fontsize#1\endcsname \else
\defineunknownfont{#1}%
\fi%
%\defineunknownfontstyles{#1}%
- \ifcsname\@size@#1\endcsname
- \csname\@size@#1\endcsname
+ \ifcsname\??fontsize#1\endcsname
+ \csname\??fontsize#1\endcsname
\localbodyfontsize#1\relax
% \edef\fontbody{\fontbody}% to be tested but we can clean up mkiv further
\edef\normalizedbodyfontsize{\thenormalizedbodyfontsize\localbodyfontsize}%
@@ -2329,8 +2343,8 @@
\fi}
\unexpanded\def\doswitchstyle[#1]%
- {\ifcsname\@style@#1\endcsname
- \csname\@style@#1\endcsname
+ {\ifcsname\??fontstyle#1\endcsname
+ \csname\??fontstyle#1\endcsname
\edef\fontstyle{#1}%
\ifmmode\mr\fi % in order to be compatible with \rm in math mode
% \the\everybodyfont % cleaner, in setting size as well as style
@@ -2526,7 +2540,7 @@
\let\fontstyle\empty % new 31/7/2006
\let\fontsize \empty
\else
- \ifcsname\@style@\expandedfontthing\endcsname
+ \ifcsname\??fontstyle\expandedfontthing\endcsname
\let\fontstyle\expandedfontthing
\else
\setcurrentfontclass\expandedfontthing
@@ -2547,10 +2561,10 @@
\def\dodododosetfont#1#2#3% #1 = set/switch state
{\edef\normalizedsetfont{\thenormalizedbodyfontsize{#2}}%
- \ifcsname\@size@\normalizedsetfont\endcsname \else
+ \ifcsname\??fontsize\normalizedsetfont\endcsname \else
\defineunknownfont{#2}%
\fi
- \ifcsname\@size@\normalizedsetfont\endcsname
+ \ifcsname\??fontsize\normalizedsetfont\endcsname
\localbodyfontsize\normalizedsetfont
\let\normalizedbodyfontsize\normalizedsetfont
\else
@@ -2592,14 +2606,12 @@
% we need to check the fontclass
\def\registerfontclass#1%
- {\letgvalue{\@fontclass@#1}\v!yes} % global ?
-
-\edef\@no@fontclass@{\@fontclass@:?:}
+ {\letgvalue{\??fontclassyes#1}\v!yes} % global ?
\def\setcurrentfontclass#1%
- {\ifcsname\@fontclass@#1\endcsname
+ {\ifcsname\??fontclassyes#1\endcsname
\edef\fontclass{#1}%
- \else\ifcsname\@no@fontclass@#1\endcsname
+ \else\ifcsname\??fontclassnop#1\endcsname
% already tried
\else % too messy: \ifcase\currentgrouplevel % (unpredictable)
\trycurrentfontclass{#1}%
@@ -2618,23 +2630,23 @@
{\ifconditional\autotypescripts
% try to load typescript #1
\usetypescript[#1]%
- \ifcsname\@fontclass@#1\endcsname
+ \ifcsname\??fontclassyes#1\endcsname
\edef\fontclass{#1}%
\else
% try to load type-#1.mkiv
\usetypescriptfile[\f!typeprefix#1]%
% try to load typescript #1
\usetypescript[#1]%
- \ifcsname\@fontclass@#1\endcsname
+ \ifcsname\??fontclassyes#1\endcsname
\edef\fontclass{#1}%
\else
% todo: message
- \letvalueempty{\@no@fontclass@#1}%
+ \letvalueempty{\??fontclassnop#1}%
\fi
\fi
\else
% todo: message
- \letvalueempty{\@no@fontclass@#1}%
+ \letvalueempty{\??fontclassnop#1}%
\fi}
\let\defaultfontstyle \c!rm
@@ -2987,8 +2999,8 @@
%D \stoptyping
\def\dododefinefontstyle#1#2%
- {\setvalue{\@shortstyle@#2}{#1}%
- \setvalue{\@style@#2}{\csname#1\endcsname}}
+ {\setvalue{\??fontshortstyle#2}{#1}%
+ \setvalue{\??fontstyle #2}{\csname#1\endcsname}}
\def\dodefinefontstyle[#1][#2]%
{\rawdoifinsetelse{#2}{\fontstylelist}{}{\addtocommalist{#2}\fontstylelist}%
@@ -3091,12 +3103,12 @@
\def\fastswitchtobodyfont#1%
{\ifcsname\??ft\normalizedbodyfontsize#1\endcsname
\edef\futurebodyfontsize{\csname\??ft\normalizedbodyfontsize#1\endcsname}%
- \ifcsname\@size@\futurebodyfontsize\endcsname
- \csname\@size@\futurebodyfontsize\endcsname
+ \ifcsname\??fontsize\futurebodyfontsize\endcsname
+ \csname\??fontsize\futurebodyfontsize\endcsname
\localbodyfontsize\futurebodyfontsize\relax
\fi
\fi
- \csname\@style@\fontstyle\endcsname
+ \csname\??fontstyle\fontstyle\endcsname
\the\everybodyfont}
%D \starttyping
@@ -3345,7 +3357,7 @@
{\complexswitchstyleonly[\checkedstrippedcsname#1]}
\def\complexswitchstyleonly[#1]% todo : check
- {\setcurrentfontstyle{\csname\@shortstyle@#1\endcsname}%
+ {\setcurrentfontstyle{\csname\??fontshortstyle#1\endcsname}%
\the\everybodyfont} % needed ?
%D \macros
@@ -4019,37 +4031,37 @@
\s!Serif \fi\fi\fi}
% potential generalization:
-
-% \letvalue{\??ff:t:\c!rm}\s!Serif
-% \letvalue{\??ff:t:\c!ss}\s!Sans
-% \letvalue{\??ff:t:\c!tt}\s!Mono
%
-% \letvalue{\??ff:s:\c!bf}\s!Bold
-% \letvalue{\??ff:s:\c!sl}\s!Slanted
-% \letvalue{\??ff:s:\c!it}\s!Italic
-% \letvalue{\??ff:s:\c!bs}\s!BoldSlanted
-% \letvalue{\??ff:s:\c!bi}\s!BoldItalic
+% \letvalue{\??fontfile:t:\c!rm}\s!Serif
+% \letvalue{\??fontfile:t:\c!ss}\s!Sans
+% \letvalue{\??fontfile:t:\c!tt}\s!Mono
%
-% \letvalue{\??ff:a:\c!rm}\s!Regular
-% \letvalue{\??ff:a:\c!ss}\s!Support
-% \letvalue{\??ff:a:\c!tt}\s!Type
+% \letvalue{\??fontfile:s:\c!bf}\s!Bold
+% \letvalue{\??fontfile:s:\c!sl}\s!Slanted
+% \letvalue{\??fontfile:s:\c!it}\s!Italic
+% \letvalue{\??fontfile:s:\c!bs}\s!BoldSlanted
+% \letvalue{\??fontfile:s:\c!bi}\s!BoldItalic
%
-% \def\fontstringA{\executeifdefined{\??ff:t:\fontstyle}\s!Serif}
-% \def\fontstringB{\executeifdefined{\??ff:a:\fontstyle}\s!Serif}
-% \def\fontstringC{\executeifdefined{\??ff:s:\fontstyle}\empty}
-% \def\fontstringD{\executeifdefined{\??ff:t:\csname\??tf\fontclass\s!default\endcsname}\s!Serif}
+% \letvalue{\??fontfile:a:\c!rm}\s!Regular
+% \letvalue{\??fontfile:a:\c!ss}\s!Support
+% \letvalue{\??fontfile:a:\c!tt}\s!Type
+%
+% \def\fontstringA{\executeifdefined{\??fontfile:t:\fontstyle}\s!Serif}
+% \def\fontstringB{\executeifdefined{\??fontfile:a:\fontstyle}\s!Serif}
+% \def\fontstringC{\executeifdefined{\??fontfile:s:\fontstyle}\empty}
+% \def\fontstringD{\executeifdefined{\??fontfile:t:\csname\??tf\fontclass\s!default\endcsname}\s!Serif}
\def\glyphfontfile#1%
{#1%
- \ifcsname\??ff#1\fontstringA\fontstringC\endcsname
+ \ifcsname\??fontfile#1\fontstringA\fontstringC\endcsname
\fontstringA\fontstringC
- \else\ifcsname\??ff#1\fontstringB\fontstringC\endcsname
+ \else\ifcsname\??fontfile#1\fontstringB\fontstringC\endcsname
\fontstringB\fontstringC
- \else\ifcsname\??ff#1\fontstringA\endcsname
+ \else\ifcsname\??fontfile#1\fontstringA\endcsname
\fontstringA
- \else\ifcsname\??ff#1\fontstringB\endcsname
+ \else\ifcsname\??fontfile#1\fontstringB\endcsname
\fontstringB
- \else\ifcsname\??ff#1\fontstringC\endcsname
+ \else\ifcsname\??fontfile#1\fontstringC\endcsname
\fontstringC
\fi\fi\fi\fi\fi}
@@ -4071,36 +4083,38 @@
%D Since we know what scaling it to be applied, we can
%D implement a much faster alternative:
+\installcorenamespace {symbolfont}
+
\let\thedefinedfont\relax
\def\setscaledstyledsymbolicfont#1#2#3% quite a slowdown, glyphfontfile
{\edef\askedsymbolfont{\truefontname{\glyphfontfile{#3}} at \the\dimexpr#2\dimexpr\currentfontbodyscale\dimexpr#1}%
- \ifcsname\??ss->\askedsymbolfont\endcsname
- \csname\??ss->\askedsymbolfont\endcsname
+ \ifcsname\??symbolfont\askedsymbolfont\endcsname
+ \csname\??symbolfont\askedsymbolfont\endcsname
\else
\dodefinesymbolicfont
\fi}
\def\setscaleddirectsymbolicfont#1#2#3% quite a slowdown, glyphfontfile
{\edef\askedsymbolfont{\truefontname{#3} at \the\dimexpr#2\dimexpr\currentfontbodyscale\dimexpr#1}%
- \ifcsname\??ss->\askedsymbolfont\endcsname
- \csname\??ss->\askedsymbolfont\endcsname
+ \ifcsname\??symbolfont\askedsymbolfont\endcsname
+ \csname\??symbolfont\askedsymbolfont\endcsname
\else
\dodefinesymbolicfont
\fi}
\def\setstyledsymbolicfont#1% quite a slowdown, glyphfontfile
{\edef\askedsymbolfont{\truefontname{\glyphfontfile{#1}} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}%
- \ifcsname\??ss->\askedsymbolfont\endcsname
- \csname\??ss->\askedsymbolfont\endcsname
+ \ifcsname\??symbolfont\askedsymbolfont\endcsname
+ \csname\??symbolfont\askedsymbolfont\endcsname
\else
\dodefinesymbolicfont
\fi}
\def\setdirectsymbolicfont#1%
{\edef\askedsymbolfont{\truefontname{#1} at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody}%
- \ifcsname\??ss->\askedsymbolfont\endcsname
- \csname\??ss->\askedsymbolfont\endcsname
+ \ifcsname\??symbolfont\askedsymbolfont\endcsname
+ \csname\??symbolfont\askedsymbolfont\endcsname
\else
\dodefinesymbolicfont
\fi}
@@ -4108,7 +4122,7 @@
\def\dodefinesymbolicfont
{\definefont[currentsymbolfont][\askedsymbolfont]%
\currentsymbolfont
- \global\expandafter\let\csname\??ss->\askedsymbolfont\endcsname\lastrawfontcall}
+ \global\expandafter\let\csname\??symbolfont\askedsymbolfont\endcsname\lastrawfontcall}
\unexpanded\def\getnamedglyphstyled#1#2{{\setstyledsymbolicfont{#1}\ctxcommand{fontchar("#2")}}}
\unexpanded\def\getnamedglyphdirect#1#2{{\setdirectsymbolicfont{#1}\ctxcommand{fontchar("#2")}}}
@@ -4490,31 +4504,47 @@
% definitions .. no tagging here
-\installcommandhandler \??cf {style} \??cf
+\installcorenamespace{style}
+\installcorenamespace{stylecheck}
+
+\installcommandhandler \??style {style} \??style
\appendtoks
- \letvalue{\??cf\currentstyle\s!check}\relax
- \setuevalue{\e!start\currentstyle}{\begingroup\use_defined_style{\currentstyle}}%
- \setuevalue{\e!stop \currentstyle}{\endgroup}%
- \setuevalue {\currentstyle}{\groupedcommand{\use_defined_style{\currentstyle}}{}}%
+ \letvalue{\??stylecheck\currentstyle}\relax
+ \setuevalue{\e!start\currentstyle}{\apply_style_start{\currentstyle}}%
+ \setuevalue{\e!stop \currentstyle}{\apply_style_stop}%
+ \setuevalue {\currentstyle}{\apply_style_grouped{\currentstyle}}% no longer groupedcommand here
\to \everydefinestyle
+\unexpanded\def\apply_style_start#1%
+ {\begingroup
+ \use_defined_style{#1}}
+
+\unexpanded\def\apply_style_stop
+ {\endgroup}
+
+\unexpanded\def\apply_style_grouped#1% assumes that the next is { or \bgroup
+ {\bgroup
+ \def\g_style{\use_defined_style{#1}}%
+ \afterassignment\g_style
+ \let\nexttoken}
+
\unexpanded\def\use_defined_style#1%
{\edef\currentstyle{#1}%
\usestylestyleandcolor\c!style\c!color}
\unexpanded\def\use_generic_style#1%
- {\getparameters[\??cf][\c!style=,\c!color=,#1]%
- \dousestyleparameter\@@cfstyle
- \dousecolorparameter\@@cfcolor}
+ {\let\currentstyle\s!unknown % reasonable generic tag
+ \setupcurrentstyle[\c!style=,\c!color=,#1]%
+ \usestylestyleandcolor\c!style\c!color}
% commands
-\unexpanded\def\style[#1]%
+\unexpanded\def\style[#1]% as this is can be a switch we use groupedcommand
{\csname style_%
\ifcsname#1\endcsname
nop%
- \else\ifcsname\??cf#1\s!check\endcsname
+ \else\ifcsname\??stylecheck#1\endcsname
use%
\else
yes%
@@ -4534,7 +4564,7 @@
\csname start_style_%
\ifcsname#1\endcsname
nop%
- \else\ifcsname\??cf#1\s!check\endcsname
+ \else\ifcsname\??stylecheck#1\endcsname
use%
\else
yes%
diff --git a/tex/context/base/grph-trf.mkiv b/tex/context/base/grph-trf.mkiv
index 2e7e497e2..754ea70d8 100644
--- a/tex/context/base/grph-trf.mkiv
+++ b/tex/context/base/grph-trf.mkiv
@@ -70,7 +70,11 @@
% we can let sx/sy win (first check)
-\installcommandhandler \??xy {scale} \??xy % we can have instances
+\installcorenamespace{scale}
+\installcorenamespace{scalegrid}
+\installcorenamespace{scalenorm}
+
+\installcommandhandler \??scale {scale} \??scale % we can have instances
\setupscale
[\c!sx=1,
@@ -112,7 +116,7 @@
\dowithnextboxcs\transforms_scale_finish\hbox}
\def\transforms_scale_finish
- {%
+ {% todo: p_scale_
\edef\p_scale {\scaleparameter\c!scale }%
\edef\p_xscale {\scaleparameter\c!xscale }%
\edef\p_yscale {\scaleparameter\c!yscale }%
@@ -251,18 +255,18 @@
\xdef\finalscaleboxxscale {\withoutpt\the\dimexpr\m_transforms_scale_temp_x\points/\plushundred\relax}%
\xdef\finalscaleboxyscale {\withoutpt\the\dimexpr\m_transforms_scale_temp_y\points/\plushundred\relax}}
-\setvalue{\??xy:\c!grid:\v!yes }{\getnoflines \d_transforms_scale_used_y_size\edef\p_height{\the\noflines\lineheight}}
-\setvalue{\??xy:\c!grid:\v!height }{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight+\strutdepth}}
-\setvalue{\??xy:\c!grid:\v!depth }{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight-\strutdepth}}
-\setvalue{\??xy:\c!grid:\v!halfline}{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight+.5\lineheight}}
-\setvalue{\??xy:\c!grid:\v!fit }{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\noflines\lineheight}}
-\letvalue{\??xy:\c!grid:\empty }\donothing
+\setvalue{\??scalegrid\v!yes }{\getnoflines \d_transforms_scale_used_y_size\edef\p_height{\the\noflines\lineheight}}
+\setvalue{\??scalegrid\v!height }{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight+\strutdepth}}
+\setvalue{\??scalegrid\v!depth }{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight-\strutdepth}}
+\setvalue{\??scalegrid\v!halfline}{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\dimexpr\noflines\lineheight+.5\lineheight}}
+\setvalue{\??scalegrid\v!fit }{\getrawnoflines\d_transforms_scale_used_y_size\edef\p_height{\the\noflines\lineheight}}
+\letvalue{\??scalegrid\empty }\donothing
\def\transforms_scale_check_parameters % resolve self referencing loops
{\ifx\p_maxwidth \empty\else \edef\p_maxwidth {\the\dimexpr\p_maxwidth }\fi
\ifx\p_maxheight\empty\else \edef\p_maxheight{\the\dimexpr\p_maxheight }\fi
\ifx\p_lines \empty\else \edef\p_height {\the\dimexpr\p_lines\lineheight}\fi
- \getvalue{\??xy:\c!grid:\scaleparameter\c!grid}}
+ \getvalue{\??scalegrid\scaleparameter\c!grid}}
\def\transforms_scale_by_nature % where ! ! ! ! !
{\ifx\p_width \empty\else \global\d_transforms_scale_used_x_size\p_width \fi
@@ -407,15 +411,15 @@
\fi}
\def\transforms_scale_calculate_norm#1#2% todo: swap 1 and 2 and pass one less
- {\csname\??ef:n:\ifcsname\??ef:n:#2\endcsname#2\else\s!unknown\fi\endcsname#1#2}
+ {\csname\??scalenorm\ifcsname\??scalenorm#2\endcsname#2\else\s!unknown\fi\endcsname#1#2}
-\setvalue{\??ef:n:\v!max }#1#2#3#4#5{\global#1#4}
-\setvalue{\??ef:n:\v!fit }#1#2#3#4#5{\global#1#5}
-\setvalue{\??ef:n:\v!broad }#1#2#3#4#5{\global#1\dimexpr#5-4\@@exbodyfont\relax}
-\setvalue{\??ef:n:\s!unknown}#1#2#3#4#5{\global#1\dimexpr#2\dimexpr\@@exbodyfont/10\relax\relax} % brr ex
-\setvalue{\??ef:n:\v!auto }#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi}
-\setvalue{\??ef:n:\empty }#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi}
-\setvalue{\??ef:n:\s!default}#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi}
+\setvalue{\??scalenorm\v!max }#1#2#3#4#5{\global#1#4}
+\setvalue{\??scalenorm\v!fit }#1#2#3#4#5{\global#1#5}
+\setvalue{\??scalenorm\v!broad }#1#2#3#4#5{\global#1\dimexpr#5-4\@@exbodyfont\relax}
+\setvalue{\??scalenorm\s!unknown}#1#2#3#4#5{\global#1\dimexpr#2\dimexpr\@@exbodyfont/10\relax\relax} % brr ex
+\setvalue{\??scalenorm\v!auto }#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi}
+\setvalue{\??scalenorm\empty }#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi}
+\setvalue{\??scalenorm\s!default}#1#2#3#4#5{\ifx#3\empty\else\global#1#3\fi}
\def\transforms_scale_calculate_scales#1#2#3#4%
{\scratchdimen\dimexpr#1/\dimexpr#2/\plusthousand\relax\relax
@@ -616,7 +620,7 @@
\setbox\nextbox\hbox % old
{\advance\!!dimenc -\@@cpleftoffset % new !
\advance\!!dimend -\@@cpbottomoffset % new ! % - added
- \hskip-\!!dimenc\lower\!!dimend\flushnextbox}% old
+ \hskip-\!!dimenc\lower\!!dimend\box\nextbox}% old
\wd\nextbox\zeropoint
\ht\nextbox\zeropoint
\dp\nextbox\zeropoint
@@ -631,7 +635,7 @@
\setbox\nextbox\hbox % new !
{\!!dimena-\@@cpleftoffset % new !
\!!dimenb \@@cpbottomoffset % new ! % - removed
- \hskip\!!dimena\lower\!!dimenb\flushnextbox}% new !
+ \hskip\!!dimena\lower\!!dimenb\box\nextbox}% new !
\wd\nextbox\!!dimena
\ht\nextbox\!!dimenb
\dp\nextbox\zeropoint
@@ -686,10 +690,327 @@
{\dontshowcomposition
\scratchdimen\wd\nextbox
% better use an hbox (if no \forgetall, leftskip etc may creep in)
- %\setbox\nextbox\vbox{\forgetall\dostartmirroring\hskip-\wd\nextbox\flushnextbox\dostopmirroring}%
- \setbox\nextbox\hbox{\dostartmirroring\hskip-\wd\nextbox\flushnextbox\dostopmirroring}%
+ %\setbox\nextbox\vbox{\forgetall\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}%
+ \setbox\nextbox\hbox{\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}%
\wd\nextbox\scratchdimen
\box\nextbox
\egroup}
+%D A couple of examples, demonstrating how the depth is
+%D taken care of:
+%D
+%D \startbuffer
+%D test\rotate[frame=on, rotation=0] {gans}%
+%D test\rotate[frame=on, rotation=90] {gans}%
+%D test\rotate[frame=on, rotation=180]{gans}%
+%D test\rotate[frame=on, rotation=270]{gans}%
+%D test
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+% When we rotate over arbitrary angles, we need to relocate the
+% resulting box because rotation brings that box onto the negative
+% axis. The calculations (mostly sin and cosine) need to be tuned for
+% the way a box is packages (i.e. the refence point). A typical example
+% of drawing, scribbling, and going back to the days of school math.
+%
+% We do a bit more calculations than needed, simply because that way
+% it's easier to debug the code.
+
+% Cleanup in progress ... todo: less boxing
+
+\installcorenamespace {rotate}
+\installcorenamespace {rotatelocation}
+\installcorenamespace {rotatepreset}
+
+% we can alias these to \d_layers-* to save some dimens or maybe have a generic
+% set of scratch variables
+
+% maybe just \rotation_...
+
+\newdimen\d_transforms_rotation_x_size
+\newdimen\d_transforms_rotation_y_size
+\newdimen\d_transforms_rotation_x_offset
+\newdimen\d_transforms_rotation_y_offset
+\newdimen\d_transforms_rotation_x_position
+\newdimen\d_transforms_rotation_y_position
+
+\newdimen\d_transforms_rotation_used_height
+
+\let\d_transforms_rotation_width \!!widtha
+\let\d_transforms_rotation_height\!!heighta
+\let\d_transforms_rotation_depth \!!deptha
+
+\let\d_transforms_rotation_saved_width \!!widthb
+\let\d_transforms_rotation_saved_height\!!heightb
+\let\d_transforms_rotation_saved_depth \!!depthb
+
+\newconditional\c_transforms_rotation_obey_depth
+\newconditional\c_transforms_rotation_not_fit
+\newconditional\c_transforms_rotation_center
+
+\installframedcommandhandler \??rotate {rotate} \??rotate
+
+\setuprotate
+ [\c!rotation=90,
+ \c!location=\v!normal,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
+ \c!offset=\v!overlay,
+ \c!frame=\v!off]
+
+\let\p_rotation_location\empty
+\let\p_rotation_rotation\empty
+
+\unexpanded\def\rotate % \bgroup: \rotate kan argument zijn
+ {\bgroup
+ \dosingleempty\transforms_rotate}
+
+\def\transforms_rotate[#1]%
+ {\iffirstargument
+ \setupcurrentrotate[#1]%
+ \fi
+ \edef\p_rotation_location{\rotateparameter\c!location}%
+ \edef\p_rotation_rotation{\rotateparameter\c!rotation}%
+ \csname\??rotatelocation
+ \ifcsname\??rotatelocation\p_rotation_location\endcsname\p_rotation_location\else\v!default\fi
+ \endcsname}
+
+\def\transforms_rotate_framed
+ {\resetrotateparameter\c!location
+ \dowithnextboxcs\transforms_rotate_finish\vbox
+ \inheritedrotateframed}
+
+\def\transforms_rotate_normal
+ {\dowithnextboxcs\transforms_rotate_finish\vbox}
+
+\def\transforms_rotate_finish
+ {\transforms_rotation_finish_indeed
+ \egroup}
+
+\setvalue{\??rotatelocation\v!depth}%
+ {\setfalse\c_transforms_rotation_not_fit
+ \setfalse\c_transforms_rotation_center
+ \settrue \c_transforms_rotation_obey_depth
+ \transforms_rotate_normal}
+
+\setvalue{\??rotatelocation\v!fit}%
+ {\settrue \c_transforms_rotation_not_fit
+ \setfalse\c_transforms_rotation_center
+ \settrue \c_transforms_rotation_obey_depth
+ \transforms_rotate_normal}
+
+\setvalue{\??rotatelocation\v!broad}%
+ {\setfalse\c_transforms_rotation_not_fit
+ \setfalse\c_transforms_rotation_center
+ \setfalse\c_transforms_rotation_obey_depth
+ \transforms_rotate_normal}
+
+\setvalue{\??rotatelocation\v!high}%
+ {\setfalse\c_transforms_rotation_not_fit
+ \setfalse\c_transforms_rotation_center
+ \setfalse\c_transforms_rotation_obey_depth
+ \transforms_rotate_framed}
+
+\setvalue{\??rotatelocation\v!middle}%
+ {\setfalse\c_transforms_rotation_not_fit
+ \settrue \c_transforms_rotation_center
+ \setfalse\c_transforms_rotation_obey_depth % hm, depth ?
+ \transforms_rotate_normal}
+
+\setvalue{\??rotatelocation\v!default}%
+ {\setfalse\c_transforms_rotation_not_fit
+ \setfalse\c_transforms_rotation_center
+ \settrue \c_transforms_rotation_obey_depth
+ \transforms_rotate_framed}
+
+\def\dorotatebox#1% {angle} \hbox/\vbox/\vtop % a fast low level one
+ {\ifcase#1\relax
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\transforms_rotation_box
+ \fi{#1}}
+
+\def\transforms_rotation_box#1% {angle} \hbox/\vbox/\vtop
+ {\bgroup
+ \hbox\bgroup % compatibility hack
+ \edef\p_rotation_rotation{#1}%
+ \dowithnextboxcs\transforms_rotation_finish}
+
+\def\transforms_rotation_finish
+ {\getvalue{\??rotatelocation\v!broad}%
+ \transforms_rotation_finish_indeed
+ \egroup
+ \egroup}
+
+\def\transforms_rotation_finish_indeed
+ {\hbox\bgroup
+ \ifx\p_rotation_rotation\empty
+ \transforms_rotation_finish_nop
+ \else
+ \transforms_rotation_finish_yes
+ \fi
+ \egroup}
+
+\def\transforms_rotation_finish_nop
+ {\boxcursor\box\nextbox}
+
+\setvalue{\??rotatepreset\v!left}%
+ {\edef\p_rotation_rotation{\doifoddpageelse{90}{270}}}
+
+\setvalue{\??rotatepreset\v!right}%
+ {\edef\p_rotation_rotation{\doifoddpageelse{270}{90}}}
+
+\setvalue{\??rotatepreset\v!inner}%
+ {\signalrightpage
+ \doifrightpageelse{\def\p_rotation_rotation{270}}{\def\p_rotation_rotation{90}}}
+
+\setvalue{\??rotatepreset\v!outer}%
+ {\signalrightpage
+ \doifrightpageelse{\def\p_rotation_rotation{90}}{\def\p_rotation_rotation{270}}}
+
+\setvalue{\??rotatepreset\v!default}%
+ {\edef\p_rotation_rotation{\realnumber{\p_rotation_rotation}}}% get rid of leading zeros and spaces
+
+\def\transforms_rotation_finish_yes
+ {\csname\??rotatepreset
+ \ifcsname\??rotatepreset\p_rotation_rotation\endcsname\p_rotation_rotation\else\v!default\fi
+ \endcsname
+ \setbox\nextbox\vbox{\box\nextbox}% not really needed
+ \dontshowcomposition
+ \dontcomplain
+ \ifconditional\c_transforms_rotation_center
+ \d_transforms_rotation_saved_width \wd\nextbox
+ \d_transforms_rotation_saved_height\ht\nextbox
+ \d_transforms_rotation_saved_depth \dp\nextbox
+ \setbox\nextbox\vbox{\vskip.5\ht\nextbox\hskip-.5\wd\nextbox\box\nextbox}%
+ \smashbox\nextbox
+ \fi
+ \d_transforms_rotation_width \wd\nextbox
+ \d_transforms_rotation_height\ht\nextbox
+ \d_transforms_rotation_depth \dp\nextbox
+ \setbox\nextbox\vbox{\hbox{\raise\dp\nextbox\box\nextbox}}%
+ \d_transforms_rotation_used_height \ht\nextbox
+ % much of the next happens in lua (all the sin and cos) so we can do that in
+ % one go if needed
+ \setcalculatedcos\cos\p_rotation_rotation
+ \setcalculatedsin\sin\p_rotation_rotation
+ \ifdim\sin\points>\zeropoint
+ \ifdim\cos\points>\zeropoint
+ \transforms_rotation_calculate_a
+ \transforms_rotation_apply
+ \else
+ \transforms_rotation_calculate_b
+ \transforms_rotation_apply
+ \wd\nextbox\ifconditional\c_transforms_rotation_not_fit\sin\d_transforms_rotation_depth\else\d_transforms_rotation_x_size\fi
+ \fi
+ \else
+ \ifdim\cos\points<\zeropoint
+ \transforms_rotation_calculate_c
+ \transforms_rotation_apply
+ \wd\nextbox\ifconditional\c_transforms_rotation_not_fit\negated\sin\d_transforms_rotation_height\else\d_transforms_rotation_x_size\fi
+ \else\ifdim\sin\points=\zeropoint
+ \transforms_rotation_calculate_d
+ \transforms_rotation_apply
+ % no wd ?
+ \else
+ \transforms_rotation_calculate_e
+ \transforms_rotation_apply
+ \wd\nextbox\ifconditional\c_transforms_rotation_not_fit\negated\sin\d_transforms_rotation_height\else\d_transforms_rotation_x_size\fi
+ \fi\fi
+ \fi
+ \ifconditional\c_transforms_rotation_center
+ \setbox\nextbox\vbox{\vskip-.5\d_transforms_rotation_saved_height\hskip.5\d_transforms_rotation_saved_height\box\nextbox}%
+ \wd\nextbox\d_transforms_rotation_saved_width
+ \ht\nextbox\d_transforms_rotation_saved_height
+ \dp\nextbox\d_transforms_rotation_saved_depth
+ \fi
+ \boxcursor\box\nextbox}
+
+\def\transforms_rotation_calculate_a
+ {\d_transforms_rotation_x_size\dimexpr\cos\d_transforms_rotation_width+\sin\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_y_size\dimexpr\sin\d_transforms_rotation_width+\cos\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_x_position\zeropoint
+ \d_transforms_rotation_y_position\cos\d_transforms_rotation_used_height
+ \ifconditional\c_transforms_rotation_not_fit
+ \d_transforms_rotation_x_offset\dimexpr\negated\sin\d_transforms_rotation_used_height+\sin\d_transforms_rotation_depth\relax
+ \fi
+ \ifconditional\c_transforms_rotation_obey_depth
+ \d_transforms_rotation_y_offset\cos\d_transforms_rotation_depth
+ \fi}
+
+\def\transforms_rotation_calculate_b
+ {\d_transforms_rotation_x_size\dimexpr\negated\cos\d_transforms_rotation_width+\sin\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_y_size\dimexpr\sin\d_transforms_rotation_width+\negated\cos\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_x_position\negated\cos\d_transforms_rotation_width
+ \d_transforms_rotation_y_position\zeropoint
+ \ifconditional\c_transforms_rotation_not_fit
+ \d_transforms_rotation_x_offset\dimexpr-\d_transforms_rotation_x_size+\sin\d_transforms_rotation_depth\relax
+ \fi
+ \ifconditional\c_transforms_rotation_obey_depth
+ \d_transforms_rotation_y_offset\negated\cos\d_transforms_rotation_height
+ \fi}
+
+\def\transforms_rotation_calculate_c
+ {\d_transforms_rotation_x_size\dimexpr\negated\cos\d_transforms_rotation_width+\negated\sin\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_y_size\dimexpr\negated\sin\d_transforms_rotation_width+\negated\cos\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_x_position\d_transforms_rotation_x_size
+ \d_transforms_rotation_y_position\negated\sin\d_transforms_rotation_width
+ \ifconditional\c_transforms_rotation_not_fit
+ \d_transforms_rotation_x_offset\dimexpr-\d_transforms_rotation_x_size+\negated\sin\d_transforms_rotation_height\relax
+ \fi
+ \ifconditional\c_transforms_rotation_obey_depth
+ \d_transforms_rotation_y_offset\dimexpr\d_transforms_rotation_y_size+\cos\d_transforms_rotation_depth\relax
+ \fi}
+
+\def\transforms_rotation_calculate_d
+ {\d_transforms_rotation_x_size\dimexpr\cos\d_transforms_rotation_width+\negated\sin\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_y_size\dimexpr\negated\sin\d_transforms_rotation_width+\cos\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_x_position\zeropoint
+ \d_transforms_rotation_y_position\d_transforms_rotation_y_size
+ \d_transforms_rotation_x_offset\zeropoint
+ \ifconditional\c_transforms_rotation_obey_depth
+ \d_transforms_rotation_y_offset\d_transforms_rotation_depth
+ \fi}
+
+\def\transforms_rotation_calculate_e
+ {\d_transforms_rotation_x_size\dimexpr\cos\d_transforms_rotation_width+\negated\sin\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_y_size\dimexpr\negated\sin\d_transforms_rotation_width+\cos\d_transforms_rotation_used_height\relax
+ \d_transforms_rotation_x_position\negated\sin\d_transforms_rotation_used_height
+ \d_transforms_rotation_y_position\d_transforms_rotation_y_size
+ \ifconditional\c_transforms_rotation_not_fit
+ \d_transforms_rotation_x_offset\dimexpr-\d_transforms_rotation_x_size+\negated\sin\d_transforms_rotation_height\relax
+ \fi
+ \ifconditional\c_transforms_rotation_obey_depth
+ \d_transforms_rotation_y_offset\negated\sin\d_transforms_rotation_depth
+ \fi}
+
+\def\transforms_rotation_apply
+ {\setbox\nextbox\vbox to \d_transforms_rotation_y_size
+ {\vfill
+ \hbox to \d_transforms_rotation_x_size
+ {\dostartrotation\p_rotation_rotation
+ \wd\nextbox\zeropoint
+ \ht\nextbox\zeropoint
+ \box\nextbox
+ \dostoprotation
+ \hfill}%
+ \kern\d_transforms_rotation_y_position}%
+ \setbox\nextbox\hbox
+ {\kern\dimexpr\d_transforms_rotation_x_position+\d_transforms_rotation_x_offset\relax
+ \lower\d_transforms_rotation_y_offset\box\nextbox}}
+
+% \dostepwiserecurse{0}{360}{10}
+% {\startlinecorrection[blank]
+% \hbox
+% {\expanded{\setuprotate[rotation=\recurselevel]}%
+% \traceboxplacementtrue
+% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=depth] {\ruledhbox{\bfb (depth)}}}}%
+% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=fit] {\ruledhbox{\bfb (fit)}}}}%
+% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=broad] {\ruledhbox{\bfb (broad)}}}}%
+% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=normal]{\ruledhbox{\bfb (normal)}}}}%
+% \hbox to .2\hsize{\hss\ruledhbox{\rotate[location=high] {\ruledhbox{\bfb (high)}}}}}
+% \stoplinecorrection}
+
\protect \endinput
diff --git a/tex/context/base/hand-ini.mkiv b/tex/context/base/hand-ini.mkiv
index cf659389b..e9a6e087c 100644
--- a/tex/context/base/hand-ini.mkiv
+++ b/tex/context/base/hand-ini.mkiv
@@ -39,36 +39,35 @@
%D New stuff.
-\unexpanded\def\setupfontexpansion {\dodoubleargument\dosetupfontexpansion }
-\unexpanded\def\setupfontprotrusion{\dodoubleargument\dosetupfontprotrusion}
+\unexpanded\def\setupfontexpansion {\dodoubleargument\fonts_expansion_setup }
+\unexpanded\def\setupfontprotrusion{\dodoubleargument\fonts_protrusion_setup}
-\def\dosetupfontexpansion [#1][#2]{\ctxcommand{setupfontexpansion ("#1","#2")}}
-\def\dosetupfontprotrusion[#1][#2]{\ctxcommand{setupfontprotrusion("#1","#2")}}
+\def\fonts_expansion_setup [#1][#2]{\ctxcommand{setupfontexpansion ("#1","#2")}}
+\def\fonts_protrusion_setup[#1][#2]{\ctxcommand{setupfontprotrusion("#1","#2")}}
% \setupfontprotrusion[quality-upright][vector=quality]
% \setupfontprotrusion[quality-slanted][vector=quality,right=1.5]
-%D Old stuff.
+\let\pdfadjustspacing\relax \newcount\pdfadjustspacing % a little bit protection
+\let\pdfprotrudechars\relax \newcount\pdfprotrudechars % a little bit protection
-\def\fonthandlingerror{\writestatus\m!fonts{font handling is replaced by features in mkiv}}
+\def\fonts_expansion_enable {\normalpdfadjustspacing\plustwo }
+\def\fonts_expansion_disable {\normalpdfadjustspacing\zerocount}
+\def\fonts_protruding_enable {\normalpdfprotrudechars\plustwo }
+\def\fonts_protruding_disable{\normalpdfprotrudechars\zerocount}
-\def\enableadjusting {\pdfadjustspacing\plustwo } \let\enableexpansion \enableadjusting
-\def\disableadjusting {\pdfadjustspacing\zerocount} \let\disableexpansion\disableadjusting
-\def\enableprotruding {\pdfprotrudechars\plustwo }
-\def\disableprotruding{\pdfprotrudechars\zerocount}
+\appendtoks \fonts_expansion_disable \to \everyforgetall % Here or not here?
+\appendtoks \fonts_protruding_disable \to \everyforgetall % Here or not here?
-\appendtoks \disableadjusting \to \everyforgetall % Here or not here?
-\appendtoks \disableprotruding \to \everyforgetall % Here or not here?
-
-\unexpanded\def\startfonthandling #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen
-\unexpanded\def\definefonthandling {\dotripleempty\dodefinefonthandling}
-\unexpanded\def\setupfonthandling {\dodoubleempty\dosetupfonthandling }
-\def\dodefinefonthandling[#1][#2][#3]{\fonthandlingerror}
-\def\dosetupfonthandling [#1][#2]{\fonthandlingerror}
-\def\usehandling [#1]{\fonthandlingerror}
-
-%D Just to be sure, maybe users use it:
-
-\let\fonthandling\empty
+% \def\fonthandlingerror{\writestatus\m!fonts{font handling is replaced by features in mkiv}}
+%
+% \let\fonthandling\empty
+%
+% \unexpanded\def\startfonthandling #1{\fonthandlingerror\fonthandlingerror\gobbleuntil\stopfonthandling} % can't happen
+% \unexpanded\def\definefonthandling {\dotripleempty\dodefinefonthandling}
+% \unexpanded\def\setupfonthandling {\dodoubleempty\dosetupfonthandling }
+% \def\dodefinefonthandling[#1][#2][#3]{\fonthandlingerror}
+% \def\dosetupfonthandling [#1][#2]{\fonthandlingerror}
+% \def\usehandling [#1]{\fonthandlingerror}
\protect \endinput
diff --git a/tex/context/base/java-ini.lua b/tex/context/base/java-ini.lua
index 8ffabab05..ff9afe239 100644
--- a/tex/context/base/java-ini.lua
+++ b/tex/context/base/java-ini.lua
@@ -214,3 +214,11 @@ function javascripts.usescripts(name)
}
end
end
+
+-- interface
+
+commands.storejavascriptcode = interactions.javascripts.storecode
+commands.storejavascriptpreamble = interactions.javascripts.storepreamble
+commands.addtojavascriptpreamble = interactions.javascripts.addtopreamble
+commands.usejavascriptpreamble = interactions.javascripts.usepreamblenow
+commands.usejavascriptscripts = interactions.javascripts.usescripts
diff --git a/tex/context/base/java-ini.mkiv b/tex/context/base/java-ini.mkiv
index 16d145ba0..76df468e7 100644
--- a/tex/context/base/java-ini.mkiv
+++ b/tex/context/base/java-ini.mkiv
@@ -110,10 +110,10 @@
\obeylualines
\obeyluatokens
\def\u{\letterbackslash u}%
- \dostartJScode}
+ \javascripts_start_code}
-\long\def\dostartJScode#1\stopJScode
- {\normalexpanded{\endgroup\ctxlua{interactions.javascripts.storecode(\!!bs#1\!!es)}}}
+\def\javascripts_start_code#1\stopJScode
+ {\normalexpanded{\endgroup\ctxcommand{storejavascriptcode(\!!bs#1\!!es)}}}
\let\stopJScode\relax
@@ -122,16 +122,15 @@
\obeylualines
\obeyluatokens
\def\u{\letterbackslash u}%
- \dostartJSpreamble}
+ \javascripts_start_preamble}
-\long\def\dostartJSpreamble#1\stopJSpreamble
- {\normalexpanded{\endgroup\ctxlua{interactions.javascripts.storepreamble(\!!bs#1\!!es)}}}
+\def\javascripts_start_preamble#1\stopJSpreamble
+ {\normalexpanded{\endgroup\ctxcommand{storejavascriptpreamble(\!!bs#1\!!es)}}}
\let\stopJSpreamble\relax
-\def\setJSpreamble #1#2{\ctxlua{interactions.javascripts.storepreamble ("#1",\!!bs#2\!!es)}}
-\def\addtoJSpreamble #1#2{\ctxlua{interactions.javascripts.addtopreamble ("#1",\!!bs#2\!!es)}}
-\def\douseJSpreamblenow#1{\ctxlua{interactions.javascripts.usepreamblenow("#1")}}
+\unexpanded\def\setJSpreamble #1#2{\ctxcommand{storejavascriptpreamble("#1",\!!bs#2\!!es)}}
+\unexpanded\def\addtoJSpreamble#1#2{\ctxcommand{addtojavascriptpreamble("#1",\!!bs#2\!!es)}}
%D \macros
%D {useJSscripts}
@@ -148,11 +147,11 @@
%D
%D The not so complicated implementation of this macro is:
-\def\douseJSscripts[#1][#2]%
- {\ctxlua{interactions.javascripts.usescripts(\!!bs#1\!!es)}%
- \douseJSpreamblenow{#2}}
-
\def\useJSscripts
- {\dodoubleempty\douseJSscripts}
+ {\dodoubleempty\javascripts_use_scripts}
+
+\def\javascripts_use_scripts[#1][#2]%
+ {\ctxcommand{usejavascriptscripts(\!!bs#1\!!es)}% two steps as this one calls tex code
+ \ctxcommand{usejavascriptpreamble("#2")}} % so this one comes later
\protect \endinput
diff --git a/tex/context/base/l-math.lua b/tex/context/base/l-math.lua
index 48089957f..43f60b56b 100644
--- a/tex/context/base/l-math.lua
+++ b/tex/context/base/l-math.lua
@@ -29,6 +29,6 @@ if not math.sind then
end
if not math.odd then
- function math.odd (n) return n % 2 == 0 end
- function math.even(n) return n % 2 ~= 0 end
+ function math.odd (n) return n % 2 ~= 0 end
+ function math.even(n) return n % 2 == 0 end
end
diff --git a/tex/context/base/lang-ini.mkiv b/tex/context/base/lang-ini.mkiv
index 6f77eee8d..f010b3c20 100644
--- a/tex/context/base/lang-ini.mkiv
+++ b/tex/context/base/lang-ini.mkiv
@@ -39,8 +39,8 @@
% \testlanguage[de] \testlanguage[de-de] \testlanguage[de-at] \testlanguage[de-ch] \page
% \testlanguage[en] \testlanguage[us] \testlanguage[en-us] \testlanguage[uk] \testlanguage[en-gb] \page
-\ifx\nonfrenchspacing\undefined \let\nonfrenchspacing\relax \fi
-\ifx\frenchspacing \undefined \let\frenchspacing \relax \fi
+\ifdefined\nonfrenchspacing\else \let\nonfrenchspacing\relax \fi
+\ifdefined\frenchspacing \else \let\frenchspacing \relax \fi
%D When loading hyphenation patterns, \TEX\ assign a number to
%D each loaded table, starting with~0. Switching to a specific
@@ -79,6 +79,13 @@
%D \macros
%D {defaultlanguage,languageparameter,specificlanguageparameter}
+%D We don't use the commandhandler here (yet) because we have
+%D a rather special fallback mechanism so quite some compatibility
+%D testing is needed.
+
+\installcorenamespace{language}
+\installcorenamespace{languagelinked}
+
\def\defaultlanguage#1%
{\ifcsname\??la#1\s!default\endcsname
\expandafter\defaultlanguage\csname\??la#1\s!default\endcsname
@@ -155,10 +162,6 @@
%D implementations support run time addition of patterns to a
%D preloaded format).
-% move to lua end
-
-\def\dodoinstalllanguage#1#2%
- {\ifcsname#1\endcsname\else\setuvalue{#1}{\complexlanguage[#2]}\fi}
%D \macros
%D {preloadlanguages}
@@ -173,48 +176,50 @@
\def\installedlanguages{\ctxlua{languages.installed()}}
-\def\doiflanguageelse#1%
+\unexpanded\def\doiflanguageelse#1%
{\ifcsname\??la#1\c!state\endcsname
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
\fi}
-\def\doinstalllanguage[#1][#2]%
+\def\reallanguagetag#1%
+ {\ifcsname\??languagelinked#1\endcsname\csname\??languagelinked#1\endcsname\else#1\fi}
+
+% \language[#1] gave unwanted side effect of loading language specifics
+
+\unexpanded\def\installlanguage
+ {\dodoubleargument\languages_install}
+
+\def\languages_install[#1][#2]%
{\doifassignmentelse{#2}
{\doiflanguageelse{#1}
{\getparameters[\??la#1][#2]}
- {\setvalue{\l!prefix!#1}{#1}%
- \dodoinstalllanguage{#1}{#1}%
+ {\setvalue{\??languagelinked#1}{#1}%
+ \languages_install_indeed{#1}{#1}%
\getparameters[\??la#1][\c!state=\v!start,#2]}%
\edef\currentsetuplanguage{#1}%
\ctxlua{languages.define("#1","\specificlanguageparameter{#1}\s!default")}%
\the\everysetuplanguage}
- {\setvalue{\l!prefix!#1}{#2}%
+ {\setvalue{\??languagelinked#1}{#2}%
\ctxlua{languages.synonym("#1","#2")}%
- %\getparameters[\??la#1][\s!default=#2]%
- \dodoinstalllanguage{#1}{#2}}}
-
-\def\reallanguagetag#1%
- {\ifcsname\l!prefix!#1\endcsname\csname\l!prefix!#1\endcsname\else#1\fi}
-
-% \language[#1] gave unwanted side effect of loading language specifics
+ \languages_install_indeed{#1}{#2}}}
-\def\installlanguage
- {\dodoubleargument\doinstalllanguage}
+\def\languages_install_indeed#1#2%
+ {\ifcsname#1\endcsname\else\setuvalue{#1}{\complexlanguage[#2]}\fi}
%D When the second argument is a language identifier, a
%D synonym is created. This feature is present because we
%D used dutch mnemonics in the dutch version, but nowadays
%D conform a standard.
-\def\doifpatternselse#1%
- {\bgroup % will change
+\unexpanded\def\doifpatternselse#1%
+ {\begingroup % will change
\language[#1]%
\ifnum\normallanguage>\zerocount
- \bgroup\expandafter\firstoftwoarguments
+ \endgroup\expandafter\firstoftwoarguments
\else
- \bgroup\expandafter\secondoftwoarguments
+ \endgroup\expandafter\secondoftwoarguments
\fi}
%D \macros
@@ -227,11 +232,13 @@
%D Beware, this command can only be used when a language is installed.
\unexpanded\def\setuplanguage
- {\dodoubleempty\dosetuplanguage}
+ {\dodoubleempty\languages_setup}
-\ifdefined\docomplexlanguage \else \let\docomplexlanguage\relax \fi
+\ifdefined\languages_synchronize \else
+ \let\languages_synchronize\relax % be nice for setups till we have one
+\fi
-\def\dosetuplanguage[#1][#2]%
+\def\languages_setup[#1][#2]%
{\ifsecondargument
\pushmacro\currentlanguage % can be default
\edef\currentsetuplanguage{\reallanguagetag{#1}}%
@@ -239,13 +246,12 @@
\the\everysetuplanguage
\popmacro\currentlanguage
%\doif\currentsetuplanguage\currentlanguage we can have influenced inheritance (default)
- \docomplexlanguage
\else
\let\currentsetuplanguage\currentlanguage
\getparameters[\??la\currentsetuplanguage][#1]%
\the\everysetuplanguage
- \docomplexlanguage
- \fi}
+ \fi
+ \languages_synchronize}
\appendtoks
\ctxlua{languages.setdirty("\currentsetuplanguage")}%
@@ -263,6 +269,9 @@
\c!righthyphen=-,
\c!hyphen=-,
\c!spacing=\v!packed,
+ \c!compoundhyphen=\compoundhyphen,
+ \c!rightcompoundhyphen=\compoundhyphen,
+ \c!leftcompoundhyphen=,
\c!midsentence=---,
\c!leftsentence=---,
\c!rightsentence=---,
@@ -279,14 +288,6 @@
\c!date={\v!year,\ ,\v!month,\ ,\v!day},
\c!text=Ag]
-% rather new, split and per language
-
-\setuplanguage
- [\s!default]
- [\c!compoundhyphen=\compoundhyphen,
- \c!rightcompoundhyphen=\compoundhyphen,
- \c!leftcompoundhyphen=]
-
% to be tested:
%
% \setuplanguage
@@ -352,7 +353,7 @@
\newtoks \everylanguage
-\def\docomplexlanguage% assumes that \currentlanguage is set % % % use different name as complex
+\def\languages_synchronize% assumes that \currentlanguage is set % % % use different name as complex
{\normallanguage\ctxcommand{languagenumber(%
"\currentlanguage",%
"\defaultlanguage\currentlanguage",%
@@ -398,40 +399,38 @@
% we will also permit access by the other names
-\def\complexlanguage[#1]%
+\unexpanded\def\languages_set_specified[#1]%
{\edef\askedlanguage{#1}%
\ifx\askedlanguage\empty \else
- \ifcsname\l!prefix!\askedlanguage\endcsname
- \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
+ \ifcsname\??languagelinked\askedlanguage\endcsname
+ \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
\ifx\currentlanguage\askedlanguage \else
\setcurrentlanguage\currentmainlanguage\askedlanguage
- \docomplexlanguage
+ \languages_synchronize
\fi
\else
\showmessage\m!languages6{#1}%
\fi
\fi}
-\let\simplelanguage\normallanguage
-
-\definecomplexorsimple\language
+\unexpanded\def\language
+ {\doifnextoptionalelse\languages_set_specified\normallanguage}
\newcount\mainlanguagenumber
-\def\mainlanguage[#1]%
+\unexpanded\def\mainlanguage[#1]%
{\edef\askedlanguage{#1}%
\ifx\askedlanguage\empty \else
- \ifcsname\l!prefix!\askedlanguage\endcsname
- \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}%
+ \ifcsname\??languagelinked\askedlanguage\endcsname
+ \edef\askedlanguage{\csname\??languagelinked\askedlanguage\endcsname}%
\ifx\currentlanguage\askedlanguage
- \ifx\currentmainlanguage\askedlanguage
- \else
+ \ifx\currentmainlanguage\askedlanguage \else
\setcurrentlanguage\askedlanguage\askedlanguage
- \docomplexlanguage
+ \languages_synchronize
\fi
\else
\setcurrentlanguage\askedlanguage\askedlanguage
- \docomplexlanguage
+ \languages_synchronize
\fi
\fi
\fi
@@ -560,11 +559,9 @@
%D is one of the few places outside the interface modules where
%D \type{\startinterface} is used.
-%D We default to english:
-
\setupcurrentlanguage[\s!en]
-\def\initializemainlanguage
+\unexpanded\def\initializemainlanguage
{\mainlanguage[\currentlanguage]%
\showmessage\m!languages9\currentlanguage}
@@ -586,7 +583,7 @@
%D For the moment here:
-\uchyph = 1 % also treat uppercase
-\exhyphenchar=45 % to permit breaking at explicit hyphens
+\uchyph 1 % also treat uppercase
+\exhyphenchar 45 % to permit breaking at explicit hyphens
\protect \endinput
diff --git a/tex/context/base/lang-lab.mkiv b/tex/context/base/lang-lab.mkiv
index 870ecd4f9..fcd25e9c8 100644
--- a/tex/context/base/lang-lab.mkiv
+++ b/tex/context/base/lang-lab.mkiv
@@ -65,6 +65,8 @@
%D
%D The last two cases concern the current language.
+\installcorenamespace{label}
+
\let\currentlabelcategory\empty
\def\definelabelclass
@@ -92,20 +94,20 @@
\ifnum#2=\plustwo
\def#3{#5#4}%
\def#5##1##2% ##1=language
- {\ifcsname\??ml:\currentlabelcategory#1:##1:##2\endcsname
- \csname\??ml:\currentlabelcategory#1:##1:##2\endcsname
- \else\ifcsname\??ml:#1:##1:##2\endcsname
- \csname\??ml:#1:##1:##2\endcsname
+ {\ifcsname\??label\currentlabelcategory#1:##1:##2\endcsname
+ \csname\??label\currentlabelcategory#1:##1:##2\endcsname
+ \else\ifcsname\??label#1:##1:##2\endcsname
+ \csname\??label#1:##1:##2\endcsname
\else\ifcsname\??la#4\s!default\endcsname
\expandafter#5\csname\??la#4\s!default\endcsname{##2}%
- \else\ifcsname\??ml:\currentlabelcategory#1:##2\endcsname
- \csname\??ml:\currentlabelcategory#1:##2\endcsname
- \else\ifcsname\??ml:#1:##2\endcsname
- \csname\??ml:#1:##2\endcsname
- \else\ifcsname\??ml:\currentlabelcategory#1:\s!en:##2\endcsname
- \csname\??ml:\currentlabelcategory#1:\s!en:##2\endcsname
- \else\ifcsname\??ml:#1:\s!en:##2\endcsname
- \csname\??ml:#1:\s!en:##2\endcsname
+ \else\ifcsname\??label\currentlabelcategory#1:##2\endcsname
+ \csname\??label\currentlabelcategory#1:##2\endcsname
+ \else\ifcsname\??label#1:##2\endcsname
+ \csname\??label#1:##2\endcsname
+ \else\ifcsname\??label\currentlabelcategory#1:\s!en:##2\endcsname
+ \csname\??label\currentlabelcategory#1:\s!en:##2\endcsname
+ \else\ifcsname\??label#1:\s!en:##2\endcsname
+ \csname\??label#1:\s!en:##2\endcsname
\else
##2%
\fi\fi\fi\fi\fi\fi\fi}%
@@ -116,14 +118,14 @@
\else
\unexpanded\def#3{#5#4}%
\unexpanded\def#5##1##2%
- {\ifcsname\??ml:#1:##1:##2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??ml:#1:##1:##2\endcsname
+ {\ifcsname\??label#1:##1:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??label#1:##1:##2\endcsname
\else\ifcsname\??la#4\s!default\endcsname
\expandafter#5\csname\??la#4\s!default\endcsname{##2}%
- \else\ifcsname\??ml:#1:##2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??ml:#1:##2\endcsname
- \else\ifcsname\??ml:#1:\s!en:##2\endcsname
- \expandafter\let\expandafter\thetextprefix\csname\??ml:#1:\s!en:##2\endcsname
+ \else\ifcsname\??label#1:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??label#1:##2\endcsname
+ \else\ifcsname\??label#1:\s!en:##2\endcsname
+ \expandafter\let\expandafter\thetextprefix\csname\??label#1:\s!en:##2\endcsname
\else
\let\thetextprefix\dummytextprefix
\fi\fi\fi\fi}%
@@ -181,7 +183,7 @@
\grabuntil{stop#1text}\start_some_text_prefix_indeed}
\def\start_some_text_prefix_indeed#1% text (not special checking done here yet, only for long texts anyway)
- {\expandafter\edef\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:\currenttextprefixname\endcsname{{\ctxlua{context(string.strip(\!!bs#1\!!es))}}\empty}}
+ {\expandafter\edef\csname\??label\currenttextprefixclass:\currenttextprefixtag:\currenttextprefixname\endcsname{{\ctxlua{context(string.strip(\!!bs#1\!!es))}}\empty}}
\def\setup_some_text_prefix[#1][#2]%
{\ifsecondargument
@@ -204,7 +206,7 @@
\expandafter\assign_some_text_prefix_yes
\or
% checking
- \ifcsname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname
+ \ifcsname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname
\expandafter\expandafter\expandafter\assign_some_text_prefix_nop
\else
\expandafter\expandafter\expandafter\assign_some_text_prefix_yes
@@ -214,24 +216,27 @@
\expandafter\assign_some_text_prefix_dumb
\fi{#1}}
+\let\m_languages_label_left \empty
+\let\m_languages_label_right\empty
+
\def\assign_some_text_prefix_yes#1[#2,#3,#4]%
- {\edef\!!stringa{#2}%
- \edef\!!stringb{#3}%
- \ifx\!!stringb\empty
- \ifx\!!stringa\empty
- \expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{\empty\empty}%
+ {\edef\m_languages_label_left {#2}%
+ \edef\m_languages_label_right{#3}%
+ \ifx\m_languages_label_right\empty
+ \ifx\m_languages_label_left\empty
+ \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{\empty\empty}%
\else
- \expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}\empty}%
+ \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}\empty}%
\fi
\else
- \expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}{#3}}%
+ \expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{{#2}{#3}}%
\fi}
\def\assign_some_text_prefix_nop#1[#2]%
{}
\def\assign_some_text_prefix_dumb#1[#2,#3]%
- {\expandafter\def\csname\??ml:\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{#2}}
+ {\expandafter\def\csname\??label\currenttextprefixclass:\currenttextprefixtag:#1\endcsname{#2}}
\definelabelclass [head] [0] % titles
\definelabelclass [label] [0] % texts
diff --git a/tex/context/base/lang-mis.mkiv b/tex/context/base/lang-mis.mkiv
index 71b23e580..094e9f971 100644
--- a/tex/context/base/lang-mis.mkiv
+++ b/tex/context/base/lang-mis.mkiv
@@ -13,6 +13,8 @@
\writestatus{loading}{ConTeXt Language Macros / Compounds}
+%D More or less replaced.
+
%D \gdef\starttest#1\stoptest{\starttabulate[|l|l|p|]#1\stoptabulate}
%D \gdef\test #1{\NC\detokenize{#1}\NC\hyphenatedword{#1}\NC#1\NC\NR}
@@ -155,10 +157,9 @@
%D In the main \CONTEXT\ modules these can be tuned by a setup
%D command. Watch the (maybe) better looking compound hyphen.
-\ifx\compoundhyphen \undefined \def\compoundhyphen{\hbox{-\kern-.25ex-}} \fi
-
-\ifx\beginofsubsentence \undefined \def\beginofsubsentence{\hbox{---}} \fi
-\ifx\endofsubsentence \undefined \def\endofsubsentence {\hbox{---}} \fi
+\ifx\compoundhyphen \undefined \def\compoundhyphen {\hbox{-\kern-.25ex-}} \fi
+\ifx\beginofsubsentence\undefined \def\beginofsubsentence{\hbox{---}} \fi
+\ifx\endofsubsentence \undefined \def\endofsubsentence {\hbox{---}} \fi
%D The last two variables are needed for subsentences
%D |<|like this one|>| which we did not yet mention.
@@ -167,11 +168,10 @@
%D compound characters like |-| or || to be separated from the
%D words. \TEX\ hackers will recognise the next two macro's:
-\ifx\prewordbreak \undefined \def\prewordbreak {\penalty\plustenthousand\hskip\zeropoint\relax} \fi
-%ifx\postwordbreak \undefined \def\postwordbreak{\penalty\zerocount \prewordbreak } \fi
-\ifx\postwordbreak \undefined \def\postwordbreak{\penalty\zerocount \hskip\zeropoint\relax} \fi
-
-\ifx\hspaceamount \undefined \def\hspaceamount#1#2{.16667em} \fi % language specific
+\ifx\prewordbreak \undefined \def\prewordbreak {\penalty\plustenthousand\hskip\zeropoint\relax} \fi
+%ifx\postwordbreak\undefined \def\postwordbreak {\penalty\zerocount \prewordbreak } \fi
+\ifx\postwordbreak\undefined \def\postwordbreak {\penalty\zerocount \hskip\zeropoint\relax} \fi
+\ifx\hspaceamount \undefined \def\hspaceamount#1#2{.16667em} \fi % language specific
%D \macros
%D {beginofsubsentencespacing,endofsubsentencespacing}
@@ -196,20 +196,20 @@
%D |x_n-{1\over2}| &for ${1\over2}<x_n\le1$ \cr}}
%D \stopformula
-\def\@tmd@action@{@tmd@a@}
-\def\@tmd@text@ {@tmd@t@}
-\def\@tmd@math@ {@tmd@m@}
-\def\@tmd@both@ {@tmd@b@}
+\installcorenamespace{discretionaryaction}
+\installcorenamespace{discretionarytext}
+\installcorenamespace{discretionarymath}
+\installcorenamespace{discretionaryboth}
\def\installdiscretionary#1#2%
- {\setevalue{\@tmd@math@\detokenize{#1}}{\detokenize{#1}}%
- \setvalue {\@tmd@text@\detokenize{#1}}{#2}%
- \setvalue {\@tmd@both@\detokenize{#1}}{\discretionarycommand#1}%
+ {\setevalue{\??discretionarymath\detokenize{#1}}{\detokenize{#1}}% ?
+ \setvalue {\??discretionarytext\detokenize{#1}}{#2}%
+ \setvalue {\??discretionaryboth\detokenize{#1}}{\languages_discretionary_command#1}%
\scratchcounter\expandafter`\detokenize{#1}%
- \expandafter\uedcatcodecommand\expandafter\ctxcatcodes\expandafter\scratchcounter\csname\@tmd@both@\detokenize{#1}\endcsname}
+ \expandafter\uedcatcodecommand\expandafter\ctxcatcodes\expandafter\scratchcounter\csname\??discretionaryboth\detokenize{#1}\endcsname}
-\def\handlemathmodediscretionary#1{\executeifdefined{\@tmd@math@\detokenize{#1}}\donothing}
-\def\handletextmodediscretionary#1{\executeifdefined{\@tmd@text@\detokenize{#1}}\donothing}
+\def\handlemathmodediscretionary#1{\executeifdefined{\??discretionarymath\detokenize{#1}}\donothing}
+\def\handletextmodediscretionary#1{\executeifdefined{\??discretionarytext\detokenize{#1}}\donothing}
\def\installdiscretionaries#1#2{\writestatus\m!system{use \string \installdiscretionary}} % obsolete
@@ -218,24 +218,24 @@
\def\ignorediscretionaries
{\discretionarymode\zerocount}
-\def\discretionarycommand
+\def\languages_discretionary_command
{% if direct if, we need \relax for lookahead in math mode
\csname
\ifcase\discretionarymode
- \strippedcsname\dononemodediscretionary
+ \strippedcsname\languages_process_discretionary_none
\else\ifmmode
- \strippedcsname\domathmodediscretionary
+ \strippedcsname\languages_process_discretionary_math
\else
- \strippedcsname\dotextmodediscretionary
+ \strippedcsname\languages_process_discretionary_text
\fi\fi
\endcsname}
-\def\dononemodediscretionary#1%
+\def\languages_process_discretionary_none#1%
{\detokenize{#1}}
-%D The macro \type{\checkbeforediscretionary} takes care of
-%D loners like \type{||word}, while it counterpart
-%D \type{\checkafterdiscretionary} is responsible for handling
+%D The macro \type{\languages_check_before_discretionary} takes care
+%D of loners like \type{||word}, while it counterpart \type
+%D {\languages_check_after_discretionary} is responsible for handling
%D the comma.
\newsignal\compoundbreakpoint
@@ -243,8 +243,10 @@
\newconditional\punctafterdiscretionary
\newconditional\spaceafterdiscretionary
-\def\checkbeforediscretionary
- {\ifvmode\dontleavehmode\fi
+\def\languages_check_before_discretionary
+ {\ifvmode
+ \dontleavehmode
+ \fi
\ifhmode
\begingroup
\setbox\scratchbox\lastbox
@@ -255,7 +257,7 @@
\endgroup
\fi}
-\def\checkafterdiscretionary
+\def\languages_check_after_discretionary
{\setfalse\punctafterdiscretionary
\setfalse\spaceafterdiscretionary
\ifx\blankspace\nextnext \settrue \spaceafterdiscretionary \else
@@ -265,9 +267,9 @@
\ifx :\nextnext \settrue \punctafterdiscretionary \else
\ifx ;\nextnext \settrue \punctafterdiscretionary \fi\fi\fi\fi\fi\fi}
-\let\domathmodediscretionary\handlemathmodediscretionary
+\let\languages_process_discretionary_math\handlemathmodediscretionary
-\def\dotextmodediscretionary#1% grouped !
+\def\languages_process_discretionary_text#1% grouped !
{\bgroup
\let\nextnextnext\egroup
\def\next##1#1%
@@ -278,11 +280,11 @@
\def\activedododotextmodediscretionary#1#2%
{\edef\discretionarytoken{\detokenize{#2}}%
\def\textmodediscretionary{\handletextmodediscretionary{#1}}%
- \checkafterdiscretionary
+ \languages_check_after_discretionary
\ifx\discretionarytoken\empty
\ifx#1\nextnext % takes care of ||| and +++ and ......
- \ifcsname\@tmd@action@\string#1\endcsname
- \csname\@tmd@action@\string#1\endcsname
+ \ifcsname\??discretionaryaction\string#1\endcsname
+ \csname\??discretionaryaction\string#1\endcsname
\else\ifconditional\spaceafterdiscretionary
\prewordbreak\hbox{\string#1}\relax
\else\ifconditional\punctafterdiscretionary
@@ -292,12 +294,12 @@
\fi\fi\fi
\def\nextnextnext{\afterassignment\egroup\let\next=}%
\else
- \checkbeforediscretionary
+ \languages_check_before_discretionary
% the next line has been changed (20050203)
% \prewordbreak\hbox{\textmodediscretionary\nextnext}\allowbreak\postwordbreak
% but an hbox blocks a possible \discretionary
- \ifcsname\@tmd@action@\endcsname
- \csname\@tmd@action@\endcsname
+ \ifcsname\??discretionaryaction\endcsname
+ \csname\??discretionaryaction\endcsname
\else\ifconditional\spaceafterdiscretionary
\prewordbreak\textmodediscretionary\relax
\else\ifconditional\punctafterdiscretionary
@@ -307,10 +309,10 @@
\fi\fi\fi
% \prewordbreak\textmodediscretionary\nextnext\allowbreak\postwordbreak
\fi
- \else\ifcsname\@tmd@action@\discretionarytoken\endcsname
- \csname\@tmd@action@\discretionarytoken\endcsname
+ \else\ifcsname\??discretionaryaction\discretionarytoken\endcsname
+ \csname\??discretionaryaction\discretionarytoken\endcsname
\else
- \checkbeforediscretionary
+ \languages_check_before_discretionary
\ifconditional\spaceafterdiscretionary
\prewordbreak\hbox{#2}\relax
\else\ifconditional\punctafterdiscretionary
@@ -330,31 +332,31 @@
\def\directdiscretionary
{\csname
\ifcase\discretionarymode
- \strippedcsname\dononemodediscretionary
+ \strippedcsname\languages_process_discretionary_none
\else
- \strippedcsname\dodirectdiscretionary
+ \strippedcsname\languages_process_discretionary_direct
\fi
\endcsname}
\def\indirectdiscretionary
{\csname
\ifcase\discretionarymode
- \strippedcsname\dononemodediscretionary
+ \strippedcsname\languages_process_discretionary_none
\else
- \strippedcsname\doindirectdiscretionary
+ \strippedcsname\languages_process_discretionary_indirect
\fi
\endcsname}
-\unexpanded\def\dodirectdiscretionary#1%
+\unexpanded\def\languages_process_discretionary_direct#1%
{\edef\discretionarytoken{\detokenize{#1}}%
\let\textmodediscretionary\compoundhyphen
- \executeifdefined{\@tmd@action@\discretionarytoken}{\indirectdiscretionary{#1}}}
+ \executeifdefined{\??discretionaryaction\discretionarytoken}{\indirectdiscretionary{#1}}}
-\unexpanded\def\doindirectdiscretionary#1%
+\unexpanded\def\languages_process_discretionary_indirect#1%
{\prewordbreak\discretionary{\hbox{#1}}{}{\hbox{#1}}\allowbreak\postwordbreak}
\unexpanded\def\definetextmodediscretionary #1
- {\setvalue{\@tmd@action@\detokenize{#1}}}
+ {\setvalue{\??discretionaryaction\detokenize{#1}}}
% \start \hsize 1mm
% test |||test test|||, test\blank
@@ -373,7 +375,7 @@
% xxx3xxx
% xxx1<newline>2xxx
-\def\hyphenliketextmodediscretionary#1#2%
+\def\languages_discretionary_hyphen_like#1#2%
{\ifconditional\spaceafterdiscretionary
\prewordbreak\hbox{#1}\relax
\else\ifconditional\punctafterdiscretionary
@@ -383,16 +385,16 @@
\fi\fi}
\definetextmodediscretionary {}
- {\hyphenliketextmodediscretionary\textmodehyphen\textmodehyphendiscretionary}
+ {\languages_discretionary_hyphen_like\textmodehyphen\textmodehyphendiscretionary}
\definetextmodediscretionary -
- {\hyphenliketextmodediscretionary\normalhyphen\normalhyphendiscretionary}
+ {\languages_discretionary_hyphen_like\normalhyphen\normalhyphendiscretionary}
\definetextmodediscretionary _
- {\hyphenliketextmodediscretionary\composedhyphen\composedhyphendiscretionary}
+ {\languages_discretionary_hyphen_like\composedhyphen\composedhyphendiscretionary}
\definetextmodediscretionary )
- {\hyphenliketextmodediscretionary{)}{\discretionary{-)}{}{)}}}
+ {\languages_discretionary_hyphen_like{)}{\discretionary{-)}{}{)}}}
\definetextmodediscretionary (
{\ifdim\lastskip>\zeropoint
@@ -456,10 +458,10 @@
%D \goto{Some||Long||Word}
%D \stoptyping
-\def\fakecompoundhyphen
- {\def\|{\mathortext\vert\dofakecompoundhyphen}}
+\unexpanded\def\fakecompoundhyphen
+ {\def\|{\mathortext\vert\languages_fake_compound_hyphen}}
-\def\dofakecompoundhyphen
+\def\languages_fake_compound_hyphen
{\def##1|%
{\doifelsenothing{##1}\compoundhyphen{##1}%
\kern\compoundbreakpoint\allowbreak}}
@@ -473,10 +475,10 @@
%D earlier, this one also looks ahead for spaces and grouping
%D tokens.
-\def\midworddiscretionary
- {\futurelet\next\domidworddiscretionary}
+\unexpanded\def\midworddiscretionary
+ {\futurelet\next\languages_mid_word_discretionary}
-\def\domidworddiscretionary
+\def\languages_mid_word_discretionary
{\ifx\next\blankspace\else
\ifx\next\bgroup \else
\ifx\next\egroup \else
@@ -523,10 +525,10 @@
%D mentioned earlier in this module. We take care of two
%D arguments, which complicates things a bit.
-\def\@nc@{@nc@} % normal character
-\def\@cc@{@cc@} % compound character
-\def\@cs@{@cs@} % compound characters
-\def\@cx@{@cx@} % compound definition
+\installcorenamespace{compoundnormal}
+\installcorenamespace{compoundsingle}
+\installcorenamespace{compoundmultiple}
+\installcorenamespace{compounddefinition}
%D When we started working on MK IV code, we needed a different
%D approach for defining the active character itself. In MK II as
@@ -534,39 +536,26 @@
\setnewconstant\compoundcharactermode\plusone
+\newcount\c_languages_compound_character
+
\def\installcompoundcharacter #1#2#3 #4% {#4} no grouping
{\ifcase\compoundcharactermode
% ignore mode
\else
- \chardef\thecompoundcharacter`#1%
- \expandafter\chardef\csname\@nc@\string#1\endcsname\thecompoundcharacter
+ \chardef\c_languages_compound_character`#1%
+ \expandafter\chardef\csname\??compoundnormal\string#1\endcsname\c_languages_compound_character
\def\!!stringa{#3}%
- \expandafter\def\csname\ifx\!!stringa\empty\@cc@\else\@cs@\fi\detokenize{#1#2#3}\endcsname{#4}%
- \setevalue{\@cx@\detokenize{#1}}{\noexpand\handlecompoundcharacter{\detokenize{#1}}}% beter nr's
- \expandafter\letcatcodecommand\expandafter\ctxcatcodes\expandafter\thecompoundcharacter\csname\@cx@\detokenize{#1}\endcsname
+ \expandafter\def\csname\ifx\!!stringa\empty\??compoundsingle\else\??compoundmultiple\fi\detokenize{#1#2#3}\endcsname{#4}%
+ \setevalue{\??compounddefinition\detokenize{#1}}{\noexpand\languages_handle_compound_character{\detokenize{#1}}}% beter nr's
+ \expandafter\letcatcodecommand\expandafter\ctxcatcodes\expandafter\c_languages_compound_character\csname\??compounddefinition\detokenize{#1}\endcsname
\fi}
-%D In order to serve the language specific well, we will introduce
-%D a namespace:
-
-% \ifx\currentlanguage\undefined
- \let\compoundcharacterclass\empty
-% \else
-% \def\compoundcharacterclass{\currentlanguage}
-% \fi
-
-\def\@cc@{@cc@\compoundcharacterclass} % compound character
-\def\@cs@{@cs@\compoundcharacterclass} % compound characters
-
%D We can also ignore definitions (needed in for instance \XML). Beware,
%D this macro is supposed to be used grouped!
\def\ignorecompoundcharacter
{\compoundcharactermode\zerocount}
-\let\restorecompoundcharacter \gobbleoneargument % obsolete
-\let\enableactivediscretionaries\relax % obsolete
-
%D In handling the compound characters we have to take care of
%D \type{\bgroup} and \type{\egroup} tokens, so we end up with
%D a multi||step interpretation macro. We look ahead for a
@@ -579,40 +568,41 @@
%D with \type{\futurelet} to prevent spaces from
%D disappearing.
-\def\handlecompoundcharacter#1%
- {\def\xhandlecompoundcharacter{\dohandlecompoundcharacter{#1}}%
- \futurelet\next\xhandlecompoundcharacter}
-
-\def\dohandlecompoundcharacter
- {\ifx\next\bgroup
- %\expandafter\dodohandlecompoundcharacter % handle "{ee} -> \"ee
- %\expandafter\gobbleoneargument % forget "{ee} -> ee
- \expandafter\handlecompoundcharacterone % ignore "{ee} -> "ee
- \else\ifx\next\egroup
- \doubleexpandafter\donohandlecompoundcharacter
- \else\ifx\next\blankspace
- \tripleexpandafter\donohandlecompoundcharacter
+\def\languages_handle_compound_character#1%
+ {\def\languages_handle_compound_character_finish{\languages_handle_compound_character_finish_indeed{#1}}%
+ \futurelet\nexttoken\xhandlecompoundcharacter}
+
+\def\languages_handle_compound_character_finish_indeed
+ {\ifx\nexttoken\bgroup
+ %\expandafter\languages_handle_compound_character_pickup % handle "{ee} -> \"ee
+ %\expandafter\gobbleoneargument % forget "{ee} -> ee
+ \expandafter\languages_handle_compound_character_one % ignore "{ee} -> "ee
+ \else\ifx\nexttoken\egroup
+ \doubleexpandafter\languages_handle_compound_character_normal
+ \else\ifx\nexttoken\blankspace
+ \tripleexpandafter\languages_handle_compound_character_normal
\else
- \tripleexpandafter\dodohandlecompoundcharacter
+ \tripleexpandafter\languages_handle_compound_character_pickup
\fi\fi\fi}
-\def\donohandlecompoundcharacter#1{\csname\@nc@\string#1\endcsname}
+\def\languages_handle_compound_character_normal#1%
+ {\csname\??compoundnormal\string#1\endcsname}
-\def\dododohandlecompoundcharacter
- {\ifx\next\bgroup
- \expandafter\handlecompoundcharacterone
- \else\ifx\next\egroup
- \doubleexpandafter\handlecompoundcharacterone
- \else\ifx\next\blankspace
- \tripleexpandafter\handlecompoundcharacterone
+\def\languages_handle_compound_character_pickup#1#2% preserve space
+ {\def\languages_handle_compound_character_finish{\languages_handle_compound_character_finish_indeed#1#2}%
+ \futurelet\nexttoken\languages_handle_compound_character_finish}
+
+\def\languages_handle_compound_character_finish_indeed
+ {\ifx\nexttoken\bgroup
+ \expandafter\languages_handle_compound_character_one
+ \else\ifx\nexttoken\egroup
+ \doubleexpandafter\languages_handle_compound_character_one
+ \else\ifx\nexttoken\blankspace
+ \tripleexpandafter\languages_handle_compound_character_one
\else
- \tripleexpandafter\handlecompoundcharactertwo
+ \tripleexpandafter\languages_handle_compound_character_two
\fi\fi\fi}
-\def\dodohandlecompoundcharacter#1#2% preserve space
- {\def\xdodohandlecompoundcharacter{\dododohandlecompoundcharacter#1#2}%
- \futurelet\next\xdodohandlecompoundcharacter}
-
%D Besides taken care of the grouping and space tokens, we have
%D to deal with three situations. First we look if the next
%D character equals the first one, if so, then we just insert
@@ -626,25 +616,25 @@
%D
%D In later modules we will see how these commands are used.
-\long\def\handlecompoundcharacterone#1#2%
+\def\languages_handle_compound_character_one#1#2%
{\if\string#1\string#2% was: \ifx#1#2%
- \def\next{\csname\@nc@\string#1\endcsname}%
- \else\ifcsname\@cc@\string#1\string#2\endcsname
- \def\next{\csname\@cc@\string#1\string#2\endcsname}%
+ \def\next{\csname\??compoundnormal\string#1\endcsname}%
+ \else\ifcsname\??compoundsingle\string#1\string#2\endcsname
+ \def\next{\csname\??compoundsingle\string#1\string#2\endcsname}%
\else
- \def\next{\csname\@nc@\string#1\endcsname#2}%
+ \def\next{\csname\??compoundnormal\string#1\endcsname#2}%
\fi\fi
\next}
-\long\def\handlecompoundcharactertwo#1#2#3%
+\def\languages_handle_compound_character_two#1#2#3%
{\if\string#1\string#2%
- \def\next{\csname\@nc@\string#1\endcsname#3}%
- \else\ifcsname\@cs@\string#1\string#2\string#3\endcsname
- \def\next{\csname\@cs@\string#1\string#2\string#3\endcsname}%
- \else\ifcsname\@cc@\string#1\string#2\endcsname
- \def\next{\csname\@cc@\string#1\string#2\endcsname#3}%
+ \def\next{\csname\??compoundnormal\string#1\endcsname#3}%
+ \else\ifcsname\??compoundmultiple\string#1\string#2\string#3\endcsname
+ \def\next{\csname\??compoundmultiple\string#1\string#2\string#3\endcsname}%
+ \else\ifcsname\??compoundsingle\string#1\string#2\endcsname
+ \def\next{\csname\??compoundsingle\string#1\string#2\endcsname#3}%
\else
- \def\next{\csname\@nc@\string#1\endcsname#2#3}%
+ \def\next{\csname\??compoundnormal\string#1\endcsname#2#3}%
\fi\fi\fi
\next}
@@ -652,8 +642,8 @@
%D {lang-sla.tex}) we provide:
\def\simplifiedcompoundcharacter#1#2%
- {\ifcsname\@cc@\string#1\string#2\endcsname
- \doubleexpandafter\firstofoneargument\csname\@cc@\string#1\string#2\endcsname
+ {\ifcsname\??compoundsingle\string#1\string#2\endcsname
+ \doubleexpandafter\firstofoneargument\csname\??compoundsingle\string#1\string#2\endcsname
\else
#2%
\fi}
@@ -672,6 +662,6 @@
%D
%D Handy in for instance XML. (Kind of obsolete)
-\ifx\normalcompound\undefined \let\normalcompound=| \fi
+\ifdefined\normalcompound \else \let\normalcompound=| \fi
\protect \endinput
diff --git a/tex/context/base/lang-url.mkiv b/tex/context/base/lang-url.mkiv
index 23178a2a2..134b899da 100644
--- a/tex/context/base/lang-url.mkiv
+++ b/tex/context/base/lang-url.mkiv
@@ -55,48 +55,47 @@
\let|=\letterbar
\to \everyhyphenatedurl
-\def\hyphenatedurlseparator{} % \periodcentered
+\let\hyphenatedurlseparator \empty % \periodcentered
+\let\hyphenatedurldiscretionary\empty
-\def\dohyphenatedurlspace {\nobreak\hskip\zeropoint plus\onepoint\nobreak}
-\def\dohyphenatedurlafter #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}}
-\def\dohyphenatedurlbefore #1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax}
-\def\dohyphenatedurlnormal #1{\char#1\relax}
-\def\dohyphenatedurldisc #1{\discretionary{}{}{}}
+\setnewconstant\hyphenatedurllefthyphenmin \plusthree
+\setnewconstant\hyphenatedurlrighthyphenmin\plusthree
-\def\dohyphenatedurlspace_trace {\nobreak\begingroup\darkyellow\ruledhskip\zeropoint plus\onepoint\endgroup\nobreak}
-\def\dohyphenatedurlafter_trace #1{\char#1\hsmash{\darkblue\vl}\discretionary{}{\hyphenatedurlseparator}{}}
-\def\dohyphenatedurlbefore_trace#1{\discretionary{\hyphenatedurlseparator}{}{}\hsmash{\darkred\vl}\char#1\relax}
-\def\dohyphenatedurlnormal_trace#1{\char#1\relax}
-\def\dohyphenatedurldisc_trace #1{\discretionary{\hsmash{\darkgreen\vl}}{\hsmash{\darkgreen\vl}}{\hsmash{\darkgreen\vl}}}
+\def\languages_hyphenated_url_space {\nobreak\hskip\zeropoint plus\onepoint\nobreak}
+\def\languages_hyphenated_url_after #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}}
+\def\languages_hyphenated_url_before #1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax}
+\def\languages_hyphenated_url_normal #1{\char#1\relax}
+\def\languages_hyphenated_url_disc #1{\discretionary{}{}{}}
+
+\def\languages_hyphenated_url_space_trace {\nobreak\begingroup\darkyellow\ruledhskip\zeropoint plus\onepoint\endgroup\nobreak}
+\def\languages_hyphenated_url_after_trace #1{\char#1\hsmash{\darkblue\vl}\discretionary{}{\hyphenatedurlseparator}{}}
+\def\languages_hyphenated_url_before_trace#1{\discretionary{\hyphenatedurlseparator}{}{}\hsmash{\darkred\vl}\char#1\relax}
+\def\languages_hyphenated_url_normal_trace#1{\char#1\relax}
+\def\languages_hyphenated_url_disc_trace #1{\discretionary{\hsmash{\darkgreen\vl}}{\hsmash{\darkgreen\vl}}{\hsmash{\darkgreen\vl}}}
\def\showhyphenatedurlbreaks
- {\let\dohyphenatedurlspace \dohyphenatedurlspace_trace
- \let\dohyphenatedurlafter \dohyphenatedurlafter_trace
- \let\dohyphenatedurlbefore\dohyphenatedurlbefore_trace
- \let\dohyphenatedurlnormal\dohyphenatedurlnormal_trace
- \let\dohyphenatedurldisc \dohyphenatedurldisc_trace}
+ {\let\languages_hyphenated_url_space \languages_hyphenated_url_space_trace
+ \let\languages_hyphenated_url_after \languages_hyphenated_url_after_trace
+ \let\languages_hyphenated_url_before\languages_hyphenated_url_before_trace
+ \let\languages_hyphenated_url_normal\languages_hyphenated_url_normal_trace
+ \let\languages_hyphenated_url_disc \languages_hyphenated_url_disc_trace}
\def\sethyphenatedurlnormal#1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,0)}}
\def\sethyphenatedurlbefore#1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,1)}}
\def\sethyphenatedurlafter #1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,2)}}
-\def\hyphenatedurldiscretionary{}
-
% \sethyphenatedurlafter{ABCDEF}
-\setnewconstant\hyphenatedurllefthyphenmin \plusthree
-\setnewconstant\hyphenatedurlrighthyphenmin\plusthree
-
\unexpanded \def\hyphenatedurl#1%
{\dontleavehmode
\begingroup
\the\everyhyphenatedurl
- \language\zerocount
- \let\s\dohyphenatedurlspace
- \let\n\dohyphenatedurlnormal
- \let\b\dohyphenatedurlbefore
- \let\a\dohyphenatedurlafter
- \let\d\dohyphenatedurldisc
+ \normallanguage\zerocount
+ \let\s\languages_hyphenated_url_space
+ \let\a\languages_hyphenated_url_after
+ \let\b\languages_hyphenated_url_before
+ \let\n\languages_hyphenated_url_normal
+ \let\d\languages_hyphenated_url_disc
\normalexpanded{\noexpand\ctxcommand{hyphenatedurl(
\!!bs\noexpand\detokenize{#1}\!!es,
\number\hyphenatedurllefthyphenmin,
diff --git a/tex/context/base/lang-wrd.lua b/tex/context/base/lang-wrd.lua
index 558d5744f..3d3cb6aec 100644
--- a/tex/context/base/lang-wrd.lua
+++ b/tex/context/base/lang-wrd.lua
@@ -412,3 +412,9 @@ end
--~ namespace = languagehacks,
--~ processor = languagehacks.process
--~ }
+
+-- interface
+
+commands.enablespellchecking = words.enable
+commands.disablespellchecking = words.disable
+commands.loadspellchecklist = words.load
diff --git a/tex/context/base/lang-wrd.mkiv b/tex/context/base/lang-wrd.mkiv
index 6d8e28cd5..1408b7372 100644
--- a/tex/context/base/lang-wrd.mkiv
+++ b/tex/context/base/lang-wrd.mkiv
@@ -27,33 +27,28 @@
% \setupspellchecking[state=start,method=2]
% ...
% \typefile{\jobname.words}
+%
+% beware, maybe some day we will honour grouping
+%
+% 1: spell checking
+% 2: word counting
+% 3: language coloring
-\def\loadspellchecklist
- {\dodoubleempty\doloadspellchecklist}
-
-\def\doloadspellchecklist[#1][#2]%
- {\ctxlua{languages.words.load("#1","#2")}}
-
-\unexpanded\def\setupspellchecking
- {\dosingleargument\dosetupspellchecking}
-
-\newtoks\everysetupspellchecking
+\installcorenamespace{spell}
-\unexpanded\def\setupspellchecking[#1]% todo colors
- {\getparameters[\??lw][#1]%
- \the\everysetupspellchecking}
+\installdirectcommandhandler \??spell {spellchecking}
\appendtoks
- \doifelse\@@lwstate\v!start
- {\ctxlua{languages.words.enable { method = "\@@lwmethod", list = "\@@lwlist" }}}
- {\ctxlua{languages.words.disable()}}%
+ \doifelse{\directspellcheckingparameter\c!state}\v!start
+ {\ctxcommand{enablespellchecking { method = "\directspellcheckingparameter\c!method", list = "\directspellcheckingparameter\c!list" }}}
+ {\ctxcommand{disablespellchecking()}}%
\to \everysetupspellchecking
-% beware, maybe some day we will honour grouping
+\unexpanded\def\loadspellchecklist
+ {\dodoubleempty\languages_load_spell_check_list}
-% 1: spell checking
-% 2: word counting
-% 3: language coloring
+\def\languages_load_spell_check_list[#1][#2]%
+ {\ctxcommand{loadspellchecklist("#1","#2")}}
\setupspellchecking
[\c!state=\v!stop,
diff --git a/tex/context/base/lpdf-col.lua b/tex/context/base/lpdf-col.lua
index 555c0290f..85f719c40 100644
--- a/tex/context/base/lpdf-col.lua
+++ b/tex/context/base/lpdf-col.lua
@@ -632,8 +632,21 @@ backends.pdf.tables.vfspecials = { -- todo: distinguish between glyph and rule c
red = { "special", 'pdf: 1 0 0 rg 1 0 0 RG' },
green = { "special", 'pdf: 0 1 0 rg 0 1 0 RG' },
blue = { "special", 'pdf: 0 0 1 rg 0 0 1 RG' },
+ gray = { "special", 'pdf: .75 g .75 G' },
black = { "special", 'pdf: 0 g 0 G' },
+ rulecolors = {
+ red = { "special", 'pdf: 1 0 0 rg' },
+ green = { "special", 'pdf: 0 1 0 rg' },
+ blue = { "special", 'pdf: 0 0 1 rg' },
+ gray = { "special", 'pdf: .5 g' },
+ black = { "special", 'pdf: 0 g' },
+ palered = { "special", 'pdf: 1 .75 .75 rg' },
+ palegreen = { "special", 'pdf: .75 1 .75 rg' },
+ paleblue = { "special", 'pdf: .75 .75 1 rg' },
+ palegray = { "special", 'pdf: .75 g' },
+ },
+
startslant = function(a) return { "special", format("pdf: q 1 0 %s 1 0 0 cm",a) } end,
stopslant = { "special", "pdf: Q" },
diff --git a/tex/context/base/luat-mac.lua b/tex/context/base/luat-mac.lua
index 7287692fc..d0543250c 100644
--- a/tex/context/base/luat-mac.lua
+++ b/tex/context/base/luat-mac.lua
@@ -122,7 +122,7 @@ local grammar = { "converter",
texcode = pushlocal
* startcode
* spaces
- * (name * spaces)^1 -- new: multiple
+ * (csname * spaces)^1 -- new: multiple, new:csname instead of name
-- * (declaration + furthercomment + (1 - newline - space))^0
* ((declaration * (space^0/""))^1 + furthercomment + (1 - newline - space))^0 -- accepts #a #b #c
* V("texbody")
diff --git a/tex/context/base/luat-sto.lua b/tex/context/base/luat-sto.lua
index 2c7a25aaa..30bb7d5bb 100644
--- a/tex/context/base/luat-sto.lua
+++ b/tex/context/base/luat-sto.lua
@@ -6,6 +6,8 @@ if not modules then modules = { } end modules ['luat-sto'] = {
license = "see context related readme files"
}
+-- we could nil some function in the productionrun
+
local type, next, setmetatable, getmetatable, collectgarbage = type, next, setmetatable, getmetatable, collectgarbage
local gmatch, format, write_nl = string.gmatch, string.format, texio.write_nl
local serialize, concat, sortedhash = table.serialize, table.concat, table.sortedhash
@@ -128,6 +130,10 @@ function statistics.reportstorage(whereto)
for k,v in sortedhash(catcodes.names) do
write_nl(whereto,format("%03i %s",k,concat(v," ")))
end
+ write_nl(whereto," ","used corenamespaces:"," ")
+ for k,v in sortedhash(interfaces.corenamespaces) do
+ write_nl(whereto,format("%03i %s",k,v))
+ end
write_nl(whereto," ")
end
diff --git a/tex/context/base/lxml-ctx.mkiv b/tex/context/base/lxml-ctx.mkiv
index 9a5428a7b..530c29aa7 100644
--- a/tex/context/base/lxml-ctx.mkiv
+++ b/tex/context/base/lxml-ctx.mkiv
@@ -35,9 +35,6 @@
[lshowtitle]
[\c!style=\tta]
-% \unexpanded\def\setuplxmlshow[#1]%
-% {\dodoubleargument\getparameters[\??xl]}
-
\unexpanded\def\xmllshow#1%
{\ctxlua{xml.ctx.tshow {
pattern = \!!bs\detokenize{#1}\!!es,
diff --git a/tex/context/base/lxml-ini.mkiv b/tex/context/base/lxml-ini.mkiv
index 77a57ac03..2ba1619e4 100644
--- a/tex/context/base/lxml-ini.mkiv
+++ b/tex/context/base/lxml-ini.mkiv
@@ -25,10 +25,7 @@
\registerctxluafile{lxml-tex}{1.001} % tex finalizers
\registerctxluafile{lxml-dir}{1.001} % ctx hacks
-
-\unprotect % todo \!!bs \!!es
-
-\def\c!entities{entities} % to be internationalized
+\unprotect % todo \!!bs \!!es where handy (slower)
\def\ctxlxml #1{\directlua\zerocount{lxml.#1}}
@@ -90,10 +87,10 @@
\def\xmldisplayverbatim #1{\ctxlxml{displayverbatim("#1")}}
\def\xmlinlineverbatim #1{\ctxlxml{inlineverbatim("#1")}}
-\def\xmlload #1#2{\ctxlxml{load("#1","#2","\@@xmentities","\@@xmcompress")}}
-\def\xmlloadbuffer #1#2{\ctxlxml{loadbuffer("#1","#2","\@@xmentities","\@@xmcompress")}}
-\def\xmlloaddata #1#2{\ctxlxml{loaddata("#1",\!!bs#2\!!es,"\@@xmentities","\@@xmcompress")}}
-\def\xmlloadregistered #1#2{\ctxlxml{loadregistered("#1","\@@xmentities","\@@xmcompress")}}
+\def\xmlload #1#2{\ctxlxml{load("#1","#2","\p_xml_entities","\p_xml_compress")}}
+\def\xmlloadbuffer #1#2{\ctxlxml{loadbuffer("#1","#2","\p_xml_entities","\p_xml_compress")}}
+\def\xmlloaddata #1#2{\ctxlxml{loaddata("#1",\!!bs#2\!!es,"\p_xml_entities","\p_xml_compress")}}
+\def\xmlloadregistered #1#2{\ctxlxml{loadregistered("#1","\p_xml_entities","\p_xml_compress")}}
\def\xmlloaddirectives #1{\ctxlxml{directives.load("any:///#1")}}
\def\xmlpos #1{\ctxlxml{pos("#1")}}
@@ -108,12 +105,12 @@
% todo: \xmldoifelseattribute
-\def\xmldoif #1#2{\ctxlxml{doif (\!!bs#1\!!es,\!!bs#2\!!es)}}
-\def\xmldoifnot #1#2{\ctxlxml{doifnot (\!!bs#1\!!es,\!!bs#2\!!es)}}
-\def\xmldoifelse #1#2{\ctxlxml{doifelse (\!!bs#1\!!es,\!!bs#2\!!es)}}
-\def\xmldoiftext #1#2{\ctxlxml{doiftext (\!!bs#1\!!es,\!!bs#2\!!es)}}
-\def\xmldoifnottext #1#2{\ctxlxml{doifnottext (\!!bs#1\!!es,\!!bs#2\!!es)}}
-\def\xmldoifelsetext #1#2{\ctxlxml{doifelsetext(\!!bs#1\!!es,\!!bs#2\!!es)}}
+\def\xmldoif #1#2{\ctxlxml{doif (\!!bs#1\!!es,\!!bs#2\!!es)}} % expandable
+\def\xmldoifnot #1#2{\ctxlxml{doifnot (\!!bs#1\!!es,\!!bs#2\!!es)}} % expandable
+\def\xmldoifelse #1#2{\ctxlxml{doifelse (\!!bs#1\!!es,\!!bs#2\!!es)}} % expandable
+\def\xmldoiftext #1#2{\ctxlxml{doiftext (\!!bs#1\!!es,\!!bs#2\!!es)}} % expandable
+\def\xmldoifnottext #1#2{\ctxlxml{doifnottext (\!!bs#1\!!es,\!!bs#2\!!es)}} % expandable
+\def\xmldoifelsetext #1#2{\ctxlxml{doifelsetext(\!!bs#1\!!es,\!!bs#2\!!es)}} % expandable
%def\xmldoifelseempty #1#2{\ctxlxml{doifelseempty("#1","#2")}} % #2, "*" or "" == self not yet implemented
%def\xmldoifelseselfempty #1{\ctxlxml{doifelseempty("#1")}}
@@ -136,44 +133,44 @@
% todo: 1:xml:whatever always before 3:xml:something
-\def\xmlprependsetup #1{\ctxlxml{installsetup(1,"*","#1")}}
-\def\xmlappendsetup #1{\ctxlxml{installsetup(2,"*","#1")}}
-\def\xmlbeforesetup #1#2{\ctxlxml{installsetup(3,"*","#1","#2"))}}
-\def\xmlaftersetup #1#2{\ctxlxml{installsetup(4,"*","#1","#2"))}}
+\unexpanded\def\xmlprependsetup #1{\ctxlxml{installsetup(1,"*","#1")}}
+\unexpanded\def\xmlappendsetup #1{\ctxlxml{installsetup(2,"*","#1")}}
+\unexpanded\def\xmlbeforesetup #1#2{\ctxlxml{installsetup(3,"*","#1","#2")}}
+\unexpanded\def\xmlaftersetup #1#2{\ctxlxml{installsetup(4,"*","#1","#2")}}
-\def\xmlprependdocumentsetup #1#2{\ctxlxml{installsetup(1,"#1","#2")}}
-\def\xmlappenddocumentsetup #1#2{\ctxlxml{installsetup(2,"#1","#2")}}
-\def\xmlbeforedocumentsetup#1#2#3{\ctxlxml{installsetup(3,"#1","#2","#3"))}}
-\def\xmlafterdocumentsetup #1#2#3{\ctxlxml{installsetup(4,"#1","#2","#3"))}}
+\unexpanded\def\xmlprependdocumentsetup #1#2{\ctxlxml{installsetup(1,"#1","#2")}}
+\unexpanded\def\xmlappenddocumentsetup #1#2{\ctxlxml{installsetup(2,"#1","#2")}}
+\unexpanded\def\xmlbeforedocumentsetup#1#2#3{\ctxlxml{installsetup(3,"#1","#2","#3")}}
+\unexpanded\def\xmlafterdocumentsetup #1#2#3{\ctxlxml{installsetup(4,"#1","#2","#3")}}
-\def\xmlremovesetup #1{\ctxlxml{removesetup("*","#1")}}
-\def\xmlremovedocumentsetup #1#2{\ctxlxml{removesetup("#1","#2")}}
+\unexpanded\def\xmlremovesetup #1{\ctxlxml{removesetup("*","#1")}}
+\unexpanded\def\xmlremovedocumentsetup #1#2{\ctxlxml{removesetup("#1","#2")}}
-\def\xmlflushdocumentsetups #1#2{\ctxlxml{flushsetups("#1","*","#2")}} % #1 == id where to apply * and #2
-\def\xmlresetdocumentsetups #1{\ctxlxml{resetsetups("#1")}}
+\unexpanded\def\xmlflushdocumentsetups #1#2{\ctxlxml{flushsetups("#1","*","#2")}} % #1 == id where to apply * and #2
+\unexpanded\def\xmlresetdocumentsetups #1{\ctxlxml{resetsetups("#1")}}
\let\xmlregistersetup \xmlappendsetup
\let\xmlregisterdocumentsetup\xmlappenddocumentsetup
\def\xmldocument{main}
-\def\xmlregisteredsetups
+\unexpanded\def\xmlregisteredsetups
{\xmlstarttiming
\xmlflushsetups
\xmldefaulttotext\xmldocument % after include
\xmlstoptiming}
-\def\xmlregistereddocumentsetups#1#2% id setups
+\unexpanded\def\xmlregistereddocumentsetups#1#2% id setups
{\xmlstarttiming
% todo: test for duplicates !
\xmlflushdocumentsetups{#1}{#2}%
\xmldefaulttotext{#1}% after include
\xmlstoptiming}
-\def\xmlstarttiming{\ctxlua{statistics.starttiming(lxml)}}
-\def\xmlstoptiming {\ctxlua{statistics.stoptiming (lxml)}}
+\unexpanded\def\xmlstarttiming{\ctxlua{statistics.starttiming(lxml)}}
+\unexpanded\def\xmlstoptiming {\ctxlua{statistics.stoptiming (lxml)}}
-\def\doxmlprocess#1#2#3#4#5% flag \loader id name what initializersetup
+\def\lxml_process#1#2#3#4#5% flag \loader id name what initializersetup
{\begingroup
\edef\xmldocument{#3}% #2 can be \xmldocument and set as such
%xmlpushdocument{#3}%
@@ -185,10 +182,10 @@
%xmlpopdocument
\endgroup}
-\def\xmlprocessfile {\doxmlprocess\plusone \xmlload}
-\def\xmlprocessdata {\doxmlprocess\zerocount\xmlloaddata}
-\def\xmlprocessbuffer {\doxmlprocess\zerocount\xmlloadbuffer}
-\def\xmlprocessregistered{\doxmlprocess\zerocount\xmlloadregistered}
+\unexpanded\def\xmlprocessfile {\lxml_process\plusone \xmlload}
+\unexpanded\def\xmlprocessdata {\lxml_process\zerocount\xmlloaddata}
+\unexpanded\def\xmlprocessbuffer {\lxml_process\zerocount\xmlloadbuffer}
+\unexpanded\def\xmlprocessregistered{\lxml_process\zerocount\xmlloadregistered}
\let\xmlprocess \xmlprocessfile
\startxmlsetups xml:flush
@@ -200,7 +197,7 @@
\xmlmain{#1}
\stopxmlsetups
-\def\xmlloadonly#1#2#3%
+\unexpanded\def\xmlloadonly#1#2#3%
{\xmlload{#1}{#2}%
\xmlregistereddocumentsetups{#1}{#3}}
@@ -208,7 +205,7 @@
% instructions preceding the root element; well, in some
% sense that is the root
-\long\def\xmlconnect#1#2#3% inefficient
+\unexpanded\def\xmlconnect#1#2#3% inefficient
{\scratchcounter\xmlcount{#1}{#2}\relax
\ifcase\scratchcounter \or
\xmlall{#1}{#2}%
@@ -218,10 +215,10 @@
\xmlidx{#1}{#2}\recurselevel}%
\fi}
-\def\xmlcdataobeyedline {\obeyedline}
-\def\xmlcdataobeyedspace{\strut\obeyedspace}
-\def\xmlcdatabefore {\bgroup\tt}
-\def\xmlcdataafter {\egroup}
+\unexpanded\def\xmlcdataobeyedline {\obeyedline}
+\unexpanded\def\xmlcdataobeyedspace{\strut\obeyedspace}
+\unexpanded\def\xmlcdatabefore {\bgroup\tt}
+\unexpanded\def\xmlcdataafter {\egroup}
% verbatim (dodo:pre/post whitespace, maybe splot verbatim and
% cdata commands), experimental:
@@ -242,7 +239,6 @@
\unexpanded\def\startxmldisplayverbatim[#1]%
{\startpacked % \begingroup
- \let\currenttypingclass\??tp
\edef\currenttyping{xml:#1}%
\unexpanded\def\stopxmldisplayverbatim
{\endofverbatimlines
@@ -252,8 +248,7 @@
\unexpanded\def\startxmlinlineverbatim[#1]%
{\begingroup
- \let\currenttypingclass\??ty
- \edef\currenttyping{xml:#1}%
+ \edef\currenttype{xml:#1}%
\let\stopxmldisplayverbatim\endgroup
\doinitializeverbatim}
@@ -292,16 +287,18 @@
\newconstant\xmlprocessingmode % 0=unset, 1=text, 2=hidden
-\newtoks\everysetupxml
+\installcorenamespace{xml}
+\installcorenamespace{xmldefaults}
+\installcorenamespace{xmlmapvalue}
-\unexpanded\def\setupxml[#1]{\getparameters[\??xm][#1]\the\everysetupxml}
+\installdirectcommandhandler \??xml {xml}
-\letvalue{\??xm:\s!default:\v!normal}\zerocount
-\letvalue{\??xm:\s!default:\v!none }\zerocount
-\letvalue{\??xm:\s!default:\v!text }\plusone
-\letvalue{\??xm:\s!default:\v!hidden}\plustwo
+\letvalue{\??xmldefaults\v!normal}\zerocount
+\letvalue{\??xmldefaults\v!none }\zerocount
+\letvalue{\??xmldefaults\v!text }\plusone
+\letvalue{\??xmldefaults\v!hidden}\plustwo
-\def\xmldefaulttotext#1%
+\unexpanded\def\xmldefaulttotext#1%
{\ifcase\xmlprocessingmode
% unset
\or
@@ -313,20 +310,29 @@
\fi}
\appendtoks
- \xmlprocessingmode\executeifdefined{\??xm:\s!default:\@@xmdefault}\plusone
+ \xmlprocessingmode\executeifdefined{\??xmldefaults\directxmlparameter\c!default}\plusone
\to \everysetupxml
-\def\xmlinitialize{\the\everysetupxml}
+\unexpanded\def\xmlinitialize
+ {\the\everysetupxml}
+
+\let\p_xml_entities\empty
+\let\p_xml_compress\empty
+
+\appendtoks
+ \edef\p_xml_entities{\directxmlparameter\c!entities}%
+ \edef\p_xml_compress{\directxmlparameter\c!compress}%
+\to \everysetupxml
\setupxml
[\c!default=, % flush all
\c!compress=\v!no, % strip comment
\c!entities=\v!yes] % replace entities
-\def\xmlmapvalue #1#2#3{\setvalue{\??xm:v:#1:#2}{#3}} % keep #3 to grab spaces
-\def\xmlvalue #1#2#3{\executeifdefined{\??xm:v:#1:#2}{#3}}
-%def\xmlvalue #1#2{\ifcsname\??xm:v:#1:#2\endcsname\csname\??xm:v:#1:#2\expandafter\expandafter\gobbleoneargument\expandafter\endcsname\else\expandafter\firstofoneargument\fi}
-\def\xmldoifelsevalue #1#2{\ifcsname\??xm:v:#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
+\def\xmlmapvalue #1#2#3{\setvalue{\??xmlmapvalue#1:#2}{#3}} % keep #3 to grab spaces
+\def\xmlvalue #1#2#3{\executeifdefined{\??xmlmapvalue#1:#2}{#3}}
+%def\xmlvalue #1#2{\ifcsname\??xmlmapvalue#1:#2\endcsname\csname\??xmlmapvalue#1:#2\expandafter\expandafter\gobbleoneargument\expandafter\endcsname\else\expandafter\firstofoneargument\fi}
+\def\xmldoifelsevalue #1#2{\ifcsname\??xmlmapvalue#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
\let\xmlmapval\xmlmapvalue
\let\xmlval \xmlvalue
@@ -349,26 +355,26 @@
\unexpanded\def\xmle
{\ifcase\xmlautoentities
- \expandafter\xmle@none
+ \expandafter\xml_e_none
\or
- \expandafter\xmle@upper
+ \expandafter\xml_e_upper
\or
- \expandafter\xmle@upperlower
+ \expandafter\xml_e_upperlower
\else
- \expandafter\xmle@none
+ \expandafter\xml_e_none
\fi}
-\def\xmle@none#1#2% safe
+\def\xml_e_none#1#2% safe
{#1}
-\def\xmle@upper#1#2% can be abbreviation
+\def\xml_e_upper#1#2% can be abbreviation
{\ifcsname#2\endcsname
\csname#2\expandafter\endcsname
\else
#1%
\fi}
-\def\xmle@upperlower#1#2% can be anything, so unsafe
+\def\xml_e_upperlower#1#2% can be anything, so unsafe
{\ifcsname#2\endcsname
\csname#2\expandafter\endcsname
\else\ifcsname#1\endcsname
@@ -380,9 +386,9 @@
% handy helpers (analogue to MP and LUA and TEX and also MkII)
\unexpanded\def\processXMLbuffer
- {\dosingleempty\doprocessXMLbuffer}
+ {\dosingleempty\xml_process_buffer}
-\def\doprocessXMLbuffer[#1]%
+\def\xml_process_buffer[#1]%
{\xmlprocessbuffer{temp}{#1}{}}
\unexpanded\def\processXMLfile#1%
diff --git a/tex/context/base/lxml-sor.mkiv b/tex/context/base/lxml-sor.mkiv
index 88952d661..0ee1f16f3 100644
--- a/tex/context/base/lxml-sor.mkiv
+++ b/tex/context/base/lxml-sor.mkiv
@@ -19,11 +19,11 @@
\unprotect
-\def\xmlresetsorter #1{\ctxlxml{sorters.reset("#1")}}
-\def\xmladdsortentry#1#2#3{\ctxlxml{sorters.add("#1","#2",\!!bs#3\!!es)}}
-\def\xmlshowsorter #1{\ctxlxml{sorters.show("#1")}}
-\def\xmlflushsorter #1#2{\ctxlxml{sorters.flush("#1","#2")}}
-\def\xmlsortentries #1{\ctxlxml{sorters.sort("#1")}}
+\unexpanded\def\xmlresetsorter #1{\ctxlxml{sorters.reset("#1")}}
+\unexpanded\def\xmladdsortentry#1#2#3{\ctxlxml{sorters.add("#1","#2",\!!bs#3\!!es)}}
+\unexpanded\def\xmlshowsorter #1{\ctxlxml{sorters.show("#1")}}
+\unexpanded\def\xmlflushsorter #1#2{\ctxlxml{sorters.flush("#1","#2")}}
+\unexpanded\def\xmlsortentries #1{\ctxlxml{sorters.sort("#1")}}
\protect \endinput
diff --git a/tex/context/base/m-chart.mkvi b/tex/context/base/m-chart.mkvi
index 866d3c45b..a9de44859 100644
--- a/tex/context/base/m-chart.mkvi
+++ b/tex/context/base/m-chart.mkvi
@@ -339,13 +339,11 @@
\begingroup
\directsetup{flowcell:text:user}
\doifelsenothing {\getvariable{flowcell:text}{figure}} {
- \doframed
- [flowcell:\getvariable{flowcell:text}{align}]
+ \expandcheckedcsname{flowcell:}{\getvariable{flowcell:text}{align}}\empty
{\getvariable{flowcell:text}{text}}
} {
- \doframed
- [flowcell:\getvariable{flowcell:text}{align}]
- [background=flowcell:figure]
+ \expandcheckedcsname{flowcell:}{\getvariable{flowcell:text}{align}}\empty
+ [\c!background=flowcell:figure]
{\getvariable{flowcell:text}{text}}
}
\endgroup
diff --git a/tex/context/base/m-database.mkiv b/tex/context/base/m-database.mkiv
index 370045d4b..cef0aa815 100644
--- a/tex/context/base/m-database.mkiv
+++ b/tex/context/base/m-database.mkiv
@@ -86,7 +86,7 @@
\def\dodefineseparatedlist[#1][#2]%
{\definedatabase[#1][#2]%
- \setuvalue{\e!start#1}{\dostartbuffer[#1][\e!start#1][\e!stop#1]}%
+ \setuvalue{\e!start#1}{\grabbufferdatadirect{#1}{\e!start#1}{\e!stop#1}}%
\setuvalue{\e!stop#1}{\processdatabasebuffer[#1][#1]}}
\def\processseparatedfile[#1][#2]%
@@ -94,7 +94,7 @@
\def\startseparatedlist[#1]% to be interfaced
{\def\stopseparatedlist{\processdatabasebuffer[#1][#1]}%
- \dostartbuffer[#1][startseparatedlist][stopseparatedlist]}
+ \grabbufferdatadirect{#1}{startseparatedlist}{stopseparatedlist}}
\protect
diff --git a/tex/context/base/math-ali.mkiv b/tex/context/base/math-ali.mkiv
index 9e2837cc2..0738666f0 100644
--- a/tex/context/base/math-ali.mkiv
+++ b/tex/context/base/math-ali.mkiv
@@ -204,7 +204,10 @@
\dostoptagged
\dostoptagged}
-\installcommandhandler \??eq {mathalignment} \??eq
+\installcorenamespace{mathalignment}
+\installcorenamespace{mathalignmentvariant}
+
+\installcommandhandler \??mathalignment {mathalignment} \??mathalignment
\appendtoks
\setuevalue{\e!start\currentmathalignment}{\math_alignment_start{\currentmathalignment}}%
@@ -235,27 +238,27 @@
\dostarttagged\t!mathtablecell\empty}
\def\math_left_of_equalign
- {\ifcsname\??eq::a::\number\c_math_eqalign_column\endcsname
- \ifcase\csname\??eq::a::\number\c_math_eqalign_column\endcsname\or
+ {\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname
+ \ifcase\csname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname\or
\relax \or \hfill \or \hfill
\fi
\fi}
\def\math_right_of_eqalign
- {\ifcsname\??eq::a::\number\c_math_eqalign_column\endcsname
- \ifcase\csname\??eq::a::\number\c_math_eqalign_column\endcsname\or
+ {\ifcsname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname
+ \ifcase\csname\??mathalignmentvariant\number\c_math_eqalign_column\endcsname\or
\hfill \or \relax \or \hfill
\fi
\fi}
\def\doseteqaligncolumn#1% we could just add to the preamble (as with other alignments)
- {\expandafter\let\csname\??eq::a::\number\c_math_eqalign_column\expandafter\endcsname
- \csname\??eq::a::\ifcsname\??eq::a::#1\endcsname#1\else\v!normal\fi\endcsname}
+ {\expandafter\let\csname\??mathalignmentvariant\number\c_math_eqalign_column\expandafter\endcsname
+ \csname\??mathalignmentvariant\ifcsname\??mathalignmentvariant#1\endcsname#1\else\v!normal\fi\endcsname}
-\letvalue{\??eq::a::\v!normal}\zerocount
-\letvalue{\??eq::a::\v!left }\plusone
-\letvalue{\??eq::a::\v!right }\plustwo
-\letvalue{\??eq::a::\v!middle}\plusthree
+\letvalue{\??mathalignmentvariant\v!normal}\zerocount
+\letvalue{\??mathalignmentvariant\v!left }\plusone
+\letvalue{\??mathalignmentvariant\v!right }\plustwo
+\letvalue{\??mathalignmentvariant\v!middle}\plusthree
\def\math_align_NR_generic[#1][#2]%
{\donestedformulanumber{#1}{#2}\crcr}
@@ -396,7 +399,9 @@
%D
%D Another wish \unknown
-\installcommandhandler \??ce {mathcases} \??ce
+\installcorenamespace{mathcases}
+
+\installcommandhandler \??mathcases {mathcases} \??mathcases
\setupmathcases
[\c!distance=1em,
@@ -501,7 +506,9 @@
%D
%D Yet another one \unknown
-\installcommandhandler \??mk {mathmatrix} \??mk
+\installcorenamespace{mathmatrix}
+
+\installcommandhandler \??mathmatrix {mathmatrix} \??mathmatrix
\setupmathmatrix
[\c!distance=1em,
@@ -577,8 +584,10 @@
\unexpanded\def\dodomatrixNC
{\gdef\domatrixNC{\endmath&}}
+\installcorenamespace{mathmatrixhandler}
+
\def\installmathmatrixhandler#1#2%
- {\setvalue{\??mx:h:#1}{#2}}
+ {\setvalue{\??mathmatrixhandler#1}{#2}}
\let\mathmatrixleft \empty % experimental hook
\let\mathmatrixright\empty % experimental hook
@@ -600,7 +609,7 @@
\installmathmatrixhandler\v!normal{\def\mathmatrixbox{\math_matrix_process\plustwo \zerocount}} % lohi
\def\math_matrix_handler_apply
- {\csname\??mx:h:\ifcsname\??mx:h:\mathmatrixparameter\c!location\endcsname
+ {\csname\??mathmatrixhandler\ifcsname\??mathmatrixhandler\mathmatrixparameter\c!location\endcsname
\mathmatrixparameter\c!location
\else
\v!normal
@@ -893,18 +902,18 @@
%D \type {\stopinnermath} can be overloaded in specialized
%D modules.
-\unexpanded\def\startinnermath
- {\csname\??fm:\e!start:\formulaparameter\c!align\endcsname}
+\installcorenamespace{mathinnerstart}
+\installcorenamespace{mathinnerstop}
-\unexpanded\def\stopinnermath
- {\csname\??fm:\e!stop :\formulaparameter\c!align\endcsname}
+\unexpanded\def\startinnermath{\csname\??mathinnerstart\formulaparameter\c!align\endcsname}
+\unexpanded\def\stopinnermath {\csname\??mathinnerstop \formulaparameter\c!align\endcsname}
-\def\mathinnerstrut
+\unexpanded\def\mathinnerstrut
{\doif{\formulaparameter\c!strut}\v!yes\strut}
\unexpanded\def\defineinnermathhandler#1#2#3%
- {\setvalue{\??fm:\e!start:#1}{#2}%
- \setvalue{\??fm:\e!stop :#1}{#3}}
+ {\setvalue{\??mathinnerstart#1}{#2}%
+ \setvalue{\??mathinnerstop #1}{#3}}
\newif\iftracemath
diff --git a/tex/context/base/math-for.mkiv b/tex/context/base/math-for.mkiv
index ebb5ec534..aee640572 100644
--- a/tex/context/base/math-for.mkiv
+++ b/tex/context/base/math-for.mkiv
@@ -21,8 +21,11 @@
%D \macros
%D {setupformulas,setupsubformulas}
-\installcommandhandler \??fm {formula} \??fm
-\installcommandhandler \??fn {subformula} \??fn % maybe just setuphandler (no childs used yet)
+\installcorenamespace{formula}
+\installcorenamespace{subformula}
+
+\installcommandhandler \??formula {formula} \??formula
+\installcommandhandler \??subformula {subformula} \??subformula % maybe just setuphandler (no childs used yet)
\let\setupformulas \setupformula
\let\setupsubformulas\setupsubformula
diff --git a/tex/context/base/meta-fig.mkiv b/tex/context/base/meta-fig.mkiv
index 644501260..7d268b77d 100644
--- a/tex/context/base/meta-fig.mkiv
+++ b/tex/context/base/meta-fig.mkiv
@@ -51,7 +51,7 @@
%D
%D A bit out of place, here but nevertheless:
-\def\MPfigure#1#2% test for dup figure, can be replaced by a textext
+\unexpanded\def\MPfigure#1#2% test for dup figure, can be replaced by a textext
{\bgroup
\getfiguredimensionsonly[#1]% [\c!object=\v!no] already set
\startMPcode
diff --git a/tex/context/base/meta-ini.mkiv b/tex/context/base/meta-ini.mkiv
index 2732341d5..09e26edf1 100644
--- a/tex/context/base/meta-ini.mkiv
+++ b/tex/context/base/meta-ini.mkiv
@@ -27,6 +27,12 @@
\def\currentMPformat {metafun}
\def\defaultMPgraphicinstance{metafun}
+%installcorenamespace{graphicvariable} % todo
+\installcorenamespace{mpinstancetokens}
+\installcorenamespace{mpgraphic}
+\installcorenamespace{mpstaticgraphic}
+\installcorenamespace{mpclip}
+
% The next command is, of course, dedicated to Mojca, who
% needs it for gnuplot. Anyway, the whole multiple engine
% mechanism is to keep her gnuplot from interfering.
@@ -82,13 +88,13 @@
\edef\currentwidth {\the\hsize \space}%
\edef\currentheight {\the\vsize \space}}
-\def\t_mp_instance{\csname\??gi:t:\currentMPgraphicinstance\endcsname} % token register
+\def\t_mp_instance{\csname\??mpinstancetokens\currentMPgraphicinstance\endcsname} % token register
\unexpanded\def\defineMPinstance
{\dodoubleargument\mp_define_instance}
\def\mp_define_instance[#1][#2]%
- {\ifcsname\??gi:t:#1\endcsname\else\expandafter\newtoks\csname\??gi:t:#1\endcsname\fi
+ {\ifcsname\??mpinstancetokens#1\endcsname\else\expandafter\newtoks\csname\??mpinstancetokens#1\endcsname\fi
\t_mp_instance\emptytoks % in case we redefine
\getparameters[\??gi#1][\s!format=mpost,\s!extensions=\v!no,\s!initializations=\v!no,#2]}
@@ -122,22 +128,25 @@
\defineMPinstance[metapost][\s!format=mpost]
\defineMPinstance[nofun] [\s!format=mpost]
-\def\beginMPgraphicgroup#1%
+\newconditional\mp_include_extensions
+\newconditional\mp_include_initializations
+
+\def\mp_begin_graphic_group#1%
{\begingroup
\mp_analyze_graphicname[#1]}
-\def\endMPgraphicgroup
+\def\mp_end_graphic_group
{\endgroup}
\def\MPaskedfigure{false}
-\def\currentMPinitializations
- {\ifconditional\includeMPinitializations\the\t_mp_initializations;\fi\theMPrandomseed;}
+\def\mp_flush_current_initializations
+ {\ifconditional\mp_include_initializations\the\t_mp_initializations;\fi\theMPrandomseed;}
-\def\currentMPpreamble
- {\ifconditional\includeMPextensions\the\t_mp_extensions;\the\t_mp_userinclusions;\fi\the\t_mp_instance;}
+\def\mp_flush_current_preamble
+ {\ifconditional\mp_include_extensions\the\t_mp_extensions;\the\t_mp_userinclusions;\fi\the\t_mp_instance;}
-\def\dostartcurrentMPgraphic
+\def\mp_start_current_graphic
{\begingroup
\mp_enable_include
\the\everyMPgraphic
@@ -145,32 +154,32 @@
\setMPrandomseed % this has to change
% we need to preexpand the token lists
\doifelsevalue{\??gi\currentMPgraphicinstance\s!extensions}\v!yes
- {\settrue \includeMPextensions
+ {\settrue \mp_include_extensions
\letgvalue{\??gi\currentMPgraphicinstance\s!extensions}\v!no}
- {\setfalse\includeMPextensions}%
+ {\setfalse\mp_include_extensions}%
\doifelsevalue{\??gi\currentMPgraphicinstance\s!initializations}\v!yes
- {\settrue \includeMPinitializations}%
- {\setfalse\includeMPinitializations}}
+ {\settrue \mp_include_initializations}%
+ {\setfalse\mp_include_initializations}}
-\def\dostopcurrentMPgraphic
+\def\mp_stop_current_graphic
{\global\t_mp_instance\emptytoks
\endgroup}
\unexpanded\def\mp_process_graphic#1% todo: extensions and inclusions outside beginfig
- {\dostartcurrentMPgraphic
+ {\mp_start_current_graphic
\forgetall
\setbox\b_mp_graphic\hbox\bgroup % ; added 20100901 (as in mkii)
\normalexpanded{\noexpand\ctxlua{metapost.graphic(
"\currentMPgraphicinstance",
"\currentMPgraphicformat",
\!!bs#1;\!!es,
- \!!bs\currentMPinitializations;\!!es,
- \!!bs\currentMPpreamble;\!!es,
+ \!!bs\mp_flush_current_initializations;\!!es,
+ \!!bs\mp_flush_current_preamble;\!!es,
\MPaskedfigure
)}}%
\egroup
\placeMPgraphic
- \dostopcurrentMPgraphic}
+ \mp_stop_current_graphic}
\newif\ifsetMPrandomseed \setMPrandomseedtrue % false by default
@@ -184,8 +193,8 @@
%D Calling up previously defined graphics.
\def\includeMPgraphic#1% gets expanded !
- {\ifcsname\??gm:#1\endcsname
- \csname\??gm:#1\endcsname ; % ; is safeguard
+ {\ifcsname\??mpgraphic#1\endcsname
+ \csname\??mpgraphic#1\endcsname ; % ; is safeguard
\fi}
\unexpanded\def\mp_enable_include % public
@@ -240,7 +249,7 @@
\egroup}
\unexpanded\def\startMPclip#1#2\stopMPclip % todo: store at the lua end or just store less
- {\setgvalue{\??gm:c:#1}{#2}}
+ {\setgvalue{\??mpclip#1}{#2}}
\let\stopMPclip\relax
@@ -248,16 +257,16 @@
{\begingroup
\edef\width {#2\space}\let\overlaywidth \width
\edef\height{#3\space}\let\overlayheight\height
- \ifcsname\??gm:c:#1\endcsname
- \dostartcurrentMPgraphic
+ \ifcsname\??mpmpclip#1\endcsname
+ \mp_start_current_graphic
\xdef\MPclippath{\normalexpanded{\noexpand\ctxlua{metapost.theclippath(
"\currentMPgraphicinstance",
"\currentMPgraphicformat",
- \!!bs\getvalue{\??gm:c:#1}\!!es,
- \!!bs\currentMPinitializations\!!es,
- \!!bs\currentMPpreamble\!!es
+ \!!bs\getvalue{\??mpclip#1}\!!es,
+ \!!bs\mp_flush_current_initializations\!!es,
+ \!!bs\mp_flush_current_preamble\!!es
)}}}%
- \dostopcurrentMPgraphic
+ \mp_stop_current_graphic
\ifx\MPclippath\empty
\xdef\MPclippath{#4}%
\fi
@@ -482,20 +491,20 @@
{\begingroup % when there are that many they're probably not that unique anyway
\edef\currentmpvariableclass{#1}%
\extendMPoverlaystamp{#2}% incl prepare
- \ifcsname\??gm:\overlaystamp:#1\endcsname\else
+ \ifcsname\??mpgraphic\overlaystamp:#1\endcsname\else
\mp_enable_include % redundant
\global\advance\c_mp_object_counter\plusone
\setobject{MP}{\number\c_mp_object_counter}\hbox{\mp_process_graphic{#3}}% was vbox, graphic must end up as hbox
- \setxvalue{\??gm:\overlaystamp:#1}{\mp_reuse_box{\number\c_mp_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
+ \setxvalue{\??mpgraphic\overlaystamp:#1}{\mp_reuse_box{\number\c_mp_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
\fi
- \getvalue{\??gm:\overlaystamp:#1}%
+ \getvalue{\??mpgraphic\overlaystamp:#1}%
\endgroup}
\unexpanded\def\startuniqueMPgraphic
{\dodoublegroupempty\mp_start_unique_graphic}
\def\mp_start_unique_graphic#1#2#3\stopuniqueMPgraphic
- {\setgvalue{\??gm:#1}{\mp_handle_unique_graphic{#1}{#2}{#3}}}
+ {\setgvalue{\??mpgraphic#1}{\mp_handle_unique_graphic{#1}{#2}{#3}}}
\let\stopuniqueMPgraphic\relax
@@ -503,10 +512,10 @@
{\dodoublegroupempty\mp_unique_graphic}
\def\mp_unique_graphic#1#2%
- {\beginMPgraphicgroup{#1}%
+ {\mp_begin_graphic_group{#1}%
\setupMPvariables[\currentMPgraphicname][#2]%
- \getvalue{\??gm:\currentMPgraphicname}\empty
- \endMPgraphicgroup}
+ \getvalue{\??mpgraphic\currentMPgraphicname}\empty
+ \mp_end_graphic_group}
\def\mp_handle_use_graphic#1#2#3%
{\begingroup
@@ -520,7 +529,7 @@
{\dodoublegroupempty\mp_start_use_graphic}
\def\mp_start_use_graphic#1#2#3\stopuseMPgraphic
- {\setgvalue{\??gm:#1}{\mp_handle_use_graphic{#1}{#2}{#3}}}
+ {\setgvalue{\??mpgraphic#1}{\mp_handle_use_graphic{#1}{#2}{#3}}}
\let\stopuseMPgraphic\relax
@@ -528,7 +537,7 @@
{\dodoublegroupempty\mp_start_usable_graphic}
\def\mp_start_usable_graphic#1#2#3\stopusableMPgraphic
- {\setgvalue{\??gm:#1}{\mp_handle_use_graphic{#1}{#2}{#3}}}
+ {\setgvalue{\??mpgraphic#1}{\mp_handle_use_graphic{#1}{#2}{#3}}}
\let\stopusableMPgraphic\relax
@@ -539,15 +548,15 @@
\mp_enable_include % redundant
\global\advance\c_mp_object_counter\plusone
\setobject{MP}{\number\c_mp_object_counter}\hbox{\mp_process_graphic{#3}}% was vbox, graphic must end up as hbox
- \setxvalue{\??gm:#1}{\mp_reuse_box{\number\c_mp_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
- \getvalue{\??gm:#1}%
+ \setxvalue{\??mpgraphic#1}{\mp_reuse_box{\number\c_mp_object_counter}{\the\MPllx}{\the\MPlly}{\the\MPurx}{\the\MPury}}%
+ \getvalue{\??mpgraphic#1}%
\endgroup}
\unexpanded\def\startreusableMPgraphic
{\dodoublegroupempty\mp_start_reusable_graphic}
\def\mp_start_reusable_graphic#1#2#3\stopreusableMPgraphic
- {\setgvalue{\??gm:#1}{\mp_handle_reusable_graphic{#1}{#2}{#3}}}
+ {\setgvalue{\??mpgraphic#1}{\mp_handle_reusable_graphic{#1}{#2}{#3}}}
\let\stopreusableMPgraphic\relax
@@ -555,10 +564,10 @@
{\dodoublegroupempty\mp_use_graphic}
\def\mp_use_graphic#1#2%
- {\beginMPgraphicgroup{#1}%
+ {\mp_begin_graphic_group{#1}%
\doifsomething{#2}{\setupMPvariables[\currentMPgraphicname][#2]}%
- \getvalue{\??gm:\currentMPgraphicname}\empty
- \endMPgraphicgroup}
+ \getvalue{\??mpgraphic\currentMPgraphicname}\empty
+ \mp_end_graphic_group}
\let\reuseMPgraphic \useMPgraphic % we can save a setup here if needed
\let\reusableMPgraphic\reuseMPgraphic % we can save a setup here if needed
@@ -580,9 +589,9 @@
\unexpanded\def\startuniqueMPpagegraphic
{\dodoublegroupempty\mp_start_unique_page_graphic}
-\def\mp_start_unique_page_graphic#1#2#3\stopuniqueMPpagegraphic % inefficient, double storage
- {\setgvalue{\??gm:o:#1}{\mp_handle_unique_graphic{o:#1}{#2}{#3}}% % but these also keep the state
- \setgvalue{\??gm:e:#1}{\mp_handle_unique_graphic{e:#1}{#2}{#3}}} % and meaning will be redefined
+\def\mp_start_unique_page_graphic#1#2#3\stopuniqueMPpagegraphic % inefficient, double storage
+ {\setgvalue{\??mpgraphic o:#1}{\mp_handle_unique_graphic{o:#1}{#2}{#3}}% % but these also keep the state
+ \setgvalue{\??mpgraphic e:#1}{\mp_handle_unique_graphic{e:#1}{#2}{#3}}} % and meaning will be redefined
\let\stopuniqueMPpagegraphic\relax
@@ -590,11 +599,11 @@
{\dodoublegroupempty\mp_unique_page_graphic}
\def\mp_unique_page_graphic#1#2%
- {\beginMPgraphicgroup{#1}%
+ {\mp_begin_graphic_group{#1}%
\let\overlaystamp\overlaypagestamp
\setupMPvariables[\m_mp_page_prefix:\currentMPgraphicname][#2]% prefix is new here
- \getvalue{\??gm:\m_mp_page_prefix:\currentMPgraphicname}{}%
- \endMPgraphicgroup}
+ \getvalue{\??mpgraphic\m_mp_page_prefix:\currentMPgraphicname}{}%
+ \mp_end_graphic_group}
%D One way of defining a stamp is:
%D
@@ -653,9 +662,9 @@
{\dosingleempty\mp_process_buffer}
\def\mp_process_buffer[#1]%
- {\beginMPgraphicgroup{#1}%
+ {\mp_begin_graphic_group{#1}%
\mp_process_graphic{\ctxcommand{feedback("\currentMPgraphicname")}}%
- \endMPgraphicgroup}
+ \mp_end_graphic_group}
\unexpanded\def\runMPbuffer
{\dosingleempty\mp_run_buffer}
@@ -717,10 +726,10 @@
\fi}
\def\mp_start_code_instance#1#2\stopMPcode
- {\beginMPgraphicgroup{#1::\s!dummy}% name does not matter
+ {\mp_begin_graphic_group{#1::\s!dummy}% name does not matter
\mp_enable_include
\mp_process_graphic{#2}%
- \endMPgraphicgroup}
+ \mp_end_graphic_group}
\def\mp_start_code_standard#1#2\stopMPcode
{\mp_process_graphic{#2}}
@@ -738,9 +747,9 @@
\fi}
\def\mp_code_instance#1#2%
- {\beginMPgraphicgroup{#1::\s!dummy}% name does not matter
+ {\mp_begin_graphic_group{#1::\s!dummy}% name does not matter
\mp_process_graphic{#2}%
- \endMPgraphicgroup}
+ \mp_end_graphic_group}
\def\mp_code_standard#1% #2
{\mp_process_graphic}
@@ -815,13 +824,15 @@
%D \MPbetex {identifier}
%D \stoptyping
+\installcorenamespace{mptext}
+
\unexpanded\def\setMPtext#1#2% todo : #1 must be made : safe
{\defconvertedargument\ascii{#2}%
- \dodoglobal\letvalue{\??gt:#1}\ascii}
+ \dodoglobal\letvalue{\??mptext#1}\ascii}
-\def\MPtext #1{\executeifdefined{\??gt:#1}\empty}
-\def\MPstring#1{"\executeifdefined{\??gt:#1}\empty"}
-\def\MPbetex #1{btex \executeifdefined{\??gt:#1}\empty\space etex}
+\def\MPtext #1{\executeifdefined{\??mptext#1}\empty}
+\def\MPstring#1{"\executeifdefined{\??mptext#1}\empty"}
+\def\MPbetex #1{btex \executeifdefined{\??mptext#1}\empty\space etex}
%D In order to communicate conveniently with the \TEX\
%D engine, we introduce some typesetting variables.
@@ -863,9 +874,9 @@
\disablecompoundcharacters
\to \everyMPgraphic
-\appendtoks % before color
- \doregistercolor{currentcolor}\currentcolorname
-\to \everyMPgraphic
+% \appendtoks % before color, inefficient, replace by low level copy
+% \doregistercolor{currentcolor}\currentcolorname
+% \to \everyMPgraphic
% \color[green]{abc \startMPcode
% fill fullcircle scaled 3cm withoutcolor;
@@ -947,10 +958,10 @@
%D processing the screen version of the \METAFUN\ manual.
\def\doifelseMPgraphic#1%
- {\ifcsname\??gm :#1\endcsname \expandafter \firstoftwoarguments \else
- \ifcsname\??gm:o:#1\endcsname \doubleexpandafter\firstoftwoarguments \else
- \ifcsname\??gm:e:#1\endcsname \tripleexpandafter\firstoftwoarguments \else
- \tripleexpandafter\secondoftwoarguments \fi\fi\fi}
+ {\ifcsname\??mpgraphic #1\endcsname \expandafter \firstoftwoarguments \else
+ \ifcsname\??mpgraphic o:#1\endcsname \doubleexpandafter\firstoftwoarguments \else
+ \ifcsname\??mpgraphic e:#1\endcsname \tripleexpandafter\firstoftwoarguments \else
+ \tripleexpandafter\secondoftwoarguments \fi\fi\fi}
\let\doifMPgraphicelse\doifelseMPgraphic
@@ -1027,13 +1038,13 @@
%D \typebuffer \getbuffer
\unexpanded\def\startstaticMPfigure#1#2\stopstaticMPfigure
- {\startreusableMPgraphic{\??gm:s:#1}#2\stopreusableMPgraphic}
+ {\startreusableMPgraphic{\??mpstaticgraphic#1}#2\stopreusableMPgraphic}
\unexpanded\def\startstaticMPgraphic
{\dodoublegroupempty\mp_start_static_graphic}
\def\mp_start_static_graphic#1#2#3\stopstaticMPgraphic
- {\startreusableMPgraphic{\??gm:s:#1}{#2}#3\stopreusableMPgraphic}
+ {\startreusableMPgraphic{\??mpstaticgraphic#1}{#2}#3\stopreusableMPgraphic}
\let\stopstaticMPfigure \relax
\let\stopstaticMPgraphic\relax
@@ -1043,9 +1054,9 @@
\def\mp_use_static_figure[#1][#2]%
{\ifsecondargument
- \scale[#2]{\reuseMPgraphic{\??gm:s:#1}}%
+ \scale[#2]{\reuseMPgraphic{\??mpstaticgraphic#1}}%
\else
- \reuseMPgraphic{\??gm:s:#1}%
+ \reuseMPgraphic{\??mpstaticgraphic#1}%
\fi}
%D Goody for preventing overflows:
@@ -1090,10 +1101,8 @@
\newconstant\MPcolormethod
-% can be faster, just
-
\appendtoks
- \ctxlua{metapost.setoutercolor(\number\MPcolormethod,\number\currentcolormodel,\number\dogetattribute{color},\number\dogetattribute{transparency})}%
+ \ctxlua{metapost.setoutercolor(\number\MPcolormethod,\number\attribute\colormodelattribute,\number\attribute\colorattribute,\number\dogetattribute{transparency})}%
\to \everyMPgraphic
\startMPinitializations
diff --git a/tex/context/base/meta-tex.mkiv b/tex/context/base/meta-tex.mkiv
index 644db27d9..f31910460 100644
--- a/tex/context/base/meta-tex.mkiv
+++ b/tex/context/base/meta-tex.mkiv
@@ -19,6 +19,10 @@
% looks a bit like a hack. But in fact this method is obsolete and
% eventually might go away.
+\installcorenamespace{graphictextext}
+\installcorenamespace{graphictexdepth}
+\installcorenamespace{graphictexarguments}
+
\unexpanded\def\startTeXtexts#1\stopTeXtexts
{#1}
@@ -28,23 +32,23 @@
{\dosingleempty\mp_textext}
\def\mp_textext[#1]#2#3% contrary to mkii we don't process yet but we do expand
- {\setxvalue{\??gx:#2}{\mp_textext_indeed{#1}{#3}}}
+ {\setxvalue{\??graphictextext#2}{\mp_textext_indeed{#1}{#3}}}
\unexpanded\def\mp_textext_indeed#1#2%
{\begingroup
\setbox\nextbox\hbox{#2}%
- \executeifdefined{\??gx:m:#1}{\getvalue{\??gx:m:depth}}%
+ \executeifdefined{\??graphictexdepth#1}{\getvalue{\??graphictexdepth\s!depth}}%
\box\nextbox
\endgroup}
\def\getTeXtext#1%
- {\getvalue{\??gx:#1}}
+ {\getvalue{\??graphictextext#1}}
-\setvalue{\??gx:m:d}{\setbox\nextbox\hbox{\lower\dp\nextbox\box\nextbox}} % unchecked
-\setvalue{\??gx:m:n}{} % unchecked
+\setvalue{\??graphictexdepth d}{\setbox\nextbox\hbox{\lower\dp\nextbox\box\nextbox}} % unchecked
+\letvalue{\??graphictexdepth n}\donothing % unchecked
-\setvalue {\??gx:m:depth}{\getvalue{\??gx:m:d}}
-\setvalue{\??gx:m:nodepth}{\getvalue{\??gx:m:n}}
+\setvalue{\??graphictexdepth\s!depth }{\getvalue{\??graphictexdepth d}}
+\letvalue{\??graphictexdepth\s!nodepth}\donothing
% \definetextext[framed]{\framed}
%
@@ -66,8 +70,8 @@
{\def\currenttextext{#1}%
\doifnextoptionalelse\mp_define_textext_one\mp_define_textext_zero}
-\def\mp_define_textext_one {\setvalue{\??gx:1:\currenttextext}}
-\def\mp_define_textext_zero{\setvalue{\??gx:0:\currenttextext}}
+\def\mp_define_textext_one {\setvalue{\??graphictexarguments1:\currenttextext}}
+\def\mp_define_textext_zero{\setvalue{\??graphictexarguments0:\currenttextext}}
\def\sometxt#1#{\mp_some_txt{#1}}
@@ -80,20 +84,20 @@
\def\mp_some_txt_indeed_yes[#1]%
{\def\currenttextext{#1}%
- \csname\??gx:%
- \ifcsname\??gx:0:#1\endcsname0\else
- \ifcsname\??gx:1:#1\endcsname1\else
- ?\fi\fi
+ \csname\??graphictexarguments
+ \ifcsname\??graphictexarguments0:#1\endcsname0\else
+ \ifcsname\??graphictexarguments1:#1\endcsname1\else
+ ?\fi\fi
\endcsname}
\def\mp_some_txt_indeed_nop
{}
-\setvalue{\??gx:?}{}
-\setvalue{\??gx:0}{\csname\??gx:0:\currenttextext\endcsname}
-\setvalue{\??gx:1}{\dosingleempty\mp_gx_one}
+\setvalue{\??graphictexarguments ?}{}
+\setvalue{\??graphictexarguments 0}{\csname\??graphictexarguments\currenttextext\endcsname}
+\setvalue{\??graphictexarguments 1}{\dosingleempty\mp_gx_one}
-\def\mp_gx_one{\csname\??gx:1:\currenttextext\endcsname}
+\def\mp_gx_one{\csname\??graphictexarguments1:\currenttextext\endcsname}
% \definetextext[framed][#1]#2{\framed[width=4cm]{\switchtobodyfont[#1]#2}}
% \definetextext[simple]{\framed[width=8cm]}
diff --git a/tex/context/base/mlib-pdf.mkiv b/tex/context/base/mlib-pdf.mkiv
index 05c772720..407ecb534 100644
--- a/tex/context/base/mlib-pdf.mkiv
+++ b/tex/context/base/mlib-pdf.mkiv
@@ -93,7 +93,7 @@
\def\startMPLIBtoPDF#1#2#3#4%
{\dostarttagged\t!mpgraphic\empty
\naturalhbox attr \imageattribute 1 \bgroup
- \doactivatecolor\s!black\forcecolorhack
+ \dousecolorparameter\s!black\forcecolorhack
\setMPboundingbox{#1}{#2}{#3}{#4}%
\setbox\MPbox\vbox\bgroup
% \forgetall % already done elsewhere
@@ -130,23 +130,23 @@
\def\directstopMPLIBtoPDF {\normalstopMPLIBtoPDF\stopTEXpage}
\unexpanded\def\directMPgraphic
- {\dodoublegroupempty\dodirectMPgraphic}
+ {\dodoublegroupempty\mlib_direct_graphic}
-\unexpanded\long\def\directMPgraphic#1#2% makes pages (todo: make boxes)
- {\beginMPgraphicgroup{#1}%
+\def\mlib_direct_graphic#1#2% makes pages (todo: make boxes)
+ {\mp_begin_graphic_group{#1}%
\let\startMPLIBtoPDF\directstartMPLIBtoPDF
\let\stopMPLIBtoPDF \directstopMPLIBtoPDF
- \dostartcurrentMPgraphic
+ \mp_start_current_graphic
\forgetall
\normalexpanded{\noexpand\ctxlua{metapost.graphic(
"\currentMPgraphicinstance",
"\currentMPgraphicformat",
\!!bs#2;\!!es,
- \!!bs\currentMPinitializations;\!!es,
- \!!bs\currentMPpreamble;\!!es,
+ \!!bs\mp_flush_current_initializations;\!!es,
+ \!!bs\mp_flush_current_preamble;\!!es,
"all"
)}}%
- \dostopcurrentMPgraphic
- \endMPgraphicgroup}
+ \mp_stop_current_graphic
+ \mp_end_graphic_group}
\protect \endinput
diff --git a/tex/context/base/mlib-pps.mkiv b/tex/context/base/mlib-pps.mkiv
index cebaddb0c..a9b2e6e70 100644
--- a/tex/context/base/mlib-pps.mkiv
+++ b/tex/context/base/mlib-pps.mkiv
@@ -17,20 +17,7 @@
%D Todo: catch nested graphics like external figures with dummies.
-% \newtoks\everyMPLIBtext % not yet used
-
-% \appendtoks
-% \let\handleuseMPgraphic \thirdofthreearguments
-% \let\handlereusableMPgraphic\thirdofthreearguments
-% \to \everyMPLIBtext
-
-% this will move !
-
-% Instead of preallocated boxes we now use a table of lists so that we
-% have no limitation. Typically an example of a next version solution
-% due to \LUATEX\ evolving.
-
-% TODO: foigure out why this is shifted
+% todo: figure out why this is shifted
%
% \setupbodyfont[palatino]
%
@@ -40,8 +27,8 @@
% \stopMPpage
% \stoptext
%
-% A slightly larger picturew works ok. Some kind of interference
-% with the OTR.
+% A slightly larger picture works ok so maybe there is some kind
+% of interference with the page builder.
\newbox \MPtextbox
\newtoks\everyMPLIBsettext
diff --git a/tex/context/base/mult-aux.mkiv b/tex/context/base/mult-aux.mkiv
index 902f88f45..444418a90 100644
--- a/tex/context/base/mult-aux.mkiv
+++ b/tex/context/base/mult-aux.mkiv
@@ -122,7 +122,7 @@
% End of experimental code.
\unexpanded\def\interfaces_install_parameter_handler#1#2#3#4#5#6#7#8#9% inlining \csname*\endcsname is more efficient (#3 and #6 only)
- {\ifx#2\relax\let#2\empty\fi % it is hardly faster but produces less expansion tracing
+ {\ifx#2\relax\let#2\empty\fi % it is hardly faster but produces less expansion tracing
%\def#3##1{\csname#4{#1#2}{##1}\endcsname}%
\def#3##1{\csname\ifcsname#1#2:##1\endcsname#1#2:##1\else\expandafter#5\csname#1#2:\s!parent\endcsname{##1}\fi\endcsname}%
\def#4##1##2{\ifcsname##1:##2\endcsname##1:##2\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}%
@@ -159,16 +159,17 @@
\unexpanded\def\interfaces_install_parameter_hash_handler#1#2#3#4#5#6#7#8#9%
{\ifx#2\relax\let#2\empty\fi
- \def#3##1{#4{#1#2}{##1}:}%
+ \def#3##1{#1#4{#1#2}{##1}:}% leading #1 was missing .. is this one used?
\def#4##1##2{\ifcsname##1:##2\endcsname##1\else\expandafter#5\csname##1:\s!parent\endcsname{##2}\fi}%
- \def#5##1##2{\ifx##1\relax\else#4{##1}{##2}\fi}% is {} needed around ##1 ?
+ \def#5##1##2{\ifx##1\relax\else#4{##1}{##2}\fi}%
\def#6{#1#2:}%
\def#7##1{#1##1:}%
\def#8{\ifx#2\empty\else\ifcsname#1#2:\s!parent\endcsname\else\expandafter\let\csname#1#2:\s!parent\endcsname#1\fi\fi}%
\unexpanded\def#9##1{\expandafter\edef\csname#1##1:\s!parent\endcsname{#1#2}}}
\unexpanded\def\installparameterhashhandler#1#2%
- {\normalexpanded
+ {\expandafter\let\csname#2namespace\endcsname#1%
+ \normalexpanded
{\interfaces_install_parameter_hash_handler
{\noexpand#1}% \??aa
\expandafter\noexpand\csname current#2\endcsname
@@ -183,19 +184,21 @@
% In \MKIV\ we can probably use the english variant for all other
% languages too.
-\unexpanded\def\interfaces_install_parameter_set_handler#1#2#3#4#5% we can speed this up for english
+\unexpanded\def\interfaces_install_parameter_set_handler#1#2#3#4#5#6% we can speed this up for english
{\ifx#2\relax\let#2\empty\fi
- \unexpanded\def#3{\dosetvalue{#1#2:}}% ##1 {##2} (braces are mandate)
- \unexpanded\def#4{\doletvalue{#1#2:}}% ##1 ##2
- \unexpanded\def#5{\doletvalue{#1#2:}\empty}}% ##1
+ \unexpanded\def#3{\dosetvalue {#1#2:}}% ##1 {##2} (braces are mandate)
+ \unexpanded\def#4{\dosetevalue{#1#2:}}% ##1 {##2} (braces are mandate)
+ \unexpanded\def#5{\doletvalue {#1#2:}}% ##1 ##2
+ \unexpanded\def#6{\doletvalue {#1#2:}\empty}}% ##1
\startinterface english
- \unexpanded\def\interfaces_install_parameter_set_handler#1#2#3#4#5%
+ \unexpanded\def\interfaces_install_parameter_set_handler#1#2#3#4#5#6%
{\ifx#2\relax\let#2\empty\fi
- \unexpanded\def#3##1{\expandafter\def\csname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate)
- \unexpanded\def#4##1{\expandafter\let\csname#1#2:##1\endcsname}% ##1 ##2
- \unexpanded\def#5##1{\expandafter\let\csname#1#2:##1\endcsname\empty}}% ##1
+ \unexpanded\def#3##1{\expandafter \def\csname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate)
+ \unexpanded\def#4##1{\expandafter\edef\csname#1#2:##1\endcsname}% ##1 {##2} (braces are mandate)
+ \unexpanded\def#5##1{\expandafter \let\csname#1#2:##1\endcsname}% ##1 ##2
+ \unexpanded\def#6##1{\expandafter \let\csname#1#2:##1\endcsname\empty}}% ##1
\stopinterface
@@ -205,6 +208,7 @@
{\noexpand#1}% \??aa
\expandafter\noexpand\csname current#2\endcsname
\expandafter\noexpand\csname set#2parameter\endcsname
+ \expandafter\noexpand\csname setexpanded#2parameter\endcsname
\expandafter\noexpand\csname let#2parameter\endcsname
\expandafter\noexpand\csname reset#2parameter\endcsname}}
@@ -425,8 +429,157 @@
\installsetuphandler {#1}{#2}%
\installstyleandcolorhandler {#1}{#2}}
-\unexpanded\def\installnamespace#1%
- {\setvalue{????#1}{@@@@#1}}
+%D Many mechanisms have some kind of inheritance in place, and these are
+%D the speed||critical ones. Therefore there is no reason to stick to
+%D \type {\@@xxkey} for the sake of performance. For this reason we also
+%D provide a direct variant. This permits a more consistent treatment of
+%D namespaces. A \type {\whateverparameter} call is three times slower
+%D and a \type {\directwhateverparameter} call two times but for some
+%D 100K expansions we only loose some .1 second which is neglectable
+%D given the small amount of expansions in real runs.
+
+%D We don't need colons for such simple cases.
+
+\unexpanded\def\interfaces_install_direct_parameter_handler#1#2#3#4%
+ {\def#2##1{\csname\ifcsname#1##1\endcsname#1##1\else\s!empty\fi\endcsname}%
+ \def#3##1{\detokenize\expandafter\expandafter\expandafter{\csname#1##1\endcsname}}%
+ \def#4##1{\csname#1##1\endcsname}}
+
+\unexpanded\def\installdirectparameterhandler#1#2%
+ {\normalexpanded
+ {\interfaces_install_direct_parameter_handler
+ {\noexpand#1}%
+ \expandafter\noexpand\csname #2parameter\endcsname
+ \expandafter\noexpand\csname detokenized#2parameter\endcsname
+ \expandafter\noexpand\csname direct#2parameter\endcsname}}
+
+\unexpanded\def\interfaces_install_direct_setup_handler#1#2#3#4%
+ {\unexpanded\def#2{\dosingleempty#3}%
+ \newtoks#4%
+ \def#3[##1]%
+ {\interfaces_get_parameters#1[##1]%
+ \the#4}}
+
+\unexpanded\def\installdirectsetuphandler#1#2%
+ {\normalexpanded
+ {\interfaces_install_direct_setup_handler
+ {\noexpand#1}% \??aa
+ \expandafter\noexpand\csname setup#2\endcsname
+ \expandafter\noexpand\csname d@setup#2\endcsname
+ \expandafter\noexpand\csname everysetup#2\endcsname}}
+
+\unexpanded\def\interfaces_install_direct_parameter_set_handler#1#2#3#4#5%
+ {\unexpanded\def#2{\dosetvalue #1}%
+ \unexpanded\def#3{\dosetevalue#1}%
+ \unexpanded\def#4{\doletvalue #1}%
+ \unexpanded\def#5{\doletvalue #1\empty}}%
+
+\startinterface english
+
+ \unexpanded\def\interfaces_install_direct_parameter_set_handler#1#2#3#4#5%
+ {\unexpanded\def#2##1{\expandafter \def\csname#1##1\endcsname}%
+ \unexpanded\def#3##1{\expandafter\edef\csname#1##1\endcsname}%
+ \unexpanded\def#4##1{\expandafter \let\csname#1##1\endcsname}%
+ \unexpanded\def#5##1{\expandafter \let\csname#1##1\endcsname\empty}}%
+
+\stopinterface
+
+\unexpanded\def\installdirectparametersethandler#1#2%
+ {\normalexpanded
+ {\interfaces_install_direct_parameter_set_handler
+ {\noexpand#1}% \??aa
+ \expandafter\noexpand\csname set#2parameter\endcsname
+ \expandafter\noexpand\csname setexpanded#2parameter\endcsname
+ \expandafter\noexpand\csname let#2parameter\endcsname
+ \expandafter\noexpand\csname reset#2parameter\endcsname}}
+
+\let\installdirectstyleandcolorhandler\installstyleandcolorhandler
+
+\unexpanded\def\installdirectcommandhandler#1#2%
+ {\installdirectparameterhandler {#1}{#2}%
+ \installdirectsetuphandler {#1}{#2}%
+ \installdirectparametersethandler {#1}{#2}%
+ \installdirectstyleandcolorhandler{#1}{#2}}
+
+% Experiment:
+
+% \installcorenamespace {one}
+% \installcorenamespace {two}
+%
+% \installcommandhandler \??one {one} \??one
+% \installcommandhandler \??two {two} \??two
+%
+% \defineone[test] \setupone[test][alpha=first]
+% \definetwo[test] \setuptwo[test][beta=second]
+%
+% \protect
+%
+% \def\currentone{test}
+% \def\currenttwo{test}
+%
+% \relateparameterhandlers {two} {test} {one} {test}
+%
+% yes:\oneparameter{alpha}\par
+% nop:\oneparameter{beta}\par
+% yes:\twoparameter{alpha}\par
+% yes:\twoparameter{beta}\par
+
+\unexpanded\def\relateparameterhandlers#1#2#3#4% {from} {instance} {to} {instance}
+ {\expandafter\edef\csname\csname#1namespace\endcsname#2:\s!parent\endcsname{\csname#3namespace\endcsname#4}}
+
+% First we had, in tune with the regular system variables:
+%
+% \starttyping
+% \unexpanded\def\installnamespace#1{\setvalue{????#1}{@@@@#1}}
+% \stoptyping
+%
+% The following variant is nicer and in principle faster but that gets
+% unnoticed unless lots of expansion happens. Also, we can use long tags
+% but the internal expansion will be relatively small (and unlikely more
+% than 4 characters). For instance, \??xx used to expand to @@xx but now
+% becomes for instance 123::. This is one character more but in quite some
+% cases we had : after such a tag in the old situation. In the new situation
+% we create more namespaces and don't need that : any more, so we end up
+% with on the average the same amount of tokens and definitely less when
+% we consider cases like \??xx:\c!align: which now is just \??somealign and
+% therefore has length 5 now (instead of 4+1+5+1=10).
+%
+% Eventualy we will have a verbose \blablanamespace and the difference between
+% core and regular can go ... after all, \xxxparameter can already clash between
+% the two prefix groups .. if users use this mechanism a lot they should use
+% verbose names anyway (the old two character names were mostly an optimization
+% as they also expanded to these characters).
+
+% todo: register namespaces at lua end for logging and reverse resolve
+% todo: move this to syst-ini so that we can use it real early
+
+\newcount\interfaces_n_of_namespaces
+
+\def\v_interfaces_prefix_template{\number \interfaces_n_of_namespaces::}
+\def\v_interfaces_prefix_template{\characters\interfaces_n_of_namespaces::}
+\def\v_interfaces_prefix_template{\number \interfaces_n_of_namespaces>}
+\def\v_interfaces_prefix_template{\characters\interfaces_n_of_namespaces>}
+
+\def\v_interfaces_prefix_template % consistently %03i>
+ {\ifnum\interfaces_n_of_namespaces<\plusten00\else\ifnum\interfaces_n_of_namespaces<\plushundred0\fi\fi
+ \number\interfaces_n_of_namespaces>}
+
+\unexpanded\def\installnamespace#1% for modules and users
+ {\ifcsname ????#1\endcsname
+ \writestatus\m!system{duplicate user namespace '#1'}\wait
+ \else
+ \global\advance\interfaces_n_of_namespaces\plusone
+ \expandafter\edef\csname ????#1\endcsname{\v_interfaces_prefix_template}%
+ \fi}
+
+\unexpanded\def\installcorenamespace#1%
+ {\ifcsname ??#1\endcsname
+ \writestatus\m!system{duplicate core namespace '#1'}\wait
+ \else
+ \global\advance\interfaces_n_of_namespaces\plusone
+ \expandafter\edef\csname ??#1\endcsname{\v_interfaces_prefix_template}%
+ \ctxcommand{registernamespace(\number\interfaces_n_of_namespaces,"#1")}%
+ \fi}
% \enabletrackers[interfaces.namespaces,context.flush]
%
@@ -463,6 +616,8 @@
% “\testparameter{text}”
%
% \stoptext
+%
+% This is a user (module) command:
\unexpanded\def\definenamespace
{\dodoubleargument\interfaces_define_name_space}
@@ -479,7 +634,7 @@
%D \showparentchain{@@am}{left}
%D \stoptyping
-\def\showparentchain#1#2%
+\unexpanded\def\showparentchain#1#2%
{\writestatus\m!system{chain: [ \interfaces_show_parent_chain{#1#2}]}}
\def\interfaces_show_parent_chain#1%
diff --git a/tex/context/base/mult-de.mkii b/tex/context/base/mult-de.mkii
index e6aab7ad5..14631c9c7 100644
--- a/tex/context/base/mult-de.mkii
+++ b/tex/context/base/mult-de.mkii
@@ -622,6 +622,7 @@
\setinterfaceconstant{coupling}{verknuepfung}
\setinterfaceconstant{couplingway}{verkopplungsart}
\setinterfaceconstant{criterium}{kriterium}
+\setinterfaceconstant{css}{css}
\setinterfaceconstant{current}{aktuell}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{strich}
@@ -650,6 +651,7 @@
\setinterfaceconstant{editoretallimit}{editoretallimit}
\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{leer}
+\setinterfaceconstant{entities}{entities}
\setinterfaceconstant{entries}{entries}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
@@ -1042,6 +1044,7 @@
\setinterfaceconstant{white}{weiss}
\setinterfaceconstant{width}{breite}
\setinterfaceconstant{xfactor}{xfaktor}
+\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xformat}
diff --git a/tex/context/base/mult-def.lua b/tex/context/base/mult-def.lua
index 8430154ed..2ed8fe3f3 100644
--- a/tex/context/base/mult-def.lua
+++ b/tex/context/base/mult-def.lua
@@ -6456,6 +6456,19 @@ return {
["en"]="dash",
["nl"]="streep",
},
+ ["export"] = {
+ ["en"]="export",
+ },
+ ["css"] = {
+ ["en"]="css",
+ },
+ ["xhtml"] = {
+ ["en"]="xhtml",
+ },
+ ["entities"]={
+ ["en"]="entities",
+ ["nl"]="entities",
+ },
["labeloffset"]={
["en"]="labeloffset",
},
diff --git a/tex/context/base/mult-dim.mkvi b/tex/context/base/mult-dim.mkvi
new file mode 100644
index 000000000..1b49017f4
--- /dev/null
+++ b/tex/context/base/mult-dim.mkvi
@@ -0,0 +1,123 @@
+%D \module
+%D [ file=core-gen,
+%D version=1995.10.10,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=General,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Core Macros / General}
+
+\unprotect
+
+%D \macros
+%D {assigndimension,assignalfadimension}
+%D
+%D The following commands are used to process keyword based
+%D dimension setters.
+%D
+%D \starttyping
+%D \assigndimension
+%D {<value>|small|medium|big|-small|-medium|-big|none}
+%D {\dimension}
+%D {value small}
+%D {value medium}
+%D {value big}
+%D \stoptyping
+%D
+%D The given keyword determines the result.
+
+\installcorenamespace{dimensionnormal}
+
+\setvalue{\??dimensionnormal \v!none }#value#dimension#small#medium#big{#dimension\zeropoint}
+\setvalue{\??dimensionnormal \v!small }#value#dimension#small#medium#big{#dimension=#small\relax}
+\setvalue{\??dimensionnormal \v!medium}#value#dimension#small#medium#big{#dimension=#medium\relax}
+\setvalue{\??dimensionnormal \v!big }#value#dimension#small#medium#big{#dimension=#big\relax}
+\setvalue{\??dimensionnormal-\v!small }#value#dimension#small#medium#big{#dimension=-#small\relax}
+\setvalue{\??dimensionnormal-\v!medium}#value#dimension#small#medium#big{#dimension=-#medium\relax}
+\setvalue{\??dimensionnormal-\v!big }#value#dimension#small#medium#big{#dimension=-#big\relax}
+\setvalue{\??dimensionnormal\s!unknown}#value#dimension#small#medium#big{#dimension=-#value\relax}
+
+\unexpanded\def\assigndimension#value%
+ {\csname\??dimensionnormal\ifcsname\??dimensionnormal#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
+
+%D The next variant assigns to a macro instead of a dimension.
+%D
+%D \starttyping
+%D \assignalfadimension
+%D {<value>|small|medium|big|none}
+%D {\macro}
+%D {value small}
+%D {value medium}
+%D {value big}
+%D \stoptyping
+%D
+%D This one is used for factors.
+
+\installcorenamespace{dimensionalfa}
+
+\setvalue{\??dimensionalfa\v!none }#value#macro#small#medium#big{\let #macro\!!zerocount}
+\setvalue{\??dimensionalfa\v!small }#value#macro#small#medium#big{\edef#macro{#small}}
+\setvalue{\??dimensionalfa\v!medium }#value#macro#small#medium#big{\edef#macro{#medium}}
+\setvalue{\??dimensionalfa\v!big }#value#macro#small#medium#big{\edef#macro{#big}}
+\setvalue{\??dimensionalfa\s!unknown}#value#macro#small#medium#big{\edef#macro{#value}}
+
+\unexpanded\def\assignalfadimension#value%
+ {\csname\??dimensionalfa\ifcsname\??dimensionalfa#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
+
+%D \macros
+%D {assignvalue}
+%D
+%D A variant that does not assume dimenions ios the following:
+%D
+%D \starttyping
+%D \assignvalue
+%D {<value>|small|medium|big}
+%D {\macro}
+%D {value small}
+%D {value medium}
+%D {value big}
+%D \stoptyping
+
+\installcorenamespace{dimensionvalue}
+
+\setvalue{\??dimensionvalue\v!small }#macro#small#medium#big{\edef#macro{#small}}
+\setvalue{\??dimensionvalue\v!medium }#macro#small#medium#big{\edef#macro{#medium}}
+\setvalue{\??dimensionvalue\v!big }#macro#small#medium#big{\edef#macro{#big}}
+\setvalue{\??dimensionvalue\s!unknown}#macro#small#medium#big{\let #macro\empty}
+
+\unexpanded\def\assignvalue#value%
+ {\csname\??dimensionvalue\ifcsname\??dimensionvalue#value\endcsname#value\else\s!unknown\fi\endcsname}
+
+%D \macros
+%D {assignwidth}
+%D
+%D Een breedte van een opgegeven tekst kan worden berekend en
+%D toegekend aan een \DIMENSION\ met:
+%D
+%D \starttyping
+%D \assignwidth
+%D {<value>|fit|broad}
+%D {\dimension}
+%D {text}
+%D {extra}
+%D \stoptyping
+
+\installcorenamespace{dimensionwidth}
+
+\newbox\b_assign_width
+
+\setvalue{\??dimensionwidth }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width\b_assign_width\emptybox}
+\setvalue{\??dimensionwidth\v!fit }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\wd\b_assign_width\b_assign_width\emptybox}
+\setvalue{\??dimensionwidth\v!broad }#value#dimension#content#extra{\setbox\b_assign_width\hbox{#content}#dimension\dimexpr\wd\b_assign_width+#extra\relax\b_assign_width\emptybox}
+\setvalue{\??dimensionwidth\v!unknown}#value#dimension#content#extra{#dimension=#value\relax}
+
+\unexpanded\def\assignwidth#value%
+ {\csname\??dimensionwidth\ifcsname\??dimensionwidth#value\endcsname#value\else\s!unknown\fi\endcsname{#value}}
+
+\protect \endinput
diff --git a/tex/context/base/mult-en.mkii b/tex/context/base/mult-en.mkii
index a646a51c6..57f627906 100644
--- a/tex/context/base/mult-en.mkii
+++ b/tex/context/base/mult-en.mkii
@@ -622,6 +622,7 @@
\setinterfaceconstant{coupling}{coupling}
\setinterfaceconstant{couplingway}{couplingway}
\setinterfaceconstant{criterium}{criterium}
+\setinterfaceconstant{css}{css}
\setinterfaceconstant{current}{current}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
@@ -650,6 +651,7 @@
\setinterfaceconstant{editoretallimit}{editoretallimit}
\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{empty}
+\setinterfaceconstant{entities}{entities}
\setinterfaceconstant{entries}{entries}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
@@ -1042,6 +1044,7 @@
\setinterfaceconstant{white}{white}
\setinterfaceconstant{width}{width}
\setinterfaceconstant{xfactor}{xfactor}
+\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscale}
diff --git a/tex/context/base/mult-fr.mkii b/tex/context/base/mult-fr.mkii
index dd8e69434..f2a5599d7 100644
--- a/tex/context/base/mult-fr.mkii
+++ b/tex/context/base/mult-fr.mkii
@@ -622,6 +622,7 @@
\setinterfaceconstant{coupling}{couplage}
\setinterfaceconstant{couplingway}{modecouplage}
\setinterfaceconstant{criterium}{critere}
+\setinterfaceconstant{css}{css}
\setinterfaceconstant{current}{courant}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{pointille}
@@ -650,6 +651,7 @@
\setinterfaceconstant{editoretallimit}{editoretallimit}
\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{vide}
+\setinterfaceconstant{entities}{entities}
\setinterfaceconstant{entries}{entries}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
@@ -1042,6 +1044,7 @@
\setinterfaceconstant{white}{blanc}
\setinterfaceconstant{width}{largeur}
\setinterfaceconstant{xfactor}{xfactor}
+\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscale}
diff --git a/tex/context/base/mult-ini.lua b/tex/context/base/mult-ini.lua
index e073130db..4ec50d350 100644
--- a/tex/context/base/mult-ini.lua
+++ b/tex/context/base/mult-ini.lua
@@ -17,18 +17,20 @@ local setmetatableindex = table.setmetatableindex
local report_interface = logs.reporter("interface","initialization")
-interfaces = interfaces or { }
-interfaces.constants = mark(interfaces.constants or { })
-interfaces.variables = mark(interfaces.variables or { })
-interfaces.elements = mark(interfaces.elements or { })
-interfaces.formats = mark(interfaces.formats or { })
-interfaces.translations = mark(interfaces.translations or { })
-
-storage.register("interfaces/constants", interfaces.constants, "interfaces.constants")
-storage.register("interfaces/variables", interfaces.variables, "interfaces.variables")
-storage.register("interfaces/elements", interfaces.elements, "interfaces.elements")
-storage.register("interfaces/formats", interfaces.formats, "interfaces.formats")
-storage.register("interfaces/translations", interfaces.translations, "interfaces.translations")
+interfaces = interfaces or { }
+interfaces.constants = mark(interfaces.constants or { })
+interfaces.variables = mark(interfaces.variables or { })
+interfaces.elements = mark(interfaces.elements or { })
+interfaces.formats = mark(interfaces.formats or { })
+interfaces.translations = mark(interfaces.translations or { })
+interfaces.corenamespaces = mark(interfaces.corenamespaces or { })
+
+storage.register("interfaces/constants", interfaces.constants, "interfaces.constants")
+storage.register("interfaces/variables", interfaces.variables, "interfaces.variables")
+storage.register("interfaces/elements", interfaces.elements, "interfaces.elements")
+storage.register("interfaces/formats", interfaces.formats, "interfaces.formats")
+storage.register("interfaces/translations", interfaces.translations, "interfaces.translations")
+storage.register("interfaces/corenamespaces", interfaces.corenamespaces, "interfaces.corenamespaces")
interfaces.interfaces = {
"cs", "de", "en", "fr", "it", "nl", "ro", "pe",
@@ -54,12 +56,13 @@ end
setmetatableindex(complete, resolve)
-local constants = interfaces.constants
-local variables = interfaces.variables
-local elements = interfaces.elements
-local formats = interfaces.formats
-local translations = interfaces.translations
-local reporters = { } -- just an optimization
+local constants = interfaces.constants
+local variables = interfaces.variables
+local elements = interfaces.elements
+local formats = interfaces.formats
+local translations = interfaces.translations
+local corenamespaces = interfaces.corenamespaces
+local reporters = { } -- just an optimization
local function valueiskey(t,k) -- will be helper
t[k] = k
@@ -72,6 +75,10 @@ setmetatableindex(elements, valueiskey)
setmetatableindex(formats, valueiskey)
setmetatableindex(translations, valueiskey)
+function commands.registernamespace(n,namespace)
+ corenamespaces[n] = namespace
+end
+
local function resolve(t,k)
local v = logs.reporter(k)
t[k] = v
diff --git a/tex/context/base/mult-ini.mkiv b/tex/context/base/mult-ini.mkiv
index 5f20bec15..0ec6e4239 100644
--- a/tex/context/base/mult-ini.mkiv
+++ b/tex/context/base/mult-ini.mkiv
@@ -43,10 +43,7 @@
%D \NC \type{\e!prefix!} \NC e! \NC element \NC\MR
%D \NC \type{\f!prefix!} \NC f! \NC file \NC\MR
%D \NC \type{\k!prefix!} \NC k! \NC constant (indirect) \NC\MR
-%D \NC \type{\l!prefix!} \NC l! \NC language \NC\MR
%D \NC \type{\m!prefix!} \NC m! \NC age \NC\MR
-%D \NC \type{\p!prefix!} \NC p! \NC procedure \NC\MR
-%D \NC \type{\r!prefix!} \NC r! \NC reference \NC\MR
%D \NC \type{\s!prefix!} \NC s! \NC system \NC\MR
%D \NC \type{\v!prefix!} \NC v! \NC variable \NC\MR
%D \HL
@@ -54,12 +51,16 @@
%D \stoplinecorrection
%D
%D In the single||lingual version we used \type{!}, \type{!!},
-%D \type{!!!} and \type{!!!!}.
+%D \type{!!!} and \type{!!!!}. In the meantime some of these
+%D are obsolete (we had some 12 originally).
-\def\c!prefix!{c!} \def\e!prefix!{e!} \def\f!prefix!{f!}
-\def\k!prefix!{k!} \def\l!prefix!{l!} \def\m!prefix!{m!}
-\def\p!prefix!{p!} \def\r!prefix!{r!} \def\s!prefix!{s!}
-\def\v!prefix!{v!} \def\t!prefix!{t!}
+\def\c!prefix!{c!}
+\def\e!prefix!{e!}
+\def\f!prefix!{f!} % for the moment we keep this one
+\def\k!prefix!{k!}
+\def\m!prefix!{m!}
+\def\s!prefix!{s!}
+\def\v!prefix!{v!}
%D \macros
%D [constants,variables,commands]
@@ -131,7 +132,6 @@
%D definesystemvariable,
%D definesystemconstant,
%D definemessageconstant,
-%D definereferenceconstant,
%D definefileconstant}
%D
%D The first part of this module is dedicated to dealing with
@@ -169,17 +169,11 @@
%D Next come some interface independant constants:
%D
%D \starttyping
-%D \definereferenceconstant {name} {meaning}
%D \definefileconstant {name} {meaning}
%D \stoptyping
-\unexpanded\def\definereferenceconstant #1#2{\expandafter\def\csname\r!prefix!#1\endcsname{#2}} % obsolete
\unexpanded\def\definefileconstant #1#2{\expandafter\def\csname\f!prefix!#1\endcsname{#2}}
-%D A new one:
-
-\unexpanded\def\definetypescriptconstant#1#2{\expandafter\def\csname\t!prefix!#1\endcsname{#2}}
-
%D And finaly we have the one argument, space saving constants
%D
%D \starttyping
diff --git a/tex/context/base/mult-it.mkii b/tex/context/base/mult-it.mkii
index f562b3e21..c1bb74fd6 100644
--- a/tex/context/base/mult-it.mkii
+++ b/tex/context/base/mult-it.mkii
@@ -622,6 +622,7 @@
\setinterfaceconstant{coupling}{accoppiamento}
\setinterfaceconstant{couplingway}{modoaccoppiamento}
\setinterfaceconstant{criterium}{criterio}
+\setinterfaceconstant{css}{css}
\setinterfaceconstant{current}{corrente}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
@@ -650,6 +651,7 @@
\setinterfaceconstant{editoretallimit}{editoretallimit}
\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{vuoto}
+\setinterfaceconstant{entities}{entities}
\setinterfaceconstant{entries}{entries}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
@@ -1042,6 +1044,7 @@
\setinterfaceconstant{white}{bianco}
\setinterfaceconstant{width}{ampiezza}
\setinterfaceconstant{xfactor}{xfactor}
+\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscale}
diff --git a/tex/context/base/mult-low.lua b/tex/context/base/mult-low.lua
index d2bd4f116..51d0da537 100644
--- a/tex/context/base/mult-low.lua
+++ b/tex/context/base/mult-low.lua
@@ -1,4 +1,4 @@
-if not modules then modules = { } end modules ['mult-low'] = {
+ctxlatecommandif not modules then modules = { } end modules ['mult-low'] = {
version = 1.001,
comment = "companion to mult-ini.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
@@ -63,6 +63,7 @@ return {
-- maybe a different class
--
"startmode", "stopmode", "startnotmode", "stopnotmode", "doifmode", "doifmodeelse", "doifnotmode",
+ "startallmodes", "stopallmodes", "startnotallmodes", "stopnotallmodes", "doifallmodes", "doifallmodeselse", "doifnotallmodes",
"startenvironment", "stopenvironment", "environment",
"startcomponent", "stopcomponent", "component",
"startproduct", "stopproduct", "product",
@@ -74,6 +75,10 @@ return {
--
"startsetups", "stopsetups",
"startxmlsetups", "stopxmlsetups",
+ "startluasetups", "stopluasetups",
+ "starttexsetups", "stoptexsetups",
+ "startrawsetups", "stoprawsetups",
+ "startlocalsetups", "stoplocalsetups",
"starttexdefinition", "stoptexdefinition",
"starttexcode", "stoptexcode",
--
@@ -170,6 +175,7 @@ return {
"newconstant", "setnewconstant", "newconditional", "settrue", "setfalse", "setconstant",
--
"dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty",
+ "dosingleargument", "dodoubleargument", "dotripleargument", "doquadrupleargument",
"dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty",
--
"nopdfcompression", "maximumpdfcompression", "normalpdfcompression",
diff --git a/tex/context/base/mult-nl.mkii b/tex/context/base/mult-nl.mkii
index 965a92aae..8d6f46ed3 100644
--- a/tex/context/base/mult-nl.mkii
+++ b/tex/context/base/mult-nl.mkii
@@ -622,6 +622,7 @@
\setinterfaceconstant{coupling}{koppeling}
\setinterfaceconstant{couplingway}{koppelwijze}
\setinterfaceconstant{criterium}{criterium}
+\setinterfaceconstant{css}{css}
\setinterfaceconstant{current}{huidige}
\setinterfaceconstant{cutspace}{snijwit}
\setinterfaceconstant{dash}{streep}
@@ -650,6 +651,7 @@
\setinterfaceconstant{editoretallimit}{editoretallimit}
\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{leeg}
+\setinterfaceconstant{entities}{entities}
\setinterfaceconstant{entries}{ingangen}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
@@ -1042,6 +1044,7 @@
\setinterfaceconstant{white}{wit}
\setinterfaceconstant{width}{breedte}
\setinterfaceconstant{xfactor}{xfactor}
+\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xschaal}
diff --git a/tex/context/base/mult-pe.mkii b/tex/context/base/mult-pe.mkii
index 08b4f1533..074869620 100644
--- a/tex/context/base/mult-pe.mkii
+++ b/tex/context/base/mult-pe.mkii
@@ -622,6 +622,7 @@
\setinterfaceconstant{coupling}{تزویج}
\setinterfaceconstant{couplingway}{روش‌تزویج}
\setinterfaceconstant{criterium}{criterium}
+\setinterfaceconstant{css}{css}
\setinterfaceconstant{current}{جاری}
\setinterfaceconstant{cutspace}{فضای‌برش}
\setinterfaceconstant{dash}{دش}
@@ -650,6 +651,7 @@
\setinterfaceconstant{editoretallimit}{editoretallimit}
\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{تهی}
+\setinterfaceconstant{entities}{entities}
\setinterfaceconstant{entries}{entries}
\setinterfaceconstant{equalheight}{ارتفاع‌یکسان}
\setinterfaceconstant{equalwidth}{عرض‌یکسان}
@@ -1042,6 +1044,7 @@
\setinterfaceconstant{white}{سفید}
\setinterfaceconstant{width}{عرض}
\setinterfaceconstant{xfactor}{فاکتورایکس}
+\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
\setinterfaceconstant{xoffset}{آفست‌ایکس}
\setinterfaceconstant{xscale}{مقیاس‌ایکس}
diff --git a/tex/context/base/mult-ro.mkii b/tex/context/base/mult-ro.mkii
index 8fafc2ca3..e5b2c2dd8 100644
--- a/tex/context/base/mult-ro.mkii
+++ b/tex/context/base/mult-ro.mkii
@@ -622,6 +622,7 @@
\setinterfaceconstant{coupling}{cuplare}
\setinterfaceconstant{couplingway}{modcuplare}
\setinterfaceconstant{criterium}{criteriu}
+\setinterfaceconstant{css}{css}
\setinterfaceconstant{current}{curent}
\setinterfaceconstant{cutspace}{cutspace}
\setinterfaceconstant{dash}{dash}
@@ -650,6 +651,7 @@
\setinterfaceconstant{editoretallimit}{editoretallimit}
\setinterfaceconstant{editoretaltext}{editoretaltext}
\setinterfaceconstant{empty}{gol}
+\setinterfaceconstant{entities}{entities}
\setinterfaceconstant{entries}{entries}
\setinterfaceconstant{equalheight}{equalheight}
\setinterfaceconstant{equalwidth}{equalwidth}
@@ -1042,6 +1044,7 @@
\setinterfaceconstant{white}{alb}
\setinterfaceconstant{width}{latime}
\setinterfaceconstant{xfactor}{xfactor}
+\setinterfaceconstant{xhtml}{xhtml}
\setinterfaceconstant{xmax}{xmax}
\setinterfaceconstant{xoffset}{xoffset}
\setinterfaceconstant{xscale}{xscala}
diff --git a/tex/context/base/mult-sys.mkiv b/tex/context/base/mult-sys.mkiv
index 5467eb32f..44f4dc8c3 100644
--- a/tex/context/base/mult-sys.mkiv
+++ b/tex/context/base/mult-sys.mkiv
@@ -198,6 +198,7 @@
\definesystemconstant {font}
\definesystemconstant {link}
\definesystemconstant {parent}
+\definesystemconstant {child}
\definesystemconstant {clone}
\definesystemconstant {section}
\definesystemconstant {handler}
@@ -223,6 +224,11 @@
\definesystemconstant {run}
+\definesystemconstant {mode}
+\definesystemconstant {setup}
+\definesystemconstant {environment}
+\definesystemconstant {document}
+
%definesystemconstant {fam}
\definesystemconstant {text}
\definesystemconstant {script}
@@ -293,6 +299,20 @@
\definesystemconstant {extensions}
\definesystemconstant {initializations}
+\definesystemconstant {rgb}
+\definesystemconstant {cmyk}
+\definesystemconstant {gray}
+\definesystemconstant {spot}
+\definesystemconstant {all}
+\definesystemconstant {none}
+
+\definesystemconstant {map}
+\definesystemconstant {special}
+\definesystemconstant {size}
+
+\definesystemconstant {depth}
+\definesystemconstant {nodepth}
+
%D Just to be complete we define the standard \TEX\ units.
\definesystemconstant {cm}
@@ -310,41 +330,6 @@
\definesystemconstant {nd}
\definesystemconstant {nc}
-%definesystemconstant {entrya}
-%definesystemconstant {entryb}
-%definesystemconstant {entryc}
-%definesystemconstant {entryd}
-%definesystemconstant {entry}
-%definesystemconstant {see}
-%definesystemconstant {from}
-%definesystemconstant {to}
-%definesystemconstant {synonym}
-%definesystemconstant {reference}
-%definesystemconstant {main}
-%definesystemconstant {list}
-%definesystemconstant {item}
-%definesystemconstant {itemcount}
-%definesystemconstant {references}
-%definesystemconstant {between}
-%definesystemconstant {old}
-%definesystemconstant {thisisblock}
-%definesystemconstant {thiswasblock}
-%definesystemconstant {figurepreset}
-%definesystemconstant {pass}
-%definesystemconstant {list}
-%definesystemconstant {margin}
-%definesystemconstant {profile}
-%definesystemconstant {versionbegin}
-%definesystemconstant {versionend}
-%definesystemconstant {cross}
-
-%D Reference constants are no longer used in \MKIV\ but for the
-%D moment we keep this mechanism available.
-%D
-%D \starttyping
-%D \definereferenceconstant {whatever}
-%D \stoptyping
-
%D As the name of their define command states, the next set of
%D constants is used in the message macro's.
@@ -412,285 +397,148 @@
\definesystemvariable {ab} % AlignedBoxes
\definesystemvariable {ac} % ACcent
\definesystemvariable {ae} % AttributEs
-\definesystemvariable {ag} % AchterGrond
\definesystemvariable {al} % ALinea's
-\definesystemvariable {am} % interActieMenu
\definesystemvariable {an} % ANchor
\definesystemvariable {as} % AlignmentSwitch
-\definesystemvariable {at} % ATtachments
-%definesystemvariable {ba} % synchronisatieBAlk
-\definesystemvariable {bc} % BaCkend
-\definesystemvariable {be} % startstop (BeginEnd)
\definesystemvariable {bj} % BlokJe
-%definesystemvariable {bk} % Blokken (floats)
-%definesystemvariable {bl} % BLanko
\definesystemvariable {bg} % BleedinG
\definesystemvariable {bm} % BookMark
-%definesystemvariable {bo} % BlankO (definitions)
\definesystemvariable {bp} % BreakPoint
\definesystemvariable {br} % sideBaR
-%definesystemvariable {bs} % SelecteerBlokken
-\definesystemvariable {bt} % BuTton
-\definesystemvariable {bu} % BUffer
-%definesystemvariable {bv} % Brieven
\definesystemvariable {bx} % BackendExport
-%definesystemvariable {by} % Per
\definesystemvariable {cb} % CollectBox
-\definesystemvariable {cc} % Comment
-\definesystemvariable {ce} % CasEs
-\definesystemvariable {cf} % Style (ColorFont)
\definesystemvariable {ch} % CHaracterspacing
\definesystemvariable {ci} % CItaat
\definesystemvariable {ck} % Character Kerning
-\definesystemvariable {cl} % kleur (CoLor setup)
\definesystemvariable {cn} % CollumN
\definesystemvariable {cm} % CheMical
\definesystemvariable {co} % COmbinaties
\definesystemvariable {cp} % CliP
-\definesystemvariable {cr} % kleur (ColoR)
-%definesystemvariable {cs} % kleur (ColorSeparation
-\definesystemvariable {cv} % ConVersie
-%definesystemvariable {cy} % CrYteria
\definesystemvariable {da} % DAte
\definesystemvariable {db} % Labels
-\definesystemvariable {dc} % DroppedCaps
\definesystemvariable {dd} % DoorDefinieren
\definesystemvariable {de} % DEel
\definesystemvariable {di} % DIrections
\definesystemvariable {dl} % DunneLijnen
\definesystemvariable {dn} % DoorNummeren
\definesystemvariable {dm} % DefineMeasure
-\definesystemvariable {do} % DefinieerOpmaak
\definesystemvariable {du} % DUmmy
-\definesystemvariable {ds} % DoorSpringen
\definesystemvariable {ef} % ExternFiguur
-%definesystemvariable {ec} % EnCoding
\definesystemvariable {el} % Elements
\definesystemvariable {en} % ENvironments
-%definesystemvariable {ep} % ExternfiguurPreset
-\definesystemvariable {eq} % EQalign
\definesystemvariable {er} % external resources
\definesystemvariable {et} % EffecT
\definesystemvariable {ex} % ExterneFiguren
-%definesystemvariable {fa} % font feature
-\definesystemvariable {fb} % FieldBody
\definesystemvariable {fc} % FramedContent
-\definesystemvariable {fd} % FielDgroup
-%definesystemvariable {fe} % FoxetExtensions
-\definesystemvariable {ff} % FontFile
-%definesystemvariable {fg} % FiGuurmaten
-\definesystemvariable {fh} % FontHash
\definesystemvariable {fi} % FIle Once
-\definesystemvariable {fl} % Floats
-\definesystemvariable {fm} % ForMules
-\definesystemvariable {fn} % subformulas
\definesystemvariable {fo} % xml FO (xtag)
-\definesystemvariable {fp} % FilegroeP
\definesystemvariable {fq} % Features
-\definesystemvariable {fr} % ForM
-%definesystemvariable {fs} % FileSynonym
+\definesystemvariable {fr} % Division
\definesystemvariable {ft} % FonTs
\definesystemvariable {fu} % FontSolution
-%definesystemvariable {fv} % FontVariant
\definesystemvariable {fw} % simpleFonts by Wolfgang
\definesystemvariable {fx} % FoXet
\definesystemvariable {gr} % GRid
-\definesystemvariable {gm} % Graphic Metapost
\definesystemvariable {gb} % Graphic Bitmaps
\definesystemvariable {gi} % Graphic Instance
-\definesystemvariable {gt} % Graphic Text
\definesystemvariable {gv} % Graphic Variable
-\definesystemvariable {gp} % Graphic Position
-\definesystemvariable {gq} % Graphic Position Method
-\definesystemvariable {gx} % Graphic TeX Text
\definesystemvariable {ha} % HAng
\definesystemvariable {hf} % Helpers Framed
-\definesystemvariable {hl} % HighLight
\definesystemvariable {hs} % HSpace
-%definesystemvariable {ht} % HiddenText
-\definesystemvariable {ia} % Interactie
-\definesystemvariable {ib} % InteractieBalk
-%definesystemvariable {ic} % ICc profiles
\definesystemvariable {id} % Index
-%definesystemvariable {ig} % ItemGroup
\definesystemvariable {ih} % InHoudsopgave
-%definesystemvariable {ii} % stelIndexIn
\definesystemvariable {il} % stelInvulRegelsin
-%definesystemvariable {im} % InMarge
\definesystemvariable {in} % INspringen
\definesystemvariable {ip} % InsertPages
\definesystemvariable {is} % Items
\definesystemvariable {it} % stelInTerliniein
\definesystemvariable {iv} % stelInvulLijnenin
\definesystemvariable {ka} % KAntlijn
-\definesystemvariable {kd} % KaDerteksten
-\definesystemvariable {kj} % KopJes (floats)
\definesystemvariable {kk} % Kapitalen
\definesystemvariable {kl} % KoLommen
\definesystemvariable {km} % KenMerk
-%definesystemvariable {ko} % KOp(pen)
\definesystemvariable {kp} % KopPelteken
-%definesystemvariable {kr} % KoRps
\definesystemvariable {ks} % KolomSpan
\definesystemvariable {kt} % KonTakten
\definesystemvariable {kw} % KontaktWaarde
\definesystemvariable {la} % LAnguage
-%definesystemvariable {lb} % LaBels
\definesystemvariable {ld} % LegenDa
\definesystemvariable {le} % LinetablE
\definesystemvariable {lf} % LocalFigures
\definesystemvariable {lg} % taal (LanGuage)
-\definesystemvariable {li} % LIjst
\definesystemvariable {lk} % LinK
\definesystemvariable {ll} % Layers
-%definesystemvariable {ln} % LijNen
-%definesystemvariable {lo} % LOgos
-\definesystemvariable {lt} % LiTeratuur
\definesystemvariable {lr} % LayeR
-\definesystemvariable {ls} % languageScript
-\definesystemvariable {lt} % LuaTables
\definesystemvariable {lu} % LUacode
-\definesystemvariable {lw} % WordList
\definesystemvariable {lx} % LayerteXt
-\definesystemvariable {ly} % LaYout
\definesystemvariable {ma} % MargeAchtergrond
-\definesystemvariable {mb} % MargeBlokken
-\definesystemvariable {mc} % MarginCategory
+\definesystemvariable {mc} % MultiColumn
\definesystemvariable {md} % MoDule
-%definesystemvariable {me} % MultilingualElement (tags)
-\definesystemvariable {mf} % MarginFramed
-%definesystemvariable {mg} % Metapost paGe
-%definesystemvariable {mh} % MultilingualHead
\definesystemvariable {mi} % MultilingualInterface
-\definesystemvariable {mk} % MarKering
\definesystemvariable {ml} % MultilingualLabel
\definesystemvariable {mm} % MultilingualMath
\definesystemvariable {mt} % inline MaTh
\definesystemvariable {mo} % Math Options
\definesystemvariable {mp} % MetaPost
-\definesystemvariable {mx} % MatriX
-\definesystemvariable {ng} % parbuilders
-\definesystemvariable {nh} % new heads (structure)
\definesystemvariable {nn} % structurenumbering
\definesystemvariable {nm} % Nummering
\definesystemvariable {np} % NaastPlaatsen
\definesystemvariable {nr} % Nummeren
\definesystemvariable {ob} % OBjects
-%definesystemvariable {of} % OFfset
\definesystemvariable {oi} % OmlijndInstellingen
\definesystemvariable {ol} % OmLijnd
\definesystemvariable {od} % Omlijnd Defaults (simple)
-\definesystemvariable {on} % ONderstreep
-%definesystemvariable {oo} % OpsOmmingen
-\definesystemvariable {op} % OPsomming
-%definesystemvariable {or} % OtpfilteR
-%definesystemvariable {os} % OffSet
-%definesystemvariable {ot} % OTpsequence
-\definesystemvariable {ov} % OVerlay
\definesystemvariable {ox} % OffsetBox
-\definesystemvariable {pa} % PAlet
\definesystemvariable {pb} % PuBlication
\definesystemvariable {pc} % PageComment
\definesystemvariable {pe} % PagEhandler
-%definesystemvariable {pf} % ProFiel
-%definesystemvariable {pg} %
\definesystemvariable {ph} % ParagrapH
-\definesystemvariable {pl} % PLaats
\definesystemvariable {pn} % PaginaNummer
-\definesystemvariable {po} % PrOcessor
-\definesystemvariable {pp} % PaPier
\definesystemvariable {pr} % PRogrammas
\definesystemvariable {ps} % PoSitioneren
\definesystemvariable {pt} % PageshifT
\definesystemvariable {px} % Parallel
\definesystemvariable {py} % PropertYs
\definesystemvariable {pv} % PublicationVariable
-\definesystemvariable {qi} % colorIntentattribute
-\definesystemvariable {qc} % Colorattribute (cs)
-\definesystemvariable {qt} % Transparencyattribute (ts)
-\definesystemvariable {qa} % Colorattribute (ca)
-\definesystemvariable {qs} % Transparencyattribute (ta)
\definesystemvariable {ql} % catcode table let % already defined
\definesystemvariable {qd} % catcode table def % already defined
\definesystemvariable {qu} % catcode table ued % already defined
\definesystemvariable {qm} % catcode table meaning % already defined
-\definesystemvariable {ra} % RAise
-%definesystemvariable {rd} % RenDering
-\definesystemvariable {re} % REferenceformat
\definesystemvariable {rf} % ReFerencing
-\definesystemvariable {rg} % ReGel
-%definesystemvariable {rl} % ReferentieLijst
\definesystemvariable {rn} % RegelNummer
-\definesystemvariable {ro} % ROteren
-%definesystemvariable {rr} % linenotes
\definesystemvariable {rs} % RaSters
\definesystemvariable {rt} % RoosTers
-%definesystemvariable {rv} % ReserVeerfiguur
\definesystemvariable {rw} % RenderingWindow
-\definesystemvariable {sa} % ScAle
\definesystemvariable {sb} % SectieBlok
-\definesystemvariable {sc} % SCherm
\definesystemvariable {sd} % SounD
\definesystemvariable {se} % SEctie
-%definesystemvariable {sf} % SpeciFics
\definesystemvariable {sg} % SpacinG
\definesystemvariable {sh} % ShapeText
\definesystemvariable {si} % SplIt
-%definesystemvariable {sk} % SectieKop
\definesystemvariable {sl} % SmalLer
-\definesystemvariable {sm} % SynonieMen
-%definesystemvariable {sn} % SubNummer
-\definesystemvariable {so} % SOrteren
\definesystemvariable {sp} % SelecteerPapier
\definesystemvariable {sr} % SpacehandleR
-\definesystemvariable {ss} % Symbool
\definesystemvariable {st} % STickers
-\definesystemvariable {su} % SetUp
-\definesystemvariable {sv} % SysteemVariabelen
-%definesystemvariable {sw} % SectionWorld
\definesystemvariable {sx} % Selector
-%definesystemvariable {sy} % SYnchronisatie
\definesystemvariable {ta} % TAb
\definesystemvariable {tb} % TekstBlokken
-\definesystemvariable {td} % TextbackgrounDs
\definesystemvariable {te} % TEmplate
\definesystemvariable {tf} % TypeFace
-%definesystemvariable {tg} % Tex paGe
\definesystemvariable {ti} % TabelInstellingen
-\definesystemvariable {tk} % Teksten
\definesystemvariable {tl} % TekstLijnen
\definesystemvariable {tm} % TypesynonyM
\definesystemvariable {to} % TOlerance
-\definesystemvariable {tp} % TyPen
-%definesystemvariable {tr} % TRacer
\definesystemvariable {ts} % TypeScript
\definesystemvariable {tt} % TabulaTe
\definesystemvariable {tx} % TeXtflow
-\definesystemvariable {ty} % TYpe
-%definesystemvariable {uc} % Unicode
-%definesystemvariable {ui} % UItvoer
-\definesystemvariable {un} % UNits
\definesystemvariable {ur} % URl
\definesystemvariable {ut} % strUT
-%definesystemvariable {up} % Utility Program
\definesystemvariable {va} % VspAce
-%definesystemvariable {ve} % VErsie
\definesystemvariable {vn} % VoetNoten
\definesystemvariable {vs} % VSpacing
-%definesystemvariable {vt} % VerTical
-\definesystemvariable {wc} % WidgetContent
-\definesystemvariable {wh} % WidgetHelp
-\definesystemvariable {wl} % WidgetLabel
-\definesystemvariable {wp} % WidgetPopuphelp
-%definesystemvariable {wr} % WitRuimte
-%definesystemvariable {ws} % WidgetStack (not used)
-\definesystemvariable {wt} % WidgetTotal
\definesystemvariable {wz} % whitespace
\definesystemvariable {xf} % XML File (xtag)
-\definesystemvariable {xl} % lxml (mkiv)
-\definesystemvariable {xm} % xml (mkiv)
\definesystemvariable {xp} % XML Processing (xtag, so still needed)
-\definesystemvariable {xy} % schaal
\definesystemvariable {za} % layout adapt % ZetspiegelAanpassing
\definesystemvariable {zc} % columns
\definesystemvariable {zo} % otr
@@ -775,15 +623,6 @@
\definefileconstant {locfilename} {cont-loc}
\definefileconstant {expfilename} {cont-exp}
-%D Handy for typescripts (we could use s! instead) but these
-%D might go:
-
-\definetypescriptconstant {name} {name}
-\definetypescriptconstant {default} {default}
-\definetypescriptconstant {map} {map}
-\definetypescriptconstant {special} {special}
-\definetypescriptconstant {size} {size}
-
%D The setup files for the language, font, color and special
%D subsystems have a common prefix. This means that we have at
%D most three characters for unique filenames.
diff --git a/tex/context/base/node-bck.mkiv b/tex/context/base/node-bck.mkiv
index 844ffa377..d0860dcdc 100644
--- a/tex/context/base/node-bck.mkiv
+++ b/tex/context/base/node-bck.mkiv
@@ -20,53 +20,69 @@
\registerctxluafile{node-bck}{1.001}
-\def\doinitializeboxbackgrounds % will move to lua
+\def\backgrounds_boxes_initialize % will move to lua
{\ctxlua{nodes.tasks.enableaction("shipouts","nodes.handlers.backgrounds")}%
\glet\doinitializeboxbackgrounds\donothing}
-%D Box helpers:
-
% \backgroundvbox[green] {\input tufte } \par
% \backgroundvbox[blue] {\input ward } \par
% \backgroundvbox[red] {\input knuth } \par
% \backgroundhbox[yellow]{\rotate[rotation=45]{hello world}} \par
-\def\doaddbackgroundtobox#1[#2]%
- {\begingroup\doinitializeboxbackgrounds\faststartcolor[#2]%
- \normalexpanded{\noexpand\faststopcolor\endgroup#1
- attr \backgroundattribute \plusone
- attr \colormodelattribute \the\attribute\colormodelattribute
- attr \colorattribute \the\attribute\colorattribute
- attr \transparencyattribute \the\attribute\transparencyattribute}}
-
-\def\backgroundvbox{\doaddbackgroundtobox\vbox}
-\def\backgroundvtop{\doaddbackgroundtobox\vtop}
-\def\backgroundhbox{\doaddbackgroundtobox\hbox}
-
\def\colorattr#1%
- {\ifcsname\??qc:\currentpalet#1\endcsname
- \thecolorattr{\currentpalet#1}%
- \else\ifcsname\??qc:#1\endcsname
+ {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname
+ \thecolorattr{\currentcolorprefix#1}%
+ \else\ifcsname\??colorattribute#1\endcsname
\thecolorattr{#1}%
\fi\fi}
\def\thecolorattr#1%
{attr \colormodelattribute \attribute\colormodelattribute
- attr \colorattribute \csname\??qc:#1\endcsname
- attr \transparencyattribute \csname\??qt:#1\endcsname}
+ attr \colorattribute \csname\??colorattribute #1\endcsname
+ attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized
\def\backgroundcolorattr#1%
- {\ifcsname\??qc:\currentpalet#1\endcsname
- \thebackgroundcolorattr{\currentpalet#1}%
- \else\ifcsname\??qc:#1\endcsname
+ {\ifcsname\??colorattribute\currentcolorprefix#1\endcsname
+ \thebackgroundcolorattr{\currentcolorprefix#1}%
+ \else\ifcsname\??colorattribute#1\endcsname
\thebackgroundcolorattr{#1}%
\fi\fi}
\def\thebackgroundcolorattr#1%
{attr \backgroundattribute \plusone
attr \colormodelattribute \attribute\colormodelattribute
- attr \colorattribute \csname\??qc:#1\endcsname
- attr \transparencyattribute \csname\??qt:#1\endcsname}
+ attr \colorattribute \csname\??colorattribute#1\endcsname
+ attr \transparencyattribute \thetransparencyattribute{#1} } % can be optimized
+
+\unexpanded\def\backgroundhbox{\backgrounds_boxes_add\hbox}
+\unexpanded\def\backgroundvbox{\backgrounds_boxes_add\vbox}
+\unexpanded\def\backgroundvtop{\backgrounds_boxes_add\vtop}
+
+% \def\backgrounds_boxes_add#1[#2]%
+% {\begingroup
+% \backgrounds_boxes_initialize
+% \dousecolorparameter{#2}%
+% \normalexpanded{\endgroup#1
+% attr \backgroundattribute \plusone
+% attr \colormodelattribute \the\attribute\colormodelattribute
+% attr \colorattribute \the\attribute\colorattribute
+% attr \transparencyattribute \the\attribute\transparencyattribute}}
+%
+% more efficient:
+
+\def\backgrounds_boxes_add#1[#2]%
+ {\backgrounds_boxes_initialize#1\backgroundcolorattr{#2}}
+
+% less argument carry over:
+%
+% \def\backgrounds_boxes_add#1[#2]%
+% {\backgrounds_boxes_initialize#1%
+% \ifcsname\??colorattribute\currentcolorprefix#2\endcsname
+% \thebackgroundcolorattr{\currentcolorprefix#2}%
+% \else\ifcsname\??colorattribute#2\endcsname
+% \thebackgroundcolorattr{#2}%
+% \fi\fi}
+
% \def\backgroundvbox[#1]{\vbox \backgroundcolorattr{#1}}
% \def\backgroundvtop[#1]{\vtop \backgroundcolorattr{#1}}
diff --git a/tex/context/base/node-fin.mkiv b/tex/context/base/node-fin.mkiv
index 2f90e699b..09bac6c08 100644
--- a/tex/context/base/node-fin.mkiv
+++ b/tex/context/base/node-fin.mkiv
@@ -18,19 +18,17 @@
\unprotect
+\registerctxluafile{node-shp}{1.001}
\registerctxluafile{node-fin}{1.001} % we might generalize this one
-\definesystemattribute[trigger][public]
-
-% There will be two: (1) page i.e. before shipout cq. impose cache
-% (2) at shipout
+% we might have two variants at some point (efficiency)
-\def\finalizeobjectbox #1{\ctxlua{nodes.handlers.finalize(tex.box[\number#1])}}
-\def\finalizeshipoutbox#1{\ctxlua{nodes.handlers.finalize(tex.box[\number#1])}}
+\def\finalizeobjectbox #1{\ctxcommand{finalizebox(\number#1)}}
+\def\finalizeshipoutbox#1{\ctxcommand{finalizebox(\number#1)}}
-% tricky stuff:
+% Tricky stuff: this might become obsolete.
-% THIS MIGHT BECOME OBSOLETE.
+\definesystemattribute[trigger][public]
\newcount\attributeboxcount
diff --git a/tex/context/base/node-ini.mkiv b/tex/context/base/node-ini.mkiv
index e071506a2..afc362de9 100644
--- a/tex/context/base/node-ini.mkiv
+++ b/tex/context/base/node-ini.mkiv
@@ -26,7 +26,7 @@
\registerctxluafile{node-tsk}{1.001}
\registerctxluafile{node-tex}{1.001}
\registerctxluafile{node-pro}{1.001}
-\registerctxluafile{node-shp}{1.001}
+%registerctxluafile{node-shp}{1.001} % moved to node-fin.mkiv
\registerctxluafile{node-ser}{1.001}
\registerctxluafile{node-ext}{1.001}
%registerctxluafile{node-inj}{1.001} % we might split it off
diff --git a/tex/context/base/node-par.mkiv b/tex/context/base/node-par.mkiv
index e6a322637..17eefe39b 100644
--- a/tex/context/base/node-par.mkiv
+++ b/tex/context/base/node-par.mkiv
@@ -36,26 +36,30 @@
% management (enable/disable) is global and will move to lua
-\newcount\nofparbuilders
+\installcorenamespace {parbuilder}
+
+\newcount\c_par_n_of_builders
+
+\let\m_par_current_builder\empty
\unexpanded\def\defineparbuilder[#1]%
- {\global\advance\nofparbuilders\plusone
- \ctxlua{builders.paragraphs.constructors.register("#1",\number\nofparbuilders)}%
- \setxvalue{\??ng:#1}{\attribute\parbuilderattribute\nofparbuilders}}
+ {\global\advance\c_par_n_of_builders\plusone
+ \ctxlua{builders.paragraphs.constructors.register("#1",\number\c_par_n_of_builders)}%
+ \setxvalue{\??parbuilder#1}{\attribute\parbuilderattribute\number\c_par_n_of_builders}}
\unexpanded\def\startparbuilder[#1]%
- {\edef\@@currentparbuilder{\number\attribute\parbuilderattribute}%
- \globalpushmacro\@@currentparbuilder
- \getvalue{\??ng:#1}%
- \checkparbuilders}
+ {\edef\m_par_current_builder{\number\attribute\parbuilderattribute}%
+ \globalpushmacro\m_par_current_builder
+ \getvalue{\??parbuilder#1}\relax
+ \par_builders_check}
\unexpanded\def\stopparbuilder
{\ifhmode\par\fi
- \globalpopmacro\@@currentparbuilder
- \attribute\parbuilderattribute\@@currentparbuilder\relax
- \checkparbuilders}
+ \globalpopmacro\m_par_current_builder
+ \attribute\parbuilderattribute\m_par_current_builder\relax
+ \par_builders_check}
-\def\setmainparbuilder[#1]%
+\unexpanded\def\setmainparbuilder[#1]%
{\ctxlua{builders.paragraphs.constructors.set("#1")}}
% no high level interface, after all implementing a linebreaker is not something that
@@ -68,7 +72,7 @@
\def\enableparbuilders {\ctxlua{builders.paragraphs.constructors.enable ()}}
\def\disableparbuilders{\ctxlua{builders.paragraphs.constructors.disable()}}
-\def\checkparbuilders % can be more efficient as we don't want to do this to often
+\def\par_builders_check % can be made more efficient as we don't want to do this too often
{\ifcase\attribute\parbuilderattribute
\disableparbuilders
\else
diff --git a/tex/context/base/node-rul.mkiv b/tex/context/base/node-rul.mkiv
index b093521f9..58e51b1b8 100644
--- a/tex/context/base/node-rul.mkiv
+++ b/tex/context/base/node-rul.mkiv
@@ -15,7 +15,8 @@
\writestatus{loading}{ConTeXt Core Macros / Bars}
-%D The name of this file might change.
+%D The name of this file might change (and then the prefix will
+%D become \xxxx_bar etc).
%D \macros
%D {underbar,underbars,
@@ -52,9 +53,15 @@
%D \showsetup{overstrikes}
%D
%D \showsetup{setupunderbar}
+%D
+%D Nested bars can be configured by appending \type {:<index>} to the
+%D category.
-%D todo: mkvi this file ... no redefine, just pass all parameters, too messy now
-%D (due to grouping) so better hash settings at the lua end
+%D As with many early usage of \LUA\ in \MKIV\ this mechanism explores a way
+%D to deal with local settings at the \TEX\ end and remembering parameters
+%D at the \LUA\ end. We might do things differently now, but as settings normally
+%D don't change that often, we're not in a hurry to do that now. The problem at
+%D the \LUA\ end is that we don't know when to clean up.
\unprotect
@@ -63,40 +70,42 @@
\registerctxluafile{node-rul}{1.001}
-\installcommandhandler \??on {bar} \??on
+\installcorenamespace{bar}
+\installcorenamespace{barindex}
+\installcorenamespace{barattribute}
+\installcorenamespace{barstack}
+
+\installcommandhandler \??bar {bar} \??bar
-\newtoks\checkalldefinedbars
+\newtoks\t_bar_checklist
+
+\let\c_bar_index\relax % temporary synonym
+\let\p_bar_color\empty
\let\setupbars\setupbar
\appendtoks
- \ifsecondargument
- \dodefinebarindeed\currentbar
- \else
- \the\checkalldefinedbars
- \fi
+ \ifsecondargument
+ \bar_define
+ \else
+ \the\t_bar_checklist
+ \fi
\to \everysetupbar
\appendtoks
- \ifcsname\??on:\currentbar:c\endcsname
- \csname\??on:\currentbar:c\endcsname\zerocount
- \else
- \expandafter\newcount\csname\??on:\currentbar:c\endcsname
- \fi
- \normalexpanded{\checkalldefinedbars{\doredefinebar{\currentbar}\the\checkalldefinedbars}}%
- \dodefinebarindeed\currentbar
- \setuevalue\currentbar{\doruled{\currentbar}}%
+ \ifcsname\??barindex\currentbar\endcsname
+ \csname\??barindex\currentbar\endcsname\zerocount
+ \else
+ \expandafter\newcount\csname\??barindex\currentbar\endcsname
+ \fi
+ \normalexpanded{\t_bar_checklist{\bar_redefine{\currentbar}\the\t_bar_checklist}}%
+ \bar_define
+ \setuevalue\currentbar{\bar_direct{\currentbar}}%
\to \everydefinebar
-\unexpanded\def\dodefinebarindeed#1%
- {\begingroup
- \edef\currentbar{#1}%
- \doifsomethingelse{\barparameter\c!color}
- {\donetrue\colored[\barparameter\c!color]}
- {\donefalse}%
- \normalexpanded
- {\endgroup
- \scratchcounter\ctxlua{nodes.rules.define {
+\unexpanded\def\bar_define
+ {\edef\p_bar_color{\barparameter\c!color}%
+ \setevalue{\??barattribute\currentbar}{\number\ctxlua{nodes.rules.define {
method = \barparameter\c!method,
offset = \barparameter\c!offset,
continue = "\barparameter\c!continue",
@@ -105,52 +114,51 @@
unit = "\barparameter\c!unit",
order = "\barparameter\c!order",
max = \barparameter\c!max,
- ma = \ifdone\the\attribute\colormodelattribute \else0\fi,
- ca = \ifdone\the\attribute\colorattribute \else0\fi,
- ta = \ifdone\the\attribute\transparencyattribute\else0\fi
- }}}%
- \setevalue{\??on#1:a}{\the\scratchcounter}}
+ ma = \thecolormodelattribute,
+ ca = \thecolorattribute\p_bar_color,
+ ta = \thetransparencyattribute\p_bar_color
+ }}}}
-\let\doredefinebar\dodefinebarindeed
+\unexpanded\def\bar_redefine#1%
+ {\def\currentbar{#1}\bar_define}
-\unexpanded\def\doruled#1%
- {\groupedcommand{\dodoruled{#1}}\relax}
+\unexpanded\def\bar_direct#1%
+ {\groupedcommand{\bar_set{#1}}\relax}
-\def\dodoruled
+\def\bar_set
{\ctxlua{nodes.rules.enable()}% will be moved to lua
- \glet\dodoruled\dodoruledindeed
- \dodoruled}
+ \glet\bar_set\bar_set_indeed
+ \bar_set}
-\def\dodoruledindeed#1% maybe reverse the 1000 (also maybe use more attributes instead of settings)
+\def\bar_set_indeed#1% maybe reverse the 1000 (also maybe use more attributes instead of settings)
{\edef\currentbar{#1}%
- \advance\csname\??on:#1:c\endcsname\plusone % local ?
- \scratchcounter\csname\??on:#1:c\endcsname
+ \expandafter\let\expandafter\c_bar_index\csname\??barindex#1\endcsname
+ \advance\c_bar_index\plusone
\usebarstyleandcolor\c!foregroundstyle\c!foregroundcolor
\attribute\ruledattribute\numexpr
- 1000*\scratchcounter
- +\csname\??on#1\ifcsname\??on#1:\number\scratchcounter\s!parent\endcsname:\number\scratchcounter\fi:a\endcsname
+ \plusthousand*\c_bar_index
+ +\csname\??barattribute#1\ifcsname\??bar#1:\number\c_bar_index\s!parent\endcsname:\number\c_bar_index\fi\endcsname
\relax}
-% ungrouped
-
\unexpanded\def\startbar[#1]%
{\begingroup
- \dodoruled{#1}}
+ \bar_set{#1}}
\unexpanded\def\stopbar
{\endgroup}
-\newcount\currentbarnesting % todo: same as colors
+% ungrouped
+
+\newcount\c_bar_nesting % todo: same as colors
\unexpanded\def\pushbar[#1]%
- {\global\advance\currentbarnesting\plusone
- \expandafter\edef\csname\??on:s:\number\currentbarnesting\endcsname
- {\attribute\ruledattribute\the\attribute\ruledattribute}% stack
- \dodoruled{#1}}
+ {\global\advance\c_bar_nesting\plusone
+ \expandafter\edef\csname\??barstack\number\c_bar_nesting\endcsname{\attribute\ruledattribute\the\attribute\ruledattribute}%
+ \bar_set{#1}}
\unexpanded\def\popbar
- {\csname\??on:s:\number\currentbarnesting\endcsname
- \global\advance\currentbarnesting\minusone}
+ {\csname\??barstack\number\c_bar_nesting\endcsname
+ \global\advance\c_bar_nesting\minusone}
\setupbars
[\c!method=0, % new: 0=center nested, 1=stack nested
@@ -167,9 +175,9 @@
% \definebar[touchbar] [\c!method=0,\c!dy=-0.4,\c!offset=-0.0]
% \definebar[touchbars] [touchbar] [\c!continue=\v!yes]
-\definebar[\v!overstrike] [\c!method=0,\c!dy=0.4,\c!offset=0.5,\c!continue=\v!yes]
-\definebar[\v!underbar] [\c!method=1,\c!dy=-0.4,\c!offset=-0.3,\c!continue=\v!yes]
-\definebar[\v!overbar] [\c!method=1,\c!dy=0.4,\c!offset=1.8,\c!continue=\v!yes]
+\definebar[\v!overstrike][\c!method=0,\c!dy=0.4,\c!offset=0.5,\c!continue=\v!yes]
+\definebar[\v!underbar] [\c!method=1,\c!dy=-0.4,\c!offset=-0.3,\c!continue=\v!yes]
+\definebar[\v!overbar] [\c!method=1,\c!dy=0.4,\c!offset=1.8,\c!continue=\v!yes]
\definebar
[\v!understrike]
@@ -199,82 +207,75 @@
%D This will move: (a bit duplicated)
-\installcommandhandler \??ra {shift} \??ra
+\installcorenamespace{shift}
+\installcorenamespace{shiftindex}
+\installcorenamespace{shiftattribute}
+
+\installcommandhandler \??shift {shift} \??shift
-\newtoks\checkalldefinedshifts
+\newtoks\t_shift_checklist
+
+\let\c_shift_index\relax % temporary synonym
\let\setupshifts\setupshift
\appendtoks
- \ifsecondargument
- \dodefineshiftindeed\currentshift
- \else
- \the\checkalldefinedshifts
- \fi
+ \ifsecondargument
+ \shift_define
+ \else
+ \the\t_shift_checklist
+ \fi
\to \everysetupshift
\appendtoks
- \ifcsname\??ra:\currentshift:c\endcsname
- \csname\??ra:\currentshift:c\endcsname\zerocount
- \else
- \expandafter\newcount\csname\??ra:\currentshift:c\endcsname
- \fi
- \normalexpanded{\checkalldefinedshifts{\doredefineshift{\currentshift}\the\checkalldefinedshifts}}%
- \dodefineshiftindeed{\currentshift}%
- \setuevalue\currentshift{\doshifted{\currentshift}}%
+ \ifcsname\??shiftindex\currentshift\endcsname
+ \csname\??shiftindex\currentshift\endcsname\zerocount
+ \else
+ \expandafter\newcount\csname\??shiftindex\currentshift\endcsname
+ \fi
+ \normalexpanded{\t_shift_checklist{\shift_redefine{\currentshift}\the\t_shift_checklist}}%
+ \shift_define
+ \setuevalue\currentshift{\shift_direct{\currentshift}}%
\to \everydefineshift
-\unexpanded\def\dodefineshiftindeed#1%
- {\begingroup
- \edef\currentshift{#1}%
- \normalexpanded
- {\endgroup
- \scratchcounter\ctxlua{nodes.shifts.define {
+\unexpanded\def\shift_define
+ {\setevalue{\??shiftattribute\currentshift}{\number\ctxlua{nodes.shifts.define {
method = \shiftparameter\c!method,
continue = "\shiftparameter\c!continue",
dy = \shiftparameter\c!dy,
unit = "\shiftparameter\c!unit",
- }}}%
- \setevalue{\??ra#1:a}{\the\scratchcounter}}
+ }}}}
-\let\doredefineshift\dodefineshiftindeed
+\unexpanded\def\shift_redefine#1%
+ {\def\currentshift{#1}\shift_define}
-% \unexpanded\def\doshifted#1%
-% {\groupedcommand{\dodoshifted{#1}}\relax}
-
-\def\dodoshifted
+\unexpanded\def\shift_set
{\ctxlua{nodes.shifts.enable()}%
- \glet\dodoshifted\dodoshiftedindeed
- \dodoshifted}
+ \glet\shift_set\shift_set_indeed
+ \shift_set}
-\def\dostartisolation{\signalcharacter}
-\def\dostopisolation {\signalcharacter}
-\def\doisolator {\signalcharacter}
+% \unexpanded\def\shift_direct#1%
+% {\doisolatedgroupedalign{\shift_set{#1}}\donothing}
-\def\doisolatedgroupedalign#1#2%
+\unexpanded\def\shift_direct#1%
{\groupedcommand
- {\begingroup\dostartisolation\begingroup#1}
- {#2\endgroup\dostopisolation\endgroup}}
+ {\begingroup\dostartisolation\begingroup\shift_set{#1}}
+ {\endgroup\dostopisolation\endgroup}}
-\def\dosetupisolatedalign#1%
- {\doisolator
- \setupalign[#1]\relax}
-
-\def\dodoshiftedindeed#1%
+\def\shift_set_indeed#1% todo: check parent !
{\def\currentshift{#1}%
- \advance\csname\??ra:#1:c\endcsname\plusone
- \scratchcounter\csname\??ra:#1:c\endcsname
- \attribute\shiftedattribute\numexpr1000*\scratchcounter
- +\csname\??ra#1\ifcsname\??ra#1:\number\scratchcounter\s!parent\endcsname:\number\scratchcounter\fi:a\endcsname
+ \expandafter\let\expandafter\c_shift_index\csname\??shiftindex#1\endcsname
+ \advance\c_shift_index\plusone
+ \attribute\shiftedattribute\numexpr
+ \plusthousand*\c_shift_index
+ +\csname\??shiftattribute#1\ifcsname\??shift#1:\number\c_shift_index\s!parent\endcsname:\number\c_shift_index\fi\endcsname
+ \relax
\useshiftstyleandcolor\c!style\c!color
\dosetupisolatedalign{\shiftparameter\c!align}}
-\unexpanded\def\doshifted#1%
- {\doisolatedgroupedalign{\dodoshifted{#1}}{}}
-
\unexpanded\def\startshift[#1]%
{\begingroup
- \dodoshifted{#1}}
+ \shift_set{#1}}
\unexpanded\def\stopshift
{\endgroup}
@@ -299,13 +300,19 @@
\expandafter\let\expandafter\shiftup \csname\v!shiftup \endcsname
\expandafter\let\expandafter\shiftdown \csname\v!shiftdown \endcsname
-\protect \endinput
+% This is a weird helper:
-% obsolete:
+\unexpanded\def\dostartisolation{\signalcharacter}
+\unexpanded\def\dostopisolation {\signalcharacter}
+\unexpanded\def\doisolator {\signalcharacter}
-\setupunderbar
- [\c!alternative=a,
- \c!rulethickness=\linewidth,
- \c!bottomoffset=1.5pt,
- \c!topoffset=2.5pt,
- \c!rulecolor=]
+\unexpanded\def\dosetupisolatedalign#1%
+ {\doisolator
+ \setupalign[#1]\relax}
+
+\unexpanded\def\doisolatedgroupedalign#1#2%
+ {\groupedcommand
+ {\begingroup\dostartisolation\begingroup#1}
+ {#2\endgroup\dostopisolation\endgroup}}
+
+\protect \endinput
diff --git a/tex/context/base/node-shp.lua b/tex/context/base/node-shp.lua
index 75177a4ed..6fad0f495 100644
--- a/tex/context/base/node-shp.lua
+++ b/tex/context/base/node-shp.lua
@@ -18,6 +18,8 @@ local mark_code = nodecodes.mark
local kern_code = nodecodes.kern
local glue_code = nodecodes.glue
+local texbox = tex.box
+
local free_node = node.free
local remove_node = node.remove
@@ -60,3 +62,9 @@ function nodes.handlers.finalize(head) -- problem, attr loaded before node, todo
end
--~ nodes.handlers.finalize = actions
+
+-- interface
+
+function commands.finalizebox(n)
+ actions(texbox[n])
+end
diff --git a/tex/context/base/pack-bck.mkvi b/tex/context/base/pack-bck.mkvi
index ed742421a..a105150b6 100644
--- a/tex/context/base/pack-bck.mkvi
+++ b/tex/context/base/pack-bck.mkvi
@@ -52,7 +52,9 @@
\unprotect
-\installframedcommandhandler \??ag {background} \??ag
+\installcorenamespace {background}
+
+\installframedcommandhandler \??background {background} \??background
% The mode is not that public an dmostlu an initial mode:
%
@@ -243,12 +245,11 @@
\unexpanded\def\background_add_to_nextbox#color% handy helper
{\hbox
- {\faststartcolor[#color]%
+ {\dousecolorparameter{#color}%
\vrule
\!!width \nextboxwd
\!!height\nextboxht
\!!depth \nextboxdp
- \faststopcolor
\hskip-\nextboxwd
\flushnextbox}}
diff --git a/tex/context/base/pack-box.mkiv b/tex/context/base/pack-box.mkiv
index 90abcf497..843f3fcd8 100644
--- a/tex/context/base/pack-box.mkiv
+++ b/tex/context/base/pack-box.mkiv
@@ -13,6 +13,8 @@
\writestatus{loading}{ConTeXt Packaging Macros / Boxes}
+% to be cleaned up
+
%D This module contains all kind of macros for moving content
%D around. Many macros here come from other modules, but
%D depencies made it more clear to isolate them.
@@ -164,62 +166,62 @@
{\def\currentcollector{#1}%
\chardef\collectorbox\csname\@@collectorbox#1\endcsname
\getparameters[\??cb#1][#2]%
- \@@layerxsiz\wd\collectorbox
- \@@layerysiz\ht\collectorbox
+ \d_layers_x_size\wd\collectorbox
+ \d_layers_y_size\ht\collectorbox
\doifvaluesomething{\??cb#1\c!rotation}
{\setbox\nextbox\hbox
{\rotate
[\c!location=\v!high,
\c!rotation=\collectorparameter\c!rotation]
{\flushnextbox}}}%
- \advance\@@layerysiz\dp\collectorbox
- \@@layerxpos\collectorparameter\c!x
- \advance\@@layerxpos\collectorparameter\c!hoffset
- \@@layerypos\collectorparameter\c!y
- \advance\@@layerypos\collectorparameter\c!voffset
+ \advance\d_layers_y_size\dp\collectorbox
+ \d_layers_x_position\collectorparameter\c!x
+ \advance\d_layers_x_position\collectorparameter\c!hoffset
+ \d_layers_y_position\collectorparameter\c!y
+ \advance\d_layers_y_position\collectorparameter\c!voffset
\doifelse\v!middle{\collectorparameter\c!corner}
- {\ifdim\@@layerxsiz>\zeropoint
- \advance\@@layerxpos.5\@@layerxsiz
+ {\ifdim\d_layers_x_size>\zeropoint
+ \advance\d_layers_x_position.5\d_layers_x_size
\fi
- \ifdim\@@layerysiz>\zeropoint
- \advance\@@layerypos.5\@@layerysiz
+ \ifdim\d_layers_y_size>\zeropoint
+ \advance\d_layers_y_position.5\d_layers_y_size
\fi}%
{\normalexpanded{\noexpand\doifinset{\v!bottom}{\collectorparameter\c!corner}}
- {\ifdim\@@layerysiz>\zeropoint
- \advance\@@layerypos-\@@layerysiz
- \@@layerypos-\@@layerypos
+ {\ifdim\d_layers_y_size>\zeropoint
+ \advance\d_layers_y_position-\d_layers_y_size
+ \d_layers_y_position-\d_layers_y_position
\fi}%
\normalexpanded{\noexpand\doifinset{\v!right}{\collectorparameter\c!corner}}
- {\ifdim\@@layerxsiz>\zeropoint
- \advance\@@layerxpos-\@@layerxsiz
- \@@layerxpos-\@@layerxpos
+ {\ifdim\d_layers_x_size>\zeropoint
+ \advance\d_layers_x_position-\d_layers_x_size
+ \d_layers_x_position-\d_layers_x_position
\fi}}%
\setbox\nextbox\hbox
{\alignedbox[\collectorparameter\c!location]\vbox{\flushnextbox}}%
\boxmaxdepth\zeropoint % really needed, nice example
- \global\advance\boxhdisplacement\@@layerxpos
+ \global\advance\boxhdisplacement\d_layers_x_position
\ifdim\boxhdisplacement<\zeropoint
\global\setbox\collectorbox\hbox
{\hskip-\boxhdisplacement
\box\collectorbox}%
\fi
- \global\advance\boxvdisplacement\@@layerypos
+ \global\advance\boxvdisplacement\d_layers_y_position
\ifdim\boxvdisplacement<\zeropoint
\global\setbox\collectorbox\hbox
{\lower-\boxvdisplacement
\box\collectorbox}%
\fi
- \@@layerxsiz\wd\collectorbox
- \@@layerysiz\ht\collectorbox
- \advance\@@layerysiz\dp\collectorbox
+ \d_layers_x_size\wd\collectorbox
+ \d_layers_y_size\ht\collectorbox
+ \advance\d_layers_y_size\dp\collectorbox
\global\setbox\collectorbox\hbox
{\box\collectorbox
- \hskip-\@@layerxsiz
- \hskip\@@layerxpos\relax
+ \hskip-\d_layers_x_size
+ \hskip\d_layers_x_position\relax
\ifdim\boxhdisplacement<\zeropoint
\hskip-\boxhdisplacement
\fi
- \lower\@@layerypos\hbox
+ \lower\d_layers_y_position\hbox
{\ifdim\boxvdisplacement<\zeropoint
\lower-\boxvdisplacement\flushnextbox
\else
@@ -229,8 +231,8 @@
\global\setbox\collectorbox\hbox
{\lower\ht\collectorbox\box\collectorbox}%
% just to be sure
- \ifdim\wd\collectorbox<\@@layerxsiz
- \wd\collectorbox\@@layerxsiz
+ \ifdim\wd\collectorbox<\d_layers_x_size
+ \wd\collectorbox\d_layers_x_size
\fi}
\def\flushcollector[#1]%
@@ -442,12 +444,12 @@
\c!hoffset=\@@bgoffset]
\unexpanded\def\bleed
- {\dosingleempty\dobleed}
+ {\dosingleempty\boxes_bleed}
\def\bleedwidth {\the\hsize}%
\def\bleedheight{\the\vsize}%
-\def\dobleed[#1]#2%
+\def\boxes_bleed[#1]#2%
{\hbox\bgroup
\xdef\bleedwidth {\the\hsize}%
\xdef\bleedheight{\the\vsize}%
@@ -559,49 +561,33 @@
% only apply the offset to ...
\def\setlayerframed
- {\dotripleempty\dosetlayerframed}
-
-% \def\dosetlayerframed
-% {\ifthirdargument
-% \expandafter\dosetlayerframedT
-% \else
-% \expandafter\dosetlayerframedS
-% \fi}
-%
-% \def\dosetlayerframedT[#1][#2][#3]%
-% {\dowithnextbox{\setlayer[#1][#2]{\flushnextbox}}%
-% \hbox\framed[#3]}
-%
-% \def\dosetlayerframedS[#1][#2][#3]%
-% {\dowithnextbox % we could use a local setlayer command (no doif..empty) which also saves a nextbox
-% {\setlayer[#1][\c!width=\nextboxwd,\c!height=\nextboxht,#2,\c!offset=\!!zeropoint]{\flushnextbox}}%
-% \hbox\normalframedwithsettings[\c!location=\v!normal,#2]}% fast call (no arg check)
+ {\dotripleempty\layers_set_framed}
-\def\dosetlayerframed
+\def\layers_set_framed
{\ifthirdargument
- \expandafter\dosetlayerframedT
+ \expandafter \layers_set_framed_t
\else\ifsecondargument
- \doubleexpandafter\dosetlayerframedD
+ \doubleexpandafter\layers_set_framed_d
\else
- \doubleexpandafter\dosetlayerframedS
+ \doubleexpandafter\layers_set_framed_s
\fi\fi}
-\def\dosetlayerframedS[#1][#2][#3]%
+\def\layers_set_framed_s[#1][#2][#3]%
{\setlayer[#1][\c!width=\wd\nextbox,\c!height=\ht\nextbox,\c!offset=\zeropoint]%
\normalframedwithsettings[\c!location=\v!normal]} % diffrent kind of location
-\def\dosetlayerframedD[#1][#2][#3]%
+\def\layers_set_framed_d[#1][#2][#3]%
{\setlayer[#1][\c!width=\wd\nextbox,\c!height=\ht\nextbox,#2,\c!offset=\zeropoint]%
\normalframedwithsettings[\c!location=\v!normal,#2]} % diffrent kind of location
-\def\dosetlayerframedT[#1][#2][#3]%
+\def\layers_set_framed_t[#1][#2][#3]%
{\setlayer[#1][#2]%
\normalframedwithsettings[#3]}
-
+
\def\setlayertext
- {\dotripleempty\dosetlayertext}
+ {\dotripleempty\layers_set_text}
-\def\dosetlayertext[#1][#2][#3]%
+\def\layers_set_text[#1][#2][#3]%
{\bgroup
\getparameters
[\??lx]
@@ -618,7 +604,7 @@
{\setlayer[#1][#2]{\strut\dousecolorparameter\@@lxcolor\flushnextbox}%
\egroup}%
\vtop}
-
+
% \setupbackgrounds
% [page]
% [background=pagefigures]
@@ -692,159 +678,135 @@
\definelayerpreset
[\v!middle\v!right]
[\c!location=\v!left,\c!corner=\v!right,\c!dy=.5\layerheight]
-
-\def\alignedbox
- {\dodoubleempty\doalignedbox[]}
-
-% \def\doalignedbox[#1][#2]%
-% {\bgroup
-% %\let\iftraceboxplacement\iftracelayers % ugly
-% \dowithnextbox
-% {\let\next\middlebox
-% \processaction
-% [#2]
-% [ t=>\let\next\topbox , b=>\let\next\bottombox ,
-% l=>\let\next\leftbox , r=>\let\next\rightbox ,
-% bl=>\let\next\bottomleftbox,br=>\let\next\bottomrightbox,
-% tl=>\let\next\topleftbox ,tr=>\let\next\toprightbox ,
-% lt=>\let\next\lefttopbox ,lb=>\let\next\leftbottombox ,
-% rt=>\let\next\righttopbox ,rb=>\let\next\rightbottombox]%
-% \next{\flushnextbox}%
-% \egroup}#1}
-
-\def\doalignedbox[#1][#2]%
- {\bgroup
- %\let\iftraceboxplacement\iftracelayers % ugly
- \dowithnextbox
- {\serializecommalist[#2]%
- \executeifdefined{\??ab\??ab\serializedcommalist}\middlebox{\flushnextbox}%
- \egroup}#1}
-
-\setvalue{\??ab\??ab }{\middlebox}
-\setvalue{\??ab\??ab\v!middle }{\middlebox}
-\setvalue{\??ab\??ab\v!left }{\leftbox }
-\setvalue{\??ab\??ab\v!right }{\rightbox }
-\setvalue{\??ab\??ab\v!bottom }{\bottombox}
-\setvalue{\??ab\??ab\v!top }{\topbox }
-
-\setvalue{\??ab\??ab\v!middle\v!middle}{\middlebox}
-\setvalue{\??ab\??ab\v!left \v!top }{\lefttopbox}
-\setvalue{\??ab\??ab\v!left \v!bottom}{\leftbottombox}
-\setvalue{\??ab\??ab\v!right \v!top }{\righttopbox}
-\setvalue{\??ab\??ab\v!right \v!bottom}{\rightbottombox}
-\setvalue{\??ab\??ab\v!top \v!left }{\topleftbox}
-\setvalue{\??ab\??ab\v!bottom\v!left }{\bottomleftbox}
-\setvalue{\??ab\??ab\v!top \v!right }{\toprightbox}
-\setvalue{\??ab\??ab\v!bottom\v!right }{\bottomrightbox}
-
-\setvalue{\??ab\??ab c}{\middlebox}
-\setvalue{\??ab\??ab l}{\leftbox}
-\setvalue{\??ab\??ab r}{\rightbox}
-\setvalue{\??ab\??ab b}{\bottombox}
-\setvalue{\??ab\??ab t}{\topbox}
-
-\setvalue{\??ab\??ab lt}{\lefttopbox}
-\setvalue{\??ab\??ab lb}{\leftbottombox}
-\setvalue{\??ab\??ab rt}{\righttopbox}
-\setvalue{\??ab\??ab rb}{\rightbottombox}
-\setvalue{\??ab\??ab tl}{\topleftbox}
-\setvalue{\??ab\??ab bl}{\bottomleftbox}
-\setvalue{\??ab\??ab tr}{\toprightbox}
-\setvalue{\??ab\??ab br}{\bottomrightbox}
-
-\setvalue{\??ab\??ab m}{\middlebox}
-
-% The next ones were desparately needed by Vit Zyka (see
-% \type {supp-box} for definitions).
-
-\setvalue{\??ab\??ab g}{\baselinemiddlebox}
-\setvalue{\??ab\??ab gl}{\baselineleftbox}
-\setvalue{\??ab\??ab gc}{\baselinemiddlebox}
-\setvalue{\??ab\??ab gr}{\baselinerightbox}
-
-\setvalue{\??ab\??ab \v!line }{\baselinemiddlebox} % \v!grid is taken
-\setvalue{\??ab\??ab \v!line\v!left }{\baselineleftbox}
-\setvalue{\??ab\??ab \v!line\v!middle}{\baselinemiddlebox}
-\setvalue{\??ab\??ab \v!line\v!right }{\baselinerightbox}
-
-\unexpanded\def\offsetbox
- {\dodoubleempty\dooffsetbox[]}
+
+\installcorenamespace{alignedboxes}
+
+\unexpanded\def\alignedbox{\dosingleempty\boxes_aligned_box}
+\unexpanded\def\aligned {\dosingleempty\boxes_aligned}
+
+\def\boxes_aligned_box[#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\boxes_aligned_finish}
+\def\boxes_aligned [#1]{\bgroup\serializecommalist[#1]\dowithnextboxcs\boxes_aligned_finish\hbox}
+
+\def\boxes_aligned_finish
+ {\csname\??alignedboxes
+ \ifcsname\??alignedboxes\serializedcommalist\endcsname\serializedcommalist\else\v!middle\fi
+ \endcsname{\flushnextbox}%
+ \egroup}
+
+\letvalue{\??alignedboxes }\middlebox
+\letvalue{\??alignedboxes\v!middle }\middlebox
+\letvalue{\??alignedboxes\v!middle\v!middle}\middlebox
+\letvalue{\??alignedboxes\v!left }\leftbox
+\letvalue{\??alignedboxes\v!left \v!top }\lefttopbox
+\letvalue{\??alignedboxes\v!left \v!bottom}\leftbottombox
+\letvalue{\??alignedboxes\v!right }\rightbox
+\letvalue{\??alignedboxes\v!right \v!top }\righttopbox
+\letvalue{\??alignedboxes\v!right \v!bottom}\rightbottombox
+\letvalue{\??alignedboxes\v!bottom }\bottombox
+\letvalue{\??alignedboxes\v!bottom\v!left }\bottomleftbox
+\letvalue{\??alignedboxes\v!bottom\v!right }\bottomrightbox
+\letvalue{\??alignedboxes\v!top }\topbox
+\letvalue{\??alignedboxes\v!top \v!left }\topleftbox
+\letvalue{\??alignedboxes\v!top \v!right }\toprightbox
+\letvalue{\??alignedboxes\v!line }\baselinemiddlebox % \v!grid is taken
+\letvalue{\??alignedboxes\v!line \v!left }\baselineleftbox
+\letvalue{\??alignedboxes\v!line \v!middle}\baselinemiddlebox
+\letvalue{\??alignedboxes\v!line \v!right }\baselinerightbox
+\letvalue{\??alignedboxes c}\middlebox
+\letvalue{\??alignedboxes l}\leftbox
+\letvalue{\??alignedboxes r}\rightbox
+\letvalue{\??alignedboxes b}\bottombox
+\letvalue{\??alignedboxes t}\topbox
+\letvalue{\??alignedboxes lt}\lefttopbox
+\letvalue{\??alignedboxes lb}\leftbottombox
+\letvalue{\??alignedboxes rt}\righttopbox
+\letvalue{\??alignedboxes rb}\rightbottombox
+\letvalue{\??alignedboxes tl}\topleftbox
+\letvalue{\??alignedboxes bl}\bottomleftbox
+\letvalue{\??alignedboxes tr}\toprightbox
+\letvalue{\??alignedboxes br}\bottomrightbox
+\letvalue{\??alignedboxes m}\middlebox
+\letvalue{\??alignedboxes g}\baselinemiddlebox
+\letvalue{\??alignedboxes gl}\baselineleftbox
+\letvalue{\??alignedboxes gc}\baselinemiddlebox
+\letvalue{\??alignedboxes gr}\baselinerightbox
% left/right/top/bottomoffset -> dimensions change
% x/y | method=fixed -> dimensions don't change
-\def\dooffsetbox[#1][#2]%
- {\bgroup
- \dowithnextbox
- {\getparameters[\??ox]
- [\c!x=\zeropoint,
- \c!y=\zeropoint,
- \c!width=\nextboxwd,
- \c!height=\nextboxht,
- \c!depth=\nextboxdp,
- \c!location=,
- \c!leftoffset=\zeropoint,
- \c!rightoffset=\zeropoint,
- \c!topoffset=\zeropoint,
- \c!bottomoffset=\zeropoint,
- \c!method=,
- #2]%
- \donefalse
- \ifdim\@@oxleftoffset =\zeropoint\else\donetrue\fi
- \ifdim\@@oxrightoffset=\zeropoint\else\donetrue\fi
- \ifdim\@@oxtopoffset =\zeropoint\else\donetrue\fi
- \ifdim\@@oxbottomoffset =\zeropoint\else\donetrue\fi
- \ifdone
- \doif\@@oxmethod\v!fixed % new
- {\ifdim\@@oxleftoffset=\zeropoint
- \ifdim\@@oxrightoffset=\zeropoint \else
- \scratchdimen-\@@oxrightoffset
- \edef\@@oxx{\the\scratchdimen}%
- \let\@@oxrightoffset\zeropoint
- \fi
- \else
- \let\@@oxx\@@oxleftoffset
- \let\@@oxleftoffset\zeropoint
- \fi
- \ifdim\@@oxtopoffset=\zeropoint
- \ifdim\@@oxbottomoffset=\zeropoint \else
- \scratchdimen-\@@oxbottomoffset
- \edef\@@oxy{\the\scratchdimen}%
- \let\@@oxbottomoffset\zeropoint
- \fi
- \else
- \let\@@oxy\@@oxtopoffset
- \let\@@oxtopoffset\zeropoint
- \fi
- \donefalse}%
- \fi
- \ifdone
- \setbox\nextbox\vbox
- {\forgetall\offinterlineskip
- \vskip\@@oxtopoffset
- \hbox
- {\hskip\@@oxleftoffset
- \flushnextbox
- \hskip\@@oxrightoffset}%
- \vskip\@@oxbottomoffset}%
- \scratchdimen\nextboxht
- \advance\scratchdimen\nextboxdp
- \nextboxht\scratchdimen
- \nextboxdp\zeropoint
- \fi
- \freezedimenmacro\@@oxwidth
- \freezedimenmacro\@@oxheight
- \freezedimenmacro\@@oxdepth
- \setbox\nextbox\hbox
- {\hskip\@@oxx\lower\@@oxy\hbox
- {\doifelsenothing\@@oxlocation
- {\flushnextbox}
- {\alignedbox[\@@oxlocation]\hbox{\flushnextbox}}}}%
- \nextboxwd\@@oxwidth
- \nextboxht\@@oxheight
- \nextboxdp\@@oxdepth
- \flushnextbox
- \egroup}#1}
+\unexpanded\def\offsetbox{\dosingleempty\boxes_offset_box}
+\unexpanded\def\offset {\dosingleempty\boxes_offset}
+
+\def\boxes_offset_box[#1]{\bgroup\dowithnextbox{\boxes_offsetfinish{#1}}}
+\def\boxes_offset [#1]{\bgroup\dowithnextbox{\boxes_offsetfinish{#1}}\hbox}
+
+\def\boxes_offsetfinish#1%
+ {\getparameters[\??ox]
+ [\c!x=\zeropoint,
+ \c!y=\zeropoint,
+ \c!width=\nextboxwd,
+ \c!height=\nextboxht,
+ \c!depth=\nextboxdp,
+ \c!location=,
+ \c!leftoffset=\zeropoint,
+ \c!rightoffset=\zeropoint,
+ \c!topoffset=\zeropoint,
+ \c!bottomoffset=\zeropoint,
+ \c!method=,
+ #1]%
+ \donefalse
+ \ifdim\@@oxleftoffset =\zeropoint\else\donetrue\fi
+ \ifdim\@@oxrightoffset =\zeropoint\else\donetrue\fi
+ \ifdim\@@oxtopoffset =\zeropoint\else\donetrue\fi
+ \ifdim\@@oxbottomoffset=\zeropoint\else\donetrue\fi
+ \ifdone
+ \doif\@@oxmethod\v!fixed % new
+ {\ifdim\@@oxleftoffset=\zeropoint
+ \ifdim\@@oxrightoffset=\zeropoint \else
+ \edef\@@oxx{\the\dimexpr-\@@oxrightoffset}%
+ \let\@@oxrightoffset\zeropoint
+ \fi
+ \else
+ \let\@@oxx\@@oxleftoffset
+ \let\@@oxleftoffset\zeropoint
+ \fi
+ \ifdim\@@oxtopoffset=\zeropoint
+ \ifdim\@@oxbottomoffset=\zeropoint \else
+ \edef\@@oxy{\the\dimexpr-\@@oxbottomoffset}%
+ \let\@@oxbottomoffset\zeropoint
+ \fi
+ \else
+ \let\@@oxy\@@oxtopoffset
+ \let\@@oxtopoffset\zeropoint
+ \fi
+ \donefalse}%
+ \fi
+ \ifdone
+ \setbox\nextbox\vbox
+ {\forgetall % already done
+ \offinterlineskip
+ \vskip\@@oxtopoffset
+ \hbox
+ {\hskip\@@oxleftoffset
+ \box\nextbox
+ \hskip\@@oxrightoffset}%
+ \vskip\@@oxbottomoffset}%
+ \ht\nextbox\htdp\nextbox
+ \dp\nextbox\zeropoint
+ \fi
+ \freezedimenmacro\@@oxwidth
+ \freezedimenmacro\@@oxheight
+ \freezedimenmacro\@@oxdepth
+ \setbox\nextbox\hbox
+ {\hskip\@@oxx\lower\@@oxy\hbox
+ {\doifelsenothing\@@oxlocation
+ {\box\nextbox}
+ {\alignedbox[\@@oxlocation]\hbox{\box\nextbox}}}}%
+ \wd\nextbox\@@oxwidth
+ \ht\nextbox\@@oxheight
+ \dp\nextbox\@@oxdepth
+ \box\nextbox
+ \egroup}
% \useMPlibrary[pre] \setupbackgrounds[page][background=pagegrid]
%
@@ -856,73 +818,43 @@
% \input tufte
% \placefigure[left,none]{}{\offset[bottomoffset=1cm]{\externalfigure[koe][breedte=3cm]}}
% \input tufte
-
-\unexpanded\def\offset {\dodoubleempty\dooffsetbox [\hbox]} % yes or no
-\unexpanded\def\aligned{\dosingleempty\doalignedbox[\hbox]} % yes or no
%\ruledhbox{\offsetbox[x=-1cm,y=-1cm,location=c]
% {\framed[width=4cm,height=4cm]{x}}}
-
-\def\dotabbed#1#2#3#4%
+
+% Some old code:
+%
+% \ltabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf
+% \ltabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf
+% \ltabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf
+%
+% \rtabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf
+% \rtabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf
+% \rtabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf
+%
+% \ctabbed{\romannumerals{3}}{\romannumerals{1}} test \endgraf
+% \ctabbed{\romannumerals{3}}{\romannumerals{2}} test \endgraf
+% \ctabbed{\romannumerals{3}}{\romannumerals{3}} test \endgraf
+
+\def\boxes_tabbed#1#2#3#4%
{\dontleavehmode
- \bgroup
+ \begingroup
\setbox\scratchbox\hbox{#3}%
\hbox to \wd\scratchbox{#1#4#2}%
- \egroup}
+ \endgroup}
-\unexpanded\def\ltabbed{\dotabbed\relax\hss}
-\unexpanded\def\rtabbed{\dotabbed\hss \relax}
-\unexpanded\def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
+\unexpanded\def\ltabbed{\boxes_tabbed\relax\hss}
+\unexpanded\def\rtabbed{\boxes_tabbed\hss \relax}
+\unexpanded\def\ctabbed{\boxes_tabbed\hss \hss}
-% \ltabbed{\romeins{3}}{\romeins{1}} test \endgraf
-% \ltabbed{\romeins{3}}{\romeins{2}} test \endgraf
-% \ltabbed{\romeins{3}}{\romeins{3}} test \endgraf
-%
-% \rtabbed{\romeins{3}}{\romeins{1}} test \endgraf
-% \rtabbed{\romeins{3}}{\romeins{2}} test \endgraf
-% \rtabbed{\romeins{3}}{\romeins{3}} test \endgraf
-%
-% \ctabbed{\romeins{3}}{\romeins{1}} test \endgraf
-% \ctabbed{\romeins{3}}{\romeins{2}} test \endgraf
-% \ctabbed{\romeins{3}}{\romeins{3}} test \endgraf
+\let\mtabbed\ctabbed
-% alternative, if done, then other name
-%
-% \def\dotabbed#1#2#3#4%
-% {\dontleavehmode
-% \bgroup
-% \scratchdimen\zeropoint
-% \def\docommand##1%
-% {\setbox\scratchbox\hbox{##1}%
-% \ifdim\wd\scratchbox>\scratchdimen
-% \scratchdimen\wd\scratchbox
-% \fi}%
-% \processcommalist[#3]\docommand
-% \hbox to \scratchdimen{#1#4#2}%
-% \egroup}
-%
-% \def\ltabbed{\dotabbed\relax\hss}
-% \def\rtabbed{\dotabbed\hss \relax}
-% \def\ctabbed{\dotabbed\hss \hss} \let\mtabbed\ctabbed
-%
-% \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf
-% \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf
-% \ltabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf
-%
-% \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf
-% \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf
-% \rtabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf
-%
-% \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{10}} test \endgraf
-% \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{15}} test \endgraf
-% \ctabbed{\romeins{10},\romeins{2000},\romeins{15}}{\romeins{2000}} test \endgraf
-
% to be documented
-\unexpanded\def\phantombox[#1]%
+\unexpanded\def\phantombox[#1]% == \framed[\c!empty=\v!yes,\c!offset=\v!overlay,#1]{}
{\hbox\bgroup
\getparameters
- [\??ol]
+ [\??ol] % brrr
[\c!width=\zeropoint,%
\c!height=\zeropoint,%
\c!depth=\zeropoint,#1]%
@@ -932,39 +864,41 @@
\dp\scratchbox\@@oldepth
\box\scratchbox
\egroup}
-
+
% \backgroundimage{1}{\hsize}{\vsize}{\externalfigure[cow][\c!width=3cm]}
\unexpanded\def\backgroundimage#1#2#3% repeat hsize vsize
{\bgroup
\forgetall
- \dowithnextbox
- {\offinterlineskip
- \ifcase#1\relax
- % just one
- \else
- \scratchdimen#2\divide\scratchdimen\nextboxwd\count0\scratchdimen\advance\count0\plusone
- \scratchdimen#3\divide\scratchdimen\nextboxht\count2\scratchdimen\advance\count2\plusone
- % to be considered, probably methods
- \ifcase#1\or % x and y
- \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}%
- \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}%
- \or % x
- \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}%
- \or % y
- \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}%
- \fi
- \fi
- \ifdim\nextboxwd>#2\relax
- \setbox\nextbox\hbox to #2{\hss\flushnextbox\hss}%
- \setbox\nextbox\hbox{\expanded{\clip[\c!width=#2,\c!height=\the\nextboxht]{\flushnextbox}}}%
- \fi
- \ifdim\nextboxht>#3\relax
- \setbox\nextbox\vbox to #3{\vss\flushnextbox\vss}%
- \setbox\nextbox\hbox{\expanded{\clip[\c!width=\the\nextboxwd,\c!height=#3]{\flushnextbox}}}%
- \fi
- \flushnextbox
- \egroup}%
- \hbox}
-
+ \dowithnextbox{\boxes_background_image{#1}{#2}{#3}}\hbox}
+
+\def\boxes_background_image#1#2#3%
+ {\offinterlineskip
+ \ifcase#1\relax
+ % just one
+ \else
+ \scratchdimen#2\divide\scratchdimen\wd\nextbox\count0\scratchdimen\advance\count0\plusone
+ \scratchdimen#3\divide\scratchdimen\ht\nextbox\count2\scratchdimen\advance\count2\plusone
+ % to be considered: methods
+ \ifcase#1%
+ \or % x and y
+ \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}%
+ \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}%
+ \or % x
+ \setbox\nextbox\hbox{\dorecurse{\count0}{\copy\nextbox}}%
+ \or % y
+ \setbox\nextbox\vbox{\dorecurse{\count2}{\copy\nextbox\endgraf}}%
+ \fi
+ \fi
+ \ifdim\wd\nextbox>#2\relax
+ \setbox\nextbox\hbox to #2{\hss\box\nextbox\hss}%
+ \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=#2,\c!height=\the\ht\nextbox]{\box\nextbox}}}%
+ \fi
+ \ifdim\ht\nextbox>#3\relax
+ \setbox\nextbox\vbox to #3{\vss\box\nextbox\vss}%
+ \setbox\nextbox\hbox{\normalexpanded{\clip[\c!width=\the\wd\nextbox,\c!height=#3]{\box\nextbox}}}%
+ \fi
+ \box\nextbox
+ \egroup}
+
\protect \endinput
diff --git a/tex/context/base/pack-fen.mkiv b/tex/context/base/pack-fen.mkiv
index 722d8fed7..a5e692b68 100644
--- a/tex/context/base/pack-fen.mkiv
+++ b/tex/context/base/pack-fen.mkiv
@@ -28,20 +28,20 @@
\unprotect
\def\installleftframerenderer#1#2%
- {\setvalue{\??hf l\v!on#1}{\whateverleftframe{#2}}%
- \expandafter\let\csname\??hf l\v!off#1\expandafter\endcsname\csname\??hf l\v!on#1\endcsname}
+ {\setvalue{\??framedleft\v!on#1}{\whateverleftframe{#2}}%
+ \expandafter\let\csname\??framedleft\v!off#1\expandafter\endcsname\csname\??framedleft\v!on#1\endcsname}
\def\installrightframerenderer#1#2%
- {\setvalue{\??hf r\v!on#1}{\whateverrightframe{#2}}%
- \expandafter\let\csname\??hf r\v!off#1\expandafter\endcsname\csname\??hf r\v!on#1\endcsname}
+ {\setvalue{\??framedright\v!on#1}{\whateverrightframe{#2}}%
+ \expandafter\let\csname\??framedright\v!off#1\expandafter\endcsname\csname\??framedright\v!on#1\endcsname}
\def\installtopframerenderer#1#2%
- {\setvalue{\??hf t\v!on#1}{\whatevertopframe{#2}}%
- \expandafter\let\csname\??hf t\v!off#1\expandafter\endcsname\csname\??hf t\v!on#1\endcsname}
+ {\setvalue{\??framedtop\v!on#1}{\whatevertopframe{#2}}%
+ \expandafter\let\csname\??framedtop\v!off#1\expandafter\endcsname\csname\??framedtop\v!on#1\endcsname}
\def\installbottomframerenderer#1#2%
- {\setvalue{\??hf b\v!on#1}{\whateverbottomframe{#2}}%
- \expandafter\let\csname\??hf b\v!off#1\expandafter\endcsname\csname\??hf b\v!on#1\endcsname}
+ {\setvalue{\??framedbottom\v!on#1}{\whateverbottomframe{#2}}%
+ \expandafter\let\csname\??framedbottom\v!off#1\expandafter\endcsname\csname\??framedbottom\v!on#1\endcsname}
\ifdefined \framed_overlay_initialize_indeed
diff --git a/tex/context/base/pack-lyr.mkiv b/tex/context/base/pack-lyr.mkiv
index 2bba60df7..461edaefe 100644
--- a/tex/context/base/pack-lyr.mkiv
+++ b/tex/context/base/pack-lyr.mkiv
@@ -23,92 +23,165 @@
% displacement. Should be an option, on by default
% (compatibility).
-% positie=forceer == ja maar dan ook in status=herhaal
-
%D The layering mechanism implemented here is independent of
%D the output routine, but future extensions may depend on a
%D more close cooperation.
-%D First we overload a macro from \type {core-rul}. From now on
+%D First we overload a macro from \type {pack-rul}. From now on
%D we accept a (optional) argument: the specific layer it
%D will go in. This means that we can move an overlay from one
%D background to the other using the dimensions of the parent.
-\ifx\undefined\defineoverlay \message{loaded to early} \wait \fi
+\ifdefined\defineoverlay \else \message{loaded to early} \wait \fi
\unexpanded\def\defineoverlay
- {\dotripleempty\dodefineoverlay}
+ {\dotripleempty\framed_define_overlay}
-\def\dodefineoverlay[#1][#2][#3]% overlay [layer] content
+\def\framed_define_overlay[#1][#2][#3]% overlay [layer] content
{\ifthirdargument
%\writestatus{BEWARE}{This (overlay definition) has changed!}% temp
- \def\docommand##1{\setvalue{\??ov##1}{\setlayer[#2]{\executedefinedoverlay{##1}{#3}}}}
+ \def\framed_define_overlay_indeed##1{\setvalue{\??overlay##1}{\setlayer[#2]{\executedefinedoverlay{##1}{#3}}}}
\else
- \def\docommand##1{\setvalue{\??ov##1}{\executedefinedoverlay{##1}{#2}}}%
+ \def\framed_define_overlay_indeed##1{\setvalue{\??overlay##1}{\executedefinedoverlay{##1}{#2}}}%
\fi
- \processcommalist[#1]\docommand}
-
-%D When tracing is turned on, a couple of boxes will
-%D show up as well as the reference point.
-
-\newif\iftracelayers % \tracelayerstrue
+ \processcommalist[#1]\framed_define_overlay_indeed}
-%D This handy constant saved some string memory.
+%D We use the command handler code. The previous, more direct parameter
+%D handling was 25\% faster when no parameters were passed when adding
+%D content to a layer. However, when we pass for instance a preset, the
+%D new methos is some 10\% faster and it happens that in most cases we
+%D do pass some parameters. It would be interesting to see if we can push
+%D the preset in between the regular chain but it could also lead to
+%D unwanted side effects when nesting layer placement.
-\def\@@layerbox{@@layerbox}
+\installcorenamespace{layer}
+\installcorenamespace{layerbox}
+\installcorenamespace{layerpreset}
+\installcorenamespace{layerposition}
%D \macros
-%D {definelayer}
+%D {definelayer,setuplayer}
%D
%D Each layer gets its own (global) box. This also means that
%D the data that goes into a layer, is typeset immediately.
%D Each layer automatically gets an associated overlay,
%D which can be used in any background assignment.
+%D
+%D After a layer is defined, you can change its
+%D characteristics.
+
+\installcommandhandler \??layer {layer} \??layer
-% todo : links/rechts
-
-\unexpanded\def\definelayer
- {\dodoubleargument\dodefinelayer}
-
-\def\dodefinelayer[#1][#2]% \zeropoint ipv \!!zeropoint
- {\setuplayer
- [#1]
- [\c!doublesided=,\c!preset=,
- \c!state=\v!start,\c!direction=\v!normal,\c!option=,
- \c!x=\zeropoint,\c!y=\zeropoint,\c!position=\v!no,
- \c!line=0,\c!column=0,
- \c!width=\nextboxwd,\c!height=\nextboxht,
- \c!offset=\zeropoint,\c!rotation=, % geen 0 !
- \c!hoffset=\zeropoint,\c!voffset=\zeropoint,
- \c!dx=\zeropoint,\c!dy=\zeropoint,
- \c!location=rb,\c!position=\v!no,\c!page=,
- \c!method=\v!overlay,
- \c!sx=1,\c!sy=1,\c!corner=,#2]%
- \doifvalue{\??ll#1\c!doublesided}\v!yes
- {\dopresetlayerbox{\v!left #1}%
- \dopresetlayerbox{\v!right#1}}%
- \dopresetlayerbox{#1}%
- \defineoverlay[#1][\composedlayer{#1}]}
-
-\def\dopresetlayerbox#1%
- {\ifcsname\@@layerbox#1\endcsname
+\setuplayer
+ [\c!state=\v!start,
+ %\c!doublesided=,
+ %\c!preset=,
+ %\c!option=,
+ %\c!corner=,
+ %\c!page=,
+ %\c!rotation=, % geen 0 !
+ \c!direction=\v!normal,
+ \c!position=\v!no,
+ \c!method=\v!overlay,
+ \c!x=\zeropoint,
+ \c!y=\zeropoint,
+ \c!line=0,
+ \c!column=0,
+ \c!width=\wd\nextbox, % don't change this globally
+ \c!height=\ht\nextbox, % don't change this globally
+ \c!offset=\zeropoint,
+ \c!hoffset=\zeropoint,
+ \c!voffset=\zeropoint,
+ \c!dx=\zeropoint,
+ \c!dy=\zeropoint,
+ \c!location=rb,
+ \c!sx=1,
+ \c!sy=1]
+
+\let\p_layers_doublesided\empty
+\let\p_layers_state \empty
+\let\p_layers_option \empty
+\let\p_layers_method \empty
+\let\p_layers_preset \empty
+\let\p_layers_rotation \empty
+\let\p_layers_position \empty
+\let\p_layers_hoffset \empty
+\let\p_layers_voffset \empty
+\let\p_layers_offset \empty
+\let\p_layers_dx \empty
+\let\p_layers_dy \empty
+\let\p_layers_sx \empty
+\let\p_layers_sy \empty
+\let\p_layers_x \empty
+\let\p_layers_y \empty
+\let\p_layers_corner \empty
+\let\p_layers_location \empty
+\let\p_layers_line \empty
+\let\p_layers_column \empty
+\let\p_layers_width \empty
+\let\p_layers_height \empty
+\let\p_layers_direction \empty
+
+\let\m_layers_page \empty
+\let\m_layers_target \empty
+
+\newconditional\c_layers_repeated
+\newconditional\c_layers_trace
+\newcount \c_layers_current_data
+
+\newbox\b_layers
+
+\newdimen\d_layers_x_size
+\newdimen\d_layers_y_size
+\newdimen\d_layers_x_offset
+\newdimen\d_layers_y_offset
+\newdimen\d_layers_x_position
+\newdimen\d_layers_y_position
+
+\newdimen\layerwidth
+\newdimen\layerheight
+
+\let\lastlayerxpos\!!zeropoint
+\let\lastlayerypos\!!zeropoint
+\let\lastlayerwd \!!zeropoint
+\let\lastlayerht \!!zeropoint
+\let\lastlayerdp \!!zeropoint
+
+\appendtoks
+ \edef\p_layers_doublesided{\layerparameter\c!doublesided}%
+ \ifx\p_layers_doublesided\v!yes
+ \relateparameterhandlers{layer}{\v!left \currentlayer}{layer}\currentlayer % permits left*
+ \relateparameterhandlers{layer}{\v!right\currentlayer}{layer}\currentlayer % permits right*
+ \layers_preset_box{\v!left \currentlayer}%
+ \layers_preset_box{\v!right\currentlayer}%
+ \fi
+ \layers_preset_box\currentlayer
+ \normalexpanded{\defineoverlay[\currentlayer][\noexpand\composedlayer{\currentlayer}]}%
+\to \everydefinelayer
+
+\def\layers_preset_box#1%
+ {\ifcsname\??layerbox#1\endcsname
\resetlayer[#1]%
\else
- \expandafter\newbox\csname\@@layerbox#1\endcsname
+ \expandafter\newbox\csname\??layerbox#1\endcsname
\fi}
%D \macros
-%D {setuplayer}
+%D {resetlayer}
%D
-%D After a layer is defined, you can change its
-%D characteristics.
+%D This macro hardly needs an explanation (but is seldom
+%D needed anyway).
-\unexpanded\def\setuplayer
- {\dodoubleargument\dosetuplayer}
+\def\layers_reset_box#1%
+ {\ifcsname\??layerbox#1\endcsname
+ \global\setbox\csname\??layerbox#1\endcsname\emptybox
+ \fi}
-\def\dosetuplayer[#1][#2]%
- {\def\docommand##1{\getparameters[\??ll##1][#2]}%
- \processcommalist[#1]\docommand}
+\def\resetlayer[#1]%
+ {\layers_reset_box{#1}%
+ \layers_reset_box{\v!left #1}%
+ \layers_reset_box{\v!right#1}%
+ \layers_reset_box{#1:\realfolio}}
%D \macros
%D {setlayer}
@@ -122,178 +195,174 @@
%D \setlayer [identifier] [optional parameters] {data}
%D \stoptyping
-\newcount\currentlayerdata
-
-\let\currentlayerwidth \!!zeropoint
-\let\currentlayerheight\!!zeropoint
-
\def\setcurrentlayerdimensions
- {\dodoubleempty\dosetcurrentlayerdimensions}
+ {\dodoubleempty\layers_set_current_dimensions}
-\def\dosetcurrentlayerdimensions[#1][#2]% name left|right
+\def\layers_set_current_dimensions[#1][#2]% name left|right
{\edef\currentlayerwidth {\thelayerwidth {#2#1}}%
\edef\currentlayerheight{\thelayerheight{#2#1}}}
-\def\thelayerwidth #1{\the\wd\executeifdefined{\@@layerbox#1}\emptybox}
-\def\thelayerheight#1{\the\ht\executeifdefined{\@@layerbox#1}\emptybox}
+% \def\thelayerwidth #1{\the\wd\executeifdefined{\??layerbox#1}\emptybox}
+% \def\thelayerheight#1{\the\ht\executeifdefined{\??layerbox#1}\emptybox}
-\def\setlayer
- {\dotripleempty\dosetlayer}
+\def\thelayerwidth #1{\the\ifcsname\??layerbox#1\endcsname\wd\csname\??layerbox#1\endcsname\else\zeropoint\fi}
+\def\thelayerheight#1{\the\ifcsname\??layerbox#1\endcsname\ht\csname\??layerbox#1\endcsname\else\zeropoint\fi}
-\def\dosetlayer[#1][#2][#3]% #4 == box do \fi is ok
- {\doifelsevalue{\??ll#1\c!state}\v!stop
- {\dowithnextboxcs\donothing\hbox}
- {\ifthirdargument
- \dodosetlayer[#1][#2][#3]%
- \else
- \doifassignmentelse{#2}
- {\dodosetlayer[#1][][#2]}%
- {\dodosetlayer[#1][#2][]}%
- \fi}}
+\unexpanded\def\setlayer
+ {\dotripleempty\layers_set}
-\def\dodosetlayer[#1][#2][#3]% #2 = links/rechts
+\def\layers_set[#1][#2][#3]% #4 == box do \fi is ok
{\bgroup
- \recalculatebackgrounds % brrr
- \global\advance\currentlayerdata\plusone
+ \edef\currentlayer{#1}%
+ \edef\p_layers_state{\layerparameter{#1}\c!state}
+ \ifx\p_layers_state\v!stop
+ \dowithnextboxcs\egroup\hbox
+ \else\ifthirdargument
+ \layers_set_indeed[#1][#2][#3]%
+ \else
+ \doifassignmentelse{#2}
+ {\layers_set_indeed[#1][][#2]}%
+ {\layers_set_indeed[#1][#2][]}%
+ \fi\fi}
+
+\def\layers_set_indeed[#1][#2][#3]% #2 = links/rechts
+ {\page_backgrounds_recalculate % brrr
+ \global\advance\c_layers_current_data\plusone
\forgetall
\dontcomplain
- \doifvalue{\??ll#1\c!option}\v!test\tracelayerstrue
- \iftracelayers\traceboxplacementtrue\fi
- \dowithnextbox{\dodosetlayerindeed{#1}{#2}{#3}\egroup}\hbox}
-
-\def\dodosetlayerindeed#1#2#3% #2 = links/rechts
- {\ifcsname\@@layerbox#1\endcsname % nb: odd/even discard, left/right not
- \edef\@@layerloc{#2}%
- \ifx\@@layerloc\v!even
+ \edef\p_layers_option{\layerparameter\c!option}%
+ \ifx\p_layers_option\v!test
+ \traceboxplacementtrue
+ \fi
+ \edef\m_layers_target{#2}%
+ \dowithnextbox{\layers_set_finish{#3}}\hbox}
+
+\def\layers_set_finish#1%
+ {\ifcsname\??layerbox\currentlayer\endcsname % can move up
+ \ifx\m_layers_target\v!even
\ifodd\realpageno
- % discard nextbox
+ % discard nextbox
\else
- \dododosetlayer[#1][\v!left][#3]%
+ \let\m_layers_target\v!left
+ \layers_set_content{#1}%
\fi
- \else\ifx\@@layerloc\v!odd
+ \else\ifx\m_layers_target\v!odd
\ifodd\realpageno
- \dododosetlayer[#1][\v!right][#3]%
- %\else
- % discard nextbox
+ \let\m_layers_target\v!right
+ \layers_set_content{#1}%
+ \else
+ % discard nextbox
\fi
\else
- \dododosetlayer[#1][#2][#3]%
+ \layers_set_content{#1}%
\fi\fi
\else
- \writestatus{layer}{unknown layer #1}%
- \fi}
-
-\newbox\layerbox
-
-\newdimen\@@layerxsiz
-\newdimen\@@layerysiz
-\newdimen\@@layerxoff
-\newdimen\@@layeryoff
-\newdimen\@@layerxpos
-\newdimen\@@layerypos
-
-\let\lastlayerxpos\!!zeropoint
-\let\lastlayerypos\!!zeropoint
-\let\lastlayerwd \!!zeropoint
-\let\lastlayerht \!!zeropoint
-\let\lastlayerdp \!!zeropoint
+ \writestatus{layer}{unknown layer \currentlayer}%
+ \fi
+ \egroup}
% todo left/right
-\def\setlastlayerpos#1%
- {\edef\layerpage{\MPp{lyr:\the\currentlayerdata}}%
- \xdef\lastlayerxpos{\the\dimexpr-\MPx{lyr:#1:\layerpage}+\MPx{lyr:\the\currentlayerdata}\relax}%
- \xdef\lastlayerypos{\the\dimexpr \MPy{lyr:#1:\layerpage}-\MPy{lyr:\the\currentlayerdata}\relax}}
+\def\layers_set_last_position_yes
+ {\edef\m_layers_page{\MPp{\??layerposition\the\c_layers_current_data}}%
+ \xdef\lastlayerxpos{\the\dimexpr-\MPx{\??layerposition\m_layers_target\currentlayer:\m_layers_page}+\MPx{\??layerposition\the\c_layers_current_data}\relax}%
+ \xdef\lastlayerypos{\the\dimexpr \MPy{\??layerposition\m_layers_target\currentlayer:\m_layers_page}-\MPy{\??layerposition\the\c_layers_current_data}\relax}%}
+ \d_layers_x_position\lastlayerxpos
+ \d_layers_y_position\lastlayerypos
+ \begingroup
+ \edef\currentlayer{\currentlayer\m_layers_page}%
+ \global\letlayerparameter\c!position\v!yes
+ \endgroup
+ \global\letlayerparameter\c!state\v!start % needed ?
+ \setbox\b_layers\vbox to \d_layers_y_size{\hbox to \d_layers_x_size{\xypos{\??layerposition\the\c_layers_current_data}\hss}\vss}}
+
+\def\layers_set_last_position_nop
+ {\setbox\b_layers\emptybox
+ \globallet\lastlayerxpos\!!zeropoint
+ \globallet\lastlayerypos\!!zeropoint
+ \doifinset\v!bottom\p_layers_corner\layers_set_bottom_positions
+ \doifinset\v!right \p_layers_corner\layers_set_right_positions
+ \doifinset\v!middle\p_layers_corner\layers_set_middle_positions
+ \edef\m_layers_page{\layerparameter\c!page}}
\unexpanded\def\definelayerpreset
- {\dodoubleargument\dodefinelayerpreset}
-
-% \def\dodefinelayerpreset[#1][#2]%
-% {\setvalue{\??ll\??ll#1}{\dopresetlayer{#2}}}
-%
-% more fun: \definelayerpreset[whatever][lefttop]
+ {\dodoubleargument\layers_define_preset}
-\def\dodefinelayerpreset[#1][#2]%
+\def\layers_define_preset[#1][#2]%
{\doifassignmentelse{#2}
- {\setvalue{\??ll\??ll#1}{\dopresetlayer{#2}}}
- {\setvalue{\??ll\??ll#1}{\csname\??ll\??ll#2\endcsname}}}
-
-\def\dopresetlayer#1#2#3% #1=list #2=tag #3=list
- {\getparameters[\??ll#2][#1,#3]}
-
-\letempty\currentlayer
-
-\def\layerparameter#1{\csname\??ll\currentlayer#1\endcsname}
-
-\newdimen\layerwidth
-\newdimen\layerheight
-
-\def\dododosetlayer[#1][#2][#3]% will be sped up
- {% we use the global width, never change this
- \def\currentlayer{#1}%
- \@@layerxsiz\layerparameter\c!width
- \@@layerysiz\layerparameter\c!height
- \layerwidth \@@layerxsiz
- \layerheight\@@layerysiz
- % preroll
- \getparameters[\??ll\currentlayer][#3]%
+ {\setvalue{\??layerpreset#1}{\setupcurrentlayer[#2]}}
+ {\setvalue{\??layerpreset#1}{\csname\??layerpreset#2\endcsname}}}
+
+\def\layers_set_content#1%
+ {\layerwidth \layerparameter\c!width % global (local later)
+ \layerheight\layerparameter\c!height % global (local later)
+ \d_layers_x_size\layerwidth
+ \d_layers_y_size\layerheight
%
- % \executeifdefined{\??ll\??ll\layerparameter\c!preset}\gobbletwoarguments\currentlayer{#3}%
+ \setupcurrentlayer[#1]% preroll
%
- \edef\@@currentlayerpreset{\layerparameter\c!preset}%
- \ifcsname\??ll\??ll\@@currentlayerpreset\endcsname\csname\??ll\??ll\@@currentlayerpreset\endcsname\currentlayer{#3}\fi
+ \edef\p_layers_preset {\layerparameter\c!preset }%
+ %
+ \ifcsname\??layerpreset\p_layers_preset\endcsname
+ \csname\??layerpreset\p_layers_preset\endcsname
+ \setupcurrentlayer[#1]% postroll
+ \fi
%
- \doif{\layerparameter\c!position}\v!overlay % slow, use \dosetvalue instead
- {\getparameters[\??ll\currentlayer][\c!width=\zeropoint,\c!height=\zeropoint,\c!position=\v!yes]}%
- \doifsomething{\layerparameter\c!rotation}% todo: use direct lowlevel call
- {\setbox\nextbox\hbox{\rotate[\c!location=\v!high,\c!rotation=\layerparameter\c!rotation]{\flushnextbox}}}%
- % no, not local
- % \@@layerxsiz\layerparameter\c!width
- % \@@layerysiz\layerparameter\c!height
- % never change that
- \@@layerxpos\layerparameter\c!x
- \@@layerypos\layerparameter\c!y
- \doifelse{\layerparameter\c!hoffset}\v!max{\@@layerxoff\@@layerxsiz}{\@@layerxoff\layerparameter\c!hoffset}%
- \doifelse{\layerparameter\c!voffset}\v!max{\@@layeryoff\@@layerysiz}{\@@layeryoff\layerparameter\c!voffset}%
- % dx/dy are internal context ones and can be used in preset
- \advance\@@layerxoff\dimexpr\layerparameter\c!offset+\layerparameter\c!dx\relax
- \advance\@@layeryoff\dimexpr\layerparameter\c!offset+\layerparameter\c!dy\relax
- \@@layerxpos\layerparameter\c!sx\@@layerxpos
- \@@layerypos\layerparameter\c!sy\@@layerypos
- \@@layerxoff\layerparameter\c!sx\@@layerxoff
- \@@layeryoff\layerparameter\c!sy\@@layeryoff
- \edef\@@currentlayerposition{\layerparameter\c!position}%
- \ifx\@@currentlayerposition\v!yes % combine ^
- \setlastlayerpos{#2\currentlayer}% sets \layerpage; todo l/r %%%%%%%%%%%%
- \@@layerxpos\lastlayerxpos
- \@@layerypos\lastlayerypos
- \letgvalue{\??ll\currentlayer\layerpage\c!position}\v!yes
- \letgvalue{\??ll\currentlayer\c!state}\v!start % needed ?
- \setbox\layerbox\vbox to \@@layerysiz{\hbox to \@@layerxsiz{\xypos{lyr:\the\currentlayerdata}\hss}\vss}%
+ \edef\p_layers_rotation {\layerparameter\c!rotation }%
+ \edef\p_layers_position {\layerparameter\c!position }%
+ \edef\p_layers_hoffset {\layerparameter\c!hoffset }%
+ \edef\p_layers_voffset {\layerparameter\c!voffset }%
+ \edef\p_layers_offset {\layerparameter\c!offset }%
+ \edef\p_layers_dx {\layerparameter\c!dx }%
+ \edef\p_layers_dy {\layerparameter\c!dy }%
+ \edef\p_layers_sx {\layerparameter\c!sx }%
+ \edef\p_layers_sy {\layerparameter\c!sy }%
+ \edef\p_layers_x {\layerparameter\c!x }%
+ \edef\p_layers_y {\layerparameter\c!y }%
+ \edef\p_layers_corner {\layerparameter\c!corner }%
+ \edef\p_layers_location {\layerparameter\c!location }%
+ \edef\p_layers_line {\layerparameter\c!line }%
+ \edef\p_layers_column {\layerparameter\c!column }%
+ \edef\p_layers_width {\layerparameter\c!width }% local ones
+ \edef\p_layers_height {\layerparameter\c!height }% local ones
+ \edef\p_layers_direction{\layerparameter\c!direction}%
+ %
+ \ifx\p_layers_position\v!overlay
+ \let\p_layers_width \zeropoint
+ \let\p_layers_height \zeropoint
+ \let\p_layers_position\v!yes
+ \fi
+ \ifx\p_layers_rotation\empty \else
+ % use direct call
+ \setbox\nextbox\hbox{\rotate[\c!location=\v!high,\c!rotation=\layerparameter\c!rotation]{\box\nextbox}}%
+ \fi
+ \d_layers_x_offset\p_layers_sx\dimexpr
+ \ifx\p_layers_hoffset\v!max\d_layers_x_size\else\p_layers_hoffset\fi+\p_layers_offset+\p_layers_dx
+ \relax
+ \d_layers_y_offset\p_layers_sy\dimexpr
+ \ifx\p_layers_voffset\v!max\d_layers_y_size\else\p_layers_voffset\fi+\p_layers_offset+\p_layers_dy
+ \relax
+ \d_layers_x_position\p_layers_sx\dimexpr\p_layers_x\relax
+ \d_layers_y_position\p_layers_sy\dimexpr\p_layers_y\relax
+ \ifx\p_layers_position\v!yes
+ \layers_set_last_position_yes
\else
- \setbox\layerbox\emptybox
- \globallet\lastlayerxpos\!!zeropoint
- \globallet\lastlayerypos\!!zeropoint
- \normalexpanded{\doifinset{\v!bottom}{\layerparameter\c!corner}}\dosetlayerbottompositions
- \normalexpanded{\doifinset{\v!right }{\layerparameter\c!corner}}\dosetlayerrightpositions
- \normalexpanded{\doifinset{\v!middle}{\layerparameter\c!corner}}\dosetlayermiddlepositions
- \edef\layerpage{\layerparameter\c!page}%
+ \layers_set_last_position_nop
\fi
- \ifx\layerpage\empty \else % is expanded
- \edef\layerpage{:\layerpage}%
- \ifcsname\@@layerbox#2\currentlayer\layerpage\endcsname \else
- \expandafter\newbox\csname\@@layerbox#2\currentlayer\layerpage\endcsname
+ %
+ \ifx\m_layers_page\empty \else % is expanded
+ \edef\m_layers_page{:\m_layers_page}%
+ \ifcsname\??layerbox\m_layers_target\currentlayer\m_layers_page\endcsname \else
+ \expandafter\newbox\csname\??layerbox\m_layers_target\currentlayer\m_layers_page\endcsname
\fi
\fi
- \chardef\layerpagebox\csname\@@layerbox#2\currentlayer\layerpage\endcsname
+ \chardef\layerpagebox\csname\??layerbox\m_layers_target\currentlayer\m_layers_page\endcsname
\ifvoid\layerpagebox
\gsetboxllx\layerpagebox\zeropoint
\gsetboxlly\layerpagebox\zeropoint
\fi
\global\setbox\layerpagebox\vbox %to \layerparameter\c!height % new, otherwise no negative y possible
{\offinterlineskip
- %postpone, to after nextboxwd correction % \hsize\layerparameter\c!width % new, keep box small
- %\ifvoid\csname\@@layerbox\currentlayer\layerpage\endcsname\else % why not #2#1
\ifvoid\layerpagebox
\let\lastlayerwidth \zeropoint
\let\lastlayerheight\zeropoint
@@ -303,87 +372,89 @@
\ht\layerpagebox\zeropoint
\dp\layerpagebox\zeropoint
\wd\layerpagebox\zeropoint
- \doifnot{\layerparameter\c!direction}\v!reverse{\box\layerpagebox}%
+ \ifx\p_layers_direction\v!reverse\else
+ \box\layerpagebox
+ \fi
\fi
% don't move
- \xdef\lastlayerwd{\the\nextboxwd}%
- \xdef\lastlayerht{\the\nextboxht}% % not entirely ok when grid !
- \xdef\lastlayerdp{\the\nextboxdp}% % not entirely ok when grid !
+ \xdef\lastlayerwd{\the\wd\nextbox}%
+ \xdef\lastlayerht{\the\ht\nextbox}% % not entirely ok when grid !
+ \xdef\lastlayerdp{\the\dp\nextbox}% % not entirely ok when grid !
% this code
- \doifelse{\layerparameter\c!location}\v!grid\donetrue\donefalse
- \ifdone
- \nextboxht\strutheight
- \nextboxdp\strutdepth
+ \ifx\p_layers_location\v!grid
+ \ht\nextbox\strutheight
+ \dp\nextbox\strutdepth
\else
- \setbox\nextbox\hbox{\alignedbox[\layerparameter\c!location]\vbox{\flushnextbox}}%
+ \setbox\nextbox\hbox{\alignedbox[\p_layers_location]\vbox{\box\nextbox}}%
\fi
- \ifnum\layerparameter\c!line=\zerocount\else % no \ifcase, can be negative
- \advance\@@layerypos\dimexpr\layerparameter\c!line\lineheight+\topskip-\lineheight-\nextboxht\relax
+ \ifnum\p_layers_line=\zerocount\else % no \ifcase, can be negative
+ \advance\d_layers_y_position\dimexpr\p_layers_line\lineheight+\topskip-\lineheight-\ht\nextbox\relax
\fi
- \ifnum\layerparameter\c!column=\zerocount\else % no \ifcase, can be negative
- \advance\@@layerxpos\layoutcolumnoffset{\layerparameter\c!column}%
+ \ifnum\p_layers_column=\zerocount\else % no \ifcase, can be negative
+ \advance\d_layers_x_position\layoutcolumnoffset\p_layers_column\relax
\fi
- \ifdone
- \setbox\nextbox\hbox{\alignedbox[rb]\vbox{\flushnextbox}}%
+ \ifx\p_layers_location\v!grid
+ \setbox\nextbox\hbox{\alignedbox[rb]\vbox{\box\nextbox}}%
\fi
% ll registration
- \scratchdimen\@@layerxpos
- \advance\scratchdimen\@@layerxoff
+ \scratchdimen\dimexpr\d_layers_x_position+\d_layers_x_offset\relax
\ifdim\scratchdimen<\getboxllx\layerpagebox
\gsetboxllx\layerpagebox\scratchdimen
\fi
- \advance\scratchdimen\nextboxwd
- \nextboxwd\ifdim\scratchdimen>\lastlayerwidth \scratchdimen \else \lastlayerwidth \fi
- \scratchdimen\dimexpr\@@layerypos+\@@layeryoff\relax
+ \advance\scratchdimen\wd\nextbox
+ \wd\nextbox\ifdim\scratchdimen>\lastlayerwidth \scratchdimen \else \lastlayerwidth \fi
+ \scratchdimen\dimexpr\d_layers_y_position+\d_layers_y_offset\relax
\ifdim\scratchdimen<\getboxlly\layerpagebox
\gsetboxlly\layerpagebox\scratchdimen
\fi
% ll compensation
- \advance\scratchdimen\dimexpr\nextboxht+\nextboxdp\relax
- \nextboxht\ifdim\scratchdimen>\lastlayerheight \scratchdimen \else \lastlayerheight \fi
- \nextboxdp\zeropoint
+ \advance\scratchdimen\dimexpr\ht\nextbox+\dp\nextbox\relax
+ \ht\nextbox\ifdim\scratchdimen>\lastlayerheight \scratchdimen \else \lastlayerheight \fi
+ \dp\nextbox\zeropoint
% placement
- \hsize\layerparameter\c!width % new, keep box small
- \vbox to \layerparameter\c!height \bgroup
+ \hsize\p_layers_width
+ \vbox to \p_layers_height \bgroup
\smashbox\nextbox
- \vskip\dimexpr\@@layerypos+\@@layeryoff\relax
- \hskip\dimexpr\@@layerxpos+\@@layerxoff\relax
- \flushnextbox
+ \vskip\dimexpr\d_layers_y_position+\d_layers_y_offset\relax
+ \hskip\dimexpr\d_layers_x_position+\d_layers_x_offset\relax
+ \box\nextbox
\ifvoid\layerpagebox
% already flushed
\else
% the reverse case % check !
- \vskip-\dimexpr\@@layerypos+\@@layeryoff\relax
+ \vskip-\dimexpr\d_layers_y_position+\d_layers_y_offset\relax
\box\layerpagebox
\fi
\egroup}%
% when position is true, the layerbox holds the compensation and needs
% to be placed; never change this !
- \ifvoid\layerbox\else\box\layerbox\fi}
+ \ifvoid\b_layers \else
+ \box\b_layers
+ \fi}
-\def\dosetlayerbottompositions
- {\ifnum\layerparameter\c!line=\zerocount\else % can be < 0
- \setevalue{\??ll\currentlayer\c!line}{\the\numexpr-\layerparameter\c!line+\layoutlines+\plusone\relax}%
+\def\layers_set_bottom_positions
+ {\ifnum\p_layers_line=\zerocount\else % can be < 0
+ \edef\p_layers_line{\the\numexpr-\p_layers_line+\layoutlines+\plusone\relax}% use counter instead ?
\fi
- \ifdim\@@layerysiz>\zeropoint
- \advance\@@layerypos-\@@layerysiz
- \@@layerypos-\@@layerypos
- \@@layeryoff-\@@layeryoff
+ \ifdim\d_layers_y_size>\zeropoint
+ \advance\d_layers_y_position-\d_layers_y_size
+ \d_layers_y_position-\d_layers_y_position
+ \d_layers_y_offset-\d_layers_y_offset
\fi}
-\def\dosetlayerrightpositions
- {\ifnum\layerparameter\c!column=\zerocount\else % can be < 0
- \setevalue{\??ll\currentlayer\c!column}{\the\numexpr-\layerparameter\c!column+\layoutcolumns+\plusone\relax}%
+\def\layers_set_right_positions
+ {\ifnum\p_layers_column=\zerocount\else % can be < 0
+ \edef\p_layers_column{\the\numexpr-\layerparameter\c!column+\layoutcolumns+\plusone\relax}% use counter instead ?
\fi
- \ifdim\@@layerxsiz>\zeropoint
- \advance\@@layerxpos-\@@layerxsiz
- \@@layerxpos-\@@layerxpos
- \@@layerxoff-\@@layerxoff
+ \ifdim\d_layers_x_size>\zeropoint
+ \advance\d_layers_x_position-\d_layers_x_size
+ \d_layers_x_position-\d_layers_x_position
+ \d_layers_x_offset-\d_layers_x_offset
\fi}
-\def\dosetlayermiddlepositions
- {\ifdim\@@layerxsiz>\zeropoint \advance\@@layerxpos.5\@@layerxsiz \fi
- \ifdim\@@layerysiz>\zeropoint \advance\@@layerypos.5\@@layerysiz \fi}
+\def\layers_set_middle_positions
+ {\ifdim\d_layers_x_size>\zeropoint \advance\d_layers_x_position.5\d_layers_x_size \fi
+ \ifdim\d_layers_y_size>\zeropoint \advance\d_layers_y_position.5\d_layers_y_size \fi}
%D Given the task to be accomplished, the previous macro is
%D not even that complicated. It mainly comes down to skipping
@@ -395,14 +466,14 @@
%D {doifelselayerdata}
\def\doifelselayerdata#1%
- {\ifcsname\@@layerbox#1\endcsname
- \ifvoid\csname\@@layerbox#1\endcsname
- \@EAEAEA\secondoftwoarguments
+ {\ifcsname\??layerbox#1\endcsname
+ \ifvoid\csname\??layerbox#1\endcsname
+ \doubleexpandafter\secondoftwoarguments
\else
- \@EAEAEA\firstoftwoarguments
+ \doubleexpandafter\firstoftwoarguments
\fi
\else
- \@EA\secondoftwoarguments
+ \expandafter\secondoftwoarguments
\fi}
%D \macros
@@ -415,114 +486,121 @@
% todo: setups before flush, handy hook
-\unexpanded\def\flushlayer[#1]% quite core, so optimized
+\unexpanded\def\flushlayer[#1]% quite core, so optimized (todo: check for void)
{\begingroup
\forgetall
\edef\currentlayer{#1}%
- \edef\@@currentlayerstate{\csname\??ll\currentlayer\c!state\endcsname}%
- \ifx\@@currentlayerstate\v!stop
+ \edef\p_layers_state{\layerparameter\c!state}%
+ \ifx\p_layers_state\v!stop
% nothing
- \else\ifx\@@currentlayerstate\v!next
- \global\expandafter\let\csname\??ll\currentlayer\c!state\endcsname\v!start % dangerous, stack-built-up
- \else\ifx\@@currentlayerstate\v!continue
- \global\expandafter\let\csname\??ll\currentlayer\c!state\endcsname\v!repeat % dangerous, stack-built-up
+ \else\ifx\p_layers_state\v!next
+ \global\letlayerparameter\c!state\v!start % dangerous, stack-built-up
+ \else\ifx\p_layers_state\v!continue
+ \global\letlayerparameter\c!state\v!repeat % dangerous, stack-built-up
\else
- \edef\@@currentlayerdoublesided{\csname\??ll\currentlayer\c!doublesided\endcsname}%
- \ifx\@@currentlayerdoublesided\v!yes
- \ifcsname\@@layerbox#1\endcsname
+ \edef\p_layers_doublesided{\layerparameter\c!doublesided}%
+ \ifx\p_layers_doublesided\v!yes
+ \ifcsname\??layerbox#1\endcsname
% we can make a dedicated one for this
- \doifbothsidesoverruled{\dodoflushlayerB\v!left}{\dodoflushlayerB\v!right}{\dodoflushlayerB\v!left}%
+ \doifbothsidesoverruled
+ {\layers_flush_double\v!left }%
+ {\layers_flush_double\v!right}%
+ {\layers_flush_double\v!left }%
\else
- \dodoflushlayerA
+ \layers_flush_single
\fi
\else
- \dodoflushlayerA
+ \layers_flush_single
\fi
\fi\fi\fi
\endgroup}
% \ifcase#1\else\writestatus{layer}{unknown layer #3}\fi
-\def\dodoflushlayerA
+\def\layers_flush_single
{\startoverlay
- {\ifcsname\@@layerbox\currentlayer \endcsname\dodoflushlayer\plusone \currentlayer \fi}%
- {\ifcsname\@@layerbox\currentlayer:\realfolio\endcsname\dodoflushlayer\zerocount{\currentlayer:\realfolio}\fi}%
+ {\ifcsname\??layerbox \currentlayer \endcsname\layers_flush_indeed\plusone \currentlayer \fi}%
+ {\ifcsname\??layerbox \currentlayer:\realfolio\endcsname\layers_flush_indeed\zerocount{\currentlayer:\realfolio}\fi}%
\stopoverlay}
-\def\dodoflushlayerB#1%
+\def\layers_flush_double#1%
{\startoverlay
- {\ifcsname\@@layerbox \currentlayer \endcsname\dodoflushlayer\plusone \currentlayer \fi}%
- {\ifcsname\@@layerbox \currentlayer:\realfolio\endcsname\dodoflushlayer\zerocount {\currentlayer:\realfolio}\fi}%
- {\ifcsname\@@layerbox#1\currentlayer \endcsname\dodoflushlayer\plusone {#1\currentlayer }\fi}%
- {\ifcsname\@@layerbox#1\currentlayer:\realfolio\endcsname\dodoflushlayer\zerocount{#1\currentlayer:\realfolio}\fi}%
+ {\ifcsname\??layerbox \currentlayer \endcsname\layers_flush_indeed\plusone \currentlayer \fi}%
+ {\ifcsname\??layerbox \currentlayer:\realfolio\endcsname\layers_flush_indeed\zerocount {\currentlayer:\realfolio}\fi}%
+ {\ifcsname\??layerbox#1\currentlayer \endcsname\layers_flush_indeed\plusone {#1\currentlayer }\fi}%
+ {\ifcsname\??layerbox#1\currentlayer:\realfolio\endcsname\layers_flush_indeed\zerocount{#1\currentlayer:\realfolio}\fi}%
\stopoverlay}
-\def\dodoflushlayer#1#2% quite core, so optimized
+\def\layers_flush_indeed#1#2% quite core, so optimized
{\begingroup % already grouped
\offinterlineskip
- \edef\@@currentlayermethod{\csname\??ll\currentlayer\c!method\endcsname}%
- \edef\@@currentlayeroption{\csname\??ll\currentlayer\c!option\endcsname}%
- % needed because we need to handle method but we should find a way to
- % speed this up
- \edef\@@currentlayerpreset{\csname\??ll\currentlayer\c!preset\endcsname}%
- \ifcsname\??ll\??ll\@@currentlayerpreset\endcsname\csname\??ll\??ll\@@currentlayerpreset\endcsname\currentlayer{}\fi
- %
- \ifx\@@currentlayeroption\v!test
- \tracelayerstrue
+ \edef\p_layers_preset{\layerparameter\c!preset}%
+ \ifcsname\??layerpreset\p_layers_preset\endcsname
+ \csname\??layerpreset\p_layers_preset\endcsname
\fi
- \iftracelayers
+ \edef\p_layers_method{\layerparameter\c!method}%
+ \edef\p_layers_option{\layerparameter\c!option}%
+ \ifx\p_layers_option\v!test
\traceboxplacementtrue
\fi
- \!!doneafalse
- \!!donebfalse
- \ifx\@@currentlayermethod\v!overlay\!!doneatrue\fi
- \ifx\@@currentlayermethod\v!fit \!!donebtrue\fi
- \!!donectrue
- \ifcase#1\else
- \edef\@@currentlayerposition{\csname\??ll\currentlayer\c!position\endcsname}%
- \ifx\@@currentlayerposition\v!yes \else
- \edef\@@currentlayerrepeat{\csname\??ll\currentlayer\c!repeat\endcsname}%
- % \edef\@@currentlayerstate {\csname\??ll\currentlayer\c!state\endcsname}% actually this is already set
- \ifx\@@currentlayerrepeat\v!yes
- \!!donecfalse
- \else\ifx\@@currentlayerstate\v!repeat
- \!!donecfalse
+ \ifcase#1\relax
+ \setfalse\c_layers_repeated
+ \else
+ \edef\p_layers_position{\layerparameter\c!position}%
+ \ifx\p_layers_position\v!yes
+ \setfalse\c_layers_repeated
+ \else
+ \edef\p_layers_repeat{\layerparameter\c!repeat}%
+ \ifx\p_layers_repeat\v!yes
+ \settrue\c_layers_repeated
+ \else\ifx\p_layers_state\v!repeat
+ \settrue\c_layers_repeated
+ \else
+ \setfalse\c_layers_repeated
\fi\fi
\fi
\fi
- \chardef\layerbox\csname\@@layerbox#2\endcsname % \@@layerbox\currentlayer
+ \chardef\b_layers\csname\??layerbox#2\endcsname % trick
% we need to copy in order to retain the negative offsets for a next
% stage of additions, i.e. llx/lly accumulate in repeat mode and the
% compensation may differ each flush depending on added content
\setbox\nextbox
- \if!!doneb
- \therepositionededlayerbox
+ \ifx\p_layers_method\v!fit
+ \layers_positioned_box_yes
\else
- \if!!donec\box\else\copy\fi\layerbox % sorry for the delay due to copying
+ \layers_positioned_box_nop
\fi
% todo: method=offset => overlayoffset right/down (handy for backgrounds with offset)
- \doifoverlayelse{#2}{\setlayoutcomponentattribute{\v!layer:#2}}\resetlayoutcomponentattribute
- \iftracelayers \ruledvbox \else \vbox \fi \if!!donea to \overlayheight \fi \layoutcomponentboxattribute
- {\hbox \if!!donea to \overlaywidth \fi
- {\edef\@@currentlayerpageposition{\csname\??ll#2\realfolio\c!position\endcsname}%
- \ifx\@@currentlayerpageposition\v!yes\xypos{lyr:#2:\realfolio}\fi
+ \doifoverlayelse{#2}%
+ {\setlayoutcomponentattribute{\v!layer:#2}}%
+ \resetlayoutcomponentattribute
+ \ifx\p_layers_option\v!test \ruledvbox \else \vbox \fi \ifx\p_layers_method\v!overlay to \overlayheight \fi \layoutcomponentboxattribute
+ {\hbox \ifx\p_layers_method\v!overlay to \overlaywidth \fi
+ {\edef\currentlayer{#2\realfolio}% local
+ \edef\p_layers_position{\layerparameter\c!position}% local
+ \ifx\p_layers_position\v!yes
+ \xypos{\??layerposition#2:\realfolio}%
+ \fi
\box\nextbox
\hss}%
\vss}%
- \if!!donec
- \gsetboxllx\layerbox\zeropoint
- \gsetboxlly\layerbox\zeropoint
+ \ifconditional\c_layers_repeated\else
+ \gsetboxllx\b_layers\zeropoint
+ \gsetboxlly\b_layers\zeropoint
\fi
\endgroup}
-\def\therepositionededlayerbox % assumes that \if!!donec is set (todo: use dedicated flags)
+\def\layers_positioned_box_yes
{\vbox
- {\vskip-\getboxlly\layerbox
- \hskip-\getboxllx\layerbox
- \hsize-\dimexpr\getboxllx\layerbox-\wd\layerbox\relax
- \if!!donec\box\else\copy\fi\layerbox}}
+ {\vskip-\getboxlly\b_layers
+ \hskip-\getboxllx\b_layers
+ \hsize-\dimexpr\getboxllx\b_layers-\wd\b_layers\relax
+ \ifconditional\c_layers_repeated\copy\else\box\fi\b_layers}}
+
+\def\layers_positioned_box_nop
+ {\ifconditional\c_layers_repeated\copy\else\box\fi\b_layers}
-% \definelayer[test][method=fit] \setupcolors[state=start] \tracelayerstrue
+% \definelayer[test][method=fit] \setupcolors[state=start,option=test]
%
% \framed[framecolor=red,offset=overlay]{\setlayer[test]{aa}\setlayer[test][x=10pt]{g}\flushlayer[test]}
% \framed[framecolor=red,offset=overlay]{\setlayer[test]{aa}\setlayer[test][x=-10pt]{bb}\flushlayer[test]}
@@ -536,11 +614,9 @@
%D when we use it as parameter. This name also suits better
%D to other layering commands.
-\def\composedlayer#1{\flushlayer[#1]}
-
-\let\placelayer\flushlayer
+\unexpanded\def\composedlayer#1{\flushlayer[#1]}
-\def\tightlayer[#1]%
+\unexpanded\def\tightlayer[#1]%
{\hbox
{\def\currentlayer{#1}% todo: left/right
\setbox\nextbox\emptybox % hoogte/breedte are \wd\nextbox/\ht\nextbox
@@ -548,23 +624,7 @@
\vsize\layerparameter\c!height % \overlaywheight = \vsize
\composedlayer{#1}}}
-%D \macros
-%D {resetlayer}
-%D
-%D This macro hardly needs an explanation (and is seldom
-%D needed as well).
-
-\def\doresetlayer#1%
- {\ifcsname\@@layerbox#1\endcsname
- \global\setbox\csname\@@layerbox#1\endcsname\emptybox
- \fi}
-
-\def\resetlayer[#1]%
- {\doresetlayer{#1}%
- \doifvalue{\??ll#1\c!doublesided}\v!yes % kind of redundant test
- {\doresetlayer{\v!left #1}%
- \doresetlayer{\v!right#1}}%
- \doresetlayer{#1:\realfolio}}
+\let\placelayer\flushlayer
%D \macros
%D {setMPlayer}
@@ -597,31 +657,28 @@
%D {\useMPgraphic{oeps}}
%D \stoptyping
-\def\setMPlayer
- {\dotripleempty\dosetMPlayer}
+\unexpanded\def\setMPlayer
+ {\dotripleempty\layers_set_MP}
\def\MPlayerwidth {\hsize}
\def\MPlayerheight{\vsize}
-\def\dosetMPlayer[#1][#2][#3]%
+\def\layers_set_MP[#1][#2][#3]%
{\edef\MPlayerwidth {\MPw{#2}}%
\edef\MPlayerheight{\MPh{#2}}%
\setlayer[#1][\c!x=\MPx{#2},\c!y=\MPy{#2},\c!position=\v!no,#3]}
-\def\getMPlayer
- {\dodoubleempty\dogetMPlayer}
+\unexpanded\def\getMPlayer
+ {\dodoubleempty\layers_get_MP}
-\def\dogetMPlayer[#1][#2]%
- {\framed
- [\c!background={\v!foreground,#1},
- \c!frame=\v!off,
- \c!offset=\v!overlay,#2]}
+\def\layers_get_MP[#1][#2]%
+ {\framed[\c!background={\v!foreground,#1},\c!frame=\v!off,\c!offset=\v!overlay,#2]} % takes argument
%D Watch out, a redefinition:
-\ifx\settextpagecontent\undefined \writestatus\m!system{error in page-lyr.tex} \wait \fi
-
-\let\normalsettextpagecontent\settextpagecontent
+\ifdefined\settextpagecontent \else
+ \writestatus\m!system{error in page-lyr.tex} \wait
+\fi
\definelayer
[OTRTEXT]
@@ -631,9 +688,9 @@
[\c!width=\innermakeupwidth,
\c!height=\textheight]
-% will be overloaded in page-spr
+\let\normalsettextpagecontent\settextpagecontent % will be overloaded in page-spr
-\def\settextpagecontent#1#2#3% #2 and #3 will disappear
+\unexpanded\def\settextpagecontent#1#2#3% #2 and #3 will disappear
{\doifelselayerdata{OTRTEXT}
{\setbox#1\hbox to \makeupwidth
{\startoverlay
diff --git a/tex/context/base/pack-mis.mkvi b/tex/context/base/pack-mis.mkvi
index c24c13808..af6a32070 100644
--- a/tex/context/base/pack-mis.mkvi
+++ b/tex/context/base/pack-mis.mkvi
@@ -22,7 +22,9 @@
% \placement [name][settings]
% \place<name> [settings]
-\installcommandhandler \??pl {placement} \??pl
+\installcorenamespace{placement}
+
+\installcommandhandler \??placement {placement} \??placement
\appendtoks
\setuevalue{\e!place\currentplacement}{\pack_placement{\currentplacement}}%
diff --git a/tex/context/base/pack-pos.mkiv b/tex/context/base/pack-pos.mkiv
index 3f71dfa8d..e0dc5508c 100644
--- a/tex/context/base/pack-pos.mkiv
+++ b/tex/context/base/pack-pos.mkiv
@@ -15,7 +15,7 @@
\unprotect
-% An old but still usefull mechanism (updated in mkiv):
+% An old but still usefull mechanism:
%
% \ruledvbox{\startpositioning
% \position(1,1){test}
diff --git a/tex/context/base/pack-rul.mkiv b/tex/context/base/pack-rul.mkiv
index e7620b43e..68dd4b28f 100644
--- a/tex/context/base/pack-rul.mkiv
+++ b/tex/context/base/pack-rul.mkiv
@@ -59,6 +59,12 @@
%D The parameter handler:
+\installcorenamespace{framed}
+\installcorenamespace{framedtop}
+\installcorenamespace{framedbottom}
+\installcorenamespace{framedleft}
+\installcorenamespace{framedright}
+
\let\currentframed\s!unknown % brrr must have a value
% \def\framedparameter #1{\csname\doframedparameter\currentframed{#1}\endcsname}
@@ -172,7 +178,10 @@
%\c!orientation=,
\c!autowidth=\v!yes,
%\c!setups=
-]
+ \c!loffset=\zeropoint,
+ \c!roffset=\zeropoint,
+ \c!toffset=\zeropoint,
+ \c!boffset=\zeropoint]
% for backgrounds
@@ -193,7 +202,11 @@
\c!framecorner=\framedparameter\c!corner,
\c!frameradius=\framedparameter\c!radius,
\c!framedepth=\framedparameter\c!depth,
- \c!location=\v!normal]
+ \c!location=\v!normal,
+ \c!loffset=\zeropoint,
+ \c!roffset=\zeropoint,
+ \c!toffset=\zeropoint,
+ \c!boffset=\zeropoint]
%D We will communicate through module specific variables, current
%D framed parameters and some reserved dimension registers.
@@ -357,14 +370,14 @@
%D It won't be a surprise that we not only provide gray boxes,
%D but also colored ones. Here it is:
-\def\framed_background_box_color % can be more of \color[] -> \faststartcolor in mkiv
+\def\framed_background_box_color
{\edef\p_framed_backgroundcolor{\framedparameter\c!backgroundcolor}%
\ifx\p_framed_backgroundcolor\empty \else
\doifcolor\p_framed_backgroundcolor\framed_background_box_color_indeed
\fi}
\def\framed_background_box_color_indeed
- {\hbox{\doactivatecolor\p_framed_backgroundcolor\framed_filled_box}}
+ {\hbox{\dousecolorparameter\p_framed_backgroundcolor\framed_filled_box}}
%D \macros
%D {defineoverlay, doifoverlayelse, overlayoffset,
@@ -440,6 +453,9 @@
%D can contain text and be executed under an regime where
%D interlineskip is off).
+\installcorenamespace{overlay}
+\installcorenamespace{overlaybuiltin}
+
\appendtoks
\oninterlineskip
\to \everyoverlay
@@ -453,7 +469,7 @@
{\dodoubleargument\framed_define_overlay}
\def\framed_define_overlay[#1][#2]%
- {\def\framed_define_overlay_indeed##1{\setvalue{\??ov##1}{\executedefinedoverlay{##1}{#2}}}%
+ {\def\framed_define_overlay_indeed##1{\setvalue{\??overlay##1}{\executedefinedoverlay{##1}{#2}}}%
\processcommalist[#1]\framed_define_overlay_indeed}
\unexpanded\def\executedefinedoverlay#1#2% we can share the definitions
@@ -490,7 +506,7 @@
%D For testing we provide:
\def\doifoverlayelse#1% only tests external overlays
- {\ifcsname\??ov#1\endcsname
+ {\ifcsname\??overlay#1\endcsname
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
@@ -507,9 +523,9 @@
\let\currentbackground\empty
\def\framed_process_background
- {\ifcsname\??ov:\currentbackground\endcsname
+ {\ifcsname\??overlaybuiltin\currentbackground\endcsname
\framed_process_background_indeed_internal
- \else\ifcsname\??ov\currentbackground\endcsname
+ \else\ifcsname\??overlay\currentbackground\endcsname
\framed_process_background_indeed_external
\fi\fi}
@@ -517,10 +533,10 @@
{\bgroup
\setbox\b_framed_extra\hbox{%\bgroup
\ifzeropt\framedbackgroundoffset
- \csname\??ov:\currentbackground\endcsname
+ \csname\??overlaybuiltin\currentbackground\endcsname
\else
\kern-\framedbackgroundoffset
- \hbox{\csname\??ov:\currentbackground\endcsname}%
+ \hbox{\csname\??overlaybuiltin\currentbackground\endcsname}%
\fi
}%\egroup
\wd\b_framed_extra\zeropoint
@@ -534,10 +550,10 @@
\bgroup
\setbox\b_framed_extra\hbox{%\bgroup
\ifzeropt\framedbackgroundoffset
- \csname\??ov\currentbackground\endcsname
+ \csname\??overlay\currentbackground\endcsname
\else
\kern-\framedbackgroundoffset
- \hbox{\csname\??ov\currentbackground\endcsname}%
+ \hbox{\csname\??overlay\currentbackground\endcsname}%
\fi
}%\egroup
\wd\b_framed_extra\zeropoint
@@ -607,9 +623,9 @@
%D
%D We predefine two already familiar backgrounds:
-\letvalue{\??ov:\v!screen }\framed_background_box_gray
-\letvalue{\??ov:\v!color }\framed_background_box_color
-\letvalue{\??ov:\v!foreground}\framed_background_box_content % replaces: \defineoverlay[\v!foreground][\foregroundbox]
+\letvalue{\??overlaybuiltin\v!screen }\framed_background_box_gray
+\letvalue{\??overlaybuiltin\v!color }\framed_background_box_color
+\letvalue{\??overlaybuiltin\v!foreground}\framed_background_box_content % replaces: \defineoverlay[\v!foreground][\foregroundbox]
%D We can specify overlays as a comma separated list of
%D overlays, a sometimes handy feature.
@@ -636,7 +652,7 @@
\setbox\b_framed_extra\hbox
{\kern-\d_framed_frameoffset
\raise\scratchdimen
- \hbox{\ifx\overlaylinecolor\empty\else\doactivatecolor\overlaylinecolor\fi\framed_stroked_box}}%
+ \hbox{\ifx\overlaylinecolor\empty\else\dousecolorparameter\overlaylinecolor\fi\framed_stroked_box}}%
\wd\b_framed_extra\wd\b_framed_normal
\ht\b_framed_extra\ht\b_framed_normal
\dp\b_framed_extra\dp\b_framed_normal
@@ -650,15 +666,15 @@
\ht\scratchbox\d_framed_target_ht
\dp\scratchbox\d_framed_target_dp
\setbox\scratchbox\vbox \bgroup
- \csname \??hf t\p_framed_frame\framedparameter\c!topframe \endcsname
+ \csname \??framedtop\p_framed_frame\framedparameter\c!topframe \endcsname
\nointerlineskip % new (needed for fences)
\hbox \bgroup
- \csname \??hf l\p_framed_frame\framedparameter\c!leftframe \endcsname
+ \csname \??framedleft\p_framed_frame\framedparameter\c!leftframe \endcsname
\box\scratchbox
- \csname \??hf r\p_framed_frame\framedparameter\c!rightframe \endcsname
+ \csname \??framedright\p_framed_frame\framedparameter\c!rightframe \endcsname
\egroup
\nointerlineskip % new (needed for fences)
- \csname \??hf b\p_framed_frame\framedparameter\c!bottomframe\endcsname
+ \csname \??framedbottom\p_framed_frame\framedparameter\c!bottomframe\endcsname
\egroup
\wd\scratchbox\d_framed_target_wd
\ht\scratchbox\d_framed_target_ht
@@ -670,21 +686,21 @@
\def\framed_r_rule{\kern-\d_framed_linewidth\vrule\!!width\d_framed_linewidth}
\def\framed_l_rule{\vrule\!!width\d_framed_linewidth\kern-\d_framed_linewidth}
-\letvalue{\??hf t\v!on \v!on}\framed_t_rule
-\letvalue{\??hf t\v!off\v!on}\framed_t_rule
-\letvalue{\??hf t\v!on }\framed_t_rule
+\letvalue{\??framedtop \v!on \v!on}\framed_t_rule
+\letvalue{\??framedtop \v!off\v!on}\framed_t_rule
+\letvalue{\??framedtop \v!on }\framed_t_rule
-\letvalue{\??hf b\v!on \v!on}\framed_b_rule
-\letvalue{\??hf b\v!off\v!on}\framed_b_rule
-\letvalue{\??hf b\v!on }\framed_b_rule
+\letvalue{\??framedbottom\v!on \v!on}\framed_b_rule
+\letvalue{\??framedbottom\v!off\v!on}\framed_b_rule
+\letvalue{\??framedbottom\v!on }\framed_b_rule
-\letvalue{\??hf l\v!on \v!on}\framed_l_rule
-\letvalue{\??hf l\v!off\v!on}\framed_l_rule
-\letvalue{\??hf l\v!on }\framed_l_rule
+\letvalue{\??framedleft \v!on \v!on}\framed_l_rule
+\letvalue{\??framedleft \v!off\v!on}\framed_l_rule
+\letvalue{\??framedleft \v!on }\framed_l_rule
-\letvalue{\??hf r\v!on \v!on}\framed_r_rule
-\letvalue{\??hf r\v!off\v!on}\framed_r_rule
-\letvalue{\??hf r\v!on }\framed_r_rule
+\letvalue{\??framedright \v!on \v!on}\framed_r_rule
+\letvalue{\??framedright \v!off\v!on}\framed_r_rule
+\letvalue{\??framedright \v!on }\framed_r_rule
% no overlapping rules
@@ -693,21 +709,21 @@
\def\framed_r_rules{\kern-\d_framed_linewidth\vrule\!!height\dimexpr\d_framed_target_ht-\d_framed_linewidth\relax\!!depth-\d_framed_linewidth\!!width\d_framed_linewidth}
\def\framed_l_rules{\vrule\!!height\dimexpr\d_framed_target_ht-\d_framed_linewidth\relax\!!depth-\d_framed_linewidth\!!width\d_framed_linewidth\kern-\d_framed_linewidth}
-\letvalue{\??hf t\v!small\v!small}\frame_t_rules
-\letvalue{\??hf t\v!off \v!small}\frame_t_rules
-\letvalue{\??hf t\v!small }\frame_t_rules
+\letvalue{\??framedtop \v!small\v!small}\frame_t_rules
+\letvalue{\??framedtop \v!off \v!small}\frame_t_rules
+\letvalue{\??framedtop \v!small }\frame_t_rules
-\letvalue{\??hf b\v!small\v!small}\frame_b_rules
-\letvalue{\??hf b\v!off \v!small}\frame_b_rules
-\letvalue{\??hf b\v!small }\frame_b_rules
+\letvalue{\??framedbottom\v!small\v!small}\frame_b_rules
+\letvalue{\??framedbottom\v!off \v!small}\frame_b_rules
+\letvalue{\??framedbottom\v!small }\frame_b_rules
-\letvalue{\??hf l\v!small\v!small}\frame_l_rules
-\letvalue{\??hf l\v!off \v!small}\frame_l_rules
-\letvalue{\??hf l\v!small }\frame_l_rules
+\letvalue{\??framedleft \v!small\v!small}\frame_l_rules
+\letvalue{\??framedleft \v!off \v!small}\frame_l_rules
+\letvalue{\??framedleft \v!small }\frame_l_rules
-\letvalue{\??hf r\v!small\v!small}\frame_r_rules
-\letvalue{\??hf r\v!off \v!small}\frame_r_rules
-\letvalue{\??hf r\v!small }\frame_r_rules
+\letvalue{\??framedright \v!small\v!small}\frame_r_rules
+\letvalue{\??framedright \v!off \v!small}\frame_r_rules
+\letvalue{\??framedright \v!small }\frame_r_rules
% \framed
% [width=4cm,height=3cm,rulethickness=3mm,
@@ -1669,11 +1685,10 @@
\def\framed_check_extra_offsets
{\setfalse\c_framed_has_extra_offset
- \d_framed_loffset\framedparameter\c!loffset
- \d_framed_roffset\framedparameter\c!roffset
- \d_framed_toffset\framedparameter\c!toffset
- \d_framed_boffset\framedparameter\c!boffset
- \relax
+ \d_framed_loffset\framedparameter\c!loffset\relax
+ \d_framed_roffset\framedparameter\c!roffset\relax
+ \d_framed_toffset\framedparameter\c!toffset\relax
+ \d_framed_boffset\framedparameter\c!boffset\relax
\ifzeropt\d_framed_loffset\else \advance\d_framed_width -\d_framed_loffset \settrue\c_framed_has_extra_offset \fi
\ifzeropt\d_framed_roffset\else \advance\d_framed_width -\d_framed_roffset \settrue\c_framed_has_extra_offset \fi
\ifzeropt\d_framed_toffset\else \advance\d_framed_height-\d_framed_toffset \settrue\c_framed_has_extra_offset \fi
@@ -2294,7 +2309,10 @@
%D
%D The next definition shows the defaults.
-\installframedcommandhandler \??kd {framedtext} \??kd
+\installcorenamespace{framedtext}
+\installcorenamespace{framedtextlocation}
+
+\installframedcommandhandler \??framedtext {framedtext} \??framedtext
\let\setupframedtexts\setupframedtext
@@ -2337,18 +2355,18 @@
\setuevalue {\currentframedtext}{\framed_text_direct{\currentframedtext}}%
\to \everydefineframedtext
-\setvalue{\??kd:l:\v!left }{\letframedtextparameter\c!left \relax
- \letframedtextparameter\c!right\hfill}
+\setvalue{\??framedtextlocation\v!left }{\letframedtextparameter\c!left \relax
+ \letframedtextparameter\c!right\hfill}
-\setvalue{\??kd:l:\v!right }{\letframedtextparameter\c!left \hfill
- \letframedtextparameter\c!right\relax}
+\setvalue{\??framedtextlocation\v!right }{\letframedtextparameter\c!left \hfill
+ \letframedtextparameter\c!right\relax}
-\setvalue{\??kd:l:\v!middle}{\letframedtextparameter\c!left \hfill
- \letframedtextparameter\c!right\hfill}
+\setvalue{\??framedtextlocation\v!middle}{\letframedtextparameter\c!left \hfill
+ \letframedtextparameter\c!right\hfill}
-\setvalue{\??kd:l:\v!none }{\letframedtextparameter\c!left \relax
- \letframedtextparameter\c!right\relax
- \settrue\c_framed_text_location_none}
+\setvalue{\??framedtextlocation\v!none }{\letframedtextparameter\c!left \relax
+ \letframedtextparameter\c!right\relax
+ \settrue\c_framed_text_location_none}
\unexpanded\def\framed_text_start#1%
{\bgroup
@@ -2364,7 +2382,7 @@
{\setupframedtexts[\currentframedtext][#2]%
\doifsomething{#1}{\setframedtextparameter\c!location{#1}}% does not listen to #3
\setfalse\c_framed_text_location_none
- \csname\??kd:l:\framedtextparameter\c!location\endcsname
+ \csname\??framedtextlocation\framedtextparameter\c!location\endcsname
\resetframedtextparameter\c!location
% removed 06/2001
% \forgetparindent
@@ -2390,7 +2408,7 @@
%D in the presentation styles, where we don't want
%D interference.
-\defineplacement[\??kd][\s!parent=\??kd\currentframedtext]
+\defineplacement[\??framedtext][\s!parent=\??framedtext\currentframedtext]
\unexpanded\def\framed_text_stop % no \baselinecorrection, see faq docs
{\endgraf
@@ -2406,7 +2424,7 @@
\box\b_framed_normal
\else
\egroup
- \placement[\??kd][\c!depthcorrection=\v!off]{\box\b_framed_normal}%
+ \placement[\??framedtext][\c!depthcorrection=\v!off]{\box\b_framed_normal}%
\fi\fi
\egroup}
@@ -2723,10 +2741,10 @@
\c!autowidth=\v!yes,
%\c!setups=,
\c!strut=\v!yes,
- \c!loffset=\zeropoint,
- \c!roffset=\zeropoint,
- \c!toffset=\zeropoint,
- \c!boffset=\zeropoint]
+ %\c!loffset=\zeropoint,
+ %\c!roffset=\zeropoint,
+ %\c!toffset=\zeropoint,
+ ]%\c!boffset=\zeropoint]
\setupscreens
[\c!screen=0.95]
diff --git a/tex/context/base/page-app.mkiv b/tex/context/base/page-app.mkiv
index c1f3859e1..07195996f 100644
--- a/tex/context/base/page-app.mkiv
+++ b/tex/context/base/page-app.mkiv
@@ -17,7 +17,9 @@
\unprotect
-\installframedcommandhandler \??fp {fittingpage} \??fp
+\installcorenamespace{fittingpage}
+
+\installframedcommandhandler \??fittingpage {fittingpage} \??fittingpage
\newdimen\fitting_page_width
\newdimen\fitting_page_height
diff --git a/tex/context/base/page-bck.mkiv b/tex/context/base/page-bck.mkiv
index 08bf8958b..42891e76e 100644
--- a/tex/context/base/page-bck.mkiv
+++ b/tex/context/base/page-bck.mkiv
@@ -219,7 +219,7 @@
%D regression. Calculation is delayed till the page anyway so the
%D state is known.
-\def\recalculatebackgrounds % will be renamed
+\def\page_backgrounds_recalculate
{\global\settrue\c_page_backgrounds_new}
\def\page_backgrounds_set_boxes
@@ -661,7 +661,7 @@
\def\enablehiddenbackground
{\global\settrue\c_page_backgrounds_hidden_enabled
\global\settrue\c_page_backgrounds_some
- \recalculatebackgrounds}
+ \page_backgrounds_recalculate}
\def\disablehiddenbackground
{\global\setfalse\c_page_backgrounds_hidden_enabled}
diff --git a/tex/context/base/page-com.mkiv b/tex/context/base/page-com.mkiv
index fb7f34a4b..80012dd14 100644
--- a/tex/context/base/page-com.mkiv
+++ b/tex/context/base/page-com.mkiv
@@ -103,7 +103,7 @@
\setvalue{\e!start\v!pagecomment}%
{\global\pagecommenttrue
- \dostartbuffer[\v!pagecomment][\e!start\v!pagecomment][\e!stop\v!pagecomment]}
+ \grabbufferdatadirect\v!pagecomment{\e!start\v!pagecomment}{\e!stop\v!pagecomment}}
\setuppagecomment
[\c!state=, % \v!stop would invoke background calculation
diff --git a/tex/context/base/page-imp.mkiv b/tex/context/base/page-imp.mkiv
index d18f78140..1804f9f95 100644
--- a/tex/context/base/page-imp.mkiv
+++ b/tex/context/base/page-imp.mkiv
@@ -51,6 +51,10 @@
% \def\pagestoshipout{1,3,5}
% \stoptypen
+\installcorenamespace{layouthandler}
+\installcorenamespace{layoutarranger}
+\installcorenamespace{layoutarrangeoption}
+
\newcount \shippedoutpages
\newcount \combinedpagescounter
@@ -61,14 +65,14 @@
\setnewconstant\shipoutfinalizemethod\plusone % this will be default (we will have two finalizers)
-\def\installpagehandler#1#2% % a handler takes one argument: something to be boxed
- {\setgvalue{\??pp:h:#1}##1{#2{##1}}} % and shipped out (don't depend on the exact package)
+\def\installpagehandler#1#2% % a handler takes one argument: something to be boxed
+ {\setgvalue{\??layouthandler#1}##1{#2{##1}}} % and shipped out (don't depend on the exact package)
\unexpanded\def\invokepagehandler#1%
- {\expandcheckedcsname{\??pp:h:}{#1}\v!normal}
+ {\expandcheckedcsname{\??layouthandler}{#1}\v!normal}
\def\page_shipouts_handle
- {\csname\??pp:h:\ifcsname\??pp:h:\v_page_target_method\endcsname
+ {\csname\??layouthandler\ifcsname\??layouthandler\v_page_target_method\endcsname
\v_page_target_method
\else
\v!none
@@ -198,17 +202,17 @@
\newcount\arrangedpageX \arrangedpageX\plusone
\newcount\arrangedpageY \arrangedpageY\plusone
-\def\pages_paper_set_offsets
+\def\page_paper_set_offsets
{\global\paperoffset\v_page_target_offset
\global\advance\paperwidth -2\dimexpr\paperoffset/\arrangedpageX\relax
\global\advance\paperheight-2\dimexpr\paperoffset/\arrangedpageY\relax}
\def\doinstallarrangedoption#1#2%
- {\setvalue{\??pp:o:#1}{#2}}
+ {\setvalue{\??layoutarrangeoption#1}{#2}}
\def\doinstalledarrangedoption#1%
- {\ifcsname\??pp:o:#1\endcsname
- \csname\??pp:o:#1\endcsname
+ {\ifcsname\??layoutarrangeoption#1\endcsname
+ \csname\??layoutarrangeoption#1\endcsname
\else
\checkinstalledpagearrangement{#1}% this installs the arranger
\fi}
@@ -275,10 +279,10 @@
\fi}
\def\installpagearrangement #1 % will lchange, no space
- {\setgvalue{\??pp:a:#1}}
+ {\setgvalue{\??layoutarranger#1}}
\def\checkinstalledpagearrangement#1% can be empty: aaa,,bbb
- {\executeifdefined{\??pp:a:#1}\donothing}
+ {\executeifdefined{\??layoutarranger#1}\donothing}
\let\poparrangedpages\relax
\let\pusharrangedpage\relax
diff --git a/tex/context/base/page-inf.mkiv b/tex/context/base/page-inf.mkiv
index 41e3520c8..4c01e3076 100644
--- a/tex/context/base/page-inf.mkiv
+++ b/tex/context/base/page-inf.mkiv
@@ -17,6 +17,8 @@
\unprotect
+\installcorenamespace{layoutinfo}
+
\newtoks\everyresetversion
\newtoks\everysetupversion
@@ -31,7 +33,7 @@
\def\page_info_setup[#1]%
{\the\everyresetversion
- \ifcsname\??ly:v:#1\endcsname
+ \ifcsname\??layoutinfo#1\endcsname
\edef\currentversioninfo{#1}%
\let\page_info_add_to_box\page_info_add_to_box_indeed
\else
@@ -41,13 +43,13 @@
\the\everysetupversion}
\unexpanded\def\place_info_place_info % at the bottom of the page
- {\csname\??ly:v:\currentversioninfo\endcsname}
+ {\csname\??layoutinfo\currentversioninfo\endcsname}
\unexpanded\def\installversioninfo#1#2%
- {\setvalue{\??ly:v:#1}{#2}}
+ {\setvalue{\??layoutinfo#1}{#2}}
\unexpanded\def\includeversioninfo#1%
- {\csname\??ly:v:#1\endcsname}
+ {\csname\??layoutinfo#1\endcsname}
\installversioninfo\v!concept
{\vskip\!!sixpoint
diff --git a/tex/context/base/page-ini.mkiv b/tex/context/base/page-ini.mkiv
index 253c8419b..623ee908e 100644
--- a/tex/context/base/page-ini.mkiv
+++ b/tex/context/base/page-ini.mkiv
@@ -374,15 +374,15 @@
\newconditional\page_marks_building_successive_pages \settrue\page_marks_building_successive_pages
\def\page_marks_synchronize_page#1% box
- {\dosynchronizemarking[\v!page][#1][\ifconditional\page_marks_building_successive_pages\v!keep\fi]}
+ {\marking_synchronize[\v!page][#1][\ifconditional\page_marks_building_successive_pages\v!keep\fi]}
\def\page_marks_synchronize_column#1#2#3#4% first last column box
{\ifnum#3=#1\relax
- \dosynchronizemarking[\number#3,\v!column:\number#3,\v!first,\v!column:\v!first][#4][]%
+ \marking_synchronize[\number#3,\v!column:\number#3,\v!first,\v!column:\v!first][#4][]%
\else\ifnum#3=#2\relax
- \dosynchronizemarking[\number#3,\v!column:\number#3,\v!last, \v!column:\v!last ][#4][]%
+ \marking_synchronize[\number#3,\v!column:\number#3,\v!last, \v!column:\v!last ][#4][]%
\else
- \dosynchronizemarking[\number#3,\v!column:\number#3 ][#4][]%
+ \marking_synchronize[\number#3,\v!column:\number#3 ][#4][]%
\fi\fi}
% Page body building
diff --git a/tex/context/base/page-lay.mkiv b/tex/context/base/page-lay.mkiv
index c6ff5bc66..a6126b660 100644
--- a/tex/context/base/page-lay.mkiv
+++ b/tex/context/base/page-lay.mkiv
@@ -65,6 +65,8 @@
\newdimen\layoutcolumndistance \layoutcolumndistance = \zeropoint
\newdimen\layoutcolumnwidth \layoutcolumnwidth = \zeropoint
+\newdimen\totaltextwidth
+
%D The next series of dimensions are complemented by left
%D and rights ones.
@@ -108,7 +110,13 @@
%D Now we've come to the setup and definition commands.
-\installswitchcommandhandler \??ly {layout} \??ly
+\installcorenamespace{layout}
+\installcorenamespace{layoutlocation}
+\installcorenamespace{layoutalternative}
+\installcorenamespace{layoutcolumn}
+\installcorenamespace{layoutmethod}
+
+\installswitchcommandhandler \??layout {layout} \??layout
\appendtoks
\letlayoutparameter\c!state\v!start
@@ -123,7 +131,7 @@
\to \everysetuplayout
\appendtoks
- \pages_layouts_synchronize
+ \page_layouts_synchronize
\page_layouts_check_next
\to \everysetuplayout
@@ -163,7 +171,7 @@
\global\headerdistance \layoutdistance\headerheight \naturalheaderdistance
\global\footerdistance \layoutdistance\footerheight \naturalfooterdistance
\global\bottomdistance \layoutdistance\bottomheight \naturalbottomdistance
- }
+ }
\def\page_layouts_set_distances % local in \setreducedvsize
{\headerdistance\layoutdistance\headerheight\naturalheaderdistance
@@ -252,7 +260,12 @@
%D We keep track of these features with the following
%D variables.
-\installcommandhandler \??pp {layouttarget} \??pp % so this is a sort of mix, not really a user command / maybe switch handler
+\installcorenamespace{layouttarget}
+\installcorenamespace{layoutpaper}
+\installcorenamespace{layoutprint}
+\installcorenamespace{layoutcurrent}
+
+\installcommandhandler \??layouttarget {layouttarget} \??layouttarget % so this is a sort of mix, not really a user command / maybe switch handler
\newconditional\c_page_target_paper_mirror
\newconstant \c_page_target_paper_orientation
@@ -294,7 +307,7 @@
\def\v_page_target_xy {\numexpr\v_page_target_nx*\v_page_target_ny\relax}
% Normally we will not use this command directly but for now it
-% works out okay. In th efuture we might use more of the related
+% works out okay. In the future we might use more of the related
% commands.
\setuplayouttarget
@@ -335,16 +348,16 @@
\else
\doifassignmentelse{#2}
{\definelayouttarget[#1][#2]}
- {\setevalue{\??pp:1:#1}{#2}%
- \setevalue{\??pp:2:#1}{#3}}%
+ {\setevalue{\??layoutpaper#1}{#2}%
+ \setevalue{\??layoutprint#1}{#3}}%
\fi}
\appendtoks
- \letvalue{\??pp:c:\currentlayouttarget}\relax
+ \letvalue{\??layoutcurrent\currentlayouttarget}\relax
\to \everydefinelayouttarget
-\def\page_paper_the_paper_size#1{\ifcsname\??pp:1:#1\endcsname\csname\??pp:1:#1\endcsname\else#1\fi}
-\def\page_paper_the_print_size#1{\ifcsname\??pp:2:#1\endcsname\csname\??pp:2:#1\endcsname\else#1\fi}
+\def\page_paper_the_paper_size#1{\ifcsname\??layoutpaper#1\endcsname\csname\??layoutpaper#1\endcsname\else#1\fi}
+\def\page_paper_the_print_size#1{\ifcsname\??layoutprint#1\endcsname\csname\??layoutprint#1\endcsname\else#1\fi}
% \setuppaper [page=A4,paper=A3] % the k/v variant, changes the current page mapping
% \setuppapersize[A4][a=b,c=d] % the k/v variant, changes nothing, just settings
@@ -369,13 +382,13 @@
\unexpanded\def\setup_paper_size_settings[#1]% sometimes used to set paper/print size
{\let\currentlayouttarget\empty
- \edef\tmp_layouttarget_paper_saved{\page_paper_the_paper_size{\layouttargetparameter\c!page }}%
- \edef\tmp_layouttarget_print_saved{\page_paper_the_print_size{\layouttargetparameter\c!paper}}%
+ \edef\m_layouttarget_paper_saved{\page_paper_the_paper_size{\layouttargetparameter\c!page }}%
+ \edef\m_layouttarget_print_saved{\page_paper_the_print_size{\layouttargetparameter\c!paper}}%
\setupcurrentlayouttarget[#1]%
- \edef\tmp_layouttarget_paper{\page_paper_the_paper_size{\layouttargetparameter\c!page }}%
- \edef\tmp_layouttarget_print{\page_paper_the_print_size{\layouttargetparameter\c!paper}}%
- \ifx\tmp_layouttarget_paper_saved\tmp_layouttarget_paper
- \ifx\tmp_layouttarget_print_saved\tmp_layouttarget_print
+ \edef\m_layouttarget_paper{\page_paper_the_paper_size{\layouttargetparameter\c!page }}%
+ \edef\m_layouttarget_print{\page_paper_the_print_size{\layouttargetparameter\c!paper}}%
+ \ifx\m_layouttarget_paper_saved\m_layouttarget_paper
+ \ifx\m_layouttarget_print_saved\m_layouttarget_print
% we didn't change the size, maybe only sx or sy or so
\else
\setup_paper_size_settings_recalibrate
@@ -385,13 +398,13 @@
\fi}
\def\setup_paper_size_settings_recalibrate
- {\ifx\tmp_layouttarget_paper\empty
+ {\ifx\m_layouttarget_paper\empty
% forget about it
\else
- \ifx\tmp_layouttarget_print\empty
- \let\tmp_layouttarget_print\tmp_layouttarget_paper
+ \ifx\m_layouttarget_print\empty
+ \let\m_layouttarget_print\m_layouttarget_paper
\fi
- \pages_paper_set_current[\tmp_layouttarget_paper][\tmp_layouttarget_print]%
+ \page_paper_set_current[\m_layouttarget_paper][\m_layouttarget_print]%
\fi
\letlayouttargetparameter\c!page \papersize
\letlayouttargetparameter\c!paper\printpapersize}
@@ -402,8 +415,8 @@
\unexpanded\def\setup_paper_size_change_size[#1][#2]%
{\doifelsenothing{#2}
- {\pages_paper_set_current[#1][#1]}
- {\pages_paper_set_current[#1][#2]}}
+ {\page_paper_set_current[#1][#1]}
+ {\page_paper_set_current[#1][#2]}}
\let\setuppaper\setup_paper_size_settings
@@ -420,69 +433,69 @@
\to \everyaftershipout
\unexpanded\def\page_paper_set_restore#1#2%
- {\xdef\page_paper_restore{\pages_paper_set_current_indeed[#1][#2]}}
+ {\xdef\page_paper_restore{\page_paper_set_current_indeed[#1][#2]}}
-\unexpanded\def\pages_paper_set_current[#1][#2]%
- {\normalexpanded{\pages_paper_set_current_indeed
+\unexpanded\def\page_paper_set_current[#1][#2]%
+ {\normalexpanded{\page_paper_set_current_indeed
[\page_paper_the_paper_size{#1}]%
[\page_paper_the_print_size{#2}]}}
-\setvalue{\??pp:1:\v!reset }{\global\setfalse\c_page_target_paper_landscape
- \global\setfalse\c_page_target_paper_mirror
- \global\setfalse\c_page_target_paper_negate
- \global\c_page_target_paper_orientation\uprotationangle
- \global\c_page_target_paper_reverse \uprotationangle}
-\setvalue{\??pp:1:\v!landscape }{\global\settrue\c_page_target_paper_landscape}
-\setvalue{\??pp:1:\v!mirrored }{\global\settrue\c_page_target_paper_mirror}
-\setvalue{\??pp:1:\v!negative }{\global\settrue\c_page_target_paper_negate}
-\setvalue{\??pp:1:\v!rotated }{\global\c_page_target_paper_orientation\rightrotationangle
- \global\c_page_target_paper_reverse \leftrotationangle}
-\setvalue{\??pp:1:\number\rightrotationangle}{\global\c_page_target_paper_orientation\rightrotationangle
- \global\c_page_target_paper_reverse \leftrotationangle}
-\setvalue{\??pp:1:\number\downrotationangle }{\global\c_page_target_paper_orientation\downrotationangle
- \global\c_page_target_paper_reverse \zerocount}
-\setvalue{\??pp:1:\number\leftrotationangle }{\global\c_page_target_paper_orientation\leftrotationangle
- \global\c_page_target_paper_reverse \rightrotationangle}
-
-\setvalue{\??pp:1:\v!reset }{\global\setfalse\c_page_target_print_landscape
- \global\setfalse\c_page_target_print_mirror
- \global\setfalse\c_page_target_print_negate
- \global\c_page_target_print_orientation\uprotationangle
- \global\c_page_target_print_reverse \uprotationangle}
-\setvalue{\??pp:2:\v!landscape }{\global\settrue\c_page_target_print_landscape}
-\setvalue{\??pp:2:\v!mirrored }{\global\settrue\c_page_target_print_mirror}
-\setvalue{\??pp:2:\v!negative }{\global\settrue\c_page_target_print_negate}
-\setvalue{\??pp:2:\v!rotated }{\global\c_page_target_print_orientation\rightrotationangle
- \global\c_page_target_print_reverse \leftrotationangle}
-\setvalue{\??pp:2:\number\rightrotationangle}{\global\c_page_target_print_orientation\rightrotationangle
- \global\c_page_target_print_reverse \leftrotationangle}
-\setvalue{\??pp:2:\number\downrotationangle }{\global\c_page_target_print_orientation\downrotationangle
- \global\c_page_target_print_reverse \zerocount}
-\setvalue{\??pp:2:\number\leftrotationangle }{\global\c_page_target_print_orientation\leftrotationangle
- \global\c_page_target_print_reverse \rightrotationangle}
-
-\def\pages_paper_handle_page_option #1{\ifcsname\??pp:1:#1\endcsname\csname\??pp:1:#1\endcsname\fi}
-\def\pages_paper_handle_print_option#1{\ifcsname\??pp:2:#1\endcsname\csname\??pp:2:#1\endcsname\fi}
-
-\unexpanded\def\pages_paper_identify_target#1%
- {\ifcsname\??pp:c:#1\endcsname
+\setvalue{\??layoutpaper\v!reset }{\global\setfalse\c_page_target_paper_landscape
+ \global\setfalse\c_page_target_paper_mirror
+ \global\setfalse\c_page_target_paper_negate
+ \global\c_page_target_paper_orientation\uprotationangle
+ \global\c_page_target_paper_reverse \uprotationangle}
+\setvalue{\??layoutpaper\v!landscape }{\global\settrue\c_page_target_paper_landscape}
+\setvalue{\??layoutpaper\v!mirrored }{\global\settrue\c_page_target_paper_mirror}
+\setvalue{\??layoutpaper\v!negative }{\global\settrue\c_page_target_paper_negate}
+\setvalue{\??layoutpaper\v!rotated }{\global\c_page_target_paper_orientation\rightrotationangle
+ \global\c_page_target_paper_reverse \leftrotationangle}
+\setvalue{\??layoutpaper\number\rightrotationangle}{\global\c_page_target_paper_orientation\rightrotationangle
+ \global\c_page_target_paper_reverse \leftrotationangle}
+\setvalue{\??layoutpaper\number\downrotationangle }{\global\c_page_target_paper_orientation\downrotationangle
+ \global\c_page_target_paper_reverse \zerocount}
+\setvalue{\??layoutpaper\number\leftrotationangle }{\global\c_page_target_paper_orientation\leftrotationangle
+ \global\c_page_target_paper_reverse \rightrotationangle}
+\setvalue{\??layoutpaper\v!reset }{\global\setfalse\c_page_target_print_landscape
+ \global\setfalse\c_page_target_print_mirror
+ \global\setfalse\c_page_target_print_negate
+ \global\c_page_target_print_orientation\uprotationangle
+ \global\c_page_target_print_reverse \uprotationangle}
+
+\setvalue{\??layoutprint\v!landscape }{\global\settrue\c_page_target_print_landscape}
+\setvalue{\??layoutprint\v!mirrored }{\global\settrue\c_page_target_print_mirror}
+\setvalue{\??layoutprint\v!negative }{\global\settrue\c_page_target_print_negate}
+\setvalue{\??layoutprint\v!rotated }{\global\c_page_target_print_orientation\rightrotationangle
+ \global\c_page_target_print_reverse \leftrotationangle}
+\setvalue{\??layoutprint\number\rightrotationangle}{\global\c_page_target_print_orientation\rightrotationangle
+ \global\c_page_target_print_reverse \leftrotationangle}
+\setvalue{\??layoutprint\number\downrotationangle }{\global\c_page_target_print_orientation\downrotationangle
+ \global\c_page_target_print_reverse \zerocount}
+\setvalue{\??layoutprint\number\leftrotationangle }{\global\c_page_target_print_orientation\leftrotationangle
+ \global\c_page_target_print_reverse \rightrotationangle}
+
+\def\page_paper_handle_page_option #1{\ifcsname\??layoutpaper#1\endcsname\csname\??layoutpaper#1\endcsname\fi}
+\def\page_paper_handle_print_option#1{\ifcsname\??layoutprint#1\endcsname\csname\??layoutprint#1\endcsname\fi}
+
+\unexpanded\def\page_paper_identify_target#1%
+ {\ifcsname\??layoutcurrent#1\endcsname
\edef\currentlayouttarget{#1}%
\fi}
-\unexpanded\def\pages_paper_set_current_indeed[#1][#2]%
- {\edef\tmp_pages_asked_paper{\v!reset,#1}% can be the restores
- \edef\tmp_pages_asked_print{\v!reset,#2}%
+\unexpanded\def\page_paper_set_current_indeed[#1][#2]%
+ {\edef\m_page_asked_paper{\v!reset,#1}% can be the restores
+ \edef\m_page_asked_print{\v!reset,#2}%
%
- \page_paper_set_restore\tmp_pages_asked_paper\tmp_pages_asked_print
+ \page_paper_set_restore\m_page_asked_paper\m_page_asked_print
%
% locate page target
\let\currentlayouttarget\empty
- \processcommacommand[\tmp_pages_asked_paper]\pages_paper_identify_target
+ \processcommacommand[\m_page_asked_paper]\page_paper_identify_target
\ifx\currentlayouttarget\empty
\let\currentlayouttarget\currentpage
\fi
\global\let\papersize\currentlayouttarget
- \processcommacommand[\tmp_pages_asked_paper]\pages_paper_handle_page_option
+ \processcommacommand[\m_page_asked_paper]\page_paper_handle_page_option
\global\paperwidth \layouttargetparameter\c!width \relax
\global\paperheight\layouttargetparameter\c!height\relax
\ifdim\paperwidth<\onepoint
@@ -499,11 +512,11 @@
\normalexpanded{\setlayouttargetparemeter\c!width {\the\paperwidth }}%
\fi
%
- \pages_paper_set_offsets
+ \page_paper_set_offsets
% locate paper target
- \processcommacommand[\tmp_pages_asked_print]\pages_paper_identify_target
+ \processcommacommand[\m_page_asked_print]\page_paper_identify_target
\global\let\printpapersize\currentlayouttarget
- \processcommacommand[\tmp_pages_asked_print]\pages_paper_handle_print_option
+ \processcommacommand[\m_page_asked_print]\page_paper_handle_print_option
\global\printpaperwidth \layouttargetparameter\c!width \relax
\global\printpaperheight\layouttargetparameter\c!height\relax
\ifdim\printpaperwidth<\onepoint
@@ -517,8 +530,8 @@
\fi
% this check can be confusing, so we've added the possibility
% to bypass this test: \setuppapersize[option=fit]
- \edef\tmp_pages_asked_option{\rootlayouttargetparameter\c!option}%
- \ifx\tmp_pages_asked_option\v!max % \v!fit is
+ \edef\m_page_asked_option{\rootlayouttargetparameter\c!option}%
+ \ifx\m_page_asked_option\v!max % \v!fit is
\begingroup
% we need to pre-swap else we get the wrong paper size
\ifnum\c_page_target_paper_orientation=\rightrotationangle
@@ -542,11 +555,11 @@
\endgroup
\fi
%\writestatus{layout target}{(\the\paperwidth,\the\paperheight) -> (\the\printpaperwidth,\the\printpaperheight)}%
- \pages_layouts_synchronize}
+ \page_layouts_synchronize}
-\ifx\pages_paper_set_offsets\undefined
+\ifx\page_paper_set_offsets\undefined
- \def\pages_paper_set_offsets % will move
+ \def\page_paper_set_offsets % will move
{\global\paperoffset\v_page_target_offset
\global\advance\paperwidth -2\paperoffset
\global\advance\paperheight-2\paperoffset}
@@ -556,7 +569,7 @@
\ifdefined\setups \else \unexpanded\def\setups[#1]{\setdefaultpenalties} \fi % still needed?
\ifdefined\docheckgridsnapping \else \let\docheckgridsnapping\relax \fi
-\def\pages_layouts_synchronize
+\def\page_layouts_synchronize
{\setups[\layoutparameter\c!preset]%
\global\leftmarginwidth \layoutparameter\c!leftmargin
\global\rightmarginwidth\layoutparameter\c!rightmargin
@@ -655,13 +668,21 @@
\ifdim\makeupheight<\onepoint
\global\makeupheight\onepoint
\fi
+ % handy in page builder
+ \global\totaltextwidth\dimexpr
+ \leftedgetotal
+ +\leftmargintotal
+ +\makeupwidth
+ +\rightmargintotal
+ +\rightedgetotal
+ \relax
% \page_layouts_check_next % here ?
\page_layouts_calculate_extras
\page_target_check_centering
\calculatehsizes
\calculatevsizes
\page_layouts_check_pseudo_columns
- \recalculatebackgrounds}
+ \page_backgrounds_recalculate}
\def\page_layouts_check_pseudo_columns
{\global\layoutcolumns\layoutparameter\c!columns
@@ -673,21 +694,21 @@
\fi}
\def\page_layouts_check_pseudo_column
- {\setxvalue{\??ly:c:\recurselevel}%
+ {\setxvalue{\??layoutcolumn\recurselevel}%
{\the\numexpr\recurselevel-\plusone\relax\dimexpr\layoutcolumnwidth+\layoutcolumndistance\relax}}
-\letvalue{\??ly:c:0}\zeropoint
+\letvalue{\??layoutcolumn0}\zeropoint
\def\layoutcolumnoffset#1%
- {\csname\??ly:c:\ifcsname\??ly:c:#1\endcsname#1\else0\fi\endcsname}
+ {\csname\??layoutcolumn\ifcsname\??layoutcolumn#1\endcsname#1\else0\fi\endcsname}
-\def\pages_layouts_synchronize_at_start
+\def\page_layouts_synchronize_at_start
{\ifdim\makeupheight=\layoutlines\lineheight \else % weird check
- \pages_layouts_synchronize
+ \page_layouts_synchronize
\fi}
\appendtoks
- \pages_layouts_synchronize_at_start % still needed?
+ \page_layouts_synchronize_at_start % still needed?
\to \everystarttext
% document:
@@ -701,7 +722,7 @@
\def\page_layouts_change#1%
{%\writestatus\m!layouts{changing to layout #1}%
\xdef\currentlayout{#1}%
- \pages_layouts_synchronize}
+ \page_layouts_synchronize}
\let\changetolayout\page_layouts_change % also public
@@ -737,13 +758,13 @@
\ifcsname\namedlayouthash\v_real_page_odd_or_even\c!state\endcsname \page_layouts_check_default_indeed\v_real_page_odd_or_even\fi\fi\fi\fi\fi}
\def\installlayoutmethod#1#2%
- {\setgvalue{\??ly:m:#1}{#2}}
+ {\setgvalue{\??layoutmethod#1}{#2}}
\installlayoutmethod\v!default{\page_layouts_check_default}
\installlayoutmethod\v!normal {\page_layouts_check_default}
\def\page_layouts_check_next
- {\csname\??ly:m:\ifcsname\??ly:m:\layoutparameter\c!method\endcsname
+ {\csname\??layoutmethod\ifcsname\??layoutmethod\layoutparameter\c!method\endcsname
\layoutparameter\c!method
\else
\v!normal
@@ -797,27 +818,27 @@
\let\v_page_target_top_fill \relax
\let\v_page_target_bottom_fill\relax}
-\setvalue{\??ly:\c!location:\v!right }{\settrue\c_page_layouts_location_is_set
- \let\v_page_target_left_fill \hss}
-\setvalue{\??ly:\c!location:\v!left }{\settrue\c_page_layouts_location_is_set
- \let\v_page_target_right_fill \hss}
-\setvalue{\??ly:\c!location:\v!bottom }{\settrue\c_page_layouts_location_is_set
- \let\v_page_target_top_fill \vss}
-\setvalue{\??ly:\c!location:\v!top }{\settrue\c_page_layouts_location_is_set
- \let\v_page_target_bottom_fill\vss}
-\setvalue{\??ly:\c!location:\v!middle }{\settrue\c_page_layouts_location_is_set
- \let\v_page_target_left_fill \hss
- \let\v_page_target_right_fill \hss
- \let\v_page_target_top_fill \vss
- \let\v_page_target_bottom_fill\vss}
-\setvalue{\??ly:\c!location:\empty }{\setfalse\c_page_layouts_location_is_set % default also signal to scrn_
- \let\v_page_target_right_fill \hss
- \let\v_page_target_bottom_fill\hss}
-\setvalue{\??ly:\c!location:\v!doublesided}{\settrue \c_page_target_print_doublesided}
-\setvalue{\??ly:\c!location:\v!singlesided}{\setfalse\c_page_target_print_doublesided}
+\setvalue{\??layoutlocation\v!right }{\settrue\c_page_layouts_location_is_set
+ \let\v_page_target_left_fill \hss}
+\setvalue{\??layoutlocation\v!left }{\settrue\c_page_layouts_location_is_set
+ \let\v_page_target_right_fill \hss}
+\setvalue{\??layoutlocation\v!bottom }{\settrue\c_page_layouts_location_is_set
+ \let\v_page_target_top_fill \vss}
+\setvalue{\??layoutlocation\v!top }{\settrue\c_page_layouts_location_is_set
+ \let\v_page_target_bottom_fill\vss}
+\setvalue{\??layoutlocation\v!middle }{\settrue\c_page_layouts_location_is_set
+ \let\v_page_target_left_fill \hss
+ \let\v_page_target_right_fill \hss
+ \let\v_page_target_top_fill \vss
+ \let\v_page_target_bottom_fill\vss}
+\setvalue{\??layoutlocation\empty }{\setfalse\c_page_layouts_location_is_set % default also signal to scrn_
+ \let\v_page_target_right_fill \hss
+ \let\v_page_target_bottom_fill\hss}
+\setvalue{\??layoutlocation\v!doublesided}{\settrue \c_page_target_print_doublesided}
+\setvalue{\??layoutlocation\v!singlesided}{\setfalse\c_page_target_print_doublesided}
\def\page_target_check_centering_indeed#1%
- {\ifcsname\??ly:\c!location:#1\endcsname\csname\??ly:\c!location:#1\endcsname\fi}
+ {\ifcsname\??layoutlocation#1\endcsname\csname\??layoutlocation#1\endcsname\fi}
\unexpanded\def\page_target_check_centering
{\setfalse\c_page_target_print_doublesided
@@ -827,7 +848,7 @@
% installers
\def\installlayoutalternative#1#2%
- {\setgvalue{\??ly:a:#1}{#2}}
+ {\setgvalue{\??layoutalternative#1}{#2}}
\def\page_boxes_construct_content_default#1#2% #1 and #2 will become variables
{\setbox\pagebox\vbox
@@ -843,7 +864,7 @@
\installlayoutalternative\v!normal {\page_boxes_construct_content_default}
\def\page_boxes_construct_content
- {\csname\??ly:a:\ifcsname\??ly:a:\layoutparameter\c!alternative\endcsname
+ {\csname\??layoutalternative\ifcsname\??layoutalternative\layoutparameter\c!alternative\endcsname
\layoutparameter\c!alternative
\else
\v!normal
@@ -892,7 +913,7 @@
\setvsize
\global\pagegoal\vsize
%
- \recalculatebackgrounds
+ \page_backgrounds_recalculate
\global\let\page_adepts_push\relax
\global\let\page_adepts_pop\page_adepts_pop_indeed}
@@ -912,7 +933,7 @@
\def\page_adepts_pop_indeed
{\global\textheight \page_adepts_pushed_text_height
\global\footerheight\page_adepts_pushed_footer_height
- \pages_layouts_synchronize
+ \page_layouts_synchronize
\global\let\page_adepts_push\page_adepts_push_indeed
\global\let\page_adepts_pop\relax}
@@ -998,16 +1019,16 @@
\def\freezetextwidth % name will change % \makeupwidth may be set to \textwidth
{\textwidth\makeupwidth % which is a tricky but valid value
- \edef\tmp_currentlayout_text_width {\layoutparameter\c!textwidth }%
- \edef\tmp_currentlayout_text_margin{\layoutparameter\c!textmargin}%
- \ifx\tmp_currentlayout_text_width\empty \else
- \textwidth\tmp_currentlayout_text_width % local
+ \edef\m_currentlayout_text_width {\layoutparameter\c!textwidth }%
+ \edef\m_currentlayout_text_margin{\layoutparameter\c!textmargin}%
+ \ifx\m_currentlayout_text_width\empty \else
+ \textwidth\m_currentlayout_text_width % local
\fi
\global\innermakeupwidth\textwidth
- \ifx\tmp_currentlayout_text_margin\empty
+ \ifx\m_currentlayout_text_margin\empty
\global\innermakeupmargin\zeropoint
\else
- \global\innermakeupmargin\tmp_currentlayout_text_margin\relax
+ \global\innermakeupmargin\m_currentlayout_text_margin\relax
\fi
\scratchdimen\dimexpr\innermakeupmargin+\innermakeupmargin\relax
\global\advance\innermakeupwidth-\scratchdimen
@@ -1087,7 +1108,7 @@
% \freezepagestatechecks
% \to \everybeforeshipout
-\def\goleftonpage % name will change
+\def\goleftonpage % name will change (we could cache)
{\hskip-\dimexpr\leftmargindistance+\leftmarginwidth+\leftedgedistance+\leftedgewidth\relax}
\def\doifmarginswapelse#1#2%
diff --git a/tex/context/base/page-mak.mkvi b/tex/context/base/page-mak.mkvi
index e4899f948..5cd9aa51b 100644
--- a/tex/context/base/page-mak.mkvi
+++ b/tex/context/base/page-mak.mkvi
@@ -37,7 +37,10 @@
%D New is that we have a layout with the same name so one can set
%D up a special layout tthat then gets used.
-\installcommandhandler \??do {makeup} \??do
+\installcorenamespace{makeup}
+\installcorenamespace{makeupdoublesided}
+
+\installcommandhandler \??makeup {makeup} \??makeup
\appendtoks
\setuevalue{\e!start\currentmakeup\e!makeup}{\startmakeup[\currentmakeup]}%
@@ -123,17 +126,17 @@
\makeupparameter\c!after
\relax % to be sure we don't enter the \if
\ifdoublesided \ifodd\realpageno \else
- \getvalue{\??do::\c!doublesided::\makeupparameter\c!doublesided}%
+ \getvalue{\??makeupdoublesided\makeupparameter\c!doublesided}%
\fi \fi
\poppagestate % new
\egroup
\stoplayout} % includes \page
-\setvalue{\??do::\c!doublesided::\v!yes}%
+\setvalue{\??makeupdoublesided\v!yes}%
{\emptyhbox
\page}
-\setvalue{\??do::\c!doublesided::\v!empty}%
+\setvalue{\??makeupdoublesided\v!empty}%
{\the\page_makeup_every_setup
% == \page[\v!dummy]
\page[\v!blank]%
diff --git a/tex/context/base/page-mbk.mkvi b/tex/context/base/page-mbk.mkvi
index 7e13bb1b1..05e3cb104 100644
--- a/tex/context/base/page-mbk.mkvi
+++ b/tex/context/base/page-mbk.mkvi
@@ -36,15 +36,18 @@
%
% todo: flush margin floats at end of text
-\installcommandhandler \??mb {marginblock} \??mb
+\installcorenamespace{marginblock}
+\installcorenamespace{marginblocklocation}
+
+\installcommandhandler \??marginblock {marginblock} \??marginblock
\let\setupmarginblocks\setupmarginblock
-\newconditional\page_margin_blocks_c % not really needed as we can check each time
+\newconditional\c_page_margin_blocks % not really needed as we can check each time
\appendtoks
\doifelse{\rootmarginblockparameter\c!state}\v!start
- \settrue\setfalse\page_margin_blocks_c
+ \settrue\setfalse\c_page_margin_blocks
\to \everysetupmarginblock
\setupmarginblocks
@@ -132,9 +135,9 @@
\fi}
\def\page_margin_check_indeed
- {\ifcsname\??mb::\c!location::\marginblockparameter\c!location\endcsname
+ {\ifcsname\??marginblocklocation\marginblockparameter\c!location\endcsname
\page_margin_prepare_box
- \csname\??mb::\c!location::\marginblockparameter\c!location\endcsname
+ \csname\??marginblocklocation\marginblockparameter\c!location\endcsname
\else
\global\page_margin_box\emptybox
\fi}
@@ -156,16 +159,16 @@
\box\page_margin_prepared_box
\marginblockparameter\c!after}}
-\setvalue{\??mb::\c!location::\v!left }{\page_margin_set_l_box}
-\setvalue{\??mb::\c!location::\v!right }{\page_margin_set_r_box}
-\setvalue{\??mb::\c!location::\v!inmargin}{\doifbothsidesoverruled
- \page_margin_set_r_box
- \page_margin_set_r_box
- \page_margin_set_l_box}
-\setvalue{\??mb::\c!location::\v!middle }{\doifbothsidesoverruled
- \page_margin_set_r_box
- \page_margin_set_l_box
- \page_margin_set_r_box}
+\setvalue{\??marginblocklocation\v!left }{\page_margin_set_l_box}
+\setvalue{\??marginblocklocation\v!right }{\page_margin_set_r_box}
+\setvalue{\??marginblocklocation\v!inmargin}{\doifbothsidesoverruled
+ \page_margin_set_r_box
+ \page_margin_set_r_box
+ \page_margin_set_l_box}
+\setvalue{\??marginblocklocation\v!middle }{\doifbothsidesoverruled
+ \page_margin_set_r_box
+ \page_margin_set_l_box
+ \page_margin_set_r_box}
\unexpanded\def\place_r_margin_block_yes
{\setbox\page_margin_prepared_box\hbox to \rightmarginwidth
@@ -218,12 +221,12 @@
{\someelsefloat[#options,\v!here]} % still an old name
\def\page_margin_float_before
- {\ifconditional\page_margin_blocks_c
+ {\ifconditional\c_page_margin_blocks
\doifinset\v!margin\floatlocation\endgraf
\fi}
\def\page_margin_float_set_hsize
- {\ifconditional\page_margin_blocks_c
+ {\ifconditional\c_page_margin_blocks
\doifinset\v!margin\floatlocation{\hsize\rootmarginblockparameter\c!width}%
\fi}
diff --git a/tex/context/base/page-mis.mkiv b/tex/context/base/page-mis.mkiv
index 507ab9a2b..d38068931 100644
--- a/tex/context/base/page-mis.mkiv
+++ b/tex/context/base/page-mis.mkiv
@@ -57,7 +57,7 @@
\def\page_postponed_blocks_start[#1]%
{\edef\currentpostponedpage{#1}%
- \dostartbuffer[postponedblock][\e!start\v!postponing][\e!stop\v!postponing]}
+ \grabbufferdatadirect{postponedblock}{\e!start\v!postponing}{\e!stop\v!postponing}}
% officially we should flush again after a flush as there can be new future pages
% but that will be looked into when we run into it
diff --git a/tex/context/base/page-mrk.mkiv b/tex/context/base/page-mrk.mkiv
index d1552dcfd..aabef6154 100644
--- a/tex/context/base/page-mrk.mkiv
+++ b/tex/context/base/page-mrk.mkiv
@@ -134,8 +134,10 @@
\let\page_marks_add_page\gobbleoneargument
\let\page_marks_add_more\gobbleoneargument
+\installcorenamespace{layoutmarking}
+
\def\installpagecutmark#1#2%
- {\setvalue{\??ly:n:\c!marking:#1}{#2}}
+ {\setvalue{\??layoutmarking#1}{#2}}
% \installpagecutmark\v!off
% {}
@@ -171,7 +173,7 @@
\setfalse\c_page_marks_add_more_marking
\setfalse\c_page_marks_add_more_lines
\setfalse\c_page_marks_add_more_number
- \csname\??ly:n:\c!marking:\layoutparameter\c!marking\endcsname
+ \csname\??layoutmarking\layoutparameter\c!marking\endcsname
\ifconditional\c_page_marks_add_page_lines
\let\page_marks_add_page\page_marks_add_page_indeed
\else
diff --git a/tex/context/base/page-mul.mkiv b/tex/context/base/page-mul.mkiv
index 4fcb72719..b9e8daf7c 100644
--- a/tex/context/base/page-mul.mkiv
+++ b/tex/context/base/page-mul.mkiv
@@ -115,12 +115,6 @@
%D
%D \interface \type{\ifinheritcolumns} \\
%D handle ragging or not \\
-%D \interface \type{\ifr@ggedbottom} \\
-%D use ragged bottoms \\
-%D \interface \type{\ifb@selinebottom} \\
-%D put the bottom line on the baseline \\
-%D \interface \type{\ifnormalbottom} \\
-%D put the bottom line at the baseline \\
%D
%D \interface \type{\ifreversecolumns} \\
%D reverse the order in wich columns are flushed \\
@@ -541,7 +535,7 @@
%D One of the complications of flushing out the boxes is that
%D \type{\precolumnbox} needs to be \type{\unvbox}'ed, otherwise
%D there is too less flexibility in the page when using
-%D \type{\r@ggedbottom}. It took a lot of time before these
+%D \type{\raggedbottom}. It took a lot of time before these
%D kind of problems were overcome. Using \type{\unvbox} at the
%D wrong moment can generate \type{\balancingerror}'s.
%D
@@ -965,7 +959,8 @@
{\splitcurrentcolumn from \box\normalpagebox to \dimen0}%
\setbox\restofpage\vbox{\unvbox\normalpagebox}%
\ifinheritcolumns
- \ifr@ggedbottom % vreemd
+ \ifcase\bottomraggednessmode
+ % 0 = ragged
\dohandleallcolumns
{\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox
{\dimen0\dp\currentcolumnbox
@@ -977,14 +972,14 @@
\ifbottomnotes \else
\dimen0\ht\firstcolumnbox
\fi
- \fi
- \ifn@rmalbottom
+ \or
+ % 1 = normal
\advance\dimen0 \maxdepth
\dohandleallcolumns
{\global\setbox\currentcolumnbox\vbox to \dimen0
{\unvbox\currentcolumnbox}}%
- \fi
- \ifb@selinebottom
+ \or
+ % 2 = baseline
% the columns are on top of the baseline
\fi
\else
@@ -1161,7 +1156,7 @@
\fi
%\global\output{\balancingerror}%
\page_otf_set_engine_output_routine{\balancingerror}%
- \b@selinebottomtrue % forces depth in separation rule
+ \baselinebottom % forces depth in separation rule
\flushcolumnedpage\plusone
\multicolumnseject
\egroup}
@@ -1562,7 +1557,9 @@
\hskip.5\dimen0
\vrule
\!!width\linewidth
- \ifb@selinebottom\!!depth\strutdepth\fi
+ \ifnum\bottomraggednessmode=\plustwo % baselinebottom
+ \!!depth\strutdepth
+ \fi
\hskip.5\dimen0\relax
\stoptextproperties
\egroup}
@@ -1587,6 +1584,12 @@
\definecomplexorsimpleempty\startcolumns
+% to be reconsidered ... (in any case they need to be unexpandable sinze 2011.12.30)
+
+\unexpanded\def\columns_align_option_yes {\stretchcolumnstrue \inheritcolumnsfalse}% todo: new key
+\unexpanded\def\columns_align_option_no {\stretchcolumnsfalse\inheritcolumnsfalse}% todo: new key
+\unexpanded\def\columns_align_option_text{\stretchcolumnsfalse\inheritcolumnstrue }%
+
\def\complexstartcolumns[#1]% %% \startcolumns
{\bgroup
\let\stopcolumns\egroup
@@ -1611,9 +1614,9 @@
\doifelse\@@klbalance\v!yes
\balancecolumnstrue
\balancecolumnsfalse
- \installalign\v!yes {\stretchcolumnstrue \inheritcolumnsfalse}% todo: new key
- \installalign\v!no {\stretchcolumnsfalse\inheritcolumnsfalse}% todo: new key
- \installalign\v!text{\stretchcolumnsfalse\inheritcolumnstrue }%
+ \installalign\v!yes {\columns_align_option_yes }%
+ \installalign\v!no {\columns_align_option_no }%
+ \installalign\v!text{\columns_align_option_text}%
\stretchcolumnsfalse
\inheritcolumnstrue
\doifsomething\@@klalign{\expanded{\setupalign[\@@klalign]}}%
diff --git a/tex/context/base/page-one.mkiv b/tex/context/base/page-one.mkiv
index c44ff830b..d958fc240 100644
--- a/tex/context/base/page-one.mkiv
+++ b/tex/context/base/page-one.mkiv
@@ -126,17 +126,20 @@
\prevdepth\openstrutdepth
\dobotinsertions
\vfil
- \else\ifr@ggedbottom
+ \else\ifcase\bottomraggednessmode
+ % ragged
\vskip\dimexpr\openstrutdepth-\d_page_one_natural_depth\relax
\prevdepth\openstrutdepth
\dobotinsertions
\vfil
- \else\ifb@selinebottom
- \kern\dimexpr\maxdepth-\d_page_one_natural_depth\relax
+ \or
+ % align (normal)
\dobotinsertions
- \else
+ \or
+ % baseline
+ \kern\dimexpr\maxdepth-\d_page_one_natural_depth\relax
\dobotinsertions
- \fi\fi\fi
+ \fi\fi
\fakepagenotes}%
\ifconditional\c_notes_bottom_present
\ifgridsnapping
diff --git a/tex/context/base/page-plg.mkiv b/tex/context/base/page-plg.mkiv
index 0921682c4..01f8f42c2 100644
--- a/tex/context/base/page-plg.mkiv
+++ b/tex/context/base/page-plg.mkiv
@@ -128,11 +128,11 @@
\hsize\paperwidth
\vsize\paperheight
\setbox\pagebox\vbox
- {\doifbothsidesoverruled
- {\let\!!stringa\v!page}
- {\let\!!stringa\v!rightpage}
- {\let\!!stringa\v!leftpage}%
- \getvalue{\??ly\c!method:\!!stringa}}%
+% {\doifbothsidesoverruled
+% {\csname\??layoutmethod\v!page\endcsname}
+% {\csname\??layoutmethod\v!rightpage\endcsname}
+% {\csname\??layoutmethod\v!leftpage\endcsname}}%
+ {\csname\??layoutmethod\doifbothsidesoverruled\v!page\v!rightpage\v!leftpage\endcsname}%
\wd\pagebox\paperwidth
\ht\pagebox\paperheight
\dp\pagebox\zeropoint}
@@ -187,8 +187,8 @@
% to be done nicely (proper namespacing)
-\setvalue{\??ly:m:\v!leftpage }{\csname\??ly:m:\v!page\endcsname}
-\setvalue{\??ly:m:\v!rightpage}{\csname\??ly:m:\v!page\endcsname}
+\setvalue{\??layoutmethod\v!leftpage }{\csname\??layoutmethod\v!page\endcsname}
+\setvalue{\??layoutmethod\v!rightpage}{\csname\??layoutmethod\v!page\endcsname}
\unexpanded\def\startpagelayout
{\bgroup
@@ -199,6 +199,6 @@
\def\start_page_layout[#1]#2\stoppagelayout
{\egroup
- \setvalue{\??ly:m:#1}{#2}}
+ \setvalue{\??layoutmethod#1}{#2}}
\protect \endinput
diff --git a/tex/context/base/page-txt.mkvi b/tex/context/base/page-txt.mkvi
index ff78ff89d..4d33e6c20 100644
--- a/tex/context/base/page-txt.mkvi
+++ b/tex/context/base/page-txt.mkvi
@@ -38,7 +38,15 @@
%D \showsetup{setupfooter}
%D \showsetup{setupbottom}
-\installcommandhandler \??tk {layoutelement} \??tk
+\installcorenamespace{layouttexts}
+\installcorenamespace{layouttextsline}
+\installcorenamespace{layouttextsreset}
+\installcorenamespace{layouttextssynchronize}
+\installcorenamespace{layouttextstrut}
+\installcorenamespace{layouttextspecial}
+\installcorenamespace{layouttextcontent}
+
+\installcommandhandler \??layouttexts {layoutelement} \??layouttexts
% \appendtoks
% \resetlayoutelementparameter\c!lefttext % resolves better
@@ -87,15 +95,15 @@
\to \everysetuplayoutelement
\def\reset_layout_element_status#vertical%
- {\expandafter\gdef\csname\??tk:r:#vertical\endcsname{\set_layout_element_status_normal#vertical}}
+ {\expandafter\gdef\csname\??layouttextsreset#vertical\endcsname{\set_layout_element_status_normal#vertical}}
\def\set_layout_element_status_normal#vertical%
{\global\expandafter\let\csname\namedlayoutelementhash#vertical\c!state\endcsname\v!normal
- \global\expandafter\let\csname\??tk:r:#vertical\endcsname\relax
+ \global\expandafter\let\csname\??layouttextsreset#vertical\endcsname\relax
\synchronize_current_layout_element{#vertical}}
\def\synchronize_current_layout_element#vertical%
- {\xdef\previoustextstate{\getvalue{\??tk:x:#vertical}}%
+ {\xdef\previoustextstate{\csname\??layouttextssynchronize#vertical\endcsname}% can be a let
\edef\currenttextstate {\namedlayoutelementparameter{#vertical}\c!state}%
%\writestatus{>>}{[#vertical:\currenttextstate/\previoustextstate]}%
\ifx\currenttextstate\previoustextstate \else
@@ -107,7 +115,7 @@
\ifx\previoustextstate\v!high \calculatevsizes\recalculatebackgrounds \else
\ifx\currenttextstate \v!none \calculatevsizes\recalculatebackgrounds \else
\ifx\previoustextstate\v!none \calculatevsizes\recalculatebackgrounds \fi\fi\fi\fi
- \letgvalue{\??tk:x:#vertical}\currenttextstate}
+ \letgvalue{\??layouttextssynchronize#vertical}\currenttextstate}
\unexpanded\def\setuptop {\dotripleempty\setup_layout_text[\v!top ]}
\unexpanded\def\setupheader{\dotripleempty\setup_layout_text[\v!header]}
@@ -241,60 +249,6 @@
\resetlayoutelementparameter\c!middletext
\fi\fi\fi\fi\fi}
-% \def\setup_texts[#vertical][#horizontal][#a][#b][#c][#d]%
-% {\ifsixthargument
-% \edef\currentlayoutelement{#vertical:#horizontal}%
-% \setlayoutelementparameter\c!lefttext
-% {\process_layout_element_double
-% \c!leftstyle \c!leftcolor \c!leftwidth {#a}%
-% \c!rightstyle\c!rightcolor\c!rightwidth{#d}}%
-% \setlayoutelementparameter\c!righttext
-% {\process_layout_element_double
-% \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
-% \c!leftstyle \c!leftcolor \c!leftwidth {#c}}%
-% \else\iffifthargument
-% \sixthargumenttrue
-% \setup_texts[#vertical][\v!text][#horizontal][#a][#b][#c]%
-% \else\iffourthargument
-% \edef\currentlayoutelement{#vertical:#horizontal}%
-% \doifelsenothing{\detokenize{#a}}
-% {\resetlayoutelementparameter\c!lefttext}
-% {\setlayoutelementparameter\c!lefttext
-% {\process_layout_element_double
-% \c!leftstyle\c!leftcolor\c!leftwidth{#a}%
-% \c!leftstyle\c!leftcolor\c!leftwidth{#a}}}%
-% \doifelsenothing{\detokenize{#b}}
-% {\resetlayoutelementparameter\c!righttext}
-% {\setlayoutelementparameter\c!righttext
-% {\process_layout_element_double
-% \c!rightstyle\c!rightcolor\c!rightwidth{#b}%
-% \c!rightstyle\c!rightcolor\c!rightwidth{#b}}}%
-% \else\ifthirdargument
-% \fourthargumenttrue
-% \setup_texts[#vertical][\v!text][#horizontal][#horizontal][][]%
-% \else\ifsecondargument
-% \edef\currentlayoutelement{#vertical:\v!text}%
-% \resetlayoutelementparameter\c!lefttext
-% \resetlayoutelementparameter\c!righttext
-% \doifelsenothing{\detokenize{#horizontal}}
-% {\resetlayoutelementparameter\c!middletext}
-% {\setlayoutelementparameter\c!middletext
-% {\process_layout_element_single\c!style\c!color\c!width{#horizontal}}}%
-% \else
-% \edef\currentlayoutelement{#vertical:\v!text}%
-% \resetlayoutelementparameter\c!lefttext
-% \resetlayoutelementparameter\c!righttext
-% \resetlayoutelementparameter\c!middletext
-% \edef\currentlayoutelement{#vertical:\v!margin}%
-% \resetlayoutelementparameter\c!lefttext
-% \resetlayoutelementparameter\c!righttext
-% \resetlayoutelementparameter\c!middletext
-% \edef\currentlayoutelement{#vertical:\v!edge}%
-% \resetlayoutelementparameter\c!lefttext
-% \resetlayoutelementparameter\c!righttext
-% \resetlayoutelementparameter\c!middletext
-% \fi\fi\fi\fi\fi}
-
%D Left and right texts are swapped on odd and even pages, but
%D only when double sided typesetting is enabled.
@@ -303,10 +257,10 @@
\process_layout_element_double_odd
\process_layout_element_double_even}
-\def\process_layout_element_double_odd #lstyle#lstyle#lwidth#lcontent#rstyle#rcolor#rwidth#rcontent%
- {\process_layout_element_single#lstyle#lstyle#lwidth{#lcontent}}
+\def\process_layout_element_double_odd #lstyle#lcolor#lwidth#lcontent#rstyle#rcolor#rwidth#rcontent%
+ {\process_layout_element_single#lstyle#lcolor#lwidth{#lcontent}}
-\def\process_layout_element_double_even#lstyle#lstyle#lwidth#lcontent#rstyle#rcolor#rwidth#rcontent%
+\def\process_layout_element_double_even#lstyle#color#lwidth#lcontent#rstyle#rcolor#rwidth#rcontent%
{\process_layout_element_single#rstyle#rcolor#rwidth{#rcontent}}
%D The next macro will be cleaned up and made less messy and
@@ -320,14 +274,14 @@
\process_layout_element_single_indeed#style#color#width{#content}%
\fi}
-\setvalue{\??tk:s:\v!yes}{\setstrut\strut} % maybe more variants
+\setvalue{\??layouttextstrut\v!yes}{\setstrut\strut} % maybe more variants
\def\process_layout_element_single_indeed#style#color#width#content%
{\begingroup
\uselayoutelementstyleandcolor#style#color%
- \csname\??tk:s:\layoutelementparameter\c!strut\endcsname
- \ifcsname\??tk:p:\layout_element_content\endcsname
- \csname\??tk:p:\layout_element_content\endcsname
+ \csname\??layouttextstrut\layoutelementparameter\c!strut\endcsname
+ \ifcsname\??layouttextspecial\layout_element_content\endcsname
+ \csname\??layouttextspecial\layout_element_content\endcsname
\else
\edef\currentlayoutelementwidth{\layoutelementparameter#width}%
\ifx\currentlayoutelementwidth\empty
@@ -350,8 +304,8 @@
{\limitatetext{\getmarking[\layout_element_content][\v!first]}\currentlayoutelementwidth\unknown}
{\ignorecrlf\limitatetext{#content{}{}{}}\currentlayoutelementwidth\unknown}}
-\setvalue{\??tk:p:\v!pagenumber}{\place_layout_page_number}
-\setvalue{\??tk:p:\v!date }{\currentdate}
+\setvalue{\??layouttextspecial\v!pagenumber}{\place_layout_page_number}
+\setvalue{\??layouttextspecial\v!date }{\currentdate}
%D When specified, the texts are automatically limited in
%D length.
@@ -398,7 +352,7 @@
\unexpanded\def\place_layout_text_line#vertical%
{\set_layout_element_status#vertical%
- \csname\??tk:l:\ifcsname\??tk:l:\textlinestatus\endcsname\textlinestatus\else\s!unknown\fi\endcsname#vertical}
+ \csname\??layouttextsline\ifcsname\??layouttextsline\textlinestatus\endcsname\textlinestatus\else\s!unknown\fi\endcsname#vertical}
\unexpanded\def\doifelselayouttextline#vertical% shown or not
{\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}%
@@ -422,32 +376,31 @@
\newconditional\resyncaftertextline
-\setvalue{\??tk:l:\v!normal}{\place_layout_text_line_indeed}
-\setvalue{\??tk:l:\empty }{\place_layout_text_line_indeed}
+\setvalue{\??layouttextsline\v!normal}{\place_layout_text_line_indeed}
+\setvalue{\??layouttextsline\empty }{\place_layout_text_line_indeed}
-\letvalue{\??tk:l:\v!none}\gobbletwoarguments
-\letvalue{\??tk:l:\v!stop}\gobbletwoarguments
+\letvalue{\??layouttextsline\v!none}\gobbletwoarguments
+\letvalue{\??layouttextsline\v!stop}\gobbletwoarguments
-\setvalue{\??tk:l:\v!high}#vertical#height%
+\setvalue{\??layouttextsline\v!high}#vertical#height%
{\global\settrue\resyncaftertextline
\reset_layout_element_status#vertical}
-\setvalue{\??tk:l:\v!empty}#vertical#height%
+\setvalue{\??layouttextsline\v!empty}#vertical#height%
{\reset_layout_element_status#vertical}
-\setvalue{\??tk:l:\v!start}#vertical#height%
+\setvalue{\??layouttextsline\v!start}#vertical#height%
{\reset_layout_element_status#vertical%
\place_layout_text_line_indeed#vertical#height}
-\setvalue{\??tk:l:\v!nomarking}#vertical#height%
+\setvalue{\??layouttextsline\v!nomarking}#vertical#height%
{\bgroup
\reset_layout_element_status#vertical%
\settrue\inhibitgetmarking
- \let\dogetmarking\nogetmarking % obsolete in new marking mechanism
\place_layout_text_line_indeed#vertical#height%
\egroup}
-\setvalue{\??tk:l:\s!unknown}#vertical#height%
+\setvalue{\??layouttextsline\s!unknown}#vertical#height%
{\global\settrue\resyncaftertextline
\begingroup % new
\reset_layout_element_status#vertical%
@@ -462,11 +415,11 @@
%D is flushed.
\def\resetlayouttextlines % public
- {\csname\??tk:r:\v!top \endcsname
- \csname\??tk:r:\v!header\endcsname
- \csname\??tk:r:\v!text \endcsname
- \csname\??tk:r:\v!footer\endcsname
- \csname\??tk:r:\v!bottom\endcsname
+ {\csname\??layouttextsreset\v!top \endcsname
+ \csname\??layouttextsreset\v!header\endcsname
+ \csname\??layouttextsreset\v!text \endcsname
+ \csname\??layouttextsreset\v!footer\endcsname
+ \csname\??layouttextsreset\v!bottom\endcsname
\ifconditional\resyncaftertextline
\calculateglobalvsizes
\recalculatebackgrounds
@@ -480,12 +433,12 @@
\def\set_text_content[#vertical][#horizontal][#one][#two][#three]% header text middle text/text
{\iffifthargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\executeifdefined{\??tk:c:\c!text:#one}\c!middletext}%
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\executeifdefined{\??layouttextcontent\c!text:#one}\c!middletext}%
{\process_layout_element_double
\c!leftstyle \c!leftcolor \c!leftwidth {#two}%
\c!rightstyle\c!rightcolor\c!rightwidth{#three}}%
\else\iffourthargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\executeifdefined{\??tk:c:\c!text:#one}\c!middletext}%
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\executeifdefined{\??layouttextcontent\c!text:#one}\c!middletext}%
{\process_layout_element_double
\c!leftstyle \c!leftcolor \c!leftwidth {#two}%
\c!rightstyle\c!rightcolor\c!rightwidth{#two}}%
@@ -502,16 +455,16 @@
\def\reset_text_content[#vertical][#horizontal][#tag]% header text middle
{\edef\currentlayoutelement{#vertical:#horizontal}%
\ifthirdargument
- \letvalueempty{\layoutelementhash\executeifdefined{\??tk:c:\c!text:#tag}\c!middletext}%
+ \letvalueempty{\layoutelementhash\executeifdefined{\??layouttextcontent\c!text:#tag}\c!middletext}%
\else\ifsecondargument
\resetlayoutelementparameter\c!lefttext
\resetlayoutelementparameter\c!middletext
\resetlayoutelementparameter\c!righttext
\fi\fi}
-\letvalue{\??tk:c:\c!middle:\c!text}\c!middletext
-\letvalue{\??tk:c:\c!left :\c!text}\c!lefttext
-\letvalue{\??tk:c:\c!right :\c!text}\c!righttext
+\letvalue{\??layouttextcontent\c!middle:\c!text}\c!middletext
+\letvalue{\??layouttextcontent\c!left :\c!text}\c!lefttext
+\letvalue{\??layouttextcontent\c!right :\c!text}\c!righttext
%D The placement of a whole line is handled by the next two
%D macros. These are hooked into the general purpose token
@@ -527,22 +480,22 @@
\def\place_layout_text_line_left_or_right#height%
{\goleftonpage
-% \hbox{%
- \setbox\layout_element_box\vbox to #height
- {\vsize#height\relax
- \normalbaselines
- \let\\\ignoredlinebreak
- \let\crlf\ignoredlinebreak
- \namedlayoutelementparameter\currentlayouttextline\c!before
- \doifbothsidesoverruled
- \place_layout_text_line_right
- \place_layout_text_line_right
- \place_layout_text_line_left
- \namedlayoutelementparameter\currentlayouttextline\c!after
- \kern\zeropoint}% keep the \dp, beware of \vtops, never change this!
- \dp\layout_element_box\zeropoint
- \box\layout_element_box
-% }%
+ \setbox\layout_element_box\vbox to #height
+ {\vsize#height\relax
+ %\hsize\zeropoint % hack so that e.g. after=\hairline gives predictable results
+ \hsize\totaltextwidth
+ \normalbaselines
+ \let\\\ignoredlinebreak
+ \let\crlf\ignoredlinebreak
+ \namedlayoutelementparameter\currentlayouttextline\c!before
+ \doifbothsidesoverruled
+ \place_layout_text_line_right
+ \place_layout_text_line_right
+ \place_layout_text_line_left
+ \namedlayoutelementparameter\currentlayouttextline\c!after
+ \kern\zeropoint}% keep the \dp, beware of \vtops, never change this!
+ \dp\layout_element_box\zeropoint
+ \box\layout_element_box
\vskip-#height\relax}
\let\extra_at_margin_left \plusone
@@ -630,7 +583,7 @@
\def\place_layout_element_indeed#width#content%
{\vbox % to \vsize
- {\hsize#1\relax
+ {\hsize#width\relax
\layoutelementparameter\c!before
\setlayoutcomponentattribute\currentlayoutelement
\hbox \layoutcomponentboxattribute to #width{#content}%
@@ -911,7 +864,7 @@
\vbox \layoutcomponentboxattribute to \textheight
{\offinterlineskip
\freezetextwidth
- \hsize\textwidth % local variant of \sethsize
+ \hsize\textwidth % local variant of \sethsize <<< in columns?
\boxmaxdepth\maxdepth
\noindent % content can be < \hsize
\dopagecontents#2#3}%
diff --git a/tex/context/base/phys-dim.mkiv b/tex/context/base/phys-dim.mkiv
index a82badb91..3a153281d 100644
--- a/tex/context/base/phys-dim.mkiv
+++ b/tex/context/base/phys-dim.mkiv
@@ -328,7 +328,11 @@
% only a space when a number is part of the unit
-\installcommandhandler \??un {unit} \??un
+\installcorenamespace {unit}
+\installcorenamespace {unitseparator}
+\installcorenamespace {unitspace}
+
+\installcommandhandler \??unit {unit} \??unit
\setupunit
[\c!alternative=, % done: text
@@ -362,12 +366,12 @@
\unexpanded\def\unitsbackspace {\negthinspace}
\unexpanded\def\installunitsseparator#1#2%
- {\setvalue{\??un:1:#1}{#2}}
+ {\setvalue{\??unitseparator#1}{#2}}
\unexpanded\def\dounitsseparator
{\edef\currentunitsseparator{\unitparameter\c!separator}%
- \csname\??un:1:%
- \ifcsname\??un:1:\currentunitsseparator\endcsname\currentunitsseparator\else\v!normal\fi
+ \csname\??unitseparator
+ \ifcsname\??unitseparator\currentunitsseparator\endcsname\currentunitsseparator\else\v!normal\fi
\endcsname}
\installunitsseparator\v!normal {\cdot}
@@ -377,13 +381,13 @@
\installunitsseparator\v!none {}
\unexpanded\def\installunitsspace#1#2%
- {\setvalue{\??un:2:#1}{#2}}
+ {\setvalue{\??unitspace#1}{#2}}
\unexpanded\def\dounitsspace
{\unskip % weird, why is unskip needed
\edef\currentunitsspace{\unitparameter\c!space}%
- \csname\??un:2:%
- \ifcsname\??un:2:\currentunitsspace\endcsname\currentunitsspace\else\v!normal\fi
+ \csname\??unitspace
+ \ifcsname\??unitspace\currentunitsspace\endcsname\currentunitsspace\else\v!normal\fi
\endcsname}
\installunitsspace\v!normal {\unitsmediumspace}
diff --git a/tex/context/base/s-inf-01.mkvi b/tex/context/base/s-inf-01.mkvi
index 40aea4eb7..51d3cbac8 100644
--- a/tex/context/base/s-inf-01.mkvi
+++ b/tex/context/base/s-inf-01.mkvi
@@ -46,7 +46,7 @@
local function collect(list,suffix,n)
local path = document.arguments.basepath or file.dirname(resolvers.find_file("context.mkiv"),".")
- local pattern = path .. "/*." .. suffix
+ local pattern = path .. "/*." .. suffix .. "$" -- avoid bla.tex~
local texfiles = dir.glob(pattern)
for _, name in ipairs(texfiles) do
local base = file.basename(name)
diff --git a/tex/context/base/s-inf-03.mkiv b/tex/context/base/s-inf-03.mkiv
index 85440f0db..c9cfd54a1 100644
--- a/tex/context/base/s-inf-03.mkiv
+++ b/tex/context/base/s-inf-03.mkiv
@@ -108,14 +108,11 @@ end
backgroundcolor=darkgray,
backgroundoffset=2mm]
-\setuplayout
- [page]
-
-\startstandardmakeup
+\startpagemakeup
\vfill
\pagereference[global]
- \startnarrower[5mm]
- \raggedcenter
+ \startnarrower[10mm]
+ \setupalign[nothyhenated,middle,broad]
\TitlePageFont \setupinterlinespace
\getbuffer % luabuffer
\par
@@ -126,9 +123,7 @@ end
\par
% \hskip10mm\scale[width=\dimexpr\paperwidth-20mm\relax]{\white \strut Lua infrastructure \emdash\ \currentdate}
\vfill
-\stopstandardmakeup
-
-\setuplayout
+\stoppagemakeup
\setupbackgrounds
[page]
diff --git a/tex/context/base/scrn-bar.mkvi b/tex/context/base/scrn-bar.mkvi
index de67a6ee5..3be46d915 100644
--- a/tex/context/base/scrn-bar.mkvi
+++ b/tex/context/base/scrn-bar.mkvi
@@ -57,7 +57,9 @@
%D \stoptext
%D \stoptyping
-\installframedcommandhandler \??ib {interactionbar} \??ib
+\installcorenamespace{interactionbar}
+
+\installframedcommandhandler \??interactionbar {interactionbar} \??interactionbar
\unexpanded\def\interactionbar
{\dodoubleempty\scrn_bar_direct}
@@ -76,7 +78,6 @@
\endgroup
\fi}
-
\newdimen\scrn_bar_width
\newdimen\scrn_bar_height
\newdimen\scrn_bar_depth
diff --git a/tex/context/base/scrn-but.mkvi b/tex/context/base/scrn-but.mkvi
index 1a5d0f0f6..dbb66e32e 100644
--- a/tex/context/base/scrn-but.mkvi
+++ b/tex/context/base/scrn-but.mkvi
@@ -44,13 +44,15 @@
%D
%D \showsetup{setupbuttons}
-\installframedcommandhandler \??bt {button} \??bt
+\installcorenamespace{button}
+\installcorenamespace{buttonlocation}
+
+\installframedcommandhandler \??button {button} \??button
\let\setupbuttons\setupbutton
\appendtoks
\setuevalue\currentbutton{\scrn_button_direct{\currentbutton}}%
-% \setevalue{\??bt:\currentbutton\s!parent}{\currentbuttonhash}% framed
\to \everydefinebutton
\unexpanded\def\scrn_button_direct#tag%
@@ -142,13 +144,13 @@
%D The renderers:
-\expandafter\let\csname\??bt:\c!location:\v!yes \endcsname\zerocount
-\expandafter\let\csname\??bt:\c!location:\v!empty \endcsname\plusone
-\expandafter\let\csname\??bt:\c!location:\v!no \endcsname\plustwo
-\expandafter\let\csname\??bt:\c!location:\v!none \endcsname\plusthree
-\expandafter\let\csname\??bt:\c!location:\v!normal \endcsname\plusone % default
-\expandafter\let\csname\??bt:\c!location:\s!default\endcsname\plusone % default
-\expandafter\let\csname\??bt:\c!location:\s!empty \endcsname\plusone % default
+\expandafter\let\csname\??buttonlocation\v!yes \endcsname\zerocount
+\expandafter\let\csname\??buttonlocation\v!empty \endcsname\plusone
+\expandafter\let\csname\??buttonlocation\v!no \endcsname\plustwo
+\expandafter\let\csname\??buttonlocation\v!none \endcsname\plusthree
+\expandafter\let\csname\??buttonlocation\v!normal \endcsname\plusone % default
+\expandafter\let\csname\??buttonlocation\s!default\endcsname\plusone % default
+\expandafter\let\csname\??buttonlocation\s!empty \endcsname\plusone % default
\newconditional\scrn_button_skipped
@@ -156,7 +158,7 @@
{\begingroup
\attribute\referenceattribute\attributeunsetvalue
\global\setfalse\scrn_button_skipped
- \chardef\locationboxpagestate\csname\??bt:\c!location:#currentparameter\c!samepage\endcsname % ?? bt: todo
+ \chardef\locationboxpagestate\csname\??buttonlocation#currentparameter\c!samepage\endcsname % ?? bt: todo
\doifreferencefoundelse{#action}\scrn_button_make_yes\scrn_button_make_nop
#currentparameter%
#inheritedframed%
@@ -322,7 +324,13 @@
%D \setupinteractionmenu[right][samepage=none, unknownreference=none]
%D \stoptyping
-\installframedcommandhandler \??am {interactionmenu} \??am
+\installcorenamespace{menu}
+\installcorenamespace{menutoks}
+\installcorenamespace{menustate}
+\installcorenamespace{menupacker}
+\installcorenamespace{menualign}
+
+\installframedcommandhandler \??menu {interactionmenu} \??menu
\let\setupinteractionmenus\setupinteractionmenu
@@ -349,20 +357,20 @@
\fi\fi}
\def\scrn_menu_register#tag#category%
- {\ifcsname\??am:t:#category\endcsname \else
- \expandafter\newtoks \csname\??am:t:#category\endcsname
- \expandafter\setfalse\csname\??am:c:#category\endcsname
+ {\ifcsname\??menutoks#category\endcsname \else
+ \expandafter\newtoks \csname\??menutoks#category\endcsname
+ \expandafter\setfalse\csname\??menustate#category\endcsname
\fi
- \normalexpanded{\csname\??am:t:#category\endcsname{\the\csname\??am:t:#category\endcsname\scrn_menu_action{#tag}}}}
+ \normalexpanded{\csname\??menutoks#category\endcsname{\the\csname\??menutoks#category\endcsname\scrn_menu_action{#tag}}}}
\def\scrn_menu_actions#category%
- {\the\csname\??am:t:#category\endcsname}
+ {\the\csname\??menutoks#category\endcsname}
%D Fill menus:
\normalexpanded{\long\def\expandafter\noexpand\csname\e!start\v!interactionmenu\endcsname[#tag]#content\expandafter\noexpand\csname\e!stop\v!interactionmenu\endcsname}%
{\def\currentinteractionmenu{#tag}%
- \expandafter\settrue\csname\??am:c:\interactionmenuparameter\c!category\endcsname
+ \expandafter\settrue\csname\??menustate\interactionmenuparameter\c!category\endcsname
\setinteractionmenuparameter\c!menu{#content}}
\def\resetinteractionmenu[#tag]%
@@ -457,14 +465,14 @@
\ht\scrn_menu_box\scrn_menu_asked_height
\dp\scrn_menu_box\zeropoint}
-\setvalue{scrn_menu_align_\v!right }{\let\scrn_menu_left_align\raggedright}
-\setvalue{scrn_menu_align_\v!left }{\let\scrn_menu_left_align\raggedleft}
-\setvalue{scrn_menu_align_\v!flushright}{\let\scrn_menu_left_align\raggedleft}
-\setvalue{scrn_menu_align_\v!flushleft }{\let\scrn_menu_left_align\raggedright}
-\setvalue{scrn_menu_align_\v!middle }{\let\scrn_menu_left_align\raggedcenter}
-\setvalue{scrn_menu_align_\v!low }{\let\scrn_menu_top_align\vss\let\scrn_menu_bottom_align\relax}
-\setvalue{scrn_menu_align_\v!high }{\let\scrn_menu_top_align\relax\let\scrn_menu_bottom_align\vss}
-\setvalue{scrn_menu_align_\v!lohi }{\let\scrn_menu_top_align\vss\let\scrn_menu_bottom_align\vss}
+\setvalue{\??menualign\v!right }{\let\scrn_menu_left_align\raggedright}
+\setvalue{\??menualign\v!left }{\let\scrn_menu_left_align\raggedleft}
+\setvalue{\??menualign\v!flushright}{\let\scrn_menu_left_align\raggedleft}
+\setvalue{\??menualign\v!flushleft }{\let\scrn_menu_left_align\raggedright}
+\setvalue{\??menualign\v!middle }{\let\scrn_menu_left_align\raggedcenter}
+\setvalue{\??menualign\v!low }{\let\scrn_menu_top_align\vss\let\scrn_menu_bottom_align\relax}
+\setvalue{\??menualign\v!high }{\let\scrn_menu_top_align\relax\let\scrn_menu_bottom_align\vss}
+\setvalue{\??menualign\v!lohi }{\let\scrn_menu_top_align\vss\let\scrn_menu_bottom_align\vss}
\let\scrn_menu_left_align \relax
\let\scrn_menu_right_align \relax
@@ -472,7 +480,7 @@
\let\scrn_menu_bottom_align\relax
\def\scrn_menu_set_align
- {\csname scrn_menu_align_\interactionmenuparameter\c!itemalign\endcsname}
+ {\csname\??menualign\interactionmenuparameter\c!itemalign\endcsname}
%D Hook into the pagebuilder (as less testing as possible):
@@ -484,7 +492,7 @@
\fi}
\def\scrn_menu_insert_checked#location%
- {\ifconditional\csname\??am:c:#location\endcsname
+ {\ifconditional\csname\??menustate#location\endcsname
\scrn_menu_insert_indeed{#location}%
\fi}
@@ -497,19 +505,19 @@
\global\scrn_menu_next_distance\zeropoint
\let\scrn_menu_action\scrn_menu_package_indeed
\the\everysetmenucommands
- \csname\??am:\c!menu:\namedinteractionmenuparameter\askedinteractionmenulocation\c!alternative\endcsname
+ \csname\??menupacker\namedinteractionmenuparameter\askedinteractionmenulocation\c!alternative\endcsname
\fi \fi
\endgroup}
%D This calls: % can be \c!command for vertical/horizontal
-\setvalue{\??am:\c!menu:\v!vertical}% all menus
+\setvalue{\??menupacker\v!vertical}% all menus
{\let\scrn_menu_packager\scrn_menu_packager_vertical
\setbox\scrn_menu_box\hbox{\scrn_menu_actions\askedinteractionmenulocation}%
\scrn_menu_apply_final
\box\scrn_menu_box}
-\setvalue{\??am:\c!menu:\v!horizontal}% all menus
+\setvalue{\??menupacker\v!horizontal}% all menus
{\let\scrn_menu_packager\scrn_menu_packager_horizontal
\setbox\scrn_menu_box\vbox{\scrn_menu_actions\askedinteractionmenulocation}%
\scrn_menu_apply_final
@@ -774,7 +782,6 @@
\edef\currentinteractionmenu{#tag}%
\doif{\interactionmenuparameter\c!state}\v!local
{\letinteractionmenuparameter\c!state\v!start
- % \setinteractionmenuparameter\s!parent{\??am\askedinteractionmenulocation}% nice hack
\strictinteractionmenuparameter\c!menu}%
\endgroup}
@@ -927,10 +934,10 @@
%D Lists:
-\setvalue{\@@dodolistelement\v!left }{\def\dosomelistelement{\scrn_menu_list_element\v!left }}
-\setvalue{\@@dodolistelement\v!right }{\def\dosomelistelement{\scrn_menu_list_element\v!right }}
-\setvalue{\@@dodolistelement\v!top }{\def\dosomelistelement{\scrn_menu_list_element\v!top }}
-\setvalue{\@@dodolistelement\v!bottom}{\def\dosomelistelement{\scrn_menu_list_element\v!bottom}}
+\setvalue{\??listelement\v!left }{\def\dosomelistelement{\scrn_menu_list_element\v!left }}
+\setvalue{\??listelement\v!right }{\def\dosomelistelement{\scrn_menu_list_element\v!right }}
+\setvalue{\??listelement\v!top }{\def\dosomelistelement{\scrn_menu_list_element\v!top }}
+\setvalue{\??listelement\v!bottom}{\def\dosomelistelement{\scrn_menu_list_element\v!bottom}}
\def\scrn_menu_list_element#1#2#3#4#5#6#7%
{\startbut[internal(#3)]
diff --git a/tex/context/base/scrn-fld.mkvi b/tex/context/base/scrn-fld.mkvi
index 00c5ff36e..e5564a70c 100644
--- a/tex/context/base/scrn-fld.mkvi
+++ b/tex/context/base/scrn-fld.mkvi
@@ -100,17 +100,12 @@
%D When submitting a form, we need to tell the driver module
%D that we want \FDF\ or \HTML.
-\newtoks\everysetupforms
+\installcorenamespace {forms}
-\unexpanded\def\setupforms
- {\dosingleempty\scrn_forms_setup}
-
-\def\scrn_forms_setup[#settings]
- {\getparameters[\??fr][#settings]%
- \the\everysetupforms}
+\installdirectcommandhandler \??forms {forms}
\appendtoks
- \ctxcommand{setformsmethod("\@@frmethod")}%
+ \ctxcommand{setformsmethod("\formsparameter\c!method")}%
\to \everysetupforms
\setupforms
@@ -145,8 +140,11 @@
%D Now comes the real code:
-\installcommandhandler \??fd {fieldcategory} \??fd
-\installcommandhandler \??fb {fieldbody} \??fb
+\installcorenamespace{fieldcategory}
+\installcorenamespace{fieldbody}
+
+\installcommandhandler \??fieldcategory {fieldcategory} \??fieldcategory
+\installcommandhandler \??fieldbody {fieldbody} \??fieldbody
\newbox\scrn_field_box_body
@@ -163,10 +161,10 @@
\def\scrn_field_check_category
{\edef\currentfieldbodycategory{\fieldbodyparameter\c!category}%
\ifx\currentfieldbodycategory\empty
- \letfieldbodyparameter\s!parent\??fd
+ \letfieldbodyparameter\s!parent\??fieldcategory
%\setevalue{\currentfieldbodyhash\s!parent}{\namedfieldcategoryhash\empty}% to WS: not hash !
\else
- \normalexpanded{\setfieldbodyparameter{\s!parent}{\??fd\currentfieldbodycategory}}%
+ \normalexpanded{\setfieldbodyparameter{\s!parent}{\??fieldcategory\currentfieldbodycategory}}%
%\setevalue{\currentfieldbodyhash\s!parent}{\namedfieldcategoryhash\currentfieldbodycategory}% to WS: not hash !
\fi}
@@ -212,10 +210,12 @@
{\edef\currentfieldframecolor{\fieldbodyparameter\c!fieldframecolor}%
\ifx\currentfieldframecolor\empty\else
\getcolorattributevalue\currentfieldframecolor\currentfieldframecolorvalue
+ % == \edef\currentfieldframecolorvalue{\thecolorattribute\currentfieldframecolor}%
\fi
\edef\currentfieldbackgroundcolor{\fieldbodyparameter\c!fieldbackgroundcolor}%
\ifx\currentfieldbackgroundcolor\empty\else
\getcolorattributevalue\currentfieldbackgroundcolor\currentfieldbackgroundcolorvalue
+ % == \edef\currentfieldbackgroundcolorvalue{\thecolorattribute\currentfieldbackgroundcolor}%
\fi
\usefieldbodystyleandcolor\c!style\c!color
\ctxcommand{insertfield("\currentfieldbody", {
@@ -235,6 +235,7 @@
\ifx\currentfieldbackgroundcolor\empty \else
backgroundcolor = "\currentfieldbackgroundcolor",
backgroundcolorvalue = "\currentfieldbackgroundcolorvalue",
+
\fi
\ifx\currentfieldframecolor\empty \else
framecolor = "\currentfieldframecolor",
@@ -374,17 +375,21 @@
%D The traditional field command does some labeling and
%D boxing:
-\installparameterhandler \??wl {fieldlabelframed}
-\installparameterhandler \??wc {fieldcontentframed}
-\installparameterhandler \??wt {fieldtotalframed}
+\installcorenamespace{fieldlabel}
+\installcorenamespace{fieldcontent}
+\installcorenamespace{fieldtotal}
-\installsetuphandler \??wl {fieldlabelframed}
-\installsetuphandler \??wc {fieldcontentframed}
-\installsetuphandler \??wt {fieldtotalframed}
+\installparameterhandler \??fieldlabel {fieldlabelframed}
+\installparameterhandler \??fieldcontent {fieldcontentframed}
+\installparameterhandler \??fieldtotal {fieldtotalframed}
-\installinheritedframed {fieldlabelframed}
-\installinheritedframed {fieldcontentframed}
-\installinheritedframed {fieldtotalframed}
+\installsetuphandler \??fieldlabel {fieldlabelframed}
+\installsetuphandler \??fieldcontent {fieldcontentframed}
+\installsetuphandler \??fieldtotal {fieldtotalframed}
+
+\installinheritedframed {fieldlabelframed}
+\installinheritedframed {fieldcontentframed}
+\installinheritedframed {fieldtotalframed}
\unexpanded\def\setupfield {\doquintupleempty\scrn_field_setup_field}
\unexpanded\def\setupfields{\doquadrupleempty\scrn_field_setup_fields}
@@ -420,25 +425,25 @@
\def\scrn_field_setup_field[#tag][#variant][#totalsettings][#labelsettings][#fieldsettings]%
{\iffifthargument
- \definefieldcategory[#tag][\s!parent=\??wc#tag,#fieldsettings]
- \setupfieldtotalframed [#tag][\s!parent=\??wt,\c!alternative={#variant},#totalsettings]%
- \setupfieldlabelframed [#tag][\s!parent=\??wl,#labelsettings]%
- \setupfieldcontentframed[#tag][\s!parent=\??wc,#fieldsettings]%
+ \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#fieldsettings]
+ \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal,\c!alternative={#variant},#totalsettings]%
+ \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel,#labelsettings]%
+ \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#fieldsettings]%
\else\iffourthargument
- \definefieldcategory[#tag][\s!parent=\??wc#tag,#labelsettings]
- \setupfieldtotalframed [#tag][\s!parent=\??wt,\c!alternative={#variant},#totalsettings]%
- \setupfieldlabelframed [#tag][\s!parent=\??wl]%
- \setupfieldcontentframed[#tag][\s!parent=\??wc,#labelsettings]%
+ \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#labelsettings]
+ \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal,\c!alternative={#variant},#totalsettings]%
+ \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel]%
+ \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#labelsettings]%
\else\ifthirdargument
- \definefieldcategory[#tag][\s!parent=\??wc#tag,#totalsettings]
- \setupfieldtotalframed [#tag][\s!parent=\??wt,\c!alternative={#variant}]%
- \setupfieldlabelframed [#tag][\s!parent=\??wl]%
- \setupfieldcontentframed[#tag][\s!parent=\??wc,#totalsettings]%
+ \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#totalsettings]
+ \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal,\c!alternative={#variant}]%
+ \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel]%
+ \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#totalsettings]%
\else\ifsecondargument
- \definefieldcategory[#tag][\s!parent=\??wc#tag,#variant]
- \setupfieldtotalframed [#tag][\s!parent=\??wt]%
- \setupfieldlabelframed [#tag][\s!parent=\??wl]%
- \setupfieldcontentframed[#tag][\s!parent=\??wc,#variant]%
+ \definefieldcategory[#tag][\s!parent=\??fieldcontent#tag,#variant]
+ \setupfieldtotalframed [#tag][\s!parent=\??fieldtotal]%
+ \setupfieldlabelframed [#tag][\s!parent=\??fieldlabel]%
+ \setupfieldcontentframed[#tag][\s!parent=\??fieldcontent,#variant]%
\fi\fi\fi\fi}
\def\scrn_field_setup_fields[#variant][#totalsettings][#labelsettings][#fieldsettings]%
@@ -459,10 +464,10 @@
% just to get the chain right for no category:
-\definefieldcategory [][\s!parent=\??wc]
-% \setupfieldtotalframed [][\s!parent=\??wt]
-% \setupfieldlabelframed [][\s!parent=\??wl]
-% \setupfieldcontentframed[][\s!parent=\??wc]
+\definefieldcategory [][\s!parent=\??fieldcontent]
+%setupfieldtotalframed [][\s!parent=\??fieldtotal]
+%setupfieldlabelframed [][\s!parent=\??fieldlabel]
+%setupfieldcontentframed[][\s!parent=\??fieldcontent]
% no longer supported:
@@ -490,9 +495,9 @@
\let\currentfieldlabel\currentfieldbody
\fi
\ifx\currentfieldcategory\empty
- \setupfieldtotalframed [\currentfieldbody][\s!parent=\??wt]%
- \setupfieldlabelframed [\currentfieldbody][\s!parent=\??wl]%
- \setupfieldcontentframed[\currentfieldbody][\s!parent=\??wc]%
+ \setupfieldtotalframed [\currentfieldbody][\s!parent=\??fieldtotal]%
+ \setupfieldlabelframed [\currentfieldbody][\s!parent=\??fieldlabel]%
+ \setupfieldcontentframed[\currentfieldbody][\s!parent=\??fieldcontent]%
\definefieldcategory [\currentfieldbody]%
\setupfieldbody [\currentfieldbody][\c!category=\currentfieldbody]%
\let\currentfieldcategory\currentfieldbody
@@ -637,7 +642,9 @@
\newbox \scrn_tooltip_box_text
\newcount\scrn_tooltip_n
-\installframedcommandhandler \??wh {tooltip} \??wh
+\installcorenamespace{tooltip}
+
+\installframedcommandhandler \??tooltip {tooltip} \??tooltip
\setuptooltip
[\c!location=\v!right,
@@ -769,7 +776,7 @@
{\iflocation
\dontleavehmode
\begingroup
- \setupfieldcategory[\c!start=1,#settings]% was just \??fd
+ \setupfieldcategory[\c!start=1,#settings]% was just \??fieldcategory
\scrn_field_load_scripts
\definecollector
[fieldstack]%
diff --git a/tex/context/base/scrn-hlp.mkvi b/tex/context/base/scrn-hlp.mkvi
index b1a8a10d4..a6aa5b9f1 100644
--- a/tex/context/base/scrn-hlp.mkvi
+++ b/tex/context/base/scrn-hlp.mkvi
@@ -60,7 +60,9 @@
\definesystemattribute[help][public]
-\installframedcommandhandler \??wp {help} \??wp
+\installcorenamespace{popuphelp}
+
+\installframedcommandhandler \??popuphelp {help} \??popuphelp
\setuphelp
[\c!frame=\v!off,
@@ -104,7 +106,7 @@
\def\scrn_help_start_indeed[#reference]%
{\edef\currenthelpreference{#reference}%
- \dostartbuffer[\currenthelp][\e!start\currenthelp][\e!stop\currenthelp]}
+ \grabbufferdatadirect\currenthelp{\e!start\currenthelp}{\e!stop\currenthelp}}
\unexpanded\def\scrn_help_stop
{\iflocation
diff --git a/tex/context/base/scrn-ini.mkvi b/tex/context/base/scrn-ini.mkvi
index a5a50cddd..561f2e572 100644
--- a/tex/context/base/scrn-ini.mkvi
+++ b/tex/context/base/scrn-ini.mkvi
@@ -27,7 +27,9 @@
%D
%D \showsetup{setupinteraction}
-\installswitchcommandhandler \??ia {interaction} \??ia
+\installcorenamespace{interaction}
+
+\installswitchcommandhandler \??interaction {interaction} \??interaction
\let\currentinteraction\empty
diff --git a/tex/context/base/scrn-pag.mkvi b/tex/context/base/scrn-pag.mkvi
index ca5305304..fc6215def 100644
--- a/tex/context/base/scrn-pag.mkvi
+++ b/tex/context/base/scrn-pag.mkvi
@@ -19,8 +19,10 @@
\unprotect
-\installparameterhandler \??sc {interactionscreen}
-\installsetuphandler \??sc {interactionscreen}
+\installcorenamespace{interactionscreen}
+
+\installparameterhandler \??interactionscreen {interactionscreen}
+\installsetuphandler \??interactionscreen {interactionscreen}
\newdimen\canvaswidth
\newdimen\canvasheight
diff --git a/tex/context/base/scrn-wid.mkvi b/tex/context/base/scrn-wid.mkvi
index 09d42673b..26b06f759 100644
--- a/tex/context/base/scrn-wid.mkvi
+++ b/tex/context/base/scrn-wid.mkvi
@@ -64,7 +64,10 @@
\newbox\scrn_attachment_box_link
\newbox\scrn_attachment_box_symbol
-\installcommandhandler\??at{attachment}\??at
+\installcorenamespace{attachment}
+\installcorenamespace{attachmentlocation}
+
+\installcommandhandler \??attachment {attachment} \??attachment
\let\setupattachments\setupattachment % convenience and compatibility
@@ -94,7 +97,7 @@
{\ifsecondargument
\begingroup
\def\currentattachment{_}%
- \setupcurrentattachment[#settings,\s!parent=\??at]%
+ \setupcurrentattachment[#settings,\s!parent=\??attachment]%
\ctxcommand{registerattachment{
tag = "#tag",
registered = "#tag",
@@ -160,7 +163,7 @@
{\doifassignmentelse{#registered}
{\def\scrn_attachment_stop{\scrn_attachment_inject[\v!auto][\c!buffer=\v!attachment,#registered]\egroup}}%
{\def\scrn_attachment_stop{\scrn_attachment_inject[#registered][\c!buffer=\v!attachment,#settings]\egroup}}}%
- \dostartbuffer[\v!attachment][\e!start\currentattachment][\e!stop\currentattachment]}
+ \grabbufferdatadirect\v!attachment{\e!start\currentattachment}{\e!stop\currentattachment}}
\def\scrn_attachment_start_ignore
{\expandafter\gobbleuntil\csname\e!stop\currentattachment\endcsname}
@@ -194,7 +197,7 @@
height = \number\dimexpr\currentattachmentheight\relax,
depth = \number\dimexpr\currentattachmentdepth \relax,
color = "\attachmentparameter\c!color",
- colormodel = \number\currentcolormodel,
+ colormodel = \number\attribute\colormodelattribute,
colorvalue = \thecolorattribute{\attachmentparameter\c!color},
transparencyvalue = \thetransparencyattribute{\attachmentparameter\c!color},
symbol = "\currentattachmentsymbol",
@@ -222,16 +225,16 @@
\def\scrn_attachment_place
{\executeifdefined
- {\??at:\c!location:\attachmentparameter\c!location}\hbox
+ {\??attachmentlocation\attachmentparameter\c!location}\hbox
{\box\scrn_attachment_box_link}}
-\setvalue{\??at:\c!location:\v!inmargin }{\inmargin }
-\setvalue{\??at:\c!location:\v!leftedge }{\inleftedge }
-\setvalue{\??at:\c!location:\v!rightedge }{\inrightedge }
-\setvalue{\??at:\c!location:\v!leftmargin }{\inleftmargin }
-\setvalue{\??at:\c!location:\v!rightmargin}{\inrightmargin}
-\setvalue{\??at:\c!location:\v!high }{\high}
-\setvalue{\??at:\c!location:\v!none }{\scrn_attachment_collect}
+\setvalue{\??attachmentlocation\v!inmargin }{\inmargin }
+\setvalue{\??attachmentlocation\v!leftedge }{\inleftedge }
+\setvalue{\??attachmentlocation\v!rightedge }{\inrightedge }
+\setvalue{\??attachmentlocation\v!leftmargin }{\inleftmargin }
+\setvalue{\??attachmentlocation\v!rightmargin}{\inrightmargin}
+\setvalue{\??attachmentlocation\v!high }{\high}
+\setvalue{\??attachmentlocation\v!none }{\scrn_attachment_collect}
\def\scrn_attachment_collect#content%
{\global\setbox\scrn_attachment_box_collect\hbox\bgroup
@@ -348,7 +351,10 @@
%
% test
-\installcommandhandler \??cc {comment} \??cc
+\installcorenamespace{comment}
+\installcorenamespace{commentlocation}
+
+\installcommandhandler \??comment {comment} \??comment
\newbox\scrn_comment_box_collect
\newbox\scrn_comment_box_rendering
@@ -416,7 +422,7 @@
{\setupcurrentcomment[\currentcomment][#title]}
{\setupcurrentcomment[\currentcomment][\c!title=#title,#settings]}%
\def\scrn_comment_stop{\scrn_comment_inject\egroup}%
- \dostartbuffer[\v!comment][\e!start\currentcomment][\e!stop\currentcomment]}
+ \grabbufferdatadirect\v!comment{\e!start\currentcomment}{\e!stop\currentcomment}}
\def\scrn_comment_start_ignore
{\expandafter\gobbleuntil\csname\e!stop\currentcomment\endcsname}
@@ -457,7 +463,7 @@
depth = \number\dimexpr\currentcommentdepth,
nx = \commentparameter\c!nx,
ny = \commentparameter\c!ny,
- colormodel = \number\currentcolormodel,
+ colormodel = \number\attribute\colormodelattribute,
colorvalue = \thecolorattribute{\commentparameter\c!color},
transparencyvalue = \thetransparencyattribute{\commentparameter\c!color},
option = "\commentparameter\c!option", % todo
@@ -477,16 +483,16 @@
\def\scrn_comment_place
{\executeifdefined
- {\??cc:\c!location:\commentparameter\c!location}\hbox
+ {\??commentlocation\commentparameter\c!location}\hbox
{\hbox{\box\scrn_comment_box_link}}}
-\setvalue{\??cc:\c!location:\v!inmargin }{\inmargin }
-\setvalue{\??cc:\c!location:\v!leftedge }{\inleftedge }
-\setvalue{\??cc:\c!location:\v!rightedge }{\inrightedge }
-\setvalue{\??cc:\c!location:\v!leftmargin }{\inleftmargin }
-\setvalue{\??cc:\c!location:\v!rightmargin}{\inrightmargin}
-\setvalue{\??cc:\c!location:\v!high }{\high}
-\setvalue{\??cc:\c!location:\v!none }{\scrn_comment_collect}
+\setvalue{\??commentlocation\v!inmargin }{\inmargin }
+\setvalue{\??commentlocation\v!leftedge }{\inleftedge }
+\setvalue{\??commentlocation\v!rightedge }{\inrightedge }
+\setvalue{\??commentlocation\v!leftmargin }{\inleftmargin }
+\setvalue{\??commentlocation\v!rightmargin}{\inrightmargin}
+\setvalue{\??commentlocation\v!high }{\high}
+\setvalue{\??commentlocation\v!none }{\scrn_comment_collect}
\def\scrn_comment_collect#content%
{\global\setbox\scrn_comment_box_collect\hbox\bgroup
diff --git a/tex/context/base/scrp-ini.mkiv b/tex/context/base/scrp-ini.mkiv
index d0ee8770d..1c2b1dbaf 100644
--- a/tex/context/base/scrp-ini.mkiv
+++ b/tex/context/base/scrp-ini.mkiv
@@ -26,7 +26,9 @@
\unprotect
-\installcommandhandler\??ls{script}\??ls
+\installcorenamespace{script}
+
+\installcommandhandler \??script {script} \??script
% presets are global and are currently defined in lua
diff --git a/tex/context/base/spac-ali.mkiv b/tex/context/base/spac-ali.mkiv
index 371701a01..16fdddea6 100644
--- a/tex/context/base/spac-ali.mkiv
+++ b/tex/context/base/spac-ali.mkiv
@@ -15,18 +15,31 @@
\unprotect
+%D The \type {new} and \type {old} methods are gone as we now have \type
+%D {flush*} variants. Starting at the last day of 2011 both methods are
+%D merged into one and caching has been added, which makes switching
+%D twice as fast.
+
\registerctxluafile{spac-ali}{1.001}
\definesystemattribute[realign] [public] % might be combined with the next one
\definesystemattribute[alignstate][public] % will make a single attributes for several states
+\appendtoks
+ \attribute\realignattribute \attributeunsetvalue
+ \attribute\alignstateattribute\attributeunsetvalue
+\to \everyforgetall
+
\unexpanded\def\resetrealignsignal{\attribute\realignattribute\attributeunsetvalue}
\unexpanded\def\signalinnerrealign{\ctxcommand{setrealign(2)}}
\unexpanded\def\signalouterrealign{\ctxcommand{setrealign(1)}}
-\appendtoks
- \resetrealignsignal
-\to \everyforgetall
+\installcorenamespace{aligncommand}
+\installcorenamespace{alignhorizontal}
+\installcorenamespace{alignvertical}
+\installcorenamespace{alignmentcache}
+
+\newtoks\everyresetalign % todo
% We will not use bodydir and pagedir so we disable them. That way we get
% normal hyperlink support.
@@ -122,344 +135,609 @@
display:\ifconditional\displaylefttoright l2r\else r2l\fi\space
inline:\ifconditional \inlinelefttoright l2r\else r2l\fi\space
]\endgroup}
-
-\def\dodefinehbox[#1][#2]%
- {\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}}
-\unexpanded\def\definehbox
- {\dodoubleargument\dodefinehbox}
+% Tolerance and hyphenation
-% To be redone:
+\newcount\hyphenminoffset
-\unexpanded\def\ibox#1#2#3%
- {\vbox\bgroup
- \forgetall
- \let\\=\endgraf
- \ifdoublesided\signalinnerrealign\fi
- \doifrightpageelse\raggedright\raggedleft
- \let\next}
+\ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi
-\unexpanded\def\obox#1#2#3%
- {\vbox\bgroup
- \forgetall
- \let\\=\endgraf
- \ifdoublesided\signalouterrealign\fi
- \doifrightpageelse\raggedleft\raggedright
- \let\next}
+\unexpanded\def\lesshyphens
+ {\advance\hyphenminoffset\plusone
+ \sethyphenationvariables}
-\def\@@ragged@@command{@@ragged@@c}
-\def\@@ragged@@hbox {@@ragged@@h}
-\def\@@ragged@@vbox {@@ragged@@v}
+\unexpanded\def\morehyphens
+ {\ifcase\hyphenminoffset \else
+ \advance\hyphenminoffset\minusone
+ \fi
+ \sethyphenationvariables}
-\def\dosetraggedvbox#1% can be more keys
- {\let\raggedbox\vbox
- \processcommacommand[#1]\dodosetraggedvbox}
-\def\dosetraggedhbox#1% can be more keys
- {\let\raggedbox\hbox
- \processcommacommand[#1]\dodosetraggedhbox}
+\unexpanded\def\nohyphens % % % % % not clever, we still hyphenate but supress application
+ {\ifx\dohyphens\relax
+ \edef\dohyphens
+ {\hyphenpenalty \the\hyphenpenalty
+ \exhyphenpenalty\the\exhyphenpenalty
+ \relax}%
+ \fi
+ \hyphenpenalty\plustenthousand
+ \exhyphenpenalty\plustenthousand}
-\def\dodosetraggedvbox#1%
- {\ifcsname\@@ragged@@vbox#1\endcsname
- \csname\@@ragged@@vbox#1\endcsname
- \quitcommalist
- \fi}
+\let\dohyphens\relax
-\def\dodosetraggedhbox#1%
- {\ifcsname\@@ragged@@hbox#1\endcsname
- \csname\@@ragged@@hbox#1\endcsname
- \quitcommalist
- \fi}
+\newcount\c_spacing_minimum_tolerance \c_spacing_minimum_tolerance = 1500
+\newcount\c_spacing_normal_tolerance \c_spacing_normal_tolerance = 3000
+\newcount\c_spacing_extreme_tolerance \c_spacing_extreme_tolerance = 4500
-\setvalue{\@@ragged@@vbox\v!left }{\let\raggedbox\lbox}
-\setvalue{\@@ragged@@vbox\v!right }{\let\raggedbox\rbox}
-\setvalue{\@@ragged@@vbox\v!middle }{\let\raggedbox\cbox}
-\setvalue{\@@ragged@@vbox\v!inner }{\let\raggedbox\ibox}
-\setvalue{\@@ragged@@vbox\v!outer }{\let\raggedbox\obox}
-\setvalue{\@@ragged@@vbox\v!flushleft }{\let\raggedbox\rbox}
-\setvalue{\@@ragged@@vbox\v!flushright}{\let\raggedbox\lbox}
-\setvalue{\@@ragged@@vbox\v!center }{\let\raggedbox\cbox}
-\setvalue{\@@ragged@@vbox\v!no }{\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]}
+\def\spacing_raggedness_left {\plustwo\bodyfontsize}
+\def\spacing_raggedness_right {\plustwo\bodyfontsize}
+\def\spacing_raggedness_middle{\plussix\bodyfontsize} % overloaded below
-\setvalue{\@@ragged@@hbox\v!left }{\def\raggedbox{\doalignedline\v!left }}
-\setvalue{\@@ragged@@hbox\v!right }{\def\raggedbox{\doalignedline\v!right }}
-\setvalue{\@@ragged@@hbox\v!middle }{\def\raggedbox{\doalignedline\v!middle}}
-\setvalue{\@@ragged@@hbox\v!inner }{\def\raggedbox{\doalignedline\v!inner }}
-\setvalue{\@@ragged@@hbox\v!outer }{\def\raggedbox{\doalignedline\v!outer }}
-\setvalue{\@@ragged@@hbox\v!flushleft }{\def\raggedbox{\doalignedline\v!right }}
-\setvalue{\@@ragged@@hbox\v!flushright}{\def\raggedbox{\doalignedline\v!left }}
-\setvalue{\@@ragged@@hbox\v!center }{\def\raggedbox{\doalignedline\v!middle}}
+% oeps, hsize can be 0pt in which case we get a strange division
+% was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{}
-\newtoks\everyraggedcommand
+\def\spacing_raggedness_middle{\ifdim\hsize=\zeropoint\plussix\bodyfontsize\else.5\hsize\fi}
-\def\raggedcommand{\the\everyraggedcommand}
+\unexpanded\def\setraggedness#1% tricky .. we keep the global tolerance otherwise ... to be reconsidered
+ {\ifnum\tolerance<\c_spacing_minimum_tolerance
+ \tolerance\c_spacing_minimum_tolerance % small values have unwanted side effects
+ \else
+ % todo: take set value or none .. better done elsewhere (200 is normal)
+ \fi
+ \ifx\dohyphens\relax % was 2.5 in old implementation using scratch registers
+ \hyphenpenalty\dimexpr2.8\hsize/\dimexpr#1\relax\relax % 50 in raggedright/raggedleft
+ \fi}
-% slow, we can do this in lua ... some day
+\unexpanded\def\ragged_command_tolerant
+ {\tolerance\c_spacing_normal_tolerance}
-\let\raggedbox\relax
+\unexpanded\def\ragged_command_very_tolerant
+ {\tolerance\c_spacing_extreme_tolerance}
-% pretty slow (will be sped up)
+\unexpanded\def\ragged_command_stretch
+ {\emergencystretch\bodyfontsize}
-\newconstant\ragged_command_h_align_state
-\newconstant\ragged_command_v_align_state
-\newconstant\ragged_command_broad_state
+% Vertical
-\ifdefined\raggedonelinerstate \else \newconditional\raggedonelinerstate \fi % public
+\newconstant\c_spacing_state_vertical
-% \unexpanded\def\dosetraggedcommand#1% beware: #1=empty is ignored, keep that! assumes \forgetall
-% {\edef\askedraggedalign{#1}%
-% \ifx\askedraggedalign\empty
-% \nonosetraggedcommand
-% \else
-% \dodosetraggedcommand
-% \fi}
-%
-% \def\nonosetraggedcommand
-% {\everyraggedcommand{\resetrealignsignal}% \emptytoks maybe only when #1 <> empty
-% \let\raggedtopcommand\empty
-% \let\raggedbottomcommand\empty
-% \let\raggedbox\relax
-% \setfalse\raggedonelinerstate}
-%
-% \def\dodosetraggedcommand % beware: #1=empty is ignored, keep that!
-% {\everyraggedcommand{\resetrealignsignal}% \emptytoks maybe only when #1 <> empty
-% \let\raggedtopcommand\empty
-% \let\raggedbottomcommand\empty
-% \let\raggedbox\relax
-% \setfalse\raggedonelinerstate
-% \ifcsname\@@ragged@@command\askedraggedalign\endcsname % fast for one keyword and special table case
-% \!!doneafalse
-% \!!donebfalse
-% \!!donectrue
-% \csname\@@ragged@@command\askedraggedalign\endcsname
-% \else
-% \doifinsetelse\v!broad\askedraggedalign\!!doneatrue\!!doneafalse
-% \doifinsetelse\v!wide \askedraggedalign\!!donebtrue\!!donebfalse
-% \!!donectrue
-% \rawprocesscommacommand[\askedraggedalign]\dododosetraggedcommand
-% \fi}
+\unexpanded\def\spacing_vertical_none
+ {\let\raggedtopcommand \relax
+ \let\raggedbottomcommand\relax}
-% happens a lot: {\flushleft,broad,high} \veryraggedright\let\raggedbottomcommand\vfilll
+\unexpanded\def\spacing_vertical_lohi
+ {\let\raggedtopcommand \vfilll
+ \let\raggedbottomcommand\vfilll}
-\unexpanded\def\dosetraggedcommand#1% beware: #1=empty is ignored, keep that! assumes \forgetall
- {\edef\askedraggedalign{#1}%
- \ifx\askedraggedalign\empty
- \nonosetraggedcommand
- \else
- \dodosetraggedcommand
+\unexpanded\def\spacing_vertical_low
+ {\let\raggedtopcommand \vfilll
+ \let\raggedbottomcommand\relax}
+
+\unexpanded\def\spacing_vertical_high
+ {\let\raggedtopcommand \relax
+ \let\raggedbottomcommand\vfilll}
+
+\def\spacing_flush_vertical
+ {\ifcase\c_spacing_state_vertical
+ \spacing_vertical_none
+ \or
+ \spacing_vertical_lohi
+ \or
+ \spacing_vertical_low
+ \or
+ \spacing_vertical_high
\fi}
-\def\dodosetraggedcommand
- {\let\raggedtopcommand\empty
- \let\raggedbottomcommand\empty
- \let\raggedbox\relax
- \setfalse\raggedonelinerstate
- \everyraggedcommand\emptytoks
- \ragged_command_broad_state \zerocount
- \ragged_command_h_align_state\zerocount
- \ragged_command_v_align_state\zerocount
- \ifcsname\@@ragged@@command\askedraggedalign\endcsname
- \csname\@@ragged@@command\askedraggedalign\endcsname
- \else
- \rawprocesscommacommand[\askedraggedalign]\dododosetraggedcommand
- \fi
- % probably also ok: \normalexpanded{\everyraggedcommand{\resetrealignsignal\the\everyraggedcommand\ragged_command_flush_align}}}
- \normalexpanded{\everyraggedcommand\expandafter{\expandafter\resetrealignsignal\the\everyraggedcommand\ragged_command_flush_align}}}
+% Horizontal
+
+\ifdefined\raggedonelinerstate \else
+ \newconditional\raggedonelinerstate % public
+\fi
-\def\nonosetraggedcommand
- {\let\raggedtopcommand\empty
- \let\raggedbottomcommand\empty
- \let\raggedbox\relax
- \setfalse\raggedonelinerstate
- \everyraggedcommand{\resetrealignsignal}}
+\newconstant\raggedstatus % public
-\def\dododosetraggedcommand#1%
- {\csname\@@ragged@@command#1\endcsname}
+\newconstant\c_spacing_state_horizontal
+\newconstant\c_spacing_state_broad
-\unexpanded\def\ragged_command_tolerant {\tolerance3000\relax}
-\unexpanded\def\ragged_command_very_tolerant{\tolerance4500\relax}
-\unexpanded\def\ragged_command_stretch {\emergencystretch\bodyfontsize}
+\def\spacing_ragged_fill_amount {\plusone fil}
+\def\spacing_ragged_fill_amount_negative {\minusone fil}
+\def\spacing_ragged_fill_amount_double {\plustwo fil}
+\def\spacing_ragged_fill_amount_space {\plustwo fil} % can be added to xspace if we have a key
+\def\spacing_ragged_fill_amount_half {.5fil}
+\let\spacing_ragged_space_amount \interwordspace
+\def\spacing_ragged_space_amount_x {.5\emwidth}
-\def\ragged_command_flush_align
- {\ifcase\ragged_command_h_align_state
+\newskip\s_zero_plus_one_fil \s_zero_plus_one_fil = 0pt plus 1fil
+\newskip\s_zero_plus_zero \s_zero_plus_zero = 0pt plus 0pt
+
+% \!!plus ... slower than inline
+
+\unexpanded\def\spacing_horizontal_none
+ {\raggedstatus\zerocount
+ \attribute\alignstateattribute\attributeunsetvalue
+ \leftskip \plusone\leftskip
+ \rightskip \plusone\rightskip
+ \spaceskip \zeropoint
+ \xspaceskip \zeropoint
+ \parfillskip\s_zero_plus_one_fil} % new
+
+\unexpanded\def\spacing_horizontal_left
+ {\setraggedness\spacing_raggedness_left
+ \raggedstatus\plusone
+ \attribute\alignstateattribute\plusone
+ \leftskip \plusone\leftskip \!!plus\spacing_raggedness_left
+ \rightskip \plusone\rightskip\!!plus\zeropoint
+ \spaceskip \spacing_ragged_space_amount
+ \xspaceskip \spacing_ragged_space_amount_x
+ \parfillskip\s_zero_plus_zero
+ \parindent \zeropoint
+ \relax}
+
+\unexpanded\def\spacing_horizontal_center
+ {\setraggedness\spacing_raggedness_middle
+ \raggedstatus\plustwo
+ \attribute\alignstateattribute\plustwo
+ \leftskip \plusone\leftskip \!!plus\spacing_raggedness_middle
+ \rightskip \plusone\rightskip\!!plus\spacing_raggedness_middle
+ \spaceskip \spacing_ragged_space_amount
+ \xspaceskip \spacing_ragged_space_amount_x
+ \parfillskip\s_zero_plus_zero
+ \parindent \zeropoint
+ \relax}
+
+\unexpanded\def\spacing_horizontal_right
+ {\setraggedness\spacing_raggedness_right
+ \raggedstatus\plusthree
+ \attribute\alignstateattribute\plusthree
+ \leftskip \plusone\leftskip \!!plus\zeropoint
+ \rightskip \plusone\rightskip\!!plus\spacing_raggedness_right
+ \spaceskip \spacing_ragged_space_amount
+ \xspaceskip \spacing_ragged_space_amount_x
+ \parfillskip\s_zero_plus_one_fil
+ %\parindent \parindent
+ \relax}
+
+\unexpanded\def\spacing_horizontal_very_left
+ {\raggedstatus\plusone
+ \attribute\alignstateattribute\plusone
+ \leftskip \plusone\leftskip \!!plus\spacing_ragged_fill_amount
+ \rightskip \plusone\rightskip\!!plus\zeropoint
+ \spaceskip \spacing_ragged_space_amount
+ \xspaceskip \spacing_ragged_space_amount_x
+ \parfillskip\s_zero_plus_zero
+ \parindent \zeropoint
+ \relax}
+
+\unexpanded\def\spacing_horizontal_very_center
+ {\raggedstatus\plustwo
+ \attribute\alignstateattribute\plustwo
+ \leftskip \plusone\leftskip \!!plus\spacing_ragged_fill_amount
+ \rightskip \plusone\rightskip\!!plus\spacing_ragged_fill_amount
+ \spaceskip \spacing_ragged_space_amount
+ \xspaceskip \spacing_ragged_space_amount_x
+ \parfillskip\s_zero_plus_zero
+ \parindent \zeropoint
+ \relax}
+
+\unexpanded\def\spacing_horizontal_very_right
+ {\raggedstatus\plusthree
+ \attribute\alignstateattribute\plusthree
+ \leftskip \plusone\leftskip \!!plus\zeropoint
+ \rightskip \plusone\rightskip\!!plus\spacing_ragged_fill_amount
+ \spaceskip \spacing_ragged_space_amount
+ \xspaceskip \spacing_ragged_space_amount_x
+ \parfillskip\s_zero_plus_zero
+ %\parindent \parindent
+ \relax}
+
+\unexpanded\def\spacing_horizontal_wide_center
+ {\setraggedness\spacing_raggedness_middle
+ \raggedstatus\plustwo
+ \attribute\alignstateattribute\plustwo
+ \leftskip \plusone\leftskip \!!plus\spacing_ragged_fill_amount_half
+ \rightskip \plusone\rightskip\!!plus\spacing_ragged_fill_amount_half
+ \spaceskip \spacing_ragged_space_amount
+ \xspaceskip \spacing_ragged_space_amount_x
+ \parfillskip\s_zero_plus_zero
+ \parindent \zeropoint
+ \relax}
+
+\unexpanded\def\spacing_horizontal_centered_last_line
+ {\raggedstatus\zerocount
+ \attribute\alignstateattribute\attributeunsetvalue
+ \leftskip \plusone\leftskip \!!plus\spacing_ragged_fill_amount\relax
+ \rightskip \plusone\rightskip\!!plus\spacing_ragged_fill_amount_negative\relax
+ \spaceskip \zeropoint\relax
+ \xspaceskip \zeropoint\relax
+ \parfillskip\zeropoint\!!plus\spacing_ragged_fill_amount_double\relax
+ \parindent \zeropoint
+ \relax}
+
+\unexpanded\def\spacing_horizontal_right_tt % a plain command
+ {\tttf % brrr
+ \raggedstatus\plusthree
+ \attribute\alignstateattribute\plusthree
+ \leftskip \plusone\leftskip \!!plus\zeropoint\relax
+ \rightskip \plusone\rightskip\!!plus\spacing_raggedness_right\relax
+ \spaceskip \zeropoint\relax
+ \xspaceskip \zeropoint\relax
+ \parfillskip\s_zero_plus_zero
+ %\parindent \parindent
+ \relax}
+
+\unexpanded\def\spacing_horizontal_extra
+ {\xspaceskip\zeropoint\!!plus\spacing_ragged_fill_amount_space\relax}
+
+\def\spacing_flush_horizontal
+ {\ifcase\c_spacing_state_horizontal
% 0
- \notragged
+ \spacing_horizontal_none
\or
% 1 center
- \ifcase\ragged_command_broad_state
- \raggedcenter
+ \ifcase\c_spacing_state_broad
+ \spacing_horizontal_center
\or
- \veryraggedcenter
+ \spacing_horizontal_very_center
\or
- \raggedwidecenter
+ \spacing_horizontal_wide_center
\fi
\or
% 2 flush left
- \ifcase\ragged_command_broad_state
- \raggedright
+ \ifcase\c_spacing_state_broad
+ \spacing_horizontal_right
\else
- \veryraggedright
+ \spacing_horizontal_very_right
\fi
\or
% 3 flush right
- \ifcase\ragged_command_broad_state
- \raggedleft
+ \ifcase\c_spacing_state_broad
+ \spacing_horizontal_left
\else
- \veryraggedleft
+ \spacing_horizontal_very_left
\fi
\or
% 4 inner
\ifdoublesided
\signalinnerrealign
\fi
- \rightorleftpageaction\raggedright\raggedleft
+ \rightorleftpageaction\spacing_horizontal_right\spacing_horizontal_left
\or
% 5 outer
\ifdoublesided
\signalouterrealign
\fi
- \rightorleftpageaction\raggedleft\raggedright
+ \rightorleftpageaction\c_spacing_state_horizontal_left\spacing_horizontal_right
\or
% 6 oneliner
- \ifcase\ragged_command_broad_state
- \raggedright
+ \ifcase\c_spacing_state_broad
+ \spacing_horizontal_right
\else
- \veryraggedright
+ \spacing_horizontal_very_right
\fi
\parfillskip\zeropoint
\or
% 7 centered last line
- \centeredlastline
+ \spacing_horizontal_centered_last_line
\fi}
-\setvalue{\@@ragged@@command\v!broad }{\ragged_command_broad_state\plusone} % was donea
-\setvalue{\@@ragged@@command\v!wide }{\ragged_command_broad_state\plustwo} % was doneb
-
-\setvalue{\@@ragged@@command\v!hanging }{\everyraggedcommand\expandafter{\the\everyraggedcommand\enableprotruding}}
-\setvalue{\@@ragged@@command\v!nothanging }{\everyraggedcommand\expandafter{\the\everyraggedcommand\disableprotruding}}
-\setvalue{\@@ragged@@command\v!hz }{\everyraggedcommand\expandafter{\the\everyraggedcommand\enableadjusting}}
-\setvalue{\@@ragged@@command\v!nohz }{\everyraggedcommand\expandafter{\the\everyraggedcommand\disableadjusting}}
-%setvalue{\@@ragged@@command\v!spacing }{\everyraggedcommand\expandafter{\the\everyraggedcommand\enablespacehandling\enablekernhandling}}
-%setvalue{\@@ragged@@command\v!nospacing }{\everyraggedcommand\expandafter{\the\everyraggedcommand\disablespacehandling\disablekernhandling}}
-\setvalue{\@@ragged@@command\v!hyphenated }{\everyraggedcommand\expandafter{\the\everyraggedcommand\dohyphens}}
-\setvalue{\@@ragged@@command\v!nothyphenated }{\everyraggedcommand\expandafter{\the\everyraggedcommand\nohyphens}}
-
-\setvalue{\@@ragged@@command\v!tolerant }{\everyraggedcommand\expandafter{\the\everyraggedcommand\ragged_command_tolerant}}
-\setvalue{\@@ragged@@command\v!verytolerant }{\everyraggedcommand\expandafter{\the\everyraggedcommand\ragged_command_very_tolerant}}
-\setvalue{\@@ragged@@command\v!stretch }{\everyraggedcommand\expandafter{\the\everyraggedcommand\ragged_command_stretch}}
-
-\setvalue{\@@ragged@@command\v!flushright }{\ragged_command_h_align_state\plusthree}
-\setvalue{\@@ragged@@command\v!flushleft }{\ragged_command_h_align_state\plustwo}
-\setvalue{\@@ragged@@command\v!middle }{\ragged_command_h_align_state\plusone}
-\setvalue{\@@ragged@@command\v!no }{\ragged_command_h_align_state\plustwo}
-\setvalue{\@@ragged@@command\v!yes }{\ragged_command_h_align_state\zerocount}
-\setvalue{\@@ragged@@command\v!normal }{\ragged_command_h_align_state\zerocount}
-\setvalue{\@@ragged@@command\v!inner }{\ragged_command_h_align_state\plusfour}
-\setvalue{\@@ragged@@command\v!outer }{\ragged_command_h_align_state\plusfive}
-\setvalue{\@@ragged@@command\v!right }{\ragged_command_h_align_state\plustwo}
-\setvalue{\@@ragged@@command\v!left }{\ragged_command_h_align_state\plusthree}
-\setvalue{\@@ragged@@command\v!center }{\ragged_command_h_align_state\plusone}
-\setvalue{\@@ragged@@command\v!disable }{\ragged_command_h_align_state\plussix}
-\setvalue{\@@ragged@@command\v!last }{\ragged_command_h_align_state\plusseven}
-
-\setvalue{\@@ragged@@command\v!line }{\settrue\raggedonelinerstate}
-
-\setvalue{\@@ragged@@command\v!high }{\let\raggedbottomcommand\vfilll} % and since we lack a
-\setvalue{\@@ragged@@command\v!low }{\let\raggedtopcommand \vfilll} % proper keyword, but
-\setvalue{\@@ragged@@command\v!lohi }{\let\raggedbottomcommand\vfilll\let\raggedtopcommand\vfilll} % we do support the ugly laho (lohi)
-
-\setvalue{\@@ragged@@command\v!lesshyphenation}{\everyraggedcommand\expandafter{\the\everyraggedcommand\lesshyphens}}
-\setvalue{\@@ragged@@command\v!morehyphenation}{\everyraggedcommand\expandafter{\the\everyraggedcommand\morehyphens}}
-
-\setvalue{\@@ragged@@command\v!lefttoright }{\everyraggedcommand\expandafter{\the\everyraggedcommand\lefttoright}}
-\setvalue{\@@ragged@@command\v!righttoleft }{\everyraggedcommand\expandafter{\the\everyraggedcommand\righttoleft}}
-\setvalue{\@@ragged@@command l2r}{\everyraggedcommand\expandafter{\the\everyraggedcommand\lefttoright}}
-\setvalue{\@@ragged@@command r2l}{\everyraggedcommand\expandafter{\the\everyraggedcommand\righttoleft}}
-
-\setvalue{\@@ragged@@command\v!table }{\let\raggedbottomcommand\vfilll
- \ragged_command_broad_state\plusone
- \ragged_command_h_align_state\plustwo}
-
-% compare:
-%
-% \framed[width=4cm,align=no] {\hfil xxx}
-% \framed[width=4cm,align=disable]{\hfil xxx}
+% Page spacing:
-% More alignments:
+\newconstant\c_spacing_state_page
-% \hyphenpenalty = ( 2.5 * \hsize ) / \raggedness
-% \tolerance >= 1500 % was 200
-% \raggedness = 2 .. 6\bodyfontsize
+\def\bottomalignlimit{\plusthree\lineheight}
-\newconstant\raggedstatus % normal left center right
+\newconstant\bottomraggednessmode % 0=ragged 1=normal/align 2=baseline
-% \unexpanded\def\setalignstateattribute % unexpanded !
-% {\attribute\alignstateattribute\ifcase\raggedstatus\attributeunsetvalue\else\raggedstatus\fi}
+\unexpanded\def\raggedbottom
+ {\bottomraggednessmode\zerocount
+ \settopskip}
-\def\leftraggedness {2\bodyfontsize}
-\def\rightraggedness {2\bodyfontsize}
-\def\middleraggedness {6\bodyfontsize}
+\unexpanded\def\alignbottom
+ {\bottomraggednessmode\plusone
+ \settopskip}
-\def\middleraggedness {.5\hsize} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{}
+\unexpanded\def\baselinebottom
+ {\bottomraggednessmode\plustwo
+ \settopskip}
-% oeps, hsize can be 0pt in which case we get a strange division
+\let\normalbottom\alignbottom % downward compatible
-\def\middleraggedness {\ifdim\hsize=\zeropoint6\bodyfontsize\else.5\hsize\fi} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{}
+\unexpanded\def\setbottomalignmode#1%
+ {\bottomraggednessmode#1%
+ \settopskip}
-%D More hyphenation control, will be combined with align
-%D setup.
+\def\spacing_flush_page
+ {\ifcase\c_spacing_state_page
+ % keep state
+ \or
+ \raggedbottom
+ \or
+ \alignbottom
+ \or
+ \baselinebottom
+ \fi}
-\unexpanded\def\nohyphens % % % % % not clever, we still hyphenate but supress application
- {\ifx\dohyphens\relax
- \edef\dohyphens
- {\hyphenpenalty\the\hyphenpenalty
- \exhyphenpenalty\the\exhyphenpenalty\relax}%
+% Directions
+
+\newconstant\c_spacing_state_direction
+
+\def\spacing_flush_direction
+ {\ifcase\c_spacing_state_direction
+ % keep state
+ \or
+ \lefttoright
+ \or
+ \righttoleft
+ \fi}
+
+% Interesting is that the non cached version is also pretty efficient
+% and as we cache we seldom call that one now so one can debate the
+% speedup.
+
+\newtoks\t_spacing_set_alignment
+
+\let\raggedcommand \relax
+\let\updateraggedskips\relax
+
+% \unexpanded\def\spacing_set_text_align#1% beware: #1=empty is ignored, keep that! assumes \forgetall ... needs checking
+% {\edef\askedraggedalign{#1}%
+% \ifx\askedraggedalign\empty
+% \spacing_set_text_align_nop
+% \else
+% \spacing_set_text_align_yes
+% \fi}
+
+% \def\spacing_set_text_align_nop % as we cache (empty) anyway, this one can go
+% {%\let\raggedtopcommand \relax
+% %\let\raggedbottomcommand\relax
+% \let\raggedbox \relax % why
+% \t_spacing_set_alignment
+% {\resetrealignsignal
+% \setfalse\raggedonelinerstate
+% \let\raggedtopcommand \relax
+% \let\raggedbottomcommand\relax}}
+
+% \def\spacing_set_text_align_yes % hm, we could hash settings ! nice experiment
+% {%\let\raggedtopcommand\empty
+% %\let\raggedbottomcommand\empty
+% \let\raggedbox\relax % why
+% % we inherit hyphenation and tolerance
+% \t_spacing_set_alignment \emptytoks
+% \c_spacing_state_broad \zerocount
+% \c_spacing_state_horizontal\zerocount
+% \c_spacing_state_vertical \zerocount
+% \c_spacing_state_direction \zerocount % what is default ?
+% \c_spacing_state_page \zerocount
+% \ifcsname\??aligncommand\askedraggedalign\endcsname
+% \csname\??aligncommand\askedraggedalign\endcsname
+% \else
+% \rawprocesscommacommand[\askedraggedalign]\spacing_set_text_align_collect
+% \fi
+% \normalexpanded{\t_spacing_set_alignment
+% {\resetrealignsignal % can go as it is alway set
+% \setfalse\raggedonelinerstate % bad
+% \the\t_spacing_set_alignment
+% \spacing_flush_horizontal
+% \spacing_flush_vertical
+% \spacing_flush_direction
+% \spacing_flush_page
+% }}} % kept
+
+\unexpanded\def\spacing_set_text_align#1% what to do with empty (and forgetall)
+ {\edef\askedraggedalign{#1}%
+ \let\raggedbox\relax % why
+ % we inherit hyphenation and tolerance
+ \t_spacing_set_alignment \emptytoks
+ \c_spacing_state_broad \zerocount
+ \c_spacing_state_horizontal\zerocount
+ \c_spacing_state_vertical \zerocount
+ \c_spacing_state_direction \zerocount % what is default ?
+ \c_spacing_state_page \zerocount
+ \ifcsname\??aligncommand\askedraggedalign\endcsname
+ \csname\??aligncommand\askedraggedalign\endcsname
+ \else
+ \rawprocesscommacommand[\askedraggedalign]\spacing_set_text_align_collect
\fi
- \hyphenpenalty\plustenthousand
- \exhyphenpenalty\plustenthousand}
+ \normalexpanded{\t_spacing_set_alignment
+ {\resetrealignsignal % can go as it is alway set
+ \setfalse\raggedonelinerstate % bad
+ \the\t_spacing_set_alignment
+ \spacing_flush_horizontal
+ \spacing_flush_vertical
+ \spacing_flush_direction
+ \spacing_flush_page
+ }}} % kept
+
+\def\spacing_set_text_align_collect#1%
+ {\csname\??aligncommand#1\endcsname}
+
+\def\spacing_alignment_add_to_cache#1%
+ {\spacing_set_text_align{#1}
+ \edef\raggedcommand{\the\t_spacing_set_alignment}%
+ \global\expandafter\let\csname\??alignmentcache#1\endcsname\raggedcommand}
+
+% The regular align setter:
-\let\dohyphens\relax
+\unexpanded\def\setupalign
+ {\dosingleempty\spacing_setup_align}
-%D To prevent unwanted side effects, we also have to check
-%D for hyphens here:
+\def\spacing_setup_align[#1]% immediate
+ {\expandafter\let\expandafter\raggedcommand\csname\??alignmentcache#1\endcsname
+ \ifx\raggedcommand\relax
+ \spacing_alignment_add_to_cache{#1}%
+ \fi
+ \let\updateraggedskips\raggedcommand
+ \raggedcommand}
-\newskip\@@raggedskipa
-\newskip\@@raggedskipb
+% the local (key driven) setter:
-\unexpanded\def\setraggedness#1%
- {\ifnum\tolerance<1500\relax % small values have
- \tolerance1500\relax % unwanted side effects
+\unexpanded\def\spacing_setup_aligned#1% deferred
+ {\expandafter\let\expandafter\raggedcommand\csname\??alignmentcache#1\endcsname
+ \ifx\raggedcommand\relax
+ \spacing_alignment_add_to_cache{#1}%
\fi
- \ifx\dohyphens\relax
- % this code will be reconsidered / kind of fuzzy (and old)
- \@@raggedskipa 2.5\hsize
- \@@raggedskipb #1\relax
- \divide\@@raggedskipa \@@raggedskipb
- \hyphenpenalty\@@raggedskipa
+ \let\updateraggedskips\raggedcommand}
+
+\let\dosetraggedcommand\spacing_setup_aligned % sort of public
+
+% The keywords:
+
+\unexpanded\def\installalign#1#2% beware: commands must be unexpandable!
+ {\ifcsname\??aligncommand#1\endcsname \else
+ \setvalue{\??aligncommand#1}{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment#2}}%
\fi}
-\let\updateraggedskips\relax
+\letvalue{\??aligncommand\empty }\empty
+\setvalue{\??aligncommand\v!broad }{\c_spacing_state_broad \plusone }
+\setvalue{\??aligncommand\v!wide }{\c_spacing_state_broad \plustwo }
+
+\setvalue{\??aligncommand\v!bottom }{\c_spacing_state_page \plusone }
+\setvalue{\??aligncommand\v!height }{\c_spacing_state_page \plustwo }
+\setvalue{\??aligncommand\v!line }{\c_spacing_state_page \plusthree
+ % this will become another keyword (undocumented anyway)
+ \t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\settrue\raggedonelinerstate}}
+
+\setvalue{\??aligncommand\v!high }{\c_spacing_state_vertical \plusthree}
+\setvalue{\??aligncommand\v!low }{\c_spacing_state_vertical \plustwo }
+\setvalue{\??aligncommand\v!lohi }{\c_spacing_state_vertical \plusone }
+
+\setvalue{\??aligncommand\v!flushright }{\c_spacing_state_horizontal\plusthree}
+\setvalue{\??aligncommand\v!flushleft }{\c_spacing_state_horizontal\plustwo }
+\setvalue{\??aligncommand\v!middle }{\c_spacing_state_horizontal\plusone }
+\setvalue{\??aligncommand\v!no }{\c_spacing_state_horizontal\plustwo }
+\setvalue{\??aligncommand\v!yes }{\c_spacing_state_horizontal\zerocount}
+\setvalue{\??aligncommand\v!width }{\c_spacing_state_horizontal\zerocount}
+\setvalue{\??aligncommand\v!normal }{\c_spacing_state_horizontal\zerocount}
+\setvalue{\??aligncommand\v!reset }{\c_spacing_state_page \zerocount
+ \c_spacing_state_horizontal\zerocount}
+\setvalue{\??aligncommand\v!inner }{\c_spacing_state_horizontal\plusfour }
+\setvalue{\??aligncommand\v!outer }{\c_spacing_state_horizontal\plusfive }
+\setvalue{\??aligncommand\v!flushinner }{\c_spacing_state_horizontal\plusfive }
+\setvalue{\??aligncommand\v!flushouter }{\c_spacing_state_horizontal\plusfour }
+\setvalue{\??aligncommand\v!right }{\c_spacing_state_horizontal\plustwo }
+\setvalue{\??aligncommand\v!left }{\c_spacing_state_horizontal\plusthree}
+\setvalue{\??aligncommand\v!center }{\c_spacing_state_horizontal\plusone
+ \c_spacing_state_broad \plustwo }
+\setvalue{\??aligncommand\v!disable }{\c_spacing_state_horizontal\plussix }
+\setvalue{\??aligncommand\v!last }{\c_spacing_state_horizontal\plusseven}
+
+
+\setvalue{\??aligncommand\v!lefttoright }{\c_spacing_state_direction \plusone }
+\setvalue{\??aligncommand\v!righttoleft }{\c_spacing_state_direction \plustwo }
+\setvalue{\??aligncommand l2r}{\c_spacing_state_direction \plusone }
+\setvalue{\??aligncommand r2l}{\c_spacing_state_direction \plustwo }
+
+\setvalue{\??aligncommand\v!table }{\c_spacing_state_vertical \plusthree
+ \c_spacing_state_broad \plusone
+ \c_spacing_state_horizontal\plustwo }
+
+\setvalue{\??aligncommand\v!lesshyphenation}{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\lesshyphens}}
+\setvalue{\??aligncommand\v!morehyphenation}{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\morehyphens}}
+
+\setvalue{\??aligncommand\v!hanging }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\fonts_protruding_enable }}
+\setvalue{\??aligncommand\v!nothanging }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\fonts_protruding_disable}}
+\setvalue{\??aligncommand\v!hz }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\fonts_expansion_enable }}
+\setvalue{\??aligncommand\v!nohz }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\fonts_expansion_disable }}
+\setvalue{\??aligncommand\v!spacing }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\enablespacehandling \enablekernhandling }}
+\setvalue{\??aligncommand\v!nospacing }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\disablespacehandling\disablekernhandling}}
+\setvalue{\??aligncommand\v!hyphenated }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\dohyphens}}
+\setvalue{\??aligncommand\v!nothyphenated }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\nohyphens}}
+
+\setvalue{\??aligncommand\v!tolerant }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\ragged_command_tolerant}}
+\setvalue{\??aligncommand\v!verytolerant }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\ragged_command_very_tolerant}}
+\setvalue{\??aligncommand\v!stretch }{\t_spacing_set_alignment\expandafter{\the\t_spacing_set_alignment\ragged_command_stretch}}
+
+% Visible commands:
+
+\let\notragged \spacing_horizontal_none
+\let\forgetragged \spacing_horizontal_none
+\let\raggedleft \spacing_horizontal_left
+\let\raggedcenter \spacing_horizontal_center
+\let\raggedright \spacing_horizontal_right
+\let\veryraggedleft \spacing_horizontal_very_left
+\let\veryraggedcenter\spacing_horizontal_very_center
+\let\veryraggedright \spacing_horizontal_very_right
+\let\raggedwidecenter\spacing_horizontal_wide_center
+\let\centeredlastline\spacing_horizontal_centered_last_line
+\let\ttraggedright \spacing_horizontal_right_tt % a plain command
+
+% Box commands.
+
+\unexpanded\def\ibox#1#2#3%
+ {\vbox\bgroup
+ \forgetall
+ \let\\=\endgraf
+ \ifdoublesided\signalinnerrealign\fi
+ \doifrightpageelse\spacing_horizontal_right\spacing_horizontal_left
+ \let\next}
+
+\unexpanded\def\obox#1#2#3%
+ {\vbox\bgroup
+ \forgetall
+ \let\\=\endgraf
+ \ifdoublesided\signalouterrealign\fi
+ \doifrightpageelse\c_spacing_state_horizontal_left\spacing_horizontal_right
+ \let\next}
+
+\let\raggedbox\relax
+
+\def\dosetraggedvbox#1% can be more keys
+ {\let\raggedbox\vbox
+ \processcommacommand[#1]\dodosetraggedvbox}
+
+\def\dosetraggedhbox#1% can be more keys
+ {\let\raggedbox\hbox
+ \processcommacommand[#1]\dodosetraggedhbox}
+
+\def\dodosetraggedvbox#1%
+ {\ifcsname\??alignvertical#1\endcsname
+ \csname\??alignvertical#1\endcsname
+ \quitcommalist
+ \fi}
+
+\def\dodosetraggedhbox#1%
+ {\ifcsname\??alignhorizontal#1\endcsname
+ \csname\??alignhorizontal#1\endcsname
+ \quitcommalist
+ \fi}
+
+\setvalue{\??alignvertical \v!left }{\let\raggedbox\lbox}
+\setvalue{\??alignvertical \v!right }{\let\raggedbox\rbox}
+\setvalue{\??alignvertical \v!middle }{\let\raggedbox\cbox}
+\setvalue{\??alignvertical \v!inner }{\let\raggedbox\ibox}
+\setvalue{\??alignvertical \v!outer }{\let\raggedbox\obox}
+\setvalue{\??alignvertical \v!flushleft }{\let\raggedbox\rbox}
+\setvalue{\??alignvertical \v!flushright}{\let\raggedbox\lbox}
+\setvalue{\??alignvertical \v!center }{\let\raggedbox\cbox}
+\setvalue{\??alignvertical \v!no }{\def\raggedbox{\vbox\bgroup\spacing_horizontal_right\let\next=}]}
+
+% maybe \let's
+
+\setvalue{\??alignhorizontal\v!left }{\def\raggedbox{\doalignedline\v!left }}
+\setvalue{\??alignhorizontal\v!right }{\def\raggedbox{\doalignedline\v!right }}
+\setvalue{\??alignhorizontal\v!middle }{\def\raggedbox{\doalignedline\v!middle}}
+\setvalue{\??alignhorizontal\v!inner }{\def\raggedbox{\doalignedline\v!inner }}
+\setvalue{\??alignhorizontal\v!outer }{\def\raggedbox{\doalignedline\v!outer }}
+\setvalue{\??alignhorizontal\v!flushleft }{\def\raggedbox{\doalignedline\v!right }}
+\setvalue{\??alignhorizontal\v!flushright}{\def\raggedbox{\doalignedline\v!left }}
+\setvalue{\??alignhorizontal\v!center }{\def\raggedbox{\doalignedline\v!middle}}
+
+% The next one can be in use so we keep it around but oen should
+% be aware of possible interference.
\unexpanded\def\setraggedskips#1#2#3#4#5#6#7% never change this name (todo: inline this one .. less tracingall)
{\unexpanded\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}%
\updateraggedskips}
\def\dosetraggedskips#1#2#3#4#5#6#7%
- {\raggedstatus#1\relax
- \attribute\alignstateattribute\ifcase\raggedstatus\attributeunsetvalue\else\raggedstatus\fi
- \leftskip 1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3
- \rightskip 1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
- \spaceskip #4\relax
- \xspaceskip #5\relax
- \parfillskip\zeropoint\!!plus#6\relax
- \parindent #7\relax}
-
-\appendtoks
- \attribute\alignstateattribute\attributeunsetvalue
-\to \everyforgetall
-
-% \def\notragged%
-% {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}}
+ {\raggedstatus #1\relax
+ \leftskip 1\leftskip \!!plus#2\relax
+ \rightskip 1\rightskip\!!plus#3\relax
+ \spaceskip #4\relax
+ \xspaceskip #5\relax
+ \parfillskip \zeropoint\!!plus#6\relax
+ \parindent #7\relax
+ \attribute\alignstateattribute\ifcase\raggedstatus\attributeunsetvalue\else\raggedstatus\fi}
% older (context) names:
@@ -468,16 +746,16 @@
% tracing:
-\def\doshowpardata#1%
+\def\spacing_show_par_data#1%
{\ifx#1\relax\else
\hbox{\string#1: \the#1}\endgraf
- \expandafter\doshowpardata
+ \expandafter\spacing_show_par_data
\fi}
\unexpanded\def\showpardata
{\edef\thepardata
{\hbox{font: \fontname\font}\endgraf
- \doshowpardata
+ \spacing_show_par_data
\interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace
\hsize \vsize
\leftskip \rightskip
@@ -487,16 +765,15 @@
\displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty
\doublehyphendemerits \finalhyphendemerits \adjdemerits
\relax}%
+ \dontleavehmode
\begingroup
\dontshowcomposition
- \inleftmargin{\vsmash
- {\infofont
- \framed[\c!align=\v!right]{\thepardata}}}%
+ \inleftmargin{\vsmash{\infofont\framed[\c!align=\v!right]{\thepardata}}}%
\endgroup}
\unexpanded\def\startshowpardata
{\begingroup
- \showcomposition
+ \showcomposition % all this tracing can go ... if we want it back it will be done in lua
\showstruts\tracepositionstrue \tracingparagraphs\maxdimen
\appendtoksonce\showpardata\let\showpardata\relax\to\everypar}
@@ -504,211 +781,15 @@
{\endgraf
\endgroup}
-% defaults
-
-\def\raggedfillamount {1fil}
-\def\raggednegativefillamount{-1fil}
-\def\raggeddoublefillamount {2fil}
-\def\raggedhalffillamount {.5fil}
-\def\raggedspaceamount {\interwordspace} % {.3333em}
-\def\raggedxspaceamount {.5em}
-
-\unexpanded\def\notragged
- {\raggedstatus\zerocount
- \leftskip 1\leftskip
- \rightskip 1\rightskip
- \spaceskip \zeropoint
- \xspaceskip \zeropoint
- \parfillskip\zeropoint\!!plus\raggedfillamount\relax
- \let\updateraggedskips\relax} % new
-
-\let\forgetragged\notragged
-
-\unexpanded\def\raggedleft
- {\setraggedness\leftraggedness
- \setraggedskips1\leftraggedness\zeropoint\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-\unexpanded\def\raggedcenter
- {\setraggedness\middleraggedness
- \setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-\unexpanded\def\centeredlastline
- {\setraggedskips
- \zerocount
- \raggedfillamount
- \raggednegativefillamount
- \zeropoint
- \zeropoint
- \raggeddoublefillamount
- \zeropoint}
-
-%D We used to have:
-%D
-%D \starttyping
-%D \def\raggedright
-%D {\setraggedness\rightraggedness
-%D \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}}
-%D \stoptyping
-%D
-%D However, the next alternative, suggested by Taco, is better.
-
-\unexpanded\def\raggedright
- {\setraggedness\rightraggedness
- \setraggedskips3\zeropoint\rightraggedness\raggedspaceamount
- \raggedxspaceamount\raggedfillamount\parindent}
-
-\unexpanded\def\veryraggedleft
- {\setraggedskips1\raggedfillamount\zeropoint\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-%D When we want the last line to have a natural width:
-%D
-%D \starttyping
-%D \def\veryraggedleft%
-%D {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{-1fil}}
-%D \stoptyping
-%D
-%D but this one is not accepted by the macros.
-
-\unexpanded\def\veryraggedcenter
- {\setraggedskips2\raggedfillamount\raggedfillamount\raggedspaceamount
- \raggedxspaceamount\zeropoint\zeropoint}
-
-\unexpanded\def\veryraggedright
- {\setraggedskips3\zeropoint\raggedfillamount\raggedspaceamount
- \raggedxspaceamount\zeropoint\parindent}
-
-\unexpanded\def\ttraggedright
- {\tttf
- \setraggedskips3\zeropoint\rightraggedness
- \zeropoint\zeropoint\zeropoint\parindent} % \ctxparindent
-
-%D A bonus one:
-
-\unexpanded\def\raggedwidecenter
- {\setraggedness\middleraggedness
- \setraggedskips2\raggedhalffillamount\raggedhalffillamount
- \raggedspaceamount\raggedxspaceamount\zeropoint\zeropoint}
-
-\newif\if@@asragged \@@asraggedtrue % old method
-
-% todo
-%
-% \setuplayout[grid=yes,lines=44] \showgrid
-% \starttext
-% test \vfill test \endgraf \strut \endgraf \vskip-\lineheight \removedepth \pagina test
-% \stoptext
-
-% \setupalign[reset,new,right,old]
-
-\def\@@align@@rl{\if!!donea\veryraggedleft \else\raggedleft \fi}
-\def\@@align@@rr{\if!!donea\veryraggedright \else\raggedright \fi}
-\def\@@align@@rc{\if!!donea\veryraggedcenter\else\raggedcenter\fi}
-
-\setvalue{@@ngila@@\v!broad }{\!!doneatrue}
-\setvalue{@@ngila@@\v!wide }{\!!donebtrue}
-
-\unexpanded\def\setraggedparagraphmode
- {\doifrightpageelse
- {\ifdoublesided\signalinnerrealign\expandafter\firstoftwoarguments \fi}
- {\ifdoublesided\signalouterrealign\expandafter\secondoftwoarguments\fi}}
-
-\unexpanded\def\installalign#1#2{\setvalue{@@align@@#1}{#2}} % can be used for overloads
-
-\installalign \v!new {\@@asraggedfalse}
-\installalign \v!old {\@@asraggedtrue}
-\installalign \empty {}
-
-\installalign \v!line {\baselinebottom}
-\installalign \v!bottom {\raggedbottom}
-\installalign \v!height {\normalbottom}
-\installalign \v!width {\notragged}
-\installalign \v!normal {\notragged}
-\installalign \v!yes {\notragged}
-\installalign \v!no {\raggedright}
-\installalign \v!inner {\if@@asragged \setraggedparagraphmode\@@align@@rl\@@align@@rr \else
- \setraggedparagraphmode\@@align@@rr\@@align@@rl \fi}
-\installalign \v!outer {\if@@asragged \setraggedparagraphmode\@@align@@rr\@@align@@rl \else
- \setraggedparagraphmode\@@align@@rl\@@align@@rr \fi}
-\installalign \v!left {\if@@asragged\@@align@@rl\else\@@align@@rr\fi}
-\installalign \v!right {\if@@asragged\@@align@@rr\else\@@align@@rl\fi}
-\installalign \v!middle {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi}
-\installalign \v!flushleft {\if!!donea\veryraggedright \else\raggedright\fi}
-\installalign \v!flushright {\if!!donea\veryraggedleft \else\raggedleft \fi}
-\installalign \v!flushouter {\setraggedparagraphmode\raggedleft\raggedright}
-\installalign \v!flushinner {\setraggedparagraphmode\raggedright\raggedleft}
-\installalign \v!center {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi}
-\installalign \v!hanging {\enableprotruding}
-\installalign \v!nothanging {\disableprotruding}
-\installalign \v!hz {\enableadjusting}
-\installalign \v!nohz {\disableadjusting}
-\installalign \v!spacing {\enablespacehandling \enablekernhandling}
-\installalign \v!nospacing {\disablespacehandling\disablekernhandling}
-\installalign \v!hyphenated {\dohyphens}
-\installalign \v!nothyphenated {\nohyphens}
-\installalign \v!new {\@@asraggedfalse} % so new will give you consistency
-\installalign \v!reset {\notragged\normalbottom}
-
-\installalign \v!tolerant {\tolerance3000\relax}
-\installalign \v!verytolerant {\tolerance4500\relax}
-\installalign \v!stretch {\emergencystretch\bodyfontsize}
-
-\installalign \v!righttoleft {\lefttoright}
-\installalign \v!lefttoright {\righttoleft}
-\installalign {l2r} {\lefttoright}
-\installalign {r2l} {\righttoleft}
-
-\installalign \v!last {\centeredlastline}
-
-\newcount\hyphenminoffset
-
-\ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi
-
-\unexpanded\def\lesshyphens
- {\advance\hyphenminoffset\plusone
- \sethyphenationvariables}
-
-\unexpanded\def\morehyphens
- {\ifcase\hyphenminoffset \else
- \advance\hyphenminoffset\minusone
- \fi
- \sethyphenationvariables}
-
-\installalign \v!lesshyphenation {\lesshyphens}
-\installalign \v!morehyphenation {\morehyphens}
-
-\def\dodosetupalign#1{\csname @@align@@#1\endcsname}
-\def\dodosetupngila#1{\csname @@ngila@@#1\endcsname}
-
-\unexpanded\def\setupalign
- {\dosingleargument\dosetupalign}
-
-\def\dosetupalign[#1]% can be made faster by checking for defined #1
- {\!!doneafalse
- \!!donebfalse
- \raggedstatus\zerocount
- \resetrealignsignal
- \processcommacommand[#1]\dodosetupngila
- \processcommacommand[#1]\dodosetupalign}
-
-% \setupalign[flushleft] \input ward \par % lijnlinks
-% \setupalign[right] \input ward \par
-
-% \setupalign[flushright] \input ward \par % lijnrechts
-% \setupalign[left] \input ward \par
-
-% \setupalign[middle] \input ward \par % centreer
-% \setupalign[center] \input ward \par
+% Structure:
\unexpanded\def\startalignment
- {\bgroup
+ {\begingroup
\setupalign}
\unexpanded\def\stopalignment
{\par
- \egroup}
+ \endgroup}
\setnewconstant\alignstrutmode\plusone
@@ -746,26 +827,28 @@
\ifdefined\rightline \else \def\rightline #1{\line{\hss#1}} \fi
\ifdefined\centerline \else \def\centerline#1{\line{\hss#1\hss}} \fi
-% directe commando's
+% direct commands
-\unexpanded\def\leftaligned {\doalignline \relax \hss }
-\unexpanded\def\midaligned {\doalignline \hss \hss }
-\unexpanded\def\rightaligned{\doalignline \hss \relax}
-\unexpanded\def\maxaligned {\doalignline \relax \relax}
+\unexpanded\def\leftaligned {\doalignline\relax \hss }
+\unexpanded\def\midaligned {\doalignline\hss \hss }
+\unexpanded\def\rightaligned{\doalignline\hss \relax}
+\unexpanded\def\maxaligned {\doalignline\relax \relax}
\let\centeraligned\midaligned
-% indirecte commando's
+% indirect commands
+
+\installcorenamespace{alignline}
-\letvalue{\s!do\v!line\v!left }\leftaligned
-\letvalue{\s!do\v!line\v!right }\rightaligned
-\letvalue{\s!do\v!line\v!middle }\midaligned
-\letvalue{\s!do\v!line\v!flushleft }\rightaligned
-\letvalue{\s!do\v!line\v!flushright}\leftaligned
-\letvalue{\s!do\v!line\v!center }\midaligned
-\letvalue{\s!do\v!line\v!max }\maxaligned
+\letvalue{\??alignline\v!left }\leftaligned
+\letvalue{\??alignline\v!right }\rightaligned
+\letvalue{\??alignline\v!middle }\midaligned
+\letvalue{\??alignline\v!flushleft }\rightaligned
+\letvalue{\??alignline\v!flushright}\leftaligned
+\letvalue{\??alignline\v!center }\midaligned
+\letvalue{\??alignline\v!max }\maxaligned
-\def\doalignedline#1{\resetrealignsignal\csname\s!do\v!line#1\endcsname}
+\def\doalignedline#1{\resetrealignsignal\csname\??alignline#1\endcsname}
%D Experimental (will be redone when floats are redone as it's real messy
%D now). It can also be made faster (if needed).
@@ -777,8 +860,7 @@
\setlocalhsize
\def\\{\endgroup\par\doxalignline#1#2#3#4#5#6\begingroup}% inefficient
\dowithnextbox
- {%\noindent moved up
- \hbox to \localhsize
+ {\hbox to \localhsize
{#1\hskip\ifdone#2\else#3\fi#4%
\hbox to \localhsize
{\the\everyleftofalignedline
@@ -792,35 +874,33 @@
\def\doxcheckline % used for floats so multipass anyway
{\signalrightpage\doifrightpageelse\donetrue\donefalse}
-\setvalue{\s!do\v!line\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss }
-\setvalue{\s!do\v!line\v!outer }{\doxalignline\doxcheckline++\zeropoint \hss \relax}
-\setvalue{\s!do\v!line\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss }
-\setvalue{\s!do\v!line\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss \relax}
-\setvalue{\s!do\v!line\v!inneredge }{\doxalignline\doxcheckline-+\inneredgetotal \relax\hss }
-\setvalue{\s!do\v!line\v!outeredge }{\doxalignline\doxcheckline+-\outeredgetotal \hss \relax}
-\setvalue{\s!do\v!line\v!backspace }{\doxalignline\doxcheckline-+\backspace \relax\hss }
-\setvalue{\s!do\v!line\v!cutspace }{\doxalignline\doxcheckline+-\cutspace \hss \relax}
-
-\setvalue{\s!do\v!line\v!leftmargin }{\doxalignline\donefalse --\leftmargintotal \hss \relax}
-\setvalue{\s!do\v!line\v!rightmargin}{\doxalignline\donefalse ++\rightmargintotal\relax\hss }
-\setvalue{\s!do\v!line\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax}
-\setvalue{\s!do\v!line\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss }
-
-% ! ! ! beware, redefining \doalignline gives the wrong results ! ! !
-%
-% \def\doalignline{\doxalignline\donefalse++\zeropoint}
+\setvalue{\??alignline\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss }
+\setvalue{\??alignline\v!outer }{\doxalignline\doxcheckline++\zeropoint \hss \relax}
+\setvalue{\??alignline\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss }
+\setvalue{\??alignline\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss \relax}
+\setvalue{\??alignline\v!inneredge }{\doxalignline\doxcheckline-+\inneredgetotal \relax\hss }
+\setvalue{\??alignline\v!outeredge }{\doxalignline\doxcheckline+-\outeredgetotal \hss \relax}
+\setvalue{\??alignline\v!backspace }{\doxalignline\doxcheckline-+\backspace \relax\hss }
+\setvalue{\??alignline\v!cutspace }{\doxalignline\doxcheckline+-\cutspace \hss \relax}
-%D Better:
+\setvalue{\??alignline\v!leftmargin }{\doxalignline\donefalse --\leftmargintotal \hss \relax}
+\setvalue{\??alignline\v!rightmargin}{\doxalignline\donefalse ++\rightmargintotal\relax\hss }
+\setvalue{\??alignline\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax}
+\setvalue{\??alignline\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss }
-\def\doalignedline#1{\csname\s!do\v!line#1\endcsname}
+\def\doalignedline#1% unchecked
+ {\csname\??alignline#1\endcsname}
\def\alignedline#1#2% setting default
- {\csname\s!do\v!line\ifcsname\s!do\v!line#1\endcsname#1\else#2\fi\endcsname}
+ {\csname\??alignline\ifcsname\??alignline#1\endcsname#1\else#2\fi\endcsname}
% beware: \wordright{whatever\kern-\rightskip} should work!
% so, no funny boxing here
-\def\dowordright[#1]%
+\unexpanded\def\wordright
+ {\dosingleempty\spacing_word_right}
+
+\def\spacing_word_right[#1]%
{% don't change
\groupedcommand
{\removeunwantedspaces
@@ -835,50 +915,72 @@
\finalhyphendemerits\zerocount % yes or no (see hyhenation/specialcases-001.tex)
\par}}
-\unexpanded\def\wordright
- {\dosingleempty\dowordright}
-
-% \dorecurse{5}{something } \wordright{--someone} \endgraf
-% \dorecurse{6}{something } \wordright{--someone} \endgraf
-% \dorecurse{7}{something } \wordright{--someone} \endgraf
+% \dorecurse{5}{something} \wordright{--someone} \endgraf
+% \dorecurse{6}{something} \wordright{--someone} \endgraf
+% \dorecurse{7}{something} \wordright{--someone} \endgraf
%
-% \dorecurse{5}{something } \wordright{--someone else entirely} \endgraf
-% \dorecurse{6}{something } \wordright{--someone else entirely} \endgraf
-% \dorecurse{7}{something } \wordright{--someone else entirely} \endgraf
+% \dorecurse{5}{something} \wordright{--someone else entirely} \endgraf
+% \dorecurse{6}{something} \wordright{--someone else entirely} \endgraf
+% \dorecurse{7}{something} \wordright{--someone else entirely} \endgraf
%
% \wordright[\rightskip]{whatever}
-
-% \simplealignedbox{2cm}{right}{x}
-% \setvalue{\s!simple\c!align\v!right }#1#2{\hbox to #1{#2\hss}}
-% \setvalue{\s!simple\c!align\v!left }#1#2{\hbox to #1{\hss#2}}
-% \setvalue{\s!simple\c!align\v!flushright }#1#2{\hbox to #1{\hss#2}}
-% \setvalue{\s!simple\c!align\v!flushleft }#1#2{\hbox to #1{#2\hss}}
-% \setvalue{\s!simple\c!align\v!middle }#1#2{\hbox to #1{\hss#2\hss}}
+% \simplealignedbox{2cm}{right}{x}
-% \unexpanded\def\simplealignedbox#1%
-% {\csname\s!simple\c!align\ifcsname\s!simple\c!align#1\endcsname#1\else\v!right\fi\endcsname}
+\installcorenamespace{alignsimple}
-\setvalue{\s!simple:\c!align:\v!right }#1{{#1\hss}}
-\setvalue{\s!simple:\c!align:\v!left }#1{{\hss#1}}
-\setvalue{\s!simple:\c!align:\v!flushright }#1{{\hss#1}}
-\setvalue{\s!simple:\c!align:\v!flushleft }#1{{#1\hss}}
-\setvalue{\s!simple:\c!align:\v!middle }#1{{\hss#1\hss}}
+\setvalue{\??alignsimple\v!right }#1{{#1\hss}}
+\setvalue{\??alignsimple\v!left }#1{{\hss#1}}
+\setvalue{\??alignsimple\v!flushright}#1{{\hss#1}}
+\setvalue{\??alignsimple\v!flushleft }#1{{#1\hss}}
+\setvalue{\??alignsimple\v!middle }#1{{\hss#1\hss}}
\unexpanded\def\simplealignedbox#1#2%
- {\hbox to #1\csname\s!simple:\c!align:\ifcsname\s!simple:\c!align:#2\endcsname#2\else\v!right\fi\endcsname}
-
-% \setvalue{spac_align_set_ss_\v!right }#1#2{\let#1\relax\let#2\hss }
-% \setvalue{spac_align_set_ss_\v!left }#1#2{\let#1\hss \let#2\relax}
-% \setvalue{spac_align_set_ss_\v!flushright}#1#2{\let#1\hss \let#2\relax}
-% \setvalue{spac_align_set_ss_\v!flushleft }#1#2{\let#1\relax\let#2\hss }
-% \setvalue{spac_align_set_ss_\v!middle }#1#2{\let#1\hss \let#2\hss }
-% \setvalue{spac_align_set_ss_\v!low }#1#2{\let#1\vss \let#2\relax}
-% \setvalue{spac_align_set_ss_\v!high }#1#2{\let#1\relax\let#2\vss }
-% \setvalue{spac_align_set_ss_\v!lohi }#1#2{\let#1\vss \let#2\vss }
-% \setvalue{spac_align_set_ss_\s!unknown }#1#2{\let#1\relax\let#2\relax}
+ {\hbox to #1\csname\??alignsimple\ifcsname\??alignsimple#2\endcsname#2\else\v!right\fi\endcsname}
+% \installnamespace{alignsets}
+%
+% \setvalue{\??alignsets\v!right }#1#2{\let#1\relax\let#2\hss }
+% \setvalue{\??alignsets\v!left }#1#2{\let#1\hss \let#2\relax}
+% \setvalue{\??alignsets\v!flushright}#1#2{\let#1\hss \let#2\relax}
+% \setvalue{\??alignsets\v!flushleft }#1#2{\let#1\relax\let#2\hss }
+% \setvalue{\??alignsets\v!middle }#1#2{\let#1\hss \let#2\hss }
+% \setvalue{\??alignsets\v!low }#1#2{\let#1\vss \let#2\relax}
+% \setvalue{\??alignsets\v!high }#1#2{\let#1\relax\let#2\vss }
+% \setvalue{\??alignsets\v!lohi }#1#2{\let#1\vss \let#2\vss }
+% \setvalue{\??alignsets\s!unknown }#1#2{\let#1\relax\let#2\relax}
+%
% \unexpanded\def\spac_align_set_ss#1%
-% {\csname spac_align_set_ss_\ifcsname spac_align_set_ss_#1\endcsname#1\else\s!unknown\fi\endcsname}
+% {\csname\??alignsetss\ifcsname\??alignsetss#1\endcsname#1\else\s!unknown\fi\endcsname}
+
+% Some obsolete (old) helpers:
+
+\def\dodefinehbox[#1][#2]%
+ {\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}}
+
+\unexpanded\def\definehbox
+ {\dodoubleargument\dodefinehbox}
\protect \endinput
+
+% \newskip\@@raggedskipa
+% \newskip\@@raggedskipb
+%
+% \newcount\c_spacing_minimum_tolerance \c_spacing_minimum_tolerance = 1500
+%
+% \unexpanded\def\setraggedness#1%
+% {\ifnum\tolerance<\c_spacing_minimum_tolerance % small values have
+% \tolerance\c_spacing_minimum_tolerance % unwanted side effects
+% \fi
+% \ifx\dohyphens\relax
+% % this code will be reconsidered / kind of fuzzy (and old)
+% \@@raggedskipa 2.5\hsize
+% \@@raggedskipb #1\relax
+% \divide\@@raggedskipa \@@raggedskipb
+% \hyphenpenalty\@@raggedskipa
+% \fi}
+
+% \installalign \v!inner {\setraggedparagraphmode\spacing_align_rl\spacing_align_rr}
+% \installalign \v!outer {\setraggedparagraphmode\spacing_align_rr\spacing_align_rl}
+% \installalign \v!flushouter {\setraggedparagraphmode\spacing_horizontal_left \spacing_horizontal_right}
+% \installalign \v!flushinner {\setraggedparagraphmode\spacing_horizontal_right\spacing_horizontal_left }
diff --git a/tex/context/base/spac-def.mkiv b/tex/context/base/spac-def.mkiv
index c1703fadb..333335630 100644
--- a/tex/context/base/spac-def.mkiv
+++ b/tex/context/base/spac-def.mkiv
@@ -71,7 +71,7 @@
\appendtoks \setrelativeinterlinespace \to \everybodyfont
\appendtoks \updateraggedskips \to \everyfontswitch % under test
-\prependtoks \let\par\endgraf \to \everypagebody % see \fillinline
+\prependtoks \let\par\endgraf \to \everybeforepagebody % see \fillinline
\appendtoks \simplesetupspacing \to \everydefinedfont
\setupwhitespace
diff --git a/tex/context/base/spac-pag.mkiv b/tex/context/base/spac-pag.mkiv
index c3ed49fe8..264fbd108 100644
--- a/tex/context/base/spac-pag.mkiv
+++ b/tex/context/base/spac-pag.mkiv
@@ -43,45 +43,53 @@
%\llap{\infofont\number\noftrackedpagestates/\number#2}% tracing
\fi}
-\def\doifrightpagestateelse#1#2%
+\def\doifrightpagestateelse#1#2% not expandable !
{\ifcase\frozenpagestate
\pagestatemismatchfalse
\realpagestateno\realfolio
\ifinpagebody
\ifdoublesided
\ifodd\realpageno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \system_twopass_set_found
+ \else
+ \system_twopass_set_not_found
\fi
\else
- \twopassdatafoundtrue
+ \system_twopass_set_found
\fi
\else\ifdoublesided
\findtwopassdata{#1}{\number#2}%
- \iftwopassdatafound
+ \ifconditional\twopassdatafound
\realpagestateno\twopassdata\relax
\ifnum\twopassdata=\realpageno \else
\pagestatemismatchtrue
\fi
\ifodd\twopassdata\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \system_twopass_set_found
+ \else
+ \system_twopass_set_not_found
\fi
\else
\ifodd\realpageno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \system_twopass_set_found
+ \else
+ \system_twopass_set_not_found
\fi
\fi
\else
- \twopassdatafoundtrue
+ \system_twopass_set_found
\fi\fi
\else
\ifodd\realpagestateno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \system_twopass_set_found
+ \else
+ \system_twopass_set_not_found
\fi
\fi
- \iftwopassdatafound
- \@EA\firstoftwoarguments
+ \ifconditional\twopassdatafound
+ \expandafter\firstoftwoarguments
\else
- \@EA\secondoftwoarguments
+ \expandafter\secondoftwoarguments
\fi}
\def\doifforcedrightpagestateelse#1#2%
@@ -89,28 +97,34 @@
\pagestatemismatchfalse
\realpagestateno\realfolio
\findtwopassdata{#1}{\number#2}%
- \iftwopassdatafound
+ \ifconditional\twopassdatafound
\realpagestateno\twopassdata\relax
\ifnum\twopassdata=\realpageno \else
\pagestatemismatchtrue
\fi
\ifodd\twopassdata\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \system_twopass_set_found
+ \else
+ \system_twopass_set_not_found
\fi
\else
\ifodd\realpageno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \system_twopass_set_found
+ \else
+ \system_twopass_set_not_found
\fi
\fi
\else
\ifodd\realpagestateno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \system_twopass_set_found
+ \else
+ \system_twopass_set_not_found
\fi
\fi
- \iftwopassdatafound
- \@EA\firstoftwoarguments
+ \ifconditional\twopassdatafound
+ \expandafter\firstoftwoarguments
\else
- \@EA\secondoftwoarguments
+ \expandafter\secondoftwoarguments
\fi}
\def\freezepagestate {\frozenpagestate\plusone }
@@ -178,7 +192,7 @@
{\pagechangedfalse
\doforcedtrackpagestate{#2}{#3}%
\findtwopassdata{#2}{\number#3}%
- \iftwopassdatafound
+ \ifconditional\twopassdatafound
\ifnum\twopassdata>0\getvalue{#2:p:#1}\relax
\pagechangedtrue
\fi
diff --git a/tex/context/base/spac-ver.mkiv b/tex/context/base/spac-ver.mkiv
index 35095085f..7fb66a0ab 100644
--- a/tex/context/base/spac-ver.mkiv
+++ b/tex/context/base/spac-ver.mkiv
@@ -606,11 +606,16 @@
\fi}
\unexpanded\def\settopskip % the extra test is needed for the lbr family
- {\ifgridsnapping
- \topskip\zeropoint
- \else
- \topskip\systemtopskipfactor\globalbodyfontsize\ifr@ggedbottom\!!plus5\globalbodyfontsize\fi\relax
+ {\topskip
+ \ifgridsnapping
+ \zeropoint
+ \else
+ \systemtopskipfactor\globalbodyfontsize
+ \ifcase\bottomraggednessmode % ragged bottom
+ \!!plus5\globalbodyfontsize
+ \fi
\fi
+ %\relax
\topskipgap\topskip
\advance\topskipgap -\openstrutheight\relax
\ifdim\minimumstrutheight>\zeropoint
@@ -1175,55 +1180,6 @@
\def\savestrut {\setbox\savedstrutbox\copy\strutbox}
\def\savedstrut{\copy \savedstrutbox}
-%D Page spacing
-
-\newconstant\bottomraggednessmode % 0=ragged 1=normal/align 2=baseline
-
-\def\bottomalignlimit{3\lineheight}
-
-\newif\ifn@rmalbottom % this will be a proper constant
-\newif\ifr@ggedbottom % this will be a proper constant
-\newif\ifb@selinebottom % this will be a proper constant
-
-\unexpanded\def\normalbottom
- {% \topskip 10pt
- \r@ggedbottomfalse}
-
-\unexpanded\def\raggedbottom
- {\bottomraggednessmode\zerocount
- \n@rmalbottomfalse
- \r@ggedbottomtrue
- \b@selinebottomfalse
- \settopskip}
-
-\unexpanded\def\alignbottom
- {\bottomraggednessmode\plusone
- \n@rmalbottomtrue
- \r@ggedbottomfalse
- \b@selinebottomfalse
- \settopskip}
-
-\unexpanded\def\baselinebottom
- {\bottomraggednessmode\plustwo
- \n@rmalbottomfalse
- \r@ggedbottomfalse
- \b@selinebottomtrue
- \settopskip}
-
-\let\normalbottom\alignbottom % downward compatible
-
-% so, the new one will be
-%
-% \bottomraggednessmode=0 % 0=ragged 1=normal/align 2=baseline
-%
-% \def\bottomalignlimit{3\lineheight} % will be settable
-%
-% \def\raggedbottom {\bottomraggednessmode\zerocount\settopskip}
-% \def\alignbottom {\bottomraggednessmode\plusone \settopskip}
-% \def\baselinebottom{\bottomraggednessmode\plustwo \settopskip}
-%
-% \let\normalbottom =\alignbottom
-
%D Good old blank redone:
%definesystemattribute[kernchars] [public]
@@ -1839,7 +1795,9 @@
%D Contrary to \MKII\ we can now define classes of lines (generalized by
%D Wolfgang). I will probably rewrite bits in \LUA.
-\installcommandhandler \??rg {lines} \??rg
+\installcorenamespace{lines}
+
+\installcommandhandler \??lines {lines} \??lines
\setuplines
[\c!option=,
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index f6656b7ad..b3dea543c 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 17abf7776..97eb83beb 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/status-mkiv.lua b/tex/context/base/status-mkiv.lua
new file mode 100644
index 000000000..049512fdd
--- /dev/null
+++ b/tex/context/base/status-mkiv.lua
@@ -0,0 +1,1394 @@
+-- colo-run.mkiv colo-imp-*.mkiv ...
+
+return {
+ preloaded = {
+ {
+ filename = "syst-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "norm-ctx",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "syst-pln",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "syst-mes",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "luat-cod",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "luat-bas",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe combine (3)",
+ },
+ {
+ filename = "luat-lib",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe combine (3)",
+ },
+ {
+ filename = "catc-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "catc-act",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "forward dependency",
+ },
+ {
+ filename = "catc-def",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "catc-ctx",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "catc-sym",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "cldf-ini",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe combine (1)",
+ },
+ {
+ filename = "syst-aux",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "will be better protected"
+ },
+ {
+ filename = "syst-lua",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe combine (1)",
+ },
+ {
+ filename = "syst-con",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe combine (1)",
+ },
+ {
+ filename = "syst-fnt",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe combine (1)",
+ },
+ {
+ filename = "syst-rtp",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe combine (1)",
+ },
+ {
+ filename = "file-ini",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "maybe combine (2)",
+ },
+ {
+ filename = "file-res",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "maybe combine (2)",
+ },
+ {
+ filename = "file-lib",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "supp-dir",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "char-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "char-utf",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "char-act",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "forward dependency",
+ },
+ {
+ filename = "mult-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "mult-sys",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "mult-def",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "mult-chk",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "mult-aux",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "mult-dim",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "cldf-int",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "luat-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "toks-ini",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe this becomes a runtime module",
+ },
+ {
+ filename = "attr-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "core-var",
+ marktype = "mkiv",
+ status = "unknown",
+ comment = "code might move from here",
+ },
+ {
+ filename = "core-env",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "might need more redoing",
+ },
+ {
+ filename = "layo-ini",
+ marktype = "mkiv",
+ status = "todo",
+ comment = "more might move to here",
+ },
+ {
+ filename = "node-ini",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "maybe this becomes a runtime module",
+ },
+ {
+ filename = "cldf-bas",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "node-fin",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "might need more redoing",
+ },
+ {
+ filename = "node-mig",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "needs integration and configuration",
+ },
+ {
+ filename = "node-par",
+ marktype = "mkiv",
+ status = "experimental",
+ },
+ {
+ filename = "back-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "attr-col",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "attr-lay",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "attr-neg",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "attr-eff",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "trac-tex",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "needs more usage",
+ },
+ {
+ filename = "trac-deb",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "supp-box",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "supp-vis",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "supp-fun",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "supp-ran",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "supp-mat",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "will be moved to the math-* modules",
+ },
+ {
+ filename = "supp-ali",
+ marktype = "mkiv",
+ status = "unknown",
+ comment = "will be reimplemented",
+ },
+ {
+ filename = "supp-num",
+ marktype = "mkiv",
+ status = "obsolete",
+ comment = "replaced by units",
+ },
+ {
+ filename = "typo-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-ins",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "file-syn",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "file-mod",
+ marktype = "mkvi",
+ status = "unknown",
+ },
+ {
+ filename = "core-con",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "cont-fil",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "regi-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "enco-ini",
+ marktype = "mkiv",
+ status = "messy",
+ },
+ {
+ filename = "hand-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lang-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lang-lab",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "namespace should be languages",
+ },
+ {
+ filename = "unic-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "core-uti",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "core-two",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "colo-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "colo-ext",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "colo-grp",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "node-bck",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "trac-vis",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "lang-mis",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lang-url",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lang-def",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lang-wrd",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "file-job",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "might need more redoing",
+ },
+ {
+ filename = "symb-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "sort-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "pack-mis",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "pack-rul",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "namespace to be done",
+ },
+ {
+ filename = "pack-mrl",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "pack-bck",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "pack-fen",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lxml-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lxml-sor",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "typo-prc",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "strc-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-tag",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-doc",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-num",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-mar",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-sbe",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-lst",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-sec",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-pag",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-ren",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-xml",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-def",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-ref",
+ marktype = "mkvi",
+ status = "unknown",
+ },
+ {
+ filename = "strc-reg",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-lev",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "spac-hor",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "spac-ver",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "spac-ali",
+ marktype = "mkiv",
+ status = "unknown",
+ comment = "will be rewritten",
+ },
+ {
+ filename = "spac-pag",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "spac-fnt",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "spac-par",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "spac-def",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "spac-grd",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "anch-pos",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "scrn-ini",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "maybe change locationattribute names"
+ },
+ {
+ filename = "scrn-ref",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "pack-obj",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-itm",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "strc-des",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-syn",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "core-sys",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "a funny mix",
+ },
+ {
+ filename = "page-var",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-fac",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-brk",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-col",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-inf",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-grd",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-flt",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-bck",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "page-not",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-one",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-lay",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "page-box",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "page-txt",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "page-sid",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "strc-flt",
+ marktype = "mkvi",
+ status = "unknown",
+ },
+ {
+ filename = "page-mis",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-mbk",
+ marktype = "mkvi",
+ status = "unknown",
+ },
+ {
+ filename = "page-mul",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-set",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "pack-lyr",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "pack-pos",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-mak",
+ marktype = "mkvi",
+ status = "unknown",
+ },
+ {
+ filename = "page-lin",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-par",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-pag",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-mar",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "file-job",
+ marktype = "mkvi",
+ status = "unknown",
+ },
+ {
+ filename = "buff-ini",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "check other modules for buffer usage",
+ },
+ {
+ filename = "buff-ver",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "buff-par",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "buff-imp-tex",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "buff-imp-mp",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "buff-imp-lua",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "buff-imp-xml",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "buff-imp-parsed-xml",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-blk",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-imp",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-sel",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-com",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "scrn-pag",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "scrn-wid",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "scrn-but",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "scrn-bar",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "strc-bkm",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-com",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-pln",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-tab",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-tbl",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-ntb",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-nte",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-ltb",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-tsp",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "tabl-xtb",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "java-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "scrn-fld",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "scrn-hlp",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "namespace needs checking"
+ },
+ {
+ filename = "char-enc",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "font-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "font-unk",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "font-tra",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "likely this will become a module",
+ },
+ {
+ filename = "font-uni",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "this one might be merged",
+ },
+ {
+ filename = "font-col",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "font-gds",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lxml-css",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "this is work in progress",
+ },
+ {
+ filename = "spac-chr",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "blob-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-cln",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-spa",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-krn",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-itc",
+ marktype = "mkvi",
+ status = "okay",
+ },
+ {
+ filename = "typo-dir",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-brk",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-cap",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-dig",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-rep",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "typo-txt",
+ marktype = "mkvi",
+ status = "okay",
+ comment = "maybe there will be a nicer interface",
+ },
+ {
+ filename = "typo-par",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "type-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "type-set",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "type-def",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "type-lua",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "scrp-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "prop-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "mlib-ctx",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "meta-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "meta-tex",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "meta-fun",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "meta-pag",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-mrk",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-flw",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-spr",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-plg",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-str",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "anch-pgr",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "anch-bck",
+ marktype = "mkvi",
+ status = "unknown",
+ },
+ {
+ filename = "anch-tab",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "anch-bar",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "anch-snc",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-pln",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-for",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-def",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-ali",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-arr",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-frc",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-scr",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-int",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-del",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-inl",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "math-dis",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "phys-dim",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-mat",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "chem-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "chem-str",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "core-fnt",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "node-rul",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "node-spl",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-not",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "strc-lnt",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "core-mis",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "grph-trf",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "namespace has to be made consistent"
+ },
+ {
+ filename = "grph-inc",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "grph-fig",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "grph-raw",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "pack-box",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "pack-bar",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "page-app",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "meta-fig",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "lang-spa",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "more or less obsolete"
+ },
+ {
+ filename = "bibl-bib",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "bibl-tra",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "meta-xml",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "not needed"
+ },
+ {
+ filename = "cont-log",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "task-ini",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "cldf-ver",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "cldf-com",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "core-ctx",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "core-ini",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "core-def",
+ marktype = "mkiv",
+ status = "unknown",
+ },
+ {
+ filename = "back-pdf",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "object related code might move or change",
+ },
+ {
+ filename = "mlib-pdf",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "mlib-pps",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "meta-pdf",
+ marktype = "mkiv",
+ status = "okay",
+ },
+ {
+ filename = "grph-epd",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "might need more work",
+ },
+ {
+ filename = "back-exp",
+ marktype = "mkiv",
+ status = "okay",
+ comment = "some parameters might move from export to backend"
+ },
+ }
+}
diff --git a/tex/context/base/status-mkiv.tex b/tex/context/base/status-mkiv.tex
new file mode 100644
index 000000000..922df9ec1
--- /dev/null
+++ b/tex/context/base/status-mkiv.tex
@@ -0,0 +1,83 @@
+\setupbodyfont[dejavu,10pt]
+
+\setuplayout
+ [width=middle,
+ height=middle,
+ backspace=1cm,
+ topspace=1cm,
+ footer=0pt,
+ header=1.25cm]
+
+\setuphead
+ [subject]
+ [style=\bfa]
+
+\setuppagenumbering
+ [location=]
+
+\setupheadertexts
+ [\currentdate][MkIV cleanup Status / Page \pagenumber]
+
+\starttext
+
+\startsubject[title=Todo]
+
+\startitemize[packed]
+ \startitem currently the new namespace prefixes are not consistent but this
+ will be done when we're satisfied with one scheme \stopitem
+ \startitem there will be additional columns in the table, like for namespace
+ so we need another round of checking then \stopitem
+ \startitem the imp modules are not in the list and needs checking too \stopitem
+ \startitem the s, x, m modules will be checked, redone and reorganized \stopitem
+ \startitem the lua code will be cleaned up upgraded as some is quite old
+ and experimental \stopitem
+ \startitem we need a proper dependency tree and better defined loading order \stopitem
+ \startitem all dotag.. will be moved to the tags_.. namespace \stopitem
+ \startitem we need to check what messages are gone (i.e.\ clean up mult-mes) \stopitem
+ \startitem some commands can go from mult-def (and the xml file) \stopitem
+ \startitem check for setuphandler vs simplesetuphandler \stopitem
+ \startitem all showcomposition etc can go (we can redo that in lua if needed) \stopitem
+\stopitemize
+
+\stopsubject
+
+\startsubject[title=Status]
+
+\startluacode
+
+ local coremodules = dofile("status-mkiv.lua")
+
+ if coremodules then
+
+ local preloaded = coremodules.preloaded
+
+ if preloaded then
+
+ context.starttabulate { "|Tr|Tl|Tl|l|p|" }
+ context.NC() -- context.bold("order")
+ context.NC() context.bold("file")
+ context.NC() context.bold("mark")
+ context.NC() context.bold("status")
+ context.NC() context.bold("comment")
+ context.NC() context.NR()
+ for i=1,#preloaded do
+ local module = preloaded[i]
+ local status = module.status
+ context.NC() context(i)
+ context.NC() context(module.filename)
+ context.NC() context(module.marktype)
+ context.NC() if status == "unknown" then context.italic(status) else context(status) end
+ context.NC() context(module.comment)
+ context.NC() context.NR()
+ end
+ context.stoptabulate()
+
+ end
+
+ end
+
+\stopluacode
+
+\stopsubject
+
+\stoptext
diff --git a/tex/context/base/strc-blk.mkiv b/tex/context/base/strc-blk.mkiv
index bb9e7563e..a632b38fb 100644
--- a/tex/context/base/strc-blk.mkiv
+++ b/tex/context/base/strc-blk.mkiv
@@ -45,8 +45,8 @@
\setuvalue{\e!begin#1}{\dodoubleempty\dobeginofblock[#1]}%
\letvalue{\e!end#1}\relax}
-\long\def\dobeginofblock[#1][#2]%
- {\normalexpanded{\noexpand\dodowithbuffer{@block@}{\e!begin#1}{\e!end#1}}
+\def\dobeginofblock[#1][#2]%
+ {\normalexpanded{\buffers_pickup{@block@}{\e!begin#1}{\e!end#1}}
{}% before
{\ctxcommand{savestructureblock("#1","#2","@block@")}}}% after
diff --git a/tex/context/base/strc-des.mkiv b/tex/context/base/strc-des.mkiv
index cd2cbc12f..a386b16cb 100644
--- a/tex/context/base/strc-des.mkiv
+++ b/tex/context/base/strc-des.mkiv
@@ -350,8 +350,8 @@
{\dodescriptionhandler\currentdescriptiontext}%
{\dodescriptionhandler\currentdescriptionsample}}%
\assignwidth
- \descriptionsheadwidth
{\descriptionlocationparameter\c!width}
+ \descriptionsheadwidth
{\unhcopy\descriptionheadbox}
\descriptionsheaddistance
\setbox\descriptionheadbox\hbox
@@ -1079,7 +1079,9 @@
%D much like indentation and indenting. We also assume start/stop
%D usage or some explicit par.
-\installcommandhandler \??ds {indentedtext} \??ds
+\installcorenamespace{indentedtext}
+
+\installcommandhandler \??indentedtext {indentedtext} \??indentedtext
%D \startbuffer
%D \defineindentedtext[one][text=one]
@@ -1130,8 +1132,8 @@
\doifnothing{\indentedtextparameter\c!sample}
{\setindentedtextparameter\c!sample{\indentedtextparameter\c!text}}%
\assignwidth
- {\indented_text_width}
{\indentedtextparameter\c!width}
+ {\indented_text_width}
{\useindentedtextstyleandcolor\c!headstyle\c!headcolor
\indentedtextparameter\c!sample
\spr{\indentedtextparameter\c!separator}}
diff --git a/tex/context/base/strc-flt.mkvi b/tex/context/base/strc-flt.mkvi
index 579890985..0a0b6badd 100644
--- a/tex/context/base/strc-flt.mkvi
+++ b/tex/context/base/strc-flt.mkvi
@@ -26,8 +26,12 @@
%D - less gobal mess
%D - more mkiv-ish
-\installframedcommandhandler \??fl {float} \??fl
-\installframedcommandhandler \??kj {floatcaption} \??kj
+\installcorenamespace{float}
+\installcorenamespace{floatbuilder}
+\installcorenamespace{floatcaption}
+
+\installframedcommandhandler \??float {float} \??float
+\installframedcommandhandler \??floatcaption {floatcaption} \??floatcaption
\let\setupfloats \setupfloat
\let\setupcaption \setupfloatcaption
@@ -361,7 +365,7 @@
\def\dogetfloatdata % precedes save !
{\doglobal\increment\noffloatpages
\findtwopassdata{\s!float\s!data}{\noffloatpages}%
- \iftwopassdatafound
+ \ifconditional\twopassdatafound
\globallet\twopassfloatdata\twopassdata
\else
\globallet\twopassfloatdata\realpageno % \realfolio
@@ -812,14 +816,14 @@
\global\sidefloatextrashift\zeropoint
\doifassignmentelse{#settings}%
{\begingroup
- \getparameters[\??fl\??fl][\c!x=\zeropoint,\c!y=\zeropoint,#settings]%
+ \setupcurrentfloat[\c!x=\zeropoint,\c!y=\zeropoint,#settings]%
\ifgridsnapping
- \getnoflines\@@fly
+ \getnoflines{\floatparameter\c!y}%
\global\sidefloatdownshift\noflines\lineheight
\else
- \global\sidefloatdownshift\@@fl@@fly
+ \global\sidefloatdownshift\floatparameter\c!y
\fi
- \global\sidefloatextrashift\@@fl@@flx
+ \global\sidefloatextrashift\floatparameter\c!x
\endgroup}
{\movedownsidefloat[#settings]}}
@@ -1624,7 +1628,7 @@
\def\relocatecaptionright#1{\float_align_caption{\hbox to \tempfloatwidth{\hss#1}}}
\def\relocatecaptionleft #1{\float_align_caption{\hbox to \tempfloatwidth{#1\hss}}}
-\long\def\installfloatboxbuilder#1#2{\setvalue{\??kj:#1}{#2}}
+\long\def\installfloatboxbuilder#1#2{\setvalue{\??floatbuilder#1}{#2}}
\def\build_float_box
{\global\setbox\floatbox\vbox
@@ -1632,9 +1636,9 @@
\forgetall
\let\floatcaptionarrangement\s!default
\def\docommand##1%
- {\doifdefined{\??kj:##1}{\def\floatcaptionarrangement{##1}\quitcommalist}}%
+ {\doifdefined{\??floatbuilder##1}{\def\floatcaptionarrangement{##1}\quitcommalist}}%
\processcommacommand[\floatcaptionparameter\c!location]\docommand
- \executeifdefined{\??kj:\floatcaptionarrangement}{\getvalue{\??kj:\s!default}}}}
+ \executeifdefined{\??floatbuilder\floatcaptionarrangement}{\getvalue{\??floatbuilder\s!default}}}}
\def\locate_text_float
{\let\next\float_align_caption
diff --git a/tex/context/base/strc-itm.mkvi b/tex/context/base/strc-itm.mkvi
index 0dc06b105..f4fb779fd 100644
--- a/tex/context/base/strc-itm.mkvi
+++ b/tex/context/base/strc-itm.mkvi
@@ -15,6 +15,11 @@
\registerctxluafile{strc-itm}{1.001}
+%D Cleaning up this module happened around the time when Kate Bush came up
+%D with the nicest numbered list of words: 50 Words For Snow. It's therefore
+%D no surprise that I had that cd running several times when updating this
+%D code. One of the highlights of 2011.
+
% todo: check breaks
% todo: check grouping
@@ -277,7 +282,19 @@
%D Defining and setup:
-\installcommandhandler \??op {itemgroup} \??op
+\installcorenamespace{itemgroup}
+\installcorenamespace{itemgroupoption}
+\installcorenamespace{itemgroupsetting}
+\installcorenamespace{itemgroupkeyword}
+\installcorenamespace{itemgroupalign}
+\installcorenamespace{itemgrouplocal}
+\installcorenamespace{itemgroupglobal}
+\installcorenamespace{itemgroupdistance}
+\installcorenamespace{itemgroupstack}
+\installcorenamespace{itemgroupfirst}
+\installcorenamespace{itemgroupstart}
+
+\installcommandhandler \??itemgroup {itemgroup} \??itemgroup
\let\setupitemgroups\setupitemgroup
@@ -294,16 +311,16 @@
%D Global states
\def\itemgroups_store_continue_state#options#settings%
- {\setxvalue{\??op:o:\currentitemgroup}{\itemgroups_process_options{#options}}%
- \setgvalue{\??op:s:\currentitemgroup}{\setupcurrentitemgroup [#settings]}}
+ {\setxvalue{\??itemgroupoption \currentitemgroup}{\itemgroups_process_options{#options}}%
+ \setgvalue{\??itemgroupsetting\currentitemgroup}{\setupcurrentitemgroup [#settings]}}
\def\itemgroups_fetch_continue_state
- {\getvalue{\??op:o:\currentitemgroup}%
- \getvalue{\??op:s:\currentitemgroup}}
+ {\getvalue{\??itemgroupoption \currentitemgroup}%
+ \getvalue{\??itemgroupsetting\currentitemgroup}}
\def\itemgroups_reset_continue_state
- {\letgvalue{\??op:o:\currentitemgroup}\relax
- \letgvalue{\??op:s:\currentitemgroup}\relax}
+ {\letgvalue{\??itemgroupoption \currentitemgroup}\relax
+ \letgvalue{\??itemgroupsetting\currentitemgroup}\relax}
\definevspacing[\v!item @0] [penalty:0] % allow
\definevspacing[\v!item @10000] [penalty:10000] % no
@@ -345,8 +362,8 @@
\let\itemgroupsecond\itemgroupfirst
\let\itemgroupfirst\!!plusone
\fi
- \ifcsname\??op:k:\itemgroupsecond\endcsname
- \csname\??op:k:\itemgroupsecond\endcsname
+ \ifcsname\??itemgroupkeyword\itemgroupsecond\endcsname
+ \csname\??itemgroupkeyword\itemgroupsecond\endcsname
\else
\itemgroups_set_symbol\itemgroupconstantvalue
\fi
@@ -357,51 +374,51 @@
\settrue\c_itemgroups_pack
\fi}
-\setvalue{\??op:k:\!!zerocount}{} % ignore 0
-\setvalue{\??op:k:\v!packed }{\itemgroups_process_set_option_pack}
-\setvalue{\??op:k:\v!intro }{\settrue\c_itemgroups_intro} % here? not set to false
-\setvalue{\??op:k:\v!autointro}{\settrue\c_itemgroups_auto_intro}
-\setvalue{\??op:k:\v!broad }{\ifx\itemgroupfirst\empty
- \let\itemgroupfirst\!!plusone
- \fi
- \letitemgroupparameter\c!factor\itemgroupfirst}
-\setvalue{\??op:k:\v!text }{\settrue\c_itemgroups_text
- \settrue\c_itemgroups_inline
- \settrue\c_itemgroups_joined
- \itemgroups_process_set_option_pack}
-\setvalue{\??op:k:\v!columns }{\itemgroups_process_set_option_pack}
-\setvalue{\??op:k:\v!before }{\settrue\c_itemgroups_before}
-\setvalue{\??op:k:\v!after }{\settrue\c_itemgroups_after}
-\setvalue{\??op:k:\v!nowhite }{\settrue\c_itemgroups_nowhite}
-\setvalue{\??op:k:\v!margin }{\setitemgroupparameter\c!width{-2em}} % signal
-\setvalue{\??op:k:\v!inmargin }{\setitemgroupparameter\c!width{-2em}} % signal
-\setvalue{\??op:k:\v!atmargin }{\ifnum\c_itemgroups_nesting>\plusone
- \setitemgroupparameter\c!width{0em}%
- \fi} % signal
-\setvalue{\??op:k:\v!intext }{\settrue\c_itemgroups_inline}
-\setvalue{\??op:k:\v!loose }{\setfalse\c_itemgroups_optimize}
-\setvalue{\??op:k:\v!fit }{\settrue\c_itemgroups_fitting}
-\setvalue{\??op:k:\v!nofit }{\setfalse\c_itemgroups_fitting}
-\setvalue{\??op:k:\v!paragraph}{\settrue\c_itemgroups_paragraph
- \itemgroups_process_set_option_pack}
-\setvalue{\??op:k:\v!joinedup }{\settrue\c_itemgroups_joined
- \itemgroups_process_set_option_pack}
-\setvalue{\??op:k:\v!serried }{\edef\itemgroupfirst{-\ifx\itemgroupfirst\empty1\else\itemgroupfirst\fi}%
- \letitemgroupparameter\c!factor\itemgroupfirst}
-\setvalue{\??op:k:\v!stopper }{\letitemgroupparameter\c!placestopper\v!yes} % keep {}
-\setvalue{\??op:k:\v!unpacked }{\setfalse\c_itemgroups_pack}
-\setvalue{\??op:k:\v!repeat }{\settrue\c_itemgroups_repeat}
-\setvalue{\??op:k:\v!reverse }{\settrue\c_itemgroups_reverse}
-\setvalue{\??op:k:\v!columns }{\settrue\c_itemgroups_columns}
-\setvalue{\??op:k:\v!one }{\letitemgroupparameter\c!n\plusone}
-\setvalue{\??op:k:\v!two }{\letitemgroupparameter\c!n\plustwo}
-\setvalue{\??op:k:\v!three }{\letitemgroupparameter\c!n\plusthree}
-\setvalue{\??op:k:\v!four }{\letitemgroupparameter\c!n\plusfour}
-\setvalue{\??op:k:\v!five }{\letitemgroupparameter\c!n\plusfive}
-\setvalue{\??op:k:\v!standard }{\setupcurrentitemgroup
- [\c!width=1.5em,\c!factor=0,\c!distance=.5em,\c!inner=,\c!factor=0,%
- \c!beforehead=,\c!afterhead=\blank,%
- \c!before=\blank,\c!inbetween=\blank,\c!after=\blank]}
+\setvalue{\??itemgroupkeyword\!!zerocount}{} % ignore 0
+\setvalue{\??itemgroupkeyword\v!packed }{\itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!intro }{\settrue\c_itemgroups_intro} % here? not set to false
+\setvalue{\??itemgroupkeyword\v!autointro}{\settrue\c_itemgroups_auto_intro}
+\setvalue{\??itemgroupkeyword\v!broad }{\ifx\itemgroupfirst\empty
+ \let\itemgroupfirst\!!plusone
+ \fi
+ \letitemgroupparameter\c!factor\itemgroupfirst}
+\setvalue{\??itemgroupkeyword\v!text }{\settrue\c_itemgroups_text
+ \settrue\c_itemgroups_inline
+ \settrue\c_itemgroups_joined
+ \itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!columns }{\itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!before }{\settrue\c_itemgroups_before}
+\setvalue{\??itemgroupkeyword\v!after }{\settrue\c_itemgroups_after}
+\setvalue{\??itemgroupkeyword\v!nowhite }{\settrue\c_itemgroups_nowhite}
+\setvalue{\??itemgroupkeyword\v!margin }{\setitemgroupparameter\c!width{-2em}} % signal
+\setvalue{\??itemgroupkeyword\v!inmargin }{\setitemgroupparameter\c!width{-2em}} % signal
+\setvalue{\??itemgroupkeyword\v!atmargin }{\ifnum\c_itemgroups_nesting>\plusone
+ \setitemgroupparameter\c!width{0em}%
+ \fi} % signal
+\setvalue{\??itemgroupkeyword\v!intext }{\settrue\c_itemgroups_inline}
+\setvalue{\??itemgroupkeyword\v!loose }{\setfalse\c_itemgroups_optimize}
+\setvalue{\??itemgroupkeyword\v!fit }{\settrue\c_itemgroups_fitting}
+\setvalue{\??itemgroupkeyword\v!nofit }{\setfalse\c_itemgroups_fitting}
+\setvalue{\??itemgroupkeyword\v!paragraph}{\settrue\c_itemgroups_paragraph
+ \itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!joinedup }{\settrue\c_itemgroups_joined
+ \itemgroups_process_set_option_pack}
+\setvalue{\??itemgroupkeyword\v!serried }{\edef\itemgroupfirst{-\ifx\itemgroupfirst\empty1\else\itemgroupfirst\fi}%
+ \letitemgroupparameter\c!factor\itemgroupfirst}
+\setvalue{\??itemgroupkeyword\v!stopper }{\letitemgroupparameter\c!placestopper\v!yes} % keep {}
+\setvalue{\??itemgroupkeyword\v!unpacked }{\setfalse\c_itemgroups_pack}
+\setvalue{\??itemgroupkeyword\v!repeat }{\settrue\c_itemgroups_repeat}
+\setvalue{\??itemgroupkeyword\v!reverse }{\settrue\c_itemgroups_reverse}
+\setvalue{\??itemgroupkeyword\v!columns }{\settrue\c_itemgroups_columns}
+\setvalue{\??itemgroupkeyword\v!one }{\letitemgroupparameter\c!n\plusone}
+\setvalue{\??itemgroupkeyword\v!two }{\letitemgroupparameter\c!n\plustwo}
+\setvalue{\??itemgroupkeyword\v!three }{\letitemgroupparameter\c!n\plusthree}
+\setvalue{\??itemgroupkeyword\v!four }{\letitemgroupparameter\c!n\plusfour}
+\setvalue{\??itemgroupkeyword\v!five }{\letitemgroupparameter\c!n\plusfive}
+\setvalue{\??itemgroupkeyword\v!standard }{\setupcurrentitemgroup
+ [\c!width=1.5em,\c!factor=0,\c!distance=.5em,\c!inner=,\c!factor=0,%
+ \c!beforehead=,\c!afterhead=\blank,%
+ \c!before=\blank,\c!inbetween=\blank,\c!after=\blank]}
\def\itemgroups_initialize_local
{\setfalse\c_itemgroups_inline
@@ -430,16 +447,16 @@
\global\letitemgroupparameter\c!maxwidth\!!zerocount
}
-\setvalue{\??op:1:\v!intro }{\settrue\c_itemgroups_intro }
-\setvalue{\??op:1:\v!random }{\settrue\c_itemgroups_randomize}
-\setvalue{\??op:1:\v!continue}{\settrue\c_itemgroups_continue }
+\setvalue{\??itemgroupfirst\v!intro }{\settrue\c_itemgroups_intro }
+\setvalue{\??itemgroupfirst\v!random }{\settrue\c_itemgroups_randomize}
+\setvalue{\??itemgroupfirst\v!continue}{\settrue\c_itemgroups_continue }
\def\itemgroups_preset_stage_one#options%
{\processcommacommand[#options]\itemgroups_preset_stage_one_indeed}
\def\itemgroups_preset_stage_one_indeed#option%
- {\ifcsname\??op:1:#option\endcsname
- \csname\??op:1:#option\endcsname
+ {\ifcsname\??itemgroupfirst#option\endcsname
+ \csname\??itemgroupfirst#option\endcsname
\fi}
\ifdefined\dotagsetitemgroup \else \let\dotagsetitemgroup\relax \fi
@@ -688,36 +705,36 @@
\ifdefined\startcolumns \else \unexpanded\def\startcolumns[#settings]{} \fi
\ifdefined\stopcolumns \else \unexpanded\def\stopcolumns {} \fi
-\letvalue{\??op:a:\v!flushleft }\relax
-\letvalue{\??op:a:\v!right }\relax
-\letvalue{\??op:a:\v!flushright}\hfill
-\letvalue{\??op:a:\v!left }\hfill
-\letvalue{\??op:a:\v!middle }\hfil
-\letvalue{\??op:a:\v!center }\hfil
+\letvalue{\??itemgroupalign\v!flushleft }\relax
+\letvalue{\??itemgroupalign\v!right }\relax
+\letvalue{\??itemgroupalign\v!flushright}\hfill
+\letvalue{\??itemgroupalign\v!left }\hfill
+\letvalue{\??itemgroupalign\v!middle }\hfil
+\letvalue{\??itemgroupalign\v!center }\hfil
\def\itemgroups_left_sym_filler
- {\csname\??op:a:\itemgroupparameter\c!symalign\endcsname}
+ {\csname\??itemgroupalign\itemgroupparameter\c!symalign\endcsname}
% symbols + states
\def\itemgroups_store_global_symbol#symbol%
- {\letgvalue{\??op:g:\currentitemlevel}#symbol}
+ {\letgvalue{\??itemgroupglobal\currentitemlevel}#symbol}
\def\itemgroups_store_local_symbol#symbol%
- {\letgvalue{\??op:l:\currentitemlevel}#symbol}
+ {\letgvalue{\??itemgrouplocal\currentitemlevel}#symbol}
\def\itemgroups_fetch_global_symbol
- {\getvalue{\??op:g:\currentitemlevel}}
+ {\getvalue{\??itemgroupglobal\currentitemlevel}}
\def\itemgroups_fetch_local_symbol
- {\getvalue{\??op:l:\currentitemlevel}}
+ {\getvalue{\??itemgrouplocal\currentitemlevel}}
\def\itemgroups_setup_symbol_default
{\edef\itemgroups_asked_symbol{\itemgroupparameter\c!symbol}%
\itemgroups_store_global_symbol\empty}
\def\itemgroups_setup_symbol_continue
- {\ifcsname\??op:g:\currentitemlevel\endcsname
+ {\ifcsname\??itemgroupglobal\currentitemlevel\endcsname
\let\itemgroups_asked_symbol\itemgroups_fetch_global_symbol
\else
\let\itemgroups_asked_symbol\currentitemlevel
@@ -1071,25 +1088,25 @@
\startitemgrouphead}
\unexpanded\def\itemgroups_start_items
- {\dosingleempty\itemgroups_start_items}
+ {\dosingleempty\itemgroups_start_items_indeed}
-\unexpanded\def\itemgroups_start_items[#whatever]% something got lost
+\unexpanded\def\itemgroups_start_items_indeed[#whatever]% something got lost
{\itemgroups_start_edge
{\dorecurse{0\itemgroupparameter\c!items}{\itemgroups_used_symbol\hss}%
\unskip}}
\unexpanded\def\startspecialitemgroupitem[#name]%
- {\csname\??op:\e!start:\ifcsname#name\endcsname#name\else\v!item\fi\endcsname}
+ {\csname\??itemgroupstart\ifcsname\??itemgroupstart#name\endcsname#name\else\v!item\fi\endcsname}
\unexpanded\def\stopspecialitemgroupitem
{\stopitemgroupitem}
-\letvalue{\??op:\e!start:\v!item}\itemgroups_start_do_item
-\letvalue{\??op:\e!start:\v!sub }\itemgroups_start_subitem
-\letvalue{\??op:\e!start:\v!sym }\itemgroups_start_symbol
-\letvalue{\??op:\e!start:\v!ran }\itemgroups_start_edge
-\letvalue{\??op:\e!start:\v!its }\itemgroups_start_items
-\letvalue{\??op:\e!start:\v!mar }\itemgroups_start_margin
+\letvalue{\??itemgroupstart\v!item}\itemgroups_start_do_item
+\letvalue{\??itemgroupstart\v!sub }\itemgroups_start_subitem
+\letvalue{\??itemgroupstart\v!sym }\itemgroups_start_symbol
+\letvalue{\??itemgroupstart\v!ran }\itemgroups_start_edge
+\letvalue{\??itemgroupstart\v!its }\itemgroups_start_items
+\letvalue{\??itemgroupstart\v!mar }\itemgroups_start_margin
\def\optimizelistitemsbreak
{\ifcase\c_itemgroups_column_depth \ifconditional\c_itemgroups_optimize
@@ -1292,15 +1309,15 @@
\itemgroups_check_for_repeated
\ignorespaces}
-\setvalue{\??op:d:\c!textdistance:\v!none}%
+\setvalue{\??itemgroupdistance\c!textdistance:\v!none}%
{\let\m_itemgroups_text_distance\zeropoint}
\unexpanded\def\itemgroups_set_text_item_distance
{\edef\m_itemgroups_text_distance{\itemgroupparameter\c!textdistance}%
\ifx\m_itemgroups_text_distance\empty
%
- \else\ifcsname\??op:d:\c!textdistance:\m_itemgroups_text_distance\endcsname
- \csname\??op:d:\c!textdistance:\m_itemgroups_text_distance\endcsname
+ \else\ifcsname\??itemgroupdistance\c!textdistance:\m_itemgroups_text_distance\endcsname
+ \csname\??itemgroupdistance\c!textdistance:\m_itemgroups_text_distance\endcsname
\else
\itemgroups_set_text_item_distance_indeed
\fi\fi}
@@ -1390,7 +1407,7 @@
\@EA\def\@EA\itemgroups_collected_store\@EA#\@EA1\csname\e!stop\v!item\endcsname % use grabuntil
{\advance\c_itemgroups_collected_stored\plusone
- \setvalue{\??op:x:\number\c_itemgroups_collected_stored}{\startitemgroupitem#1\stopitemgroupitem}}
+ \setvalue{\??itemgroupstack\number\c_itemgroups_collected_stored}{\startitemgroupitem#1\stopitemgroupitem}}
\def\itemgroups_collected_flush
{\ifconditional\c_itemgroups_randomize
@@ -1398,9 +1415,9 @@
\else
\advance\c_itemgroups_collected_current\plusone
\fi
- \doifdefined{\??op:x:\number\c_itemgroups_collected_current}
- {\getvalue{\??op:x:\number\c_itemgroups_collected_current}%
- \letbeundefined{\??op:x:\number\c_itemgroups_collected_current}%
+ \doifdefined{\??itemgroupstack\number\c_itemgroups_collected_current}
+ {\getvalue{\??itemgroupstack\number\c_itemgroups_collected_current}%
+ \letbeundefined{\??itemgroupstack\number\c_itemgroups_collected_current}%
\advance\c_itemgroups_collected_done\plusone}%
\ifnum\c_itemgroups_collected_done<\c_itemgroups_collected_stored
\expandafter\itemgroups_collected_flush
diff --git a/tex/context/base/strc-lst.mkiv b/tex/context/base/strc-lst.mkiv
index 6d7622a6a..043d23bb5 100644
--- a/tex/context/base/strc-lst.mkiv
+++ b/tex/context/base/strc-lst.mkiv
@@ -15,6 +15,8 @@
\registerctxluafile{strc-lst}{1.001}
+% needs clean up
+
% nmstate -> no pagenumber if not start
% autocrossdocument -> todo
% expansion -> todo
@@ -23,7 +25,13 @@
\unprotect
-\installframedcommandhandler \??li {list} \??li
+\installcorenamespace{list}
+\installcorenamespace{listextras}
+\installcorenamespace{listalternatives}
+\installcorenamespace{listelement}
+\installcorenamespace{listelementcommand}
+
+\installframedcommandhandler \??list {list} \??list
\def\usenestedliststyleandcolor#1#2% will change
{\useliststyleandcolor#1#2%
@@ -124,9 +132,12 @@
{\endgroup}
\def\dodostructurelistinject[#1][#2]%
- {\getparameters[\??li\??li][\c!type=userdata,\c!location=\v!none,#1]%
- \edef\currentlisttype {\@@li@@litype}%
- \edef\currentlistlocation{\@@li@@lilocation}%
+% {\getparameters[\??li\??li][\c!type=userdata,\c!location=\v!none,#1]%
+% \edef\currentlisttype {\@@li@@litype}%
+% \edef\currentlistlocation{\@@li@@lilocation}%
+ {\setupcurrentlist[\c!type=userdata,\c!location=\v!none,#1]% grouped
+ \edef\currentlisttype {\listparameter\c!type}%
+ \edef\currentlistlocation{\listparameter\c!location}%
\setnextinternalreference
\edef\currentlistnumber{\ctxlua{structures.lists.push{
references = {
@@ -252,7 +263,7 @@
{\dodoubleargument\dodefinelistextra}
\def\dodefinelistextra[#1][#2]%
- {\getparameters[\??li:\c!extras:#1:][#2]}
+ {\getparameters[\??listextras#1:][#2]}
% todo: more generic tracing
@@ -260,8 +271,8 @@
[\v!page]
[\c!before={\showmessage\m!system{14}{\currentlist/\currentlistindex}\page}]
-\def\processlistextrabefore{\executeifdefined{\??li:\c!extras:\currentlistextra:\c!before}\relax}
-\def\processlistextraafter {\executeifdefined{\??li:\c!extras:\currentlistextra:\c!after }\relax}
+\def\processlistextrabefore{\executeifdefined{\??listextras\currentlistextra:\c!before}\relax}
+\def\processlistextraafter {\executeifdefined{\??listextras\currentlistextra:\c!after }\relax}
\unexpanded\def\processlistofstructure#1#2#3#4% name, method, n, extra
{\ctxlua{structures.lists.pushnesting(#3)}%
@@ -301,14 +312,14 @@
% TODO: also make this a commandhandler
\def\listalternativeparameter#1%
- {\ifcsname\??li\??li\listparameter\c!alternative#1\endcsname
- \csname\??li\??li\listparameter\c!alternative#1\endcsname
+ {\ifcsname\??listalternatives\listparameter\c!alternative#1\endcsname
+ \csname\??listalternatives\listparameter\c!alternative#1\endcsname
\else
\listparameter{#1}%
\fi}
\unexpanded\def\setuplistalternative[#1]%
- {\dodoubleargument\getparameters[\??li\??li#1]}
+ {\dodoubleargument\getparameters[\??listalternatives#1]}
\def\listfill {\listalternativeparameter\c!command }
\def\listskip {\listalternativeparameter\c!distance}
@@ -544,22 +555,20 @@
% so far for list symbols
-\def\@@dodolistelement{dodolistelement}
-
\def\dosomelistelement#1#2#3{#1 #2 #3}
-\setvalue{\@@dodolistelement a}{\let\dosomelistelement\dodofixdlistelementABC}
-\setvalue{\@@dodolistelement b}{\let\dosomelistelement\dodofixdlistelementABC}
-\setvalue{\@@dodolistelement c}{\let\dosomelistelement\dodofixdlistelementABC}
-\setvalue{\@@dodolistelement d}{\let\dosomelistelement\dodofixdlistelementD}
-\setvalue{\@@dodolistelement e}{\let\dosomelistelement\dodofixdlistelementE}
-\setvalue{\@@dodolistelement f}{\let\dosomelistelement\dodofixdlistelementF}
-\setvalue{\@@dodolistelement g}{\let\dosomelistelement\dodofixdlistelementG}
+\setvalue{\??listelement a}{\let\dosomelistelement\dodofixdlistelementABC}
+\setvalue{\??listelement b}{\let\dosomelistelement\dodofixdlistelementABC}
+\setvalue{\??listelement c}{\let\dosomelistelement\dodofixdlistelementABC}
+\setvalue{\??listelement d}{\let\dosomelistelement\dodofixdlistelementD}
+\setvalue{\??listelement e}{\let\dosomelistelement\dodofixdlistelementE}
+\setvalue{\??listelement f}{\let\dosomelistelement\dodofixdlistelementF}
+\setvalue{\??listelement g}{\let\dosomelistelement\dodofixdlistelementG}
-\setvalue{\@@dodolistelement\v!none }{\def\dosomelistelement{\dodofreevlistelement}}
-\setvalue{\@@dodolistelement\v!vertical }{\def\dosomelistelement{\dodofreevlistelement}}
-\setvalue{\@@dodolistelement\v!horizontal}{\def\dosomelistelement{\dodofreehlistelement}}
-\setvalue{\@@dodolistelement\v!command }{\let\dosomelistelement\dodocommandlistelement}
+\setvalue{\??listelement\v!none }{\def\dosomelistelement{\dodofreevlistelement}}
+\setvalue{\??listelement\v!vertical }{\def\dosomelistelement{\dodofreevlistelement}}
+\setvalue{\??listelement\v!horizontal}{\def\dosomelistelement{\dodofreehlistelement}}
+\setvalue{\??listelement\v!command }{\let\dosomelistelement\dodocommandlistelement}
% \setuplist
% [section]
@@ -573,13 +582,13 @@
\unexpanded\def\definelistplacement
{\dodoubleempty\dodefinelistplacement}
-\def\dodefinelistplacement[#1][#2]%
- {\setvalue{\@@dodolistelement#1}%
+\def\dodefinelistplacement[#1][#2]% looks messy
+ {\setvalue{\??listelement#1}%
{\doifelsenothing{#2}
- {\getvalue{\@@dodolistelement\v!command}}%
- {\executeifdefined{\@@dodolistelement#2}{\getvalue{\@@dodolistelement\v!command}}}%
- \setlistparameter\c!command{\getvalue{\@@dodolistelement::#1}}}%
- \setvalue{\@@dodolistelement::#1}}
+ {\getvalue{\??listelement\v!command}}%
+ {\executeifdefined{\??listelement#2}{\getvalue{\??listelement\v!command}}}%
+ \setlistparameter\c!command{\getvalue{\??listelementcommand#1}}}%
+ \setvalue{\??listelementcommand#1}}
% don't mess arround with endgraf/grouping else we loose leftskip
@@ -592,7 +601,7 @@
\ifx\currentlistalternative\empty
[unknown list alternative]%
\else
- \executeifdefined{\@@dodolistelement\currentlistalternative}{[unknown list alternative: \currentlistalternative]}%
+ \executeifdefined{\??listelement\currentlistalternative}{[unknown list alternative: \currentlistalternative]}%
\fi}
\def\dodolistelement#1#2#3#4#5#6%
@@ -907,8 +916,8 @@
% todo: make simple parameter handler
-\def\combinedlistparameter#1{\csname\??ih\currentcombinedlist#1\endcsname}
-\def\combinedlisttoks {\csname\??ih::\currentcombinedlist\endcsname}
+\def\combinedlistparameter#1{\csname\??ih\currentcombinedlist#1\endcsname} % to be redone!
+\def\combinedlisttoks {\csname\??ih::\currentcombinedlist\endcsname} % to be redone!
\unexpanded\def\definecombinedlist
{\dotripleempty\dodefinecombinedlist}
@@ -918,8 +927,8 @@
\getparameters
[\??ih#1]
[\c!criterium=\v!local,\c!number=0,\c!list={#2},#3]%
-\expandafter\newtoks\csname\??ih::\currentcombinedlist\endcsname
-\combinedlisttoks{#3}%
+ \expandafter\newtoks\csname\??ih::\currentcombinedlist\endcsname
+ \combinedlisttoks{#3}%
\setvalue{\e!setup#1\e!endsetup}{\dodoubleempty\dosetupcombinedlist[#1]}%
\setvalue{\e!place#1}{\dodoubleempty\doplacecombinedlist[#1]}%
\setvalue{\e!complete#1}{\dodoubleempty\docompletecombinedlist[#1]}}
diff --git a/tex/context/base/strc-mar.lua b/tex/context/base/strc-mar.lua
index 45a6be4e7..65d806a64 100644
--- a/tex/context/base/strc-mar.lua
+++ b/tex/context/base/strc-mar.lua
@@ -195,7 +195,7 @@ function marks.define(name,settings)
settings = settings or { }
data[name] = settings
local parent = settings.parent
- if parent == nil or parent == "" then
+ if parent == nil or parent == "" or parent == name then
settings.parent = false
else
local dp = data[parent]
diff --git a/tex/context/base/strc-mar.mkiv b/tex/context/base/strc-mar.mkiv
index 5ae23ac75..dd18421f7 100644
--- a/tex/context/base/strc-mar.mkiv
+++ b/tex/context/base/strc-mar.mkiv
@@ -41,47 +41,28 @@
\definesystemattribute [marks] [global]
-\let\currentmarking\empty
+\installcorenamespace{marking}
-\def\markingparameter #1{\csname\domarkingparameter{\??mk\currentmarking}#1\endcsname}
-\def\namedmarkingparameter #1#2{\csname\domarkingparameter{\??mk#1}#2\endcsname}
-\def\domarkingparameter #1#2{\ifcsname#1#2\endcsname#1#2\else\expandafter\domarkingparentparameter\csname#1\s!parent\endcsname#2\fi}
-\def\domarkingparentparameter#1#2{\ifx#1\relax\s!empty\else\domarkingparameter#1#2\fi}
+\installcommandhandler \??marking {marking} \??marking
-\newconditional\inhibitgetmarking
-\newconditional\inhibitsetmarking
-\newtoks \everymarking
-
-\unexpanded\def\setupmarking
- {\dodoubleargument\dosetupmarking}
-
-\def\dosetupmarking[#1][#2]%
- {\ifsecondargument
- \def\docommand##1{\getparameters[\??mk##1][#2]}%
- \processcommalist[#1]\docommand
- \else
- \getparameters[\??mk][#1]%
- \fi}
+\newconditional\inhibitgetmarking % will become private
+\newconditional\inhibitsetmarking % will become private
-% management
+\newtoks \everymarking
-\unexpanded\def\definemarking {\dodoubleempty \dodefinemarking}
-\unexpanded\def\relatemarking {\dodoubleempty \dorelatemarking}
-\unexpanded\def\setmarking {\dosingleargument\dosetmarking } \let\marking\setmarking
-\unexpanded\def\resetmarking {\dosingleargument\doresetmarking }
-\unexpanded\def\synchronizemarking{\dotripleargument\dosynchronizemarking }
+\unexpanded\def\relatemarking {\dodoubleempty \marking_relate }
+\unexpanded\def\setmarking {\dosingleargument\marking_set } \let\marking\setmarking
+\unexpanded\def\resetmarking {\dosingleargument\marking_reset }
+\unexpanded\def\synchronizemarking{\dotripleargument\marking_synchronize}
-\def\dodefinemarking[#1][#2]% marking parent
- {\doifelsenothing{#2}
- {\ctxcommand{definemarking("#1")}%
- \getparameters[\??mk#1][\s!parent=\??mk]}
- {\ctxcommand{definemarking("#1",{ parent = "#2" })}%
- \getparameters[\??mk#1][\s!parent=\??mk#2]}}
+\appendtoks
+ \ctxcommand{definemarking("\currentmarking",{ parent = "\currentmarkingparent" })}%
+\to \everydefinemarking
-\def\dorelatemarking[#1][#2]%
+\def\marking_relate[#1][#2]%
{\ctxcommand{relatemarking("#1","#2")}}
-\def\dosetmarking[#1]#2%
+\def\marking_set[#1]#2%
{\ifconditional\inhibitsetmarking
% nothing
\else
@@ -90,17 +71,17 @@
{\ctxcommand{setmarking("#1",\!!bs\detokenize{#2}\!!es)}}%
\fi}
-\def\doresetmarking[#1]%
+\def\marking_reset[#1]%
{\ctxcommand{resetmarking("#1")}}
+\def\marking_synchronize[#1][#2][#3]% #1=class #2=boxnumber (some day also name) #3=options, maybe second argument table
+ {\ifvoid#2\else\ctxcommand{synchronizemarking("#1",\number#2,"#3")}\fi}
+
\def\doifelsemarking#1%
{\ctxcommand{doifelsemarking("#1")}}
-\def\dosynchronizemarking[#1][#2][#3]% #1=class #2=boxnumber (some day also name) #3=options, maybe second argument table
- {\ifvoid#2\else\ctxcommand{synchronizemarking("#1",\number#2,"#3")}\fi}
-
% \appendtoks
-% \dosynchronizemarking[\v!page][\normalpagebox][\v!keep]% keep if no marks
+% \marking_synchronize[\v!page][\normalpagebox][\v!keep]% keep if no marks
% \to \everybeforepagebody
% defaults
@@ -115,15 +96,15 @@
\unexpanded\def\getmarking
{\ifconditional\inhibitgetmarking
- \expandafter\dotripleargument\expandafter\nogetmarking
+ \expandafter\dotripleargument\expandafter\marking_get_nop
\else
- \expandafter\dotripleargument\expandafter\dogetmarking
+ \expandafter\dotripleargument\expandafter\marking_get_yes
\fi}
-\def\nogetmarking[#1][#2][#3]%
+\def\marking_get_nop[#1][#2][#3]%
{}
-\def\dogetmarking[#1][#2][#3]%
+\def\marking_get_yes[#1][#2][#3]%
{\doif{\namedmarkingparameter{#1}\c!state}\v!start
{\begingroup
\setsystemmode\v!marking
diff --git a/tex/context/base/strc-not.mkiv b/tex/context/base/strc-not.mkiv
index e026a5986..6e5e0ad96 100644
--- a/tex/context/base/strc-not.mkiv
+++ b/tex/context/base/strc-not.mkiv
@@ -86,7 +86,7 @@
% better mark a note .. once flushed no more flushing
%appendtoks \notesenabledfalse \to \everymarking
-\appendtoks \notesenabledfalse \to \everypagebody
+\appendtoks \notesenabledfalse \to \everybeforepagebody
\appendtoks \notesenabledfalse \to \everystructurelist % quick hack
%D Often we need to process the whole set of notes and to make that
diff --git a/tex/context/base/strc-pag.mkiv b/tex/context/base/strc-pag.mkiv
index 8a6f463e4..3075b18be 100644
--- a/tex/context/base/strc-pag.mkiv
+++ b/tex/context/base/strc-pag.mkiv
@@ -316,12 +316,12 @@
\trackingmarginnotesfalse
\fi
\fi
- \recalculatebackgrounds
+ \page_backgrounds_recalculate
\dosetpagenumberlocation
\to \everysetuppagenumbering
-\ifdefined \recalculatebackgrounds \else
- \let\recalculatebackgrounds\relax
+\ifdefined \page_backgrounds_recalculate \else
+ \let\page_backgrounds_recalculate\relax
\fi
\ifdefined \dosetpagenumberlocation \else
diff --git a/tex/context/base/strc-ref.mkvi b/tex/context/base/strc-ref.mkvi
index b6a644619..98cb7e46c 100644
--- a/tex/context/base/strc-ref.mkvi
+++ b/tex/context/base/strc-ref.mkvi
@@ -964,7 +964,9 @@
% to be done: interfaced
-\installcommandhandler \??re {referenceformat} \??re
+\installcorenamespace{referenceformat}
+
+\installcommandhandler \??referenceformat {referenceformat} \??referenceformat
\appendtoks
\setuevalue\currentreferenceformat{\execute_reference_format{\currentreferenceformat}}%
diff --git a/tex/context/base/strc-sec.mkiv b/tex/context/base/strc-sec.mkiv
index d18a729e6..cac338af6 100644
--- a/tex/context/base/strc-sec.mkiv
+++ b/tex/context/base/strc-sec.mkiv
@@ -61,7 +61,14 @@
% \c!file \c!grid \c!margintext
% \c!expansion \c!xmlsetup \s!catcode
-\installcommandhandler \??nh {head} \??nh
+\installcorenamespace{head}
+\installcorenamespace{headlevel}
+\installcorenamespace{headincrement}
+\installcorenamespace{headplace}
+\installcorenamespace{headmarkyes}
+\installcorenamespace{headmarknop}
+
+\installcommandhandler \??head {head} \??head
\let\setupheads\setuphead % will go
@@ -79,7 +86,7 @@
\normalexpanded {%
\setheadparameter{\c!label}{\currenthead}%
\setheadparameter{\c!coupling}{\currenthead}%
- \setheadparameter{\s!parent}{\??nh\currentheadparent}%
+ \setheadparameter{\s!parent}{\??head\currentheadparent}%
\definemarking[\currenthead] [\currentheadsection]%
\definemarking[\currenthead\v!number][\currentheadsection]%
\setupmarking [\currenthead] [\c!filtercommand=\noexpand\sectionheadmarkingtitle {\currenthead}]%
@@ -164,24 +171,24 @@
\def\setnextsectionlevel#1%
{\global\advance\maxstructuredepth\plusone
- \setevalue{\??nh:\c!level:#1}{\the\maxstructuredepth}}
+ \setevalue{\??headlevel#1}{\the\maxstructuredepth}}
\def\sectionlevel#1%
- {\csname\??nh:\c!level:\ifcsname\??nh:\c!level:#1\endcsname#1\else\v!none\fi\endcsname}
+ {\csname\??headlevel\ifcsname\??headlevel#1\endcsname#1\else\v!none\fi\endcsname}
-\setvalue{\??nh:\c!level:\v!block}{0}
-\setvalue{\??nh:\c!level:\v!none }{-1}
-\setvalue{\??nh:\c!level:\v!text }{-2}
+\setvalue{\??headlevel\v!block}{0}
+\setvalue{\??headlevel\v!none }{-1}
+\setvalue{\??headlevel\v!text }{-2}
\newtoks\everydefinesection
\unexpanded\def\definesection[#1]%
- {\ifcsname\??nh:\c!level:#1\endcsname \else
+ {\ifcsname\??headlevel#1\endcsname \else
\edef\currentsection{#1}% not used, will go
\edef\currenthead{#1}%
\setnextsectionlevel{#1}%
\setstructurelevel{#1}{\sectionlevel{#1}}%
- \normalexpanded{\setheadparameter{\s!parent}{\??nh\lastsectionname}}% TO BE CHECKED
+ \normalexpanded{\setheadparameter{\s!parent}{\??head\lastsectionname}}% TO BE CHECKED, WE HAVE A HELPER
\the\everydefinesection
% so far for these default inheritances
\definemarking[#1]%
@@ -198,7 +205,7 @@
{\dotripleempty\dosetupsection}
\def\dosetupsection[#1][#2][#3]%
- {\ifcsname\??nh:\c!level:#1\endcsname
+ {\ifcsname\??headlevel#1\endcsname
\dodosetupsection[#1][#2][#3]%
\else
\dodosetupsection[\sectionheadsection{#1}][#2][#3]%
@@ -207,11 +214,9 @@
\def\dodosetupsection[#1][#2][#3]%
{\pushmacro\currenthead
\ifthirdargument
- % \getparameters[\??nh#1#2][#3]% ? probably sectionblock
\edef\currenthead{#1#2}% % not used at any more in mkiv (sets now)
\setupcurrenthead[#3]%
\else
- % \getparameters[\??nh#1][#2]%
\edef\currenthead{#1}%
\setupcurrenthead[#2]%
\fi
@@ -298,15 +303,15 @@
\newconditional\headshownumber
\newconditional\headisdisplay
-\setvalue{\??nh:\c!incrementnumber:\v!yes }{\settrue \headdoincrement\settrue \headtolist}
-\setvalue{\??nh:\c!incrementnumber:\v!no }{\setfalse\headdoincrement\setfalse\headtolist}
-\setvalue{\??nh:\c!incrementnumber:\v!list }{\setfalse\headdoincrement\settrue \headtolist}
-\setvalue{\??nh:\c!incrementnumber:\s!empty}{\settrue \headdoincrement\settrue \headtolist}
+\setvalue{\??headincrement\v!yes }{\settrue \headdoincrement\settrue \headtolist}
+\setvalue{\??headincrement\v!no }{\setfalse\headdoincrement\setfalse\headtolist}
+\setvalue{\??headincrement\v!list }{\setfalse\headdoincrement\settrue \headtolist}
+\setvalue{\??headincrement\s!empty}{\settrue \headdoincrement\settrue \headtolist}
\def\setheadincrement
{\edef\currentheadincrement{\headparameter\c!incrementnumber}%
- \ifcsname\??nh:\c!incrementnumber:\currentheadincrement\endcsname
- \csname\??nh:\c!incrementnumber:\currentheadincrement\endcsname
+ \ifcsname\??headincrement\currentheadincrement\endcsname
+ \csname\??headincrement\currentheadincrement\endcsname
\else
\settrue \headdoincrement\settrue \headtolist
% \filterheadnumber
@@ -320,30 +325,30 @@
% use : \currentheadincrement as spec
\fi}
-\setvalue{\??nh:\c!placehead:\v!yes}%
+\setvalue{\??headplace\v!yes}%
{\setfalse\headleaveempty
\settrue \headdoplace
\setfalse\headhidden}
-\setvalue{\??nh:\c!placehead:\v!empty}%
+\setvalue{\??headplace\v!empty}%
{\settrue \headleaveempty
\settrue \headdoplace
\setfalse\headhidden}
-\setvalue{\??nh:\c!placehead:\v!no}%
+\setvalue{\??headplace\v!no}%
{\settrue \headleaveempty
\setfalse\headdoplace
\setfalse\headhidden}
-\setvalue{\??nh:\c!placehead:\v!hidden}%
+\setvalue{\??headplace\v!hidden}%
{\settrue \headleaveempty
\setfalse\headdoplace
\settrue \headhidden}
\def\setheadplacement
{\executeifdefined
- {\??nh:\c!placehead:\headparameter\c!placehead}
- {\getvalue{\??nh:\c!placehead:\v!yes}}}
+ {\??headplace\headparameter\c!placehead}
+ {\getvalue{\??headplace\v!yes}}}
\def\setheaddisplay
{\doifelsevalue{\??ns:\headparameter\c!alternative}\v!horizontal
@@ -353,7 +358,7 @@
\newmode\v!sectionnumber
\def\dosettructureheadnumbercontent
- {\setsystemmode \v!sectionnumber
+ {\setsystemmode\v!sectionnumber
\settrue\headshownumber} % why ?
\def\doresettructureheadnumbercontent
@@ -674,16 +679,16 @@
{\doifsomething{\headparameter#2}{\expanded{\setuplayouttext[#1][\c!state=\headparameter#2]}}}
\donothing}
-\setvalue{\??nh:\??mk:n:\v!page }{}
-\setvalue{\??nh:\??mk:n:\v!reset}{\resetcurrentstructuremarks}
-\setvalue{\??nh:\??mk:y:\v!page }{} % to be checked: {\resetcurrentstructuremarks}
-\setvalue{\??nh:\??mk:y:\v!reset}{\resetcurrentstructuremarks}
+\setvalue{\??headmarknop\v!page }{}
+\setvalue{\??headmarknop\v!reset}{\resetcurrentstructuremarks}
+\setvalue{\??headmarkyes\v!page }{} % to be checked: {\resetcurrentstructuremarks}
+\setvalue{\??headmarkyes\v!reset}{\resetcurrentstructuremarks}
\def\docheckheadlayout
{\doifelsenothing{\headparameter\c!page}
- {\getvalue{\??nh:\??mk:n:\headparameter\c!marking}}
+ {\getvalue{\??headmarknop\headparameter\c!marking}}
{\page[\headparameter\c!page]%
- \getvalue{\??nh:\??mk:y:\headparameter\c!marking}%
+ \getvalue{\??headmarkyes\headparameter\c!marking}%
\dodocheckheadlayout\v!header\c!header
\dodocheckheadlayout\v!text \c!text
\dodocheckheadlayout\v!footer\c!footer}}
diff --git a/tex/context/base/strc-syn.mkiv b/tex/context/base/strc-syn.mkiv
index 7a9d5d3dd..535eab04b 100644
--- a/tex/context/base/strc-syn.mkiv
+++ b/tex/context/base/strc-syn.mkiv
@@ -51,7 +51,9 @@
\globallet#3\s!tex
\fi}
-\installsimplecommandhandler \??sm {synonym} \??sm
+\installcorenamespace{synonym}
+
+\installsimplecommandhandler \??synonym {synonym} \??synonym
\let\setupsynonyms\setupsynonym
@@ -209,7 +211,9 @@
%D Sorting (a simplified version of synonym).
-\installsimplecommandhandler \??so {sorting} \??so
+\installcorenamespace{sorting}
+
+\installsimplecommandhandler \??sorting {sorting} \??sorting
\setupsorting
[\c!state=\v!start,
@@ -304,7 +308,7 @@
\def\doplacelistofsorts[#1][#2]% NOG EEN RUWE VERSIE MAKEN ZONDER WITRUIMTE ETC ETC
{\begingroup
\def\currentsorting{#1}%
- \getparameters[\??so#1][#2]%
+ \setupcurrentsorting[#2]%
\startpacked
\ctxlua{structures.synonyms.process('#1',{
criterium = "\sortingparameter\c!criterium",
diff --git a/tex/context/base/strc-tag.mkiv b/tex/context/base/strc-tag.mkiv
index 7c4042348..c6dd93657 100644
--- a/tex/context/base/strc-tag.mkiv
+++ b/tex/context/base/strc-tag.mkiv
@@ -253,7 +253,7 @@
\appendtoks
\dodisableelements
\dodisabletagged
-\to \everypagebody
+\to \everybeforepagebody
% \doifinelementelse{structure:section} {yes} {no}
% \doifinelementelse{structure:chapter} {yes} {no}
diff --git a/tex/context/base/supp-mat.mkiv b/tex/context/base/supp-mat.mkiv
index e4cfd13e5..bc26611ae 100644
--- a/tex/context/base/supp-mat.mkiv
+++ b/tex/context/base/supp-mat.mkiv
@@ -96,20 +96,20 @@
%D
%D An example of usage of the following can be found in the MathML module:
-\long\def\displaymathematics#1{\relax\ifmmode#1\else\dostartformula{}#1\dostopformula\fi}
- \def\inlinemathematics {\dontleavehmode\mathematics}
- \def\automathematics {\relax\ifhmode\@EA\inlinemathematics\else\@EA\displaymathematics\fi}
+\unexpanded\def\displaymathematics#1{\relax\ifmmode#1\else\dostartformula{}#1\dostopformula\fi}
+\unexpanded\def\inlinemathematics {\dontleavehmode\mathematics}
+\unexpanded\def\automathematics {\relax\ifhmode\expandafter\inlinemathematics\else\expandafter\displaymathematics\fi}
% better, esp when used in bTABLE ... eTABLE
-\def\automathematics
+\unexpanded\def\automathematics
{\relax
\ifhmode
\expandafter\inlinemathematics
\else\ifintable
- \expandafter\expandafter\expandafter\inlinemathematics
+ \doubleexpandafter\inlinemathematics
\else
- \expandafter\expandafter\expandafter\displaymathematics
+ \doubleexpandafter\displaymathematics
\fi\fi}
%D \macros
@@ -216,8 +216,8 @@
%D
%D \typebuffer \getbuffer
-\def\cramped
- {\mathpalette\docramped}
+\unexpanded\def\cramped
+ {\mathpalette\math_cramped}
%D We force a cramped style by issuing a non||existing radical (box).
%D After that we make sure the height is correct. (Comment taken from
@@ -245,7 +245,7 @@
% \ht\scratchbox-\scratchdimen
% \box\scratchbox}
-\def\docramped#1#2%
+\def\math_cramped#1#2%
{\begingroup % added HH, made even more cramped
\setbox\scratchbox\hbox
{\nulldelimiterspace\zeropoint
@@ -295,13 +295,13 @@
%D Notice that \type {\clap{\cramped ... }} would also work,
%D but it requires \TEX\ to typeset it arguments 16 times.
-\def\docrampedllap#1#2{{}\dollap{\docramped #1{#2}}}
-\def\docrampedrlap#1#2{{}\dorlap{\docramped #1{#2}}}
-\def\docrampedclap#1#2{{}\doclap{\docramped #1{#2}}}
+\unexpanded\def\crampedllap{\mathpalette\math_cramped_llap}
+\unexpanded\def\crampedrlap{\mathpalette\math_cramped_rlap}
+\unexpanded\def\crampedclap{\mathpalette\math_cramped_clap}
-\def\crampedllap{\mathpalette\docrampedllap}
-\def\crampedrlap{\mathpalette\docrampedrlap}
-\def\crampedclap{\mathpalette\docrampedclap}
+\def\math_cramped_llap#1#2{{}\dollap{\math_cramped #1{#2}}}
+\def\math_cramped_rlap#1#2{{}\dorlap{\math_cramped #1{#2}}}
+\def\math_cramped_clap#1#2{{}\doclap{\math_cramped #1{#2}}}
% experiment, not yet to be used
diff --git a/tex/context/base/supp-ran.mkiv b/tex/context/base/supp-ran.mkiv
index a04d28247..356ed580f 100644
--- a/tex/context/base/supp-ran.mkiv
+++ b/tex/context/base/supp-ran.mkiv
@@ -18,13 +18,13 @@
\registerctxluafile{supp-ran}{1.001}
-\def\getrandomcount #1#2#3{#1=\ctxcommand{getrandomcounta(\number#2,\number#3)}}
-\def\getrandomdimen #1#2#3{#1=\ctxcommand{getrandomcounta(\number\dimexpr#2,\number\dimexpr#3)}\scaledpoint}
-\def\getrandomnumber#1#2#3{\edef#1{\ctxcommand{getrandomcounta(\number#2,\number#3)}}}
-\def\getrandomfloat #1#2#3{\edef#1{\ctxcommand{getrandomcountb(\number\dimexpr#2\points,\number\dimexpr#3\points)}}}
-\def\setrandomseed #1{\ctxcommand{setrandomseed(\number#1)}}
-\def\getrandomseed #1{\edef#1{\ctxcommand{getrandomseed()}}}
-\def\freezerandomseed {\ctxcommand{freezerandomseed()}}
-\def\defrostrandomseed {\ctxcommand{defrostrandomseed()}}
+\unexpanded\def\getrandomcount #1#2#3{#1=\ctxcommand{getrandomcounta(\number#2,\number#3)}}
+\unexpanded\def\getrandomdimen #1#2#3{#1=\ctxcommand{getrandomcounta(\number\dimexpr#2,\number\dimexpr#3)}\scaledpoint}
+\unexpanded\def\getrandomnumber#1#2#3{\edef#1{\ctxcommand{getrandomcounta(\number#2,\number#3)}}}
+\unexpanded\def\getrandomfloat #1#2#3{\edef#1{\ctxcommand{getrandomcountb(\number\dimexpr#2\points,\number\dimexpr#3\points)}}}
+\unexpanded\def\setrandomseed #1{\ctxcommand{setrandomseed(\number#1)}}
+\unexpanded\def\getrandomseed #1{\edef#1{\ctxcommand{getrandomseed()}}}
+\unexpanded\def\freezerandomseed {\ctxcommand{freezerandomseed()}}
+\unexpanded\def\defrostrandomseed {\ctxcommand{defrostrandomseed()}}
\endinput
diff --git a/tex/context/base/symb-ini.mkiv b/tex/context/base/symb-ini.mkiv
index 8ccd8552f..0285a5641 100644
--- a/tex/context/base/symb-ini.mkiv
+++ b/tex/context/base/symb-ini.mkiv
@@ -43,96 +43,109 @@
%D \definesymbol [level 5] [$\star$]
%D \stoptyping
-% ss:tag -> symbol
-% ss:set:tag -> symbol out of set
-% ss*tag -> list of symbols in set
+\installcorenamespace{symbol}
+\installcorenamespace{symbolset}
+
+\newtoks\t_symbols_setups
+
+\let\m_symbols_current_set\empty
+
+\newconditional\c_symbols_found
+
+\newtoks\everysymbol
+
+%D We don't use the commandhandler as symbols have their own
+%D subsystem for resolving values.
\unexpanded\def\definesymbol
- {\dotripleempty\dodefinesymbol}
+ {\dotripleempty\symbols_define}
-\def\dodefinesymbol[#1][#2][#3]% class name meaning
+\def\symbols_define[#1][#2][#3]% class name meaning
{\ifthirdargument
- \setvalue{\??ss:#1:#2}{#3}%
- \doifsomething{#1}{\addvalue{\??ss*#1}{#2}}%
+ \setvalue{\??symbol#1:#2}{#3}%
+ \doifsomething{#1}{\addvalue{\??symbolset#1}{#2}}%
\else
- \setvalue{\??ss:\currentsymboldef:#1}{#2}%
- \addvalue{\??ss*\currentsymboldef}{#1}%
+ \setvalue{\??symbol\m_symbols_current_set:#1}{#2}%
+ \addvalue{\??symbolset\m_symbols_current_set}{#1}%
\fi}
-\def\doifinsymbolsetelse#1#2{\ifcsname\??ss:#1:#2\endcsname\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi}
-\def\doifinsymbolset #1#2{\ifcsname\??ss:#1:#2\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi}
-\def\doifsymbolsetelse #1{\ifcsname\??ss*#1\endcsname \@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi}
+\letvalue{\??symbolset}\empty
-\letvalue{\??ss*}\empty
+\def\doifinsymbolsetelse#1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
+\def\doifinsymbolset #1#2{\ifcsname\??symbol#1:#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi}
+\def\doifsymbolsetelse #1{\ifcsname\??symbolset#1\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
-\def\symbolset#1{\csname\??ss*\ifcsname\??ss*#1\endcsname#1\fi\endcsname} % no [#1], to be used in commalists etc
+\def\symbolset#1{\csname\??symbolset\ifcsname\??symbolset#1\endcsname#1\fi\endcsname} % no [#1], to be used in commalists etc
%D Since symbols are used frequently in interactive
%D documents, we speed up this one. Well, that was history,
%D since now we simplified things a bit, because the low
%D level macros have been sped up every now and then.
-\unexpanded\def\symbol % This one always gobbles spaces,
- {\dodoubleempty\dosymbol} % so never change it again!
-
-\newif\ifnosymbol \newtoks\everysymbol
-
-\def\dodosymbol#1#2% \relax's prevent lookahead problems
- {\nosymbolfalse
- \begingroup
- \the\everysymbol
- \csname\??ss:#1:#2\endcsname\relax
- \endgroup}
-
-\letvalue{\??ss:}\firstofoneargument
-
-\def\directsymbol#1#2% no \relax, there can be an argument, see lists
- {\csname\??ss:\ifcsname\??ss:#1:#2\endcsname#1:#2\fi\endcsname}
-
% We support both:
%
% Test test \symbol[whatever]\ test \symbol[whatever].
% Test test \symbol{whatever} test \symbol{whatever}.
-\def\dosymbol % so we also handle \symbol{name}
+\unexpanded\def\symbol % This one always gobbles spaces,
+ {\dodoubleempty\symbols_place} % so never change it again!
+
+\def\symbols_place % so we also handle \symbol{name}
{\iffirstargument % which is nicer with following spaces
- \expandafter\donormalsymbol
+ \expandafter\symbols_place_normal
\else
- \expandafter\dospecialsymbol
+ \expandafter\symbols_place_special
\fi}
-\def\dospecialsymbol[#1][#2]#3%
- {\firstargumenttrue
- \secondargumentfalse
- \donormalsymbol[#3][]}
-
-\def\donormalsymbol[#1][#2]%
- {\nosymboltrue
+\def\symbols_place_normal[#1][#2]%
+ {\setfalse\c_symbols_found
\ifsecondargument
\edef\currentsymbol{#2}%
- \ifcsname\??ss:#1:#2\endcsname
- \dodosymbol{#1}{#2}%
+ \ifcsname\??symbol#1:#2\endcsname
+ \symbols_place_indeed{#1:#2}%
\fi
\else
\edef\currentsymbol{#1}%
\fi
- \ifnosymbol
- \the\symbolsetups
- \ifnosymbol
- \redosymbol\currentsymbol
+ \ifconditional\c_symbols_found \else
+ \the\t_symbols_setups
+ \ifconditional\c_symbols_found \else
+ \symbols_place_retry\currentsymbol
\fi
\fi}
-\def\fetchsymbol#1%
- {\ifnosymbol
- \ifcsname\??ss:#1:\currentsymbol\endcsname
- \dodosymbol{#1}\currentsymbol
- \fi
+\def\symbols_place_special[#1][#2]#3%
+ {\firstargumenttrue
+ \secondargumentfalse
+ \symbols_place_normal[#3][]}
+
+\def\symbols_place_indeed#1% \relax's prevent lookahead problems
+ {\settrue\c_symbols_found
+ \begingroup
+ \the\everysymbol
+ \csname\??symbol#1\endcsname\relax
+ \endgroup}
+
+\letvalue{\??symbol}\firstofoneargument
+
+\def\directsymbol#1#2% no \relax, there can be an argument, see lists
+ {\csname\??symbol\ifcsname\??symbol#1:#2\endcsname#1:#2\fi\endcsname}
+
+\def\symbols_fetch
+ {\ifconditional\c_symbols_found
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\symbols_fetch_indeed
\fi}
-\def\redosymbol#1%
- {\ifcsname\??ss::#1\endcsname
- \dodosymbol\empty{#1}%
+\def\symbols_fetch_indeed#1%
+ {\ifcsname\??symbol#1:\currentsymbol\endcsname
+ \symbols_place_indeed{#1:\currentsymbol}%
+ \fi}
+
+\def\symbols_place_retry#1%
+ {\ifcsname\??symbol:#1\endcsname
+ \symbols_place_indeed{:#1}%
\else
#1%
\fi}
@@ -150,23 +163,23 @@
\def\defaultsymbolfactor{10}
\def\defaultsymbolheight{1.25ex}
-\def\figuresymbol
- {\dodoubleempty\dofiguresymbol}
+\unexpanded\def\figuresymbol
+ {\dodoubleempty\symbols_figure}
\ifdefined\externalfigure \else \def\externalfigure[#1][#2]{#1} \fi
\ifdefined\resetexternalfigures \else \let\resetexternalfigures\relax \fi
-\def\dofiguresymbol[#1][% #2]%
+\def\symbols_figure[#1][% #2]%
{\externalfigure[#1][\c!reset=\v!yes,\c!symbol=\v!yes,\c!height=\defaultsymbolheight,}% #2]}
\appendtoks \resetexternalfigures \to \everysymbol
\unexpanded\def\definefiguresymbol
- {\dotripleempty\dodefinefiguresymbol}
+ {\dotripleempty\symbols_figure_define}
-\def\dodefinefiguresymbol[#1][#2][#3]%
+\def\symbols_figure_define[#1][#2][#3]%
{\ifsecondargument
- \definesymbol[#1][{\dofiguresymbol[#2][#3]}]%
+ \definesymbol[#1][{\symbols_figure[#2][#3]}]%
\fi}
%D \macros
@@ -174,31 +187,34 @@
%D
%D A handy private one:
-% a bit messy
-
-\def\xfetchsymbol#1%
- {\ifnosymbol
- \doifinsymbolset{#1}\currentsymbol\nosymbolfalse
+\def\symbols_fetch_first
+ {\ifconditional\c_symbols_found
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\symbols_fetch_first_indeed
\fi}
-\def\xredosymbol#1%
- {\doifinsymbolset\empty\currentsymbol\nosymbolfalse}
+\def\symbols_fetch_first_indeed#1%
+ {\doifinsymbolset{#1}\currentsymbol{\settrue\c_symbols_found}}
+
+\def\symbols_fetch_second#1%
+ {\doifinsymbolset\empty\currentsymbol{\settrue\c_symbols_found}}
\def\doifsymboldefinedelse#1%
{\begingroup
\edef\currentsymbol{#1}%
- \let\fetchsymbol\xfetchsymbol
- \nosymboltrue
- \the\symbolsetups
- \ifnosymbol
- \xredosymbol\currentsymbol
- \ifnosymbol
- \endgroup\@EAEAEA\secondoftwoarguments
+ \let\symbols_fetch\symbols_fetch_first
+ \setfalse\c_symbols_found
+ \the\t_symbols_setups
+ \ifconditional\c_symbols_found
+ \endgroup\expandafter\firstoftwoarguments
+ \else
+ \symbols_fetch_second\currentsymbol
+ \ifconditional\c_symbols_found
+ \endgroup\doubleexpandafter\firstoftwoarguments
\else
- \endgroup\@EAEAEA\firstoftwoarguments
+ \endgroup\doubleexpandafter\secondoftwoarguments
\fi
- \else
- \endgroup\@EA\firstoftwoarguments
\fi}
%D \macros
@@ -231,24 +247,21 @@
%D \showsetup{setupsymbolset}
%D \showsetup{startsymbolset}
-\let\currentsymboldef\empty
-
\unexpanded\def\startsymbolset[#1]%
- {\def\currentsymboldef{#1}}
+ {\pushmacro\m_symbols_current_set
+ \def\m_symbols_current_set{#1}}
\unexpanded\def\stopsymbolset
- {\let\currentsymboldef\empty}
-
-\newtoks\symbolsetups
+ {\popmacro\m_symbols_current_set}
\unexpanded\def\setupsymbolset[#1]%
- {\prependtoksonce\fetchsymbol{#1}\to\symbolsetups}
+ {\prependtoksonce\symbols_fetch{#1}\to\t_symbols_setups}
-\def\resetsymbolset
- {\symbolsetups\emptytoks}
+\unexpanded\def\resetsymbolset
+ {\t_symbols_setups\emptytoks}
-\def\forcesymbolset[#1]%
- {\symbolsetups{\fetchsymbol{#1}}}
+\unexpanded\def\forcesymbolset[#1]%
+ {\t_symbols_setups{\symbols_fetch{#1}}}
%D \macros
%D {showsymbolset}
diff --git a/tex/context/base/syst-aux.mkiv b/tex/context/base/syst-aux.mkiv
index 8b8c272a3..bb2423e5d 100644
--- a/tex/context/base/syst-aux.mkiv
+++ b/tex/context/base/syst-aux.mkiv
@@ -121,16 +121,22 @@
%D variables). Redefining these constants can have disastrous
%D results.
-\def\v!prefix! {v!} \def\c!prefix! {c!}
-\def\s!prefix! {s!} \def\p!prefix! {p!}
+\def\v!prefix! {v!}
+\def\c!prefix! {c!}
+\def\s!prefix! {s!}
-\def\s!next {next} \def\s!default {default}
-\def\s!dummy {dummy} \def\s!unknown {unknown}
+\def\s!next {next}
+\def\s!default {default}
+\def\s!dummy {dummy}
+\def\s!unknown {unknown}
-\def\s!do {do} \def\s!dodo {dodo}
+\def\s!do {do}
+\def\s!dodo {dodo}
-\def\s!complex {complex} \def\s!start {start}
-\def\s!simple {simple} \def\s!stop {stop}
+\def\s!complex {complex}
+\def\s!start {start}
+\def\s!simple {simple}
+\def\s!stop {stop}
\def\s!empty {empty}
@@ -540,7 +546,7 @@
\unexpanded\def\doifalldefinedelse#1%
{\begingroup
- \donetrue
+ \donetrue % we could use a reserved one and avoid the group
\processcommalist[#1]\do_if_all_defined_else
\ifdone
\endgroup\expandafter\firstoftwoarguments
@@ -573,7 +579,7 @@
%D \doifelse {string1} {string2} {then ...}{else ...}
%D \stoptyping
-\def\doif#1#2%
+\unexpanded\def\doif#1#2%
{\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
@@ -582,7 +588,7 @@
\expandafter\gobbleoneargument
\fi}
-\def\doifnot#1#2%
+\unexpanded\def\doifnot#1#2%
{\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
@@ -591,7 +597,7 @@
\expandafter\firstofoneargument
\fi}
-\def\doifelse#1#2%
+\unexpanded\def\doifelse#1#2%
{\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\ifx\!!stringa\!!stringb
@@ -613,7 +619,7 @@
%D
%D This time, the string is not expanded.
-\def\doifemptyelse#1%
+\unexpanded\def\doifemptyelse#1%
{\def\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\firstoftwoarguments
@@ -621,7 +627,7 @@
\expandafter\secondoftwoarguments
\fi}
-\def\doifempty#1%
+\unexpanded\def\doifempty#1%
{\def\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\firstofoneargument
@@ -629,7 +635,7 @@
\expandafter\gobbleoneargument
\fi}
-\def\doifnotempty#1%
+\unexpanded\def\doifnotempty#1%
{\def\!!stringa{#1}%
\ifx\!!stringa\empty
\expandafter\gobbleoneargument
@@ -875,9 +881,11 @@
\fi\fi
#1#2}
+\def\do_common_check
+ {\expandafter\do_check_if_common_else_two\!!stringb,],\relax}%
+
\def\do_do_do_if_common_else
- {\def\do_common_check{\expandafter\do_check_if_common_else_two\!!stringb,],\relax}%
- \expandafter\do_check_if_common_else_one\!!stringa,],\relax}
+ {\expandafter\do_check_if_common_else_one\!!stringa,],\relax}
\unexpanded\def\doifcommonelse{\do_do_if_common_else\firstoftwoarguments\secondoftwoarguments}
\unexpanded\def\doifcommon {\do_do_if_common_else\firstofoneargument \gobbleoneargument }
@@ -4269,8 +4277,8 @@
\def\HandleGroup#1#2%
{\bgroup
- \def\BeforeGroup{\bgroup#1\bgroup\aftergroup\AfterGroup}%
- \def\AfterGroup {#2\egroup\egroup}%
+ \def\BeforeGroup{\bgroup#1\bgroup\aftergroup\AfterGroup}% can't we remove the second \bgroup
+ \def\AfterGroup {#2\egroup\egroup}% % and one \egroup here?
\afterassignment\BeforeGroup
\let\next=}
@@ -5330,11 +5338,11 @@
%D arguments are sets.
\def\do_if_all_common_else#1#2#3#4% slow
- {\def\do_common_check##1%
+ {\def\do_common_check_all##1%
{\doifnotinset{##1}{#4}\donefalse
\ifdone\else\expandafter\quitcommalist\fi}%
\donetrue
- \processcommalist[#3]\do_common_check
+ \processcommalist[#3]\do_common_check_all
\ifdone\expandafter#1\else\expandafter#2\fi}
\def\doifallcommonelse{\do_if_all_common_else\firstoftwoarguments\secondoftwoarguments}
@@ -6009,41 +6017,6 @@
\appendtoks \let\iftrialtypesetting\iffalse \to \everyresettrialtypesetting
%D \macros
-%D {startlocal, startglobal}
-%D
-%D The next four macros are rather self explaining:
-%D
-%D \starttyping
-%D \startlocal
-%D whatever assignments
-%D \stoplocal
-%D
-%D \startglobal
-%D whatever assignments
-%D \stopglobal
-%D \stoptyping
-%D
-%D These macros are meant for those who know the difference
-%D between local and global assignments and are aware of the
-%D possible unwanted side effect
-
-\def\dostartglobaldefs#1#2%
- {\scratchcounter\globaldefs
- \ifnum\globaldefs#1\zerocount
- \globaldefs-\globaldefs
- \fi
- \advance\globaldefs#2\plusone
- \expandafter\chardef\csname@gd@\the\globaldefs\endcsname\scratchcounter}
-
-\def\dostopglobaldefs
- {\globaldefs\ifcsname @gd@\the\globaldefs\endcsname\zerocount}
-
-\unexpanded\def\startlocal {\dostartglobaldefs>-}
-\unexpanded\def\stoplocal {\dostopglobaldefs}
-\unexpanded\def\startglobal {\dostartglobaldefs<+}
-\unexpanded\def\stopglobal {\dostopglobaldefs}
-
-%D \macros
%D {twodigitrounding}
%D
%D When using \type {\special}s or \type {\pdfliteral}s, it
diff --git a/tex/context/base/tabl-tbl.mkiv b/tex/context/base/tabl-tbl.mkiv
index f79dfbf69..05dfc4412 100644
--- a/tex/context/base/tabl-tbl.mkiv
+++ b/tex/context/base/tabl-tbl.mkiv
@@ -1081,9 +1081,8 @@
{\vrule\!!width\tabulatevrulethickness\relax}
\def\docoloredtabulatevrule
- {\faststartcolor[\currenttabulatevrulecolor]%
- \vrule\!!width\tabulatevrulethickness\relax
- \faststopcolor}
+ {\dousecolorparameter\currenttabulatevrulecolor
+ \vrule\!!width\tabulatevrulethickness\relax}
\unexpanded\def\dotabulatevrule
{\ifcase\tabulatevrulethickness\else
@@ -1164,9 +1163,8 @@
\relax}
\def\docoloredtabulatehrule
- {\faststartcolor[\currenttabulatelocalhrulecolor]%
- \donormaltabulatehrule
- \faststopcolor}
+ {\dousecolorparameter\currenttabulatelocalhrulecolor
+ \donormaltabulatehrule}
\unexpanded\def\dotabulatehrule
{\ifcase\tabulatelocalhrulethickness\else
@@ -1186,9 +1184,8 @@
\hfill}
\def\docoloredtabulatehlinerule
- {\faststartcolor[\currenttabulatelocalhrulecolor]%
- \donormaltabulatehlinerule
- \faststopcolor}
+ {\dousecolorparameter\currenttabulatelocalhrulecolor
+ \donormaltabulatehlinerule}
\def\dotabulatelinerule
{\multispan\totaltabulatecolumns % \multispan is a plain macro
@@ -1241,14 +1238,14 @@
\fi
\setxvalue{\??tt:c:\the\tabulatecolumn}{#1}%
\attribute\backgroundattribute\plusone
- \faststartcolor[#1]\strut\char0\faststopcolor
+ \dousecolorparameter{#1}\strut\char\zerocount % hack
\endgroup}
\def\repeatsettabulatecolor
{\begingroup
\ifcsname\??tt:c:\the\tabulatecolumn\endcsname
\attribute\backgroundattribute\plusone
- \faststartcolor[\csname\??tt:c:\the\tabulatecolumn\endcsname]\strut\char0\faststopcolor
+ \expandafter\dousecolorparameter\csname\??tt:c:\the\tabulatecolumn\endcsname\strut\char\zerocount % hack
\fi
\endgroup}
diff --git a/tex/context/base/tabl-xnt.mkvi b/tex/context/base/tabl-xnt.mkvi
index 1794100af..1e7fefe2c 100644
--- a/tex/context/base/tabl-xnt.mkvi
+++ b/tex/context/base/tabl-xnt.mkvi
@@ -130,6 +130,6 @@
{\bgroup
\x_table_prepare{#settings}%
\edef\x_table_current_buffer{\x_table_default_buffer}%
- \dodowithbuffer\x_table_current_buffer{bTABLE}{eTABLE}\relax\x_table_process}
+ \buffers_pickup\x_table_current_buffer{bTABLE}{eTABLE}\relax\x_table_process}
\protect \endinput
diff --git a/tex/context/base/tabl-xtb.mkvi b/tex/context/base/tabl-xtb.mkvi
index 58f980844..20036a869 100644
--- a/tex/context/base/tabl-xtb.mkvi
+++ b/tex/context/base/tabl-xtb.mkvi
@@ -74,8 +74,8 @@
% \let\tsplitafter \donothing
% \let\postprocesstsplit \donothing
-\let\dotagxtablecell \relax
-\let\dotagxtablesignal\relax
+\let\dotagxtablecell \relax % names will change
+\let\dotagxtablesignal\relax % names will change
\appendtoks
\def\dotagxtablecell {\taggedctxcommand{settagtablecell(\number\tablecellrows,\number\tablecellcolumns,\number\raggedstatus)}}%
@@ -99,7 +99,10 @@
% \setupxtable[one] [a=b,c=d]
% \setupxtable [a=b,c=d]
-\installframedautocommandhandler \??lt {xtable} \??lt
+\installcorenamespace{xtable}
+\installcorenamespace{xtablecheck}
+
+\installframedautocommandhandler \??xtable {xtable} \??xtable
\appendtoks
\checkxtableparent % so we can deal with undefined settings, not that it's efficient
@@ -150,7 +153,7 @@
{\bgroup
\x_table_prepare{#settings}%
\edef\x_table_current_buffer{\x_table_default_buffer}%
- \dodowithbuffer{\x_table_current_buffer}{startxtable}{stopxtable}\relax\x_table_process}
+ \buffers_pickup{\x_table_current_buffer}{startxtable}{stopxtable}\relax\x_table_process}
\unexpanded\def\processxtablebuffer
{\dosingleempty\process_x_table_buffer}
@@ -212,7 +215,7 @@
\setupcurrentxtable[#settings]%
\fi
\edef\x_table_current_buffer{\x_table_default_buffer}%
- \normalexpanded{\dodowithbuffer{\x_table_current_buffer}{\e!start\currentxtable}{\e!stop\currentxtable}\relax\x_table_process}}
+ \normalexpanded{\buffers_pickup{\x_table_current_buffer}{\e!start\currentxtable}{\e!stop\currentxtable}\relax\x_table_process}}
\unexpanded\def\stop_named_x_table
{}
@@ -596,7 +599,7 @@
%D \typebuffer \placetable{}{\getbuffer}
\appendtoks
- \letvalue{\??lt\currentxtable\s!check}\relax % faster than checking parent
+ \letvalue{\??xtablecheck\currentxtable}\relax % faster than checking parent
\to \everysetupxtable
% groups
@@ -610,7 +613,7 @@
\def\start_x_group_delayed_one[#tag]%
% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
- {\ifcsname\??lt#tag\s!check\endcsname
+ {\ifcsname\??xtablecheck#tag\endcsname
\expandafter\start_x_group_delayed_two
\else
\expandafter\setupcurrentxtable
@@ -636,7 +639,7 @@
\def\start_x_cell_delayed_one[#tag]%
% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
- {\ifcsname\??lt#tag\s!check\endcsname
+ {\ifcsname\??xtablecheck#tag\endcsname
\expandafter\start_x_cell_delayed_two
\else
\expandafter\start_x_cell_yes
@@ -661,7 +664,7 @@
\def\start_x_row_delayed_one[#tag]%
% {\ifcsname\namedxtablehash{#tag}\s!parent\endcsname
- {\ifcsname\??lt#tag\s!check\endcsname
+ {\ifcsname\??xtablecheck#tag\endcsname
\expandafter\start_x_row_delayed_two
\else
\expandafter\start_x_row_yes
@@ -678,7 +681,4 @@
{\stop_x_row
\endgroup}
-\protect
-
-% \continueifinputfile{tabl-xtb.mkvi}
-
+\protect \endinput
diff --git a/tex/context/base/trac-deb.mkiv b/tex/context/base/trac-deb.mkiv
index 89ec43694..4f5f0e931 100644
--- a/tex/context/base/trac-deb.mkiv
+++ b/tex/context/base/trac-deb.mkiv
@@ -16,22 +16,22 @@
\registerctxluafile{trac-lmx}{1.001}
\registerctxluafile{trac-deb}{1.001}
-\def\breakpoint{\showdebuginfo\wait}
+\unexpanded\def\breakpoint{\showdebuginfo\wait}
-\def\showtrackers {\ctxlua{trackers.show()}}
-\def\enabletrackers [#1]{\ctxlua{trackers.enable("#1")}}
-\def\disabletrackers [#1]{\ctxlua{trackers.disable("#1")}}
-\def\resettrackers {\ctxlua{trackers.reset()}}
+\unexpanded\def\showtrackers {\ctxlua{trackers.show()}}
+\unexpanded\def\enabletrackers [#1]{\ctxlua{trackers.enable("#1")}}
+\unexpanded\def\disabletrackers [#1]{\ctxlua{trackers.disable("#1")}}
+\unexpanded\def\resettrackers {\ctxlua{trackers.reset()}}
-\def\showdirectives {\ctxlua{directives.show()}}
-\def\enabledirectives [#1]{\ctxlua{directives.enable("#1")}}
-\def\disabledirectives [#1]{\ctxlua{directives.disable("#1")}}
+\unexpanded\def\showdirectives {\ctxlua{directives.show()}}
+\unexpanded\def\enabledirectives [#1]{\ctxlua{directives.enable("#1")}}
+\unexpanded\def\disabledirectives [#1]{\ctxlua{directives.disable("#1")}}
-\def\showexperiments {\ctxlua{experiments.show()}}
-\def\enableexperiments [#1]{\ctxlua{experiments.enable("#1")}}
-\def\disableexperiments[#1]{\ctxlua{experiments.disable("#1")}}
+\unexpanded\def\showexperiments {\ctxlua{experiments.show()}}
+\unexpanded\def\enableexperiments [#1]{\ctxlua{experiments.enable("#1")}}
+\unexpanded\def\disableexperiments[#1]{\ctxlua{experiments.disable("#1")}}
-\def\showdebuginfo{\ctxlua{lmx.showdebuginfo()}}
-\def\overloaderror{\ctxlua{lmx.overloaderror()}} % \enabledirectives[system.showerror]
+\unexpanded\def\showdebuginfo{\ctxlua{lmx.showdebuginfo()}}
+\unexpanded\def\overloaderror{\ctxlua{lmx.overloaderror()}} % \enabledirectives[system.showerror]
-\def\showlogcategories {\ctxlua{logs.show()}}
+\unexpanded\def\showlogcategories {\ctxlua{logs.show()}}
diff --git a/tex/context/base/trac-tex.mkiv b/tex/context/base/trac-tex.mkiv
index 585419701..47ef92e54 100644
--- a/tex/context/base/trac-tex.mkiv
+++ b/tex/context/base/trac-tex.mkiv
@@ -26,17 +26,17 @@
\let\alltextracers\empty % so that we can report available tracers
-\def\installtextracer#1%
+\unexpanded\def\installtextracer#1%
{\addtocommalist{#1}\alltextracers}
-\def\enabletextracers [#1]{\processcommalist[#1]\doenabletextracer}
-\def\disabletextracers[#1]{\processcommalist[#1]\dodisabletextracer}
+\unexpanded\def\enabletextracers [#1]{\processcommalist[#1]\system_textracer_enable }
+\unexpanded\def\disabletextracers[#1]{\processcommalist[#1]\system_textracer_disable}
-\def\doenabletextracer #1{\csname enabletracer#1\endcsname}
-\def\dodisabletextracer#1{\csname disabletracer#1\endcsname}
+\def\system_textracer_enable #1{\csname enabletracer#1\endcsname}
+\def\system_textracer_disable#1{\csname disabletracer#1\endcsname}
% The next one is for Taco, although we can use directives as well:
-\def\nomkivstatistics{\enabledirectives[system.nostatistics]}
+\unexpanded\def\nomkivstatistics{\enabledirectives[system.nostatistics]}
\protect \endinput
diff --git a/tex/context/base/type-ini.mkiv b/tex/context/base/type-ini.mkiv
index cb8bc5a50..f0b20cbed 100644
--- a/tex/context/base/type-ini.mkiv
+++ b/tex/context/base/type-ini.mkiv
@@ -400,7 +400,7 @@
\def\dofastdefinetypeface#1#2#3#4#5%
{\dododefinetypeface[#1][#2]%
\dostarttypefacedefining{#1}{#2}{#5}%
- \usetypescript[#3][#4][\t!size]%
+ \usetypescript[#3][#4][\s!size]%
\dostoptypefacedefining}
\def\dodefinetypeface[#1][#2][#3][#4][#5][#6]%
@@ -408,15 +408,15 @@
\iftracetypescripts\writestatus\m!fonts{define: [#1] [#2] [#3] [#4]}\fi
\dododefinetypeface[#1][#2]%
\dostarttypefacedefining{#1}{#2}{#6}%
- \usetypescript[#3][#4][\t!name,\t!default]%
- \usetypescript[#3][#5][\t!size]%
+ \usetypescript[#3][#4][\s!name,\s!default]%
+ \usetypescript[#3][#5][\s!size]%
\dostoptypefacedefining
\else\iffourthargument
\iftracetypescripts\writestatus\m!fonts{define: [#1] [#2] [#3] [#4]}\fi
\dododefinetypeface[#1][#2]%
\dostarttypefacedefining{#1}{#2}{}%
- \usetypescript[#3][#4][\t!name,\t!default]%
- \usetypescript[#3][\s!default][\t!size]%
+ \usetypescript[#3][#4][\s!name,\s!default]%
+ \usetypescript[#3][\s!default][\s!size]%
\dostoptypefacedefining
\else\ifthirdargument
\dododefinetypeface[#1][#2]%
diff --git a/tex/context/base/type-otf.mkiv b/tex/context/base/type-otf.mkiv
index 9c18f0546..7c915e77c 100644
--- a/tex/context/base/type-otf.mkiv
+++ b/tex/context/base/type-otf.mkiv
@@ -1742,55 +1742,45 @@
\stoptypescriptcollection
-%D For some reason the libertine collection has not retained its
-%D original names. We force the \OPENTYPE\ variant. Once these fonts
-%D are stable we might switch to the by then hopefully cleaner internal
-%D names.
-
\starttypescriptcollection[libertine]
-% \starttypescript [serif] [libertine] [name]
-% \setups[\s!font:\s!fallback:\s!serif]
-% \definefontsynonym [\s!Serif] [\s!file:fxlr.otf] [\s!features=\s!default]
-% \definefontsynonym [\s!SerifBold] [\s!file:fxlb.otf] [\s!features=\s!default]
-% \definefontsynonym [\s!SerifItalic] [\s!file:fxlri.otf] [\s!features=\s!default]
-% \definefontsynonym [\s!SerifBoldItalic] [\s!file:fxlbi.otf] [\s!features=\s!default]
-% \stoptypescript
-
\starttypescript [serif] [libertine]
- \definefontsynonym [Libertine-Regular] [\s!file:fxlr]
- \definefontsynonym [Libertine-Italic] [\s!file:fxlri]
- \definefontsynonym [Libertine-Bold] [\s!file:fxlb]
- \definefontsynonym [Libertine-BoldItalic] [\s!file:fxlbi]
- \definefontsynonym [Libertine-SmallCaps] [\s!file:fxlr] [\s!features=\s!smallcaps]
+ \definefontsynonym [Libertine-Regular] [\s!file:linlibertiner]
+ \definefontsynonym [Libertine-Italic] [\s!file:linlibertineri]
+ \definefontsynonym [Libertine-Slanted] [\s!file:linlibertinearl]
+ \definefontsynonym [Libertine-Bold] [\s!file:linlibertinerb]
+ \definefontsynonym [Libertine-BoldItalic] [\s!file:linlibertinerbi]
+ \definefontsynonym [Libertine-BoldSlanted] [\s!file:linlibertineabl]
\stoptypescript
\starttypescript [serif] [libertine] [name]
\setups[\s!font:\s!fallback:\s!serif]
- \definefontsynonym [\s!Serif] [Libertine-Regular] [\s!features=\s!default]
- \definefontsynonym [\s!SerifItalic] [Libertine-Italic] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBold] [Libertine-Bold] [\s!features=\s!default]
- \definefontsynonym [\s!SerifBoldItalic] [Libertine-BoldItalic] [\s!features=\s!default]
- \definefontsynonym [\s!SerifCaps] [Libertine-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [\s!Serif] [Libertine-Regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifItalic] [Libertine-Italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifSlanted] [Libertine-Slanted] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBold] [Libertine-Bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldItalic] [Libertine-BoldItalic] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifBoldSlanted] [Libertine-BoldSlanted] [\s!features=\s!default]
+ \definefontsynonym [\s!SerifCaps] [Libertine-Regular] [\s!features=\s!smallcaps]
\stoptypescript
\starttypescript [sans] [biolinum]
\setups[\s!font:\s!fallback:\s!sans]
- \definefontsynonym [Biolinum-Regular] [\s!file:fxbr.otf]
- \definefontsynonym [Biolinum-Bold] [\s!file:fxbb.otf]
- \definefontsynonym [Biolinum-Italic] [\s!file:fxbri.otf]
- \definefontsynonym [Biolinum-Slanted] [\s!file:fxbro.otf]
- \definefontsynonym [Biolinum-BoldItalic] [\s!file:fxbbo.otf]
+ \definefontsynonym [Biolinum-Regular] [\s!file:linbiolinumr]
+ \definefontsynonym [Biolinum-Bold] [\s!file:linbiolinumrb]
+ \definefontsynonym [Biolinum-Italic] [\s!file:linbiolinumri]
+ \definefontsynonym [Biolinum-Slanted] [\s!file:linbiolinumarl]
+ \definefontsynonym [Biolinum-BoldSlanted] [\s!file:linbiolinumabl]
\stoptypescript
\starttypescript [sans] [biolinum] [name]
\setups[\s!font:\s!fallback:\s!sans]
- \definefontsynonym [\s!Sans] [Biolinum-Regular] [\s!features=\s!default]
- \definefontsynonym [\s!SansBold] [Biolinum-Bold] [\s!features=\s!default]
- \definefontsynonym [\s!SansItalic] [Biolinum-Italic] [\s!features=\s!default]
- \definefontsynonym [\s!SansSlanted] [Biolinum-Slanted] [\s!features=\s!default]
- \definefontsynonym [\s!SansBoldItalic] [Biolinum-BoldItalic] [\s!features=\s!default]
- \definefontsynonym [\s!SansCaps] [Biolinum-Regular] [\s!features=\s!smallcaps]
+ \definefontsynonym [\s!Sans] [Biolinum-Regular] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBold] [Biolinum-Bold] [\s!features=\s!default]
+ \definefontsynonym [\s!SansItalic] [Biolinum-Italic] [\s!features=\s!default]
+ \definefontsynonym [\s!SansSlanted] [Biolinum-Slanted] [\s!features=\s!default]
+ \definefontsynonym [\s!SansBoldItalic] [Biolinum-BoldSlanted] [\s!features=\s!default]
+ \definefontsynonym [\s!SansCaps] [Biolinum-Regular] [\s!features=\s!smallcaps]
\stoptypescript
\starttypescript [libertine]
diff --git a/tex/context/base/typo-cap.mkiv b/tex/context/base/typo-cap.mkiv
index fd520da59..80b5270d2 100644
--- a/tex/context/base/typo-cap.mkiv
+++ b/tex/context/base/typo-cap.mkiv
@@ -59,6 +59,15 @@
\unexpanded\def\Word {\groupedcommand{\setcharactercasing[\plusthree]}{}}
\unexpanded\def\Words{\groupedcommand{\setcharactercasing[\plusfour ]}{}}
+% this will become:
+%
+% \unexpanded\def\WORD {\bgroup\def\g_word{\setcharactercasing[\plusone ]}\afterassignment\g_word\let\nexttoken}
+% \unexpanded\def\word {\bgroup\def\g_word{\setcharactercasing[\plustwo ]}\afterassignment\g_word\let\nexttoken}
+% \unexpanded\def\Word {\bgroup\def\g_word{\setcharactercasing[\plusthree]}\afterassignment\g_word\let\nexttoken}
+% \unexpanded\def\Words{\bgroup\def\g_word{\setcharactercasing[\plusfour ]}\afterassignment\g_word\let\nexttoken}
+%
+% so no longer {\Word test} and { } mandate (also later \groupedcommands will go)
+
\let\WORDS\WORD
\let\words\word
diff --git a/tex/context/base/typo-mar.mkiv b/tex/context/base/typo-mar.mkiv
index 7702a9eaf..7ee182c39 100644
--- a/tex/context/base/typo-mar.mkiv
+++ b/tex/context/base/typo-mar.mkiv
@@ -99,8 +99,11 @@
%D argument concerns the data, the second the framed. Not sharing the setup is
%D on purpose: location, offset, alignment and other parameters might clash.
-\installcommandhandler \??mc {margindata} \??mc
-\installframedcommandhandler \??mf {marginframed} \??mf
+\installcorenamespace{margindata}
+\installcorenamespace{marginframed}
+
+\installcommandhandler \??margindata {margindata} \??margindata
+\installframedcommandhandler \??marginframed {marginframed} \??marginframed
\setupmargindata
[\c!location=\v!left,
@@ -276,23 +279,25 @@
%D Another one:
-% \letvalue{\??mc->\v!left }\v!right
-% \letvalue{\??mc->\v!right }\v!left
-% \letvalue{\??mc->\v!inner }\v!outer
-% \letvalue{\??mc->\v!outer }\v!inner
-% \letvalue{\??mc->\v!normal}\v!normal
+% \installcorenamespace{oppositemargin}
+%
+% \letvalue{\??oppositemargin\v!left }\v!right
+% \letvalue{\??oppositemargin\v!right }\v!left
+% \letvalue{\??oppositemargin\v!inner }\v!outer
+% \letvalue{\??oppositemargin\v!outer }\v!inner
+% \letvalue{\??oppositemargin\v!normal}\v!normal
%
% \def\oppositemargin#1%
-% {\csname\??mc->\ifcsname\??mc->#1\endcsname#1\else\v!normal\fi\endcsname}
+% {\csname\??oppositemargin\ifcsname\??oppositemargin#1\endcsname#1\else\v!normal\fi\endcsname}
%D Definitions:
% common to lines and text
-\setupmargindata [\v!left ] [\c!method=\v!first,\c!location=\v!left ,\c!margin=\v!margin,\c!align=\v!flushright,\s!parent=\??mc] % we could autoparent when no define yet
-\setupmargindata [\v!right] [\c!method=\v!first,\c!location=\v!right,\c!margin=\v!margin,\c!align=\v!flushleft, \s!parent=\??mc]
-\setupmargindata [\v!outer] [\c!method=\v!first,\c!location=\v!outer,\c!margin=\v!margin,\c!align=\v!inner, \s!parent=\??mc]
-\setupmargindata [\v!inner] [\c!method=\v!first,\c!location=\v!inner,\c!margin=\v!margin,\c!align=\v!outer, \s!parent=\??mc]
+\setupmargindata [\v!left ] [\c!method=\v!first,\c!location=\v!left ,\c!margin=\v!margin,\c!align=\v!flushright,\s!parent=\??margindata] % we could autoparent when no define yet
+\setupmargindata [\v!right] [\c!method=\v!first,\c!location=\v!right,\c!margin=\v!margin,\c!align=\v!flushleft, \s!parent=\??margindata]
+\setupmargindata [\v!outer] [\c!method=\v!first,\c!location=\v!outer,\c!margin=\v!margin,\c!align=\v!inner, \s!parent=\??margindata]
+\setupmargindata [\v!inner] [\c!method=\v!first,\c!location=\v!inner,\c!margin=\v!margin,\c!align=\v!outer, \s!parent=\??margindata]
% lines
@@ -323,10 +328,10 @@
\definemargindata [margintext] [\v!left] [\c!margin=\v!margin,\c!width=\leftmarginwidth, \c!align=\v!flushright,\c!stack=\v!yes]
-\setupmarginframed [\v!left ] [\c!method=\v!first,\c!align=\v!flushright,\s!parent=\??mf] % we could autoparent when no define yet
-\setupmarginframed [\v!right] [\c!method=\v!first,\c!align=\v!flushleft, \s!parent=\??mf]
-\setupmarginframed [\v!outer] [\c!method=\v!first,\c!align=\v!inner, \s!parent=\??mf]
-\setupmarginframed [\v!inner] [\c!method=\v!first,\c!align=\v!outer, \s!parent=\??mf]
+\setupmarginframed [\v!left ] [\c!method=\v!first,\c!align=\v!flushright,\s!parent=\??marginframed] % we could autoparent when no define yet
+\setupmarginframed [\v!right] [\c!method=\v!first,\c!align=\v!flushleft, \s!parent=\??marginframed]
+\setupmarginframed [\v!outer] [\c!method=\v!first,\c!align=\v!inner, \s!parent=\??marginframed]
+\setupmarginframed [\v!inner] [\c!method=\v!first,\c!align=\v!outer, \s!parent=\??marginframed]
\definemarginframed [inleft] [\v!left ]
\definemarginframed [inright] [\v!right]
diff --git a/tex/context/base/typo-par.mkiv b/tex/context/base/typo-par.mkiv
index fa0f71117..358c31878 100644
--- a/tex/context/base/typo-par.mkiv
+++ b/tex/context/base/typo-par.mkiv
@@ -49,7 +49,9 @@
%D \placeinitial \input ward \par \input ward \placeinitial \input tufte
%D \stoptyping
-\installsimplecommandhandler \??dc {initial} \??dc
+\installcorenamespace{initial}
+
+\installsimplecommandhandler \??initial {initial} \??initial
\appendtoks
\checkinitialparent % this might become automatic
diff --git a/tex/context/base/typo-prc.mkvi b/tex/context/base/typo-prc.mkvi
index 3bb743b8b..3c0fcc93e 100644
--- a/tex/context/base/typo-prc.mkvi
+++ b/tex/context/base/typo-prc.mkvi
@@ -44,10 +44,13 @@
%D Valid keys for defining a processor are \type {style}, \type {color}, \type {left},
%D \type {right}, and \type {command} (the given command takes one argument).
-\installcommandhandler \??po {processor} \??po
+\installcorenamespace{processor}
+\installcorenamespace{processorcheck}
+
+\installcommandhandler \??processor {processor} \??processor
\appendtoks
- \letvalue{\??po\currentprocessor\s!check}\relax
+ \letvalue{\??processorcheck\currentprocessor}\relax
\ctxcommand{registerstructureprocessor("\currentprocessor")}% global, but it permits using processor that are yet undefined
\to \everydefineprocessor
@@ -58,7 +61,7 @@
\unexpanded\def\applyprocessor#tag%
{\def\currentprocessor{#tag}%
- \ifcsname\??po\currentprocessor\s!check\endcsname
+ \ifcsname\??processorcheck\currentprocessor\endcsname
\expandafter\apply_processor
\else
\expandafter\firstofoneargument
diff --git a/tex/context/base/unic-ini.mkiv b/tex/context/base/unic-ini.mkiv
index a46d264ae..55764dbdc 100644
--- a/tex/context/base/unic-ini.mkiv
+++ b/tex/context/base/unic-ini.mkiv
@@ -17,25 +17,21 @@
\unprotect
-\let\keeputfcharacters\relax % used in xtag
-\newconstant\utfunicodetracer % used in xtag
-
-%def\unicodechar #1{\char\numexpr#1\relax} % no lookahead
\def\unicodenumber #1{\the \numexpr#1\relax} % no lookahead
\def\unicodehexnumber#1{\cldcontext{number.toevenhex(\number#1))}}
-%D Better is:
-%D
%D \startbuffer
%D \unicodechar{left square bracket}okay\unicodechar{right square bracket}
%D \stopbuffer
%D
%D \typebuffer \getbuffer
-\def\unicodechar #1{\ctxcommand{unicodechar("#1")}}
+%def\unicodechar#1{\char\numexpr#1\relax} % no lookahead
+\def\unicodechar#1{\ctxcommand{unicodechar("#1")}}
-\unexpanded\def\unknownchar{{\hbox{\vrule\!!width.5em\!!height1ex\!!depth\zeropoint}}}
+\unexpanded\def\unknownchar
+ {\dontleavehmode\hbox{\vrule\!!width.5em\!!height1ex\!!depth\zeropoint}}
-\ifx\zwnbsp\undefined \let\zwnbsp\relax \fi % zerowidthnonbreakablespace
+\ifdefined\zwnbsp\else \let\zwnbsp\relax \fi % zerowidthnonbreakablespace
\protect \endinput
diff --git a/tex/context/base/x-xtag.mkiv b/tex/context/base/x-xtag.mkiv
index c26b352b0..09490cc8f 100644
--- a/tex/context/base/x-xtag.mkiv
+++ b/tex/context/base/x-xtag.mkiv
@@ -18,6 +18,66 @@
\writestatus{xtag}{this module is obsolete, use the mkiv-xml features or use mkii instead}
+%D Well, at this time (2011.12.28) I'm not sure if this code still works in
+%D \MKIV. But in any case we move snippets here that are only needed for old
+%D \MKII\ code.
+
+\unprotect
+
+\newif\ifforcefileexpansion % handy for document level overload
+
+\def\installexpander#1#2#3% changed, no longer \convert..\to...
+ {\setvalue{\s!do\c!expansion#1l}{#2}%
+ \setvalue{\s!do\c!expansion#1g}{#3}}%
+
+\def\doconvertexpanded#1#2#3% #4 % [l|g] \cs {kind} {data}
+ {\csname % that we assign all exp a value
+ \s!do\c!expansion
+ \ifforcefileexpansion
+ \v!yes
+ \else\ifcsname\s!do\c!expansion#3#1\endcsname
+ #3%
+ \else
+ \s!default
+ \fi\fi
+ #1%
+ \endcsname#2}% #3
+
+\def\defconvertexpanded {\doconvertexpanded l}
+\def\gdefconvertexpanded{\doconvertexpanded g}
+
+\installexpander\v!command \defconvertedcommand \gdefconvertedcommand
+\installexpander\s!default \defconvertedargument \gdefconvertedargument
+\installexpander\empty \defconvertedargument \gdefconvertedargument
+\installexpander\v!no \defconvertedargument \gdefconvertedargument
+\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
+\installexpander\v!yes \defconvertedmeaning \gdefconvertedmeaning
+\installexpander\v!strict \defreducedargument \gdefreducedargument
+\installexpander {utf} \defreducedtoutf \gdefreducedtoutf
+
+\def\dodefconvertedmeaning#1#2#3% watch the double expansion !
+ {\bgroup
+ \xdef\@@globalexpanded{#3}%
+ \xdef\@@globalexpanded{\@@globalexpanded}%
+ \egroup
+ #1#2\@@globalexpanded}
+
+\def\defconvertedmeaning {\dodefconvertedmeaning\defconvertedcommand}
+\def\gdefconvertedmeaning{\dodefconvertedmeaning\gdefconvertedcommand}
+
+\def\dodefreducedargument#1#2#3%
+ {\begingroup
+ \reducetocoding[raw]%
+ \edef\ascii{#3}%
+ \expandafter\endgroup\expandafter#1\expandafter#2\expandafter{\ascii}}
+
+\def\defreducedargument {\dodefreducedargument\edef}
+\def\gdefreducedargument{\dodefreducedargument\xdef}
+
+\protect
+
+%D The \XML\ modules.
+
\loadmarkfile{catc-xml}
\loadcorefile{xtag-ini.mkii}
diff --git a/tex/context/base/xtag-ini.mkii b/tex/context/base/xtag-ini.mkii
index a1d5d7be5..79fb2f24d 100644
--- a/tex/context/base/xtag-ini.mkii
+++ b/tex/context/base/xtag-ini.mkii
@@ -16,6 +16,9 @@
%D Beware: don't rely on \longempty things, since this may
%D change!
+\ifdefined\keeputfcharacters \else \let\keeputfcharacters\relax \fi % for mkiv
+\ifdefined\utfunicodetracer \else \newconstant\utfunicodetracer \fi % for mkiv
+
%D \macros
%D {defineinputmode,setinputmode}
%D
diff --git a/tex/context/interface/keys-cs.xml b/tex/context/interface/keys-cs.xml
index fe13663f2..17c1ee535 100644
--- a/tex/context/interface/keys-cs.xml
+++ b/tex/context/interface/keys-cs.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='propojeni'/>
<cd:constant name='couplingway' value='zpusobpropojeni'/>
<cd:constant name='criterium' value='kriterium'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='aktualni'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='pomlcka'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='prazdne'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='entries'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='bily'/>
<cd:constant name='width' value='sirka'/>
<cd:constant name='xfactor' value='xfaktor'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xmeritko'/>
diff --git a/tex/context/interface/keys-de.xml b/tex/context/interface/keys-de.xml
index b7e891e58..457dfd73e 100644
--- a/tex/context/interface/keys-de.xml
+++ b/tex/context/interface/keys-de.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='verknuepfung'/>
<cd:constant name='couplingway' value='verkopplungsart'/>
<cd:constant name='criterium' value='kriterium'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='aktuell'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='strich'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='leer'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='entries'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='weiss'/>
<cd:constant name='width' value='breite'/>
<cd:constant name='xfactor' value='xfaktor'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xformat'/>
diff --git a/tex/context/interface/keys-en.xml b/tex/context/interface/keys-en.xml
index d351f511b..24ae37452 100644
--- a/tex/context/interface/keys-en.xml
+++ b/tex/context/interface/keys-en.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='coupling'/>
<cd:constant name='couplingway' value='couplingway'/>
<cd:constant name='criterium' value='criterium'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='current'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='empty'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='entries'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='white'/>
<cd:constant name='width' value='width'/>
<cd:constant name='xfactor' value='xfactor'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscale'/>
diff --git a/tex/context/interface/keys-fr.xml b/tex/context/interface/keys-fr.xml
index 0facadd4b..356b83747 100644
--- a/tex/context/interface/keys-fr.xml
+++ b/tex/context/interface/keys-fr.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='couplage'/>
<cd:constant name='couplingway' value='modecouplage'/>
<cd:constant name='criterium' value='critere'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='courant'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='pointille'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='vide'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='entries'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='blanc'/>
<cd:constant name='width' value='largeur'/>
<cd:constant name='xfactor' value='xfactor'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscale'/>
diff --git a/tex/context/interface/keys-it.xml b/tex/context/interface/keys-it.xml
index d28cacba1..b7bcdfeed 100644
--- a/tex/context/interface/keys-it.xml
+++ b/tex/context/interface/keys-it.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='accoppiamento'/>
<cd:constant name='couplingway' value='modoaccoppiamento'/>
<cd:constant name='criterium' value='criterio'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='corrente'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='vuoto'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='entries'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='bianco'/>
<cd:constant name='width' value='ampiezza'/>
<cd:constant name='xfactor' value='xfactor'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscale'/>
diff --git a/tex/context/interface/keys-nl.xml b/tex/context/interface/keys-nl.xml
index 2d742834d..5c0a70d60 100644
--- a/tex/context/interface/keys-nl.xml
+++ b/tex/context/interface/keys-nl.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='koppeling'/>
<cd:constant name='couplingway' value='koppelwijze'/>
<cd:constant name='criterium' value='criterium'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='huidige'/>
<cd:constant name='cutspace' value='snijwit'/>
<cd:constant name='dash' value='streep'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='leeg'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='ingangen'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='wit'/>
<cd:constant name='width' value='breedte'/>
<cd:constant name='xfactor' value='xfactor'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xschaal'/>
diff --git a/tex/context/interface/keys-pe.xml b/tex/context/interface/keys-pe.xml
index de6f6aa6b..3d9e0b2a2 100644
--- a/tex/context/interface/keys-pe.xml
+++ b/tex/context/interface/keys-pe.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='تزویج'/>
<cd:constant name='couplingway' value='روش‌تزویج'/>
<cd:constant name='criterium' value='criterium'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='جاری'/>
<cd:constant name='cutspace' value='فضای‌برش'/>
<cd:constant name='dash' value='دش'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='تهی'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='entries'/>
<cd:constant name='equalheight' value='ارتفاع‌یکسان'/>
<cd:constant name='equalwidth' value='عرض‌یکسان'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='سفید'/>
<cd:constant name='width' value='عرض'/>
<cd:constant name='xfactor' value='فاکتورایکس'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='آفست‌ایکس'/>
<cd:constant name='xscale' value='مقیاس‌ایکس'/>
diff --git a/tex/context/interface/keys-ro.xml b/tex/context/interface/keys-ro.xml
index d0d647620..8d4be42b6 100644
--- a/tex/context/interface/keys-ro.xml
+++ b/tex/context/interface/keys-ro.xml
@@ -628,6 +628,7 @@
<cd:constant name='coupling' value='cuplare'/>
<cd:constant name='couplingway' value='modcuplare'/>
<cd:constant name='criterium' value='criteriu'/>
+ <cd:constant name='css' value='css'/>
<cd:constant name='current' value='curent'/>
<cd:constant name='cutspace' value='cutspace'/>
<cd:constant name='dash' value='dash'/>
@@ -656,6 +657,7 @@
<cd:constant name='editoretallimit' value='editoretallimit'/>
<cd:constant name='editoretaltext' value='editoretaltext'/>
<cd:constant name='empty' value='gol'/>
+ <cd:constant name='entities' value='entities'/>
<cd:constant name='entries' value='entries'/>
<cd:constant name='equalheight' value='equalheight'/>
<cd:constant name='equalwidth' value='equalwidth'/>
@@ -1048,6 +1050,7 @@
<cd:constant name='white' value='alb'/>
<cd:constant name='width' value='latime'/>
<cd:constant name='xfactor' value='xfactor'/>
+ <cd:constant name='xhtml' value='xhtml'/>
<cd:constant name='xmax' value='xmax'/>
<cd:constant name='xoffset' value='xoffset'/>
<cd:constant name='xscale' value='xscala'/>
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index afaef1878..9763c8c59 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 : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 12/23/11 09:52:45
+-- merge date : 12/31/11 13:16:01
do -- begin closure to overcome local limits and interference
@@ -1942,8 +1942,8 @@ if not math.sind then
end
if not math.odd then
- function math.odd (n) return n % 2 == 0 end
- function math.even(n) return n % 2 ~= 0 end
+ function math.odd (n) return n % 2 ~= 0 end
+ function math.even(n) return n % 2 == 0 end
end
end -- closure