From 848a55f9b6b0ce0843811b98f3fb22985ac62bdd Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Wed, 16 Feb 2011 12:00:14 +0200
Subject: beta 2011.02.16 10:54

---
 tex/context/base/back-ini.lua               |   3 +-
 tex/context/base/back-pdf.lua               |  43 ++++++++++++++++++++---
 tex/context/base/cont-new.mkii              |   2 +-
 tex/context/base/cont-new.mkiv              |   2 +-
 tex/context/base/context.mkii               |   2 +-
 tex/context/base/context.mkiv               |   2 +-
 tex/context/base/font-col.lua               |   4 ++-
 tex/context/base/font-col.mkiv              |  14 ++------
 tex/context/base/font-ini.mkiv              |   8 +++--
 tex/context/base/font-run.mkiv              |   2 +-
 tex/context/base/grph-inc.lua               |  51 ++++++++++++++--------------
 tex/context/base/grph-inc.mkiv              |   6 ++--
 tex/context/base/mult-de.mkii               |   2 ++
 tex/context/base/mult-def.lua               |   7 ++++
 tex/context/base/mult-en.mkii               |   2 ++
 tex/context/base/mult-fr.mkii               |   2 ++
 tex/context/base/mult-it.mkii               |   2 ++
 tex/context/base/mult-nl.mkii               |   2 ++
 tex/context/base/mult-pe.mkii               |   2 ++
 tex/context/base/mult-ro.mkii               |   2 ++
 tex/context/base/node-ini.lua               |  25 ++++++++++----
 tex/context/base/status-files.pdf           | Bin 23241 -> 23229 bytes
 tex/context/base/syst-lua.lua               |  16 ++++-----
 tex/context/base/typo-cln.lua               |   2 +-
 tex/context/interface/keys-cs.xml           |   2 ++
 tex/context/interface/keys-de.xml           |   2 ++
 tex/context/interface/keys-en.xml           |   2 ++
 tex/context/interface/keys-fr.xml           |   2 ++
 tex/context/interface/keys-it.xml           |   2 ++
 tex/context/interface/keys-nl.xml           |   2 ++
 tex/context/interface/keys-pe.xml           |   2 ++
 tex/context/interface/keys-ro.xml           |   2 ++
 tex/generic/context/luatex-fonts-merged.lua |   2 +-
 33 files changed, 150 insertions(+), 71 deletions(-)

(limited to 'tex')

