From d3c8d09b0a9cd2e1f2fd2680b6a6bb7369c67a7a Mon Sep 17 00:00:00 2001
From: Context Git Mirror Bot <phg42.2a@gmail.com>
Date: Wed, 15 Apr 2015 02:15:05 +0200
Subject: 2015-04-15 01:46:00

---
 tex/context/base/buff-ver.lua                      |   1 -
 tex/context/base/buff-ver.mkiv                     |   9 +-
 tex/context/base/cont-new.mkiv                     |   2 +-
 tex/context/base/context-version.pdf               | Bin 4187 -> 4181 bytes
 tex/context/base/context.mkiv                      |   2 +-
 tex/context/base/font-ini.mkvi                     |   7 +
 tex/context/base/m-chart.mkvi                      |   2 +-
 tex/context/base/pack-box.mkiv                     |   2 +-
 tex/context/base/pack-com.mkiv                     |   7 +-
 tex/context/base/pack-lyr.mkiv                     |  14 +-
 tex/context/base/pack-mrl.mkiv                     |   2 +-
 tex/context/base/pack-rul.mkiv                     |  24 +++-
 tex/context/base/page-mbk.mkvi                     |   2 +-
 tex/context/base/spac-ali.mkiv                     |   6 +
 tex/context/base/status-files.pdf                  | Bin 24486 -> 24489 bytes
 tex/context/base/status-lua.pdf                    | Bin 249951 -> 249882 bytes
 tex/context/base/strc-ini.lua                      |   2 +-
 tex/context/base/strc-lst.lua                      |   5 +-
 tex/context/base/strc-mat.lua                      |  48 ++++---
 tex/context/base/strc-not.mkvi                     |   6 +-
 tex/context/base/strc-ref.lua                      |  30 +++--
 tex/context/base/strc-ref.mkvi                     |  16 +--
 tex/context/base/strc-syn.lua                      | 145 ++++++++++++---------
 tex/context/base/strc-syn.mkiv                     |  40 +++---
 tex/context/base/strc-tag.lua                      |   2 +-
 tex/context/base/tabl-tab.mkiv                     |   2 +-
 tex/context/base/tabl-xtb.mkvi                     |   3 +-
 tex/generic/context/luatex/luatex-fonts-merged.lua |   2 +-
 28 files changed, 224 insertions(+), 157 deletions(-)

(limited to 'tex')

