From e6e373fe2dfcbf28514a4361d19d2cf503e54230 Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Wed, 14 Sep 2011 12:21:00 +0200
Subject: beta 2011.09.14 12:21

---
 tex/context/base/buff-imp-lua.lua                  |   2 +-
 tex/context/base/buff-imp-mp.lua                   | 101 ++---------------
 tex/context/base/cont-new.mkii                     |   2 +-
 tex/context/base/cont-new.mkiv                     |   2 +-
 tex/context/base/context-version.pdf               | Bin 4096 -> 4089 bytes
 tex/context/base/context-version.png               | Bin 106350 -> 106228 bytes
 tex/context/base/context.mkii                      |   2 +-
 tex/context/base/context.mkiv                      |   2 +-
 tex/context/base/l-lpeg.lua                        |  23 ++++
 tex/context/base/mult-def.lua                      |  56 +++++++++
 tex/context/base/mult-mps.lua                      |   2 +-
 tex/context/base/mult-prm.lua                      | 126 +--------------------
 tex/context/base/mult-prm.mkiv                     |  23 ++--
 tex/context/base/status-files.pdf                  | Bin 23925 -> 23942 bytes
 tex/context/base/status-lua.pdf                    | Bin 162351 -> 162348 bytes
 tex/context/base/syst-aux.mkiv                     |  48 ++++----
 tex/context/base/syst-ini.mkiv                     |   8 +-
 tex/generic/context/luatex/luatex-fonts-merged.lua |  25 +++-
 18 files changed, 166 insertions(+), 256 deletions(-)

(limited to 'tex')

diff --git a/tex/context/base/buff-imp-lua.lua b/tex/context/base/buff-imp-lua.lua
index 3a3bb3d2c..1147666cc 100644
--- a/tex/context/base/buff-imp-lua.lua
+++ b/tex/context/base/buff-imp-lua.lua
@@ -146,7 +146,7 @@ local special     = S("-+/*^%=#") + P("..")
 local equals      = P("=")^0
 local open        = P("[") * Cg(equals, "init") * P("[") * P("\n")^-1 -- maybe better: patterns.newline^-1
 local close       = P("]") * C(equals) * P("]")
-local closeeq     = Cmt(close * Cb("init"), function(s,i,a,b) return a == b end)
+local closeeq     = Cmt(close * Cb("init"), function(s,i,a,b) return a == b end) -- wrong return value
 local longstring  = open * Cs((P(1) - closeeq)^0) * close * Carg(1)
 
 local function long(content,equals,settings)
diff --git a/tex/context/base/buff-imp-mp.lua b/tex/context/base/buff-imp-mp.lua
index 6b8a26536..24ca597e7 100644
--- a/tex/context/base/buff-imp-mp.lua
+++ b/tex/context/base/buff-imp-mp.lua
@@ -6,98 +6,21 @@ if not modules then modules = { } end modules ['buff-imp-mp'] = {
     license   = "see context related readme files"
 }
 
+-- Now that we also use lpeg lexers in scite, we can share the keywords
+-- so we have moved the keyword lists to mult-mps.lua. Don't confuse the
+-- scite lexers with the ones we use here. Of course all those lexers
+-- boil down to doing similar things, but here we need more control over
+-- the rendering and have a different way of nesting. It is no coincidence
+-- that the coloring looks similar: both are derived from earlier lexing (in
+-- texedit, mkii and the c++ scite lexer).
+
 local P, S, V, patterns = lpeg.P, lpeg.S, lpeg.V, lpeg.patterns
 