diff --git a/tex/context/base/back-ini.lua b/tex/context/base/back-ini.lua
index bc690f946..4e990aa38 100644
--- a/tex/context/base/back-ini.lua
+++ b/tex/context/base/back-ini.lua
@@ -104,6 +104,7 @@ backends.codeinjections = {
 
     setfigurecolorspace    = nothing,
     setfigurealternative   = nothing,
+    setfiguremask          = nothing,
 
     enabletags             = nothing,
 
@@ -155,7 +156,7 @@ backends.tables = {
 
 backends.current = "unknown"
 
-function backends.install(what)
+function backends.install(what) -- these can become metatables
     if type(what) == "string" then
         local backend = backends[what]
         if backend then
diff --git a/tex/context/base/back-pdf.lua b/tex/context/base/back-pdf.lua
index eec82d5f2..5f4ea465c 100644
--- a/tex/context/base/back-pdf.lua
+++ b/tex/context/base/back-pdf.lua
@@ -434,11 +434,11 @@ end
 -- graphics
 
 function codeinjections.setfigurealternative(data,figure)
-    local display = data.request.display
+    local request = data.request
+    local display = request.display
     if display and display ~= ""  then
-        local request = data.request
-        figures.push {
-            name   = request.display,
+        local nested = figures.push {
+            name   = display,
             page   = request.page,
             size   = request.size,
             prefix = request.prefix,
@@ -461,8 +461,41 @@ function codeinjections.setfigurealternative(data,figure)
                 Alternates = pdfreference(pdfimmediateobject(tostring(a))),
             }
             displayfigure.attr = d()
-            return displayfigure, figures.current()
+            figures.pop()
+            return displayfigure, nested
+        else
+            figures.pop()
+        end
+    end
+end
+
+function codeinjections.setfiguremask(data,figure) -- mark
+    local request = data.request
+    local mask = request.mask
+    if mask and mask ~= ""  then
+        figures.push {
+            name   = mask,
+            page   = request.page,
+            size   = request.size,
+            prefix = request.prefix,
+            cache  = request.cache,
+            width  = request.width,
+            height = request.height,
+        }
+        figures.identify()
+        local maskfigure = figures.check()
+        if maskfigure then
+            local image = maskfigure.status.private
+            if image then
+                img.immediatewrite(image)
+                local d = pdfdictionary {
+                    Interpolate  = false,
+                    SMask        = pdfreference(image.objnum),
+                }
+                figure.attr = d()
+            end
         end
+        figures.pop()
     end
 end
 
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 46e16e7c8..c1479bb14 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
 %C therefore copyrighted by \PRAGMA. See mreadme.pdf for
 %C details.
 
-\newcontextversion{2011.02.15 16:11}
+\newcontextversion{2011.02.16 10:54}
 
 %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 57ce69dd0..4ce0db0f3 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
 %C therefore copyrighted by \PRAGMA. See mreadme.pdf for
 %C details.
 
-\newcontextversion{2011.02.15 16:11}
+\newcontextversion{2011.02.16 10:54}
 
 %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/context.mkii b/tex/context/base/context.mkii
index e17d70eb5..85fde561a 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
 %D your styles an modules.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2011.02.15 16:11}
+\edef\contextversion{2011.02.16 10:54}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 0046482a5..3a39bee24 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -20,7 +20,7 @@
 %D your styles an modules.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2011.02.15 16:11}
+\edef\contextversion{2011.02.16 10:54}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/font-col.lua b/tex/context/base/font-col.lua
index e1c2afe48..4b888d6cb 100644
--- a/tex/context/base/font-col.lua
+++ b/tex/context/base/font-col.lua
@@ -146,6 +146,8 @@ function collections.stage_2(name)
     statistics.stoptiming(fonts)
 end
 
+-- we already have this parser
+
 local P, Cc = lpeg.P, lpeg.Cc
 local spec = (P("sa") + P("at") + P("scaled") + P("at") + P("mo")) * P(" ")^1 * (1-P(" "))^1 * P(" ")^0 * -1
 local okay = ((1-spec)^1 * spec * Cc(true)) + Cc(false)
@@ -190,7 +192,7 @@ function collections.message(message)
     end
 end
 
-function collections.process(head)
+function collections.process(head) -- this way we keep feature processing
     if active then
         local done = false
         for n in traverse_id(glyph,head) do
diff --git a/tex/context/base/font-col.mkiv b/tex/context/base/font-col.mkiv
index 0ace4854f..20af3e91b 100644
--- a/tex/context/base/font-col.mkiv
+++ b/tex/context/base/font-col.mkiv
@@ -79,7 +79,7 @@
   {\egroup}
 
 \def\doclonefonta#1#2% kind of dododefinefont
-  {\ctxlua{fonts.collections.message("defining #1 (relative scale: #2)")}%
+  {\ctxlua{fonts.collections.message("defining #1 (relative scale: #2)")}% brrr
    \autofontsizefalse
    \let\lastfontidentifier\s!dummy
    \def\localrelativefontsize{#2}%
@@ -99,7 +99,6 @@
 \def\doclonefontstagetwo#1%
   {\ctxlua{fonts.collections.stage_2("#1")}}
 
-
 % check : only replace when present in replacement font (default: no)
 % force : force replacent even when basefont has glyph  (default: yes)
 
@@ -111,16 +110,7 @@
 %
 % \definefontsynonym[SerifPlus][Serif][fallbacks=whatever]
 %
-% \definefont[MySerif][SerifPlus at 10pt]
-%
-% \startcolumns[n=6]
-%     \MySerif
-%     \dostepwiserecurse {0} {65000} {1} {
-%         \iffontchar\font\recurselevel
-%             {\tttf\uchexnumbers\recurselevel:} \char\recurselevel\par
-%         \fi
-%     }
-% \stopcolumns
+% \showfont[SerifPlus][all]
 
 % \definefontfeature[zh][mode=node,script=hang,lang=zhs]
 % \definefontfallback[serifwhatever]          [lmroman10-regular]   [0x0000-0x0400][force=yes]
diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv
index 2df79815f..0c5a3b9f2 100644
--- a/tex/context/base/font-ini.mkiv
+++ b/tex/context/base/font-ini.mkiv
@@ -687,8 +687,8 @@
 
 \let\relativefontid\empty
 
-\def\lowleveldefinefont#1#2% #2 = cs
-  {%
+\unexpanded\def\lowleveldefinefont#1#2% #2 = cs
+  {% we can now set more at the lua end
    \ctxlua{fonts.definers.stage_one("\luaescapestring{#1}")}% the escapestring catches at \somedimen
    % sets \scaledfontmode and \somefontname and \somefontsize
    \ifcase\scaledfontmode\relax
@@ -709,6 +709,7 @@
      % scaled, don't use this one as it's unpredictable
      \scaledfontsize-\somefontsize\scaledpoint
    \fi
+   \relax
    \scaledfontsize\localrelativefontsize\scaledfontsize
    \ifautofontsize
      \scaledfontsize\currentfontbodyscale\scaledfontsize
@@ -735,7 +736,8 @@
       "\@@fontclassgoodies", % experiment (not yet used)
       "\@@fontgoodies" % experiment
    )}%
-   \edef\somefontspec{at \somefontsize}% we need the resolved designsize (for fallbacks)
+%    \edef\somefontspec{at \somefontsize}% we need the resolved designsize (for fallbacks)
+   \edef\somefontspec{at \number\scaledfontsize sp}% we need the resolved designsize (for fallbacks)
    \expandafter\let\expandafter\lastrawfontcall\csname#2\endcsname
    \the\everydefinefont}
 
diff --git a/tex/context/base/font-run.mkiv b/tex/context/base/font-run.mkiv
index f65017ef4..aaa714c3d 100644
--- a/tex/context/base/font-run.mkiv
+++ b/tex/context/base/font-run.mkiv
@@ -140,7 +140,7 @@
    \ifinsidefloat\else\startbaselinecorrection\fi
    \vbox\bgroup
    \forgetall
-   \startoverlay
+   \startoverlay % easier in cld
      {\vbox
         {\tf \setstrut \dummy
          \offinterlineskip
diff --git a/tex/context/base/grph-inc.lua b/tex/context/base/grph-inc.lua
index 71ef9430a..19429c5b5 100644
--- a/tex/context/base/grph-inc.lua
+++ b/tex/context/base/grph-inc.lua
@@ -16,6 +16,8 @@ if not modules then modules = { } end modules ['grph-inc'] = {
 
 -- figures.boxnumber can go as we now can use names
 
+-- avoid push
+
 --[[
 The ConTeXt figure inclusion mechanisms are among the oldest code
 in ConTeXt and evolve dinto a complex whole. One reason is that we
@@ -40,7 +42,7 @@ run TeX code from within Lua. Some more functionality will move to Lua.
 local format, lower, find, match, gsub, gmatch = string.format, string.lower, string.find, string.match, string.gsub, string.gmatch
 local texbox = tex.box
 local contains = table.contains
-local concat = table.concat
+local concat, insert, remove = table.concat, table.insert, table.remove
 local todimen = string.todimen
 local settings_to_array, settings_to_hash = utilities.parsers.settings_to_array,  utilities.parsers.settings_to_hash
 local allocate = utilities.storage.allocate
@@ -251,11 +253,10 @@ end
 
 -- interfacing to tex
 
-
 local figuredata = { }
 local callstack  = { }
 
-function figures.new() -- we could use metatables status -> used -> request but it needs testing
+local function new() -- we could use metatables status -> used -> request but it needs testing
     local request = {
         name       = false,
         label      = false,
@@ -267,6 +268,7 @@ function figures.new() -- we could use metatables status -> used -> request but
         ["repeat"] = false,
         controls   = false,
         display    = false,
+        mask       = false,
         conversion = false,
         resolution = false,
         cache      = false,
@@ -291,30 +293,28 @@ function figures.new() -- we could use metatables status -> used -> request but
     }
  -- setmetatable(status, { __index = used })
  -- setmetatable(used,   { __index = request })
-    figuredata = {
+    return {
         request = request,
         used    = used,
         status  = status,
     }
-    return figuredata
 end
 
+ -- use table.insert|remove
+
 function figures.push(request)
-    local ncs = #callstack + 1
-    if ncs == 1 then
-        statistics.starttiming(figures)
-    end
-    local figuredata = figures.new()
+    statistics.starttiming(figures)
+    insert(callstack,figuredata)
+    figuredata = new()
     if request then
-    local iv = interfaces.variables
     --  request.width/height are strings and are only used when no natural dimensions
     --  can be determined; at some point the handlers might set them to numbers instead
     --  local w, h = tonumber(request.width), tonumber(request.height)
         request.page       = math.max(tonumber(request.page) or 1,1)
         request.size       = img.checksize(request.size)
-        request.object     = iv[request.object] == variables.yes
-        request["repeat"]  = iv[request["repeat"]] == variables.yes
-        request.preview    = iv[request.preview] == variables.yes
+        request.object     = request.object == variables.yes
+        request["repeat"]  = request["repeat"] == variables.yes
+        request.preview    = request.preview == variables.yes
         request.cache      = request.cache ~= "" and request.cache
         request.prefix     = request.prefix ~= "" and request.prefix
         request.format     = request.format ~= "" and request.format
@@ -322,17 +322,17 @@ function figures.push(request)
     --  request.height     = (h and h > 0) or false
         table.merge(figuredata.request,request)
     end
-    callstack[ncs] = figuredata
     return figuredata
 end
 
 function figures.pop()
-    local ncs = #callstack
-    figuredata = callstack[ncs]
-    callstack[ncs] = nil
-    if ncs == 1 then
-        statistics.stoptiming(figures)
-    end
+    figuredata = remove(callstack) or figuredata
+    statistics.stoptiming(figures)
+    return figuredata
+end
+
+function figures.current()
+    return figuredata -- callstack[#callstack]
 end
 
 function figures.get(category,tag,default)
@@ -349,10 +349,6 @@ function figures.tprint(category,tag,default)
     context(figures.get(category,tag,default))
 end
 
-function figures.current()
-    return callstack[#callstack]
-end
-
 local defaultformat = "pdf"
 local defaultprefix = "m_k_i_v_"
 
@@ -812,9 +808,11 @@ function existers.generic(askedname,resolve)
     end
     return result
 end
+
 function checkers.generic(data)
     local dr, du, ds = data.request, data.used, data.status
     local name, page, size, color = du.fullname or "unknown generic", du.page or dr.page, dr.size or "crop", dr.color or "natural"
+    local mask = dr.mask or "none"
     local conversion = dr.conversion
     local resolution = dr.resolution
     if not conversion or conversion == "" then
@@ -824,10 +822,12 @@ function checkers.generic(data)
         resolution = "unknown"
     end
     local hash = name .. "->" .. page .. "->" .. size .. "->" .. color .. "->" .. conversion .. "->" .. resolution
+        .. "->" .. mask
     local figure = figures.loaded[hash]
     if figure == nil then
         figure = img.new { filename = name, page = page, pagebox = dr.size }
         codeinjections.setfigurecolorspace(data,figure)
+        codeinjections.setfiguremask(data,figure)
         figure = (figure and img.scan(figure)) or false
         local f, d = codeinjections.setfigurealternative(data,figure)
         figure, data = f or figure, d or data
@@ -855,6 +855,7 @@ function checkers.generic(data)
     end
     return data
 end
+
 function includers.generic(data)
     local dr, du, ds = data.request, data.used, data.status
     -- here we set the 'natural dimensions'
diff --git a/tex/context/base/grph-inc.mkiv b/tex/context/base/grph-inc.mkiv
index 80a9c3187..8304c393e 100644
--- a/tex/context/base/grph-inc.mkiv
+++ b/tex/context/base/grph-inc.mkiv
@@ -148,6 +148,7 @@
    \let\@@efpage      \!!zerocount
    \let\@@efobject    \@@exobject
    \let\@@efdisplay   \empty
+   \let\@@efmask      \empty
    %
    \let\@@efpreset    \v!yes
    \let\@@efsplit     \empty
@@ -255,6 +256,7 @@
         controls   = "\@@efcontrols",
         preview    = "\@@efpreview",
         display    = "\@@efdisplay",
+        mask       = "\@@efmask",
         conversion = "\@@efconversion",
         resolution = "\@@efresolution",
         color      = "\internalspotcolorparent\@@efcolor", % hack is needed
@@ -372,7 +374,7 @@
 \def\dogetfiguredimensions[#1][#2]%
   {\startnointerference
      \settrue\testexternalfigureonly
-     \externalfigure[#1][#2,\c!display=,\c!object=\v!no]%
+     \externalfigure[#1][#2,\c!display=,\c!mask=,\c!object=\v!no]%
    \stopnointerference}
 
 \let\getfiguredimensionsonly\getfiguredimensions
@@ -393,7 +395,7 @@
      \testexternalfigureonly
      \setfalse\externalfigureflush % == test ?
      \externalfigure[#1][#2][#3]% or \doexternalfigure
-     \externalfigure[#1][#2,\c!display=,\c!object=\v!no]%
+     \externalfigure[#1][#2,\c!display=,\c!mask=,\c!object=\v!no]%
    \stopnointerference}
 
 % helpers (will be replaced when xforms are accessible at the lua end)
diff --git a/tex/context/base/mult-de.mkii b/tex/context/base/mult-de.mkii
index 6c95f4aaa..aec2b075a 100644
--- a/tex/context/base/mult-de.mkii
+++ b/tex/context/base/mult-de.mkii
@@ -272,6 +272,7 @@
 \setinterfacevariable{marginedge}{marginalkante}
 \setinterfacevariable{margintitle}{marginaltitel}
 \setinterfacevariable{marking}{beschriftung}
+\setinterfacevariable{mask}{mask}
 \setinterfacevariable{mathalignment}{mathalignment}
 \setinterfacevariable{mathcases}{mathcases}
 \setinterfacevariable{mathmatrix}{mathmatrix}
@@ -981,6 +982,7 @@
 \setinterfaceconstant{textstate}{textstatus}
 \setinterfaceconstant{textstyle}{textstil}
 \setinterfaceconstant{textwidth}{textbreite}
+\setinterfaceconstant{threshold}{threshold}
 \setinterfaceconstant{title}{titel}
 \setinterfaceconstant{titlecolor}{titelfarbe}
 \setinterfaceconstant{titlecommand}{titlecommand}
diff --git a/tex/context/base/mult-def.lua b/tex/context/base/mult-def.lua
index fd1837147..69d1edb84 100644
--- a/tex/context/base/mult-def.lua
+++ b/tex/context/base/mult-def.lua
@@ -10483,6 +10483,9 @@ return {
    ["pe"]="عرض‌متن",
    ["ro"]="latimetext",
   },
+  ["threshold"]={
+   ["en"]="threshold", -- rather international term
+  },
   ["title"]={
    ["cs"]="titul",
    ["de"]="titel",
@@ -12594,6 +12597,10 @@ return {
    ["pe"]="نمایش",
    ["ro"]="display",
   },
+  ["mask"]={
+   ["en"]="mask",
+   ["nl"]="masker",
+  },
   ["dot"]={
    ["cs"]="tecka",
    ["de"]="punkt",
diff --git a/tex/context/base/mult-en.mkii b/tex/context/base/mult-en.mkii
index 383e731a1..608cd6706 100644
--- a/tex/context/base/mult-en.mkii
+++ b/tex/context/base/mult-en.mkii
@@ -272,6 +272,7 @@
 \setinterfacevariable{marginedge}{marginedge}
 \setinterfacevariable{margintitle}{margintitle}
 \setinterfacevariable{marking}{marking}
+\setinterfacevariable{mask}{mask}
 \setinterfacevariable{mathalignment}{mathalignment}
 \setinterfacevariable{mathcases}{mathcases}
 \setinterfacevariable{mathmatrix}{mathmatrix}
@@ -981,6 +982,7 @@
 \setinterfaceconstant{textstate}{textstate}
 \setinterfaceconstant{textstyle}{textstyle}
 \setinterfaceconstant{textwidth}{textwidth}
+\setinterfaceconstant{threshold}{threshold}
 \setinterfaceconstant{title}{title}
 \setinterfaceconstant{titlecolor}{titlecolor}
 \setinterfaceconstant{titlecommand}{titlecommand}
diff --git a/tex/context/base/mult-fr.mkii b/tex/context/base/mult-fr.mkii
index a686e2811..283f66df6 100644
--- a/tex/context/base/mult-fr.mkii
+++ b/tex/context/base/mult-fr.mkii
@@ -272,6 +272,7 @@
 \setinterfacevariable{marginedge}{bordmarge}
 \setinterfacevariable{margintitle}{titremarge}
 \setinterfacevariable{marking}{marquage}
+\setinterfacevariable{mask}{mask}
 \setinterfacevariable{mathalignment}{mathalignment}
 \setinterfacevariable{mathcases}{mathcases}
 \setinterfacevariable{mathmatrix}{mathmatrix}
@@ -981,6 +982,7 @@
 \setinterfaceconstant{textstate}{etattexte}
 \setinterfaceconstant{textstyle}{styletexte}
 \setinterfaceconstant{textwidth}{largeurtexte}
+\setinterfaceconstant{threshold}{threshold}
 \setinterfaceconstant{title}{titre}
 \setinterfaceconstant{titlecolor}{couleurtitre}
 \setinterfaceconstant{titlecommand}{titlecommand}
diff --git a/tex/context/base/mult-it.mkii b/tex/context/base/mult-it.mkii
index 65061f61c..6dbedaa41 100644
--- a/tex/context/base/mult-it.mkii
+++ b/tex/context/base/mult-it.mkii
@@ -272,6 +272,7 @@
 \setinterfacevariable{marginedge}{bordomargine}
 \setinterfacevariable{margintitle}{titoloinmargine}
 \setinterfacevariable{marking}{marcatura}
+\setinterfacevariable{mask}{mask}
 \setinterfacevariable{mathalignment}{mathalignment}
 \setinterfacevariable{mathcases}{mathcases}
 \setinterfacevariable{mathmatrix}{mathmatrix}
@@ -981,6 +982,7 @@
 \setinterfaceconstant{textstate}{statotesto}
 \setinterfaceconstant{textstyle}{stiletesto}
 \setinterfaceconstant{textwidth}{ampiezzatesto}
+\setinterfaceconstant{threshold}{threshold}
 \setinterfaceconstant{title}{titolo}
 \setinterfaceconstant{titlecolor}{coloretitolo}
 \setinterfaceconstant{titlecommand}{titlecommand}
diff --git a/tex/context/base/mult-nl.mkii b/tex/context/base/mult-nl.mkii
index 4676f1951..21778c3a4 100644
--- a/tex/context/base/mult-nl.mkii
+++ b/tex/context/base/mult-nl.mkii
@@ -272,6 +272,7 @@
 \setinterfacevariable{marginedge}{kantlijn}
 \setinterfacevariable{margintitle}{margetitel}
 \setinterfacevariable{marking}{markering}
+\setinterfacevariable{mask}{masker}
 \setinterfacevariable{mathalignment}{wiskundeuitlijnen}
 \setinterfacevariable{mathcases}{mathcases}
 \setinterfacevariable{mathmatrix}{wiskundematrix}
@@ -981,6 +982,7 @@
 \setinterfaceconstant{textstate}{tekststatus}
 \setinterfaceconstant{textstyle}{tekstletter}
 \setinterfaceconstant{textwidth}{tekstbreedte}
+\setinterfaceconstant{threshold}{threshold}
 \setinterfaceconstant{title}{titel}
 \setinterfaceconstant{titlecolor}{titelkleur}
 \setinterfaceconstant{titlecommand}{titelcommando}
diff --git a/tex/context/base/mult-pe.mkii b/tex/context/base/mult-pe.mkii
index da48701e4..862fac2c2 100644
--- a/tex/context/base/mult-pe.mkii
+++ b/tex/context/base/mult-pe.mkii
@@ -272,6 +272,7 @@
 \setinterfacevariable{marginedge}{لبه‌حاشیه}
 \setinterfacevariable{margintitle}{عنوان‌حاشیه}
 \setinterfacevariable{marking}{نشانه‌گذاری}
+\setinterfacevariable{mask}{mask}
 \setinterfacevariable{mathalignment}{تنظیم‌ریاضی}
 \setinterfacevariable{mathcases}{حالتهای‌ریاضی}
 \setinterfacevariable{mathmatrix}{ماتریش‌ریاضی}
@@ -981,6 +982,7 @@
 \setinterfaceconstant{textstate}{وضعیت‌متن}
 \setinterfaceconstant{textstyle}{سبک‌متن}
 \setinterfaceconstant{textwidth}{عرض‌متن}
+\setinterfaceconstant{threshold}{threshold}
 \setinterfaceconstant{title}{عنوان}
 \setinterfaceconstant{titlecolor}{رنگ‌عنوان}
 \setinterfaceconstant{titlecommand}{فرمان‌عنوان}
diff --git a/tex/context/base/mult-ro.mkii b/tex/context/base/mult-ro.mkii
index 83943d3fa..8e04db7c0 100644
--- a/tex/context/base/mult-ro.mkii
+++ b/tex/context/base/mult-ro.mkii
@@ -272,6 +272,7 @@
 \setinterfacevariable{marginedge}{marginebordura}
 \setinterfacevariable{margintitle}{titlumarginal}
 \setinterfacevariable{marking}{marcaje}
+\setinterfacevariable{mask}{mask}
 \setinterfacevariable{mathalignment}{mathalignment}
 \setinterfacevariable{mathcases}{mathcases}
 \setinterfacevariable{mathmatrix}{mathmatrix}
@@ -981,6 +982,7 @@
 \setinterfaceconstant{textstate}{staretext}
 \setinterfaceconstant{textstyle}{stiltext}
 \setinterfaceconstant{textwidth}{latimetext}
+\setinterfaceconstant{threshold}{threshold}
 \setinterfaceconstant{title}{titlu}
 \setinterfaceconstant{titlecolor}{culoaretitlu}
 \setinterfaceconstant{titlecommand}{titlecommand}
diff --git a/tex/context/base/node-ini.lua b/tex/context/base/node-ini.lua
index f0b9b83fa..21e7bc8cb 100644
--- a/tex/context/base/node-ini.lua
+++ b/tex/context/base/node-ini.lua
@@ -57,6 +57,7 @@ also ignore the empty nodes. [This is obsolete!]</p>
 local traverse, traverse_id = node.traverse, node.traverse_id
 local free_node, remove_node = node.free, node.remove
 local insert_node_before, insert_node_after = node.insert_before, node.insert_after
+local slide_nodes = node.slide
 
 local allocate = utilities.storage.allocate
 
@@ -346,16 +347,26 @@ function nodes.reference(n)
     return lpegmatch(reference,tostring(n))
 end
 
+function nodes.link(n,...) -- blobs ?
+    if type(n) ~= "table" then
+        n = { n, ... }
+    end
+    local head = n[1]
+    local tail = slide_nodes(head)
+    for i=2,#n do
+        local ni = n[i]
+        tail.next = ni
+        ni.prev = tail
+        tail = slide_nodes(ni)
+    end
+    return head
+end
+
 --
 
 if not node.next then
 
-    function node.next(n)
-        return n and n.next
-    end
-
-    function node.prev(n)
-        return n and n.prev
-    end
+    function node.next(n) return n and n.next end
+    function node.prev(n) return n and n.prev end
 
 end
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index f818f6229..99681aeb6 100644
Binary files a/tex/context/base/status-files.pdf and b/tex/context/base/status-files.pdf differ
diff --git a/tex/context/base/syst-lua.lua b/tex/context/base/syst-lua.lua
index 7c619b6d3..8a5a9531c 100644
--- a/tex/context/base/syst-lua.lua
+++ b/tex/context/base/syst-lua.lua
@@ -91,17 +91,17 @@ end
 
 local splitter = lpegsplitat(S(". "))
 
-function commands.doifolderversionelse(one,two) -- no checking done
+function commands.doifolderversionelse(one,two) -- one >= two
     if not two then
         one, two = environment.version, one
     elseif one == "" then
         one = environment.version
     end
-    local y_1, m_1, d_1 = lpeg.match(splitter,one)
-    local y_2, m_2, d_2 = lpeg.match(splitter,two)
-    commands.testcase ( not (
-        (tonumber(y_2) or  0) >= (tonumber(y_1) or 0) and
-        (tonumber(m_2) or 99) >= (tonumber(m_1) or 0) and
-        (tonumber(d_2) or 99) >= (tonumber(d_1) or 0)
-    ) )
+    local y_1, m_1, d_1 = lpegmatch(splitter,one)
+    local y_2, m_2, d_2 = lpegmatch(splitter,two)
+    commands.testcase (
+        (tonumber(y_1) or 0) >= (tonumber(y_2) or 0) and
+        (tonumber(m_1) or 0) >= (tonumber(m_2) or 0) and
+        (tonumber(d_1) or 0) >= (tonumber(d_1) or 0)
+    )
 end
diff --git a/tex/context/base/typo-cln.lua b/tex/context/base/typo-cln.lua
index 2327ef6be..a8542c1a1 100644
--- a/tex/context/base/typo-cln.lua
+++ b/tex/context/base/typo-cln.lua
@@ -57,13 +57,13 @@ local function process(namespace,attribute,head)
                     -- some day, not much change that \SS ends up here
                 else
                     n.char = upper
-                    inline = true
                     done = true
                     if trace_autocase then
                         report_autocase("")
                     end
                 end
             end
+            inline = true
         end
     end
     return head, done
diff --git a/tex/context/interface/keys-cs.xml b/tex/context/interface/keys-cs.xml
index 8aba0cca6..2a2fbe2ec 100644
--- a/tex/context/interface/keys-cs.xml
+++ b/tex/context/interface/keys-cs.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='textovahrana'/>
 		<cd:variable name='margintitle' value='titulmarginalie'/>
 		<cd:variable name='marking' value='znaceni'/>
+		<cd:variable name='mask' value='mask'/>
 		<cd:variable name='mathalignment' value='mathalignment'/>
 		<cd:variable name='mathcases' value='mathcases'/>
 		<cd:variable name='mathmatrix' value='mathmatrix'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='statustextu'/>
 		<cd:constant name='textstyle' value='styltextu'/>
 		<cd:constant name='textwidth' value='sirkatextu'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='titul'/>
 		<cd:constant name='titlecolor' value='barvatitulek'/>
 		<cd:constant name='titlecommand' value='titlecommand'/>
diff --git a/tex/context/interface/keys-de.xml b/tex/context/interface/keys-de.xml
index fefab4d55..3e67c7286 100644
--- a/tex/context/interface/keys-de.xml
+++ b/tex/context/interface/keys-de.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='marginalkante'/>
 		<cd:variable name='margintitle' value='marginaltitel'/>
 		<cd:variable name='marking' value='beschriftung'/>
+		<cd:variable name='mask' value='mask'/>
 		<cd:variable name='mathalignment' value='mathalignment'/>
 		<cd:variable name='mathcases' value='mathcases'/>
 		<cd:variable name='mathmatrix' value='mathmatrix'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='textstatus'/>
 		<cd:constant name='textstyle' value='textstil'/>
 		<cd:constant name='textwidth' value='textbreite'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='titel'/>
 		<cd:constant name='titlecolor' value='titelfarbe'/>
 		<cd:constant name='titlecommand' value='titlecommand'/>
diff --git a/tex/context/interface/keys-en.xml b/tex/context/interface/keys-en.xml
index 34ed39349..d152c78e9 100644
--- a/tex/context/interface/keys-en.xml
+++ b/tex/context/interface/keys-en.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='marginedge'/>
 		<cd:variable name='margintitle' value='margintitle'/>
 		<cd:variable name='marking' value='marking'/>
+		<cd:variable name='mask' value='mask'/>
 		<cd:variable name='mathalignment' value='mathalignment'/>
 		<cd:variable name='mathcases' value='mathcases'/>
 		<cd:variable name='mathmatrix' value='mathmatrix'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='textstate'/>
 		<cd:constant name='textstyle' value='textstyle'/>
 		<cd:constant name='textwidth' value='textwidth'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='title'/>
 		<cd:constant name='titlecolor' value='titlecolor'/>
 		<cd:constant name='titlecommand' value='titlecommand'/>
diff --git a/tex/context/interface/keys-fr.xml b/tex/context/interface/keys-fr.xml
index f2e5990be..0725ecc62 100644
--- a/tex/context/interface/keys-fr.xml
+++ b/tex/context/interface/keys-fr.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='bordmarge'/>
 		<cd:variable name='margintitle' value='titremarge'/>
 		<cd:variable name='marking' value='marquage'/>
+		<cd:variable name='mask' value='mask'/>
 		<cd:variable name='mathalignment' value='mathalignment'/>
 		<cd:variable name='mathcases' value='mathcases'/>
 		<cd:variable name='mathmatrix' value='mathmatrix'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='etattexte'/>
 		<cd:constant name='textstyle' value='styletexte'/>
 		<cd:constant name='textwidth' value='largeurtexte'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='titre'/>
 		<cd:constant name='titlecolor' value='couleurtitre'/>
 		<cd:constant name='titlecommand' value='titlecommand'/>
diff --git a/tex/context/interface/keys-it.xml b/tex/context/interface/keys-it.xml
index 313d27e09..e564d79f3 100644
--- a/tex/context/interface/keys-it.xml
+++ b/tex/context/interface/keys-it.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='bordomargine'/>
 		<cd:variable name='margintitle' value='titoloinmargine'/>
 		<cd:variable name='marking' value='marcatura'/>
+		<cd:variable name='mask' value='mask'/>
 		<cd:variable name='mathalignment' value='mathalignment'/>
 		<cd:variable name='mathcases' value='mathcases'/>
 		<cd:variable name='mathmatrix' value='mathmatrix'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='statotesto'/>
 		<cd:constant name='textstyle' value='stiletesto'/>
 		<cd:constant name='textwidth' value='ampiezzatesto'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='titolo'/>
 		<cd:constant name='titlecolor' value='coloretitolo'/>
 		<cd:constant name='titlecommand' value='titlecommand'/>
diff --git a/tex/context/interface/keys-nl.xml b/tex/context/interface/keys-nl.xml
index f486a03c0..eb13b9861 100644
--- a/tex/context/interface/keys-nl.xml
+++ b/tex/context/interface/keys-nl.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='kantlijn'/>
 		<cd:variable name='margintitle' value='margetitel'/>
 		<cd:variable name='marking' value='markering'/>
+		<cd:variable name='mask' value='masker'/>
 		<cd:variable name='mathalignment' value='wiskundeuitlijnen'/>
 		<cd:variable name='mathcases' value='mathcases'/>
 		<cd:variable name='mathmatrix' value='wiskundematrix'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='tekststatus'/>
 		<cd:constant name='textstyle' value='tekstletter'/>
 		<cd:constant name='textwidth' value='tekstbreedte'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='titel'/>
 		<cd:constant name='titlecolor' value='titelkleur'/>
 		<cd:constant name='titlecommand' value='titelcommando'/>
diff --git a/tex/context/interface/keys-pe.xml b/tex/context/interface/keys-pe.xml
index a6b3024f6..8c7102906 100644
--- a/tex/context/interface/keys-pe.xml
+++ b/tex/context/interface/keys-pe.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='لبه‌حاشیه'/>
 		<cd:variable name='margintitle' value='عنوان‌حاشیه'/>
 		<cd:variable name='marking' value='نشانه‌گذاری'/>
+		<cd:variable name='mask' value='mask'/>
 		<cd:variable name='mathalignment' value='تنظیم‌ریاضی'/>
 		<cd:variable name='mathcases' value='حالتهای‌ریاضی'/>
 		<cd:variable name='mathmatrix' value='ماتریش‌ریاضی'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='وضعیت‌متن'/>
 		<cd:constant name='textstyle' value='سبک‌متن'/>
 		<cd:constant name='textwidth' value='عرض‌متن'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='عنوان'/>
 		<cd:constant name='titlecolor' value='رنگ‌عنوان'/>
 		<cd:constant name='titlecommand' value='فرمان‌عنوان'/>
diff --git a/tex/context/interface/keys-ro.xml b/tex/context/interface/keys-ro.xml
index 7e08e8a8b..b081430d8 100644
--- a/tex/context/interface/keys-ro.xml
+++ b/tex/context/interface/keys-ro.xml
@@ -275,6 +275,7 @@
 		<cd:variable name='marginedge' value='marginebordura'/>
 		<cd:variable name='margintitle' value='titlumarginal'/>
 		<cd:variable name='marking' value='marcaje'/>
+		<cd:variable name='mask' value='mask'/>
 		<cd:variable name='mathalignment' value='mathalignment'/>
 		<cd:variable name='mathcases' value='mathcases'/>
 		<cd:variable name='mathmatrix' value='mathmatrix'/>
@@ -987,6 +988,7 @@
 		<cd:constant name='textstate' value='staretext'/>
 		<cd:constant name='textstyle' value='stiltext'/>
 		<cd:constant name='textwidth' value='latimetext'/>
+		<cd:constant name='threshold' value='threshold'/>
 		<cd:constant name='title' value='titlu'/>
 		<cd:constant name='titlecolor' value='culoaretitlu'/>
 		<cd:constant name='titlecommand' value='titlecommand'/>
diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua
index dc44eecfb..ace911714 100644
--- a/tex/generic/context/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
 -- merged file : luatex-fonts-merged.lua
 -- parent file : luatex-fonts.lua
--- merge date  : 02/15/11 16:11:51
+-- merge date  : 02/16/11 10:54:11
 
 do -- begin closure to overcome local limits and interference
 
-- 
cgit v1.2.3