From 3a55e11c7295abf8f2dfe5e9d1c8b153f4518824 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Wed, 11 May 2022 11:48:41 +0200 Subject: 2022-05-11 11:35:00 --- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkii/mult-de.mkii | 13 +- tex/context/base/mkii/mult-en.mkii | 3 + tex/context/base/mkii/mult-it.mkii | 10 +- tex/context/base/mkii/mult-nl.mkii | 3 + tex/context/base/mkii/mult-pe.mkii | 3 + tex/context/base/mkii/mult-ro.mkii | 2 + tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/font-imp-ligatures.lua | 4 +- tex/context/base/mkiv/font-otc.lua | 20 +-- tex/context/base/mkiv/mult-low.lua | 4 +- tex/context/base/mkiv/mult-mps.lua | 2 + tex/context/base/mkiv/mult-prm.lua | 4 + tex/context/base/mkiv/status-files.pdf | Bin 24641 -> 24628 bytes tex/context/base/mkiv/status-lua.pdf | Bin 257295 -> 257246 bytes tex/context/base/mkxl/bndr-ini.lmt | 52 +++++++ tex/context/base/mkxl/bndr-ini.mkxl | 39 +++++ tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 3 +- tex/context/base/mkxl/font-imp-ligatures.lmt | 158 ++++++++++++++++++++ tex/context/base/mkxl/font-lib.mklx | 2 +- tex/context/base/mkxl/font-ots.lmt | 2 +- tex/context/base/mkxl/lang-ini.lmt | 110 +++++++++----- tex/context/base/mkxl/lang-mis.mkxl | 4 +- tex/context/base/mkxl/math-ini.lmt | 22 +-- tex/context/base/mkxl/math-ini.mkxl | 26 ++++ tex/context/base/mkxl/math-spa.lmt | 3 +- tex/context/base/mkxl/meta-imp-gamesymbols.mkxl | 160 ++++++++++++++++----- tex/context/base/mkxl/meta-ini.mkxl | 8 +- tex/context/base/mkxl/mlib-svg.lmt | 21 ++- tex/context/base/mkxl/mult-sys.mkxl | 1 + tex/context/base/mkxl/phys-dim.mkxl | 42 +++++- tex/context/base/mkxl/spac-hor.mkxl | 109 +++++++++----- tex/context/base/mkxl/spac-ver.mkxl | 70 --------- tex/context/base/mkxl/strc-itm.mklx | 8 +- tex/context/base/mkxl/strc-mat.mkxl | 7 +- tex/context/base/mkxl/strc-not.mklx | 10 +- tex/context/base/mkxl/strc-sec.mkxl | 6 +- tex/context/base/mkxl/supp-mat.mkxl | 60 ++++---- tex/context/base/mkxl/trac-vis.lmt | 44 +++++- tex/context/base/mkxl/typo-cap.mkxl | 5 +- tex/context/base/mkxl/typo-del.mkxl | 44 +++--- tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv | 4 +- tex/context/fonts/mkxl/bhai.lfg | 4 +- tex/context/fonts/mkxl/shobhika.lfg | 4 +- tex/context/interface/mkii/keys-de.xml | 13 +- tex/context/interface/mkii/keys-en.xml | 3 + tex/context/interface/mkii/keys-it.xml | 10 +- tex/context/interface/mkii/keys-nl.xml | 3 + tex/context/interface/mkii/keys-pe.xml | 3 + tex/context/interface/mkii/keys-ro.xml | 2 + tex/generic/context/luatex/luatex-fonts-merged.lua | 24 ++-- 54 files changed, 843 insertions(+), 321 deletions(-) create mode 100644 tex/context/base/mkxl/bndr-ini.lmt create mode 100644 tex/context/base/mkxl/bndr-ini.mkxl create mode 100644 tex/context/base/mkxl/font-imp-ligatures.lmt (limited to 'tex') diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index cc51b0c45..1844779fd 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2022.05.02 15:48} +\newcontextversion{2022.05.11 11:34} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 88a77e354..a520470b2 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2022.05.02 15:48} +\edef\contextversion{2022.05.11 11:34} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-de.mkii b/tex/context/base/mkii/mult-de.mkii index bca35a89f..8537c66cd 100644 --- a/tex/context/base/mkii/mult-de.mkii +++ b/tex/context/base/mkii/mult-de.mkii @@ -281,7 +281,6 @@ \setinterfacevariable{inright}{imrechten} \setinterfacevariable{inrightedge}{imrechtenrand} \setinterfacevariable{inrightmargin}{inrechtermarginale} -\setinterfacevariable{integral}{integral} \setinterfacevariable{interaction}{interaktion} \setinterfacevariable{interactionmenu}{interaktionsmenue} \setinterfacevariable{interactive}{interactive} @@ -642,6 +641,7 @@ % definitions for interface constants for language de % \setinterfaceconstant{action}{aktion} +\setinterfaceconstant{adaptive}{adaptive} \setinterfaceconstant{address}{adresse} \setinterfaceconstant{after}{nach} \setinterfaceconstant{afterhead}{nachkopf} @@ -716,6 +716,7 @@ \setinterfaceconstant{bottom}{unten} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} +\setinterfaceconstant{bottomcolor}{bottomcolor} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{abstandunten} \setinterfaceconstant{bottomframe}{untenrahmen} @@ -887,6 +888,7 @@ \setinterfaceconstant{header}{kopfzeile} \setinterfaceconstant{headerdistance}{kopfzeilenabstand} \setinterfaceconstant{headerstate}{kopfzeilenstatus} +\setinterfaceconstant{headindenting}{headindenting} \setinterfaceconstant{headlabel}{headlabel} \setinterfaceconstant{headnumber}{kopfnummer} \setinterfaceconstant{headseparator}{headseparator} @@ -918,6 +920,7 @@ \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{instance}{instance} +\setinterfaceconstant{integral}{integral} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interaktion} \setinterfaceconstant{interlinespace}{zeilenabstande} @@ -960,6 +963,7 @@ \setinterfaceconstant{leftquote}{linkerzitieren} \setinterfaceconstant{leftsample}{leftsample} \setinterfaceconstant{leftsentence}{linkersatz} +\setinterfaceconstant{leftsource}{leftsource} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{linkerstil} \setinterfaceconstant{leftsubsentence}{linkersubsatz} @@ -992,7 +996,9 @@ \setinterfaceconstant{marstyle}{beschrstil} \setinterfaceconstant{mask}{mask} \setinterfaceconstant{mathclass}{mathclass} +\setinterfaceconstant{mathdenominatorstyle}{mathdenominatorstyle} \setinterfaceconstant{mathlimits}{mathlimits} +\setinterfaceconstant{mathnumeratorstyle}{mathnumeratorstyle} \setinterfaceconstant{mathstyle}{mathstyle} \setinterfaceconstant{max}{max} \setinterfaceconstant{maxdepth}{maxdepth} @@ -1004,6 +1010,7 @@ \setinterfaceconstant{middle}{mittig} \setinterfaceconstant{middlecolor}{middlecolor} \setinterfaceconstant{middlecommand}{middlecommand} +\setinterfaceconstant{middlesource}{middlesource} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middlestyle}{middlestyle} \setinterfaceconstant{middletext}{mittigertext} @@ -1176,6 +1183,7 @@ \setinterfaceconstant{rightquote}{rechterzitieren} \setinterfaceconstant{rightsample}{rightsample} \setinterfaceconstant{rightsentence}{rechtersatz} +\setinterfaceconstant{rightsource}{rightsource} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{rechterstil} \setinterfaceconstant{rightsubsentence}{rechtersubsatz} @@ -1227,6 +1235,8 @@ \setinterfaceconstant{small}{klein} \setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures} \setinterfaceconstant{smallcapsfont}{smallcapsfont} +\setinterfaceconstant{snap}{snap} +\setinterfaceconstant{snapstep}{snapstep} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} @@ -1311,6 +1321,7 @@ \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{toleranz} \setinterfaceconstant{top}{oben} +\setinterfaceconstant{topcolor}{topcolor} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{obenabstand} \setinterfaceconstant{topframe}{obenrahmen} diff --git a/tex/context/base/mkii/mult-en.mkii b/tex/context/base/mkii/mult-en.mkii index a5c8bc7ef..2a00dba9b 100644 --- a/tex/context/base/mkii/mult-en.mkii +++ b/tex/context/base/mkii/mult-en.mkii @@ -641,6 +641,7 @@ % definitions for interface constants for language en % \setinterfaceconstant{action}{action} +\setinterfaceconstant{adaptive}{adaptive} \setinterfaceconstant{address}{address} \setinterfaceconstant{after}{after} \setinterfaceconstant{afterhead}{afterhead} @@ -1234,6 +1235,8 @@ \setinterfaceconstant{small}{small} \setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures} \setinterfaceconstant{smallcapsfont}{smallcapsfont} +\setinterfaceconstant{snap}{snap} +\setinterfaceconstant{snapstep}{snapstep} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} diff --git a/tex/context/base/mkii/mult-it.mkii b/tex/context/base/mkii/mult-it.mkii index 41e24c0bb..0e91646df 100644 --- a/tex/context/base/mkii/mult-it.mkii +++ b/tex/context/base/mkii/mult-it.mkii @@ -281,7 +281,6 @@ \setinterfacevariable{inright}{indestra} \setinterfacevariable{inrightedge}{inlatodestro} \setinterfacevariable{inrightmargin}{inmarginedestro} -\setinterfacevariable{integral}{integral} \setinterfacevariable{interaction}{interazione} \setinterfacevariable{interactionmenu}{menuinterattivo} \setinterfacevariable{interactive}{interactive} @@ -642,6 +641,7 @@ % definitions for interface constants for language it % \setinterfaceconstant{action}{azione} +\setinterfaceconstant{adaptive}{adaptive} \setinterfaceconstant{address}{indirizzo} \setinterfaceconstant{after}{dopo} \setinterfaceconstant{afterhead}{dopotesta} @@ -716,6 +716,7 @@ \setinterfaceconstant{bottom}{fondo} \setinterfaceconstant{bottomafter}{bottomafter} \setinterfaceconstant{bottombefore}{bottombefore} +\setinterfaceconstant{bottomcolor}{bottomcolor} \setinterfaceconstant{bottomcommand}{bottomcommand} \setinterfaceconstant{bottomdistance}{distanzafondo} \setinterfaceconstant{bottomframe}{cornicefondo} @@ -919,6 +920,7 @@ \setinterfaceconstant{inputfile}{inputfile} \setinterfaceconstant{insidesection}{insidesection} \setinterfaceconstant{instance}{instance} +\setinterfaceconstant{integral}{integral} \setinterfaceconstant{intent}{intent} \setinterfaceconstant{interaction}{interazione} \setinterfaceconstant{interlinespace}{interlinea} @@ -961,6 +963,7 @@ \setinterfaceconstant{leftquote}{menzionesinistra} \setinterfaceconstant{leftsample}{leftsample} \setinterfaceconstant{leftsentence}{frasesinistra} +\setinterfaceconstant{leftsource}{leftsource} \setinterfaceconstant{leftspeech}{leftspeech} \setinterfaceconstant{leftstyle}{stilesinistra} \setinterfaceconstant{leftsubsentence}{sottofrasesinistra} @@ -1007,6 +1010,7 @@ \setinterfaceconstant{middle}{centro} \setinterfaceconstant{middlecolor}{middlecolor} \setinterfaceconstant{middlecommand}{middlecommand} +\setinterfaceconstant{middlesource}{middlesource} \setinterfaceconstant{middlespeech}{middlespeech} \setinterfaceconstant{middlestyle}{middlestyle} \setinterfaceconstant{middletext}{testocentro} @@ -1179,6 +1183,7 @@ \setinterfaceconstant{rightquote}{menzionedestra} \setinterfaceconstant{rightsample}{rightsample} \setinterfaceconstant{rightsentence}{frasedestra} +\setinterfaceconstant{rightsource}{rightsource} \setinterfaceconstant{rightspeech}{rightspeech} \setinterfaceconstant{rightstyle}{stiledestra} \setinterfaceconstant{rightsubsentence}{sottofrasedestra} @@ -1230,6 +1235,8 @@ \setinterfaceconstant{small}{piccolo} \setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures} \setinterfaceconstant{smallcapsfont}{smallcapsfont} +\setinterfaceconstant{snap}{snap} +\setinterfaceconstant{snapstep}{snapstep} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} @@ -1314,6 +1321,7 @@ \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{tolleranza} \setinterfaceconstant{top}{cima} +\setinterfaceconstant{topcolor}{topcolor} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{distanzacima} \setinterfaceconstant{topframe}{cornicecima} diff --git a/tex/context/base/mkii/mult-nl.mkii b/tex/context/base/mkii/mult-nl.mkii index 1754c268a..235db7a1e 100644 --- a/tex/context/base/mkii/mult-nl.mkii +++ b/tex/context/base/mkii/mult-nl.mkii @@ -641,6 +641,7 @@ % definitions for interface constants for language nl % \setinterfaceconstant{action}{actie} +\setinterfaceconstant{adaptive}{adaptive} \setinterfaceconstant{address}{adres} \setinterfaceconstant{after}{na} \setinterfaceconstant{afterhead}{kopna} @@ -1234,6 +1235,8 @@ \setinterfaceconstant{small}{klein} \setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures} \setinterfaceconstant{smallcapsfont}{smallcapsfont} +\setinterfaceconstant{snap}{snap} +\setinterfaceconstant{snapstep}{snapstep} \setinterfaceconstant{solution}{oplossing} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sortering} diff --git a/tex/context/base/mkii/mult-pe.mkii b/tex/context/base/mkii/mult-pe.mkii index a8f4fc599..7823d3eef 100644 --- a/tex/context/base/mkii/mult-pe.mkii +++ b/tex/context/base/mkii/mult-pe.mkii @@ -641,6 +641,7 @@ % definitions for interface constants for language pe % \setinterfaceconstant{action}{کنش} +\setinterfaceconstant{adaptive}{adaptive} \setinterfaceconstant{address}{نشانی} \setinterfaceconstant{after}{بعداز} \setinterfaceconstant{afterhead}{بعدازسر} @@ -1234,6 +1235,8 @@ \setinterfaceconstant{small}{کوچک} \setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures} \setinterfaceconstant{smallcapsfont}{smallcapsfont} +\setinterfaceconstant{snap}{snap} +\setinterfaceconstant{snapstep}{snapstep} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{ترتیب‌تایپ} diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii index 4525d6a47..661b94194 100644 --- a/tex/context/base/mkii/mult-ro.mkii +++ b/tex/context/base/mkii/mult-ro.mkii @@ -1235,6 +1235,8 @@ \setinterfaceconstant{small}{mic} \setinterfaceconstant{smallcapsfeatures}{smallcapsfeatures} \setinterfaceconstant{smallcapsfont}{smallcapsfont} +\setinterfaceconstant{snap}{snap} +\setinterfaceconstant{snapstep}{snapstep} \setinterfaceconstant{solution}{solution} \setinterfaceconstant{sort}{sort} \setinterfaceconstant{sorttype}{sorttype} diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 558b0481a..19f0f51a2 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.05.02 15:48} +\newcontextversion{2022.05.11 11:34} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index fa7ba1e2a..6c37e0f35 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2022.05.02 15:48} +\edef\contextversion{2022.05.11 11:34} %D Kind of special: diff --git a/tex/context/base/mkiv/font-imp-ligatures.lua b/tex/context/base/mkiv/font-imp-ligatures.lua index 091eb5d4b..02833707b 100644 --- a/tex/context/base/mkiv/font-imp-ligatures.lua +++ b/tex/context/base/mkiv/font-imp-ligatures.lua @@ -104,14 +104,14 @@ local function blockligatures(str) before = before, current = { one, two }, after = after, - lookups = { 1 }, -- not shared ! + lookups = { 1, false }, -- not shared ! } revert[new] = { -- before = before, current = { one, zwj }, -- after = { two, unpack(after) }, after = { two }, - lookups = { 1 }, -- not shared ! + lookups = { 1, false }, -- not shared ! } end end diff --git a/tex/context/base/mkiv/font-otc.lua b/tex/context/base/mkiv/font-otc.lua index 943bb7e38..67b77b111 100644 --- a/tex/context/base/mkiv/font-otc.lua +++ b/tex/context/base/mkiv/font-otc.lua @@ -501,15 +501,15 @@ local function addfeature(data,feature,specifications,prepareonly) local lookups = rule.lookups or false local subtype = nil if lookups and sublookups then --- inspect(lookups) -if #lookups > 0 then - local ns = stop - start + 1 - for i=1,ns do - if lookups[i] == nil then - lookups[i] = 0 - end - end -end + -- inspect(lookups) + if #lookups > 0 then + local ns = stop - start + 1 + for i=1,ns do + if lookups[i] == nil then + lookups[i] = 0 + end + end + end local l = { } for k, v in sortedhash(lookups) do local t = type(v) @@ -830,7 +830,7 @@ end order = featureorder, [stepkey] = steps, nofsteps = nofsteps, - type = types[featuretype], + type = specification.handler or types[featuretype], } if prepareonly then return sequence diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua index 1c5b4be5e..7fb7e3fa8 100644 --- a/tex/context/base/mkiv/mult-low.lua +++ b/tex/context/base/mkiv/mult-low.lua @@ -166,6 +166,7 @@ return { "mathfractioncode", "mathmiddlecode", "mathaccentcode", "mathfencedcode", "mathghostcode", "mathvariablecode", "mathactivecode", "mathvcentercode", "mathconstructcode", "mathwrappedcode", "mathbegincode", "mathendcode", "mathexplicitcode", "mathdivisioncode", "mathfactorialcode", + "mathdimensioncode", -- "mathimaginarycode", "mathdifferentialcode", "mathexponentialcode", "mathfunctioncode", "mathdigitcode", -- "mathtopaccentcode", "mathbottomaccentcode", "mathdelimitercode", "mathrootcode", "mathprintcode", -- @@ -454,8 +455,7 @@ return { "newconstant", "setnewconstant", "setconstant", "setconstantvalue", "newconditional", "settrue", "setfalse", "settruevalue", "setfalsevalue", "setconditional", -- - "newmacro", "setnewmacro", "newfraction", - "newsignal", + "newmacro", "setnewmacro", "newfraction", "newsignal", "newboundary", -- "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty", "dosingleargument", "dodoubleargument", "dotripleargument", "doquadrupleargument", "doquintupleargument", "dosixtupleargument", "doseventupleargument", diff --git a/tex/context/base/mkiv/mult-mps.lua b/tex/context/base/mkiv/mult-mps.lua index fa1aa22b3..9807902f8 100644 --- a/tex/context/base/mkiv/mult-mps.lua +++ b/tex/context/base/mkiv/mult-mps.lua @@ -68,6 +68,8 @@ return { -- "runscript", "maketext", "numbersystem", "overloadmode", "setproperty", + -- + "intersectiontimeslist", "arcpoint", "arcpointlist", "subarclength", "maxknotpool", "nocycle", }, commands = { "on", "off", diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua index 32de6f81a..2a6cd60cc 100644 --- a/tex/context/base/mkiv/mult-prm.lua +++ b/tex/context/base/mkiv/mult-prm.lua @@ -412,12 +412,14 @@ return { "instance", "integerdef", "lastarguments", + "lastboundary", "lastchkdim", "lastchknum", "lastleftclass", "lastloopiterator", "lastnamedcs", "lastnodesubtype", + "lastpageextra", "lastparcontext", "lastrightclass", "leftmarginkern", @@ -512,6 +514,7 @@ return { "overloadmode", "pageboundary", "pageboundarypenalty", + "pageextragoal", "pagevsize", "parametercount", "parametermark", @@ -1015,6 +1018,7 @@ return { "tracingstats", "uccode", "uchyph", + "unboundary", "underline", "unhbox", "unhcopy", diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 683f2d822..e45d119cd 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 7bef77ee0..0015ece2b 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkxl/bndr-ini.lmt b/tex/context/base/mkxl/bndr-ini.lmt new file mode 100644 index 000000000..2ee127020 --- /dev/null +++ b/tex/context/base/mkxl/bndr-ini.lmt @@ -0,0 +1,52 @@ +if not modules then modules = { } end modules ['bndr-ini'] = { + version = 1.001, + comment = "companion to bndr-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local context = context +local storage = storage +local implement = interfaces.implement +local sharedstorage = storage.shared + +local boundaries = tex.boundaries or { } -- maybe different namespace +tex.boundaries = boundaries + +boundaries.names = boundaries.names or { } +boundaries.numbers = boundaries.numbers or { } + +local names = boundaries.names +local numbers = boundaries.numbers + +storage.register("boundaries/names", names, "tex.boundaries.names") +storage.register("boundaries/numbers", numbers, "tex.boundaries.numbers") + +sharedstorage.boundaries_last = sharedstorage.boundaries_last or 0 -- so zero is not used + +function boundaries.system(name) + local number = numbers[name] + if not number then + local last = sharedstorage.boundaries_last + number = last + 1 + sharedstorage.boundaries_last = number + numbers[name] = number + names[number] = name + end + return number +end + +implement { + name = "defineboundary", + arguments = "string", + actions = { boundaries.system, context } +} + +-- implement { +-- name = "newboundary", +-- arguments = "csname", +-- public = true, +-- protected = true, +-- actions = function(n) tex.setintegervalue(n,boundaries.system()) end, +-- } diff --git a/tex/context/base/mkxl/bndr-ini.mkxl b/tex/context/base/mkxl/bndr-ini.mkxl new file mode 100644 index 000000000..8481048bb --- /dev/null +++ b/tex/context/base/mkxl/bndr-ini.mkxl @@ -0,0 +1,39 @@ +%D \module +%D [ file=bndr-ini, +%D version=2022.05.02, +%D title=\CONTEXT\ Boundary Macros, +%D subtitle=Initialization, +%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 Boundary Macros / Initialization} + +\unprotect + +\registerctxluafile{bndr-ini}{autosuffix} + +% \defineboundary[foobar][public]\meaning\foobar\par +% \defineboundary[barfoo][public]\meaning\barfoo\par + +\immutable\def\??boundaryprefix{c_bndr_} + +\permanent\tolerant\protected\def\defineboundary[#1]#*[#2]% nicer for users + {\doifelseinset\s!public{#2}% + {\ifcsname#1\endcsname\else + \global\permanent\expandafter\integerdef\csname#1\endcsname\clf_defineboundary{#1}\relax + \fi} + {\ifcsname\??boundaryprefix#1\endcsname\else + \global\permanent\expandafter\integerdef\csname\??boundaryprefix#1\endcsname\clf_defineboundary{#1}\relax + \fi}} + +\permanent\protected\def\newboundary#1% nicer for lowlevel + {\ifdefined#1\else + \global\immutable\integerdef#1\clf_defineboundary{\csstring#1}\relax + \fi} + +\protect diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 4dc93d0bf..6e20f62a4 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2022.05.02 15:48} +\newcontextversion{2022.05.11 11:34} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 009c493a2..71c602887 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2022.05.02 15:48} +\immutable\edef\contextversion{2022.05.11 11:34} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error @@ -144,6 +144,7 @@ \loadmkxlfile{toks-aux} \loadmkxlfile{attr-ini} +\loadmkxlfile{bndr-ini} \loadmkxlfile{core-ini} \loadmkxlfile{core-env} diff --git a/tex/context/base/mkxl/font-imp-ligatures.lmt b/tex/context/base/mkxl/font-imp-ligatures.lmt new file mode 100644 index 000000000..da5282428 --- /dev/null +++ b/tex/context/base/mkxl/font-imp-ligatures.lmt @@ -0,0 +1,158 @@ +if not modules then modules = { } end modules ['font-imp-ligatures'] = { + version = 1.001, + comment = "companion to font-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- Not perfect (disc) but we have allternatives. + +local lpegmatch = lpeg.match +local utfsplit = utf.split +local settings_to_array = utilities.parsers.settings_to_array + +local fonts = fonts +local otf = fonts.handlers.otf +local registerotffeature = otf.features.register +local addotffeature = otf.addfeature + +-- This is a quick and dirty hack. + +local lookups = { } +local protect = { } +local revert = { } +local zwjchar = 0x200C +local zwj = { zwjchar } + +addotffeature { + name = "blockligatures", + type = "chainsubstitution", + nocheck = true, -- because there is no 0x200C in the font + prepend = true, -- make sure we do it early + future = true, -- avoid nilling due to no steps yet + lookups = { + { + type = "multiple", + data = lookups, + }, + }, + data = { + rules = protect, + } +} + +addotffeature { + name = "blockligatures", + type = "chainsubstitution", + nocheck = true, -- because there is no 0x200C in the font + append = true, -- this is done late + overload = false, -- we don't want to overload the previous definition + lookups = { + { + type = "ligature", + data = lookups, + }, + }, + data = { + rules = revert, + } +} + +registerotffeature { + name = 'blockligatures', + description = 'block certain ligatures', +} + +-- local splitter = lpeg.splitat(":") +-- +-- local function blockligatures(str) +-- local t = settings_to_array(str) +-- for i=1,#t do +-- local ti = t[i] +-- local before, current, after = lpegmatch(splitter,ti) +-- if current and after then -- before is returned when no match +-- -- experimental joke +-- if before then +-- before = utfsplit(before) +-- for i=1,#before do +-- before[i] = { before[i] } +-- end +-- end +-- if current then +-- current = utfsplit(current) +-- end +-- if after then +-- after = utfsplit(after) +-- for i=1,#after do +-- after[i] = { after[i] } +-- end +-- end +-- else +-- before = nil +-- current = utfsplit(ti) +-- after = nil +-- end +-- if #current > 1 then +-- local one = current[1] +-- local two = current[2] +-- lookups[one] = { one, zwjchar } +-- local one = { one } +-- local two = { two } +-- local new = #protect + 1 +-- protect[new] = { +-- before = before, +-- current = { one, two }, +-- after = after, +-- lookups = { 1, false }, -- not shared ! +-- } +-- revert[new] = { +-- current = { one, zwj }, +-- after = { two }, +-- lookups = { 1, false }, -- not shared ! +-- } +-- end +-- end +-- end + +local function blockligatures(str) + local t = settings_to_array(str) + for i=1,#t do + local ti = t[i] + local current = utfsplit(ti) + if #current > 1 then + local one = current[1] + local two = current[2] + lookups[one] = { one, zwjchar } + local one = { one } + local two = { two } + local new = #protect + 1 + protect[new] = { + current = { one, two }, + lookups = { 1, false }, -- not shared ! + } + revert[new] = { + current = { one, zwj }, + after = { two }, + lookups = { 1, false }, -- not shared ! + } + end + end +end + +-- blockligatures("\0\0") + +otf.helpers.blockligatures = blockligatures + +-- blockligatures("fi,ff") +-- blockligatures("fl") + +if context then + + interfaces.implement { + name = "blockligatures", + arguments = "string", + actions = blockligatures, + } + +end diff --git a/tex/context/base/mkxl/font-lib.mklx b/tex/context/base/mkxl/font-lib.mklx index 953ff06fb..b9a79c0d9 100644 --- a/tex/context/base/mkxl/font-lib.mklx +++ b/tex/context/base/mkxl/font-lib.mklx @@ -101,7 +101,7 @@ % extensions, order matters -\registerctxluafile{font-imp-ligatures}{} +\registerctxluafile{font-imp-ligatures}{autosuffix} \registerctxluafile{font-imp-tex}{} \registerctxluafile{font-imp-reorder}{} \registerctxluafile{font-imp-properties}{autosuffix} diff --git a/tex/context/base/mkxl/font-ots.lmt b/tex/context/base/mkxl/font-ots.lmt index f9c6b2fae..e5c5db2fa 100644 --- a/tex/context/base/mkxl/font-ots.lmt +++ b/tex/context/base/mkxl/font-ots.lmt @@ -4294,7 +4294,7 @@ registerotffeature { -- we use a different call: -- -- function(head,dataset,sequence,initialrl,font,dynamic) --- return head, done +-- return head -- end -- -- Also see (!!). diff --git a/tex/context/base/mkxl/lang-ini.lmt b/tex/context/base/mkxl/lang-ini.lmt index 7919df530..64f1e82d0 100644 --- a/tex/context/base/mkxl/lang-ini.lmt +++ b/tex/context/base/mkxl/lang-ini.lmt @@ -605,7 +605,7 @@ end -- needed only a few loops of relistening the concert to implement it. In -- restrospect this was a language feature that should have been there a while ago. -do +local expand ; do local nuts = nodes.nuts local nextglyph = nuts.traversers.glyph @@ -639,10 +639,11 @@ do local goodiesdata = setmetatableindex(function(t,k) local v = { - properties = { }, - replacements = { }, - characters = { }, - exceptions = { }, + properties = { }, + replacements = { }, + characters = { }, + exceptions = { }, + substitutions = { }, } t[k] = v return v @@ -847,17 +848,19 @@ do languages.setgoodieshandler = function(specification) -- will become a table specifier if type(specification) == "table" then - local tag = specification.tag - local goodies = specification.goodies or tag - local result = specification.result or 2 - local data = goodiesdata[goodies] - local properties = data.properties - local replacements = data.replacements - local characters = data.characters - local exceptions = data.exceptions - local replacer = nil - local d, instance = resolve(tag) - local done = false + local tag = specification.tag + local goodies = specification.goodies or tag + local result = specification.result or 2 + local data = goodiesdata[goodies] + local properties = data.properties + local replacements = data.replacements + local substitutions = data.substitutions + local characters = data.characters + local exceptions = data.exceptions + local replacer = nil + local substituter = nil + local d, instance = resolve(tag) + local done = false -- check if something at all if type(characters) == "table" and characters and next(characters) then addhjcodestoinstance(instance,characters) @@ -880,6 +883,13 @@ do end done = true end + if type(substitutions) == "table" and next(substitutions) then + substituter = Cs((utfchartabletopattern(substitutions) / substitutions + 1)^0) + if trace_goodies then + report_goodies("registering %a substitutor for %a",goodies,tag) + end + done = true + end if type(exceptions) == "table" and next(exceptions) then done = true else @@ -923,6 +933,7 @@ do end local result = 2 local o = properties[remapped] + ::again:: if o then if trace_goodies then report("properties: %s %s",original,remapped) @@ -946,7 +957,9 @@ do break end end - elseif replacer then + return result + end + if replacer then -- todo: check lengths so that we can avoid a check if getprop(first,"replaced") then -- maybe some deadcycles @@ -965,7 +978,31 @@ do result = 1 end end - elseif exceptions then + return result + end + if substituter then + if getprop(first,"replaced") then + -- maybe some deadcycles + else + local r = lpegmatch(substituter,original) + if original == r then + if trace_goodies then + report_goodies("kept: %s => %s",original,remapped) + end + else + if trace_goodies then + report_goodies("substituted: %s => %s => %s",original,remapped,r) + end + setprop(first,"replaced",true) + if not properties[r] then + o = expand(r) + properties[original] = o + goto again + end + end + end + end + if exceptions then local exception = exceptions[original] if exception then if trace_goodies then @@ -975,10 +1012,10 @@ do else result = 3 end - else - if trace_goodies then - report_goodies("ignored: %s => %s",original,remapped) - end + return result + end + if trace_goodies then + report_goodies("ignored: %s => %s",original,remapped) end return result end) @@ -1123,6 +1160,10 @@ do return v end) + expand = function(str) + return analyzed(true,actions,{},str) + end + -- maybe also a skip symbol local replace1 = Cs ( ( S("|=<>+-.0123456789")/"" + lpegpatterns.utf8character )^0 ) @@ -1199,11 +1240,12 @@ do local nw = 0 local nl = #list -- - local data = goodiesdata[tag] - local properties = data.properties - local replacements = data.replacements - local characters = data.characters - local exceptions = data.exceptions + local data = goodiesdata[tag] + local properties = data.properties + local replacements = data.replacements + local substitutions = data.substitutions + local characters = data.characters + local exceptions = data.exceptions if filename then if not data.goodies then data.goodies = { } @@ -1217,10 +1259,11 @@ do for i=1,nl do local l = list[i] if type(l) == "table" then - local w = l.words - local p = l.patterns - local c = l.characters - local e = l.exceptions + local w = l.words + local p = l.patterns + local s = l.substitutions + local c = l.characters + local e = l.exceptions lh = l.left or false -- for practical reasons these are semi-global rh = l.right or false -- for practical reasons these are semi-global if c then @@ -1301,9 +1344,12 @@ do nw = nw + 1 end end + elseif s then + for k, v in next, s do + substitutions[k] = v + end elseif p then for k, v in next, p do - -- todo: warning overload replacements[k] = v end elseif e then diff --git a/tex/context/base/mkxl/lang-mis.mkxl b/tex/context/base/mkxl/lang-mis.mkxl index 7b6c90857..5aa40537c 100644 --- a/tex/context/base/mkxl/lang-mis.mkxl +++ b/tex/context/base/mkxl/lang-mis.mkxl @@ -227,8 +227,6 @@ %D \type{||word}, while it counterpart \type {\lang_discretionaries_check_after} is %D responsible for handling the comma. -\newsignal\d_lang_discretionaries_breakpoint % todo: never consulted so maybe obsolete - \newconditional\punctafterdiscretionary \newconditional\spaceafterdiscretionary @@ -500,7 +498,7 @@ \def\lang_compounds_fake_hyphen {\enforced\permanent\protected\def##1|% {\doifelsenothing{##1}\compoundhyphen{##1}% - \kern\d_lang_discretionaries_breakpoint + \wordboundary % was a signal \allowbreak}} %D \macros diff --git a/tex/context/base/mkxl/math-ini.lmt b/tex/context/base/mkxl/math-ini.lmt index b12c81086..306b6585a 100644 --- a/tex/context/base/mkxl/math-ini.lmt +++ b/tex/context/base/mkxl/math-ini.lmt @@ -121,16 +121,18 @@ local function registerengineclass(name,short) return class end -local explicit_class = registerengineclass("explicit","expl") -local imaginary_class = registerengineclass("imaginary","im") -local diferential_class = registerengineclass("differential","dif") -local exponential_class = registerengineclass("exponential","exp") -local function_class = registerengineclass("function","fnc") -local digit_class = registerengineclass("digit","dig") -local division_class = registerengineclass("division","div") -local factorial_class = registerengineclass("factorial","fac") -local wrapped_class = registerengineclass("wrapped", "wra") -local construct_class = registerengineclass("construct", "con") +registerengineclass("explicit", "expl") +registerengineclass("imaginary", "img") +registerengineclass("differential","dif") +registerengineclass("exponential", "exp") +registerengineclass("function", "fnc") +registerengineclass("digit", "dig") +local division_class = +registerengineclass("division", "div") +registerengineclass("factorial", "fac") +registerengineclass("wrapped", "wra") +registerengineclass("construct", "con") +registerengineclass("dimension", "dim") classes["begin"] = 62 classnames[62] = "begin" classes["end"] = 63 classnames[63] = "end" diff --git a/tex/context/base/mkxl/math-ini.mkxl b/tex/context/base/mkxl/math-ini.mkxl index 551f3f96a..f4358d5e7 100644 --- a/tex/context/base/mkxl/math-ini.mkxl +++ b/tex/context/base/mkxl/math-ini.mkxl @@ -32,6 +32,10 @@ %D a proper DAC connected but it can hardly keep up which also counts for me with MS %D testing faster than I can provide variants (www.youtube.com/watch?v=xzQCqAJNOSM). +%D After an extremely short discussion MS and HH decided that we will not support +%D \quote { BS ISO 80000-2:2009} because it doesn't comply to the CMS quality +%D standards and is BS anyway. + \unprotect %D We move these definitions into the format: @@ -141,6 +145,7 @@ \setnewconstant\mathfactorialcode \mathclassvalue factorial \setnewconstant\mathwrappedcode \mathclassvalue wrapped \setnewconstant\mathconstructcode \mathclassvalue construct +\setnewconstant\mathdimensioncode \mathclassvalue dimension \setnewconstant\mathbegincode \mathclassvalue begin \setnewconstant\mathendcode \mathclassvalue end @@ -413,6 +418,18 @@ {\settrue \c_math_discretionaries} {\setfalse\c_math_discretionaries} +%D This is moved here from supp-mat: + +\permanent\protected\def\dimension#1% + {\mathematics + {\mathatom + \s!leftclass \mathdimensioncode + \s!rightclass \mathordinarycode + {\tf #1}}} + +\permanent\protected\def\nodimension#1% + {#1} + %D A starter: %D %D \startbuffer @@ -1142,6 +1159,15 @@ % \inherited\setmathspacing \mathopencode \mathconstructcode \allmathstyles \thinmuskip \inherited\setmathspacing \mathconstructcode \mathclosecode \allmathstyles \thinmuskip + % + \inherited\setmathspacing \mathdimensioncode \mathdimensioncode \allmathstyles \zeromuskip + \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathordinarycode \mathdimensioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathdigitcode \mathdimensioncode \allscriptstyles \tinymuskip + \inherited\setmathspacing \mathclosecode \mathdimensioncode \allsplitstyles \thinmuskip + \inherited\setmathspacing \mathclosecode \mathdimensioncode \allscriptstyles \tinymuskip + % \stopsetups \directsetup{math:spacing:default} diff --git a/tex/context/base/mkxl/math-spa.lmt b/tex/context/base/mkxl/math-spa.lmt index 57965c97b..32de6e417 100644 --- a/tex/context/base/mkxl/math-spa.lmt +++ b/tex/context/base/mkxl/math-spa.lmt @@ -30,6 +30,7 @@ local v_auto = interfaces.variables.auto local method = v_none local distance = 0 +local boundary = tex.boundaries.system("mathalign") function noads.handlers.align(h) if method ~= v_none then @@ -39,7 +40,7 @@ function noads.handlers.align(h) while s do local id = getid(s) local n = getnext(s) - if id == boundary_code and getdata(s) == 314 then + if id == boundary_code and getdata(s) == boundary then if n and getid(n) == glue_code then s = n n = getnext(s) diff --git a/tex/context/base/mkxl/meta-imp-gamesymbols.mkxl b/tex/context/base/mkxl/meta-imp-gamesymbols.mkxl index d79e59f69..fa1500b60 100644 --- a/tex/context/base/mkxl/meta-imp-gamesymbols.mkxl +++ b/tex/context/base/mkxl/meta-imp-gamesymbols.mkxl @@ -22,64 +22,54 @@ %D execute the code and leave no traces in the text flow. The code itself is not %D that spectacular: +%D Todo: variant -2/-3 3D dice + \startMPcalculation{simplefun} + picture DiceDots[] ; pickup pencircle scaled 3/2 ; + + DiceDots[ 1] := image ( draw(4,4) ; ) ; + DiceDots[ 2] := image ( draw(2,6) ; draw(6,2) ; ) ; + DiceDots[-2] := image ( draw(6,6) ; draw(2,2) ; ) ; + DiceDots[ 3] := image ( draw(2,6) ; draw(4,4) ; draw(6,2) ; ) ; + DiceDots[-3] := image ( draw(6,6) ; draw(4,4) ; draw(2,2) ; ) ; + DiceDots[ 4] := image ( draw(2,6) ; draw(6,6) ; draw(2,2) ; draw(6,2) ; ) ; + DiceDots[ 5] := image ( draw(2,6) ; draw(6,6) ; draw(4,4) ; draw(2,2) ; draw(6,2) ; ) ; + DiceDots[ 6] := image ( draw(2,6) ; draw(6,6) ; draw(2,4) ; draw(6,4) ; draw(2,2) ; draw(6,2) ; ) ; + def DiceFrame = pickup pencircle scaled 1/2 ; draw unitsquare scaled 8 ; - pickup pencircle scaled 3/2 ; + % pickup pencircle scaled 3/2 ; enddef ; vardef DiceOne = DiceFrame ; - draw (4,4) ; - enddef ; - vardef DiceTwoA = - DiceFrame ; - draw (2,6) ; draw (6,2) ; - enddef ; - vardef DiceTwoB = - DiceFrame ; - draw (6,6) ; draw (2,2) ; + draw DiceDots[1] ; enddef ; vardef DiceTwo = - if hasoption "mpsfont" "option" "reverse" : - DiceTwoB - else : - DiceTwoA - fi ; - enddef ; - vardef DiceThreeA = - DiceFrame ; - draw (2,6) ; draw (4,4) ; draw (6,2) ; - enddef ; - vardef DiceThreeB = DiceFrame ; - draw (6,6) ; draw (4,4) ; draw (2,2) ; + draw DiceDots[if hasoption "mpsfont" "option" "reverse" : - fi 2] ; enddef ; vardef DiceThree = - if hasoption "mpsfont" "option" "reverse" : - DiceThreeB - else : - DiceThreeA - fi ; + DiceFrame ; + draw DiceDots[if hasoption "mpsfont" "option" "reverse" : - fi 3] ; enddef ; vardef DiceFour = DiceFrame ; - draw (2,6) ; draw (6,6) ; draw (2,2) ; draw (6,2) ; + draw DiceDots[4] ; enddef ; vardef DiceFive = DiceFrame ; - draw (2,6) ; draw (6,6) ; draw (4,4) ; draw (2,2) ; draw (6,2) ; + draw DiceDots[5] ; enddef ; vardef DiceSix = DiceFrame ; - draw (2,6) ; draw (6,6) ; draw (2,4) ; draw (6,4) ; draw (2,2) ; draw (6,2) ; + draw DiceDots[6] ; enddef ; vardef DiceBad = - pickup pencircle scaled 1/2 ; - draw unitsquare scaled 8 ; + DiceFrame ; draw (1,7) -- (7,1) ; draw (1,1) -- (7,7) ; enddef ; @@ -101,9 +91,67 @@ lmt_registerglyph [ category = "dice", private = "invaliddice", code = "DiceBad;" ] ; + %D The transformations come from DICE3D.MF by Thomas A. Heim (1998) + + transform t[]; + + numeric r ; r := sqrt(1/4) ; + + hide((0,0) transformed t1 = (0,0)) ; + hide((1,0) transformed t1 = (r,r)) ; + hide((0,1) transformed t1 = (0,1)) ; + + hide((0,0) transformed t2 = (0,0)) ; + hide((1,0) transformed t2 = (1,0)) ; + hide((0,1) transformed t2 = (r,r)) ; + + t3 := t1 shifted (8,0) ; % front to right side + t4 := t2 shifted (0,8) ; % front to top + + vardef Diced(expr a, b, c) = + draw image ( + pickup pencircle scaled 1/2 ; + draw image ( + % unitsquare smoothed 1/10 + nodraw unitsquare scaled 8 transformed t4 ; + nodraw unitsquare scaled 8 transformed t3 ; + nodraw unitsquare scaled 8 ; + dodraw unitsquare scaled 8 ; + ) ; + draw DiceDots[a] ; + draw DiceDots[b] transformed t3 ; + draw DiceDots[c] transformed t4 ; + ) ; + enddef ; + + lmt_registerglyph [ category = "dice", unicode = "123", code = "Diced(1,2,3);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "135", code = "Diced(1,3,5);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "142", code = "Diced(1,4,2);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "154", code = "Diced(1,5,4);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "214", code = "Diced(2,1,4);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "231", code = "Diced(2,3,1);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "246", code = "Diced(2,4,6);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "263", code = "Diced(2,6,3);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "312", code = "Diced(3,1,2);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "326", code = "Diced(3,2,6);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "351", code = "Diced(3,5,1);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "365", code = "Diced(3,6,5);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "415", code = "Diced(4,1,5);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "421", code = "Diced(4,2,1);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "456", code = "Diced(4,5,6);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "462", code = "Diced(4,6,2);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "513", code = "Diced(5,1,3);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "536", code = "Diced(5,3,6);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "541", code = "Diced(5,4,1);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "564", code = "Diced(5,6,4);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "624", code = "Diced(6,2,4);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "632", code = "Diced(6,3,2);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "645", code = "Diced(6,4,5);", width = 12, height = 12 ] ; + lmt_registerglyph [ category = "dice", unicode = "653", code = "Diced(6,5,3);", width = 12, height = 12 ] ; + \stopMPcalculation -%D At the \TEX\ end we define three features. The reverse is just there for fun. The +%D At the \TEX\ end we define four features. The reverse is just there for fun. The %D digits features will map digits onto dice. \definefontfeature @@ -120,10 +168,48 @@ [dice:digits] [dice:digits=yes] +\definefontfeature + [dice:three] + [dice:three=yes] + %D The mapping to dice happens here: \startluacode + -- before the digits feature + + fonts.handlers.otf.addfeature("dice:three", { + type = "ligature", + order = { "dice:three" }, + nocheck = true, + data = { + [123] = { 0x31, 0x32, 0x33 }, + [135] = { 0x31, 0x33, 0x35 }, + [142] = { 0x31, 0x34, 0x32 }, + [154] = { 0x31, 0x35, 0x34 }, + [214] = { 0x32, 0x31, 0x34 }, + [231] = { 0x32, 0x33, 0x31 }, + [246] = { 0x32, 0x34, 0x36 }, + [263] = { 0x32, 0x36, 0x33 }, + [312] = { 0x33, 0x31, 0x32 }, + [326] = { 0x33, 0x32, 0x36 }, + [351] = { 0x33, 0x35, 0x31 }, + [365] = { 0x33, 0x36, 0x35 }, + [415] = { 0x34, 0x31, 0x35 }, + [421] = { 0x34, 0x32, 0x31 }, + [456] = { 0x34, 0x35, 0x36 }, + [462] = { 0x34, 0x36, 0x32 }, + [513] = { 0x35, 0x31, 0x33 }, + [536] = { 0x35, 0x33, 0x36 }, + [541] = { 0x35, 0x34, 0x31 }, + [564] = { 0x35, 0x36, 0x34 }, + [624] = { 0x36, 0x32, 0x34 }, + [632] = { 0x36, 0x33, 0x32 }, + [645] = { 0x36, 0x34, 0x35 }, + [653] = { 0x36, 0x35, 0x33 }, + } + } ) + -- local invalid = fonts.helpers.privateslot("invaliddice") fonts.handlers.otf.addfeature("dice:digits", { @@ -336,14 +422,20 @@ \definefont[DiceN][Serif*dice:normal] \definefont[DiceR][Serif*dice:reverse] \definefont[DiceD][Serif*dice:normal,dice:digits] + \definefont[DiceT][Serif*dice:normal,dice:three,dice:digits] \startTEXpage[offset=3pt] \DiceN \dostepwiserecurse{"2680}{"2685}{1}{\char#1\quad}% - \DiceN + \DiceR \dostepwiserecurse{"2680}{"2685}{1}{\char#1\quad}% \DiceD \darkblue 2\quad5\quad3\quad0 \stopTEXpage + \startTEXpage[offset=3pt] + \showglyphs \DiceT 1 2 3 4 5 6 + \showglyphs \DiceT 653 421 + \stopTEXpage + \stoptext diff --git a/tex/context/base/mkxl/meta-ini.mkxl b/tex/context/base/mkxl/meta-ini.mkxl index 86eaea3ae..700191ef8 100644 --- a/tex/context/base/mkxl/meta-ini.mkxl +++ b/tex/context/base/mkxl/meta-ini.mkxl @@ -203,10 +203,11 @@ \mutable\def\currentMPinstance {\defaultMPinstance} \mutable\def\currentMPformat {\currentMPinstance} -\defineMPinstance[metafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes] -\defineMPinstance[minifun] [\s!format=minifun,\s!extensions=\v!yes,\s!initializations=\v!yes] -\defineMPinstance[extrafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes] +\defineMPinstance[metafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!double] +\defineMPinstance[minifun] [\s!format=minifun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!double] +\defineMPinstance[extrafun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!double] \defineMPinstance[lessfun] [\s!format=metafun] +\defineMPinstance[scaledfun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!scaled] \defineMPinstance[doublefun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!double] \defineMPinstance[binaryfun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!binary] \defineMPinstance[decimalfun] [\s!format=metafun,\s!extensions=\v!yes,\s!initializations=\v!yes,\c!method=\s!decimal] @@ -215,6 +216,7 @@ \defineMPinstance[metapost] [\s!format=mpost] \defineMPinstance[nofun] [\s!format=mpost] +\defineMPinstance[scaledpost] [\s!format=mpost,\c!method=\s!scaled] \defineMPinstance[doublepost] [\s!format=mpost,\c!method=\s!double] \defineMPinstance[binarypost] [\s!format=mpost,\c!method=\s!binary] \defineMPinstance[decimalpost][\s!format=mpost,\c!method=\s!decimal] diff --git a/tex/context/base/mkxl/mlib-svg.lmt b/tex/context/base/mkxl/mlib-svg.lmt index 5279bea71..2dec349db 100644 --- a/tex/context/base/mkxl/mlib-svg.lmt +++ b/tex/context/base/mkxl/mlib-svg.lmt @@ -1312,7 +1312,7 @@ local handletransform, handleviewbox do end local p_transform = ( - lpegpatterns.whitespace^0 * ( + p_space^0 * ( P("translate") * (p_numbers / translate) -- maybe xy + P("scale") * (p_numbers / scale) + P("rotate") * (p_numbers / rotate) @@ -1491,17 +1491,28 @@ do ["fill-opacity"] = ".75", } + local skipspace = p_space^0 + local colon = P(":") + local semicolon = P(";") + local eos = P(-1) + + local someaction = ( + skipspace * C((1 - (skipspace * (semicolon + eos + colon)))^1) + * colon + * skipspace * C((1 - (skipspace * (semicolon + eos)))^0) + * Carg(1) / function(k,v,a) a[k] = v end + + (p_space + semicolon)^1 + )^1 + local function handlechains(c) if tags[c.tg] then local at = c.at local dt = c.dt if at and dt then - -- at["inkscape:connector-curvature"] = nil -- cleare entry and might prevent table growth + -- at["inkscape:connector-curvature"] = nil -- clear entry and might prevent table growth local estyle = rawget(at,"style") if estyle and estyle ~= "" then - for k, v in gmatch(estyle,"%s*([^:]+):%s*([^;]+);?") do - at[k] = v - end + lpegmatch(someaction,estyle,1,at) end local eclass = rawget(at,"class") if eclass and eclass ~= "" then diff --git a/tex/context/base/mkxl/mult-sys.mkxl b/tex/context/base/mkxl/mult-sys.mkxl index 71342e582..26abaf20f 100644 --- a/tex/context/base/mkxl/mult-sys.mkxl +++ b/tex/context/base/mkxl/mult-sys.mkxl @@ -349,6 +349,7 @@ \definesystemconstant {SansSlanted} \definesystemconstant {Sans} \definesystemconstant {sans} +\definesystemconstant {scaled} \definesystemconstant {scriptscript} \definesystemconstant {script} \definesystemconstant {sc} diff --git a/tex/context/base/mkxl/phys-dim.mkxl b/tex/context/base/mkxl/phys-dim.mkxl index 51ebbe172..c84e7fffa 100644 --- a/tex/context/base/mkxl/phys-dim.mkxl +++ b/tex/context/base/mkxl/phys-dim.mkxl @@ -388,6 +388,7 @@ \frozen\protected\def\unitsmediumspace{\medspace} \frozen\protected\def\unitsbigspace {\thickspace} \frozen\protected\def\unitsbackspace {\negthinspace} +\frozen\protected\def\unitsmathspace {\ifmmode\mathatomskip\mathdimensioncode\mathdimensioncode\mathstyle\fi} \permanent\protected\def\installunitsseparator#1#2% {\defcsname\??unitseparator#1\endcsname{#2}} @@ -395,11 +396,12 @@ \protected\def\phys_units_separator {\ifcsname\??unitseparator\unitparameter\c!separator\endcsname\lastnamedcs\else\cdot\fi} -\installunitsseparator\v!normal {\cdot} -\installunitsseparator\v!big {\unitsbigspace} -\installunitsseparator\v!medium {\unitsmediumspace} -\installunitsseparator\v!small {\unitssmallspace} -\installunitsseparator\v!none {} +\installunitsseparator\v!normal{\cdot} +\installunitsseparator\v!big {\unitsbigspace} +\installunitsseparator\v!medium{\unitsmediumspace} +\installunitsseparator\v!small {\unitssmallspace} +\installunitsseparator\v!none {} +\installunitsseparator\v!math {\unitsmathspace} \permanent\protected\def\installunitsspace#1#2% {\defcsname\??unitspace#1\endcsname{#2}} @@ -413,6 +415,7 @@ \installunitsspace\v!medium{\unitsmediumspace} \installunitsspace\v!small {\unitssmallspace} \installunitsspace\v!none {} +\installunitsspace\v!math {\unitsmathspace} \newtoks \everyunits % we keep the old \units command so we need a longer one @@ -606,10 +609,37 @@ \permanent\protected\def\unitsN#1% {\unitsNstart#1\unitsNstop} +% \def\phys_units_start +% {\ifmmode +% \dostarttagged\t!maction\t!unit +% \bgroup % make an mrow +% \else +% \dostarttagged\t!unit\empty +% \fi +% \let\phys_units_finish\phys_units_stop +% \let\phys_units_start\relax} +% +% \def\phys_units_stop +% {\ifconditional\c_phys_units_number +% \setfalse\c_phys_units_number +% \dostoptagged +% \fi +% \ifconditional\c_phys_units_quantity +% \setfalse\c_phys_units_quantity +% \dostoptagged +% \fi +% \dostoptagged +% \ifmmode +% \egroup +% \fi} + \def\phys_units_start {\ifmmode \dostarttagged\t!maction\t!unit - \bgroup % make an mrow + \mathatom + \s!leftclass \mathdimensioncode + \s!rightclass \mathordinarycode + \bgroup \else \dostarttagged\t!unit\empty \fi diff --git a/tex/context/base/mkxl/spac-hor.mkxl b/tex/context/base/mkxl/spac-hor.mkxl index 9bde93997..0773b042a 100644 --- a/tex/context/base/mkxl/spac-hor.mkxl +++ b/tex/context/base/mkxl/spac-hor.mkxl @@ -530,16 +530,40 @@ \enforced\let\ \space \to \everysimplifycommands -\newsignal\d_spac_keep_unwanted_space_signal +% \newsignal\d_spac_keep_unwanted_space_signal +% +% % \parindentmode\plusone +% +% \permanent\protected\def\keepunwantedspaces +% {\ifhmode +% \ifdim\lastskip=\d_spac_keep_unwanted_space_signal\else +% \hskip\d_spac_keep_unwanted_space_signal\relax +% \fi +% \fi} +% +% \permanent\protected\def\removeunwantedspaces +% {\ifhmode +% \expandafter \spac_helpers_remove_unwantedspace +% \fi} +% +% \def\spac_helpers_remove_unwantedspace +% {\ifnum\lastnodetype=\gluenodecode\relax +% \ifnum\lastnodesubtype=\indentskipsubtypecode\relax +% % keep parindent +% \orelse\ifdim\lastskip=\d_spac_keep_unwanted_space_signal\relax +% \unskip +% \else +% \unskip +% \doubleexpandafter\spac_helpers_remove_unwantedspace +% \fi +% \fi} -% \parindentmode\plusone +\newboundary\c_spac_keepspaces_boundary \permanent\protected\def\keepunwantedspaces - {\ifhmode - \ifdim\lastskip=\d_spac_keep_unwanted_space_signal\else - \hskip\d_spac_keep_unwanted_space_signal\relax - \fi - \fi} + {\ifhmode\ifnum\lastboundary=\c_spac_keepspaces_boundary\else + \boundary\c_spac_keepspaces_boundary + \fi\fi} \permanent\protected\def\removeunwantedspaces {\ifhmode @@ -547,15 +571,15 @@ \fi} \def\spac_helpers_remove_unwantedspace - {\ifnum\lastnodetype=\gluenodecode\relax - \ifnum\lastnodesubtype=\indentskipsubtypecode\relax - % keep parindent - \orelse\ifdim\lastskip=\d_spac_keep_unwanted_space_signal\relax - \unskip - \else - \unskip - \doubleexpandafter\spac_helpers_remove_unwantedspace - \fi + {\ifnum\lastboundary=\c_spac_keepspaces_boundary + \expandafter\unboundary + \orunless\ifnum\lastnodetype=\gluenodecode + % no skip + \orelse\ifnum\lastnodesubtype=\indentskipsubtypecode + % keep parindent + \else + \unskip + \expandafter\spac_helpers_remove_unwantedspace \fi} \permanent\protected\def\onlynonbreakablespace @@ -1183,33 +1207,40 @@ %D \oeps} %D \stoptyping -\newsignal\d_spac_ignore_spaces_signal -\newcount \c_spac_ignore_spaces +% \newsignal\d_spac_ignore_spaces_signal +% \newcount \c_spac_ignore_spaces +% +% \permanent\protected\def\startignorespaces +% {\advance\c_spac_ignore_spaces\plusone +% \ifcase\c_spac_ignore_spaces\or \ifhmode +% \hskip\d_spac_ignore_spaces_signal +% \fi \fi +% \ignorespaces} +% +% \permanent\protected\def\stopignorespaces +% {\ifcase\c_spac_ignore_spaces \or +% \ifhmode +% \doloop\spac_ignore_spaces_body +% \fi +% \fi +% \advance\c_spac_ignore_spaces\minusone} +% +% \def\spac_ignore_spaces_body +% {\ifzeropt\lastskip +% \exitloop +% \orelse\ifdim\lastskip=\d_spac_ignore_spaces_signal +% \unskip +% \exitloop +% \else +% \unskip +% \fi} \permanent\protected\def\startignorespaces - {\advance\c_spac_ignore_spaces\plusone - \ifcase\c_spac_ignore_spaces\or \ifhmode - \hskip\d_spac_ignore_spaces_signal - \fi \fi - \ignorespaces} + {\pushmacro\nospaces + \nospaces\plusone} \permanent\protected\def\stopignorespaces - {\ifcase\c_spac_ignore_spaces \or - \ifhmode - \doloop\spac_ignore_spaces_body - \fi - \fi - \advance\c_spac_ignore_spaces\minusone} - -\def\spac_ignore_spaces_body - {\ifzeropt\lastskip - \exitloop - \orelse\ifdim\lastskip=\d_spac_ignore_spaces_signal - \unskip - \exitloop - \else - \unskip - \fi} + {\popmacro\nospaces} %D \macros %D {obeyfollowingtoken} diff --git a/tex/context/base/mkxl/spac-ver.mkxl b/tex/context/base/mkxl/spac-ver.mkxl index 1db2c8b06..2aff966bc 100644 --- a/tex/context/base/mkxl/spac-ver.mkxl +++ b/tex/context/base/mkxl/spac-ver.mkxl @@ -1076,76 +1076,6 @@ \permanent\protected\def\rightboundary {\protrusionboundary\plustwo} \permanent\protected\def\signalcharacter{\boundary\plusone\char\zerocount\boundary\plustwo} % not the same as strut signals -%D We no longer need these sigstruts: -% -% \newsignal\d_spac_struts_signal \setfalse\sigstruts -% -% \permanent\protected\def\begstrut -% {\relax\ifcase\strutht -% % \ignorespaces % maybe -% \else -% \expandafter\spac_struts_beg -% \fi} -% -% \def\spac_struts_beg -% {\ifconditional\sigstruts -% \spac_struts_beg_signal -% \else -% \spac_struts_beg_normal -% \fi -% \ignorespaces} -% -% \def\spac_struts_beg_signal -% {\noindent\horizontalstrut -% \penalty\plustenthousand -% \hskip-\d_spac_struts_signal -% \hskip\d_spac_struts_signal} -% -% \def\spac_struts_beg_normal -% {\boundary\plusone -% \strut -% %\boundary\plusone -% \penalty\plustenthousand -% %\boundary\plusone -% \hskip\zeropoint} -% -% \permanent\protected\def\endstrut -% {\relax\ifhmode -% \ifcase\strutht -% % \removeunwantedspaces % maybe -% \else -% \spac_struts_end -% \fi -% \fi} -% -% \def\spac_struts_end -% {\ifconditional\sigstruts -% \spac_struts_end_signal -% \else -% \spac_struts_end_normal -% \fi} -% -% \def\spac_struts_end_signal -% {\ifdim\lastskip=\d_spac_struts_signal -% \unskip -% \unskip -% \unpenalty -% \setbox\scratchbox\lastbox -% \else -% \penalty\plustenthousand -% \hskip\zeropoint -% \strut -% \fi} -% -% \def\spac_struts_end_normal -% {\removeunwantedspaces -% \penalty\plustenthousand -% %\boundary\plustwo -% \hskip\zeropoint -% %\boundary\plustwo -% \strut -% \boundary\plustwo} - %D \starttyping %D $ \ifhmode H1\fi x \ifhmode H2\fi $\par %D $ \ifmmode M1\fi x \ifmmode M2\fi $\par diff --git a/tex/context/base/mkxl/strc-itm.mklx b/tex/context/base/mkxl/strc-itm.mklx index 96e98e769..db6bdadf3 100644 --- a/tex/context/base/mkxl/strc-itm.mklx +++ b/tex/context/base/mkxl/strc-itm.mklx @@ -209,7 +209,7 @@ \newconditional\c_strc_itemgroups_optimize \settrue\c_strc_itemgroups_optimize \newconditional\c_strc_itemgroups_auto_concat \settrue\c_strc_itemgroups_auto_concat -\newsignal \d_strc_itemgroups_signal +\newboundary \c_strc_itemgroups_boundary \newbox \b_strc_itemgroups @@ -849,7 +849,7 @@ % % \ifhmode % \ifconditional\c_strc_itemgroups_auto_concat -% \ifdim\lastskip=\d_strc_itemgroups_signal +% \ifnum\lastboundary=\c_strc_itemgroups_boundary % \settrue\c_strc_itemgroups_concat % \fi % \fi @@ -883,7 +883,7 @@ % \ifhmode \ifconditional\c_strc_itemgroups_auto_concat - \ifdim\lastskip=\d_strc_itemgroups_signal + \ifnum\lastboundary=\c_strc_itemgroups_boundary \settrue\c_strc_itemgroups_concat \fi \fi @@ -1196,7 +1196,7 @@ \begstrut % \strut \nobreak % else problems with intext items \seteffectivehsize % NEW ! - \hskip\d_strc_itemgroups_signal % concat + \boundary\c_strc_itemgroups_boundary % was signal \itemgroupparameter\c!command} \protected\permanent\def\stopitemgroupitem diff --git a/tex/context/base/mkxl/strc-mat.mkxl b/tex/context/base/mkxl/strc-mat.mkxl index 709ef7ac4..98c64205b 100644 --- a/tex/context/base/mkxl/strc-mat.mkxl +++ b/tex/context/base/mkxl/strc-mat.mkxl @@ -887,12 +887,15 @@ % {\mathatom \s!leftclass \mathendcode \s!rightclass \mathbegincode{}\noatomruling} {\mathatom \s!class \mathbegincode{}\noatomruling} +% maybe: \newboundary \c_strc_math_align_boundary + +\defineboundary[mathalign] % this one is also used at the lua end + \protected\def\strc_math_align_here {\ifmmode % we can have a more dedicated value, and also maybe store the class so that we can % pick it up at the engine end (second pass) -% \boundary\plusone - \boundary314\relax + \boundary\c_bndr_mathalign \fi} \protected\def\strc_math_break_here diff --git a/tex/context/base/mkxl/strc-not.mklx b/tex/context/base/mkxl/strc-not.mklx index 34f74dd68..f6de80efe 100644 --- a/tex/context/base/mkxl/strc-not.mklx +++ b/tex/context/base/mkxl/strc-not.mklx @@ -511,7 +511,7 @@ \ifconditional\c_strc_notes_skip \global\setfalse\c_strc_notes_skip \else - \kern\d_strc_notes_signal\relax % \relax is needed to honor spaces + \boundary\noteboundary \fi} %D Interaction in notes is somewhat complex due to the way notes get flushed. In @@ -708,7 +708,8 @@ \removeunwantedspaces \doifelseitalic\/\donothing % Charles IV \footnote{the fourth} \fi - \ifdim\lastkern=\d_strc_notes_signal + \ifnum\lastboundary=\noteboundary + \unboundary % \kern\noteparameter\c!distance % yes or no note font? or main text \strc_notes_inject_separator \fi @@ -731,7 +732,8 @@ \protected\def\strc_notes_inject_dummy % temp hack {\removeunwantedspaces \doifelseitalic\/\donothing % Charles IV \footnote{the fourth} - \ifdim\lastkern=\d_strc_notes_signal + \ifnum\lastboundary=\noteboundary + \unboundary % \kern\noteparameter\c!distance % yes or no note font? or main text \strc_notes_inject_separator \fi @@ -1316,7 +1318,7 @@ \installstructurelistprocessor{construction}{\usestructurelistprocessor{section}} -\newsignal\d_strc_notes_signal +\newboundary\noteboundary \newconditional\processingnote \newconditional\postponednote diff --git a/tex/context/base/mkxl/strc-sec.mkxl b/tex/context/base/mkxl/strc-sec.mkxl index 0776249fa..cb897d906 100644 --- a/tex/context/base/mkxl/strc-sec.mkxl +++ b/tex/context/base/mkxl/strc-sec.mkxl @@ -1147,11 +1147,11 @@ \newcount \c_strc_sectioning_preceding_level \c_strc_sectioning_preceding_level\plusone \newconditional\c_strc_sectioning_auto_break \settrue\c_strc_sectioning_auto_break \newconditional\c_strc_sectioning_ignore_page -\newsignal \d_strc_sectioning_continuous_signal +\newboundary \c_strc_sectioning_boundary \protected\def\strc_sectioning_inject_continuous_signal {\ifhmode - \hskip\d_strc_sectioning_continuous_signal\relax + \boundary\c_strc_sectioning_boundary \fi} % \let\dotagsectionlevel\relax @@ -1184,7 +1184,7 @@ {\ifhmode \scratchcounter\lastpenalty \unpenalty % no beauty in this - \ifdim\lastskip=\d_strc_sectioning_continuous_signal + \ifnum\lastboundary=\c_strc_sectioning_boundary % no page break \ifconditional\c_strc_sectioning_ignore_page \setfalse\c_strc_sectioning_ignore_page diff --git a/tex/context/base/mkxl/supp-mat.mkxl b/tex/context/base/mkxl/supp-mat.mkxl index 680f4ea37..ef72e0e9a 100644 --- a/tex/context/base/mkxl/supp-mat.mkxl +++ b/tex/context/base/mkxl/supp-mat.mkxl @@ -125,36 +125,36 @@ %D %D REPLACED (keep commented): -\newsignal\dimensionsignal - -\mutable\def\dimensiontypeface {\tf} -\mutable\def\dimensionhalfspace {\,} - -\aliased\let\dodimensionsignal\relax - -\permanent\protected\def\dimension#1% - {\pushmacro\dodimensionsignal - \enforced\gdef\dodimensionsignal{\kern\dimensionsignal}% - \ifzeropt\lastskip - \ifzeropt\lastkern - \ifmmode - \mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% - \else - \mathematics{\dimensiontypeface#1}% - \fi - \orelse\ifdim\lastkern=\dimensionsignal - \mathematics{\dimensionhalfspace\dimensiontypeface#1}% - \else - \unkern\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% - \fi - \else - \unskip\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% - \fi - \dodimensionsignal - \popmacro\dodimensionsignal} - -\permanent\protected\def\nodimension#1% - {\unskip#1\enforced\glet\dodimensionsignal\relax} +% \newsignal\dimensionsignal +% +% \mutable\def\dimensiontypeface {\tf} +% \mutable\def\dimensionhalfspace {\,} +% +% \aliased\let\dodimensionsignal\relax +% +% \permanent\protected\def\dimension#1% +% {\pushmacro\dodimensionsignal +% \enforced\gdef\dodimensionsignal{\kern\dimensionsignal}% +% \ifzeropt\lastskip +% \ifzeropt\lastkern +% \ifmmode +% \mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% +% \else +% \mathematics{\dimensiontypeface#1}% +% \fi +% \orelse\ifdim\lastkern=\dimensionsignal +% \mathematics{\dimensionhalfspace\dimensiontypeface#1}% +% \else +% \unkern\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% +% \fi +% \else +% \unskip\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}% +% \fi +% \dodimensionsignal +% \popmacro\dodimensionsignal} +% +% \permanent\protected\def\nodimension#1% +% {\unskip#1\enforced\glet\dodimensionsignal\relax} % experiment, not yet to be used diff --git a/tex/context/base/mkxl/trac-vis.lmt b/tex/context/base/mkxl/trac-vis.lmt index 13d043a93..d277095a3 100644 --- a/tex/context/base/mkxl/trac-vis.lmt +++ b/tex/context/base/mkxl/trac-vis.lmt @@ -143,20 +143,21 @@ local modes = { mathglue = 0x1000000, mark = 0x2000000, insert = 0x4000000, + boundary = 0x8000000, } visualizers.modes = modes local usedfont, exheight, emwidth local l_penalty, l_glue, l_kern, l_fontkern, l_hbox, l_vbox, l_vtop, l_strut, l_whatsit, l_glyph, l_user, l_math, l_marginkern, l_mathkern, l_mathshape, l_italic, l_origin, l_discretionary, l_expansion, l_line, l_space, l_depth, - l_dir, l_whatsit, l_mark, l_insert + l_dir, l_whatsit, l_mark, l_insert, l_boundary local enabled = false local layers = { } local preset_boxes = modes.hbox + modes.vbox + modes.vtop + modes.origin local preset_makeup = preset_boxes - + modes.kern + modes.glue + modes.penalty + + modes.kern + modes.glue + modes.penalty + modes.boundary local preset_all = preset_makeup + modes.fontkern + modes.marginkern + modes.mathkern + modes.whatsit + modes.glyph + modes.user + modes.math @@ -218,6 +219,7 @@ local function initialize() l_par = layers.par l_mark = layers.mark l_insert = layers.insert + l_boundary = layers.boundary -- if not userrule then userrule = nuts.rules.userrule @@ -608,7 +610,7 @@ local ruledinsert do local si_cache = setmetatableindex(caches["insert"], function(f,index) local info = sometext(formatters["SI:%i"](index),usedfont,nil,"trace:w") -- whatsit setattr(info,a_layer,l_insert) - i_cache[index] = info + si_cache[index] = info end) ruledinsert = function(head,current) @@ -665,6 +667,34 @@ local ruledwhatsit do end +local ruledboundary do + + local boundarycodes = nodes.boundarycodes + local b_cache = caches["boundary"] + + local tags = { + [boundarycodes.cancel] = "CAN", + [boundarycodes.user] = "USR", + [boundarycodes.protrusion] = "PRO", + [boundarycodes.word] = "WRD", + } + + ruledboundary = function(head,current) + local what = getsubtype(current) + local info = b_cache[what] + if info then + -- print("hit whatsit") + else + info = sometext(formatters["B:%s"](tags[what] or what),usedfont,nil,"trace:w") + setattr(info,a_layer,l_boundary) + b_cache[what] = info + end + head, current = insertnodeafter(head,current,copylist(info)) + return head, current + end + +end + local ruleddir, ruledpar do local dircodes = nodes.dircodes @@ -1396,6 +1426,7 @@ do local mark_code = nodecodes.mark local insert_code = nodecodes.insert local rule_code = nodecodes.rule + local boundary_code = nodecodes.boundary local kerncodes = nodes.kerncodes local fontkern_code = kerncodes.fontkern @@ -1455,6 +1486,7 @@ do local trace_mathglue = false local trace_mark = false local trace_insert = false + local trace_boundary = false local current = head local previous = nil local attr = unsetvalue @@ -1499,6 +1531,7 @@ do trace_mathglue = false trace_mark = false trace_insert = false + trace_boundary = false if id == kern_code then goto kern else @@ -1533,6 +1566,7 @@ do trace_mathglue = a & 0x1000000 ~= 0 trace_mark = a & 0x2000000 ~= 0 trace_insert = a & 0x4000000 ~= 0 + trace_boundary = a & 0x8000000 ~= 0 end elseif a == unsetvalue then goto list @@ -1604,6 +1638,10 @@ do if trace_insert then head, current = ruledinsert(head,current) end + elseif id == boundary_code then + if trace_boundary then + head, current = ruledboundary(head,current) + end end goto next ::glue:: diff --git a/tex/context/base/mkxl/typo-cap.mkxl b/tex/context/base/mkxl/typo-cap.mkxl index 744b09a47..0a6867a43 100644 --- a/tex/context/base/mkxl/typo-cap.mkxl +++ b/tex/context/base/mkxl/typo-cap.mkxl @@ -73,7 +73,10 @@ % test \word{test TEST \TeX} test % test \Word{test TEST \TeX} test -\permanent\protected\def\setcharactercasing[#1]{\clf_setcharactercasing{#1}} % can be public implementor +\permanent\tolerant\protected\def\setcharactercasing[#1]{\clf_setcharactercasing{#1}} % can be public implementor + +\protected\def\casing[#1]{\groupedcommand{\clf_setcharactercasing{#1}}{}} +\protected\def\nocasing {\groupedcommand{\clf_setcharactercasing {}}{}} \protected\def\typo_capitale_WORD {\clf_setcharactercasing\v!WORD } \protected\def\typo_capitale_word {\clf_setcharactercasing\v!word } diff --git a/tex/context/base/mkxl/typo-del.mkxl b/tex/context/base/mkxl/typo-del.mkxl index f322b4f48..5b8431070 100644 --- a/tex/context/base/mkxl/typo-del.mkxl +++ b/tex/context/base/mkxl/typo-del.mkxl @@ -142,7 +142,6 @@ [\c!rightsubsentence] [\rightboundarycharacter\c!rightsubsentence{sentence}] -\newsignal\d_typo_subsentence_signal \newcount \c_typo_subsentence_nesting \mutable\let\beforesubsentence\donothing % maybe just a parameter @@ -171,10 +170,12 @@ \symbol[\c!midsentence]% \dostoptagged} +\newboundary\c_typo_subsentence_boundary + \permanent\protected\def\beginofsubsentence {\beforesubsentence - \ifdim\lastkern=\d_typo_subsentence_signal - \unskip + \ifnum\lastboundary=\c_typo_subsentence_boundary + \unboundary \kern\hspaceamount\currentusedlanguage{intersentence}% \fi \global\advance\c_typo_subsentence_nesting\plusone @@ -199,15 +200,15 @@ \dostoptagged \global\advance\c_typo_subsentence_nesting\minusone \unskip - \kern\d_typo_subsentence_signal\relax + \boundary\c_typo_subsentence_boundary \aftersubsentence} \permanent\protected\def\beginofsubsentencespacing % relax prevents space gobbling - {\kern\d_typo_subsentence_signal\relax}% \ignorespaces} + {\boundary\c_typo_subsentence_boundary}% \ignorespaces} \permanent\protected\def\endofsubsentencespacing - {\ifdim\lastkern=\d_typo_subsentence_signal - \unskip + {\ifnum\lastboundary=\c_typo_subsentence_boundary + \unboundary \hskip\hspaceamount\currentusedlanguage{intersentence}% % no good, actually language dependent: % \ignorespaces @@ -286,8 +287,6 @@ %D could be build on top of it. The speech opening and closing symbols are defined %D per language. Italian is an example of a language that has them set. -\newsignal\d_typo_delimited_signal - \mutable\let\currentdelimitedtext \s!unknown \mutable\let\currentparentdelimitedtext\currentdelimitedtext @@ -711,14 +710,16 @@ % even in \MKII. Maybe we should to this in \LUA. Only Italian has the % middlespeech parameter set. +\newboundary\c_typo_delimited_boundary + \def\typo_delimited_handle_middle#1% special case {\ifconditional\c_typo_delimited_repeating \begingroup \usedelimitedtextstyleandcolor\c!symstyle\c!symcolor \setbox\scratchbox\hbox{\delimitedtextparameter#1}% \ifdim\wd\scratchbox>\zeropoint - \ifdim\lastkern=\d_typo_delimited_signal - \unkern + \ifnum\lastboundary=\c_typo_delimited_boundary + \unboundary \hskip\hspaceamount\currentusedlanguage{interquotation}% \else % maybe an option: %\edef\p_delimited_margin{\delimitedtextparameter\c!location}% @@ -732,7 +733,7 @@ \delimitedtextparameter#1% unhbox\scratchbox \dostoptagged % \penalty\plustenthousand % else overfull boxes, but that's better than dangling periods - \kern\d_typo_delimited_signal % +- \prewordbreak + \boundary\c_typo_delimited_boundary \fi \endgroup \else @@ -744,11 +745,8 @@ \usedelimitedtextstyleandcolor\c!symstyle\c!symcolor \setbox\scratchbox\hbox{\delimitedtextparameter#1}% \ifdim\wd\scratchbox>\zeropoint - \ifdim\lastkern=\d_typo_delimited_signal - \unkern - \hskip\hspaceamount\currentusedlanguage{interquotation}% - \orelse\ifdim\lastskip=\d_typo_delimited_signal - \unskip + \ifnum\lastboundary=\c_typo_delimited_boundary + \unboundary \hskip\hspaceamount\currentusedlanguage{interquotation}% \fi % \strut % new, needed below @@ -762,7 +760,7 @@ \delimitedtextparameter#1% unhbox\scratchbox \dostoptagged \penalty\plustenthousand % new per 2013-03-09 WS mailing list - \hskip\d_typo_delimited_signal % +- \prewordbreak + \boundary\c_typo_delimited_boundary \fi \endgroup} @@ -771,12 +769,8 @@ \usedelimitedtextstyleandcolor\c!symstyle\c!symcolor \setbox\scratchbox\hbox{\delimitedtextparameter#1}% \ifdim\wd\scratchbox>\zeropoint - \ifdim\lastkern=\d_typo_delimited_signal - \unkern - \penalty\plustenthousand - \hskip\hspaceamount\currentusedlanguage{interquotation}% - \orelse\ifdim\lastskip=\d_typo_delimited_signal - \unskip + \ifnum\lastboundary=\c_typo_delimited_boundary + \unboundary \penalty\plustenthousand \hskip\hspaceamount\currentusedlanguage{interquotation}% \fi @@ -789,7 +783,7 @@ \dotagsetdelimitedsymbol\s!right \delimitedtextparameter#1% unhbox\scratchbox \dostoptagged - \kern\d_typo_delimited_signal % +- \prewordbreak + \boundary\c_typo_delimited_boundary \fi \endgroup} diff --git a/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv b/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv index 03bb91989..32c1528ad 100644 --- a/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv +++ b/tex/context/fonts/mkiv/type-imp-ebgaramond.mkiv @@ -72,8 +72,8 @@ \starttypescript[ebgaramond] \definetypeface [ebgaramond] [\s!rm] [\s!serif] [ebgaramond] [\s!default] - \definetypeface [ebgaramond] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.8] % rather arbitrary but seldom mixed anyway - % \definetypeface [ebgaramond] [\s!mm] [\s!math] [bonum] [\s!default] [\s!rscale=0.8] % rather arbitrary but seldom mixed anyway + \definetypeface [ebgaramond] [\s!tt] [\s!mono] [dejavu] [\s!default] [\s!rscale=0.8] + % \definetypeface [ebgaramond] [\s!mm] [\s!math] [bonum] [\s!default] [\s!rscale=0.8] \definetypeface [ebgaramond] [\s!mm] [\s!math] [ebgaramond] [\s!default] \stoptypescript diff --git a/tex/context/fonts/mkxl/bhai.lfg b/tex/context/fonts/mkxl/bhai.lfg index ab309e0b8..7356f6255 100644 --- a/tex/context/fonts/mkxl/bhai.lfg +++ b/tex/context/fonts/mkxl/bhai.lfg @@ -1,7 +1,7 @@ return { name = "bhai", version = "1.00", - comment = "Goodies that complement shobhika.", + comment = "Goodies that complement bhai.", author = "Hans Hagen & Sreeram", copyright = "ConTeXt development team", sanitizers = { @@ -20,8 +20,6 @@ return { -- ["ઙૈ્ર"] = "ઙ્રૈ", ["ચે્ર"] = "ચ્રે", ["ચૈ્ર"] = "ચ્રૈ", - ["છે્ર"] = "છ્રે", - ["છૈ્ર"] = "છ્રૈ", ["જે્ર"] = "જ્રે", ["જૈ્ર"] = "જ્રૈ", ["ઝે્ર"] = "ઝ્રે", diff --git a/tex/context/fonts/mkxl/shobhika.lfg b/tex/context/fonts/mkxl/shobhika.lfg index f9b7dc433..ae5473d72 100644 --- a/tex/context/fonts/mkxl/shobhika.lfg +++ b/tex/context/fonts/mkxl/shobhika.lfg @@ -5,7 +5,7 @@ return { author = "Hans Hagen & Sreeram", copyright = "ConTeXt development team", sanitizers = { - dev2rkrf = { + dev2rkrf = { mapping = { ["के्र"] = "क्रे", ["कै्र"] = "क्रै", @@ -20,8 +20,6 @@ return { -- ["ङै्र"] = "ङ्रै", ["चे्र"] = "च्रे", ["चै्र"] = "च्रै", - ["छे्र"] = "छ्रे", - ["छै्र"] = "छ्रै", ["जे्र"] = "ज्रे", ["जै्र"] = "ज्रै", ["झे्र"] = "झ्रे", diff --git a/tex/context/interface/mkii/keys-de.xml b/tex/context/interface/mkii/keys-de.xml index 681e1282f..2ff113ecd 100644 --- a/tex/context/interface/mkii/keys-de.xml +++ b/tex/context/interface/mkii/keys-de.xml @@ -284,7 +284,6 @@ - @@ -648,6 +647,7 @@ + @@ -722,6 +722,7 @@ + @@ -893,6 +894,7 @@ + @@ -924,6 +926,7 @@ + @@ -966,6 +969,7 @@ + @@ -998,7 +1002,9 @@ + + @@ -1010,6 +1016,7 @@ + @@ -1182,6 +1189,7 @@ + @@ -1233,6 +1241,8 @@ + + @@ -1317,6 +1327,7 @@ + diff --git a/tex/context/interface/mkii/keys-en.xml b/tex/context/interface/mkii/keys-en.xml index cf545b6eb..9533b43f6 100644 --- a/tex/context/interface/mkii/keys-en.xml +++ b/tex/context/interface/mkii/keys-en.xml @@ -647,6 +647,7 @@ + @@ -1240,6 +1241,8 @@ + + diff --git a/tex/context/interface/mkii/keys-it.xml b/tex/context/interface/mkii/keys-it.xml index 0143786fa..8a2dc7180 100644 --- a/tex/context/interface/mkii/keys-it.xml +++ b/tex/context/interface/mkii/keys-it.xml @@ -284,7 +284,6 @@ - @@ -648,6 +647,7 @@ + @@ -722,6 +722,7 @@ + @@ -925,6 +926,7 @@ + @@ -967,6 +969,7 @@ + @@ -1013,6 +1016,7 @@ + @@ -1185,6 +1189,7 @@ + @@ -1236,6 +1241,8 @@ + + @@ -1320,6 +1327,7 @@ + diff --git a/tex/context/interface/mkii/keys-nl.xml b/tex/context/interface/mkii/keys-nl.xml index 01a233a88..e7e05ec5c 100644 --- a/tex/context/interface/mkii/keys-nl.xml +++ b/tex/context/interface/mkii/keys-nl.xml @@ -647,6 +647,7 @@ + @@ -1240,6 +1241,8 @@ + + diff --git a/tex/context/interface/mkii/keys-pe.xml b/tex/context/interface/mkii/keys-pe.xml index dcda83b79..598b3092c 100644 --- a/tex/context/interface/mkii/keys-pe.xml +++ b/tex/context/interface/mkii/keys-pe.xml @@ -647,6 +647,7 @@ + @@ -1240,6 +1241,8 @@ + + diff --git a/tex/context/interface/mkii/keys-ro.xml b/tex/context/interface/mkii/keys-ro.xml index 32b76a9f5..d15ee78f1 100644 --- a/tex/context/interface/mkii/keys-ro.xml +++ b/tex/context/interface/mkii/keys-ro.xml @@ -1241,6 +1241,8 @@ + + diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index c98ca8c7c..eb084d8ed 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2022-05-02 15:48 +-- merge date : 2022-05-11 11:34 do -- begin closure to overcome local limits and interference @@ -31318,14 +31318,14 @@ local function addfeature(data,feature,specifications,prepareonly) local lookups=rule.lookups or false local subtype=nil if lookups and sublookups then -if #lookups>0 then - local ns=stop-start+1 - for i=1,ns do - if lookups[i]==nil then - lookups[i]=0 - end - end -end + if #lookups>0 then + local ns=stop-start+1 + for i=1,ns do + if lookups[i]==nil then + lookups[i]=0 + end + end + end local l={} for k,v in sortedhash(lookups) do local t=type(v) @@ -31621,7 +31621,7 @@ end order=featureorder, [stepkey]=steps, nofsteps=nofsteps, - type=types[featuretype], + type=specification.handler or types[featuretype], } if prepareonly then return sequence @@ -37828,12 +37828,12 @@ local function blockligatures(str) before=before, current={ one,two }, after=after, - lookups={ 1 }, + lookups={ 1,false }, } revert[new]={ current={ one,zwj }, after={ two }, - lookups={ 1 }, + lookups={ 1,false }, } end end -- cgit v1.2.3