-local primitives = table.tohash {
-    'charcode', 'day', 'linecap', 'linejoin', 'miterlimit', 'month', 'pausing',
-    'prologues', 'showstopping', 'time', 'tracingcapsules', 'tracingchoices',
-    'tracingcommands', 'tracingequations', 'tracinglostchars',
-    'tracingmacros', 'tracingonline', 'tracingoutput', 'tracingrestores',
-    'tracingspecs', 'tracingstats', 'tracingtitles', 'truecorners',
-    'warningcheck', 'year', 'mpprocset',
-    'false', 'nullpicture', 'pencircle', 'true',
-    'and', 'angle', 'arclength', 'arctime', 'ASCII', 'bluepart', 'boolean', 'bot',
-    'char', 'color', 'cosd', 'cycle', 'decimal', 'directiontime', 'floor', 'fontsize',
-    'greenpart', 'hex', 'infont', 'intersectiontimes', 'known', 'length', 'llcorner',
-    'lrcorner', 'makepath', 'makepen', 'mexp', 'mlog', 'normaldeviate', 'not',
-    'numeric', 'oct', 'odd', 'or', 'path', 'pair', 'pen', 'penoffset', 'picture', 'point',
-    'postcontrol', 'precontrol', 'redpart', 'reverse', 'rotated', 'scaled',
-    'shifted', 'sind', 'slanted', 'sqrt', 'str', 'string', 'subpath', 'substring',
-    'transform', 'transformed', 'ulcorner', 'uniformdeviate', 'unknown',
-    'urcorner', 'xpart', 'xscaled', 'xxpart', 'xypart', 'ypart', 'yscaled', 'yxpart',
-    'yypart', 'zscaled',
-    'addto', 'clip', 'input', 'interim', 'let', 'newinternal', 'save', 'setbounds',
-    'shipout', 'show', 'showdependencies', 'showtoken', 'showvariable',
-    'special',
-    'begingroup', 'endgroup', 'of', 'curl', 'tension', 'and', 'controls',
-    'reflectedabout', 'rotatedaround', 'interpath', 'on', 'off', 'beginfig',
-    'endfig', 'def', 'vardef', 'enddef', 'epxr', 'suffix', 'text', 'primary', 'secondary',
-    'tertiary', 'primarydef', 'secondarydef', 'tertiarydef', 'top', 'bottom',
-    'ulft', 'urt', 'llft', 'lrt', 'randomseed', 'also', 'contour', 'doublepath',
-    'withcolor', 'withpen', 'dashed', 'if', 'else', 'elseif', 'fi', 'for', 'endfor', 'forever', 'exitif',
-    'forsuffixes', 'downto', 'upto', 'step', 'until',
-    'charlist', 'extensible', 'fontdimen', 'headerbyte', 'kern', 'ligtable',
-    'boundarychar', 'chardp', 'charext', 'charht', 'charic', 'charwd', 'designsize',
-    'fontmaking', 'charexists',
-    'cullit', 'currenttransform', 'gfcorners', 'grayfont', 'hround',
-    'imagerules', 'lowres_fix', 'nodisplays', 'notransforms', 'openit',
-    'displaying', 'currentwindow', 'screen_rows', 'screen_cols',
-    'pixels_per_inch', 'cull', 'display', 'openwindow', 'numspecial',
-    'totalweight', 'autorounding', 'fillin', 'proofing', 'tracingpens',
-    'xoffset', 'chardx', 'granularity', 'smoothing', 'turningcheck', 'yoffset',
-    'chardy', 'hppp', 'tracingedges', 'vppp',
-    'extra_beginfig', 'extra_endfig', 'mpxbreak',
-    'end', 'btex', 'etex', 'verbatimtex'
-}
+local mps = dofile(resolvers.findfile("mult-mps.lua","tex"))
 
-local plain = table.tohash {
-    'ahangle', 'ahlength', 'bboxmargin', 'defaultpen', 'defaultscale',
-    'labeloffset', 'background', 'currentpen', 'currentpicture', 'cuttings',
-    'defaultfont', 'extra_beginfig', 'extra_endfig',
-    'beveled', 'black', 'blue', 'bp', 'butt', 'cc', 'cm', 'dd', 'ditto', 'down', 'epsilon',
-    'evenly', 'fullcircle', 'green', 'halfcircle', 'identity', 'in', 'infinity', 'left',
-    'mitered', 'mm', 'origin', 'pensquare', 'pt', 'quartercircle', 'red', 'right',
-    'rounded', 'squared', 'unitsquare', 'up', 'white', 'withdots',
-    'abs', 'bbox', 'ceiling', 'center', 'cutafter', 'cutbefore', 'dir',
-    'directionpoint', 'div', 'dotprod', 'intersectionpoint', 'inverse', 'mod', 'lft',
-    'round', 'rt', 'unitvector', 'whatever',
-    'cutdraw', 'draw', 'drawarrow', 'drawdblarrow', 'fill', 'filldraw', 'drawdot',
-    'loggingall', 'pickup', 'tracingall', 'tracingnone', 'undraw', 'unfill',
-    'unfilldraw',
-    'buildcycle', 'dashpattern', 'decr', 'dotlabel', 'dotlabels', 'drawoptions',
-    'incr', 'label', 'labels', 'max', 'min', 'thelabel', 'z',
-    'beginchar', 'blacker', 'capsule_end', 'change_width',
-    'define_blacker_pixels', 'define_corrected_pixels',
-    'define_good_x_pixels', 'define_good_y_pixels',
-    'define_horizontal_corrected_pixels', 'define_pixels',
-    'define_whole_blacker_pixels', 'define_whole_pixels',
-    'define_whole_vertical_blacker_pixels',
-    'define_whole_vertical_pixels', 'endchar', 'extra_beginchar',
-    'extra_endchar', 'extra_setup', 'font_coding_scheme',
-    'font_extra_space'
-}
-
-local metafun = table.tohash {
-    'unitcircle', 'fulldiamond', 'unitdiamond',
-    'halfcircle', 'quartercircle',
-    'llcircle', 'lrcircle', 'urcircle', 'ulcircle',
-    'tcircle', 'bcircle', 'lcircle', 'rcircle',
-    'lltriangle', 'lrtriangle', 'urtriangle', 'ultriangle',
-    'smoothed', 'cornered', 'superellipsed', 'randomized', 'squeezed',
-    'punked', 'curved', 'unspiked', 'simplified', 'blownup', 'stretched',
-    'paralled', 'enlonged', 'shortened',
-    'enlarged', 'leftenlarged', 'topenlarged', 'rightenlarged', 'bottomenlarged',
-    'llenlarged', 'lrenlarged', 'urenlarged', 'ulenlarged',
-    'llmoved', 'lrmoved', 'urmoved', 'ulmoved',
-    'boundingbox', 'innerboundingbox', 'outerboundingbox',
-    'bottomboundary', 'leftboundary', 'topboundary', 'rightboundary',
-    'xsized', 'ysized', 'xysized',
-    'cmyk', 'transparent', 'withshade', 'spotcolor',
-    'drawfill', 'undrawfill',
-    'inverted', 'uncolored', 'softened', 'grayed',
-    'textext', 'graphictext',
-    'loadfigure', 'externalfigure'
-}
+local primitives = table.tohash(mps.primitives)
+local plain      = table.tohash(mps.plain)
+local metafun    = table.tohash(mps.metafun)
 
 local context                      = context
 local verbatim                     = context.verbatim
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index ba26b7226..abd0357f8 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.09.12 22:49}
+\newcontextversion{2011.09.14 12:21}
 
 %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 1c31ebf94..d80c38ea8 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.09.12 22:49}
