summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius <mariausol@gmail.com>2012-12-04 18:40:14 +0200
committerMarius <mariausol@gmail.com>2012-12-04 18:40:14 +0200
commit95100142e8341d8bd582e16a17a26118dfc8975c (patch)
tree6ca7127585d043e5c07945d01ea8169aa3e1f954
parent78d6aac2b9e506c6ae134ca2291ecc5d86e30c6f (diff)
downloadcontext-95100142e8341d8bd582e16a17a26118dfc8975c.tar.gz
beta 2012.12.04 16:56
-rw-r--r--scripts/context/lua/mtxrun.lua55
-rw-r--r--scripts/context/stubs/mswin/mtxrun.lua55
-rw-r--r--scripts/context/stubs/unix/mtxrun55
-rw-r--r--tex/context/base/chem-str.mkiv4
-rw-r--r--tex/context/base/colo-ini.mkiv19
-rw-r--r--tex/context/base/cont-new.mkii2
-rw-r--r--tex/context/base/cont-new.mkiv2
-rw-r--r--tex/context/base/context-version.pdfbin4143 -> 4147 bytes
-rw-r--r--tex/context/base/context-version.pngbin40394 -> 40505 bytes
-rw-r--r--tex/context/base/context.mkii2
-rw-r--r--tex/context/base/context.mkiv2
-rw-r--r--tex/context/base/font-fbk.lua42
-rw-r--r--tex/context/base/l-unicode.lua55
-rw-r--r--tex/context/base/status-files.pdfbin24488 -> 24528 bytes
-rw-r--r--tex/context/base/status-lua.pdfbin199225 -> 199308 bytes
-rw-r--r--tex/context/base/strc-lst.lua129
-rw-r--r--tex/context/base/typo-krn.mkiv2
-rw-r--r--tex/generic/context/luatex/luatex-fonts-merged.lua2
18 files changed, 365 insertions, 61 deletions
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 6daa59f9d..00c1fc13c 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -4285,10 +4285,10 @@ if not modules then modules = { } end modules ['l-unicode'] = {
local concat = table.concat
local type = type
-local P, C, R, Cs, Ct = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct
+local P, C, R, Cs, Ct, Cmt = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.Cmt
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local utftype = patterns.utftype
-local char, byte, find, bytepairs, utfvalues, format = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format
+local char, byte, find, bytepairs, utfvalues, format, sub = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format, string.sub
local utfsplitlines = string.utfsplitlines
if not unicode then
@@ -4362,6 +4362,57 @@ if not utf.byte then
end
+if not utf.sub then
+
+ local utf8char = patterns.utf8char
+
+ -- inefficient as lpeg just copies ^n
+
+ -- local function sub(str,start,stop)
+ -- local pattern = utf8char^-(start-1) * C(utf8char^-(stop-start+1))
+ -- inspect(pattern)
+ -- return lpegmatch(pattern,str) or ""
+ -- end
+
+ local b, e, n, first, last = 0, 0, 0, 0, 0
+
+ local function slide(s,p)
+ n = n + 1
+ if n == first then
+ b = p
+ if not last then
+ return nil
+ end
+ end
+ if n == last then
+ e = p
+ return nil
+ else
+ return p
+ end
+ end
+
+ local pattern = Cmt(utf8char,slide)^0
+
+ function utf.sub(str,start,stop) -- todo: from the end
+ if not start then
+ return str
+ end
+ b, e, n, first, last = 0, 0, 0, start, stop
+ lpegmatch(pattern,str)
+ if not stop then
+ return sub(str,b)
+ else
+ return sub(str,b,e)
+ end
+ end
+
+ -- print(utf.sub("Hans Hagen is my name"))
+ -- print(utf.sub("Hans Hagen is my name",5))
+ -- print(utf.sub("Hans Hagen is my name",5,10))
+
+end
+
local utfchar, utfbyte = utf.char, utf.byte
-- As we want to get rid of the (unmaintained) utf library we implement our own
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 6daa59f9d..00c1fc13c 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -4285,10 +4285,10 @@ if not modules then modules = { } end modules ['l-unicode'] = {
local concat = table.concat
local type = type
-local P, C, R, Cs, Ct = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct
+local P, C, R, Cs, Ct, Cmt = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.Cmt
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local utftype = patterns.utftype
-local char, byte, find, bytepairs, utfvalues, format = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format
+local char, byte, find, bytepairs, utfvalues, format, sub = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format, string.sub
local utfsplitlines = string.utfsplitlines
if not unicode then
@@ -4362,6 +4362,57 @@ if not utf.byte then
end
+if not utf.sub then
+
+ local utf8char = patterns.utf8char
+
+ -- inefficient as lpeg just copies ^n
+
+ -- local function sub(str,start,stop)
+ -- local pattern = utf8char^-(start-1) * C(utf8char^-(stop-start+1))
+ -- inspect(pattern)
+ -- return lpegmatch(pattern,str) or ""
+ -- end
+
+ local b, e, n, first, last = 0, 0, 0, 0, 0
+
+ local function slide(s,p)
+ n = n + 1
+ if n == first then
+ b = p
+ if not last then
+ return nil
+ end
+ end
+ if n == last then
+ e = p
+ return nil
+ else
+ return p
+ end
+ end
+
+ local pattern = Cmt(utf8char,slide)^0
+
+ function utf.sub(str,start,stop) -- todo: from the end
+ if not start then
+ return str
+ end
+ b, e, n, first, last = 0, 0, 0, start, stop
+ lpegmatch(pattern,str)
+ if not stop then
+ return sub(str,b)
+ else
+ return sub(str,b,e)
+ end
+ end
+
+ -- print(utf.sub("Hans Hagen is my name"))
+ -- print(utf.sub("Hans Hagen is my name",5))
+ -- print(utf.sub("Hans Hagen is my name",5,10))
+
+end
+
local utfchar, utfbyte = utf.char, utf.byte
-- As we want to get rid of the (unmaintained) utf library we implement our own
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 6daa59f9d..00c1fc13c 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -4285,10 +4285,10 @@ if not modules then modules = { } end modules ['l-unicode'] = {
local concat = table.concat
local type = type
-local P, C, R, Cs, Ct = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct
+local P, C, R, Cs, Ct, Cmt = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.Cmt
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local utftype = patterns.utftype
-local char, byte, find, bytepairs, utfvalues, format = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format
+local char, byte, find, bytepairs, utfvalues, format, sub = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format, string.sub
local utfsplitlines = string.utfsplitlines
if not unicode then
@@ -4362,6 +4362,57 @@ if not utf.byte then
end
+if not utf.sub then
+
+ local utf8char = patterns.utf8char
+
+ -- inefficient as lpeg just copies ^n
+
+ -- local function sub(str,start,stop)
+ -- local pattern = utf8char^-(start-1) * C(utf8char^-(stop-start+1))
+ -- inspect(pattern)
+ -- return lpegmatch(pattern,str) or ""
+ -- end
+
+ local b, e, n, first, last = 0, 0, 0, 0, 0
+
+ local function slide(s,p)
+ n = n + 1
+ if n == first then
+ b = p
+ if not last then
+ return nil
+ end
+ end
+ if n == last then
+ e = p
+ return nil
+ else
+ return p
+ end
+ end
+
+ local pattern = Cmt(utf8char,slide)^0
+
+ function utf.sub(str,start,stop) -- todo: from the end
+ if not start then
+ return str
+ end
+ b, e, n, first, last = 0, 0, 0, start, stop
+ lpegmatch(pattern,str)
+ if not stop then
+ return sub(str,b)
+ else
+ return sub(str,b,e)
+ end
+ end
+
+ -- print(utf.sub("Hans Hagen is my name"))
+ -- print(utf.sub("Hans Hagen is my name",5))
+ -- print(utf.sub("Hans Hagen is my name",5,10))
+
+end
+
local utfchar, utfbyte = utf.char, utf.byte
-- As we want to get rid of the (unmaintained) utf library we implement our own
diff --git a/tex/context/base/chem-str.mkiv b/tex/context/base/chem-str.mkiv
index a2b0f135f..3b50396d1 100644
--- a/tex/context/base/chem-str.mkiv
+++ b/tex/context/base/chem-str.mkiv
@@ -258,7 +258,7 @@
\global\setfalse\c_chem_some_text
\to \everystructurechemical
-\def\doaddchemicaltexts
+\def\chem_add_texts
{\setbox2\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_mid_text}\hss}%
\setbox4\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_top_text}\hss}%
\setbox6\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_bot_text}\hss}%
@@ -275,7 +275,7 @@
\appendtoks
\ifconditional\c_chem_some_text
- \doaddchemicaltexts
+ \chem_add_texts
\d_chem_width \wd\b_chem_result
\d_chem_height\ht\b_chem_result
\d_chem_depth \dp\b_chem_result
diff --git a/tex/context/base/colo-ini.mkiv b/tex/context/base/colo-ini.mkiv
index 629f2b96a..ed550987f 100644
--- a/tex/context/base/colo-ini.mkiv
+++ b/tex/context/base/colo-ini.mkiv
@@ -698,6 +698,25 @@
% test {\mycolord OEPS} test
% test {\mycolorx OEPS} test
% \stoptext
+%
+% Beware: if we say:
+%
+% \definecolor[one][two]
+%
+% only color one is actually defined and two is not seen at the
+% \LUA\ end. This means that this doesn't work:
+%
+% \definecolor[ColorA][red]
+% \definecolor[ColorB][.5(ColorA)]
+% \definecolor[ColorC][.5(ColorB,white)]
+%
+% But this does work:
+%
+% \definecolor[ColorA][1.0(red)]
+% \definecolor[ColorB][0.5(ColorA)]
+% \definecolor[ColorC][0.5(ColorB,white)]
+%
+% because the fractional definition results in a new definition.
\unexpanded\def\defineintermediatecolor
{\dotripleempty\colo_basics_define_intermediate}
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 35dbc92d2..0390fc66a 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2012.12.03 20:57}
+\newcontextversion{2012.12.04 16:56}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index e294d9e0a..d68658d27 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2012.12.03 20:57}
+\newcontextversion{2012.12.04 16:56}
%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/context-version.pdf b/tex/context/base/context-version.pdf
index 92465ce97..aaf6549c1 100644
--- a/tex/context/base/context-version.pdf
+++ b/tex/context/base/context-version.pdf
Binary files differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index 86464708b..d53e5f80e 100644
--- a/tex/context/base/context-version.png
+++ b/tex/context/base/context-version.png
Binary files differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index a5fcad1af..93cdc7cd9 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
%D your styles an modules.
\edef\contextformat {\jobname}
-\edef\contextversion{2012.12.03 20:57}
+\edef\contextversion{2012.12.04 16:56}
%D For those who want to use this:
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index c1480397d..6cd27d3e7 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -25,7 +25,7 @@
%D up and the dependencies are more consistent.
\edef\contextformat {\jobname}
-\edef\contextversion{2012.12.03 20:57}
+\edef\contextversion{2012.12.04 16:56}
%D For those who want to use this:
diff --git a/tex/context/base/font-fbk.lua b/tex/context/base/font-fbk.lua
index 69b45811a..c7a13775a 100644
--- a/tex/context/base/font-fbk.lua
+++ b/tex/context/base/font-fbk.lua
@@ -13,13 +13,11 @@ local utfbyte, utfchar = utf.byte, utf.char
<p>This is very experimental code!</p>
--ldx]]--
-local trace_combining = false trackers.register("fonts.combining", function(v) trace_combining = v end)
-local trace_combining_all = false trackers.register("fonts.combining.all", function(v) trace_combining = v
- trace_combining_all = v end)
+local trace_combining_visualize = false trackers.register("fonts.composing.visualize", function(v) trace_combining_visualize = v end)
+local trace_combining_define = false trackers.register("fonts.composing.define", function(v) trace_combining_define = v end)
-
-trackers.register("fonts.composing", "fonts.combining")
-trackers.register("fonts.composing.all", "fonts.combining.all")
+trackers.register("fonts.combining", "fonts.composing.define") -- for old times sake (and manuals)
+trackers.register("fonts.combining.all", "fonts.composing.*") -- for old times sake (and manuals)
local report_combining = logs.reporter("fonts","combining")
@@ -61,14 +59,14 @@ local function composecharacters(tfmdata)
local italicfactor = parameters.italicfactor or 0
local vfspecials = backends.tables.vfspecials --brr
local red, green, blue, black
- if trace_combining then
+ if trace_combining_visualize then
red = vfspecials.red
green = vfspecials.green
blue = vfspecials.blue
black = vfspecials.black
end
local compose = fonts.goodies.getcompositions(tfmdata)
- if compose and trace_combining then
+ if compose and trace_combining_visualize then
report_combining("using compose information from goodies file")
end
local done = false
@@ -107,7 +105,7 @@ local function composecharacters(tfmdata)
cache[chr] = chr_t
end
if charsacc then
- if trace_combining_all then
+ if trace_combining_define then
report_combining("%s (U+%05X) = %s (U+%05X) + %s (U+%05X)",utfchar(i),i,utfchar(chr),chr,utfchar(acc),acc)
end
local acc_t = cache[acc]
@@ -140,7 +138,7 @@ local function composecharacters(tfmdata)
local ay = a_anchor.y or 0
local dx = cx - ax
local dy = cy - ay
- if trace_combining_all then
+ if trace_combining_define then
report_combining("building U+%05X (%s) from U+%05X (%s) and U+%05X (%s)",i,utfchar(i),chr,utfchar(chr),acc,utfchar(acc))
report_combining(" boundingbox:")
report_combining(" chr: %3i %3i %3i %3i",unpack(cb))
@@ -151,7 +149,7 @@ local function composecharacters(tfmdata)
report_combining(" delta:")
report_combining(" %s: %3i %3i",i_anchored,dx,dy)
end
- if trace_combining then
+ if trace_combining_visualize then
t.commands = { push, {"right", scale*dx}, {"down",-scale*dy}, green, acc_t, black, pop, chr_t }
-- t.commands = {
-- push, {"right", scale*cx}, {"down", -scale*cy}, red, {"rule",10000,10000,10000}, pop,
@@ -171,7 +169,7 @@ local function composecharacters(tfmdata)
local dx = (c_urx - a_urx - a_llx + c_llx)/2
local dd = (c_urx - c_llx)*italicfactor
if a_ury < 0 then
- if trace_combining then
+ if trace_combining_visualize then
t.commands = { push, {"right", dx-dd}, red, acc_t, black, pop, chr_t }
else
t.commands = { push, {"right", dx-dd}, acc_t, pop, chr_t }
@@ -183,16 +181,16 @@ local function composecharacters(tfmdata)
-- takes time and code
dy = compose[i]
if dy then
- dy = dy.DY
+ dy = dy.dy
end
if not dy then
dy = compose[acc]
if dy then
- dy = dy and dy.DY
+ dy = dy and dy.dy
end
end
if not dy then
- dy = compose.DY
+ dy = compose.dy
end
if not dy then
dy = - deltaxheight + extraxheight
@@ -206,13 +204,13 @@ local function composecharacters(tfmdata)
else
dy = - deltaxheight + extraxheight
end
- if trace_combining then
+ if trace_combining_visualize then
t.commands = { push, {"right", dx+dd}, {"down", dy}, green, acc_t, black, pop, chr_t }
else
t.commands = { push, {"right", dx+dd}, {"down", dy}, acc_t, pop, chr_t }
end
else
- if trace_combining then
+ if trace_combining_visualize then
t.commands = { push, {"right", dx+dd}, blue, acc_t, black, pop, chr_t }
else
t.commands = { push, {"right", dx+dd}, acc_t, pop, chr_t }
@@ -223,7 +221,7 @@ local function composecharacters(tfmdata)
t.commands = { chr_t } -- else index mess
end
else
- if trace_combining_all then
+ if trace_combining_define then
report_combining("%s (U+%05X) = %s (U+%05X) (simplified)",utfchar(i),i,utfchar(chr),chr)
end
t.commands = { chr_t } -- else index mess
@@ -270,11 +268,11 @@ vf.helpers.composecharacters = composecharacters
-- which only makes sense as demo.
commands["compose.trace.enable"] = function()
- trace_combining = true
+ trace_combining_visualize = true
end
commands["compose.trace.disable"] = function()
- trace_combining = false
+ trace_combining_visualize = false
end
commands["compose.force.enable"] = function()
@@ -287,9 +285,9 @@ end
commands["compose.trace.set"] = function(g,v)
if v[2] == nil then
- trace_combining = true
+ trace_combining_visualize = true
else
- trace_combining = v[2]
+ trace_combining_visualize = v[2]
end
end
diff --git a/tex/context/base/l-unicode.lua b/tex/context/base/l-unicode.lua
index 630c34960..7fd380b88 100644
--- a/tex/context/base/l-unicode.lua
+++ b/tex/context/base/l-unicode.lua
@@ -12,10 +12,10 @@ if not modules then modules = { } end modules ['l-unicode'] = {
local concat = table.concat
local type = type
-local P, C, R, Cs, Ct = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct
+local P, C, R, Cs, Ct, Cmt = lpeg.P, lpeg.C, lpeg.R, lpeg.Cs, lpeg.Ct, lpeg.Cmt
local lpegmatch, patterns = lpeg.match, lpeg.patterns
local utftype = patterns.utftype
-local char, byte, find, bytepairs, utfvalues, format = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format
+local char, byte, find, bytepairs, utfvalues, format, sub = string.char, string.byte, string.find, string.bytepairs, string.utfvalues, string.format, string.sub
local utfsplitlines = string.utfsplitlines
if not unicode then
@@ -89,6 +89,57 @@ if not utf.byte then
end
+if not utf.sub then
+
+ local utf8char = patterns.utf8char
+
+ -- inefficient as lpeg just copies ^n
+
+ -- local function sub(str,start,stop)
+ -- local pattern = utf8char^-(start-1) * C(utf8char^-(stop-start+1))
+ -- inspect(pattern)
+ -- return lpegmatch(pattern,str) or ""
+ -- end
+
+ local b, e, n, first, last = 0, 0, 0, 0, 0
+
+ local function slide(s,p)
+ n = n + 1
+ if n == first then
+ b = p
+ if not last then
+ return nil
+ end
+ end
+ if n == last then
+ e = p
+ return nil
+ else
+ return p
+ end
+ end
+
+ local pattern = Cmt(utf8char,slide)^0
+
+ function utf.sub(str,start,stop) -- todo: from the end
+ if not start then
+ return str
+ end
+ b, e, n, first, last = 0, 0, 0, start, stop
+ lpegmatch(pattern,str)
+ if not stop then
+ return sub(str,b)
+ else
+ return sub(str,b,e)
+ end
+ end
+
+ -- print(utf.sub("Hans Hagen is my name"))
+ -- print(utf.sub("Hans Hagen is my name",5))
+ -- print(utf.sub("Hans Hagen is my name",5,10))
+
+end
+
local utfchar, utfbyte = utf.char, utf.byte
-- As we want to get rid of the (unmaintained) utf library we implement our own
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 5b7000428..08fccd1d3 100644
--- a/tex/context/base/status-files.pdf
+++ b/tex/context/base/status-files.pdf
Binary files differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index f7d44e59f..bddcf54a9 100644
--- a/tex/context/base/status-lua.pdf
+++ b/tex/context/base/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/strc-lst.lua b/tex/context/base/strc-lst.lua
index 424e9e05b..0c13e28b2 100644
--- a/tex/context/base/strc-lst.lua
+++ b/tex/context/base/strc-lst.lua
@@ -122,7 +122,7 @@ function lists.addto(t)
end
local m = t.metadata
local r = t.references
- local i = (r and r.internal) or 0 -- brrr
+ local i = r and r.internal or 0 -- brrr
local p = pushed[i]
if not p then
p = #cached + 1
@@ -130,7 +130,6 @@ function lists.addto(t)
pushed[i] = p
r.listindex = p
end
- --
local setcomponent = references.setcomponent
if setcomponent then
setcomponent(t) -- might move to the tex end
@@ -192,26 +191,6 @@ function lists.enhance(n)
end
end
---~ function lists.enforce(n)
---~ -- todo: symbolic names for counters
---~ local l = cached[n]
---~ if l then
---~ --
---~ l.directives = nil -- might change
---~ -- save in the right order (happens at shipout)
---~ lists.tobesaved[#lists.tobesaved+1] = l
---~ -- default enhancer (cross referencing)
---~ l.references.realpage = texcount.realpageno
---~ -- specific enhancer (kind of obsolete)
---~ local kind = l.metadata.kind
---~ local enhancer = kind and lists.enhancers[kind]
---~ if enhancer then
---~ enhancer(l)
---~ end
---~ return l
---~ end
---~ end
-
-- we can use level instead but we can also decide to remove level from the metadata
local nesting = { }
@@ -730,10 +709,27 @@ function commands.savedlisttitle(name,n,tag)
end
end
+-- function commands.savedlistprefixednumber(name,n)
+-- local data = cached[tonumber(n)]
+-- if data then
+-- local numberdata = data.numberdata
+-- if numberdata then
+-- helpers.prefix(data,data.prefixdata)
+-- sections.typesetnumber(numberdata,"number",numberdata or false)
+-- end
+-- end
+-- end
+
+if not lists.reordered then
+ function lists.reordered(data)
+ return data.numberdata
+ end
+end
+
function commands.savedlistprefixednumber(name,n)
local data = cached[tonumber(n)]
if data then
- local numberdata = data.numberdata
+ local numberdata = lists.reordered(data)
if numberdata then
helpers.prefix(data,data.prefixdata)
sections.typesetnumber(numberdata,"number",numberdata or false)
@@ -742,3 +738,90 @@ function commands.savedlistprefixednumber(name,n)
end
commands.discardfromlist = lists.discard
+
+-- new and experimental and therefore off by default
+
+local sort, setmetatableindex = table.sort, table.setmetatableindex
+
+lists.autoreorder = false -- true
+
+local function addlevel(t,k)
+ local v = { }
+ setmetatableindex(v,function(t,k)
+ local v = { }
+ t[k] = v
+ return v
+ end)
+ t[k] = v
+ return v
+end
+
+local internals = setmetatableindex({ }, function(t,k)
+
+ local sublists = setmetatableindex({ },addlevel)
+
+ local collected = lists.collected or { }
+
+ for i=1,#collected do
+ local entry = collected[i]
+ local numberdata = entry.numberdata
+ if numberdata then
+ local metadata = entry.metadata
+ if metadata then
+ local references = entry.references
+ if references then
+ local kind = metadata.kind
+ local name = metadata.name
+ local internal = references.internal
+ if kind and name and internal then
+ local sublist = sublists[kind][name]
+ sublist[#sublist + 1] = { internal, numberdata }
+ end
+ end
+ end
+ end
+ end
+
+ for k, v in next, sublists do
+ for k, v in next, v do
+ local tmp = { }
+ for i=1,#v do
+ tmp[i] = v[i]
+ end
+ sort(v,function(a,b) return a[1] < b[1] end)
+ for i=1,#v do
+ t[v[i][1]] = tmp[i][2]
+ end
+ end
+ end
+
+ setmetatableindex(t,nil)
+
+ return t[k]
+
+end)
+
+function lists.reordered(entry)
+ local numberdata = entry.numberdata
+ if lists.autoreorder then
+ if numberdata then
+ local metadata = entry.metadata
+ if metadata then
+ local references = entry.references
+ if references then
+ local kind = metadata.kind
+ local name = metadata.name
+ local internal = references.internal
+ if kind and name and internal then
+ return internals[internal] or numberdata
+ end
+ end
+ end
+ end
+ else
+ function lists.reordered(entry)
+ return entry.numberdata
+ end
+ end
+ return numberdata
+end
diff --git a/tex/context/base/typo-krn.mkiv b/tex/context/base/typo-krn.mkiv
index cb1dcdd18..a47bd2ac5 100644
--- a/tex/context/base/typo-krn.mkiv
+++ b/tex/context/base/typo-krn.mkiv
@@ -129,7 +129,7 @@
\fi
\edef\p_width{\characterkerningparameter\c!width}%
\ifx\p_width\empty \else
- \hbox to \p_width
+ \hbox to \p_width
\fi
\bgroup
\usecharacterkerningstyleandcolor\c!style\c!color
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 5ff674552..306747e86 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
-- merged file : luatex-fonts-merged.lua
-- parent file : luatex-fonts.lua
--- merge date : 12/03/12 20:57:03
+-- merge date : 12/04/12 16:56:37
do -- begin closure to overcome local limits and interference