summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv')
-rw-r--r--tex/context/base/mkiv/back-exp.lua76
-rw-r--r--tex/context/base/mkiv/buff-ini.lua126
-rw-r--r--tex/context/base/mkiv/buff-ini.mkiv2
-rw-r--r--tex/context/base/mkiv/cldf-ini.mkiv3
-rw-r--r--tex/context/base/mkiv/cldf-int.mkxl31
-rw-r--r--tex/context/base/mkiv/cldf-lmt.lua302
-rw-r--r--tex/context/base/mkiv/colo-imp-rgb.mkiv19
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context-performance.tex2
-rw-r--r--tex/context/base/mkiv/context.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkxl4
-rw-r--r--tex/context/base/mkiv/core-env.lua38
-rw-r--r--tex/context/base/mkiv/core-lmt.mkxl5
-rw-r--r--tex/context/base/mkiv/export-example.css14
-rw-r--r--tex/context/base/mkiv/export-example.tex2
-rw-r--r--tex/context/base/mkiv/font-fil.mklx104
-rw-r--r--tex/context/base/mkiv/font-fil.mkvi2
-rw-r--r--tex/context/base/mkiv/font-mat.mklx26
-rw-r--r--tex/context/base/mkiv/font-ots.lua17
-rw-r--r--tex/context/base/mkiv/grph-trf.mkiv2
-rw-r--r--tex/context/base/mkiv/lpdf-lmt.lua3
-rw-r--r--tex/context/base/mkiv/lpdf-pde.lua5
-rw-r--r--tex/context/base/mkiv/luat-mac.lua95
-rw-r--r--tex/context/base/mkiv/math-ini.mkxl6
-rw-r--r--tex/context/base/mkiv/math-rad.mkvi18
-rw-r--r--tex/context/base/mkiv/mult-aux.mkxl32
-rw-r--r--tex/context/base/mkiv/mult-ini.lua22
-rw-r--r--tex/context/base/mkiv/mult-low.lua3
-rw-r--r--tex/context/base/mkiv/mult-prm.lua3
-rw-r--r--tex/context/base/mkiv/pack-rul.mkiv2
-rw-r--r--tex/context/base/mkiv/pack-rul.mkxl2
-rw-r--r--tex/context/base/mkiv/page-bck.mkiv4
-rw-r--r--tex/context/base/mkiv/page-lin.mkvi24
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin27806 -> 27771 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin252140 -> 252766 bytes
-rw-r--r--tex/context/base/mkiv/strc-tag.lua5
-rw-r--r--tex/context/base/mkiv/strc-tag.mkiv14
-rw-r--r--tex/context/base/mkiv/supp-box.lua49
-rw-r--r--tex/context/base/mkiv/supp-box.mkiv2
-rw-r--r--tex/context/base/mkiv/supp-box.mkxl2
-rw-r--r--tex/context/base/mkiv/syst-aux.mkxl316
-rw-r--r--tex/context/base/mkiv/syst-ini.mkiv2
-rw-r--r--tex/context/base/mkiv/syst-ini.mkxl2
-rw-r--r--tex/context/base/mkiv/toks-ini.lua21
-rw-r--r--tex/context/base/mkiv/type-ini.mklx2
45 files changed, 1113 insertions, 300 deletions
diff --git a/tex/context/base/mkiv/back-exp.lua b/tex/context/base/mkiv/back-exp.lua
index f72cd68b8..3b9a8f3ac 100644
--- a/tex/context/base/mkiv/back-exp.lua
+++ b/tex/context/base/mkiv/back-exp.lua
@@ -144,6 +144,7 @@ local treeroot = tree
local treehash = { }
local extras = { }
local checks = { }
+local fixes = { }
local finalizers = { }
local nofbreaks = 0
local used = { }
@@ -707,6 +708,35 @@ end
do
+ function fixes.linenumber(di,data,i)
+ local ni = data[i+1]
+ if ni and ni.data then
+ while true do
+ local d = ni.data[1]
+ if d then
+ local e = d.element
+ if e then
+ if e == "line" or e == "verbatimline" then
+ table.insert(d.data,1,di)
+ data[i] = false
+ return
+ else
+ ni = d
+ end
+ else
+ return
+ end
+ else
+ return
+ end
+ end
+ end
+ end
+
+end
+
+do
+
local synonyms = { }
local sortings = { }
@@ -2305,8 +2335,10 @@ do
if not p then
-- skip
elseif exportproperties == v_yes then
+ n = n + 1
r[n] = attributes(p)
else
+ n = n + 1
r[n] = properties(p)
end
end
@@ -2574,9 +2606,12 @@ do
-- also tabulaterow reconstruction .. maybe better as a checker
-- i.e cell attribute
- local function collapsetree()
- for tag, trees in next, treehash do
+ local function collapsetree(tree)
+ for tag, trees in sortedhash(treehash) do
+-- for tag, trees in next, treehash do
local d = trees[1].data
+-- print("!!!!!!!!",tag)
+-- inspect(trees)
if d then
local nd = #d
if nd > 0 then
@@ -2630,10 +2665,22 @@ do
end
end
+ -- local function showtree(data,when,where)
+ -- if data then
+ -- for i=1,#data do
+ -- local d = data[i]
+ -- if type(d) == "table" and d.element then
+ -- print(when,where,i,d.element,d.parnumber or 0)
+ -- end
+ -- end
+ -- end
+ -- end
+
local function indextree(tree)
local data = tree.data
if data then
local n, new = 0, { }
+ -- showtree(data,"before","index")
for i=1,#data do
local d = data[i]
if not d then
@@ -2650,22 +2697,43 @@ do
end
end
tree.data = new
+ -- showtree(new,"after","index")
end
end
local function checktree(tree)
local data = tree.data
if data then
+ -- showtree(data,"before","check")
for i=1,#data do
local d = data[i]
if type(d) == "table" then
local check = checks[d.tg]
if check then
- check(d)
+ check(d,data,i)
end
checktree(d) -- so parts can pass twice
end
end
+ -- showtree(data,"after","check")
+ end
+ end
+
+ local function fixtree(tree)
+ local data = tree.data
+ if data then
+ -- showtree(data,"before","fix")
+ for i=1,#data do
+ local d = data[i]
+ if type(d) == "table" then
+ local fix = fixes[d.tg]
+ if fix then
+ fix(d,data,i)
+ end
+ fixtree(d) -- so parts can pass twice
+ end
+ end
+ -- showtree(data,"after","fix")
end
end
@@ -2675,6 +2743,7 @@ do
wrapups.finalizetree = finalizetree
wrapups.indextree = indextree
wrapups.checktree = checktree
+ wrapups.fixtree = fixtree
end
@@ -3828,6 +3897,7 @@ local htmltemplate = [[
end
report_export("")
--
+ wrapups.fixtree(tree)
wrapups.collapsetree(tree)
wrapups.indextree(tree)
wrapups.checktree(tree)
diff --git a/tex/context/base/mkiv/buff-ini.lua b/tex/context/base/mkiv/buff-ini.lua
index 5b5c47867..e4f01c03f 100644
--- a/tex/context/base/mkiv/buff-ini.lua
+++ b/tex/context/base/mkiv/buff-ini.lua
@@ -42,6 +42,10 @@ local scantokencode = scanners.tokencode
local getters = tokens.getters
local gettoken = getters.token
+local getcommand = token.get_command
+local getcsname = token.get_csname
+local getnextchar = token.get_next_char
+
local scanners = interfaces.scanners
local variables = interfaces.variables
@@ -375,7 +379,7 @@ local tochar = {
local experiment = false
local experiment = scantokencode and true
-function tokens.pickup(start,stop)
+local function pickup(start,stop)
local stoplist = split[stop] -- totable(stop)
local stoplength = #stoplist
local stoplast = stoplist[stoplength]
@@ -439,11 +443,11 @@ function tokens.pickup(start,stop)
-- we're skipping leading stuff, like obeyedlines and relaxes
if experiment and size > 0 then
-- we're probably in a macro
- local char = tochar[token.get_command(t)] -- could also be char(token.get_mode(t))
+ local char = tochar[getcommand(t)]
if char then
size = size + 1 ; list[size] = char
else
- local csname = token.get_csname(t)
+ local csname = getcsname(t)
if csname == stop then
stoplength = 0
break
@@ -494,6 +498,118 @@ function tokens.pickup(start,stop)
end
end
+-- -- lmtx:
+--
+-- local function pickup(start,stop)
+-- local stoplist = split[stop] -- totable(stop)
+-- local stoplength = #stoplist
+-- local stoplast = stoplist[stoplength]
+-- local startlist = split[start] -- totable(start)
+-- local startlength = #startlist
+-- local startlast = startlist[startlength]
+-- local list = { }
+-- local size = 0
+-- local depth = 0
+-- getnextchar() -- we start with a \relax
+-- while true do -- or use depth
+-- local char = getnextchar()
+-- if char then
+-- size = size + 1
+-- list[size] = char
+-- if char == stoplast and size >= stoplength then
+-- local done = true
+-- local last = size
+-- for i=stoplength,1,-1 do
+-- if stoplist[i] ~= list[last] then
+-- done = false
+-- break
+-- end
+-- last = last - 1
+-- end
+-- if done then
+-- if depth > 0 then
+-- depth = depth - 1
+-- else
+-- break
+-- end
+-- char = false -- trick: let's skip the next (start) test
+-- end
+-- end
+-- if char == startlast and size >= startlength then
+-- local done = true
+-- local last = size
+-- for i=startlength,1,-1 do
+-- if startlist[i] ~= list[last] then
+-- done = false
+-- break
+-- end
+-- last = last - 1
+-- end
+-- if done then
+-- depth = depth + 1
+-- end
+-- end
+-- else
+-- local t = gettoken()
+-- if t then
+-- -- we're skipping leading stuff, like obeyedlines and relaxes
+-- if experiment and size > 0 then
+-- -- we're probably in a macro
+-- local char = tochar[getcommand(t)]
+-- if char then
+-- size = size + 1 ; list[size] = char
+-- else
+-- local csname = getcsname(t)
+-- if csname == stop then
+-- stoplength = 0
+-- break
+-- else
+-- size = size + 1 ; list[size] = "\\"
+-- size = size + 1 ; list[size] = csname
+-- size = size + 1 ; list[size] = " "
+-- end
+-- end
+-- else
+-- -- ignore and hope for the best
+-- end
+-- else
+-- break
+-- end
+-- end
+-- end
+-- local start = 1
+-- local stop = size - stoplength - 1
+-- -- not good enough: only empty lines, but even then we miss the leading
+-- -- for verbatim
+-- --
+-- -- the next is not yet adapted to the new scanner ... we don't need lpeg here
+-- --
+-- for i=start,stop do
+-- local li = list[i]
+-- if lpegmatch(blackspace,li) then
+-- -- keep going
+-- elseif lpegmatch(eol,li) then
+-- -- okay
+-- start = i + 1
+-- else
+-- break
+-- end
+-- end
+-- for i=stop,start,-1 do
+-- if lpegmatch(whitespace,list[i]) then
+-- stop = i - 1
+-- else
+-- break
+-- end
+-- end
+-- --
+-- if start <= stop then
+-- return concat(list,"",start,stop)
+-- else
+-- return ""
+-- end
+-- end
+
-- function buffers.pickup(name,start,stop,finish,catcodes,doundent)
-- local data = tokens.pickup(start,stop)
-- if doundent or (autoundent and doundent == nil) then
@@ -505,6 +621,8 @@ end
-- commands.pickupbuffer = buffers.pickup
+tokens.pickup = pickup
+
scanners.pickupbuffer = function()
local name = scanstring()
local start = scanstring()
@@ -512,7 +630,7 @@ scanners.pickupbuffer = function()
local finish = scanstring()
local catcodes = scaninteger()
local doundent = scanboolean()
- local data = tokens.pickup(start,stop)
+ local data = pickup(start,stop)
if doundent or (autoundent and doundent == nil) then
data = undent(data)
end
diff --git a/tex/context/base/mkiv/buff-ini.mkiv b/tex/context/base/mkiv/buff-ini.mkiv
index 8e71c9865..a8a120d90 100644
--- a/tex/context/base/mkiv/buff-ini.mkiv
+++ b/tex/context/base/mkiv/buff-ini.mkiv
@@ -116,7 +116,7 @@
{\endgroup % (1)
\endgroup % (2)
#5}%
- % todo: we need to skip the first lineending which is na active character
+ % todo: we need to skip the first lineending which is an active character
% but sometimes we have something different ... this is a side effect of
% checking for optional arguments i.e. the next token is already tokenized
% and for that reason we have the \relax as well as the \string
diff --git a/tex/context/base/mkiv/cldf-ini.mkiv b/tex/context/base/mkiv/cldf-ini.mkiv
index 29fb15d68..0a1ee639f 100644
--- a/tex/context/base/mkiv/cldf-ini.mkiv
+++ b/tex/context/base/mkiv/cldf-ini.mkiv
@@ -17,8 +17,7 @@
\registerctxluafile{cldf-ini}{}
-%D With each new update of \MKIV\ we can join Within Temptation in
-%D singing:
+%D With each new update of \MKIV\ we can join Within Temptation in singing:
%D
%D \startbuffer
%D \startluacode
diff --git a/tex/context/base/mkiv/cldf-int.mkxl b/tex/context/base/mkiv/cldf-int.mkxl
new file mode 100644
index 000000000..aae7d0416
--- /dev/null
+++ b/tex/context/base/mkiv/cldf-int.mkxl
@@ -0,0 +1,31 @@
+%D \module
+%D [ file=mult-ini,
+%D version=2008.10.22, % 1996.06.01,
+%D title=\CONTEXT\ Multilingual 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 Multilingual Macros / Lua}
+
+\registerctxluafile{cldf-int}{}
+
+\unprotect
+
+\unexpanded\def\newluatable#1{\clf_newluatable#1\atendofgrouped{\disposeluatable#1}}
+\unexpanded\def\useluatable#1{\clf_useluatable#1\atendofgrouped{\disposeluatable#1}}
+
+\installcorenamespace{datavalue}
+
+\unexpanded\def\setdatavalue#1#2% #2 is a number (expression)
+ {\expandafter\letdatacode\csname\??datavalue#1\endcsname\numexpr#2\relax}
+
+\def\getdatavalue#1{\begincsname\??datavalue#1\endcsname}
+\def\thedatavalue#1{\the\begincsname\??datavalue#1\endcsname}
+
+\protect \endinput
diff --git a/tex/context/base/mkiv/cldf-lmt.lua b/tex/context/base/mkiv/cldf-lmt.lua
index 74ba5c224..ab25f962e 100644
--- a/tex/context/base/mkiv/cldf-lmt.lua
+++ b/tex/context/base/mkiv/cldf-lmt.lua
@@ -6,45 +6,52 @@ if not modules then modules = { } end modules ['cldf-lmt'] = {
license = "see context related readme files"
}
-local random = math.random
-local randomseed = math.randomseed
-local round = math.round
-local abs = math.abs
-
-local scanners = tokens.scanners
-local scanword = scanners.word
-local scanstring = scanners.string
-local scanboolean = scanners.boolean
-local scandimen = scanners.dimen
-local scanfloat = scanners.float
-local scancount = scanners.integer
-local scaninteger = scanners.luainteger
-local scancardinal = scanners.luacardinal
-local scannumber = scanners.luanumber
-local scanargument = scanners.argument
-local scantoken = scanners.token
-local getindex = token.get_index
-local texsetdimen = tex.setdimen
-
-local values = tokens.values
-local none_code = values.none
-local integer_code = values.integer
-local cardinal_code = values.cardinal
-local dimension_code = values.dimension
-local skip_code = values.skip
-local boolean_code = values.boolean
-local float_code = values.float
-
-local context = context
+local next, load = next, load
+
+local setmetatableindex = table.setmetatableindex
+local serialize = table.serialize
+
+local random = math.random
+local randomseed = math.randomseed
+local round = math.round
+local abs = math.abs
+
+local implement = interfaces.implement
+
+local scanners = tokens.scanners
+local scanword = scanners.word
+local scanstring = scanners.string
+local scanboolean = scanners.boolean
+local scandimen = scanners.dimen
+local scanfloat = scanners.float
+local scancount = scanners.integer
+local scaninteger = scanners.luainteger
+local scancardinal = scanners.luacardinal
+local scannumber = scanners.luanumber
+local scanargument = scanners.argument
+local scantoken = scanners.token
+local getindex = token.get_index
+local texsetdimen = tex.setdimen
+
+local values = tokens.values
+local none_code = values.none
+local integer_code = values.integer
+local cardinal_code = values.cardinal
+local dimension_code = values.dimension
+local skip_code = values.skip
+local boolean_code = values.boolean
+local float_code = values.float
+
+local context = context
+
+-- variables --
local floats = { }
local integers = { }
local cardinals = { }
local numbers = { }
--- variables --
-
-interfaces.implement {
+implement {
name = "luafloat",
public = true,
value = true,
@@ -59,7 +66,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "luainteger",
public = true,
value = true,
@@ -73,7 +80,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "luacount",
public = true,
value = true,
@@ -87,7 +94,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "luadimen",
public = true,
value = true,
@@ -101,7 +108,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "luacardinal",
public = true,
value = true,
@@ -115,7 +122,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "luanumber",
public = true,
value = true,
@@ -130,7 +137,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "luarandom",
public = true,
value = true,
@@ -159,7 +166,7 @@ interfaces.arrays = arrays
local newindex = lua.newindex
-interfaces.implement {
+implement {
name = "newarray",
public = true,
protected = true,
@@ -220,7 +227,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "arrayvalue",
public = true,
value = true,
@@ -252,7 +259,7 @@ interfaces.implement {
}
-interfaces.implement {
+implement {
name = "arrayequals",
public = true,
value = true,
@@ -276,7 +283,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "arraycompare",
public = true,
value = true,
@@ -308,7 +315,7 @@ interfaces.implement {
end,
}
-interfaces.implement {
+implement {
name = "showarray",
public = true,
protected = true,
@@ -334,7 +341,7 @@ end)
table.makeweak(cache)
-interfaces.implement {
+implement {
name = "luaexpression",
public = true,
actions = function()
@@ -367,7 +374,7 @@ interfaces.implement {
local dimenfactors = number.dimenfactors
-interfaces.implement {
+implement {
name = "nodimen",
public = true,
value = true,
@@ -397,3 +404,206 @@ interfaces.implement {
end
end,
}
+
+-- experimental:
+
+local grouped = { }
+local slots = { }
+local nofslots = 0
+local nofgrouped = 0
+
+local getdata = tokens.getdata
+local setdata = tokens.setdata
+
+local report = logs.reporter("lua table")
+
+----- ctxsprint = context.sprint
+
+-- we could have an extra one that collects all end of grouped actions
+-- so that we dispose more in one go but it doesn's pay off
+
+local function newluatable(name,mt,dispose)
+ local g = { }
+ local t = slots[nofslots]
+ slots[nofslots] = false
+ nofslots = nofslots - 1
+ if not t then
+ nofgrouped = nofgrouped + 1
+ t = nofgrouped
+ end
+ if mt then
+ mt = getdata(name)
+ if mt then
+ mt = grouped[mt]
+ if mt then
+ setmetatableindex(g,mt)
+ end
+ end
+ end
+ grouped[t] = g
+ setdata(name,t)
+ -- This is the slow part. Doing this at the TeX end saved 10% runtime. I'll
+ -- think of something that we can set it at the Lua end.
+ if dispose then
+ ctxsprint("\\atendofgrouped{\\disposeluatable\\" .. name .. "}")
+ end
+end
+
+local function disposeluatable(name)
+ local t = getdata(name)
+ local g = grouped[t]
+ if g then
+ grouped[t] = false
+ nofslots = nofslots + 1
+ slots[nofslots] = t
+ end
+end
+
+local function setluatable(name,kv)
+ local t = getdata(name)
+ local g = grouped[t]
+ if g and kv then
+ for k, v in next, kv do
+ g[k] = v
+ end
+ end
+end
+
+local function getfromluatable(name,k)
+ local t = getdata(name)
+ local g = grouped[t]
+ if g then
+ local v = g[k]
+ if v then
+ context(v)
+ else
+ local n = tonumber(k)
+ if n then
+ local v = g[n]
+ if v then
+ context(v)
+ end
+ end
+ end
+ end
+end
+
+local function idxfromluatable(name,k)
+ local t = getdata(name)
+ local g = grouped[t]
+ if g then
+ local v = g[k]
+ if v then
+ context(v)
+ end
+ end
+end
+
+local function getluatable(name,k)
+ local t = getdata(name)
+ local g = grouped[t]
+ if g then
+ return g
+ end
+end
+
+local function inspectluatable(name)
+ local t = getdata(name)
+ local g = grouped[t]
+ if g then
+ report("%s", serialize(g,'[grouped slot ' .. t .. ']'))
+ end
+end
+
+local function showluatables()
+ report("nofgrouped %i, nofslots %i",nofgrouped,nofslots)
+ for t=1,nofgrouped do
+ local g = grouped[t]
+ if g then
+ report("%s", serialize(g,'[grouped slot ' .. t .. ']'))
+ end
+ end
+end
+
+implement {
+ name = "newluatable",
+ protected = true,
+ -- public = true,
+ arguments = { "csname" },
+ actions = newluatable,
+}
+
+implement {
+ name = "useluatable",
+ protected = true,
+ -- public = true,
+ arguments = { "csname", true },
+ actions = newluatable,
+}
+
+implement {
+ name = "disposeluatable",
+ protected = true,
+ public = true,
+ arguments = { "csname" },
+ actions = disposeluatable,
+}
+
+implement {
+ name = "inspectluatable",
+ protected = true,
+ public = true,
+ arguments = { "csname" },
+ actions = inspectluatable,
+}
+
+implement {
+ name = "showluatables",
+ protected = true,
+ public = true,
+ actions = showluatables,
+}
+
+implement {
+ name = "setluatable",
+ protected = true,
+ public = true,
+ arguments = { "csname", "argument" },
+ actions = function(name,data)
+ data = load("return {" .. data .. "}")
+ if data then
+ data = data()
+ if data then
+ setluatable(name,data)
+ end
+ end
+ end
+}
+
+implement {
+ name = "getfromluatable",
+ protected = false,
+ public = true,
+ arguments = { "csname", "argument" },
+ actions = getfromluatable,
+}
+
+implement {
+ name = "idxfromluatable",
+ protected = false,
+ public = true,
+ arguments = { "csname", "integer" },
+ actions = idxfromluatable,
+}
+
+context.luatables = {
+ new = function(name) newluatable(name,false,true) end,
+ use = function(name) useluatable(name,true, true) end,
+ dispose = disposeluatable,
+ set = setluatable,
+ get = getluatable,
+ getfrom = getfromluatable,
+ idxfrom = idxfromluatable,
+ inspect = inspectluatable,
+ show = showluatables,
+}
diff --git a/tex/context/base/mkiv/colo-imp-rgb.mkiv b/tex/context/base/mkiv/colo-imp-rgb.mkiv
index 85122cb44..ab11ae996 100644
--- a/tex/context/base/mkiv/colo-imp-rgb.mkiv
+++ b/tex/context/base/mkiv/colo-imp-rgb.mkiv
@@ -35,12 +35,19 @@
% adapted per 2011.10.28
-\definecolor [lightred] [r=1, g=0, b=0]
-\definecolor [lightgreen] [r=0, g=1, b=0]
-\definecolor [lightblue] [r=0, g=0, b=1]
-\definecolor [lightcyan] [r=0, g=1, b=1]
-\definecolor [lightmagenta] [r=1, g=0, b=1]
-\definecolor [lightyellow] [r=1, g=1, b=0]
+% \definecolor [lightred] [r=1, g=0, b=0]
+% \definecolor [lightgreen] [r=0, g=1, b=0]
+% \definecolor [lightblue] [r=0, g=0, b=1]
+% \definecolor [lightcyan] [r=0, g=1, b=1]
+% \definecolor [lightmagenta] [r=1, g=0, b=1]
+% \definecolor [lightyellow] [r=1, g=1, b=0]
+
+\definecolor [lightred] [r=1, g=0.5, b=0.5] % [.5(red,white)]
+\definecolor [lightgreen] [r=0.5, g=1, b=0.5] % [.5(green,white)]
+\definecolor [lightblue] [r=0.5, g=0.5, b=1] % [.5(blue,white)]
+\definecolor [lightcyan] [r=0.5, g=1, b=1] % [.5(cyan,white)]
+\definecolor [lightmagenta] [r=1, g=0.5, b=1] % [.5(magenta,white)]
+\definecolor [lightyellow] [r=1, g=1, b=0.5] % [.5(yellow,white)]
\definecolor [middlered] [r=.8, g=0, b=0]
\definecolor [middlegreen] [r=0, g=.8, b=0]
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index a0e290ba2..269c8d98f 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{2020.05.25 23:36}
+\newcontextversion{2020.06.09 18:53}
%D This file is loaded at runtime, thereby providing an excellent place for
%D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context-performance.tex b/tex/context/base/mkiv/context-performance.tex
index dd3768664..8b6ef11b2 100644
--- a/tex/context/base/mkiv/context-performance.tex
+++ b/tex/context/base/mkiv/context-performance.tex
@@ -1,5 +1,3 @@
-% language=uk
-
\usemodule[art-01,abr-01]
\starttext
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 7a8bc7827..a33d7b1ed 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -45,7 +45,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2020.05.25 23:36}
+\edef\contextversion{2020.06.09 18:53}
\edef\contextkind {beta}
%D Kind of special:
diff --git a/tex/context/base/mkiv/context.mkxl b/tex/context/base/mkiv/context.mkxl
index 76352fe98..eefe2f97b 100644
--- a/tex/context/base/mkiv/context.mkxl
+++ b/tex/context/base/mkiv/context.mkxl
@@ -29,7 +29,7 @@
%D {YYYY.MM.DD HH:MM} format.
\edef\contextformat {\jobname}
-\edef\contextversion{2020.05.25 23:36}
+\edef\contextversion{2020.06.09 18:53}
\edef\contextkind {beta}
%D Kind of special:
@@ -142,7 +142,7 @@
\loadmarkfile{mult-chk}
\loadmkvifile{mult-dim}
-\loadmarkfile{cldf-int} % interface
+\loadmkxlfile{cldf-int} % interface
\loadmarkfile{trac-ctx} % maybe move up
diff --git a/tex/context/base/mkiv/core-env.lua b/tex/context/base/mkiv/core-env.lua
index 50759dd19..c496a5a8c 100644
--- a/tex/context/base/mkiv/core-env.lua
+++ b/tex/context/base/mkiv/core-env.lua
@@ -47,12 +47,13 @@ local cache = tokens.cache
local iftrue = cache["iftrue"].mode
-local dimencode = cache["scratchdimen"] .command
-local countcode = cache["scratchcounter"] .command
-local tokencode = cache["scratchtoken"] .command
-local skipcode = cache["scratchskip"] .command
-local muskipcode = cache["scratchmuskip"] .command
------ attributecode = cache["scratchattribute"].command
+local dimencode = cache["scratchdimen"] .command -- tokens.commands.assign_dimen
+local countcode = cache["scratchcounter"] .command -- tokens.commands.assign_int
+local tokencode = cache["scratchtoken"] .command -- tokens.commands.assign_toks
+local skipcode = cache["scratchskip"] .command -- tokens.commands.assign_glue
+local muskipcode = cache["scratchmuskip"] .command -- tokens.commands.assign_mu_glue
+----- attributecode = cache["scratchattribute"].command -- tokens.commands.assign_attr
+local conditioncode = cache["iftrue"] .command -- tokens.commands.if_test
local types = {
[dimencode] = "dimen",
@@ -61,6 +62,7 @@ local types = {
[skipcode] = "skip",
[muskipcode] = "muskip",
-- [attributecode] = "attribute",
+ [conditioncode] = "condition"
}
setmetatableindex(texmodes, function(t,k)
@@ -123,6 +125,30 @@ setmetatablenewindex(texifs, function(t,k)
-- just ignore
end)
+if CONTEXTLMTXMODE > 0 then
+
+ iftrue = cache["iftrue"].index
+
+ -- if we really need performance we can have a dedicated cache for each
+ -- kind of variable
+
+ setmetatableindex(texconstants, function(t,k)
+ return cache[k].command == countcode and texgetcount(k) or 0
+ end)
+
+ setmetatableindex(texconditionals, function(t,k) -- 0 == true
+ return cache[k].command == countcode and texgetcount(k) == 0
+ end)
+
+ table.setmetatableindex(texifs, function(t,k)
+ local c = cache[k]
+ print(k)
+ inspect(c)
+ return c.command == conditioncode and c.index == iftrue
+ end)
+
+end
+
tex.isdefined = isdefined
function tex.isdimen(name)
diff --git a/tex/context/base/mkiv/core-lmt.mkxl b/tex/context/base/mkiv/core-lmt.mkxl
index 75a791a50..7fb38e830 100644
--- a/tex/context/base/mkiv/core-lmt.mkxl
+++ b/tex/context/base/mkiv/core-lmt.mkxl
@@ -13,14 +13,11 @@
\writestatus{loading}{ConTeXt System Macros / Primitives}
-%D This is offered temporarily because in the end we don't expect u sers to use the
-%D low level direction directives directly.
-
\registerctxluafile{core-lmt}{}
\unprotect
-% nothing yet
+% nothing here
\protect \endinput
diff --git a/tex/context/base/mkiv/export-example.css b/tex/context/base/mkiv/export-example.css
index 096408ee1..7cfd7f291 100644
--- a/tex/context/base/mkiv/export-example.css
+++ b/tex/context/base/mkiv/export-example.css
@@ -479,8 +479,9 @@ context|div.verbatim {
font-family : "DejaVu Sans Mono", "Lucida Console", monospace ;
}
-/* lines : display */
-/* line : mixed */
+/* lines : display */
+/* line : mixed */
+/* linenumber : inline */
lines,
context|div.lines {
@@ -501,6 +502,15 @@ context|div.line {
white-space : pre-wrap ;
}
+linenumber,
+context|div.linenumber {
+ display : inline-block ;
+ margin-right : 1em ;
+ width : 3em ;
+ text-align : left ;
+ font-family : "DejaVu Sans Mono", "Lucida Console", monospace ;
+}
+
/* synonym : inline */
/* sorting : inline */
diff --git a/tex/context/base/mkiv/export-example.tex b/tex/context/base/mkiv/export-example.tex
index 32cb79c5e..9ef414422 100644
--- a/tex/context/base/mkiv/export-example.tex
+++ b/tex/context/base/mkiv/export-example.tex
@@ -1,5 +1,3 @@
-% language=uk
-
\usemodule[abr-01]
\setupexport
diff --git a/tex/context/base/mkiv/font-fil.mklx b/tex/context/base/mkiv/font-fil.mklx
index 2b8224dfe..65cd64428 100644
--- a/tex/context/base/mkiv/font-fil.mklx
+++ b/tex/context/base/mkiv/font-fil.mklx
@@ -92,7 +92,7 @@
{\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file
\doifelsenextoptionalcs\font_basics_define_font_synonym_yes_opt\font_basics_define_font_synonym_yes_nil}
-\unexpanded\def\edefinefontsynonym[#name]#crap[#file]%
+\unexpanded\def\edefinefontsynonym[#name]#ignore[#file]%
{\edef\m_font_name{#name}%
\edef\m_font_file{#file}%
\ifempty\fontclass
@@ -101,33 +101,66 @@
\expandafter\font_basics_define_font_synonym_yes_expanded
\fi}
-\unexpanded\def\font_basics_define_font_synonym_nop_expanded#crap[#spec]%
+\unexpanded\def\font_basics_define_font_synonym_nop_expanded#ignore[#spec]%
{\expandafter\let\csname\??fontfile\m_font_name\endcsname\m_font_file
- \normalexpanded{\font_basics_define_font_synonym_nop_opt[#1]}}
+ \normalexpanded{\font_basics_define_font_synonym_nop_opt[#spec]}}
-\unexpanded\def\font_basics_define_font_synonym_yes_expanded#crap[#spec]%
+\unexpanded\def\font_basics_define_font_synonym_yes_expanded#ignore[#spec]%
{\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file
\normalexpanded{\font_basics_define_font_synonym_yes_opt[#spec]}}
+% \unexpanded\def\font_basics_define_font_synonym_nop_opt[#specification]%
+% {\let\p_features \undefined
+% \let\p_fallbacks \undefined
+% \let\p_goodies \undefined
+% \let\p_designsize\undefined
+% \expandafter\font_basics_get_font_parameter_nop#specification,]=,}
+%
+% \unexpanded\def\font_basics_define_font_synonym_yes_opt[#specification]%
+% {\let\p_features \undefined
+% \let\p_fallbacks \undefined
+% \let\p_goodies \undefined
+% \let\p_designsize\undefined
+% \expandafter\font_basics_get_font_parameter_yes#specification,]=,}
+%
+% % todo: check if we can use \edef but then we need to protect \mathsizesuffix .. in fact that
+% % can be default then: \let\mathsizesuffix\relax .. i need to play with it first
+%
+% \def\font_basics_get_font_parameter_nop#key=#value,%
+% {\if]#key%
+% \font_basics_get_font_parameter_nop_finish
+% \else
+% \expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix
+% \expandafter\font_basics_get_font_parameter_nop
+% \fi}
+%
+% \def\font_basics_get_font_parameter_yes#key=#value,%
+% {\if]#key%
+% \font_basics_get_font_parameter_yes_finish
+% \else
+% \expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix
+% \expandafter\font_basics_get_font_parameter_yes
+% \fi}
+
\unexpanded\def\font_basics_define_font_synonym_nop_opt[#specification]%
{\let\p_features \undefined
\let\p_fallbacks \undefined
\let\p_goodies \undefined
\let\p_designsize\undefined
- \expandafter\font_basics_get_font_parameter_nop#specification,]=,}
+ \expandafter\font_basics_get_font_parameter_nop#specification,\ignorearguments}
\unexpanded\def\font_basics_define_font_synonym_yes_opt[#specification]%
{\let\p_features \undefined
\let\p_fallbacks \undefined
\let\p_goodies \undefined
\let\p_designsize\undefined
- \expandafter\font_basics_get_font_parameter_yes#specification,]=,}
+ \expandafter\font_basics_get_font_parameter_yes#specification,\ignorearguments}
% todo: check if we can use \edef but then we need to protect \mathsizesuffix .. in fact that
% can be default then: \let\mathsizesuffix\relax .. i need to play with it first
\def\font_basics_get_font_parameter_nop#key=#value,%
- {\if]#key%
+ {\ifarguments
\font_basics_get_font_parameter_nop_finish
\else
\expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix
@@ -135,7 +168,7 @@
\fi}
\def\font_basics_get_font_parameter_yes#key=#value,%
- {\if]#key%
+ {\ifarguments
\font_basics_get_font_parameter_yes_finish
\else
\expandafter\normaldef\csname p_#key\endcsname{#value}% % no edef as we need to keep \mathsizesuffix
@@ -202,32 +235,66 @@
% todo: replace * by ... less messy with features
+% \def\truefontname#name%
+% {\expandafter\font_helpers_true_fontname#name*\empty*\relax}
+%
+% \def\font_helpers_true_fontname#name*#first#rest*#crap\relax
+% {\ifcsname\??fontfile\fontclass#name\endcsname
+% \ifempty#first%
+% \expandafter\truefontname\lastnamedcs
+% \else
+% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
+% \fi
+% \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname
+% \ifempty#first%
+% \expandafter\truefontname\lastnamedcs
+% \else
+% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
+% \fi
+% \orelse\ifcsname\??fontfile#name\endcsname
+% \ifempty#first%
+% \expandafter\truefontname\lastnamedcs
+% \else
+% \expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
+% \fi
+% \else
+% #name\ifempty#first\else*#first#rest\fi
+% \fi}
+%
+% \def\font_helpers_true_fontname_check#name%
+% {\expandafter\font_helpers_true_fontname_check_indeed#name*\relax}
+%
+% \def\font_helpers_true_fontname_check_indeed#name*#crap\relax
+% {\ifcsname\??fontfile\fontclass#name\endcsname
+% \expandafter\font_helpers_true_fontname_check\lastnamedcs
+% \orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname
+% \expandafter\font_helpers_true_fontname_check\lastnamedcs
+% \orelse\ifcsname\??fontfile#name\endcsname
+% \expandafter\font_helpers_true_fontname_check\lastnamedcs
+% \else
+% #name%
+% \fi}
+
\def\truefontname#name%
{\expandafter\font_helpers_true_fontname#name*\empty*\relax}
-\def\font_helpers_true_fontname#name*#first#rest*#crap\relax
+\def\font_helpers_true_fontname#name*#first#rest*#ignore\relax
{\ifcsname\??fontfile\fontclass#name\endcsname
\ifempty#first%
- %\expandafter\truefontname\csname\??fontfile\fontclass#name\endcsname
\expandafter\truefontname\lastnamedcs
\else
- %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname*#first#rest%
\expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
\fi
\orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname
\ifempty#first%
- %\expandafter\truefontname\csname\??fontfile\defaultfontclass#name\endcsname
\expandafter\truefontname\lastnamedcs
\else
- %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname*#first#rest%
\expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
\fi
\orelse\ifcsname\??fontfile#name\endcsname
\ifempty#first%
- %\expandafter\truefontname\csname\??fontfile#name\endcsname
\expandafter\truefontname\lastnamedcs
\else
- %\expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname*#first#rest%
\expandafter\font_helpers_true_fontname_check\lastnamedcs*#first#rest%
\fi
\else
@@ -237,15 +304,12 @@
\def\font_helpers_true_fontname_check#name%
{\expandafter\font_helpers_true_fontname_check_indeed#name*\relax}
-\def\font_helpers_true_fontname_check_indeed#name*#crap\relax
+\def\font_helpers_true_fontname_check_indeed#name*#ignore\relax
{\ifcsname\??fontfile\fontclass#name\endcsname
- %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\fontclass#name\endcsname
\expandafter\font_helpers_true_fontname_check\lastnamedcs
\orelse\ifcsname\??fontfile\defaultfontclass#name\endcsname
- %\expandafter\font_helpers_true_fontname_check\csname\??fontfile\defaultfontclass#name\endcsname
\expandafter\font_helpers_true_fontname_check\lastnamedcs
\orelse\ifcsname\??fontfile#name\endcsname
- %\expandafter\font_helpers_true_fontname_check\csname\??fontfile#name\endcsname
\expandafter\font_helpers_true_fontname_check\lastnamedcs
\else
#name%
@@ -271,10 +335,8 @@
\def\expandfontsynonym#command#name% one level expansion
{\ifcsname\??fontfile\fontclass#name\endcsname
- %\expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\fontclass#name\endcsname}%
\expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}%
\orelse\ifcsname\??fontfile\defaultfontclass#2\endcsname
- %\expandafter\normaldef\expandafter#command\expandafter{\csname\??fontfile\defaultfontclass#name\endcsname}%
\expandafter\normaldef\expandafter#command\expandafter{\lastnamedcs}%
\fi}
diff --git a/tex/context/base/mkiv/font-fil.mkvi b/tex/context/base/mkiv/font-fil.mkvi
index 8622e733f..f70be13ee 100644
--- a/tex/context/base/mkiv/font-fil.mkvi
+++ b/tex/context/base/mkiv/font-fil.mkvi
@@ -103,7 +103,7 @@
\unexpanded\def\font_basics_define_font_synonym_nop_expanded#crap[#spec]%
{\expandafter\let\csname\??fontfile\m_font_name\endcsname\m_font_file
- \normalexpanded{\font_basics_define_font_synonym_nop_opt[#1]}}
+ \normalexpanded{\font_basics_define_font_synonym_nop_opt[#spec]}}
\unexpanded\def\font_basics_define_font_synonym_yes_expanded#crap[#spec]%
{\expandafter\let\csname\??fontfile\fontclass\m_font_name\endcsname\m_font_file
diff --git a/tex/context/base/mkiv/font-mat.mklx b/tex/context/base/mkiv/font-mat.mklx
index d08a2ce87..da576bf9a 100644
--- a/tex/context/base/mkiv/font-mat.mklx
+++ b/tex/context/base/mkiv/font-mat.mklx
@@ -386,25 +386,13 @@
\font_helpers_synchronize_math_family_mr
\fi}
-\ifdefined \fontid % we need to keep this test for a while
- \appendtoks
- \ifnum\fontid\textfont\zerocount=\fontid\textfont\plusthree
- \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_partial_bold_strategy
- \else
- \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_full_bold_strategy
- \fi
- \to \t_font_math_strategies
-\else
- \appendtoks
- \edef\currentmathfontmr{\fontname\textfont\zerocount}%
- \edef\currentmathfontmb{\fontname\textfont\plusthree}%
- \ifx\currentmathfontmr\currentmathfontmb
- \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_partial_bold_strategy
- \else
- \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_full_bold_strategy
- \fi
- \to \t_font_math_strategies
-\fi
+\appendtoks
+ \ifnum\fontid\textfont\zerocount=\fontid\textfont\plusthree
+ \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_partial_bold_strategy
+ \else
+ \letvalue{\??fontmathstoredstrategy\fontclass}\font_helpers_set_math_full_bold_strategy
+ \fi
+\to \t_font_math_strategies
%def\font_helpers_synchronize_math_bold_strategy{\csname\??fontmathstoredstrategy\fontclass\endcsname}
\def\font_helpers_synchronize_math_bold_strategy{\begincsname\??fontmathstoredstrategy\fontclass\endcsname}
diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua
index 3b6ea6a72..b612e85e7 100644
--- a/tex/context/base/mkiv/font-ots.lua
+++ b/tex/context/base/mkiv/font-ots.lua
@@ -2056,6 +2056,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
local sweepnode = sweepnode
local sweeptype = sweeptype
local sweepoverflow = false
+ local checkdisc = getprev(head)
local keepdisc = not sweepnode
local lookaheaddisc = nil
local backtrackdisc = nil
@@ -2089,6 +2090,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
sweepnode = current
current = getnext(current)
else
+ -- we can use an iterator
while replace and i <= l do
if getid(replace) == glyph_code then
i = i + 1
@@ -2189,7 +2191,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
local current = prev
local i = f
local t = sweeptype == "pre" or sweeptype == "replace"
- if not current and t and current == checkdisk then
+ if not current and t and current == checkdisc then
current = getprev(sweepnode)
end
while current and i > 1 do -- missing getprev added / moved outside
@@ -2218,7 +2220,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
end
end
current = getprev(current)
- if t and current == checkdisk then
+ if t and current == checkdisc then
current = getprev(sweepnode)
end
end
@@ -2443,6 +2445,10 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s
local current = start
local last = start
+ if s == 1 then
+ goto next
+ end
+
-- current match
if l > f then
@@ -2512,10 +2518,9 @@ local function handle_contextchain(head,start,dataset,sequence,contexts,rlmode,s
break
end
end
- -- commented, for Kai to check
- -- if n <= l then
- -- notmatchpre[last] = true
- -- end
+ if n <= l then
+ notmatchpre[last] = true
+ end
else
notmatchpre[last] = true
end
diff --git a/tex/context/base/mkiv/grph-trf.mkiv b/tex/context/base/mkiv/grph-trf.mkiv
index 522dd08d6..d6a6acd78 100644
--- a/tex/context/base/mkiv/grph-trf.mkiv
+++ b/tex/context/base/mkiv/grph-trf.mkiv
@@ -969,7 +969,7 @@
\d_grph_rotate_used_height\ht\nextbox
%
\clf_analyzerotate % rather accurate
- \numexpr\p_rotation_rotation\relax
+ \p_rotation_rotation\space
\d_grph_rotate_width
\d_grph_rotate_height
\d_grph_rotate_depth
diff --git a/tex/context/base/mkiv/lpdf-lmt.lua b/tex/context/base/mkiv/lpdf-lmt.lua
index 43c4c1059..90e1fcea2 100644
--- a/tex/context/base/mkiv/lpdf-lmt.lua
+++ b/tex/context/base/mkiv/lpdf-lmt.lua
@@ -2713,7 +2713,8 @@ do
-- pdf.setforcefile(false) -- default anyway
-- end
--
- pdfname = file.addsuffix(tex.jobname,"pdf")
+ -- pdfname = file.addsuffix(tex.jobname,"pdf")
+ pdfname = tex.jobname .. ".pdf"
openfile(pdfname)
--
luatex.registerstopactions(1,function()
diff --git a/tex/context/base/mkiv/lpdf-pde.lua b/tex/context/base/mkiv/lpdf-pde.lua
index ec1064a0d..1c80eb5b2 100644
--- a/tex/context/base/mkiv/lpdf-pde.lua
+++ b/tex/context/base/mkiv/lpdf-pde.lua
@@ -48,6 +48,7 @@ local abs = math.abs
local concat, swapped, sortedhash, sortedkeys = table.concat, table.swapped, table.sortedhash, table.sortedkeys
local utfchar = string.char
local setmetatableindex = table.setmetatableindex
+local ioopen = io.open
local lpegmatch, lpegpatterns = lpeg.match, lpeg.patterns
local P, C, S, R, Ct, Cc, V, Carg, Cs, Cf, Cg = lpeg.P, lpeg.C, lpeg.S, lpeg.R, lpeg.Ct, lpeg.Cc, lpeg.V, lpeg.Carg, lpeg.Cs, lpeg.Cf, lpeg.Cg
@@ -67,6 +68,7 @@ local lpdf_epdf = { }
lpdf.epdf = lpdf_epdf
local pdfopen = pdfe.open
+local pdfopenfile = pdfe.openfile
local pdfnew = pdfe.new
local pdfclose = pdfe.close
@@ -440,8 +442,11 @@ function lpdf_epdf.load(filename,userpassword,ownerpassword,fromstring)
if not document then
statistics.starttiming(lpdf_epdf)
local __data__
+ local __file__
if fromstring then
__data__ = pdfnew(filename,#filename)
+ elseif pdfopenfile then
+ __data__ = pdfopenfile(ioopen(filename,"rb"))
else
__data__ = pdfopen(filename)
end
diff --git a/tex/context/base/mkiv/luat-mac.lua b/tex/context/base/mkiv/luat-mac.lua
index e6789a233..c754f602c 100644
--- a/tex/context/base/mkiv/luat-mac.lua
+++ b/tex/context/base/mkiv/luat-mac.lua
@@ -30,36 +30,89 @@ local report_macros = logs.reporter("interface","macros")
local stack, top, n, hashes = { }, nil, 0, { }
+-- local function set(s)
+-- if top then
+-- n = n + 1
+-- if n > 9 then
+-- report_macros("number of arguments > 9, ignoring %s",s)
+-- else
+-- local ns = #stack
+-- local h = hashes[ns]
+-- if not h then
+-- h = rep("#",2^(ns-1))
+-- hashes[ns] = h
+-- end
+-- if s == "ignore" then
+-- top[s] = ""
+-- return h .. "0"
+-- else
+-- local m = h .. n
+-- top[s] = m
+-- return m
+-- end
+-- end
+-- end
+-- end
+
+-- local function get(s)
+-- if s == "ignore" then
+-- return ""
+-- else
+-- if not top then
+-- report_macros("keeping #%s, no stack",s)
+-- return "#" .. s -- can be lua
+-- end
+-- local m = top[s]
+-- if m then
+-- return m
+-- else
+-- report_macros("keeping #%s, not on stack",s)
+-- return "#" .. s -- quite likely an error
+-- end
+-- end
+-- end
+
local function set(s)
if top then
- n = n + 1
- if n > 9 then
- report_macros("number of arguments > 9, ignoring %s",s)
+ local ns = #stack
+ local h = hashes[ns]
+ if not h then
+ h = rep("#",2^(ns-1))
+ hashes[ns] = h
+ end
+ if s == "ignore" then
+ return h .. "-"
else
- local ns = #stack
- local h = hashes[ns]
- if not h then
- h = rep("#",2^(ns-1))
- hashes[ns] = h
+ n = n + 1
+ if n > 9 then
+ report_macros("number of arguments > 9, ignoring %s",s)
+ elseif s == "discard" then
+ top[s] = ""
+ return h .. "0"
+ else
+ local m = h .. n
+ top[s] = m
+ return m
end
- local m = h .. n
- top[s] = m
- return m
end
end
end
local function get(s)
- if not top then
- report_macros("keeping #%s, no stack",s)
- return "#" .. s -- can be lua
- end
- local m = top[s]
- if m then
- return m
+ if s == "ignore" or s == "discard" then
+ return ""
else
- report_macros("keeping #%s, not on stack",s)
- return "#" .. s -- quite likely an error
+ if not top then
+ report_macros("keeping #%s, no stack",s)
+ return "#" .. s -- can be lua
+ end
+ local m = top[s]
+ if m then
+ return m
+ else
+ report_macros("keeping #%s, not on stack",s)
+ return "#" .. s -- quite likely an error
+ end
end
end
@@ -336,6 +389,8 @@ end
-- ]]))
-- print(macros.preprocessed([[\checked \def \bla #bla{bla#{bla}}]]))
+-- print(macros.preprocessed([[\checked \def \bla #bla#discard#foo{bla#{bla}+#ignore+bla#foo}]]))
+-- print(macros.preprocessed([[\checked \def \bla #bla#ignore#foo{bla#{bla}+#ignore+bla#foo}]]))
-- print(macros.preprocessed([[\def\bla#bla{#{bla}bla}]]))
-- print(macros.preprocessed([[\def\blä#{blá}{blà:#{blá}}]]))
-- print(macros.preprocessed([[\def\blä#bla{blà:#bla}]]))
diff --git a/tex/context/base/mkiv/math-ini.mkxl b/tex/context/base/mkiv/math-ini.mkxl
index 9cc3dfe1f..41b4e5d53 100644
--- a/tex/context/base/mkiv/math-ini.mkxl
+++ b/tex/context/base/mkiv/math-ini.mkxl
@@ -427,10 +427,8 @@
\unexpanded\def\math_set_font_style_alternate#1%
{\ifcsname\??mathstylealternative\fontclass:#1\endcsname
- %\expandafter\math_set_font_alternate\csname\??mathstylealternate\fontclass:#1\endcsname
\expandafter\math_set_font_alternate\lastnamedcs
\orelse\ifcsname\??mathstylealternative#1\endcsname
- %\expandafter\math_set_font_alternate\csname\??mathstylealternate#1\endcsname
\expandafter\math_set_font_alternate\lastnamedcs
\fi}
@@ -719,15 +717,15 @@
\unexpanded\def\math_strut_normal
{\vrule
- \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}%
\s!width \zeropoint
+ \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}%
\relax}
\unexpanded\def\math_strut_visual
{\hskip-.01\emwidth
\vrule
- \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}%
\s!width .02\emwidth
+ \normalexpanded{\math_strut_htdp{\mathstylefont\normalmathstyle}}%
\relax
\hskip-.01\emwidth}
diff --git a/tex/context/base/mkiv/math-rad.mkvi b/tex/context/base/mkiv/math-rad.mkvi
index c640e768e..c279c3526 100644
--- a/tex/context/base/mkiv/math-rad.mkvi
+++ b/tex/context/base/mkiv/math-rad.mkvi
@@ -26,12 +26,24 @@
% \def\rootradical{\Uroot \defaultmathfamily "221A } % can be done in char-def
% \def\surdradical{\Uradical \defaultmathfamily "221A } % can be done in char-def
-\def\root#1\of{\rootradical{#1}} % #2
+\unexpanded\def\root#1\of{\rootradical{#1}} % #2
\unexpanded\def\sqrt{\doifelsenextoptionalcs\rootwithdegree\rootwithoutdegree}
-\unexpanded\def\styledrootradical#1#2% so that \text works ok ... \rootradical behaves somewhat weird
- {\normalexpanded{\rootradical{\normalunexpanded{#1}}{\noexpand\triggermathstyle{\normalmathstyle}\normalunexpanded{#2}}}}
+\ifcase \contextlmtxmode
+
+ \unexpanded\def\styledrootradical#1#2% so that \text works ok ... \rootradical behaves somewhat weird
+ {\normalexpanded{\rootradical
+ {\normalunexpanded{#1}}%
+ {\noexpand\triggermathstyle{\number\normalmathstyle}%
+ \normalunexpanded{#2}}}}
+
+\else % experimental new keyword: (maybe keywords should come after the symbol)
+
+ \unexpanded\def\styledrootradical#1#2% so that \text works ok ... \rootradical behaves somewhat weird
+ {\Uroot style \normalmathstyle "0 "221A {#1}{#2}}
+
+\fi
\unexpanded\def\rootwithdegree[#1]{\rootradical{#1}}
\unexpanded\def\rootwithoutdegree {\rootradical {}}
diff --git a/tex/context/base/mkiv/mult-aux.mkxl b/tex/context/base/mkiv/mult-aux.mkxl
index e73b5ef45..74e717128 100644
--- a/tex/context/base/mkiv/mult-aux.mkxl
+++ b/tex/context/base/mkiv/mult-aux.mkxl
@@ -168,6 +168,10 @@
%D manual does less than 6000 assignments and the payoff starts around a tenfold of
%D that. But \unknown\ it's less tracing, so that's another benefit.
+%D Watch out: we accept that a \[k=v,,k=v] will generate a case where a key can become
+%D a comma and trigger a warning but we intercept that elsewhere. The alternative is
+%D to skip to the comma first which takes more time.
+
\let\m_mult_interfaces_namespace\empty
\def\mult_interfaces_get_parameters#1[#2%
@@ -201,8 +205,11 @@
\mult_interfaces_adef\m_mult_interfaces_namespace{#1}{#2}%
\fi}
-\def\mult_interfaces_get_parameters_item_error#0#0#0#4#5%
- {\mult_interfaces_get_parameters_error_indeed{#4}{#5}}
+% \def\mult_interfaces_get_parameters_item_error#0#0#0#4#5%
+% {\if,#5\else\mult_interfaces_get_parameters_error_indeed{#4}{#5}\fi}
+
+\def\mult_interfaces_get_parameters_item_error#-#-#-#1#2%
+ {\if,#2\else\mult_interfaces_get_parameters_error_indeed{#1}{#2}\fi}
\startinterface english
@@ -215,18 +222,27 @@
\expandafter\def\csname\m_mult_interfaces_namespace#1\endcsname{#2}%
\fi}
- \def\mult_interfaces_get_parameters_item_error#0\csname#2#3\endcsname#0%
- {\mult_interfaces_get_parameters_error_indeed{#2}{#3}}
+% \def\mult_interfaces_get_parameters_item_error#0\csname#2#3\endcsname#0%
+% {\if,#3\else\mult_interfaces_get_parameters_error_indeed{#2}{#3}\fi}
+
+ \def\mult_interfaces_get_parameters_item_error#-\csname#1#2\endcsname#-%
+ {\if,#2\else\mult_interfaces_get_parameters_error_indeed{#1}{#2}\fi}
\stopinterface
%D Used?
-\def\mult_check_for_assignment_indeed#0=#2#0^^^^0004%
- {\if#2^^^^0003\assignmentfalse\else\assignmenttrue\fi}
+% \def\mult_check_for_assignment_indeed#0=#2#0^^^^0004%
+% {\if#2^^^^0003\assignmentfalse\else\assignmenttrue\fi}
+%
+% \def\mult_check_for_assignment_indeed_begin_#0=#2#0^^^^0004%
+% {\if#2^^^^0003}
+
+\def\mult_check_for_assignment_indeed#-=#1#-^^^^0004%
+ {\if#1^^^^0003\assignmentfalse\else\assignmenttrue\fi}
-\def\mult_check_for_assignment_indeed_begin_#0=#2#0^^^^0004%
- {\if#2^^^^0003}
+\def\mult_check_for_assignment_indeed_begin_#-=#1#-^^^^0004%
+ {\if#1^^^^0003}
\def\mult_check_for_assignment#1%
{\expandafter\mult_check_for_assignment_indeed\detokenize{#1}=^^^^0003^^^^0003^^^^0004}
diff --git a/tex/context/base/mkiv/mult-ini.lua b/tex/context/base/mkiv/mult-ini.lua
index 0c8581281..3dc425953 100644
--- a/tex/context/base/mkiv/mult-ini.lua
+++ b/tex/context/base/mkiv/mult-ini.lua
@@ -454,16 +454,18 @@ implement {
local function showassignerror(namespace,key,line)
- local ns, instance = match(namespace,"^(%d+)[^%a]+(%a*)")
- if ns then
- namespace = corenamespaces[tonumber(ns)] or ns
- end
- -- injected in the stream for timing:
- if instance and instance ~= "" then
- context.writestatus("setup",formatters["error in line %a, namespace %a, instance %a, key %a"](line,namespace,instance,key))
- else
- context.writestatus("setup",formatters["error in line %a, namespace %a, key %a"](line,namespace,key))
- end
+ -- if key and key ~= "" and key ~= "," then
+ local ns, instance = match(namespace,"^(%d+)[^%a]+(%a*)")
+ if ns then
+ namespace = corenamespaces[tonumber(ns)] or ns
+ end
+ -- injected in the stream for timing:
+ if instance and instance ~= "" then
+ context.writestatus("setup",formatters["error in line %a, namespace %a, instance %a, key %a"](line,namespace,instance,key))
+ else
+ context.writestatus("setup",formatters["error in line %a, namespace %a, key %a"](line,namespace,key))
+ end
+ -- end
end
implement {
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index ec65d6a7c..58202fa1a 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -57,7 +57,8 @@ return {
"spacecatcode", "lettercatcode", "othercatcode", "activecatcode", "commentcatcode", "invalidcatcode",
--
"tabasciicode", "newlineasciicode", "formfeedasciicode", "endoflineasciicode", "endoffileasciicode",
- "spaceasciicode", "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode",
+ "commaasciicode", "spaceasciicode", "periodasciicode",
+ "hashasciicode", "dollarasciicode", "commentasciicode", "ampersandasciicode",
"colonasciicode", "backslashasciicode", "circumflexasciicode", "underscoreasciicode",
"leftbraceasciicode", "barasciicode", "rightbraceasciicode", "tildeasciicode", "delasciicode",
"leftparentasciicode", "rightparentasciicode",
diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua
index 91afcf524..e4ff584b4 100644
--- a/tex/context/base/mkiv/mult-prm.lua
+++ b/tex/context/base/mkiv/mult-prm.lua
@@ -271,8 +271,10 @@ return {
"etoksapp",
"etokspre",
"exceptionpenalty",
+ "expandafterpars",
"expandafterspaces",
"expanded",
+ "expandtoken",
"explicitdiscretionary",
"explicithyphenpenalty",
"firstvalidlanguage",
@@ -329,6 +331,7 @@ return {
"lastnodesubtype",
"leftmarginkern",
"letcharcode",
+ "letdatacode",
"letfrozen",
"letprotected",
"linedirection",
diff --git a/tex/context/base/mkiv/pack-rul.mkiv b/tex/context/base/mkiv/pack-rul.mkiv
index ba81a0956..393668c60 100644
--- a/tex/context/base/mkiv/pack-rul.mkiv
+++ b/tex/context/base/mkiv/pack-rul.mkiv
@@ -1900,7 +1900,7 @@
{\iffirstargument
\setupcurrentmathframed[#1]%
\fi
- \c_framed_mstyle\mathstyle
+ \c_framed_mstyle\normalmathstyle
\edef\m_framed_location{\mathframedparameter\c!location}%
\ifx\m_framed_location\v!mathematics
\let\normalstrut\pack_framed_math_pos
diff --git a/tex/context/base/mkiv/pack-rul.mkxl b/tex/context/base/mkiv/pack-rul.mkxl
index 4fef06ad0..6268aad3e 100644
--- a/tex/context/base/mkiv/pack-rul.mkxl
+++ b/tex/context/base/mkiv/pack-rul.mkxl
@@ -1949,7 +1949,7 @@
{\iffirstargument
\setupcurrentmathframed[#1]%
\fi
- \c_framed_mstyle\mathstyle
+ \c_framed_mstyle\normalmathstyle
\edef\m_framed_location{\mathframedparameter\c!location}%
\ifx\m_framed_location\v!mathematics
\let\normalstrut\pack_framed_math_pos
diff --git a/tex/context/base/mkiv/page-bck.mkiv b/tex/context/base/mkiv/page-bck.mkiv
index 1ec7cdbb8..1af681049 100644
--- a/tex/context/base/mkiv/page-bck.mkiv
+++ b/tex/context/base/mkiv/page-bck.mkiv
@@ -269,14 +269,14 @@
\def\page_backgrounds_set_boxes_b
{\ifconditional\c_page_backgrounds_new_left
% \showmessage\m!layouts8\empty
- \page_backgrounds_set_box\leftbackground % \conditionalfalse
+ \page_backgrounds_set_box\leftbackground
\global\setfalse\c_page_backgrounds_new_left
\fi}
\def\page_backgrounds_set_boxes_c
{\ifconditional\c_page_backgrounds_new_right
% \showmessage\m!layouts8\empty
- \page_backgrounds_set_box\rightbackground % \conditionaltrue
+ \page_backgrounds_set_box\rightbackground
\global\setfalse\c_page_backgrounds_new_right
\fi}
diff --git a/tex/context/base/mkiv/page-lin.mkvi b/tex/context/base/mkiv/page-lin.mkvi
index 6a03d12e4..4debcb68f 100644
--- a/tex/context/base/mkiv/page-lin.mkvi
+++ b/tex/context/base/mkiv/page-lin.mkvi
@@ -16,6 +16,9 @@
%
% to be redone (was experiment) .. can be hooked into margin code
% reshuffle arguments
+%
+% this is early luatex code, 2007 or even before that, and it shows ... we
+% have better tricks now
\writestatus{loading}{ConTeXt Core Macros / Line Numbering}
@@ -348,6 +351,7 @@
\def\page_lines_add_numbers_to_box#box#column#max#nesting%
{\bgroup
+ \strc_tags_enable_indeed
\b_page_lines_number #box\relax
\c_page_lines_column #column\relax
\c_page_lines_last_column#max\relax
@@ -459,24 +463,34 @@
% \def\dodollap{\hbox to \zeropoint{\normalhss\box\nextbox}\endgroup}
\def\page_line_handle_left#align#width#distance%
- {\llap
+ {\dostarttagged\t!linenumber\empty
+ \llap
{\page_lines_number_inject#align#width%
+ \dostarttagged\t!ignore\empty
\kern\dimexpr
#distance+\d_page_lines_distance
\ifconditional\c_page_lines_dir_left_to_right\else+\d_page_lines_line_width\fi
\relax
\the\everylinenumber
- \hss}}
+ \hss
+ \dostoptagged}%
+ \dostoptagged}
\def\page_line_handle_right#align#width#distance%
- {\rlap
- {\kern\dimexpr
+ {\dostarttagged\t!linenumber\empty
+ \rlap
+ {\dostarttagged\t!ignore\empty
+ \kern\dimexpr
#distance+\d_page_lines_distance
\ifconditional\c_page_lines_dir_left_to_right+\d_page_lines_line_width\fi
\relax
+ \dostoptagged
\page_lines_number_inject#align#width%
+ \dostarttagged\t!ignore\empty
\the\everylinenumber
- \hss}}
+ \hss
+ \dostoptagged}%
+ \dostoptagged}
\setuvalue{\??linenumberinghandler\v!left}%
{\page_line_handle_left\p_align\leftmarginwidth\leftmargindistance}
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index 3aa2579ce..e57661b9e 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index 713f812fa..271444c2d 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-tag.lua b/tex/context/base/mkiv/strc-tag.lua
index 88e0f108d..694f7bdf0 100644
--- a/tex/context/base/mkiv/strc-tag.lua
+++ b/tex/context/base/mkiv/strc-tag.lua
@@ -104,6 +104,7 @@ local properties = allocate { -- todo: more "record = true" to improve forma
lines = { pdf = "Code", nature = "display" },
line = { pdf = "Code", nature = "mixed" },
+ linenumber = { pdf = "Span", nature = "inline" },
synonym = { pdf = "Span", nature = "inline" },
sorting = { pdf = "Span", nature = "inline" },
@@ -362,7 +363,9 @@ function tags.start(tag,specification)
metadata = nil
end
local userdata = specification.userdata
- if userdata ~= "" and type(userdata) == "string" then
+ if userdata == "" then
+ specification.userdata = nil
+ elseif type(userdata) == "string" then
specification.userdata = settings_to_hash(userdata)
end
local detail = specification.detail
diff --git a/tex/context/base/mkiv/strc-tag.mkiv b/tex/context/base/mkiv/strc-tag.mkiv
index 83ee03090..ab532f0ef 100644
--- a/tex/context/base/mkiv/strc-tag.mkiv
+++ b/tex/context/base/mkiv/strc-tag.mkiv
@@ -61,6 +61,7 @@
\def\t!lines {lines} % Code
\def\t!line {line} % Code
+\def\t!linenumber {linenumber} % Span
\def\t!sorting {sorting} % Span
\def\t!synonym {synonym} % Span
@@ -329,11 +330,8 @@
\chardef\strc_tags_placeholder_char\zerocount % "FFFC
-\unexpanded\def\strc_tags_enable
- {% once enable one is toast
- \global\settrue\c_strc_tags_enabled
- % and gets:
- \let\dotaggedplaceholder \strc_tags_placeholder_char
+\unexpanded\def\strc_tags_enable_indeed
+ {\let\dotaggedplaceholder \strc_tags_placeholder_char
\let\dostarttagged \strc_tags_enabled_start_detail
\let\dostarttaggednodetail\strc_tags_enabled_start_no_detail
\let\dostarttaggedchained \strc_tags_enabled_start_chained
@@ -341,6 +339,12 @@
\let\dostartignoretagging \strc_tags_start_yes_ignore
\let\dostopignoretagging \strc_tags_stop_yes_ignore}
+\unexpanded\def\strc_tags_enable
+ {% once enable one is toast
+ \global\settrue\c_strc_tags_enabled
+ % and gets:
+ \strc_tags_enable_indeed}
+
\unexpanded\def\strc_tags_disable
{\ifconditional\c_strc_tags_enabled
% so now all are artifacts
diff --git a/tex/context/base/mkiv/supp-box.lua b/tex/context/base/mkiv/supp-box.lua
index 8c615b528..353562344 100644
--- a/tex/context/base/mkiv/supp-box.lua
+++ b/tex/context/base/mkiv/supp-box.lua
@@ -28,6 +28,11 @@ local vlist_code = nodecodes.vlist
local glue_code = nodecodes.glue
local penalty_code = nodecodes.penalty
local glyph_code = nodecodes.glyph
+local localpar_code = nodecodes.localpar
+
+local indent_code = nodes.listcodes.indent
+
+local hmode_code = tex.modelevels.horizontal
local nuts = nodes.nuts
local tonut = nuts.tonut
@@ -39,6 +44,7 @@ local getprev = nuts.getprev
local getboth = nuts.getboth
local getdisc = nuts.getdisc
local getid = nuts.getid
+local getsubtype = nuts.getsubtype
local getlist = nuts.getlist
local getattribute = nuts.getattribute
local getbox = nuts.getbox
@@ -89,6 +95,7 @@ local setlistcolor = nodes.tracers.colors.setlist
local texget = tex.get
local texgetbox = tex.getbox
local texsetdimen = tex.setdimen
+local texgetnest = tex.getnest
local function hyphenatedlist(head,usecolor)
local current = head and tonut(head)
@@ -828,24 +835,50 @@ implement {
if CONTEXTLMTXMODE > 0 then
-
interfaces.implement {
name = "widthuptohere",
public = true,
protected = true,
value = true,
actions = function()
- local n = tex.getnest()
+ local n = texgetnest()
local w = 0
- if n.mode == tex.modelevels.horizontal then
- local h = nodes.hpack(n.head.next)
- w = h.width
- h.list = nil
- nodes.free(h)
+ if n.mode == hmode_code then
+ local h = hpack(getnext(tonut(n.head)))
+ w = getwidth(h)
+ setlist(h)
+ free(h)
end
return tokens.values.dimension, w
end,
}
-
end
+
+interfaces.implement {
+ name = "doifelseindented",
+ public = true,
+ protected = true,
+ actions = function()
+ local n = texgetnest()
+ local b = false
+ if n.mode == hmode_code then
+ n = tonut(n.head)
+ while n do
+ n = getnext(n)
+ if n then
+ local id = getid(n)
+ if id == hlist_code then
+ if getsubtype(n) == indent_code then
+ b = getwidth(n) > 0
+ break
+ end
+ elseif id ~= localpar_code then
+ break
+ end
+ end
+ end
+ end
+ commands.doifelse(b)
+ end,
+}
diff --git a/tex/context/base/mkiv/supp-box.mkiv b/tex/context/base/mkiv/supp-box.mkiv
index 74a3462dd..35b400b09 100644
--- a/tex/context/base/mkiv/supp-box.mkiv
+++ b/tex/context/base/mkiv/supp-box.mkiv
@@ -220,7 +220,7 @@
\newcount\c_boxes_math_style
\unexpanded\def\syst_boxes_math_set_nextbox#1%
- {\c_boxes_math_style\mathstyle
+ {\c_boxes_math_style\normalmathstyle
\setbox\nextbox\hbox{\normalstartimath\mathsurround\zeropoint\triggermathstyle\c_boxes_math_style{#1}\normalstopimath}}
%D \macros
diff --git a/tex/context/base/mkiv/supp-box.mkxl b/tex/context/base/mkiv/supp-box.mkxl
index af1030f2f..bb3c71aaa 100644
--- a/tex/context/base/mkiv/supp-box.mkxl
+++ b/tex/context/base/mkiv/supp-box.mkxl
@@ -189,7 +189,7 @@
\newcount\c_boxes_math_style
\unexpanded\def\syst_boxes_math_set_nextbox#1%
- {\c_boxes_math_style\mathstyle
+ {\c_boxes_math_style\normalmathstyle
\setbox\nextbox\hbox{\normalstartimath\mathsurround\zeropoint\triggermathstyle\c_boxes_math_style{#1}\normalstopimath}}
%D \macros
diff --git a/tex/context/base/mkiv/syst-aux.mkxl b/tex/context/base/mkiv/syst-aux.mkxl
index c92201aa2..d78a7b307 100644
--- a/tex/context/base/mkiv/syst-aux.mkxl
+++ b/tex/context/base/mkiv/syst-aux.mkxl
@@ -201,21 +201,37 @@
%D is more efficient but it probably won't be noticed. It's anyway cheaper on memory
%D access.
-\def\gobbleoneargument #0{}
-\def\gobbletwoarguments #0#0{}
-\def\gobblethreearguments #0#0#0{}
-\def\gobblefourarguments #0#0#0#0{}
-\def\gobblefivearguments #0#0#0#0{}
-\def\gobblesixarguments #0#0#0#0{}
-\def\gobblesevenarguments #0#0#0#0#0{}
-\def\gobbleeightarguments #0#0#0#0#0#0{}
-\def\gobbleninearguments #0#0#0#0#0#0#0{}
-
-\def\gobbleoneoptional [#0]{}
-\def\gobbletwooptionals [#0][#0]{}
-\def\gobblethreeoptionals[#0][#0][#0]{}
-\def\gobblefouroptionals [#0][#0][#0][#0]{}
-\def\gobblefiveoptionals [#0][#0][#0][#0][#0]{}
+% \def\gobbleoneargument #0{}
+% \def\gobbletwoarguments #0#0{}
+% \def\gobblethreearguments #0#0#0{}
+% \def\gobblefourarguments #0#0#0#0{}
+% \def\gobblefivearguments #0#0#0#0{}
+% \def\gobblesixarguments #0#0#0#0{}
+% \def\gobblesevenarguments #0#0#0#0#0{}
+% \def\gobbleeightarguments #0#0#0#0#0#0{}
+% \def\gobbleninearguments #0#0#0#0#0#0#0{}
+%
+% \def\gobbleoneoptional [#0]{}
+% \def\gobbletwooptionals [#0][#0]{}
+% \def\gobblethreeoptionals[#0][#0][#0]{}
+% \def\gobblefouroptionals [#0][#0][#0][#0]{}
+% \def\gobblefiveoptionals [#0][#0][#0][#0][#0]{}
+
+\def\gobbleoneargument #-{}
+\def\gobbletwoarguments #-#-{}
+\def\gobblethreearguments #-#-#-{}
+\def\gobblefourarguments #-#-#-#-{}
+\def\gobblefivearguments #-#-#-#-{}
+\def\gobblesixarguments #-#-#-#-{}
+\def\gobblesevenarguments #-#-#-#-#-{}
+\def\gobbleeightarguments #-#-#-#-#-#-{}
+\def\gobbleninearguments #-#-#-#-#-#-#-{}
+
+\def\gobbleoneoptional [#-]{}
+\def\gobbletwooptionals [#-][#-]{}
+\def\gobblethreeoptionals[#-][#-][#-]{}
+\def\gobblefouroptionals [#-][#-][#-][#-]{}
+\def\gobblefiveoptionals [#-][#-][#-][#-][#-]{}
%D Reserved macros for tests:
@@ -621,31 +637,65 @@
%D These are normally only used for keywords, i.e.\ strings so we can delegate
%D the work to \LUA:
-% \unexpanded\def\doifelseinset#1#2{\clf_doifelseinset{#1}{#2}}
-% \unexpanded\def\doifinset #1#2{\clf_doifinset {#1}{#2}}
-% \unexpanded\def\doifnotinset #1#2{\clf_doifnotinset {#1}{#2}}
+\unexpanded\def\doifelseinset#1#2{\clf_doifelseinset{#1}{#2}}
+\unexpanded\def\doifinset #1#2{\clf_doifinset {#1}{#2}}
+\unexpanded\def\doifnotinset #1#2{\clf_doifnotinset {#1}{#2}}
% % \let\firstinset \clf_firstinset
-\unexpanded\def\doifelseinset#1#2%
- {\ifhasxtoks{,#1,}{,#2,}%
- \expandafter\firstoftwoarguments
- \else
- \expandafter\secondoftwoarguments
- \fi}
+% These don't accept spaces after commas:
+%
+% \unexpanded\def\doifelseinset#1#2%
+% {\ifhasxtoks{,#1,}{,#2,}%
+% \expandafter\firstoftwoarguments
+% \else
+% \expandafter\secondoftwoarguments
+% \fi}
-\unexpanded\def\doifinset#1#2%
- {\ifhasxtoks{,#1,}{,#2,}%
- \expandafter\firstofoneargument
- \else
- \expandafter\gobbleoneargument
- \fi}
+% \unexpanded\def\doifinset#1#2%
+% {\ifhasxtoks{,#1,}{,#2,}%
+% \expandafter\firstofoneargument
+% \else
+% \expandafter\gobbleoneargument
+% \fi}
-\unexpanded\def\doifnotinset#1#2%
- {\ifhasxtoks{,#1,}{,#2,}%
- \expandafter\gobbleoneargument
- \else
- \expandafter\firstofoneargument
- \fi}
+% \unexpanded\def\doifnotinset#1#2%
+% {\ifhasxtoks{,#1,}{,#2,}%
+% \expandafter\gobbleoneargument
+% \else
+% \expandafter\firstofoneargument
+% \fi}
+
+% But these do:
+
+\edef\a!comma{\expandtoken \ignorecatcode \commaasciicode}
+\edef\a!space{\expandtoken \ignorecatcode \spaceasciicode}
+
+\normalexpanded {
+
+ \unexpanded \def \noexpand \doifelseinset#1#2%
+ {\noexpand\ifhasxtoks{,\a!space#1,}{,#2,}%
+ \noexpand\expandafter\noexpand\firstoftwoarguments
+ \noexpand\else
+ \noexpand\expandafter\noexpand\secondoftwoarguments
+ \noexpand\fi}
+
+ \unexpanded \def \noexpand \doifinset#1#2%
+ {\noexpand\ifhasxtoks{,\a!space#1,}{,#2,}%
+ \noexpand\expandafter\noexpand\firstofoneargument
+ \noexpand\else
+ \noexpand\expandafter\noexpand\gobbleoneargument
+ \noexpand\fi}
+
+ \unexpanded \def \noexpand \doifnotinset#1#2%
+ {\noexpand\ifhasxtoks{,\a!space#1,}{,#2,}%
+ \noexpand\expandafter\noexpand\gobbleoneargument
+ \noexpand\else
+ \noexpand\expandafter\noexpand\firstofoneargument
+ \noexpand\fi}
+
+}
+
+%D Done.
\let\doifinsetelse\doifelseinset
@@ -769,10 +819,15 @@
\normalexpanded{\noexpand\expandafterspaces\syst_helpers_process_comma_item#1,}\ignorearguments\ignorearguments\ignorearguments
\popmacro\commalistcommand}
+% \let\syst_helpers_process_comma_item_next_a \syst_helpers_process_comma_item_next
+% \def\syst_helpers_process_comma_item_next_b#0\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_a}
+% \def\syst_helpers_process_comma_item_next_c#0\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_b}
+% \def\syst_helpers_process_comma_item_gobble#0\ignorearguments{}
+
\let\syst_helpers_process_comma_item_next_a \syst_helpers_process_comma_item_next
-\def\syst_helpers_process_comma_item_next_b#0\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_a}
-\def\syst_helpers_process_comma_item_next_c#0\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_b}
-\def\syst_helpers_process_comma_item_gobble#0\ignorearguments{}
+\def\syst_helpers_process_comma_item_next_b#-\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_a}
+\def\syst_helpers_process_comma_item_next_c#-\ignorearguments{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_b}
+\def\syst_helpers_process_comma_item_gobble#-\ignorearguments{}
\unexpanded\def\quitcommalist {\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_b}
\unexpanded\def\quitprevcommalist{\let\syst_helpers_process_comma_item_next\syst_helpers_process_comma_item_next_c}
@@ -1298,7 +1353,10 @@
\fi
\fi}
-\def\syst_helpers_raw_process_action_gobble#0\ignorearguments
+% \def\syst_helpers_raw_process_action_gobble#0\ignorearguments
+% {}
+
+\def\syst_helpers_raw_process_action_gobble#-\ignorearguments
{}
\def\syst_helpers_raw_process_action_next
@@ -1483,10 +1541,16 @@
\def\syst_helpers_grab_parameter_next
{\expandafterspaces\syst_helpers_grab_parameter}
-\unexpanded\def\dogetparameters#1[#2]#0[#4]%
+% \unexpanded\def\dogetparameters#1[#2]#0[#4]%
+% {\def\m_syst_parameter_n{#2}%
+% \let\m_syst_parameter_s#1%
+% \expandafterspaces\syst_helpers_grab_parameter#4\ignorearguments\ignorearguments}
+
+\unexpanded\def\dogetparameters#1[#2]#-[#3]%
{\def\m_syst_parameter_n{#2}%
\let\m_syst_parameter_s#1%
- \expandafterspaces\syst_helpers_grab_parameter#4\ignorearguments\ignorearguments}
+ \expandafterspaces\syst_helpers_grab_parameter#3\ignorearguments\ignorearguments}
+
%D \macros
%D {getemptyparameters}
@@ -1634,7 +1698,7 @@
\def\commalistsize{0}
-\def\syst_helpers_get_comma_list_size#0,%
+\def\syst_helpers_get_comma_list_size#0,% no #- as we need to count
{\ifarguments\or
\advance\commalistcounter\plusone
\expandafter\syst_helpers_get_comma_list_size
@@ -1665,7 +1729,9 @@
%D Filters:
-\def\syst_helpers_gobble_comma_list#0\ignorearguments{}
+% \def\syst_helpers_gobble_comma_list#0\ignorearguments{}
+
+\def\syst_helpers_gobble_comma_list#-\ignorearguments{}
\def\syst_helpers_get_from_comma_list#1,%
{\ifarguments \or
@@ -2505,32 +2571,59 @@
% \def\fifthofsixarguments #1#2#3#4#5#6{#5}
% \def\sixthofsixarguments #1#2#3#4#5#6{#6}
+% \def\firstofoneargument #1{#1}
+%
+% \def\firstoftwoarguments #1#0{#1}
+% \def\secondoftwoarguments #0#2{#2}
+%
+% \def\firstofthreearguments #1#0#0{#1}
+% \def\secondofthreearguments #0#2#0{#2}
+% \def\thirdofthreearguments #0#0#3{#3}
+%
+% \def\firstoffourarguments #1#0#0#0{#1}
+% \def\secondoffourarguments #0#2#0#0{#2}
+% \def\thirdoffourarguments #0#0#3#0{#3}
+% \def\fourthoffourarguments #0#0#0#4{#4}
+%
+% \def\firstoffivearguments #1#0#0#0#0{#1}
+% \def\secondoffivearguments #0#2#0#0#0{#2}
+% \def\thirdoffivearguments #0#0#3#0#0{#3}
+% \def\fourthoffivearguments #0#0#0#4#0{#4}
+% \def\fifthoffivearguments #0#0#0#0#5{#5}
+%
+% \def\firstofsixarguments #1#0#0#0#0#0{#1}
+% \def\secondofsixarguments#0#2#0#0#0#0{#2}
+% \def\thirdofsixarguments #0#0#3#0#0#0{#3}
+% \def\fourthofsixarguments#0#0#0#4#0#0{#4}
+% \def\fifthofsixarguments #0#0#0#0#5#0{#5}
+% \def\sixthofsixarguments #0#0#0#0#0#6{#6}
+
\def\firstofoneargument #1{#1}
-\def\firstoftwoarguments #1#0{#1}
-\def\secondoftwoarguments #0#2{#2}
+\def\firstoftwoarguments #1#-{#1}
+\def\secondoftwoarguments #-#1{#1}
-\def\firstofthreearguments #1#0#0{#1}
-\def\secondofthreearguments #0#2#0{#2}
-\def\thirdofthreearguments #0#0#3{#3}
+\def\firstofthreearguments #1#-#-{#1}
+\def\secondofthreearguments #-#1#-{#1}
+\def\thirdofthreearguments #-#-#1{#1}
-\def\firstoffourarguments #1#0#0#0{#1}
-\def\secondoffourarguments #0#2#0#0{#2}
-\def\thirdoffourarguments #0#0#3#0{#3}
-\def\fourthoffourarguments #0#0#0#4{#4}
+\def\firstoffourarguments #1#-#-#-{#1}
+\def\secondoffourarguments #-#1#-#-{#1}
+\def\thirdoffourarguments #-#-#1#-{#1}
+\def\fourthoffourarguments #-#-#-#1{#1}
-\def\firstoffivearguments #1#0#0#0#0{#1}
-\def\secondoffivearguments #0#2#0#0#0{#2}
-\def\thirdoffivearguments #0#0#3#0#0{#3}
-\def\fourthoffivearguments #0#0#0#4#0{#4}
-\def\fifthoffivearguments #0#0#0#0#5{#5}
+\def\firstoffivearguments #1#-#-#-#-{#1}
+\def\secondoffivearguments #-#1#-#-#-{#1}
+\def\thirdoffivearguments #-#-#1#-#-{#1}
+\def\fourthoffivearguments #-#-#-#1#-{#1}
+\def\fifthoffivearguments #-#-#-#-#1{#1}
-\def\firstofsixarguments #1#0#0#0#0#0{#1}
-\def\secondofsixarguments#0#2#0#0#0#0{#2}
-\def\thirdofsixarguments #0#0#3#0#0#0{#3}
-\def\fourthofsixarguments#0#0#0#4#0#0{#4}
-\def\fifthofsixarguments #0#0#0#0#5#0{#5}
-\def\sixthofsixarguments #0#0#0#0#0#6{#6}
+\def\firstofsixarguments #1#-#-#-#-#-{#1}
+\def\secondofsixarguments#-#1#-#-#-#-{#1}
+\def\thirdofsixarguments #-#-#1#-#-#-{#1}
+\def\fourthofsixarguments#-#-#-#1#-#-{#1}
+\def\fifthofsixarguments #-#-#-#-#1#-{#1}
+\def\sixthofsixarguments #-#-#-#-#-#1{#1}
% \unexpanded\def\firstofoneunexpanded #1{#1}
%
@@ -2541,14 +2634,23 @@
% \unexpanded\def\secondofthreeunexpanded#1#2#3{#2}
% \unexpanded\def\thirdofthreeunexpanded #1#2#3{#3}
+% \unexpanded\def\firstofoneunexpanded #1{#1}
+%
+% \unexpanded\def\firstoftwounexpanded #1#0{#1}
+% \unexpanded\def\secondoftwounexpanded #0#2{#2}
+%
+% \unexpanded\def\firstofthreeunexpanded #1#0#0{#1}
+% \unexpanded\def\secondofthreeunexpanded#0#2#0{#2}
+% \unexpanded\def\thirdofthreeunexpanded #0#0#3{#3}
+
\unexpanded\def\firstofoneunexpanded #1{#1}
-\unexpanded\def\firstoftwounexpanded #1#0{#1}
-\unexpanded\def\secondoftwounexpanded #0#2{#2}
+\unexpanded\def\firstoftwounexpanded #1#-{#1}
+\unexpanded\def\secondoftwounexpanded #-#1{#1}
-\unexpanded\def\firstofthreeunexpanded #1#0#0{#1}
-\unexpanded\def\secondofthreeunexpanded#0#2#0{#2}
-\unexpanded\def\thirdofthreeunexpanded #0#0#3{#3}
+\unexpanded\def\firstofthreeunexpanded #1#-#-{#1}
+\unexpanded\def\secondofthreeunexpanded#-#1#-{#1}
+\unexpanded\def\thirdofthreeunexpanded #-#-#1{#1}
%D \macros
%D {globalletempty,letempty,
@@ -2643,10 +2745,15 @@
\def\syst_helpers_grab_raw_parameter_next
{\expandafterspaces\syst_helpers_grab_raw_parameter}
-\unexpanded\def\rawgetparameters#1[#2]#0[#4]%
+% \unexpanded\def\rawgetparameters#1[#2]#0[#4]%
+% {\def\m_syst_parameter_n{#2}%
+% %\expandafterspaces\syst_helpers_grab_raw_parameter#4\ignorearguments\ignorearguments}
+% \expandafter\expandafterspaces\expandafter\syst_helpers_grab_raw_parameter#4\ignorearguments\ignorearguments}
+
+\unexpanded\def\rawgetparameters#1[#2]#-[#3]%
{\def\m_syst_parameter_n{#2}%
- %\expandafterspaces\syst_helpers_grab_raw_parameter#4\ignorearguments\ignorearguments}
- \expandafter\expandafterspaces\expandafter\syst_helpers_grab_raw_parameter#4\ignorearguments\ignorearguments}
+ %\expandafterspaces\syst_helpers_grab_raw_parameter#3\ignorearguments\ignorearguments}
+ \expandafter\expandafterspaces\expandafter\syst_helpers_grab_raw_parameter#3\ignorearguments\ignorearguments}
%D \macros
%D {doglobal,
@@ -3082,10 +3189,7 @@
\globalpushmacro\recurseaction
\unexpanded\gdef\recurseaction##1##2{#1}%
\let\endofloop\syst_helpers_loop
- \syst_helpers_loop1% no \plusone else \recurselevel wrong
- \globalpopmacro\recurselevel
- \globalpopmacro\recurseaction
- \global\advance\outerrecurse\minusone}
+ \syst_helpers_loop1}% no \plusone else \recurselevel wrong
\unexpanded\def\syst_helpers_loop#1%
{\def\recurselevel{#1}%
@@ -3095,13 +3199,16 @@
{\syst_helpers_recurse_content
\endofloop}
-\unexpanded\def\syst_helpers_loop_nop#1%
- {}
+\unexpanded\def\syst_helpers_loop_nop#0%
+ {\let\endofloop\syst_helpers_loop
+ \globalpopmacro\recurselevel
+ \globalpopmacro\recurseaction
+ \global\advance\outerrecurse\minusone}
\unexpanded\def\exitloop % \exitloop quits at end
{\let\endofloop\syst_helpers_loop_nop}
-\unexpanded\def\exitloopnow#1\endofloop % \exitloopnow quits directly
+\unexpanded\def\exitloopnow#0\endofloop % \exitloopnow quits directly
{\syst_helpers_loop_nop}
%D The loop is executed at least once, so beware of situations like:
@@ -3689,9 +3796,9 @@
% {}
\unexpanded\def\gobbleuntil#1%
- {\def\syst_helpers_gobble_indeed##0#1{}\syst_helpers_gobble_indeed}
+ {\def\syst_helpers_gobble_indeed##-#1{}\syst_helpers_gobble_indeed}
-\unexpanded\def\gobbleuntilrelax#0\relax
+\unexpanded\def\gobbleuntilrelax#-\relax
{}
%D The next one simply expands the pickup up tokens.
@@ -4316,7 +4423,7 @@
\let\syst_helpers_split_string\relax
\unexpanded\def\beforesplitstring#1\at#2\to#3%
- {\def\syst_helpers_split_string##1#2##0^^^^0004%
+ {\def\syst_helpers_split_string##1#2##0^^^^0004% no #- as we need to count
{\ifarguments
\let#3\empty
\or
@@ -4327,7 +4434,7 @@
\expandafter\syst_helpers_split_string#1^^^^0004\ignorearguments\ignorearguments}
\unexpanded\def\aftersplitstring#1\at#2\to#3%
- {\def\syst_helpers_split_string##0#2##2^^^^0004%
+ {\def\syst_helpers_split_string##0#2##2^^^^0004% no #- as we need to count
{\ifarguments
\let#3\empty
\or
@@ -4387,7 +4494,7 @@
\let\beforetestandsplitstring\beforesplitstring
\unexpanded\def\aftertestandsplitstring#1\at#2\to#3%
- {\def\syst_helpers_split_string##0#2##2^^^^0004%
+ {\def\syst_helpers_split_string##0#2##2^^^^0004% no #- as we need to count
{\ifarguments
\let#3\empty
\or
@@ -4418,11 +4525,17 @@
%D splitatcolon,
%D splitatcolons}
-\unexpanded\def\syst_helpers_splitatperiod #1.#2.#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
-\unexpanded\def\syst_helpers_splitatcomma #1,#2,#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
-\unexpanded\def\syst_helpers_splitatasterisk #1*#2*#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
-\unexpanded\def\syst_helpers_splitatcolon #1:#2:#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
-\unexpanded\def\syst_helpers_splitatcolons #1::#2::#0^^^^0004#4#5{\edef#4{#1}\edef#5{#2}}
+% \unexpanded\def\syst_helpers_splitatperiod #1.#2.#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
+% \unexpanded\def\syst_helpers_splitatcomma #1,#2,#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
+% \unexpanded\def\syst_helpers_splitatasterisk #1*#2*#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
+% \unexpanded\def\syst_helpers_splitatcolon #1:#2:#0^^^^0004#4#5{\def #4{#1}\def #5{#2}}
+% \unexpanded\def\syst_helpers_splitatcolons #1::#2::#0^^^^0004#4#5{\edef#4{#1}\edef#5{#2}}
+
+\unexpanded\def\syst_helpers_splitatperiod #1.#2.#-^^^^0004#3#4{\def #3{#1}\def #4{#2}}
+\unexpanded\def\syst_helpers_splitatcomma #1,#2,#-^^^^0004#3#4{\def #3{#1}\def #4{#2}}
+\unexpanded\def\syst_helpers_splitatasterisk #1*#2*#-^^^^0004#3#4{\def #3{#1}\def #4{#2}}
+\unexpanded\def\syst_helpers_splitatcolon #1:#2:#-^^^^0004#3#4{\def #3{#1}\def #4{#2}}
+\unexpanded\def\syst_helpers_splitatcolons #1::#2::#-^^^^0004#3#4{\edef#3{#1}\edef#4{#2}}
\unexpanded\def\splitatperiod #1{\normalexpanded{\syst_helpers_splitatperiod #1}..^^^^0004}
\unexpanded\def\splitatcomma #1{\normalexpanded{\syst_helpers_splitatcomma #1},,^^^^0004} % not at ", "
@@ -4528,14 +4641,16 @@
{\dodoglobal\edef#2{#1\ifempty#2\else,#2\fi}}}
\unexpanded\def\xsplitstring#1#2% \cs {str}
- {\def\syst_helpers_split_string##1,#2,##2,#2,##3\\%
+ %{\def\syst_helpers_split_string##1,#2,##2,#2,##3\\%
+ {\def\syst_helpers_split_string##1,#2,##2,#2,##-\\%
{\edef\m_syst_string_one{\bcleanedupcommalist##1\empty\empty\relax}%
\edef\m_syst_string_two{\acleanedupcommalist##2,,\relax}}%
\expandafter\syst_helpers_split_string\expandafter,#1,,#2,,#2,\\}
\def\bcleanedupcommalist#1#2#3\relax{\if#1,\else#1\fi\if#2,\else#2\fi#3}
\def\bcleanedupcommalist#1#2\relax{\if#1,\else#1\fi#2}
-\def\acleanedupcommalist#1,,#2\relax{#1}
+%def\acleanedupcommalist#1,,#2\relax{#1}
+\def\acleanedupcommalist#1,,#-\relax{#1}
\unexpanded\def\removefromcommalist#1#2% to be sped up
{\rawdoifelseinset{#1}#2%
@@ -4694,8 +4809,7 @@
% \def\PtToCm#1%
% {\withoutpt\the\dimexpr0.0351459804\dimexpr#1\relax\relax cm}
-\def\PtToCm#1%
- {\thewithoutunit\dimexpr0.0351459804\dimexpr#1\relax\relax cm}
+\def\PtToCm#1{\thewithoutunit\dimexpr0.0351459804\dimexpr#1\relax\relax cm}
%D We also support:
%D
@@ -5228,9 +5342,16 @@
%D This command can be integrated in \type {\getparameters}, but we decided best not
%D to do so.
+% \unexpanded\def\processassignlist#1[#2]#3%
+% {\def\syst_helpers_process_assign_list_assign[##1=##2=##3]%
+% {\doif{##3}\relax{#3{##1}}}%
+% \def\syst_helpers_process_assign_list_step##1%
+% {\syst_helpers_process_assign_list_assign[##1==\relax]}%
+% \processcommalist[#2]\syst_helpers_process_assign_list_step}
+
\unexpanded\def\processassignlist#1[#2]#3%
- {\def\syst_helpers_process_assign_list_assign[##1=##2=##3]%
- {\doif{##3}\relax{#3{##1}}}%
+ {\def\syst_helpers_process_assign_list_assign[##1=##-=##2]%
+ {\doif{##2}\relax{#3{##1}}}%
\def\syst_helpers_process_assign_list_step##1%
{\syst_helpers_process_assign_list_assign[##1==\relax]}%
\processcommalist[#2]\syst_helpers_process_assign_list_step}
@@ -6293,7 +6414,10 @@
\def\docheckedpair#1%
{\syst_helpers_checked_pair#1,,\_o_e_p_}
-\def\syst_helpers_checked_pair#1,#2,#0\_o_e_p_
+% \def\syst_helpers_checked_pair#1,#2,#0\_o_e_p_
+% {#1,#2}
+
+\def\syst_helpers_checked_pair#1,#2,#-\_o_e_p_
{#1,#2}
%D Here are some nasty helpers. They can be used to fill often expanded token
diff --git a/tex/context/base/mkiv/syst-ini.mkiv b/tex/context/base/mkiv/syst-ini.mkiv
index 3e71e0893..1de243a6d 100644
--- a/tex/context/base/mkiv/syst-ini.mkiv
+++ b/tex/context/base/mkiv/syst-ini.mkiv
@@ -58,7 +58,9 @@
\chardef\primeasciicode 39 % '
\chardef\leftparentasciicode 40
\chardef\rightparentasciicode 41
+\chardef\commaasciicode 44
\chardef\hyphenasciicode 45
+\chardef\periodasciicode 46
\chardef\forwardslashasciicode 47 % /
\chardef\colonasciicode 58
\chardef\lessthanasciicode 60 % < used as alternative verbatim {
diff --git a/tex/context/base/mkiv/syst-ini.mkxl b/tex/context/base/mkiv/syst-ini.mkxl
index 09ab93d58..a4c355bba 100644
--- a/tex/context/base/mkiv/syst-ini.mkxl
+++ b/tex/context/base/mkiv/syst-ini.mkxl
@@ -58,7 +58,9 @@
\chardef\primeasciicode 39 % '
\chardef\leftparentasciicode 40
\chardef\rightparentasciicode 41
+\chardef\commaasciicode 44
\chardef\hyphenasciicode 45
+\chardef\periodasciicode 46
\chardef\forwardslashasciicode 47 % /
\chardef\colonasciicode 58
\chardef\lessthanasciicode 60 % < used as alternative verbatim {
diff --git a/tex/context/base/mkiv/toks-ini.lua b/tex/context/base/mkiv/toks-ini.lua
index f38cf915f..da5affa63 100644
--- a/tex/context/base/mkiv/toks-ini.lua
+++ b/tex/context/base/mkiv/toks-ini.lua
@@ -67,7 +67,7 @@ local scan_luainteger = token.scan_luainteger or scan_int -- only lmtx
local scan_luacardinal = token.scan_luacardinal or scan_int -- only lmtx
local get_next = token.get_next
-local get_next_token = token.get_next_token
+----- get_next_token = token.get_next_token
local skip_next = token.skip_next
local peek_next_char = token.peek_next_char
local is_next_char = token.is_next_char
@@ -90,6 +90,9 @@ tokens.istoken = is_token
tokens.isdefined = is_defined
tokens.defined = is_defined
+tokens.getdata = token.get_data -- only lmtx
+tokens.setdata = token.set_data -- only lmtx
+
local bits = {
escape = 0x00000001, -- 2^00
begingroup = 0x00000002, -- 2^01
@@ -278,6 +281,7 @@ if setinspector then
frozen = t.frozen,
mode = t.mode,
index = t.index,
+ user = t.user,
cmdname = cmdname,
}
end
@@ -298,3 +302,18 @@ tokens.cache = table.setmetatableindex(function(t,k)
t[k] = v
return v
end)
+
+if LUATEXVERSION < 114 and CONTEXTLMTXMODE == 0 then
+
+ local d = tokens.defined
+ local c = tokens.create
+
+ function tokens.defined(s,b)
+ if b then
+ return d(s)
+ else
+ return c(s).cmd_name == "undefined_cmd"
+ end
+ end
+
+end
diff --git a/tex/context/base/mkiv/type-ini.mklx b/tex/context/base/mkiv/type-ini.mklx
index b4eee64d8..c710fbec5 100644
--- a/tex/context/base/mkiv/type-ini.mklx
+++ b/tex/context/base/mkiv/type-ini.mklx
@@ -277,7 +277,7 @@
\expandafter\font_typescripts_start_gobble
\fi}
-\def\font_typescripts_start_gobble#definitions\stoptypescript{}
+\def\font_typescripts_start_gobble#ignore\stoptypescript{}
\def\font_typescripts_start_document#definitions\stoptypescript
{\toksapp\c_font_typescripts_document{\starttypescript#definitions\stoptypescript}}