From 0206a143cbba88e11f40e4aabb9350b24a93a8ac Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Sat, 14 Dec 2013 14:40:29 +0200
Subject: beta 2013.12.14 13:34

---
 .../lexers/data/scite-context-data-metapost.lua    |   2 +-
 .../scite/scite-context-data-metapost.properties   |  54 +++++++-------
 doc/context/scripts/mkiv/mtx-youless.html          |   4 +-
 scripts/context/lua/mtx-fcd.lua                    |  26 +++++--
 scripts/context/lua/mtx-patterns.lua               |   6 +-
 scripts/context/lua/mtx-youless.lua                |   2 +-
 scripts/context/lua/mtxrun.lua                     |  74 +++++++++++++-----
 scripts/context/stubs/mswin/mtxrun.lua             |  74 +++++++++++++-----
 scripts/context/stubs/unix/mtxrun                  |  74 +++++++++++++-----
 tex/context/base/char-ini.lua                      |   4 +-
 tex/context/base/char-tex.lua                      |  16 ++--
 tex/context/base/cont-new.mkiv                     |   2 +-
 tex/context/base/context-version.pdf               | Bin 4106 -> 4125 bytes
 tex/context/base/context.mkiv                      |   2 +-
 tex/context/base/font-otn.lua                      |  70 +++++++++++++++++
 tex/context/base/l-table.lua                       |  21 ++++++
 tex/context/base/l-unicode.lua                     |  22 ++++--
 tex/context/base/lang-def.mkiv                     |  20 +++++
 tex/context/base/mult-def.mkiv                     |   4 +
 tex/context/base/mult-mps.lua                      |   2 +-
 tex/context/base/mult-sys.mkiv                     |   1 +
 tex/context/base/sort-lan.lua                      |   2 +-
 tex/context/base/status-files.pdf                  | Bin 24665 -> 24673 bytes
 tex/context/base/status-lua.pdf                    | Bin 227275 -> 227365 bytes
 tex/context/base/util-prs.lua                      |   4 +-
 tex/generic/context/luatex/luatex-fonts-merged.lua |  83 ++++++++++++++++++++-
 26 files changed, 453 insertions(+), 116 deletions(-)

diff --git a/context/data/scite/lexers/data/scite-context-data-metapost.lua b/context/data/scite/lexers/data/scite-context-data-metapost.lua
index fd3dc85b6..766ea90da 100644
--- a/context/data/scite/lexers/data/scite-context-data-metapost.lua
+++ b/context/data/scite/lexers/data/scite-context-data-metapost.lua
@@ -1,7 +1,7 @@
 return {
  ["commands"]={ "beginfig", "endfig", "beginglyph", "endglyph", "charscale", "rotatedaround", "reflectedabout", "arrowhead", "currentpen", "currentpicture", "cuttings", "defaultfont", "extra_beginfig", "extra_endfig", "ditto", "EOF", "down", "evenly", "fullcircle", "halfcircle", "identity", "in", "left", "origin", "pensquare", "quartercircle", "right", "unitsquare", "up", "withdots", "abs", "bbox", "ceiling", "center", "cutafter", "cutbefore", "dir", "directionpoint", "div", "dotprod", "intersectionpoint", "inverse", "mod", "round", "unitvector", "whatever", "cutdraw", "draw", "drawarrow", "drawdblarrow", "fill", "filldraw", "drawdot", "loggingall", "interact", "tracingall", "tracingnone", "pickup", "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", "clearxy", "clearit", "clearpen", "shipit", "font_extra_space", "exitunless", "relax", "hide", "gobble", "gobbled", "stop", "blankpicture", "counterclockwise", "tensepath", "takepower", "direction", "softjoin", "makelabel", "rotatedabout", "flex", "superellipse", "erase", "image", "nullpen", "savepen", "clearpen", "penpos", "penlabels", "range", "numtok", "thru", "z", "laboff", "bye", "red", "green", "blue", "cyan", "magenta", "yellow", "black", "white", "background", "graypart", "graycolor", "mm", "pt", "dd", "bp", "cm", "pc", "cc", "in", "triplet", "quadruplet" },
  ["internals"]={ "mitered", "rounded", "beveled", "butt", "squared", "eps", "epsilon", "infinity", "bboxmargin", "ahlength", "ahangle", "labeloffset", "dotlabeldiam", "defaultpen", "defaultscale", "join_radius", "pen_lft", "pen_rt", "pen_top", "pen_bot" },
- ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "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", "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", "interpath", "on", "off", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "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", "endinput", "message", "delimiters", "turningnumber", "errmessage", "readstring", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "greypart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "greycolor", "graycolor", "colormodel", "graypart", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode" },
+ ["primitives"]={ "charcode", "day", "linecap", "linejoin", "miterlimit", "month", "pausing", "prologues", "showstopping", "time", "tracingcapsules", "tracingchoices", "mpprocset", "tracingcommands", "tracingequations", "tracinglostchars", "tracingmacros", "tracingonline", "tracingoutput", "tracingrestores", "tracingspecs", "tracingstats", "tracingtitles", "truecorners", "warningcheck", "year", "false", "nullpicture", "pencircle", "true", "and", "angle", "arclength", "arctime", "ASCII", "boolean", "bot", "char", "color", "cosd", "cycle", "decimal", "directiontime", "floor", "fontsize", "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", "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", "interpath", "on", "off", "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary", "tertiary", "primarydef", "secondarydef", "tertiarydef", "randomseed", "also", "contour", "doublepath", "withcolor", "withcmykcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within", "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", "endinput", "message", "delimiters", "turningnumber", "errmessage", "readstring", "scantokens", "end", "outer", "inner", "write", "to", "readfrom", "withprescript", "withpostscript", "top", "bot", "lft", "rt", "ulft", "urt", "llft", "lrt", "redpart", "greenpart", "bluepart", "cyanpart", "magentapart", "yellowpart", "blackpart", "greypart", "prescriptpart", "postscriptpart", "rgbcolor", "cmykcolor", "greycolor", "graycolor", "colormodel", "graypart", "dashpart", "penpart", "stroked", "filled", "textual", "clipped", "bounded", "pathpart", "expandafter", "minute", "hour", "outputformat", "outputtemplate", "filenametemplate", "fontmapfile", "fontmapline", "fontpart", "fontsize", "glyph", "restoreclipcolor", "troffmode" },
  ["shortcuts"]={ "..", "...", "--", "---", "&" },
  ["tex"]={ "btex", "etex", "verbatimtex" },
 }