+\newcontextversion{2011.09.14 12:21}
 
 %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-version.pdf b/tex/context/base/context-version.pdf
index ef175af2a..f28a6957c 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-version.png b/tex/context/base/context-version.png
index 1c047a3b6..b421b99a0 100644
Binary files a/tex/context/base/context-version.png and b/tex/context/base/context-version.png differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index a0ada15e9..ce28c02a6 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.09.12 22:49}
+\edef\contextversion{2011.09.14 12:21}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 88217fc54..f52f46334 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.09.12 22:49}
+\edef\contextversion{2011.09.14 12:21}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/l-lpeg.lua b/tex/context/base/l-lpeg.lua
index 4b40b641e..9860937c4 100644
--- a/tex/context/base/l-lpeg.lua
+++ b/tex/context/base/l-lpeg.lua
@@ -633,3 +633,26 @@ function lpeg.append(list,pp,delayed)
     end
     return p
 end
+
+-- function lpeg.exact_match(words,case_insensitive)
+--     local pattern = concat(words)
+--     if case_insensitive then
+--         local pattern = S(upper(characters)) + S(lower(characters))
+--         local list = { }
+--         for i=1,#words do
+--             list[lower(words[i])] = true
+--         end
+--         return Cmt(pattern^1, function(_,i,s)
+--             return list[lower(s)] and i
+--         end)
+--     else
+--         local pattern = S(concat(words))
+--         local list = { }
+--         for i=1,#words do
+--             list[words[i]] = true
+--         end
+--         return Cmt(pattern^1, function(_,i,s)
+--             return list[s] and i
+--         end)
+--     end
+-- end
diff --git a/tex/context/base/mult-def.lua b/tex/context/base/mult-def.lua
index 1144dba22..7e0ed0bf1 100644
--- a/tex/context/base/mult-def.lua
+++ b/tex/context/base/mult-def.lua
@@ -7,6 +7,62 @@ if not modules then modules = { } end modules ['mult-def'] = {
 }
 
 return {
+ ["helpers"]={ -- for syntax highlighters, only the ones that are for users (boring to collect them)
+    --
+    "doif", "doifnot", "doifelse",
+    "doifinset", "doifnotinset", "doifinsetelse",
+    "doifnextcharelse", "doifnextoptionalelse", "doifnextparenthesiselse", "doiffastoptionalcheckelse",
+    "doifundefinedelse", "doifdefinedelse", "doifundefined", "doifdefined",
+    "doifelsevalue", "doifvalue", "doifnotvalue",
+    "doifnothing", "doifsomething", "doifelsenothing", "doifsomethingelse",
+    "doifvaluenothing", "doifvaluesomething", "doifelsevaluenothing",
+    "doifdimensionelse",
+    --
+    "tracingall", "tracingnone", "loggingall",
+    --
+    "appendtoks", "prependtoks", "appendtotoks", "prependtotoks",
+    --
+    "endgraf", "empty", "null", "space", "obeyspaces", "obeylines",
+    --
+    "executeifdefined",
+    --
+    "dontleavehmode",
+    --
+    "setmeasure", "setemeasure", "setgmeasure", "setxmeasure", "definemeasure", "measure",
+    --
+    "getvalue", "setvalue", "setevalue", "setgvalue", "setxvalue", "letvalue", "letgvalue",
+    "resetvalue", "undefinevalue", "ignorevalue",
+    "setuvalue", "setuevalue", "setugvalue", "setuxvalue",
+    "globallet", "glet",
+    "getparameters", "geteparameters",
+    --
+    "processcommalist", "processcommacommand", "quitcommalist",
+    "processaction", "processallactions",
+    --
+    "startsetups", "stopsetups",
+    "startxmlsetups", "stopxmlsetups",
+    "starttexdefinition", "stoptexdefinition",
+    --
+    "unexpanded", "expanded", "startexpanded", "stopexpanded", "protected", "protect", "unprotect",
+    --
+    "firstofoneargument",
+    "firstoftwoarguments", "secondoftwoarguments",
+    "firstofthreearguments", "secondofthreearguments", "thirdofthreearguments",
+    "firstoffourarguments", "secondoffourarguments", "thirdoffourarguments", "fourthoffourarguments",
+    "firstoffivearguments", "secondoffivearguments", "thirdoffivearguments", "fourthoffivearguments", "fifthoffivearguments",
+    "firstofsixarguments", "secondofsixarguments", "thirdofsixarguments", "fourthofsixarguments", "fifthofsixarguments", "sixthofsixarguments",
+    --
+    "gobbleoneargument", "gobbletwoarguments", "gobblethreearguments", "gobblefourarguments", "gobblefivearguments", "gobblesixarguments", "gobblesevenarguments", "gobbleeightarguments", "gobbleninearguments", "gobbletenarguments",
+    "gobbleoneoptional", "gobbletwooptionals", "gobblethreeoptionals", "gobblefouroptionals", "gobblefiveoptionals",
+    --
+    "dorecurse", "doloop", "exitloop", "dostepwiserecurse", "recurselevel", "recursedepth",
+    --
+    "newconstant", "setnewconstant", "newconditional", "settrue", "setfalse",
+    --
+    "dosingleempty", "dodoubleempty", "dotripleempty", "doquadrupleempty", "doquintupleempty", "dosixtupleempty", "doseventupleempty",
+    "dosinglegroupempty", "dodoublegroupempty", "dotriplegroupempty", "doquadruplegroupempty", "doquintuplegroupempty",
+    --
+ },
  ["commands"]={
   ["CAPPED"]={
    ["cs"]="KAP",
diff --git a/tex/context/base/mult-mps.lua b/tex/context/base/mult-mps.lua
index c56fe2eac..f382433de 100644
--- a/tex/context/base/mult-mps.lua
+++ b/tex/context/base/mult-mps.lua
@@ -22,7 +22,7 @@ return {
         "special",
         "begingroup", "endgroup", "of", "curl", "tension", "and", "controls",
         "reflectedabout", "rotatedaround", "interpath", "on", "off", "beginfig",
-        "endfig", "def", "vardef", "enddef", "epxr", "suffix", "text", "primary", "secondary",
+        "endfig", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary",
         "tertiary", "primarydef", "secondarydef", "tertiarydef", "top", "bottom",
         "ulft", "urt", "llft", "lrt", "randomseed", "also", "contour", "doublepath",
         "withcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif",
diff --git a/tex/context/base/mult-prm.lua b/tex/context/base/mult-prm.lua
index 0c84563fc..61ba38199 100644
--- a/tex/context/base/mult-prm.lua
+++ b/tex/context/base/mult-prm.lua
@@ -6,212 +6,135 @@ return {
   "Omegaminorversion",
   "Omegarevision",
   "Udelcode",
-  "Udelcode",
   "Udelcodenum",
   "Udelimiter",
   "Udelimiterover",
   "Udelimiterunder",
   "Umathaccent",
-  "Umathaccent",
-  "Umathaccents",
   "Umathaccents",
   "Umathaxis",
   "Umathbinbinspacing",
-  "Umathbinbinspacing",
   "Umathbinclosespacing",
   "Umathbininnerspacing",
   "Umathbinopenspacing",
   "Umathbinopspacing",
-  "Umathbinopspacing",
-  "Umathbinordspacing",
   "Umathbinordspacing",
   "Umathbinpunctspacing",
-  "Umathbinpunctspacing",
   "Umathbinrelspacing",
   "Umathbotaccent",
-  "Umathbotaccent",
   "Umathchar",
   "Umathchardef",
-  "Umathchardef",
   "Umathcharnum",
   "Umathclosebinspacing",
-  "Umathclosebinspacing",
-  "Umathcloseclosespacing",
   "Umathcloseclosespacing",
   "Umathcloseinnerspacing",
   "Umathcloseopenspacing",
-  "Umathcloseopenspacing",
   "Umathcloseopspacing",
   "Umathcloseordspacing",
   "Umathclosepunctspacing",
   "Umathcloserelspacing",
   "Umathcode",
-  "Umathcode",
-  "Umathcodenum",
   "Umathcodenum",
   "Umathconnectoroverlapmin",
-  "Umathconnectoroverlapmin",
   "Umathfractiondelsize",
   "Umathfractiondenomdown",
-  "Umathfractiondenomdown",
-  "Umathfractiondenomvgap",
   "Umathfractiondenomvgap",
   "Umathfractionnumup",
   "Umathfractionnumvgap",
-  "Umathfractionnumvgap",
   "Umathfractionrule",
   "Umathinnerbinspacing",
-  "Umathinnerbinspacing",
   "Umathinnerclosespacing",
-  "Umathinnerclosespacing",
-  "Umathinnerinnerspacing",
   "Umathinnerinnerspacing",
   "Umathinneropenspacing",
-  "Umathinneropenspacing",
-  "Umathinneropspacing",
   "Umathinneropspacing",
   "Umathinnerordspacing",
   "Umathinnerpunctspacing",
   "Umathinnerrelspacing",
-  "Umathinnerrelspacing",
   "Umathlimitabovebgap",
   "Umathlimitabovekern",
-  "Umathlimitabovekern",
-  "Umathlimitabovevgap",
   "Umathlimitabovevgap",
   "Umathlimitbelowbgap",
   "Umathlimitbelowkern",
   "Umathlimitbelowvgap",
-  "Umathlimitbelowvgap",
   "Umathopbinspacing",
-  "Umathopbinspacing",
-  "Umathopclosespacing",
   "Umathopclosespacing",
   "Umathopenbinspacing",
-  "Umathopenbinspacing",
-  "Umathopenclosespacing",
   "Umathopenclosespacing",
   "Umathopeninnerspacing",
   "Umathopenopenspacing",
   "Umathopenopspacing",
   "Umathopenordspacing",
-  "Umathopenordspacing",
   "Umathopenrelspacing",
   "Umathoperatorsize",
-  "Umathoperatorsize",
-  "Umathopinnerspacing",
   "Umathopinnerspacing",
   "Umathopopenspacing",
-  "Umathopopenspacing",
   "Umathopopspacing",
   "Umathopordspacing",
   "Umathoppunctspacing",
-  "Umathoppunctspacing",
-  "Umathoprelspacing",
   "Umathoprelspacing",
   "Umathordbinspacing",
   "Umathordclosespacing",
   "Umathordinnerspacing",
   "Umathordopenspacing",
   "Umathordopspacing",
-  "Umathordopspacing",
   "Umathordordspacing",
   "Umathordpunctspacing",
   "Umathordrelspacing",
-  "Umathordrelspacing",
   "Umathoverbarkern",
   "Umathoverbarrule",
-  "Umathoverbarrule",
   "Umathoverbarvgap",
   "Umathoverdelimiterbgap",
-  "Umathoverdelimiterbgap",
   "Umathoverdelimitervgap",
   "Umathpunctbinspacing",
-  "Umathpunctbinspacing",
   "Umathpunctclosespacing",
   "Umathpunctinnerspacing",
   "Umathpunctopenspacing",
-  "Umathpunctopenspacing",
-  "Umathpunctopspacing",
   "Umathpunctopspacing",
   "Umathpunctordspacing",
-  "Umathpunctordspacing",
   "Umathpunctpunctspacing",
   "Umathpunctrelspacing",
-  "Umathpunctrelspacing",
-  "Umathquad",
   "Umathquad",
   "Umathradicaldegreeafter",
-  "Umathradicaldegreeafter",
   "Umathradicaldegreebefore",
   "Umathradicaldegreeraise",
-  "Umathradicaldegreeraise",
   "Umathradicalkern",
-  "Umathradicalkern",
-  "Umathradicalrule",
   "Umathradicalrule",
   "Umathradicalvgap",
-  "Umathradicalvgap",
-  "Umathrelbinspacing",
   "Umathrelbinspacing",
   "Umathrelclosespacing",
-  "Umathrelclosespacing",
-  "Umathrelinnerspacing",
   "Umathrelinnerspacing",
   "Umathrelopenspacing",
-  "Umathrelopenspacing",
-  "Umathrelopspacing",
   "Umathrelopspacing",
   "Umathrelpunctspacing",
   "Umathrelrelspacing",
   "Umathspaceafterscript",
-  "Umathspaceafterscript",
   "Umathstackdenomdown",
   "Umathstacknumup",
-  "Umathstacknumup",
-  "Umathstackvgap",
   "Umathstackvgap",
   "Umathsubshiftdown",
-  "Umathsubshiftdown",
-  "Umathsubshiftdrop",
   "Umathsubshiftdrop",
   "Umathsubsupshiftdown",
   "Umathsubsupvgap",
-  "Umathsubsupvgap",
-  "Umathsubtopmax",
   "Umathsubtopmax",
   "Umathsupbottommin",
   "Umathsupshiftdrop",
   "Umathsupshiftup",
-  "Umathsupshiftup",
   "Umathsupsubbottommax",
   "Umathunderbarkern",
-  "Umathunderbarkern",
   "Umathunderbarrule",
-  "Umathunderbarrule",
-  "Umathunderbarvgap",
   "Umathunderbarvgap",
   "Umathunderdelimiterbgap",
-  "Umathunderdelimiterbgap",
-  "Umathunderdelimitervgap",
   "Umathunderdelimitervgap",
   "Uoverdelimiter",
   "Uradical",
-  "Uradical",
-  "Uroot",
   "Uroot",
   "Ustack",
-  "Ustack",
   "Ustartdisplaymath",
   "Ustartmath",
-  "Ustartmath",
   "Ustopdisplaymath",
   "Ustopmath",
   "Usubscript",
-  "Usubscript",
   "Usuperscript",
-  "Usuperscript",
-  "Uunderdelimiter",
   "Uunderdelimiter",
   "abovedisplayshortskip",
   "abovedisplayskip",
@@ -223,12 +146,9 @@ return {
   "aftergroup",
   "alignmark",
   "aligntab",
-  "aligntab",
   "atop",
   "atopwithdelims",
   "attribute",
-  "attribute",
-  "attributedef",
   "attributedef",
   "badness",
   "baselineskip",
@@ -240,15 +160,13 @@ return {
   "boxdir",
   "boxmaxdepth",
   "brokenpenalty",
-  "catcodetable",
+  "catcode",
   "catcodetable",
   "char",
-  "chardp",
+  "chardef",
   "chardp",
   "charht",
   "charit",
-  "charit",
-  "charwd",
   "charwd",
   "cleaders",
   "clearmarks",
@@ -260,11 +178,9 @@ return {
   "countdef",
   "cr",
   "crampeddisplaystyle",
-  "crampeddisplaystyle",
   "crampedscriptscriptstyle",
   "crampedscriptstyle",
   "crampedtextstyle",
-  "crampedtextstyle",
   "crcr",
   "csname",
   "currentgrouplevel",
@@ -273,6 +189,7 @@ return {
   "currentiflevel",
   "day",
   "deadcycles",
+  "def",
   "defaultskewchar",
   "delcode",
   "delimiterfactor",
@@ -319,9 +236,9 @@ return {
   "fontcharic",
   "fontcharwd",
   "fontid",
-  "fontid",
   "fontname",
   "formatname",
+  "futurelet",
   "gdef",
   "gleaders",
   "global",
@@ -349,8 +266,6 @@ return {
   "hyphenpenalty",
   "if",
   "ifabsdim",
-  "ifabsdim",
-  "ifabsnum",
   "ifabsnum",
   "ifcase",
   "ifcat",
@@ -366,7 +281,6 @@ return {
   "ifpdfabsdim",
   "ifpdfprimitive",
   "ifprimitive",
-  "ifprimitive",
   "iftrue",
   "ifvbox",
   "ifvmode",
@@ -376,7 +290,6 @@ return {
   "immediate",
   "indent",
   "initcatcodetable",
-  "initcatcodetable",
   "input",
   "insert",
   "insertpenalties",
@@ -389,11 +302,9 @@ return {
   "lastnodetype",
   "lastpenalty",
   "latelua",
-  "latelua",
   "lccode",
   "leaders",
   "leftghost",
-  "leftghost",
   "lefthyphenmin",
   "leftmarginkern",
   "leftskip",
@@ -404,19 +315,15 @@ return {
   "lineskip",
   "lineskiplimit",
   "localbrokenpenalty",
-  "localbrokenpenalty",
-  "localinterlinepenalty",
   "localinterlinepenalty",
   "localleftbox",
   "localrightbox",
-  "localrightbox",
   "long",
   "lowercase",
   "lpcode",
   "luaescapestring",
   "luatexdatestamp",
   "luatexrevision",
-  "luatexrevision",
   "luatexversion",
   "mark",
   "marks",
@@ -450,8 +357,6 @@ return {
   "noexpand",
   "noindent",
   "nokerns",
-  "nokerns",
-  "noligs",
   "noligs",
   "nolimits",
   "nolocaldirs",
@@ -460,27 +365,19 @@ return {
   "nullfont",
   "number",
   "odelcode",
-  "odelcode",
   "odelimiter",
-  "odelimiter",
-  "omathaccent",
   "omathaccent",
   "omathchar",
-  "omathchar",
-  "omathchardef",
   "omathchardef",
   "omathcode",
-  "omathcode",
   "omit",
   "openin",
   "openout",
   "or",
   "oradical",
-  "oradical",
   "outer",
   "output",
   "outputbox",
-  "outputbox",
   "outputpenalty",
   "over",
   "overfullrule",
@@ -495,19 +392,14 @@ return {
   "pagefilstretch",
   "pagegoal",
   "pageheight",
-  "pageheight",
-  "pageleftoffset",
   "pageleftoffset",
   "pageshrink",
   "pagestretch",
   "pagetopoffset",
-  "pagetopoffset",
   "pagetotal",
   "pagewidth",
-  "pagewidth",
   "par",
   "pardir",
-  "pardir",
   "parfillskip",
   "parshapedimen",
   "parshapeindent",
@@ -593,18 +485,14 @@ return {
   "postdisplaypenalty",
   "postexhyphenchar",
   "posthyphenchar",
-  "posthyphenchar",
   "predisplaydirection",
   "predisplaysize",
   "preexhyphenchar",
-  "preexhyphenchar",
-  "prehyphenchar",
   "prehyphenchar",
   "pretolerance",
   "prevdepth",
   "prevgraf",
   "primitive",
-  "primitive",
   "protected",
   "quitvmode",
   "raise",
@@ -613,12 +501,10 @@ return {
   "relax",
   "relpenalty",
   "right",
-  "rightghost",
   "rightmarginkern",
   "rightskip",
   "rpcode",
   "savecatcodetable",
-  "savecatcodetable",
   "savinghyphcodes",
   "scantextokens",
   "scriptfont",
@@ -651,16 +537,12 @@ return {
   "splittopskip",
   "string",
   "suppressfontnotfounderror",
-  "suppressfontnotfounderror",
-  "suppressifcsnameerror",
   "suppressifcsnameerror",
   "suppresslongerror",
   "suppressoutererror",
-  "suppressoutererror",
   "synctex",
   "tabskip",
   "tagcode",
-  "textdir",
   "textfont",
   "the",
   "thickmuskip",
diff --git a/tex/context/base/mult-prm.mkiv b/tex/context/base/mult-prm.mkiv
index 4fda18463..ab0c91b8e 100644
--- a/tex/context/base/mult-prm.mkiv
+++ b/tex/context/base/mult-prm.mkiv
@@ -1,17 +1,20 @@
 \starttext
 
 \startluacode
-    local primitives = { }
-    table.merge(primitives,table.fromhash(tex.primitives()))
-    table.merge(primitives,tex.extraprimitives('etex'))
-    table.merge(primitives,tex.extraprimitives('pdftex'))
-    table.merge(primitives,tex.extraprimitives('luatex'))
-    table.merge(primitives,tex.extraprimitives('aleph'))
-    table.merge(primitives,tex.extraprimitives('omega'))
+    local primitives = table.unique(
+        table.merge(
+            { },
+            table.fromhash(tex.primitives()),
+            tex.extraprimitives('etex'),
+            tex.extraprimitives('pdftex'),
+            tex.extraprimitives('luatex'),
+            tex.extraprimitives('aleph'),
+            tex.extraprimitives('omega'),
+            { "def", "catcode", "futurelet", "chardef", }
+        )
+    )
     table.sort(primitives)
-    while string.find(primitives[1],"[^A-Za-z]") do
-        table.remove(primitives,1)
-    end
+    table.remove(primitives,1) -- \-
     io.savedata("mult-prm.lua",table.serialize({ primitives = primitives },true,{ reduce = true, inline = false }))
 \stopluacode
 
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 1e72db3fc..2abcef338 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 48e8df334..e89a371d1 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/syst-aux.mkiv b/tex/context/base/syst-aux.mkiv
index c7a3d2325..796f3321e 100644
--- a/tex/context/base/syst-aux.mkiv
+++ b/tex/context/base/syst-aux.mkiv
@@ -156,7 +156,7 @@
 %D alternatives to this command. Beware, only the simple one
 %D has \type {\noexpand} before its argument.
 
- \long\def\@@expanded{} % always long; global (less restores)
+\long\def\@@expanded{} % always long; global (less restores)
 
 \long\def\expanded#1%
   {\long\xdef\@@expanded{\noexpand#1}\@@expanded}
@@ -3763,28 +3763,28 @@
 
 % faster
 
-\long\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
-  {\global\advance\outerrecurse \plusone
-   \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
-   \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
-   \ifnum#3>\zerocount
-     \ifnum#2<#1\relax
-       \let\nextrecurse\exitstepwiserecurse
-     \else
-       \let\nextrecurse\dodostepwiserecurse
-     \fi
-   \else
-     \ifnum#3<\zerocount
-       \ifnum#1<#2\relax
-         \let\nextrecurse\exitstepwiserecurse
-       \else
-         \let\nextrecurse\dodostepwisereverse
-       \fi
-     \else
-       \let\nextrecurse\exitstepwiserecurse
-     \fi
-   \fi
-   \normalexpanded{\nextrecurse{\number#1}{\number#2}{\number#3}}}
+% \long\unexpanded\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4
+%   {\global\advance\outerrecurse \plusone
+%    \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname##1##2{#4}%
+%    \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel
+%    \ifnum#3>\zerocount
+%      \ifnum#2<#1\relax
+%        \let\nextrecurse\exitstepwiserecurse
+%      \else
+%        \let\nextrecurse\dodostepwiserecurse
+%      \fi
+%    \else
+%      \ifnum#3<\zerocount
+%        \ifnum#1<#2\relax
+%          \let\nextrecurse\exitstepwiserecurse
+%        \else
+%          \let\nextrecurse\dodostepwisereverse
+%        \fi
+%      \else
+%        \let\nextrecurse\exitstepwiserecurse
+%      \fi
+%    \fi
+%    \normalexpanded{\nextrecurse{\number#1}{\number#2}{\number#3}}}
 
 % slightly faster
 
@@ -5982,7 +5982,7 @@
 
 \newbox\@@dlhbox
 
-\unexpanded \def\dontleavehmode
+\unexpanded\def\dontleavehmode
   {\ifhmode\else \ifmmode\else
      \setbox\@@dlhbox\hbox{\mathsurround\zeropoint\everymath\emptytoks$ $}\unhbox\@@dlhbox
    \fi \fi}
diff --git a/tex/context/base/syst-ini.mkiv b/tex/context/base/syst-ini.mkiv
index 3e8c8a749..7ff0c5575 100644
--- a/tex/context/base/syst-ini.mkiv
+++ b/tex/context/base/syst-ini.mkiv
@@ -581,7 +581,7 @@
 %D
 %D In \LUATEX\ we have ways around this.
 
-\def\tracingall
+\normalprotected\def\tracingall
   {\tracingonline    \plusone
    \tracingcommands  \plusthree
    \tracingstats     \plustwo
@@ -600,11 +600,11 @@
    \tracingassigns   \plustwo
    \errorstopmode}
 
-\def\loggingall
+\normalprotected\def\loggingall
   {\tracingall
    \tracingonline    \zerocount}
 
-\def\tracingnone
+\normalprotected\def\tracingnone
   {\tracingassigns   \zerocount
    \tracingnesting   \zerocount
    \tracingscantokens\zerocount
@@ -700,7 +700,7 @@
 %D does not support nested loops. We use a namespace prefix
 %D \type {@@pln}.
 
-\long\def\loop#1\repeat{\long\def\@@plnbody{#1}\@@plniterate}
+\long\def\loop#1\repeat{\long\def\@@plnbody{#1}\@@plniterate} % might go
 
 %D The following makes \type {\loop} \unknown\ \type {\if}
 %D \unknown\ \type {\repeat} skippable (clever trick):
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 48733addb..18d88e815 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  : 09/12/11 22:49:51
+-- merge date  : 09/14/11 12:21:17
 
 do -- begin closure to overcome local limits and interference
 
@@ -1726,6 +1726,29 @@ function lpeg.append(list,pp,delayed)
     return p
 end
 
+-- function lpeg.exact_match(words,case_insensitive)
+--     local pattern = concat(words)
+--     if case_insensitive then
+--         local pattern = S(upper(characters)) + S(lower(characters))
+--         local list = { }
+--         for i=1,#words do
+--             list[lower(words[i])] = true
+--         end
+--         return Cmt(pattern^1, function(_,i,s)
+--             return list[lower(s)] and i
+--         end)
+--     else
+--         local pattern = S(concat(words))
+--         local list = { }
+--         for i=1,#words do
+--             list[words[i]] = true
+--         end
+--         return Cmt(pattern^1, function(_,i,s)
+--             return list[s] and i
+--         end)
+--     end
+-- end
+
 end -- closure
 
 do -- begin closure to overcome local limits and interference
-- 
cgit v1.2.3