diff --git a/tex/context/base/buff-ver.lua b/tex/context/base/buff-ver.lua
index 6dd9d8ebe..0168c551d 100644
--- a/tex/context/base/buff-ver.lua
+++ b/tex/context/base/buff-ver.lua
@@ -800,7 +800,6 @@ implement {
         {
             { "data"    },
             { "tab"     },
-            { "option"  },
             { "method"  },
             { "compact" },
             { "nature"  },
diff --git a/tex/context/base/buff-ver.mkiv b/tex/context/base/buff-ver.mkiv
index ace149184..1581973d1 100644
--- a/tex/context/base/buff-ver.mkiv
+++ b/tex/context/base/buff-ver.mkiv
@@ -107,7 +107,7 @@
   {\hskip\doifelseoddpage{\typingparameter\c!oddmargin}{\typingparameter\c!evenmargin}\relax}
 
 \def\buff_verbatim_initialize_typing_one
-  {\switchtobodyfont[\typingparameter\c!bodyfont]% can be low level call
+  {\usebodyfontparameter\typingparameter
    \scratchskip\typingparameter\c!oddmargin\relax
    \ifzeropt\scratchskip \else
      \let\buff_verbatim_set_line_margin\buff_verbatim_set_line_margin_indeed
@@ -125,8 +125,7 @@
    \else\ifx\p_buff_option\empty
      \usetypingstyleandcolor\c!style\c!color
    \fi\fi
- % will become: \usealignparameter\typingparameter
-   \doifsomething{\typingparameter\c!align}{\setupalign[\typingparameter\c!align]}} % use fast one
+   \usealignparameter\typingparameter}
 
 \def\buff_verbatim_initialize_typing_two
   {\spaceskip.5\emwidth\relax
@@ -344,7 +343,7 @@
    \clf_type
      data    {\detokenize{#1}}%
      tab     {\typeparameter\c!tab}%
-     option  {\p_buff_option}%
+     method  {\p_buff_option}%
      compact {\typeparameter\c!compact}% % none | all | last (all needed in tabulate etc for manuals)
      escape  {\typeparameter\c!escape}%  % new but rather useless imo (escaping in general is not used much)
    % nature  {inline}% is default
@@ -359,7 +358,7 @@
    \clf_type
      data   {\detokenize{#1}}%
      tab    {\typeparameter\c!tab}%
-     option {\p_buff_option}% % extra visualizer (maybe: nested,\typeparameter\c!option)
+     method {\p_buff_option}% % extra visualizer (maybe: nested,\typeparameter\c!option)
      escape {\typeparameter\c!escape}%  % new but rather useless imo (escaping in general is not used much)
    % nature {inline}% is default
      method {nested}%
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 828782e01..c84ac47c9 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{2015.04.14 19:03}
+\newcontextversion{2015.04.15 01:44}
 
 %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 e81738ba5..876060740 100644
Binary files a/tex/context/base/context-version.pdf and b/tex/context/base/context-version.pdf differ
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 676871e7c..c74f81ba7 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -39,7 +39,7 @@
 %D up and the dependencies are more consistent.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2015.04.14 19:03}
+\edef\contextversion{2015.04.15 01:44}
 \edef\contextkind   {beta}
 
 %D For those who want to use this:
diff --git a/tex/context/base/font-ini.mkvi b/tex/context/base/font-ini.mkvi
index c780ee997..c04952a9e 100644
--- a/tex/context/base/font-ini.mkvi
+++ b/tex/context/base/font-ini.mkvi
@@ -2173,6 +2173,13 @@
 \unexpanded\def\switchtobodyfont[#specification]% could become an ifx
   {\doifsomething{#specification}{\font_basics_switchtobodyfont{#specification}}}
 
+
+\unexpanded\def\usebodyfontparameter#1%
+  {\edef\m_font_bodyfont_asked{#1\c!bodyfont}%
+   \ifx\m_font_bodyfont_asked\empty\else
+     \font_basics_switchtobodyfont\m_font_bodyfont_asked
+   \fi}
+
 \def\font_helpers_switch_bodyfont_step
   {\font_basics_switch_points\m_font_step
    \font_basics_switch_style \fontstyle}
diff --git a/tex/context/base/m-chart.mkvi b/tex/context/base/m-chart.mkvi
index 877a0fa37..a0c8b2244 100644
--- a/tex/context/base/m-chart.mkvi
+++ b/tex/context/base/m-chart.mkvi
@@ -192,7 +192,7 @@
      \insidefloattrue
      \dontcomplain
      \setupFLOWchart[#settings]%
-     \setupbodyfont[\FLOWchartparameter\c!bodyfont]%
+     \usebodyfontparameter\FLOWchartparameter
      \ctxcommand{flow_make_chart {
         chart = {
             name            = "#name",
diff --git a/tex/context/base/pack-box.mkiv b/tex/context/base/pack-box.mkiv
index 3fb56d799..6e3bab6f4 100644
--- a/tex/context/base/pack-box.mkiv
+++ b/tex/context/base/pack-box.mkiv
@@ -680,7 +680,7 @@
    \dowithnextboxcontent
      {\forgetall
       \hsize\directdummyparameter\c!width
-      \normalexpanded{\setupalign[\directdummyparameter\c!align]}%
+      \usealignparameter\directdummyparameter
       \dousestyleparameter{\directdummyparameter\c!style}}
      {\setlayer[#1][#2]{\strut\dousecolorparameter{\directdummyparameter\c!color}\flushnextbox}% maybe expand the color
       \egroup}%
diff --git a/tex/context/base/pack-com.mkiv b/tex/context/base/pack-com.mkiv
index 7f3fcb538..b734d6028 100644
--- a/tex/context/base/pack-com.mkiv
+++ b/tex/context/base/pack-com.mkiv
@@ -221,7 +221,6 @@
    \edef\p_height  {\combinationparameter\c!height}%
    \edef\p_width   {\combinationparameter\c!width}%
    \edef\p_location{\combinationparameter\c!location}%
-   \edef\p_align   {\combinationparameter\c!align}%
    \edef\p_distance{\combinationparameter\c!distance}%
    %
    \pack_combinations_location_reset
@@ -295,7 +294,7 @@
 \def\pack_combinations_alternative_label_indeed
   {\dowithnextboxcs\pack_combinations_pickup_caption\vtop\bgroup
      \hsize\wd\b_pack_combinations_content
-     \ifx\p_align\empty\else\setupalign[\p_align]\fi
+     \usealignparameter\combinationparameter
      \usecombinationstyleandcolor\c!style\c!color
      \begstrut
        \normalexpanded{\strc_labels_command{\v!combination\ifx\currentcombination\empty\else:\currentcombination\fi}}%
@@ -329,7 +328,7 @@
    \else
      % todo: \p_pack_combinations_alternative\v!none: no style, strut etc
      \hsize\wd\b_pack_combinations_content
-     \ifx\p_align\empty\else\setupalign[\p_align]\fi
+     \usealignparameter\combinationparameter
      \usecombinationstyleandcolor\c!style\c!color
      \bgroup
      \aftergroup\endstrut
@@ -783,7 +782,7 @@
    \fi}
 
 \def\pack_pairedboxes_between
-  {\switchtobodyfont[\pairedboxparameter\c!bodyfont]% split under same regime
+  {\usebodyfontparameter\pairedboxparameter
    \setbox\b_pack_pairedboxes_first\box\nextbox
    \ifconditional\c_pack_pairedboxes_horizontal
      \pack_pairedboxes_between_horizontal
diff --git a/tex/context/base/pack-lyr.mkiv b/tex/context/base/pack-lyr.mkiv
index a274a8d23..a847dec67 100644
--- a/tex/context/base/pack-lyr.mkiv
+++ b/tex/context/base/pack-lyr.mkiv
@@ -674,7 +674,7 @@
    % we have conflicting demands: some mechanisms want ll anchoring .. I need to figure this out
    % an dmaybe we will have 'origin=bottom' or so
    \setbox\nextbox
-   \ifx\p_pack_layers_option\v!test \ruledvbox \else \vbox \fi \ifx\p_pack_layers_method\v!overlay to \overlayheight \fi \layoutcomponentboxattribute
+   \ifx\p_pack_layers_option\v!test \ruledvbox \else \vbox \fi \ifx\p_pack_layers_method\v!overlay to \d_overlay_height \fi \layoutcomponentboxattribute
      {\pack_layers_top_fill
       \hbox \ifx\p_pack_layers_method\v!overlay to \d_overlay_width \fi
         {\box\nextbox
@@ -723,12 +723,20 @@
 
 \unexpanded\def\composedlayer#1{\flushlayer[#1]}
 
+% \unexpanded\def\tightlayer[#1]%
+%   {\hbox
+%      {\def\currentlayer{#1}% todo: left/right
+%       \setbox\nextbox\emptybox
+%       \hsize\layerparameter\c!width
+%       \vsize\layerparameter\c!height
+%       \composedlayer{#1}}}
+
 \unexpanded\def\tightlayer[#1]%
   {\hbox
      {\def\currentlayer{#1}% todo: left/right
       \setbox\nextbox\emptybox
-      \hsize\layerparameter\c!width
-      \vsize\layerparameter\c!height
+      \d_overlay_width \layerparameter\c!width
+      \d_overlay_height\layerparameter\c!height
       \composedlayer{#1}}}
 
 \let\placelayer\flushlayer
diff --git a/tex/context/base/pack-mrl.mkiv b/tex/context/base/pack-mrl.mkiv
index 071059565..a97c9e6f8 100644
--- a/tex/context/base/pack-mrl.mkiv
+++ b/tex/context/base/pack-mrl.mkiv
@@ -631,7 +631,7 @@
    \def\pack_textrule_nop_indeed{\csname\??textrulealternatives\v!middle\endcsname}%
    \csname\??textrulealternatives\v!top\endcsname{#1}%
    \bgroup
-   \doifsomething{\directtextrulesparameter\c!bodyfont}{\switchtobodyfont[\directtextrulesparameter\c!bodyfont]}}
+   \usebodyfontparameter\directtextrulesparameter}
 
 \unexpanded\def\stoptextrule
   {\par
diff --git a/tex/context/base/pack-rul.mkiv b/tex/context/base/pack-rul.mkiv
index 9a8c2784e..141d741cf 100644
--- a/tex/context/base/pack-rul.mkiv
+++ b/tex/context/base/pack-rul.mkiv
@@ -440,11 +440,21 @@
 \newdimen\d_overlay_offset
 \newdimen\d_overlay_linewidth
 
-\def\overlaywidth      {\the\d_overlay_width    \space} % We preset the variables
-\def\overlayheight     {\the\d_overlay_height   \space} % to some reasonable default
-\def\overlaydepth      {\the\d_overlay_depth    \space} % values.
-\def\overlayoffset     {\the\d_overlay_offset   \space} % of the frame can be (are)
-\def\overlaylinewidth  {\the\d_overlay_linewidth\space} % set somewhere else.
+% expandable ... in a future version the space will go (in my one can use Overlay*)
+
+\def\overlaywidth        {\the\d_overlay_width    \space} % We preset the variables
+\def\overlayheight       {\the\d_overlay_height   \space} % to some reasonable default
+\def\overlaydepth        {\the\d_overlay_depth    \space} % values.
+\def\overlayoffset       {\the\d_overlay_offset   \space} % of the frame can be (are)
+\def\overlaylinewidth    {\the\d_overlay_linewidth\space} % set somewhere else.
+
+% public but kind of protected
+
+\def\usedoverlaywidth    {\dimexpr\d_overlay_width    \relax}
+\def\usedoverlayheight   {\dimexpr\d_overlay_height   \relax}
+\def\usedoverlaydepth    {\dimexpr\d_overlay_depth    \relax}
+\def\usedoverlayoffset   {\dimexpr\d_overlay_offset   \relax}
+\def\usedoverlaylinewidth{\dimexpr\d_overlay_linewidth\relax}
 
 %D The next register is used to initialize overlays.
 
@@ -2662,7 +2672,7 @@
      \startboxedcontent
        \hsize\localhsize
     %  \insidefloattrue % ? better
-       \normalexpanded{\switchtobodyfont[\framedtextparameter\c!bodyfont]}%
+       \usebodyfontparameter\framedtextparameter
        \letframedtextparameter\c!strut\v!no
        \inheritedframedtextframed\bgroup
          \let\\=\endgraf
@@ -2778,7 +2788,7 @@
    \dosingleempty\pack_framed_text_start_direct}
 
 \def\pack_framed_text_start_direct[#1]%
-  {\normalexpanded{\switchtobodyfont[\framedtextparameter\c!bodyfont]}%
+  {\usebodyfontparameter\framedtextparameter
    \letframedtextparameter\c!strut\v!no
    \iffirstargument
      \setupcurrentframedtext[#1]%
diff --git a/tex/context/base/page-mbk.mkvi b/tex/context/base/page-mbk.mkvi
index 9e3e57193..8038771d9 100644
--- a/tex/context/base/page-mbk.mkvi
+++ b/tex/context/base/page-mbk.mkvi
@@ -98,7 +98,7 @@
        \unvbox\b_page_margin_blocks
        \marginblockparameter\c!inbetween
      \fi
-     \setupalign[\marginblockparameter\c!align]%
+     \usealignparameter\marginblockparameter
      \usemarginblockstyleandcolor\c!style\c!color
      \begstrut
      \ignorespaces}
diff --git a/tex/context/base/spac-ali.mkiv b/tex/context/base/spac-ali.mkiv
index 90f980341..fbcce89c4 100644
--- a/tex/context/base/spac-ali.mkiv
+++ b/tex/context/base/spac-ali.mkiv
@@ -562,6 +562,12 @@
      \spac_align_use_indeed
    \fi}
 
+\unexpanded\def\dousealignparameter#1% faster local variant
+  {\edef\m_spac_align_asked{#1}%
+   \ifx\m_spac_align_asked\empty\else
+     \spac_align_use_indeed
+   \fi}
+
 \def\spac_align_use_indeed
   {\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname
    \ifx\raggedcommand\relax
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index fe46665b6..35c093351 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/status-lua.pdf b/tex/context/base/status-lua.pdf
index eb37397a8..c9dd4bb96 100644
Binary files a/tex/context/base/status-lua.pdf and b/tex/context/base/status-lua.pdf differ
diff --git a/tex/context/base/strc-ini.lua b/tex/context/base/strc-ini.lua
index b21e31ace..f736427bb 100644
--- a/tex/context/base/strc-ini.lua
+++ b/tex/context/base/strc-ini.lua
@@ -73,7 +73,7 @@ structures.itemgroups   = structures.itemgroups   or { }
 structures.specials     = structures.specials     or { }
 structures.counters     = structures.counters     or { }
 structures.tags         = structures.tags         or { }
-structures.formulas     = structures.formulas     or { }
+structures.formulas     = structures.formulas     or { } -- not used but reserved
 structures.sets         = structures.sets         or { }
 structures.marks        = structures.marks        or { }
 structures.floats       = structures.floats       or { }
diff --git a/tex/context/base/strc-lst.lua b/tex/context/base/strc-lst.lua
index 4ed542eb6..4c9a7217e 100644
--- a/tex/context/base/strc-lst.lua
+++ b/tex/context/base/strc-lst.lua
@@ -40,6 +40,7 @@ local sections          = structures.sections
 local helpers           = structures.helpers
 local documents         = structures.documents
 local tags              = structures.tags
+local counters          = structures.counters
 local references        = structures.references
 
 local collected         = allocate()
@@ -207,7 +208,7 @@ function lists.addto(t) -- maybe more more here (saves parsing at the tex end)
     if numberdata then
         local numbers = numberdata.numbers
         if type(numbers) == "string" then
-            numberdata.numbers = structures.counters.compact(numbers,nil,true)
+            numberdata.numbers = counters.compact(numbers,nil,true)
         end
     end
     local group = numberdata and numberdata.group
@@ -1021,7 +1022,7 @@ implement {
                 }
             },
             { "numberdata", {
-                    { "numbers" }, --        = structures.counters.compact("\currentcounter",nil,true),
+                    { "numbers" },
                     { "groupsuffix" },
                     { "group" },
                     { "counter" },
diff --git a/tex/context/base/strc-mat.lua b/tex/context/base/strc-mat.lua
index 98b1e996c..87f35ed1d 100644
--- a/tex/context/base/strc-mat.lua
+++ b/tex/context/base/strc-mat.lua
@@ -6,28 +6,35 @@ if not modules then modules = { } end modules ['strc-mat'] = {
     license   = "see context related readme files"
 }
 
+----- copytable  = table.copy
+
 local structures = structures
 
-local lists     = structures.lists
-local sections  = structures.sections
-local floats    = structures.floats
-local helpers   = structures.helpers
-local formulas  = structures.formulas
+local lists      = structures.lists
+local sections   = structures.sections
+local floats     = structures.floats
+local helpers    = structures.helpers
+local formulas   = structures.formulas -- not used but reserved
 
-lists.enhancers = lists.enhancers or { }
+----- context    = context
+----- simplify   = helpers.simplify
 
 -- maybe we want to do clever things with formulas, the store might go away
 
-local formuladata = { }
-
-function formulas.store(data)
-    formuladata[#formuladata+1] = data
-    context(#formuladata)
-end
-
-function formulas.current()
-    return formuladata[#formuladata]
-end
+-- local formuladata = { }
+--
+-- function formulas.store(data)
+--     formuladata[#formuladata+1] = data
+--     context(#formuladata)
+-- end
+--
+-- function formulas.current()
+--     return formuladata[#formuladata]
+-- end
+
+-- function formulas.simplify(entry)
+--     return simplify(copytable(entry or formuladata[#formuladata]))
+-- end
 
 function helpers.formulanumber(data,spec)
     if data then
@@ -38,10 +45,9 @@ function helpers.formulanumber(data,spec)
     end
 end
 
-function formulas.simplify(entry)
-    return helpers.simplify(table.copy(entry or formuladata[#formuladata]))
-end
-
 function lists.formulanumber(name,n,spec)
-    helpers.formulanumber(lists.result[n])
+    local result = lists.result
+    if result then
+        helpers.formulanumber(result[n])
+    end
 end
diff --git a/tex/context/base/strc-not.mkvi b/tex/context/base/strc-not.mkvi
index 1113cfa76..25a1072a3 100644
--- a/tex/context/base/strc-not.mkvi
+++ b/tex/context/base/strc-not.mkvi
@@ -1299,7 +1299,7 @@
        \noteparameter\c!before
      \fi
       %        \bgroup
-      %        \setupalign[\noteparameter\c!align]%
+      %        \usealignparameter\noteparameter
      \placenoterule  % alleen in ..mode
       %        \par
       %        \egroup
@@ -1727,8 +1727,8 @@
 \def\strc_notes_set_bodyfont
   {\let\strc_notes_set_bodyfont\relax
    \restoreglobalbodyfont
-   \switchtobodyfont[\noteparameter\c!bodyfont]%
-   \setupalign[\noteparameter\c!align]}
+   \usebodyfontparameter\noteparameter
+   \usealignparameter\noteparameter}
 
 %D The footnote mechanism defaults to a traditional one
 %D column way of showing them. By default we precede them by
diff --git a/tex/context/base/strc-ref.lua b/tex/context/base/strc-ref.lua
index 5174b289d..b6f2e9a37 100644
--- a/tex/context/base/strc-ref.lua
+++ b/tex/context/base/strc-ref.lua
@@ -1976,17 +1976,17 @@ function references.setandgetattribute(data) -- maybe do internal automatically
         if ndat then
             local numbers = ndat.numbers
             if type(numbers) == "string" then
-                ndat.numbers = structures.counters.compact(numbers,nil,true)
+                ndat.numbers = counters.compact(numbers,nil,true)
             end
-            data.numberdata = structures.helpers.simplify(ndat)
+            data.numberdata = helpers.simplify(ndat)
         end
         local pdat = data.prefixdata
         if pdat then
-            data.prefixdata = structures.helpers.simplify(pdat)
+            data.prefixdata = helpers.simplify(pdat)
         end
         local udat = data.userdata
         if type(udat) == "string"  then
-            data.userdata = structures.helpers.touserdata(udat)
+            data.userdata = helpers.touserdata(udat)
         end
         if not rdat.block then
             rdat.block = structures.sections.currentblock()
@@ -2075,17 +2075,27 @@ end
 references.currentmetadata = currentmetadata
 
 local function getcurrentprefixspec(default)
+    local data     = currentreference and currentreference.i
+    local metadata = data and data.metadata
     return
-        currentmetadata("kind") or "?",
-        currentmetadata("name") or "?",
-        default                 or "?"
+        metatadata and metadata.kind or "?",
+        metatadata and metadata.name or "?",
+        default                      or "?"
 end
 
 references.getcurrentprefixspec = getcurrentprefixspec
 
+-- implement {
+--     name      = "getcurrentprefixspec",
+--     actions   = { getcurrentprefixspec, context }, -- returns 3 arguments
+--     arguments = "string",
+-- }
+
 implement {
     name      = "getcurrentprefixspec",
-    actions   = { getcurrentprefixspec, context }, -- returns 3 arguments
+    actions   = function(tag)
+        context("{%s}{%s}{%s}",getcurrentprefixspec(tag))
+    end,
     arguments = "string",
 }
 
@@ -2101,7 +2111,7 @@ filters.text    = textfilters
 filters.full    = fullfilters
 filters.section = sectionfilters
 
-local function filterreference(name,...) -- number page title ...
+local function filterreference(name,prefixspec,numberspec) -- number page title ...
     local data = currentreference and currentreference.i -- maybe we should take realpage from here
     if data then
         if name == "realpage" then
@@ -2116,7 +2126,7 @@ local function filterreference(name,...) -- number page title ...
                     if trace_referencing then
                         report_references("name %a, kind %a, using dedicated filter",name,kind)
                     end
-                    filter(data,name,...)
+                    filter(data,name,prefixspec,numberspec)
                 elseif trace_referencing then
                     report_references("name %a, kind %a, using generic filter",name,kind)
                 end
diff --git a/tex/context/base/strc-ref.mkvi b/tex/context/base/strc-ref.mkvi
index 7bf198998..f5d0d1d78 100644
--- a/tex/context/base/strc-ref.mkvi
+++ b/tex/context/base/strc-ref.mkvi
@@ -1953,7 +1953,7 @@
 %D
 %D Only when \type {text} is not empty, a space is inserted.
 
-\def\dotextprefix#text%
+\unexpanded\def\dotextprefix#text%
   {\begingroup
    \setbox\scratchbox\hbox{#text}% to be solved some day
    \ifdim\wd\scratchbox>\zeropoint
@@ -2089,7 +2089,7 @@
 \installcorenamespace{referencingprefix}
 
 \def\getreferencestructureprefix#kind#name#category% name will change
-  {{
+  {{%
         prefix        {\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefix}%
         separatorset  {\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixseparatorset}%
         conversion    {\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixconversion}%
@@ -2099,8 +2099,8 @@
         set           {\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixset}%
         segments      {\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixsegments}%
         connector     {\referencestructureprefixparameter{#kind}{#name}{#category}\c!prefixconnector}%
-  }
-  {
+  }%
+  {%
         separatorset  {\referencestructureprefixparameter{#kind}{#name}{#category}\c!numberseparatorset}%
         conversion    {\referencestructureprefixparameter{#kind}{#name}{#category}\c!numberconversion}%
         conversionset {\referencestructureprefixparameter{#kind}{#name}{#category}\c!numberconversionset}%
@@ -2128,11 +2128,11 @@
      \csname     \??referencingprefix:#category#parameter\endcsname
    \fi\fi\fi}
 
-\def\currentreferencedefault
-  {\clf_filterdefaultreference
+\def\currentreferencedefault % for some reason we need to explicitly expand
+  {\normalexpanded{\noexpand\clf_filterdefaultreference
      {\s!default}%
-     \getreferencestructureprefix\clf_getcurrentprefixspec{\s!default}% returns #kind#name#category
-   \relax}
+     \noexpand\getreferencestructureprefix\clf_getcurrentprefixspec{\s!default}% returns #kind#name#category
+   \relax}}
 
 %D Not all support is visible by looking at the \TEX\ code; here is one of those:^
 %D
diff --git a/tex/context/base/strc-syn.lua b/tex/context/base/strc-syn.lua
index 1864dc84a..22a4ff9fd 100644
--- a/tex/context/base/strc-syn.lua
+++ b/tex/context/base/strc-syn.lua
@@ -7,14 +7,12 @@ if not modules then modules = { } end modules ['strc-syn'] = {
 }
 
 local next, type = next, type
-local format = string.format
-local allocate = utilities.storage.allocate
-
--- interface to tex end
 
 local context      = context
 local implement    = interfaces.implement
 
+local allocate     = utilities.storage.allocate
+
 local sorters      = sorters
 
 local structures   = structures
@@ -46,73 +44,73 @@ job.register('structures.synonyms.collected', tobesaved, initializer, finalizer)
 
 -- todo: allocate becomes metatable
 
-local function allocate(class)
-    local d = tobesaved[class]
-    if not d then
-        d = {
-            metadata = {
-                language = 'en',
-                sorted   = false,
-                class    = class
-            },
-            entries  = {
-            },
-            hash = {
-            }
+table.setmetatableindex(tobesaved,function(t,k)
+    local v = {
+        metadata = {
+            language = 'en',
+            sorted   = false,
+            class    = v
+        },
+        entries  = {
+        },
+        hash = {
         }
-        tobesaved[class] = d
-    end
-    return d
-end
+    }
+    t[k] = v
+    return v
+end)
 
 function synonyms.define(class,kind)
-    local data = allocate(class)
+    local data = tobesaved[class]
     data.metadata.kind = kind
 end
 
 function synonyms.register(class,kind,spec)
-    local data = allocate(class)
+    local data = tobesaved[class]
+    local hash = data.hash
+    local tag  = spec.definition.tag or ""
     data.metadata.kind = kind -- runtime, not saved in format (yet)
-    if not data.hash[spec.definition.tag or ""] then
-        data.entries[#data.entries+1] = spec
-        data.hash[spec.definition.tag or ""] = spec
+    if not hash[tag] then
+        local entries = data.entries
+        entries[#entries+1] = spec
+        hash[tag] = spec
     end
 end
 
 function synonyms.registerused(class,tag)
-    local data = allocate(class)
-    local dht = data.hash[tag]
-    if dht then
-        dht.definition.used = true
+    local data = tobesaved[class]
+    local okay = data.hash[tag]
+    if okay then
+        okay.definition.used = true
     end
 end
 
 function synonyms.synonym(class,tag)
-    local data = allocate(class).hash
-    local d = data[tag]
-    if d then
-        local de = d.definition
-        de.used = true
-        context(de.synonym)
+    local data = tobesaved[class]
+    local okay = data.hash[tag]
+    if okay then
+        local definition = okay.definition
+        definition.used = true
+        context(definition.synonym)
     end
 end
 
 function synonyms.meaning(class,tag)
-    local data = allocate(class).hash
-    local d = data[tag]
-    if d then
-        local de = d.definition
-        de.used = true
-        context(de.meaning)
+    local data = tobesaved[class]
+    local okay = data.hash[tag]
+    if okay then
+        local definition = okay.definition
+        definition.used = true
+        context(definition.meaning)
     end
 end
 
 synonyms.compare = sorters.comparers.basic -- (a,b)
 
 function synonyms.filter(data,options)
-    local result = { }
+    local result  = { }
     local entries = data.entries
-    local all = options and options.criterium == interfaces.variables.all
+    local all     = options and options.criterium == interfaces.variables.all
     for i=1,#entries do
         local entry = entries[i]
         if all or entry.definition.used then
@@ -122,16 +120,35 @@ function synonyms.filter(data,options)
     data.result = result
 end
 
+function synonyms.filter(data,options)
+    local result  = { }
+    local entries = data.entries
+    local all     = options and options.criterium == interfaces.variables.all
+    if all then
+        for i=1,#entries do
+            result[i] = entries[i]
+        end
+    else
+        for i=1,#entries do
+            local entry = entries[i]
+            if entry.definition.used then
+                result[#result+1] = entry
+            end
+        end
+    end
+    data.result = result
+end
+
 function synonyms.prepare(data)
     local result = data.result
     if result then
         for i=1, #result do
-            local r = result[i]
-            local rd = r.definition
-            if rd then
-                local rt = rd.tag
-                local sortkey = rt and rt ~= "" and rt or rd.synonym
-                r.split = splitter(strip(sortkey))
+            local entry      = result[i]
+            local definition = entry.definition
+            if definition then
+                local tag = definition.tag
+                local key = tag ~= "" and tag or definition.synonym
+                entry.split = splitter(strip(key))
             end
         end
     end
@@ -139,16 +156,19 @@ end
 
 function synonyms.sort(data,options)
     sorters.sort(data.result,synonyms.compare)
+    data.metadata.sorted = true
 end
 
 function synonyms.finalize(data,options) -- mostly the same as registers so we will generalize it: sorters.split
-    local result = data.result
-    data.metadata.nofsorted = #result
-    local split, nofsplit, lasttag, done, nofdone = { }, 0, nil, nil, 0
-    local firstofsplit = sorters.firstofsplit
+    local result   = data.result
+    local split    = { }
+    local nofsplit = 0
+    local lasttag  = nil
+    local lasttag  = nil
+    local nofdone  = 0
     for k=1,#result do
-        local v = result[k]
-        local entry, tag = firstofsplit(v)
+        local entry = result[k]
+        local first, tag = firstofsplit(entry)
         if tag ~= lasttag then
          -- if trace_registers then
          --     report_registers("splitting at %a",tag)
@@ -160,7 +180,7 @@ function synonyms.finalize(data,options) -- mostly the same as registers so we w
             split[nofsplit] = { tag = tag, data = done }
         end
         nofdone = nofdone + 1
-        done[nofdone] = v
+        done[nofdone] = entry
     end
     data.result = split
 end
@@ -171,23 +191,22 @@ end
 local ctx_synonymentry = context.synonymentry
 
 function synonyms.flush(data,options)
-    local kind = data.metadata.kind -- hack, will be done better
     local result = data.result
     for i=1,#result do
         local sublist = result[i]
-        local letter = sublist.tag
-        local data = sublist.data
+        local letter  = sublist.tag
+        local data    = sublist.data
         for d=1,#data do
             local entry = data[d].definition
             ctx_synonymentry(d,entry.tag,entry.synonym,entry.meaning or "")
         end
     end
-    data.result = nil
+    data.result          = nil
     data.metadata.sorted = false
 end
 
 function synonyms.analyzed(class,options)
-    local data = synonyms.collected[class]
+    local data = collected[class]
     if data and data.entries then
         options = options or { }
         sorters.setlanguage(options.language,options.method)
@@ -202,7 +221,7 @@ end
 
 function synonyms.process(class,options)
     if synonyms.analyzed(class,options) then
-        synonyms.flush(synonyms.collected[class],options)
+        synonyms.flush(collected[class],options)
     end
 end
 
diff --git a/tex/context/base/strc-syn.mkiv b/tex/context/base/strc-syn.mkiv
index bd5cd4ca8..22198aa7d 100644
--- a/tex/context/base/strc-syn.mkiv
+++ b/tex/context/base/strc-syn.mkiv
@@ -22,7 +22,7 @@
 
 % split but common in lua
 
-\def\preprocessexpansion#1#2#3#4%
+\def\preprocessexpansion#1#2#3#4% do this at the lua end if still needed
   {\ifx#1\s!xml
      \xmlstartraw
        \xdef#2{#4}%
@@ -251,19 +251,21 @@
 \def\strc_synonyms_place_list[#1][#2]%
   {\begingroup
    \edef\currentsimplelist{#1}%
-   \strc_constructions_initialize{#1}%
-   \setupcurrentsimplelist[#2]%
-   \let\synonymentry\strc_synonym_normal
-   \startpacked
-     \clf_processsynonyms
-        {#1}%
-        {%
-            criterium {\simplelistparameter\c!criterium}%
-            language  {\simplelistparameter\s!language}%
-            method    {\simplelistparameter\c!method}%
-        }%
-     \relax
-   \stoppacked
+   \doifelsecommandhandler\??simplelist\currentsimplelist
+     {\strc_constructions_initialize{#1}%
+      \setupcurrentsimplelist[#2]%
+      \let\synonymentry\strc_synonym_normal
+      \startpacked
+        \clf_processsynonyms
+           {#1}%
+           {%
+               criterium {\simplelistparameter\c!criterium}%
+               language  {\simplelistparameter\s!language}%
+               method    {\simplelistparameter\c!method}%
+           }%
+        \relax
+      \stoppacked}%
+     {}% todo: message that invalid
    \endgroup}
 
 \def\completelistofsynonyms
@@ -272,10 +274,12 @@
 \def\strc_synonyms_complete_list[#1][#2]%
   {\begingroup
    \edef\currentsimplelist{#1}%
-   \normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\simplelistparameter\s!multi}},\c!reference=#1]}%
-   \strc_synonyms_place_list[#1][#2]%
-   \page
-   \stopnamedsection
+   \doifelsecommandhandler\??simplelist\currentsimplelist
+     {\normalexpanded{\startnamedsection[\v!chapter][\c!title={\headtext{\simplelistparameter\s!multi}},\c!reference=#1]}%
+        \strc_synonyms_place_list[#1][#2]%
+        \page
+      \stopnamedsection}%
+     {}% todo: message that invalid
    \endgroup}
 
 \unexpanded\def\strc_synonym_normal#1#2#3#4%
diff --git a/tex/context/base/strc-tag.lua b/tex/context/base/strc-tag.lua
index eda53c8be..637d74e8c 100644
--- a/tex/context/base/strc-tag.lua
+++ b/tex/context/base/strc-tag.lua
@@ -13,7 +13,7 @@ if not modules then modules = { } end modules ['strc-tag'] = {
 
 local type, next = type, next
 local insert, remove, unpack, concat = table.insert, table.remove, table.unpack, table.concat
-local gsub, find, topattern, format = string.gsub, string.find, string.topattern, string.format
+local find, topattern, format = string.find, string.topattern, string.format
 local lpegmatch, P, S, C, Cc = lpeg.match, lpeg.P, lpeg.S, lpeg.C, lpeg.Cc
 local texattribute = tex.attribute
 local allocate = utilities.storage.allocate
diff --git a/tex/context/base/tabl-tab.mkiv b/tex/context/base/tabl-tab.mkiv
index 16a16601c..5add1c684 100644
--- a/tex/context/base/tabl-tab.mkiv
+++ b/tex/context/base/tabl-tab.mkiv
@@ -2203,7 +2203,7 @@
 
 \def\dolocaltablesetup
   {\directtablesparameter\c!commands\relax
-   \doifsomething{\directtablesparameter\c!bodyfont}{\switchtobodyfont[\directtablesparameter\c!bodyfont]}%
+   \usebodyfontparameter\directtablesparameter
    \tablelinethicknessunit\dimexpr\directtablesparameter\c!rulethickness/\tablelinethicknessfactor\relax
    \edef\p_tabl_table_height{\directtablesparameter\c!height}%
    \edef\p_tabl_table_depth{\directtablesparameter\c!depth}%
diff --git a/tex/context/base/tabl-xtb.mkvi b/tex/context/base/tabl-xtb.mkvi
index 530232b1e..b5ab0a5dc 100644
--- a/tex/context/base/tabl-xtb.mkvi
+++ b/tex/context/base/tabl-xtb.mkvi
@@ -268,8 +268,7 @@
   {\begingroup % *
    \forgetall % moved here
    \dontcomplain % for the moment here till we figure out where we get the overflow
-   \doifsomething{\xtableparameter\c!bodyfont}
-     {\setupbodyfont[\xtableparameter\c!bodyfont]}%
+   \usebodyfontparameter\xtableparameter
    \setbox\scratchbox\vbox
      {\doifsomething{\xtableparameter\c!spaceinbetween}{\blank[\xtableparameter\c!spaceinbetween]}}%
    \clf_x_table_create
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index bbc2b53e4..7ab0c9be3 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  : 04/14/15 19:03:21
+-- merge date  : 04/15/15 01:44:50
 
 do -- begin closure to overcome local limits and interference
 
-- 
cgit v1.2.3