\ No newline at end of file
diff --git a/context/data/scite/scite-context-data-metapost.properties b/context/data/scite/scite-context-data-metapost.properties
index 31b079f64..88ace57ca 100644
--- a/context/data/scite/scite-context-data-metapost.properties
+++ b/context/data/scite/scite-context-data-metapost.properties
@@ -65,33 +65,33 @@ tension and controls interpath on \
 off def vardef enddef expr \
 suffix text primary secondary tertiary \
 primarydef secondarydef tertiarydef randomseed also \
-contour doublepath withcolor withpen dashed \
-if else elseif fi for \
-endfor forever exitif within 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 endinput message delimiters turningnumber \
-errmessage readstring scantokens end outer \
-inner write to readfrom withprescript \
-withpostscript top bot lft rt \
-ulft urt llft lrt redpart \
-greenpart bluepart cyanpart magentapart yellowpart \
-blackpart greypart prescriptpart postscriptpart rgbcolor \
-cmykcolor greycolor graycolor colormodel graypart \
-dashpart penpart stroked filled textual \
-clipped bounded pathpart expandafter minute \
-hour outputformat outputtemplate filenametemplate fontmapfile \
-fontmapline fontpart fontsize glyph restoreclipcolor \
-troffmode 
+contour doublepath withcolor withcmykcolor withpen \
+dashed if else elseif fi \
+for endfor forever exitif within \
+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 endinput message delimiters \
+turningnumber errmessage readstring scantokens end \
+outer inner write to readfrom \
+withprescript withpostscript top bot lft \
+rt ulft urt llft lrt \
+redpart greenpart bluepart cyanpart magentapart \
+yellowpart blackpart greypart prescriptpart postscriptpart \
+rgbcolor cmykcolor greycolor graycolor colormodel \
+graypart dashpart penpart stroked filled \
+textual clipped bounded pathpart expandafter \
+minute hour outputformat outputtemplate filenametemplate \
+fontmapfile fontmapline fontpart fontsize glyph \
+restoreclipcolor troffmode 
 
 keywordclass.metapost.shortcuts=\
 .. ... -- --- \
diff --git a/doc/context/scripts/mkiv/mtx-youless.html b/doc/context/scripts/mkiv/mtx-youless.html
index 6e31b91da..7f7fda694 100644
--- a/doc/context/scripts/mkiv/mtx-youless.html
+++ b/doc/context/scripts/mkiv/mtx-youless.html
@@ -14,7 +14,7 @@
 
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
     <head>
-        <title>youless Fetcher</title>
+        <title>YouLess Fetcher 1.00</title>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
                 <style type="text/css">
             body { color: #FFFFFF; background-color: #808080; font-family: optima, verdana, futura, "lucida sans", arial, geneva, helvetica, sans; font-size: 12px; line-height: 18px; } a:link, a:active, a:visited { color: #FFFFFF; } a.dir-view:link, a.dir-view:active, a.dir-view:visited { color: #FFFFFF; text-decoration: underline; } .valid { color: #00FF00; } .invalid { color: #FF0000; } button, .commonlink, .smallbutton { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; border-color: #7F7F7F; border-style: solid; border-width: .125ex; background-color: #FFFFFF; padding: .5ex; } .smallbutton { width: 1em; } a.commonlink:link, a.commonlink:active, a.commonlink:visited, a.smalllink:link, a.smalllink:active, a.smalllink:visited { font-weight: bold; font-size: 12px; text-decoration: none; color: #000000; } h1, .title { font-style: normal; font-weight: normal; font-size: 18px; line-height: 18px; margin-bottom: 20px; } h2, .subtitle { font-style: normal; font-weight: normal; font-size: 12px; margin-top: 18px; margin-bottom: 18px; } table { line-height: 18px; font-size: 12px; margin: 0; } th { font-weight: bold; text-align: left; padding-bottom: 6px; } .tc { font-weight: bold; text-align: left; } p, li { max-width: 60em; } .empty-line { margin-top: 4px; } .more-room { margin-right: 1.5em; } .much-more-room { margin-right: 3em; } #main { position: absolute; left: 10%; top: 10%; right: 10%; bottom: 10%; z-index: 2; width: 80%; height: 80%; padding: 0%; margin: 0%; overflow: auto; border-style: none; border-width: 0; background-color: #3F3F3F; } #main-settings { margin: 12px; x_max-width: 60em; line-height: 18px; font-size: 12px; } #left { position: absolute; top : 10%; left: 0%; bottom: 0%; right: 90%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; } #right { position: absolute; top : 0%; left: 90%; bottom: 10%; right: 0%; z-index: 1; width: 10%; height: 90%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #4F6F6F; _margin-left: -15px; } #bottom { position: absolute; left: 10%; right: 0%; top: 90%; bottom: 0%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top { position: absolute; left: 0%; right: 10%; top: 0%; bottom: 90%; z-index: 1; width: 90%; height: 10%; padding: 0%; margin: 0%; font-size: 16px; border-style: none; border-width: 0; background-color: #6F6F8F; } #top-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #top-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: right; vertical-align: middle; } #bottom-one { position: absolute; bottom: 50%; width: 100%; buggedheight: 100%; } #bottom-two { position: relative; margin-bottom: -9px; margin-left: 12px; margin-right: 12px; line-height: 18px; text-align: left; vertical-align: middle; } #left-one { position: absolute; width: 100%; buggedheight: 100%; } #left-two { position: relative; margin-top: 12px; line-height: 18px; text-align: center; vertical-align: top; } #right-one { display: table; height: 100%; width: 100%; } #right-two { display: table-row; height: 100%; width: 100%; } #right-three { display: table-cell; width: 100%; vertical-align: bottom; _position: absolute; _top: 100%; } #right-four { text-align: center; margin-bottom: 2ex; _position: relative; _top: -100%; } #more-top { position: absolute; top: 0%; left: 90%; bottom: 90%; right: 0%; z-index: 3; width: 10%; height: 10%; padding: 0%; margin: 0%; border-style: none; border-width: 0; } #more-top-settings { text-align: center; } #more-right-settings { margin-right: 12px; margin-left: 12px; line-height: 18px; font-size: 10px; text-align: center; } #right-safari { _display: table; width: 100%; height: 100%; } 
@@ -24,7 +24,7 @@
             </head>
             <body>
         <div id="top">            <div id="top-one">
-                <div id="top-two">youless Fetcher </div>
+                <div id="top-two">YouLess Fetcher 1.00 </div>
             </div>
         </div>
         <div id="bottom">            <div id="bottom-one">
diff --git a/scripts/context/lua/mtx-fcd.lua b/scripts/context/lua/mtx-fcd.lua
index 8655294d2..2fcb9a2c7 100644
--- a/scripts/context/lua/mtx-fcd.lua
+++ b/scripts/context/lua/mtx-fcd.lua
@@ -122,13 +122,25 @@ local stubdata
 local stubdummy
 local stubchdir
 
+
 if os.type == 'windows' then
-    gotofile  = 'mtx-fcd-goto.cmd'
-    datafile  = 'mtx-fcd-data.lua'
-    stubfile  = 'fcd.cmd'
-    stubdata  = mswinstub
-    stubdummy = 'rem no dir to change to'
-    stubchdir = 'cd /d "%s"'
+    local shell = "cmd"
+--     local shell = "powershell"
+    if shell == "powershell" then
+        gotofile  = 'mtx-fcd-goto.ps1'
+        datafile  = 'mtx-fcd-data.lua'
+        stubfile  = 'fcd.cmd'
+        stubdata  = mswinstub
+        stubdummy = '# no dir to change to'
+        stubchdir = '. Set-Location %s' -- powershell
+    else
+        gotofile  = 'mtx-fcd-goto.cmd'
+        datafile  = 'mtx-fcd-data.lua'
+        stubfile  = 'fcd.cmd'
+        stubdata  = mswinstub
+        stubdummy = 'rem no dir to change to'
+        stubchdir = 'cd /d "%s"' -- cmd
+    end
 else
     gotofile  = 'mtx-fcd-goto.sh'
     datafile  = 'mtx-fcd-data.lua'
@@ -183,7 +195,7 @@ end
 
 local function fcd_changeto(dir)
     if dir and dir ~= "" then
-        io.savedata(gotofile,format(stubchdir,dir))
+        io.savedata(gotofile,format(stubchdir,dir,dir))
     end
 end
 
diff --git a/scripts/context/lua/mtx-patterns.lua b/scripts/context/lua/mtx-patterns.lua
index dca81568e..f887d8c6c 100644
--- a/scripts/context/lua/mtx-patterns.lua
+++ b/scripts/context/lua/mtx-patterns.lua
@@ -129,7 +129,7 @@ scripts.patterns.list = {
  -- { "lo",  "hyph-lo",            "lao" },
     { "lt",  "hyph-lt",            "lithuanian" },
     { "lv",  "hyph-lv",            "latvian" },
- -- { "ml",  "hyph-ml",            "..." },
+    { "ml",  "hyph-ml",            "malayalam" },
     { "mn",  "hyph-mn-cyrl",       "mongolian, cyrillic script" },
  -- { "mr",  "hyph-mr",            "..." },
     { "nb",  "hyph-nb",            "norwegian bokmål" },
@@ -282,11 +282,11 @@ function scripts.patterns.load(path,name,mnemonic,ignored)
                             report("%s: no entry in chardata for character %C",basename,b)
                         else
                             local ct = cdb.category
-                            if ct == "lu" or ct == "ll" or ct == "lo" or ct == "mn" then -- hm, really mn ?
+                            if ct == "lu" or ct == "ll" or ct == "lo" or ct == "mn" or ct == "mc" then -- hm, really mn and mc ?
                                 used[char(b)] = true
                             elseif ct == "nd" then
                                 -- number
-                            else
+                            else -- maybe accent cf  (200D)
                                 report("%s: removing line with suspected utf character %C, category %s: %s",basename,b,ct,line)
                                 splitdata[i] = ""
                                 break
diff --git a/scripts/context/lua/mtx-youless.lua b/scripts/context/lua/mtx-youless.lua
index db8e8b48f..740fdcb65 100644
--- a/scripts/context/lua/mtx-youless.lua
+++ b/scripts/context/lua/mtx-youless.lua
@@ -50,7 +50,7 @@ local helpinfo = [[
 
 local application = logs.application {
     name     = "mtx-youless",
-    banner   = "youless Fetcher",
+    banner   = "YouLess Fetcher 1.00",
     helpinfo = helpinfo,
 }
 
diff --git a/scripts/context/lua/mtxrun.lua b/scripts/context/lua/mtxrun.lua
index 6b736737a..eda9f9185 100644
--- a/scripts/context/lua/mtxrun.lua
+++ b/scripts/context/lua/mtxrun.lua
@@ -1172,7 +1172,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["l-table"] = package.loaded["l-table"] or true
 
--- original size: 30618, stripped down to: 19908
+-- original size: 31038, stripped down to: 20207
 
 if not modules then modules={} end modules ['l-table']={
   version=1.001,
@@ -2032,6 +2032,24 @@ function table.sorted(t,...)
   sort(t,...)
   return t 
 end
+function table.values(t,s) 
+  if t then
+    local values,keys,v={},{},0
+    for key,value in next,t do
+      if not keys[value] then
+        v=v+1
+        values[v]=value
+        keys[k]=key
+      end
+    end
+    if s then
+      sort(values)
+    end
+    return values
+  else
+    return {}
+  end
+end
 
 
 end -- of closure
@@ -4136,7 +4154,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
 
--- original size: 33066, stripped down to: 14607
+-- original size: 33250, stripped down to: 14767
 
 if not modules then modules={} end modules ['l-unicode']={
   version=1.001,
@@ -4622,17 +4640,25 @@ local function big(c)
 end
 local _,l_remap=utf.remapper(little)
 local _,b_remap=utf.remapper(big)
-function utf.utf8_to_utf16_be(str)
-  return char(254,255)..lpegmatch(b_remap,str)
+function utf.utf8_to_utf16_be(str,nobom)
+  if nobom then
+    return lpegmatch(b_remap,str)
+  else
+    return char(254,255)..lpegmatch(b_remap,str)
+  end
 end
-function utf.utf8_to_utf16_le(str)
-  return char(255,254)..lpegmatch(l_remap,str)
+function utf.utf8_to_utf16_le(str,nobom)
+  if nobom then
+    return lpegmatch(l_remap,str)
+  else
+    return char(255,254)..lpegmatch(l_remap,str)
+  end
 end
-function utf.utf8_to_utf16(str,littleendian)
+function utf.utf8_to_utf16(str,littleendian,nobom)
   if littleendian then
-    return utf.utf8_to_utf16_le(str)
+    return utf.utf8_to_utf16_le(str,nobom)
   else
-    return utf.utf8_to_utf16_be(str)
+    return utf.utf8_to_utf16_be(str,nobom)
   end
 end
 local pattern=Cs (
@@ -6094,7 +6120,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["util-prs"] = package.loaded["util-prs"] or true
 
--- original size: 19537, stripped down to: 13941
+-- original size: 19551, stripped down to: 13951
 
 if not modules then modules={} end modules ['util-prs']={
   version=1.001,
@@ -6455,8 +6481,8 @@ function parsers.rfc4180splitter(specification)
   local separator=S(separator~="" and separator or ",")
   local escaped=quotechar*Cs((dquotechar+(1-quotechar))^0)*quotechar
   local non_escaped=C((1-quotechar-newline-separator)^1)
-  local field=escaped+non_escaped
-  local record=Ct((field*separator^-1)^1)
+  local field=escaped+non_escaped+Cc("")
+  local record=Ct(field*(separator*field)^1)
   local headerline=record*Cp()
   local wholeblob=Ct((newline^-1*record)^0)
   return function(data,getheader)
@@ -16641,8 +16667,8 @@ end -- of closure
 
 -- used libraries    : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
 -- skipped libraries : -
--- original bytes    : 684102
--- stripped bytes    : 242123
+-- original bytes    : 684720
+-- stripped bytes    : 242272
 
 -- end library merge
 
@@ -17459,10 +17485,22 @@ function runners.execute_ctx_script(filename,...)
                     local scriptbase = match(scriptname,".*mtx%-([^%-]-)%.lua")
                     if scriptbase then
                         local data = io.loaddata(scriptname)
-                        local banner, version = match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)")
-                        if banner then
-                            valid[#valid+1] = { scriptbase, version, banner }
-                        end
+local application = match(data,"local application.-=.-(%{.-%})")
+if application then
+    application = loadstring("return " .. application)
+    if application then
+        application = application()
+        local banner = application.banner
+        if banner then
+            local description, version = match(banner,"^(.-) ([%d.]+)$")
+            if description then
+                valid[#valid+1] = { scriptbase, version, description }
+            else
+                valid[#valid+1] = { scriptbase, "", banner }
+            end
+        end
+    end
+end
                     end
                 end
                 if #valid > 0 then
diff --git a/scripts/context/stubs/mswin/mtxrun.lua b/scripts/context/stubs/mswin/mtxrun.lua
index 6b736737a..eda9f9185 100644
--- a/scripts/context/stubs/mswin/mtxrun.lua
+++ b/scripts/context/stubs/mswin/mtxrun.lua
@@ -1172,7 +1172,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["l-table"] = package.loaded["l-table"] or true
 
--- original size: 30618, stripped down to: 19908
+-- original size: 31038, stripped down to: 20207
 
 if not modules then modules={} end modules ['l-table']={
   version=1.001,
@@ -2032,6 +2032,24 @@ function table.sorted(t,...)
   sort(t,...)
   return t 
 end
+function table.values(t,s) 
+  if t then
+    local values,keys,v={},{},0
+    for key,value in next,t do
+      if not keys[value] then
+        v=v+1
+        values[v]=value
+        keys[k]=key
+      end
+    end
+    if s then
+      sort(values)
+    end
+    return values
+  else
+    return {}
+  end
+end
 
 
 end -- of closure
@@ -4136,7 +4154,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
 
--- original size: 33066, stripped down to: 14607
+-- original size: 33250, stripped down to: 14767
 
 if not modules then modules={} end modules ['l-unicode']={
   version=1.001,
@@ -4622,17 +4640,25 @@ local function big(c)
 end
 local _,l_remap=utf.remapper(little)
 local _,b_remap=utf.remapper(big)
-function utf.utf8_to_utf16_be(str)
-  return char(254,255)..lpegmatch(b_remap,str)
+function utf.utf8_to_utf16_be(str,nobom)
+  if nobom then
+    return lpegmatch(b_remap,str)
+  else
+    return char(254,255)..lpegmatch(b_remap,str)
+  end
 end
-function utf.utf8_to_utf16_le(str)
-  return char(255,254)..lpegmatch(l_remap,str)
+function utf.utf8_to_utf16_le(str,nobom)
+  if nobom then
+    return lpegmatch(l_remap,str)
+  else
+    return char(255,254)..lpegmatch(l_remap,str)
+  end
 end
-function utf.utf8_to_utf16(str,littleendian)
+function utf.utf8_to_utf16(str,littleendian,nobom)
   if littleendian then
-    return utf.utf8_to_utf16_le(str)
+    return utf.utf8_to_utf16_le(str,nobom)
   else
-    return utf.utf8_to_utf16_be(str)
+    return utf.utf8_to_utf16_be(str,nobom)
   end
 end
 local pattern=Cs (
@@ -6094,7 +6120,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["util-prs"] = package.loaded["util-prs"] or true
 
--- original size: 19537, stripped down to: 13941
+-- original size: 19551, stripped down to: 13951
 
 if not modules then modules={} end modules ['util-prs']={
   version=1.001,
@@ -6455,8 +6481,8 @@ function parsers.rfc4180splitter(specification)
   local separator=S(separator~="" and separator or ",")
   local escaped=quotechar*Cs((dquotechar+(1-quotechar))^0)*quotechar
   local non_escaped=C((1-quotechar-newline-separator)^1)
-  local field=escaped+non_escaped
-  local record=Ct((field*separator^-1)^1)
+  local field=escaped+non_escaped+Cc("")
+  local record=Ct(field*(separator*field)^1)
   local headerline=record*Cp()
   local wholeblob=Ct((newline^-1*record)^0)
   return function(data,getheader)
@@ -16641,8 +16667,8 @@ end -- of closure
 
 -- used libraries    : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
 -- skipped libraries : -
--- original bytes    : 684102
--- stripped bytes    : 242123
+-- original bytes    : 684720
+-- stripped bytes    : 242272
 
 -- end library merge
 
@@ -17459,10 +17485,22 @@ function runners.execute_ctx_script(filename,...)
                     local scriptbase = match(scriptname,".*mtx%-([^%-]-)%.lua")
                     if scriptbase then
                         local data = io.loaddata(scriptname)
-                        local banner, version = match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)")
-                        if banner then
-                            valid[#valid+1] = { scriptbase, version, banner }
-                        end
+local application = match(data,"local application.-=.-(%{.-%})")
+if application then
+    application = loadstring("return " .. application)
+    if application then
+        application = application()
+        local banner = application.banner
+        if banner then
+            local description, version = match(banner,"^(.-) ([%d.]+)$")
+            if description then
+                valid[#valid+1] = { scriptbase, version, description }
+            else
+                valid[#valid+1] = { scriptbase, "", banner }
+            end
+        end
+    end
+end
                     end
                 end
                 if #valid > 0 then
diff --git a/scripts/context/stubs/unix/mtxrun b/scripts/context/stubs/unix/mtxrun
index 6b736737a..eda9f9185 100644
--- a/scripts/context/stubs/unix/mtxrun
+++ b/scripts/context/stubs/unix/mtxrun
@@ -1172,7 +1172,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["l-table"] = package.loaded["l-table"] or true
 
--- original size: 30618, stripped down to: 19908
+-- original size: 31038, stripped down to: 20207
 
 if not modules then modules={} end modules ['l-table']={
   version=1.001,
@@ -2032,6 +2032,24 @@ function table.sorted(t,...)
   sort(t,...)
   return t 
 end
+function table.values(t,s) 
+  if t then
+    local values,keys,v={},{},0
+    for key,value in next,t do
+      if not keys[value] then
+        v=v+1
+        values[v]=value
+        keys[k]=key
+      end
+    end
+    if s then
+      sort(values)
+    end
+    return values
+  else
+    return {}
+  end
+end
 
 
 end -- of closure
@@ -4136,7 +4154,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["l-unicode"] = package.loaded["l-unicode"] or true
 
--- original size: 33066, stripped down to: 14607
+-- original size: 33250, stripped down to: 14767
 
 if not modules then modules={} end modules ['l-unicode']={
   version=1.001,
@@ -4622,17 +4640,25 @@ local function big(c)
 end
 local _,l_remap=utf.remapper(little)
 local _,b_remap=utf.remapper(big)
-function utf.utf8_to_utf16_be(str)
-  return char(254,255)..lpegmatch(b_remap,str)
+function utf.utf8_to_utf16_be(str,nobom)
+  if nobom then
+    return lpegmatch(b_remap,str)
+  else
+    return char(254,255)..lpegmatch(b_remap,str)
+  end
 end
-function utf.utf8_to_utf16_le(str)
-  return char(255,254)..lpegmatch(l_remap,str)
+function utf.utf8_to_utf16_le(str,nobom)
+  if nobom then
+    return lpegmatch(l_remap,str)
+  else
+    return char(255,254)..lpegmatch(l_remap,str)
+  end
 end
-function utf.utf8_to_utf16(str,littleendian)
+function utf.utf8_to_utf16(str,littleendian,nobom)
   if littleendian then
-    return utf.utf8_to_utf16_le(str)
+    return utf.utf8_to_utf16_le(str,nobom)
   else
-    return utf.utf8_to_utf16_be(str)
+    return utf.utf8_to_utf16_be(str,nobom)
   end
 end
 local pattern=Cs (
@@ -6094,7 +6120,7 @@ do -- create closure to overcome 200 locals limit
 
 package.loaded["util-prs"] = package.loaded["util-prs"] or true
 
--- original size: 19537, stripped down to: 13941
+-- original size: 19551, stripped down to: 13951
 
 if not modules then modules={} end modules ['util-prs']={
   version=1.001,
@@ -6455,8 +6481,8 @@ function parsers.rfc4180splitter(specification)
   local separator=S(separator~="" and separator or ",")
   local escaped=quotechar*Cs((dquotechar+(1-quotechar))^0)*quotechar
   local non_escaped=C((1-quotechar-newline-separator)^1)
-  local field=escaped+non_escaped
-  local record=Ct((field*separator^-1)^1)
+  local field=escaped+non_escaped+Cc("")
+  local record=Ct(field*(separator*field)^1)
   local headerline=record*Cp()
   local wholeblob=Ct((newline^-1*record)^0)
   return function(data,getheader)
@@ -16641,8 +16667,8 @@ end -- of closure
 
 -- used libraries    : l-lua.lua l-package.lua l-lpeg.lua l-function.lua l-string.lua l-table.lua l-io.lua l-number.lua l-set.lua l-os.lua l-file.lua l-gzip.lua l-md5.lua l-url.lua l-dir.lua l-boolean.lua l-unicode.lua l-math.lua util-str.lua util-tab.lua util-sto.lua util-prs.lua util-fmt.lua trac-set.lua trac-log.lua trac-inf.lua trac-pro.lua util-lua.lua util-deb.lua util-mrg.lua util-tpl.lua util-env.lua luat-env.lua lxml-tab.lua lxml-lpt.lua lxml-mis.lua lxml-aux.lua lxml-xml.lua trac-xml.lua data-ini.lua data-exp.lua data-env.lua data-tmp.lua data-met.lua data-res.lua data-pre.lua data-inp.lua data-out.lua data-fil.lua data-con.lua data-use.lua data-zip.lua data-tre.lua data-sch.lua data-lua.lua data-aux.lua data-tmf.lua data-lst.lua util-lib.lua luat-sta.lua luat-fmt.lua
 -- skipped libraries : -
--- original bytes    : 684102
--- stripped bytes    : 242123
+-- original bytes    : 684720
+-- stripped bytes    : 242272
 
 -- end library merge
 
@@ -17459,10 +17485,22 @@ function runners.execute_ctx_script(filename,...)
                     local scriptbase = match(scriptname,".*mtx%-([^%-]-)%.lua")
                     if scriptbase then
                         local data = io.loaddata(scriptname)
-                        local banner, version = match(data,"[\n\r]logs%.extendbanner%s*%(%s*[\"\']([^\n\r]+)%s*(%d+%.%d+)")
-                        if banner then
-                            valid[#valid+1] = { scriptbase, version, banner }
-                        end
+local application = match(data,"local application.-=.-(%{.-%})")
+if application then
+    application = loadstring("return " .. application)
+    if application then
+        application = application()
+        local banner = application.banner
+        if banner then
+            local description, version = match(banner,"^(.-) ([%d.]+)$")
+            if description then
+                valid[#valid+1] = { scriptbase, version, description }
+            else
+                valid[#valid+1] = { scriptbase, "", banner }
+            end
+        end
+    end
+end
                     end
                 end
                 if #valid > 0 then
diff --git a/tex/context/base/char-ini.lua b/tex/context/base/char-ini.lua
index a94aa6b5f..d2236f871 100644
--- a/tex/context/base/char-ini.lua
+++ b/tex/context/base/char-ini.lua
@@ -920,13 +920,13 @@ if not characters.superscripts then
             if what == "super" then
                 if #specials == 2 then
                     superscripts[k] = specials[2]
-                else
+                elseif trace_defining then
                     report_defining("ignoring %s %a, char %c, description %a","superscript",ustring(k),k,v.description)
                 end
             elseif what == "sub" then
                 if #specials == 2 then
                     subscripts[k] = specials[2]
-                else
+                elseif trace_defining then
                     report_defining("ignoring %s %a, char %c, description %a","subscript",ustring(k),k,v.description)
                 end
             end
diff --git a/tex/context/base/char-tex.lua b/tex/context/base/char-tex.lua
index 91aa387b9..4c397ab3b 100644
--- a/tex/context/base/char-tex.lua
+++ b/tex/context/base/char-tex.lua
@@ -164,7 +164,8 @@ local function remap_accents(a,c,braced)
 end
 
 local command_map = allocate {
-    ["i"] = "ı"
+    ["i"] = "ı",
+    ["l"] = "ł",
 }
 
 local function remap_commands(c)
@@ -176,8 +177,9 @@ local function remap_commands(c)
     end
 end
 
-local accents  = (P('\\') * C(S(accents)) * (P("{") * C(U) * P("}" * Cc(true)) + C(U) * Cc(false))) / remap_accents
-local commands = (P('\\') * C(R("az","AZ")^1)) / remap_commands
+local spaces   = P(" ")^0
+local accents  = ( P('\\') * C(S(accents)) * spaces * (P("{") * C(U) * P("}" * Cc(true)) + C(U) * Cc(false)) ) / remap_accents
+local commands = ( P('\\') * C(R("az","AZ")^1) + P("{") * P('\\') * C(R("az","AZ")^1) * spaces * P("}") )/ remap_commands
 
 local convert_accents  = Cs((accents  + P(1))^0)
 local convert_commands = Cs((commands + P(1))^0)
@@ -198,8 +200,12 @@ function characters.tex.toutf(str,strip)
     end
 end
 
---~ print(characters.tex.toutf([[\"{e}]]),true)
---~ print(characters.tex.toutf([[{\"{e}}]],true))
+-- print(characters.tex.toutf([[\"{e}]],true))
+-- print(characters.tex.toutf([[\" {e}]],true))
+-- print(characters.tex.toutf([[{\"{e}}]],true))
+-- print(characters.tex.toutf([[{\" {e}}]],true))
+-- print(characters.tex.toutf([[{\l}]],true))
+-- print(characters.tex.toutf([[{\l }]],true))
 
 function characters.tex.defineaccents()
     for accent, group in next, accentmapping do
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index 0cd286558..0d9ac18ef 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{2013.12.04 11:34}
+\newcontextversion{2013.12.14 13:34}
 
 %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 7a8ffb800..aaadd65a6 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 87fe9c8ff..9904e1655 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -25,7 +25,7 @@
 %D up and the dependencies are more consistent.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2013.12.04 11:34}
+\edef\contextversion{2013.12.14 13:34}
 \edef\contextkind   {beta}
 
 %D For those who want to use this:
diff --git a/tex/context/base/font-otn.lua b/tex/context/base/font-otn.lua
index d9e4b9b64..c57be5f02 100644
--- a/tex/context/base/font-otn.lua
+++ b/tex/context/base/font-otn.lua
@@ -2260,6 +2260,35 @@ local function featuresprocessor(head,font,attr)
                         end
                     end
 
+                    local function kerndisc(disc) -- we can assume that prev and next are glyphs
+                        local prev = disc.prev
+                        local next = disc.next
+                        if prev and next then
+                            prev.next = next
+                         -- next.prev = prev
+                            local a = prev[0]
+                            if a then
+                                a = (a == attr) and (not attribute or prev[a_state] == attribute)
+                            else
+                                a = not attribute or prev[a_state] == attribute
+                            end
+                            if a then
+                                local lookupmatch = lookupcache[prev.char]
+                                if lookupmatch then
+                                    -- sequence kan weg
+                                    local h, d, ok = handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
+                                    if ok then
+                                        done = true
+                                        success = true
+                                    end
+                                end
+                            end
+                            prev.next = disc
+                         -- next.prev = disc
+                        end
+                        return next
+                    end
+
                     while start do
                         local id = start.id
                         if id == glyph_code then
@@ -2305,6 +2334,8 @@ local function featuresprocessor(head,font,attr)
                                     local new = subrun(replace)
                                     if new then start.replace = new end
                                 end
+elseif typ == "gpos_single" or typ == "gpos_pair" then
+    kerndisc(start)
                             end
                             start = start.next
                         elseif id == whatsit_code then -- will be function
@@ -2402,6 +2433,43 @@ local function featuresprocessor(head,font,attr)
                     end
                 end
 
+                local function kerndisc(disc) -- we can assume that prev and next are glyphs
+                    local prev = disc.prev
+                    local next = disc.next
+                    if prev and next then
+                        prev.next = next
+                     -- next.prev = prev
+                        local a = prev[0]
+                        if a then
+                            a = (a == attr) and (not attribute or prev[a_state] == attribute)
+                        else
+                            a = not attribute or prev[a_state] == attribute
+                        end
+                        if a then
+                            for i=1,ns do
+                                local lookupname = subtables[i]
+                                local lookupcache = lookuphash[lookupname]
+                                if lookupcache then
+                                    local lookupmatch = lookupcache[prev.char]
+                                    if lookupmatch then
+                                        -- we could move all code inline but that makes things even more unreadable
+                                        local h, d, ok = handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
+                                        if ok then
+                                            done = true
+                                            break
+                                        end
+                                    end
+                                else
+                                    report_missing_cache(typ,lookupname)
+                                end
+                            end
+                        end
+                        prev.next = disc
+                     -- next.prev = disc
+                    end
+                    return next
+                end
+
                 while start do
                     local id = start.id
                     if id == glyph_code then
@@ -2459,6 +2527,8 @@ local function featuresprocessor(head,font,attr)
                                 local new = subrun(replace)
                                 if new then start.replace = new end
                             end
+elseif typ == "gpos_single" or typ == "gpos_pair" then
+    kerndisc(start)
                         end
                         start = start.next
                     elseif id == whatsit_code then
diff --git a/tex/context/base/l-table.lua b/tex/context/base/l-table.lua
index 11cb66bef..c6bbc62d6 100644
--- a/tex/context/base/l-table.lua
+++ b/tex/context/base/l-table.lua
@@ -1054,3 +1054,24 @@ function table.sorted(t,...)
     sort(t,...)
     return t -- still sorts in-place
 end
+
+--
+
+function table.values(t,s) -- optional sort flag
+    if t then
+        local values, keys, v = { }, { }, 0
+        for key, value in next, t do
+            if not keys[value] then
+                v = v + 1
+                values[v] = value
+                keys[k] = key
+            end
+        end
+        if s then
+            sort(values)
+        end
+        return values
+    else
+        return { }
+    end
+end
diff --git a/tex/context/base/l-unicode.lua b/tex/context/base/l-unicode.lua
index 7ada394d5..902f6a0d0 100644
--- a/tex/context/base/l-unicode.lua
+++ b/tex/context/base/l-unicode.lua
@@ -935,19 +935,27 @@ end
 local _, l_remap = utf.remapper(little)
 local _, b_remap = utf.remapper(big)
 
-function utf.utf8_to_utf16_be(str)
-    return char(254,255) .. lpegmatch(b_remap,str)
+function utf.utf8_to_utf16_be(str,nobom)
+    if nobom then
+        return lpegmatch(b_remap,str)
+    else
+        return char(254,255) .. lpegmatch(b_remap,str)
+    end
 end
 
-function utf.utf8_to_utf16_le(str)
-    return char(255,254) .. lpegmatch(l_remap,str)
+function utf.utf8_to_utf16_le(str,nobom)
+    if nobom then
+        return lpegmatch(l_remap,str)
+    else
+        return char(255,254) .. lpegmatch(l_remap,str)
+    end
 end
 
-function utf.utf8_to_utf16(str,littleendian)
+function utf.utf8_to_utf16(str,littleendian,nobom)
     if littleendian then
-        return utf.utf8_to_utf16_le(str)
+        return utf.utf8_to_utf16_le(str,nobom)
     else
-        return utf.utf8_to_utf16_be(str)
+        return utf.utf8_to_utf16_be(str,nobom)
     end
 end
 
diff --git a/tex/context/base/lang-def.mkiv b/tex/context/base/lang-def.mkiv
index ecd5b3c22..18f572039 100644
--- a/tex/context/base/lang-def.mkiv
+++ b/tex/context/base/lang-def.mkiv
@@ -696,6 +696,26 @@
 
 \installlanguage [\s!thai] [\s!th]
 
+%D Malayalam (needs to be checked)
+
+\installlanguage
+  [\s!ml]
+  [\c!spacing=\v!broad,
+   \c!leftsentence=\emdash,
+   \c!rightsentence=\emdash,
+   \c!leftsubsentence=\emdash,
+   \c!rightsubsentence=\emdash,
+   \c!leftquote=\upperleftsinglesixquote,
+   \c!rightquote=\upperrightsingleninequote,
+   \c!leftquotation=\upperleftdoublesixquote,
+   \c!rightquotation=\upperrightdoubleninequote,
+   \c!date={\v!month,\space,\v!day,{,\space},\v!year},
+   \s!patterns=\s!ml,
+   \s!lefthyphenmin=2,
+   \s!righthyphenmin=3]
+
+\installlanguage [\s!malayalam] [\s!ml]
+
 %D Todo: generate this one from languages.data
 
 \installlanguage[nld][\s!nl]
diff --git a/tex/context/base/mult-def.mkiv b/tex/context/base/mult-def.mkiv
index 15d533009..3d480e187 100644
--- a/tex/context/base/mult-def.mkiv
+++ b/tex/context/base/mult-def.mkiv
@@ -107,6 +107,10 @@
 \ifdefined\v!rule          \else \def\v!rule          {rule}           \fi
 \ifdefined\v!oldstyle      \else \def\v!oldstyle      {oldstyle}       \fi
 
+\def\c!etallimit  {etallimit}
+\def\c!etaldisplay{etaldisplay}
+\def\c!etaltext   {etaltext}
+
 % stop todo
 
 \protect \endinput
diff --git a/tex/context/base/mult-mps.lua b/tex/context/base/mult-mps.lua
index d50beb640..104b9d42e 100644
--- a/tex/context/base/mult-mps.lua
+++ b/tex/context/base/mult-mps.lua
@@ -31,7 +31,7 @@ return {
         "def", "vardef", "enddef", "expr", "suffix", "text", "primary", "secondary",
         "tertiary", "primarydef", "secondarydef", "tertiarydef",
         "randomseed", "also", "contour", "doublepath",
-        "withcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within",
+        "withcolor", "withcmykcolor", "withpen", "dashed", "if", "else", "elseif", "fi", "for", "endfor", "forever", "exitif", "within",
         "forsuffixes", "downto", "upto", "step", "until",
         "charlist", "extensible", "fontdimen", "headerbyte", "kern", "ligtable",
         "boundarychar", "chardp", "charext", "charht", "charic", "charwd", "designsize",
diff --git a/tex/context/base/mult-sys.mkiv b/tex/context/base/mult-sys.mkiv
index 6c6db58e1..8c1bff2bc 100644
--- a/tex/context/base/mult-sys.mkiv
+++ b/tex/context/base/mult-sys.mkiv
@@ -56,6 +56,7 @@
 \definesystemconstant {latin}        \definesystemconstant {la}
 \definesystemconstant {lithuanian}   \definesystemconstant {lt}
 \definesystemconstant {bokmal}       \definesystemconstant {nb}
+\definesystemconstant {malayalam}    \definesystemconstant {ml}
 \definesystemconstant {norwegian}    \definesystemconstant {no}
 \definesystemconstant {nynorsk}      \definesystemconstant {nn}
 \definesystemconstant {polish}       \definesystemconstant {pl}
diff --git a/tex/context/base/sort-lan.lua b/tex/context/base/sort-lan.lua
index 8efc0924a..6d16c0d80 100644
--- a/tex/context/base/sort-lan.lua
+++ b/tex/context/base/sort-lan.lua
@@ -59,7 +59,7 @@ definitions["en"] = { parent = "default" }
 definitions['nl'] = {
     parent = 'default',
     replacements = {
-        { "ij", 'y' }, { "IJ", 'Y' },
+        { "ij", 'y' }, { "IJ", 'Y' }, -- hm
     },
 }
 
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 5bfe22f86..8ace29921 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 4c381f1ce..637a7d51d 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/util-prs.lua b/tex/context/base/util-prs.lua
index 29a57e094..9518b7f38 100644
--- a/tex/context/base/util-prs.lua
+++ b/tex/context/base/util-prs.lua
@@ -483,8 +483,8 @@ function parsers.rfc4180splitter(specification)
                       * Cs((dquotechar + (1 - quotechar))^0)
                       * quotechar
     local non_escaped = C((1 - quotechar - newline - separator)^1)
-    local field       = escaped + non_escaped
-    local record      = Ct((field * separator^-1)^1)
+    local field       = escaped + non_escaped + Cc("")
+    local record      = Ct(field * (separator * field)^1)
     local headerline  = record * Cp()
     local wholeblob   = Ct((newline^-1 * record)^0)
     return function(data,getheader)
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 4366fb070..3a705f242 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
 -- merged file : luatex-fonts-merged.lua
 -- parent file : luatex-fonts.lua
--- merge date  : 12/04/13 11:34:01
+-- merge date  : 12/14/13 13:34:05
 
 do -- begin closure to overcome local limits and interference
 
@@ -1668,6 +1668,24 @@ function table.sorted(t,...)
   sort(t,...)
   return t 
 end
+function table.values(t,s) 
+  if t then
+    local values,keys,v={},{},0
+    for key,value in next,t do
+      if not keys[value] then
+        v=v+1
+        values[v]=value
+        keys[k]=key
+      end
+    end
+    if s then
+      sort(values)
+    end
+    return values
+  else
+    return {}
+  end
+end
 
 end -- closure
 
@@ -8813,6 +8831,7 @@ nodes.injections=nodes.injections or {}
 local injections=nodes.injections
 local nodecodes=nodes.nodecodes
 local glyph_code=nodecodes.glyph
+local kern_disc=nodecodes.disc
 local kern_code=nodecodes.kern
 local nuts=nodes.nuts
 local nodepool=nuts.pool
@@ -11445,6 +11464,31 @@ local function featuresprocessor(head,font,attr)
               return head
             end
           end
+          local function kerndisc(disc) 
+            local prev=getprev(disc)
+            local next=getnext(disc)
+            if prev and next then
+              setfield(prev,"next",next)
+              local a=getattr(prev,0)
+              if a then
+                a=(a==attr) and (not attribute or getattr(prev,a_state)==attribute)
+              else
+                a=not attribute or getattr(prev,a_state)==attribute
+              end
+              if a then
+                local lookupmatch=lookupcache[getchar(prev)]
+                if lookupmatch then
+                  local h,d,ok=handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
+                  if ok then
+                    done=true
+                    success=true
+                  end
+                end
+              end
+              setfield(prev,"next",disc)
+            end
+            return next
+          end
           while start do
             local id=getid(start)
             if id==glyph_code then
@@ -11488,6 +11532,8 @@ local function featuresprocessor(head,font,attr)
                   local new=subrun(replace)
                   if new then setfield(start,"replace",new) end
                 end
+elseif typ=="gpos_single" or typ=="gpos_pair" then
+  kerndisc(start)
               end
               start=getnext(start)
             elseif id==whatsit_code then 
@@ -11579,6 +11625,39 @@ local function featuresprocessor(head,font,attr)
             return head
           end
         end
+        local function kerndisc(disc) 
+          local prev=getprev(disc)
+          local next=getnext(disc)
+          if prev and next then
+            setfield(prev,"next",next)
+            local a=getattr(prev,0)
+            if a then
+              a=(a==attr) and (not attribute or getattr(prev,a_state)==attribute)
+            else
+              a=not attribute or getattr(prev,a_state)==attribute
+            end
+            if a then
+              for i=1,ns do
+                local lookupname=subtables[i]
+                local lookupcache=lookuphash[lookupname]
+                if lookupcache then
+                  local lookupmatch=lookupcache[getchar(prev)]
+                  if lookupmatch then
+                    local h,d,ok=handler(head,prev,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
+                    if ok then
+                      done=true
+                      break
+                    end
+                  end
+                else
+                  report_missing_cache(typ,lookupname)
+                end
+              end
+            end
+            setfield(prev,"next",disc)
+          end
+          return next
+        end
         while start do
           local id=getid(start)
           if id==glyph_code then
@@ -11633,6 +11712,8 @@ local function featuresprocessor(head,font,attr)
                 local new=subrun(replace)
                 if new then setfield(start,"replace",new) end
               end
+elseif typ=="gpos_single" or typ=="gpos_pair" then
+  kerndisc(start)
             end
             start=getnext(start)
           elseif id==whatsit_code then
-- 
cgit v1.2.3