From cf8d8b0819c3b066d5217a11cb4cf6acf8598a3c Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Wed, 23 Jan 2013 14:04:00 +0100
Subject: beta 2013.01.23 14:04

---
 .../data/scite/lexers/scite-context-lexer-web.lua  | 150 ++++
 context/data/scite/lexers/scite-context-lexer.lua  |   6 +
 .../scite/scite-context-data-interfaces.properties | 956 ++++++++++-----------
 .../scite/scite-context-data-metafun.properties    |  14 +-
 .../scite/scite-context-data-metapost.properties   |  66 +-
 .../data/scite/scite-context-data-tex.properties   | 156 ++--
 .../data/scite/scite-context-external.properties   |  13 +-
 context/data/scite/scite-context.properties        |   4 +
 scripts/context/lua/mtx-tools.lua                  |   2 +-
 tex/context/base/anch-tab.mkiv                     |   2 +-
 tex/context/base/back-pdf.mkiv                     |   2 +-
 tex/context/base/cont-new.mkii                     |   2 +-
 tex/context/base/cont-new.mkiv                     |   2 +-
 tex/context/base/context-version.pdf               | Bin 4129 -> 4127 bytes
 tex/context/base/context-version.png               | Bin 40255 -> 39845 bytes
 tex/context/base/context.mkii                      |   2 +-
 tex/context/base/context.mkiv                      |   2 +-
 tex/context/base/font-mis.lua                      |   2 +-
 tex/context/base/font-odk.lua                      | 904 +++++++++++++++++++
 tex/context/base/font-odv.lua                      |   8 +
 tex/context/base/font-otf.lua                      |   4 +-
 tex/context/base/font-otp.lua                      |  60 +-
 tex/context/base/mlib-pdf.mkiv                     |   2 +-
 tex/context/base/pack-rul.mkiv                     |  26 +-
 tex/context/base/s-fnt-20.mkiv                     |  21 +-
 tex/context/base/status-files.pdf                  | Bin 24787 -> 24741 bytes
 tex/context/base/status-lua.pdf                    | Bin 208438 -> 208559 bytes
 tex/context/base/strc-ref.lua                      |  10 +-
 tex/context/base/strc-ref.mkvi                     |   2 +-
 tex/context/base/supp-box.mkiv                     |  26 +-
 tex/generic/context/luatex/luatex-fonts-merged.lua | 219 +++--
 31 files changed, 1877 insertions(+), 786 deletions(-)
 create mode 100644 context/data/scite/lexers/scite-context-lexer-web.lua
 create mode 100644 tex/context/base/font-odk.lua

diff --git a/context/data/scite/lexers/scite-context-lexer-web.lua b/context/data/scite/lexers/scite-context-lexer-web.lua
new file mode 100644
index 000000000..72068ccb2
--- /dev/null
+++ b/context/data/scite/lexers/scite-context-lexer-web.lua
@@ -0,0 +1,150 @@
+local info = {
+    version   = 1.002,
+    comment   = "scintilla lpeg lexer for w",
+    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+    copyright = "PRAGMA ADE / ConTeXt Development Team",
+    license   = "see context related readme files",
+}
+
+-- this will be extended
+
+if not lexer._CONTEXTEXTENSIONS then require("scite-context-lexer") end
+
+local lexer = lexer
+local token, style, colors, exact_match, no_style = lexer.token, lexer.style, lexer.colors, lexer.exact_match, lexer.style_nothing
+local P, R, S, C, Cg, Cb, Cs, Cmt, lpegmatch = lpeg.P, lpeg.R, lpeg.S, lpeg.C, lpeg.Cg, lpeg.Cb, lpeg.Cs, lpeg.Cmt, lpeg.match
+local setmetatable = setmetatable
+
+local weblexer    = { _NAME = "web", _FILENAME = "scite-context-lexer-web" }
+local whitespace  = lexer.WHITESPACE
+local context     = lexer.context
+
+local keywords = { -- copied from cpp.lua
+    -- c
+    'asm', 'auto', 'break', 'case', 'const', 'continue', 'default', 'do', 'else',
+    'extern', 'false', 'for', 'goto', 'if', 'inline', 'register', 'return',
+    'sizeof', 'static', 'switch', 'true', 'typedef', 'volatile', 'while',
+    'restrict',
+    -- hm
+    '_Bool', '_Complex', '_Pragma', '_Imaginary',
+    -- c++.
+    'catch', 'class', 'const_cast', 'delete', 'dynamic_cast', 'explicit',
+    'export', 'friend', 'mutable', 'namespace', 'new', 'operator', 'private',
+    'protected', 'public', 'signals', 'slots', 'reinterpret_cast',
+    'static_assert', 'static_cast', 'template', 'this', 'throw', 'try', 'typeid',
+    'typename', 'using', 'virtual'
+}
+
+local datatypes = { -- copied from cpp.lua
+    'bool', 'char', 'double', 'enum', 'float', 'int', 'long', 'short', 'signed',
+    'struct', 'union', 'unsigned', 'void'
+}
+
+local macros = { -- copied from cpp.lua
+    'define', 'elif', 'else', 'endif', 'error', 'if', 'ifdef', 'ifndef', 'import',
+    'include', 'line', 'pragma', 'undef', 'using', 'warning'
+}
+
+local space         = lexer.space -- S(" \n\r\t\f\v")
+local any           = lexer.any
+local patterns      = context.patterns
+local restofline    = patterns.restofline
+local startofline   = patterns.startofline
+
+local squote        = P("'")
+local dquote        = P('"')
+local escaped       = P("\\") * P(1)
+local slashes       = P('//')
+local begincomment  = P("/*")
+local endcomment    = P("*/")
+local percent       = P("%")
+
+local spacing       = token(whitespace, space^1)
+local rest          = token("default", any)
+
+local shortcomment  = token("comment", slashes * restofline^0)
+local longcomment   = token("comment", begincomment * (1-endcomment)^0 * endcomment^-1)
+local texcomment    = token("comment", percent * restofline^0)
+
+local shortstring   = token("quote",  dquote) -- can be shared
+                    * token("string", (escaped + (1-dquote))^0)
+                    * token("quote",  dquote)
+                    + token("quote",  squote)
+                    * token("string", (escaped + (1-squote))^0)
+                    * token("quote",  squote)
+
+local integer       = P("-")^-1 * (lexer.hex_num + lexer.dec_num)
+local number        = token("number", lexer.float + integer)
+
+local validword     = R("AZ","az","__") * R("AZ","az","__","09")^0
+
+local identifier    = token("default",validword)
+
+local operator      = token("special", S('+-*/%^!=<>;:{}[]().&|?~'))
+
+----- optionalspace = spacing^0
+
+local p_keywords    = exact_match(keywords )
+local p_datatypes   = exact_match(datatypes)
+local p_macros      = exact_match(macros)
+
+local keyword       = token("keyword", p_keywords)
+local datatype      = token("keyword", p_datatypes)
+local identifier    = token("default", validword)
+
+local macro         = token("data", #P('#') * startofline * P('#') * S('\t ')^0 * p_macros)
+
+local beginweb      = P("@")
+local endweb        = P("@c")
+
+local webcomment    = token("comment", #beginweb * startofline * beginweb * (1-endweb)^0 * endweb)
+
+local texlexer       = lexer.load('scite-context-lexer-tex')
+
+lexer.embed_lexer(weblexer, texlexer, #beginweb * startofline * token("comment",beginweb), token("comment",endweb))
+
+weblexer._rules = {
+    { 'whitespace',   spacing      },
+    { 'keyword',      keyword      },
+    { 'type',         datatype     },
+    { 'identifier',   identifier   },
+    { 'string',       shortstring  },
+ -- { 'webcomment',   webcomment   },
+    { 'texcomment',   texcomment   },
+    { 'longcomment',  longcomment  },
+    { 'shortcomment', shortcomment },
+    { 'number',       number       },
+    { 'macro',        macro        },
+    { 'operator',     operator     },
+    { 'rest',         rest         },
+}
+
+weblexer._tokenstyles = context.styleset
+
+-- weblexer._foldsymbols = {
+--     _patterns = {
+--      -- '%l+', -- costly
+--         '[{}]',
+--         '/%*',
+--         '%*/',
+--      -- '//',
+--     },
+--     ["macro"] = {
+--         ['region']    =  1,
+--         ['endregion'] = -1,
+--         ['if']        =  1,
+--         ['ifdef']     =  1,
+--         ['ifndef']    =  1,
+--         ['endif']     = -1,
+--     },
+--     ["operator"] = {
+--         ['{'] =  1,
+--         ['}'] = -1,
+--     },
+--     ["comment"] = {
+--         ['/*'] =  1,
+--         ['*/'] = -1,
+--     }
+-- }
+
+return weblexer
diff --git a/context/data/scite/lexers/scite-context-lexer.lua b/context/data/scite/lexers/scite-context-lexer.lua
index fa627a836..27d7bd37e 100644
--- a/context/data/scite/lexers/scite-context-lexer.lua
+++ b/context/data/scite/lexers/scite-context-lexer.lua
@@ -182,6 +182,12 @@ patterns.spacing    = space^1
 patterns.nospacing  = (1-space)^1
 patterns.anything   = P(1)
 
+local endof = S("\n\r\f")
+
+patterns.startofline = P(function(input,index)
+    return (index == 1 or lpegmatch(endof,input,index-1)) and index
+end)
+
 function context.exact_match(words,word_chars,case_insensitive)
     local characters = concat(words)
     local pattern -- the concat catches _ etc
diff --git a/context/data/scite/scite-context-data-interfaces.properties b/context/data/scite/scite-context-data-interfaces.properties
index 7e157573b..cc8f89c77 100644
--- a/context/data/scite/scite-context-data-interfaces.properties
+++ b/context/data/scite/scite-context-data-interfaces.properties
@@ -1,3 +1,163 @@
+keywordclass.context.cs=\
+CAP Cap Caps Cisla \
+KAP Kap Kaps MESIC Rimskecislice \
+SLOVA SLOVO Slova Slovo VSEDNIDEN \
+Znak Znaky aktualnicislonadpisu aktualnidatum appendix \
+arg atleftmargin atrightmargin barevnalista barva \
+bilemisto bottomspace bublinkovanapoveda bydliste bypassblocks \
+cap celkovypocetstran cernalinka cernelinky chapter \
+chem cisla cislonadpisu cislopodrovnice cislorovnice \
+cislostrany citace citovat comment completecombinedlist \
+completelistoffloats completelistofsorts completelistofsynonyms completepagenumber completeregister \
+coupledregister crlf cutspace datum decrementnumber \
+definebodyfontDEF definebodyfontREF definecolumnbreak definecolumnset definecombination \
+definedfont definefontfeature definefonthandling defineindentedtext defineinmargin \
+defineitemgroup definelayer definelayout definemathalignment definepagebreak \
+defineplacement definerawfont definerule definetextposition definetextvariable \
+definetype definetypeface definuj definujakcent definujbarvu \
+definujblok definujbloksekce definujbuffer definujfont definujformatodkazu \
+definujhbox definujhlavnipole definujinterakcnimenu definujkombinovanyseznam definujkonverzi \
+definujlogo definujnadpis definujobrazeksymbol definujodkaz definujodstavce \
+definujopis definujoramovani definujoramovanytext definujpaletu definujplvouciobjekt \
+definujpodpole definujpole definujpopis definujpopisek definujprekryv \
+definujpreskok definujprikaz definujprofil definujprogram definujprostredizakladnihofontu \
+definujrejstrik definujsablonutabulky definujsekci definujseznam definujseznamodkazu \
+definujskupinubarev definujstartstop definujstyl definujstylfontu definujsymbol \
+definujsynonumumfontu definujsynonyma definujtabelaci definujtext definujtrideni \
+definujupravu definujvelikostpapiru definujverzi definujvycet definujvystup \
+definujzakladnifont definujzasobnikpoli definujznaceni definujznak delkaseznamu \
+description dodrzujprofil dodrzujverzi dodrzujverziprofilu dvoustrannypapir \
+emptylines enumeration externiobraz fakt footnotetext \
+forceblocks framedtext getnumber headsym hl \
+hlavnijazyk hlavniuroven hodnotabarvy hodnotasedi immediatebetweenlist \
+immediatetolist indentation ininner inneredgedistance inneredgewidth \
+innermargindistance innermarginwidth inouter instalacejazyka interakcnilista \
+interakcnitlacitka interaktivnimenu jazyk jdidolu jdina \
+jdinabox jdinastranu jmeno kap klonujpole \
+komponenta konvertujcislo kopirujpole korekcebilehomista labeling \
+leg listsymbol loadsorts loadsynonyms maoramovani \
+mapfontsize marginalnilinka marginalninadpis marginalnislovo marginalnitext \
+matematika mazaramovani mediaeval meritko mesic \
+mezera moveformula movesidefloat mrizka nadpis \
+nadruhyokraj nalevo nalevyokraj name naokraj \
+napravo napravyokraj nastavbarvu nastavbarvy nastavbilamista \
+nastavblok nastavbloksekce nastavbuffer nastavcernelinky nastavcislonadpisu \
+nastavcislostrany nastavcislovani nastavcislovaniodstavcu nastavcislovaniradku nastavcislovanistran \
+nastavcitaci nastavdefinicipoznamekpodcarou nastavdeleniplvoucichobjektu nastavdelitko nastavdolnitexty \
+nastaveni nastavexterniobrazy nastavhorejsek nastavhornitexty nastavinterakci \
+nastavinterakcnilistu nastavinterakcnimenu nastavinterakcniobrazovku nastavjazyk nastavkapitalky \
+nastavkombinovanyseznam nastavkomentar nastavkomentarstrany nastavlegendu nastavmarginalie \
+nastavmarginalniblok nastavmarginalnilinky nastavmeziradkovoumezeru nastavnadpis nastavnadpisy \
+nastavodkazovani nastavodsazovani nastavodstavce nastavopis nastavoramovanetexty \
+nastavoramovani nastavorez nastavotoceni nastavpaletu nastavplvouciobjekt \
+nastavplvouciobjekty nastavpodcislostrany nastavpodtrzeni nastavpole nastavpolozky \
+nastavpopisek nastavpopisky nastavpopisy nastavpozadi nastavpoznamkypodcarou \
+nastavprechodstrany nastavpreskok nastavprofily nastavprogramy nastavprostredizakladnihofontu \
+nastavpublikace nastavradkovani nastavradky nastavrastr nastavrejstrik \
+nastavrovnice nastavsadusymbolu nastavsekci nastavseznam nastavseznamodkazu \
+nastavsirkucary nastavsloupce nastavspodek nastavspojeni nastavsynchronizaci \
+nastavsynchronizacnilistu nastavsynonyma nastavsystem nastavtab nastavtabelaci \
+nastavtabulky nastavtenkelinky nastavtext nastavtexthlavicky nastavtextovelinky \
+nastavtextpopisku nastavtexttexty nastavtextyupati nastavtextyzahlavi nastavtlacitka \
+nastavtoleranci nastavtrideni nastavtype nastavumisteniprotejsku nastavumistovani \
+nastavupati nastavupravu nastavurl nastavusporadani nastavvelikostpapiru \
+nastavverze nastavvsechnapole nastavvycty nastavvyplnovelinky nastavvyplnoveradky \
+nastavvystup nastavvzhled nastavzahlavi nastavzakladnifont nastavzarovnani \
+nastavznaceni nastavzuzeni nastrane navigating nejakyradek \
+nekde nextsection neznamo nivy nizky \
+nocap nokap nop numberofsubpages obrazovka \
+odkaz odkaznadatum odkaznastranu odkaznatext odkazujici \
+odsazenishora odsazenizleva odsazovani okr opakovat \
+opis opissoubor oramovani oref orez \
+otocit outeredgedistance outeredgewidth outermargindistance outermarginwidth \
+overbar overbars overstrike overstrikes oznaceni \
+oznacverzi pagedepth pageoffset paragraph parovastrana \
+part pis placefloat placeheadnumber placeheadtext \
+placelistoffloats placelistofsorts placelistofsynonyms placepagenumber placerawlist \
+placereferencelist placerule placetextvariable plnezneni pol \
+pole polozka polozky popisky poppisek \
+porovnejpaletu porovnejskupinubarev positiontext pozadi pozice \
+poznamka poznamkapodcarou pref prelozit premistinamrizku \
+prepninazakladnifont preskoc prizpusobivepole prizpusobvzhled produkt \
+program projekt propojeneznaceni propojenydokument propojenyrejstrik \
+prostredi publikace ran ref register \
+reservefloat reset resetnumber resettextcontent resetznaceni \
+rimskecislice rozdelplvouciobjekt rozmer rozpojeneznaceni roztazene \
+schovejbloky section sedabarva seeregister setnumber \
+settextcontent settextvariable setupanswerarea setupcolumnset setupcolumnsetlines \
+setupcolumnsetstart setupfonthandling setupfontsynonym setupforms setupindentedtext \
+setupinterlinespace2 setupitemgroup setuplistalternative setupmathalignment setupnumber \
+setuppaper setupplacement setuprule setupstartstop setupstrut \
+setuptextposition setuptextvariable sirkalevehookraje sirkalevemarginalie sirkamarginalie \
+sirkaokraje sirkapapiru sirkapravehookraje sirkapravemarginalie sirkasazby \
+sirkaseznamu sirkatextu sirkatiskpapiru sloupec slovovpravo \
+sort spodek stanovcharakteristickuseznamu stanovcislonadpisu startalignment \
+startbarva startbuffer startcislovaniradku startcitace startcolumnmakeup \
+startcolumns startcolumnset startcombination startcomment startdescription \
+startdocument startdokument startenumeration startfakt startfigure \
+startfloattext startformula startframedtext startglobalni starthiding \
+startinteraktivnimenu startitemgroup startkodovani startkomponenta startkorekceradku \
+startlegend startline startlinecorrection startlinenumbering startlines \
+startlocal startlocalenvironment startlocalfootnotes startlokalni startlokalnipoznamkypodcarou \
+startmakeup startmarginalniblok startmarginalnilinka startmarginblock startnamemakeup \
+startnarrower startnezhustene startobraz startopposite startoverlay \
+startoverview startparagraph startpositioning startpostponing startpozadi \
+startprehled startprekryv startprodukt startprofil startprofile \
+startprojekt startprostredi startprotejsek startradek startradky \
+startrastr startregister startsadasymbolu startsloupce startspojeni \
+startsymbolset startsynchronizace startsynchronization starttable starttables \
+starttabulate starttabulka starttabulky starttext starttextovalinka \
+starttyping startumistovani startunpacked startuprava startverze \
+startzarovnavani startzhustene startzuzeni stopalignment stopbarva \
+stopbuffer stopcislovaniradku stopcitace stopcolumnmakeup stopcolumns \
+stopcolumnset stopcombination stopcomment stopdescription stopdocument \
+stopdokument stopenumeration stopfakt stopfigure stopfloattext \
+stopformula stopframedtext stopglobalni stophiding stopinteraktivnimenu \
+stopitemgroup stopkodovani stopkomponenta stopkorekceradku stoplegend \
+stopline stoplinecorrection stoplinenumbering stoplines stoplocal \
+stoplocalenvironment stoplocalfootnotes stoplokalni stoplokalnipoznamkypodcarou stopmakeup \
+stopmarginalniblok stopmarginalnilinka stopmarginblock stopnamemakeup stopnarrower \
+stopnezhustene stopopposite stopoverlay stopoverview stopparagraph \
+stoppositioning stoppostponing stoppozadi stopprehled stopprekryv \
+stopprodukt stopprofil stopprofile stopprojekt stopprostredi \
+stopprotejsek stopradek stopradky stoprastr stopsloupce \
+stopspojeni stopsymbolset stopsynchronizace stopsynchronization stoptable \
+stoptables stoptabulate stoptabulka stoptabulky stoptext \
+stoptextovalinka stoptyping stopumistovani stopunpacked stopuprava \
+stopverze stopzarovnavani stopzhustene stopzuzeni strana \
+sub subject subpagenumber subsection subsubject \
+subsubsection subsubsubject switchtorawfont sym symbol \
+synchronizacnilista synchronizovat synonym tab tecky \
+tenkalinka tenkelinky testcolumn testpage tex \
+texthlavicky textovalinka textpopisku textvariable title \
+tlacitko tlacitkomenu tloustkacary tref tvrdamezera \
+tvrdemezery txt typebuffer ukazbarvu ukazexterniobrazy \
+ukazmrizku ukaznastaveni ukazpaletu ukazpodpery ukazpole \
+ukazpostredizakladnihofontu ukazramecek ukazsadusymbolu ukazskupinubarev ukazupravu \
+ukazvytisk ukazvzhled ukazzakladnifont umistikombinovanyseznam umistilegendu \
+umistiloga umistilokalnipoznamkypodcarou umistinadsebe umistinamrizku umistipodrovnici \
+umistipoznamkypodcarou umistirejstrik umistirovnici umistiseznam umistivedlesebe \
+umistizalozky underbar underbars urcicharakteristikurejstriku useXMLfilter \
+usedirectory usetypescript usetypescriptfile uzijJSscripts uzijURL \
+uzijadresar uzijbloky uzijexternidokument uzijexterniobraz uzijexternisoubor \
+uzijexternisoubory uzijexternizvuk uzijkodovani uzijmodul uzijmoduly \
+uzijodkazy uzijprikazy uzijspeciality uzijsymbol uzijurl \
+verze vl vlasovalinka vlevo vpravo \
+vradku vsedniden vyberbloky vyberpapir vyberverzi \
+vyplnenytext vyplnovelinky vyplnovepole vyplnovyradek vyskahorejsku \
+vyskapapiru vyskasazby vyskaseznamu vyskaspodku vyskatextu \
+vyskatiskpapiru vyskaupati vyskazahlavi vysoky vyznam \
+vzdalenosthorejsku vzdalenostlevehookraje vzdalenostlevemarginalie vzdalenostmarginalie vzdalenostokraje \
+vzdalenostpravehookraje vzdalenostpravemarginalie vzdalenostspodku vzdalenostupati vzdalenostzahlavi \
+zablokujinterakcnimenu zachovejbloky zadnamezera zadnebilemisto zadnedalsibloky \
+zadnedalsisoubory zadnehorniadolniradky zadneodsazovani zadnezahlaviaupati zadneznaceni \
+zadnyrozmer zadnyseznam zadnytest zalozka zapisdorejstriku \
+zapisdoseznamu zapisdoseznamuodkazu zapismeziseznam zaramovani zarovnanonastred \
+zarovnanovlevo zarovnanovpravo zasobnikpoli zaznamovepole zhustene \
+ziskejbuffer ziskejznaceni zlomek znaceni znak \
+znaky zpracujbloky zpracujstranu zrcadlit zref \
+zvysujicicislo 
+
 keywordclass.context.pe=\
 CAP Cap Caps Character \
 Characters MONTH Numbers Romannumerals WEEKDAY \
@@ -161,164 +321,6 @@ useXMLfilter usedirectory useurl آفست‌صفحه آیتم \
 کسر کشیده کلمه‌حاشیه کلمه‌راست گیره \
 یادداشت یک‌جا یک‌خط 
 
-keywordclass.context.ro=\
-CAP CUVANT CUVINTE Cap \
-Caps Cuvant Cuvinte KAP Kap \
-Kaps LUNA Litera Litere Numere \
-Numereromane ZIDINSAPTAMANA adapteazaaspect adubuffer adumarcaje \
-afiseazaaspect afiseazacampuri afiseazaculoare afiseazafiguriexterne afiseazafonttext \
-afiseazagrid afiseazagrupculoare afiseazamakeup afiseazamediufonttext afiseazapaleta \
-afiseazarama afiseazasetari afiseazasetsimboluri afiseazastruts afiseazatiparire \
-aliniat aliniatcentru aliniatdreapta aliniatstanga appendix \
-arg ascundeblocuri atleftmargin atrightmargin baraculoare \
-barainteractiune barasincronizare blanc but butoaneinteractiune \
-buton butonmeniu camp campumplere cap \
-chapter chem citat clip cloneazacamp \
-coloana comment comparagrupculoare comparapaleta completeazanumarpagina \
-completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister \
-componenta convertestenumar copiazacamp corecteazaspatiualb coupledregister \
-crlf culoare culoaregri cupleazadocument cupleazamarcaje \
-cupleazaregistru cutspace cuvantdreapta cuvantmarginal data \
-datacurenta datareferit decrementnumber decupleazamarcaje definebodyfontDEF \
-definebodyfontREF definecolumnbreak definecolumnset definecombination definedfont \
-definefontfeature definefonthandling defineindentedtext defineinmargin defineitemgroup \
-definelayer definelayout definemathalignment definepagebreak defineplacement \
-defineste definesteaccent definesteantet definesteblanc definestebloc \
-definesteblocsectiune definestebuffer definestecamp definestecampprincipal definestecaracter \
-definestecomanda definesteconversie definesteculoare definestedescriere definestedimensiunehartie \
-definesteenumerare definesteeticheta definestefloat definestefont definestefontraw \
-definestefonttext definesteformatreferinte definestegrupculori definestehbox definesteinconjurare \
-definestelista definestelistacombinata definestelistareferinte definestelogo definestemakeup \
-definestemarcaje definestemediulfonttext definestemeniuinteractiune definesteoutput definesteoverlay \
-definestepaleta definesteparagraf definestepozitietext definesteprofil definesteprogram \
-definestereferinte definesteregistru definesterigla definestesablontabel definestesectiune \
-definestesimbol definestesimbolfigura definestesinonim definestesinonimfont definestesortare \
-definestestartstop definestestil definestestilfont definestestivacampuri definestesubcamp \
-definestetabulatori definestetext definestetexteinconjurate definestetextinconjurat definestetyping \
-definestevariabilatext definesteversiune definetype definetypeface description \
-despre determinacaracteristicilelistei determinacaracteristiciregistru determinanumartitlu dezactiveazameniuinteractiune \
-dimensiune din distantaantet distantacolt distantacoltdreapta \
-distantacoltstanga distantajos distantamargine distantamarginedreapta distantamarginestanga \
-distantasubsol distantasus domiciliu dute dutebox \
-dutepagina ecran el element emptylines \
-enumeration eticheta etichete fact faraaliniat \
-faradimensiune farafisiere faraliniiantetsisubsol faraliniisussijos faralista \
-faramarcaje faraspatiu faraspatiualb figuraexterna firdepar \
-folosesteURL folosestebloc folosestecodificarea folosestecomenzi folosestedirector \
-folosestedocumentextern folosestefiguraexterna folosestefisiereexterne folosestefisierextern folosestemodul \
-folosestemodule folosestemuzicaexterna folosestereferinte folosestescriptJS folosestesimboluri \
-folosestespeciale folosesteurl footnotetext forteazablocuri fractie \
-framed framedtext fundal gatablocuri getnumber \
-grid grosimelinie hartiedubla headsym hl \
-immediatebetweenlist immediatetolist impachetat impartefloat in \
-inalt inaltamargine inaltimeantet inaltimehartie inaltimehartieimprimanta \
-inaltimejos inaltimelista inaltimemakeup inaltimesubsol inaltimesus \
-inaltimetext indentation indreapta inframed ininner \
-injos inlinie inmaframed inmargineadreapta inmargineastanga \
-inneredgedistance inneredgewidth innermargindistance innermarginwidth inouter \
-inparteadreapta inparteastanga instalarelimba instanga intins \
-jos jossus kap la labeling \
-lapagina latimecoltdreapta latimecoltstanga latimecolturi latimehartie \
-latimehartieimprimanta latimelista latimemakeup latimemargine latimemarginedreapta \
-latimemarginestanga latimetext leg limba limbaprincipala \
-liniemargine linieneagra liniesubtire linieumplere liniinegre \
-liniisubtiri listsymbol litera litere loadsorts \
-loadsynonyms logcampuri luna lungimelista maframed \
-mapfontsize mar marcaje marcheazaversiune marginal \
-matematica mediaeval mediu meniuinteractiune minicitat \
-moveformula movesidefloat mutapegrid name navigating \
-necunoscut nextsection niveltitlu nocap nokap \
-nop nota notasubsol numarformula numarincrement \
-numarpagina numarsubformula numartitlu numartitlucurent numartotalpagini \
-numberofsubpages nume numere numereromane numeunitate \
-nutesta olinie outeredgedistance outeredgewidth outermargindistance \
-outermarginwidth overbar overbars overstrike overstrikes \
-pagedepth pageoffset pagina paginadubla paragraph \
-part pastreazablocuri pelung placefloat placeheadnumber \
-placeheadtext placelistoffloats placelistofsorts placelistofsynonyms placerawlist \
-placereferencelist plaseazapegrid plaseazasemnecarte potrivestecamp pozitie \
-pozitietext proceseazabloc proceseazapagina produs program \
-proiect publicatie puncte punedeasuprafiecareia punefatainfata \
-puneformula punelegenda punelista punelistacombinata punelogouri \
-punenotesubsol punenotesubsollocale punenumarpagina puneregistru punerigla \
-punesubformula punevariabilatext ran ref refa \
-referinta referintapagina referintatext referit referring \
-reflexie register remarca reservefloat reset \
-reseteazamarcaje resetnumber resettextcontent riglatext rigleumplere \
-roteste saripesteblocuri scala scriebuffer scrieinlista \
-scrieinlistareferinte scrieinregistru scrieintreliste section seeregister \
-selecteazablocuri selecteazahartie selecteazaversiune semncarte setarebarasincronizare \
-setareitemization setarelimba setareoutput setarepozitie setaresincronizare \
-setari seteazaaliniat seteazaalinierea seteazaantet seteazaaranjareapag \
-seteazaaspect seteazabarainteractiune seteazablanc seteazabloc seteazablocsectiune \
-seteazablocurimarginale seteazabuffer seteazabutoane seteazacamp seteazacampuri \
-seteazaclipping seteazacoloane seteazacombinari seteazacomentariu seteazacomentariupagina \
-seteazaculoare seteazaculori seteazadefinireanotasubsol seteazadescriere seteazadimensiunihartie \
-seteazaecrane seteazaecraninteractiune seteazaelemente seteazaenumerare seteazafiguriexterne \
-seteazafloat seteazafloats seteazafonttext seteazaformulare seteazaformule \
-seteazafundal seteazafundaluri seteazagrosimelinie seteazaimpartireafloat seteazainconjurat \
-seteazaingust seteazainteractiunea seteazajos seteazalegenda seteazalegendele \
-seteazaliniesilabe seteazaliniesubtire seteazalinii seteazaliniimargine seteazaliniinegre \
-seteazaliniiumplere seteazalista seteazalistacombinata seteazalistareferinte seteazamajuscule \
-seteazamakeup seteazamarcaje seteazamarginal seteazamediulfonttext seteazameniuinteractiune \
-seteazaminicitat seteazanotasubsol seteazanumarpagina seteazanumarsubpagina seteazanumartitlu \
-seteazanumerotare seteazanumerotarelinii seteazanumerotarepagina seteazanumerotareparagrafe seteazapaleta \
-seteazaparagrafe seteazaplasareaopozita seteazapozitietext seteazaprofile seteazaprograme \
-seteazapublicatii seteazareferinte seteazaregistru seteazarigla seteazarigletext \
-seteazarigleumplere seteazarotare seteazasectiune seteazasimbol seteazasinonime \
-seteazasistem seteazasortare seteazaspatiu seteazaspatiualb seteazaspatiuinterliniar \
-seteazastrut seteazasublinie seteazasubsol seteazasus seteazatab \
-seteazatabele seteazatabulatori seteazatext seteazatexteantet seteazatextejos \
-seteazatextesubsol seteazatextesus seteazatextetext seteazatexteticheta seteazatexttitlu \
-seteazatitlu seteazatitluri seteazatoleranta seteazatranzitiepagina seteazatype \
-seteazatyping seteazaurl seteazavariabilatext seteazaversiuni setnumber \
-settextcontent setupanswerarea setupcolumnset setupcolumnsetlines setupcolumnsetstart \
-setupfonthandling setupfontsynonym setupindentedtext setupinterlinespace2 setupitemgroup \
-setuplistalternative setupmathalignment setupnumber setuppaper setupplacement \
-setupstartstop setvariabilatext sim simbol sincronizeaza \
-sort spatiifixate spatiu spatiualb spatiufixat \
-spatiujos spatiuspate spatiusus startalignment startaliniere \
-startblocmarginal startbuffer startcitat startcodificare startcoloane \
-startcolumnmakeup startcolumns startcolumnset startcombinare startcombination \
-startcomment startcomponenta startcorectielinie startculoare startdescription \
-startdocument startenumeration startfact startfigura startfigure \
-startfloattext startformula startframedtext startfundal startglobal \
-starthiding startimpachetat startingust startitemgroup startlegend \
-startline startlinecorrection startlinenumbering startlines startlinie \
-startliniemargine startlinii startlocal startlocalenvironment startlocalfootnotes \
-startmakeup startmarginblock startmediu startmeniuinteractiune startnamemakeup \
-startnarrower startneimpachetat startnotesubsollocale startnumerotarelinii startopozit \
-startopposite startoverlay startoverview startparagraph startpositioning \
-startpostponing startpozitionare startprodus startprofil startprofile \
-startproiect startraster startregister startriglatext startsetsimboluri \
-startsincronizare startsymbolset startsynchronization starttabel starttabele \
-starttable starttables starttabulate starttext starttyping \
-startunpacked startversiune stivacampuri stopalignment stopaliniere \
-stopblobal stopblocmarginal stopbuffer stopcitat stopcodificare \
-stopcoloane stopcolumnmakeup stopcolumns stopcolumnset stopcombinare \
-stopcombination stopcomment stopcomponenta stopcorectielinie stopculoare \
-stopdescription stopdocument stopenumeration stopfact stopfigure \
-stopfloattext stopformula stopframedtext stopfundal stophiding \
-stopimpachetat stopingust stopitemgroup stoplegend stopline \
-stoplinecorrection stoplinenumbering stoplines stoplinie stopliniemargine \
-stoplinii stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup \
-stopmarginblock stopmediu stopmeniuinteractiune stopnamemakeup stopnarrower \
-stopneimpachetat stopnotesubsollocale stopnumerotarelinii stopopozit stopopposite \
-stopoverlay stopoverview stopparagraph stoppositioning stoppostponing \
-stoppozitionare stopprodus stopprofil stopprofile stopproiect \
-stopraster stopriglatext stopsincronizare stopsymbolset stopsynchronization \
-stoptabel stoptabele stoptable stoptables stoptabulate \
-stoptext stoptyping stopunpacked stopversiune sub \
-subject subpagenumber subsection subsubject subsubsection \
-subsubsubject synonym tab testcolumn testpage \
-tex texteticheta textmarginal texttitlu textumplere \
-title titlu titlumarginal tooltip traduce \
-trecilafontraw trecilafonttext txt typ type \
-typefile underbar underbars undeva urmeazaprofil \
-urmeazaversiune urmeazaversiuneprofil useXMLfilter usedirectory usetypescript \
-usetypescriptfile valoareculoare valoaregri variabilatext versiune \
-vl zidinsaptamana 
-
 keywordclass.context.en=\
 CAP Cap Caps Character \
 Characters MONTH Numbers Romannumerals WEEKDAY \
@@ -469,166 +471,6 @@ usesymbols usetypescript usetypescriptfile useurl version \
 vl weekday whitespace wordright writebetweenlist \
 writetolist writetoreferencelist writetoregister 
 
-keywordclass.context.nl=\
-CAP Cap Caps Cijfers \
-KAP Kap Kaps Letter Letters \
-MAAND Romeins WEEKDAG WOORD WOORDEN \
-Woord Woorden aantalsubpaginas about achtergrond \
-appendix arg bepaalkopnummer bepaallijstkenmerken bepaalregisterkenmerken \
-betekenis binnenmargeafstand binnenmargebreedte binnenrandafstand binnenrandbreedte \
-blanko blokje blokjes blokkeerinteractiemenu bodemwit \
-bookmark bovenafstand bovenhoogte breuk buitenmargeafstand \
-buitenmargebreedte buitenrandafstand buitenrandbreedte but button \
-cap chapter chem cijfers citaat \
-citeer clip comment completecombinedlist completelistoffloats \
-completelistofsorts completelistofsynonyms converteernummer copieerveld corrigeerwitruimte \
-coupledregister crlf datum definebodyfontDEF definebodyfontREF \
-definedfont definefontfeature definefonthandling definerawfont definetypeface \
-definieer definieeraccent definieeralineas definieerbeeldmerk definieerblanko \
-definieerblok definieerbuffer definieercombinatie definieercommando definieerconversie \
-definieerfiguursymbool definieerfont definieerfontstijl definieerfontsynoniem definieerhbox \
-definieerhoofdveld definieeringesprongentext definieerinmarge definieerinteractiemenu definieeritemgroep \
-definieerkadertekst definieerkarakter definieerkleur definieerkleurgroep definieerkolomgroep \
-definieerkolomovergang definieerkop definieerkorps definieerkorpsomgeving definieerlayer \
-definieerlayout definieerletter definieerlijn definieerlijst definieermarkering \
-definieeromlijnd definieeropmaak definieeroverlay definieerpaginaovergang definieerpalet \
-definieerpapierformaat definieerplaats definieerplaatsblok definieerprofiel definieerprogramma \
-definieerreferentie definieerreferentieformaat definieerreferentielijst definieerregister definieersamengesteldelijst \
-definieersectie definieersectieblok definieersorteren definieerstartstop definieersubveld \
-definieersymbool definieersynoniemen definieertabelvorm definieertabulatie definieertekst \
-definieertekstpositie definieertekstvariabele definieertype definieertypen definieeruitvoer \
-definieerveld definieerveldstapel definieerversie definieerwiskundeuitlijnen description \
-dimensie directnaarlijst directtussenlijst doordefinieren doorlabelen \
-doornummeren dunnelijn dunnelijnen eenregel enumeration \
-ergens externfiguur forceerblokken formulenummer framedtext \
-gebruikJSscripts gebruikURL gebruikXMLfilter gebruikblokken gebruikcommandos \
-gebruikexterndocument gebruikexternefile gebruikexternefiles gebruikexternfiguur gebruikexterngeluidsfragment \
-gebruikgebied gebruikmodule gebruikmodules gebruikreferenties gebruikspecials \
-gebruiksymbolen gebruiktypescript gebruiktypescriptfile gebruikurl geenblokkenmeer \
-geenbovenenonderregels geendimensie geenfilesmeer geenhoofdenvoetregels geenlijst \
-geenmarkering geenspatie geentest geenwitruimte geg \
-grijskleur grijswaarde haalbuffer haalmarkering haalnummer \
-haarlijn handhaafblokken herhaal hl hoofdafstand \
-hoofdhoogte hoofdtaal hoog huidigedatum huidigekopnummer \
-in inanderemarge inbinnen inbuiten indentation \
-inlijnd inlinker inlinkermarge inlinkerrand inmarge \
-inrechter inrechtermarge inrechterrand inregel inspringen \
-installeertaal instellingen interactiebalk interactiebuttons interactiemenu \
-invullijnen invulregel invultekst invulveld inwilijnd \
-items its kantlijn kap kenmerk \
-kenmerkdatum kentekstvariabeletoe kleur kleurenbalk kleurwaarde \
-kloonveld kolom kop kopniveau kopnummer \
-koppeldocument koppelmarkering koppelpagina koppelpapier koppelregister \
-kopsym koptekst kopwit laag label \
-labeling labels labeltekst laho leg \
-legeregels letter letters lijndikte lijstbreedte \
-lijsthoogte lijstlengte lijstsymbool linkermargeafstand linkermargebreedte \
-linkerrandafstand linkerrandbreedte loadsorts loadsynonyms maand \
-mapfontsize mar margeafstand margebreedte margetekst \
-margetitel margewoord markeer markeerversie mediaeval \
-menubutton naam naar naarbox naarpagina \
-name navigerend nextsection nietinspringen nocap \
-nokap noot nop omgeving omlaag \
-omlijnd onbekend onderafstand onderdeel onderhoogte \
-ontkoppelmarkering op opelkaar oplinkermarge oppagina \
-oprechtermarge overbar overbars overstrike overstrikes \
-pagina paginadiepte paginanummer paginaoffset paginareferentie \
-papierbreedte papierhoogte paragraph part paslayoutaan \
-passeerblokken passendveld plaatsbeeldmerken plaatsbookmarks plaatsformule \
-plaatskopnummer plaatskoptekst plaatslegenda plaatslijn plaatslijst \
-plaatslokalevoetnoten plaatsnaastelkaar plaatsonderelkaar plaatsopgrid plaatspaginanummer \
-plaatsplaatsblok plaatsreferentielijst plaatsregister plaatsruwelijst plaatssamengesteldelijst \
-plaatssubformule plaatstekstvariabele plaatsvoetnoten placelistoffloats placelistofsorts \
-placelistofsynonyms positioneer positioneertekst printpapierbreedte printpapierhoogte \
-produkt programma projekt publicatie punten \
-ran randafstand randbreedte rechtermargeafstand rechtermargebreedte \
-rechterrandafstand rechterrandbreedte ref refereer referentie \
-regellinks regelmidden regelrechts register registreervelden \
-reservefloat reset resetmarkering resetnummer resettekstinhoud \
-resettextcontent romeins rooster roteer rugwit \
-schaal scherm schrijfnaarlijst schrijfnaarreferentielijst schrijfnaarregister \
-schrijftussenlijst section seeregister selecteerblokken selecteerpapier \
-selecteerversie setnummer setupfonthandling setupfontsynonym setupinterlinespace2 \
-setuplistalternative snijwit som sort spatie \
-spiegel splitsplaatsblok startachtergrond startalignment startbuffer \
-startcitaat startcodering startcolumns startcombinatie startcombination \
-startcomment startdescription startdocument startenumeration startfigure \
-startfiguur startfloattext startformula startframedtext startgeg \
-startglobaal starthiding startinteractiemenu startitemgroup startkantlijn \
-startkleur startkolomgroep startkolommen startkolomopmaak startlegend \
-startline startlinecorrection startlinenumbering startlines startlocal \
-startlocalenvironment startlocalfootnotes startlokaal startlokalevoetnoten startmakeup \
-startmargeblok startmarginblock startnaast startnamemakeup startnarrower \
-startomgeving startonderdeel startopelkaar startopmaak startopposite \
-startoverlay startoverview startoverzicht startparagraph startpositioneren \
-startpositioning startpostponing startprodukt startprofiel startprofile \
-startprojekt startraster startregel startregelcorrectie startregelnummeren \
-startregels startregister startsmaller startsymbolset startsymboolset \
-startsynchronisatie startsynchronization starttabel starttabellen starttable \
-starttables starttabulate starttekst starttekstlijn starttyping \
-startuitlijnen startunpacked startvanelkaar startversie stelachtergrondenin \
-stelachtergrondin stelalineasin stelantwoordgebiedin stelarrangerenin stelblankoin \
-stelblokin stelblokjesin stelblokkopjein stelblokkopjesin stelbovenin \
-stelboventekstenin stelbufferin stelbuttonsin stelciterenin stelclipin \
-stelcombinatiesin stelcommentaarin steldoordefinierenin steldoornummerenin steldunnelijnenin \
-stelexternefigurenin stelformulesin stelformulierenin stelhoofdin stelhoofdtekstenin \
-stelingesprongentextin stelinmargein stelinspringenin stelinteractiebalkin stelinteractiein \
-stelinteractiemenuin stelinteractieschermin stelinterliniein stelinvullijnenin stelinvulregelsin \
-stelitemgroepin stelitemsin stelkadertekstenin stelkantlijnin stelkapitalenin \
-stelkleurenin stelkleurin stelkolomgroepin stelkolomgroepregelsin stelkolomgroepstartin \
-stelkolommenin stelkopin stelkopnummerin stelkoppeltekenin stelkoppenin \
-stelkoptekstin stelkorpsin stelkorpsomgevingin stellabeltekstin stellayoutin \
-stellegendain stellijndiktein stellijnin stellijstin stelmargeblokkenin \
-stelmarkeringin stelnaastplaatsenin stelnummerenin stelnummerin stelomlijndin \
-stelonderin stelonderstrepenin stelondertekstenin stelopmaakin stelopsommingenin \
-stelpaginacommentaarin stelpaginanummerin stelpaginanummeringin stelpaginaovergangenin stelpaletin \
-stelpapierformaatin stelpapierin stelparagraafnummerenin stelplaatsblokin stelplaatsblokkenin \
-stelplaatsbloksplitsenin stelplaatsin stelpositionerenin stelprofielenin stelprogrammasin \
-stelpublicatiesin stelrastersin stelreferentielijstin stelrefererenin stelregelnummerenin \
-stelregelsin stelregisterin stelroterenin stelsamengesteldelijstin stelsectieblokin \
-stelsectiein stelsmallerin stelsorterenin stelspatieringin stelstartstopin \
-stelstrutin stelsubpaginanummerin stelsymboolsetin stelsynchronisatiebalkin stelsynchronisatiein \
-stelsynoniemenin stelsysteemin steltaalin steltabellenin steltabin \
-steltabulatiein steltekstin steltekstinhoudin steltekstlijnenin steltekstpositiein \
-stelteksttekstenin steltekstvariabelein steltolerantiein steltypein steltypenin \
-steluitlijnenin steluitvoerin stelurlin stelveldenin stelveldin \
-stelversiesin stelvoetin stelvoetnootdefinitiein stelvoetnotenin stelvoettekstenin \
-stelwiskundeuitlijnenin stelwitruimtein stopachtergrond stopalignment stopbuffer \
-stopcitaat stopcodering stopcolumns stopcombinatie stopcombination \
-stopcomment stopdescription stopdocument stopenumeration stopfigure \
-stopfloattext stopformula stopframedtext stopgeg stopglobaal \
-stophiding stopinteractiemenu stopitemgroup stopkantlijn stopkleur \
-stopkolomgroep stopkolommen stopkolomopmaak stoplegend stopline \
-stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment \
-stoplocalfootnotes stoplokaal stoplokalevoetnoten stopmakeup stopmargeblok \
-stopmarginblock stopnaast stopnamemakeup stopnarrower stopomgeving \
-stoponderdeel stopopelkaar stopopmaak stopopposite stopoverlay \
-stopoverview stopoverzicht stopparagraph stoppositioneren stoppositioning \
-stoppostponing stopprodukt stopprofiel stopprofile stopprojekt \
-stopraster stopregel stopregelcorrectie stopregelnummeren stopregels \
-stopsmaller stopsymbolset stopsynchronisatie stopsynchronization stoptabel \
-stoptabellen stoptable stoptables stoptabulate stoptekst \
-stoptekstlijn stoptyping stopuitlijnen stopunpacked stopvanelkaar \
-stopversie sub subformulenummer subject subpaginanummer \
-subsection subsubject subsubsection subsubsubject suggestie \
-switchnaarkorps switchtorawfont sym symbool symoffset \
-synchronisatiebalk synchroniseer synonym taal tab \
-tekstbreedte teksthoogte tekstlijn tekstreferentie tekstvariabele \
-testkolom testpagina tex title toelichting \
-toonexternefiguren toongrid tooninstellingen toonkader toonkleur \
-toonkleurgroep toonkorps toonkorpsomgeving toonlayout toonopmaak \
-toonpalet toonprint toonstruts toonsymboolset toonvelden \
-totaalaantalpaginas txt typ type typebuffer \
-typefile uit uitgerekt underbar underbars \
-usecodering usedirectory vastespatie vastespaties veld \
-veldstapel verbergblokken vergelijkkleurgroep vergelijkpalet verhoognummer \
-verlaagnummer verplaatsformule verplaatsopgrid verplaatszijblok versie \
-vertaal verwerkblokken verwerkpagina vl voetafstand \
-voethoogte voetnoot voetnoottekst volgprofiel volgprofielversie \
-volgversie volledigepaginanummer volledigregister voluit weekdag \
-wilijnd wiskunde witruimte woonplaats woordrechts \
-zetbreedte zethoogte 
-
 keywordclass.context.de=\
 Buchstabe Buchstaben CAP Cap \
 Caps KAP Kap Kaps MONAT \
@@ -788,166 +630,6 @@ zeigegitter zeigelayout zeigepalette zeigerahmen zeigestruts \
 zeigeumbruch zentriert ziffern zitat zitieren \
 zu zurbox zurseite zwischenraum 
 
-keywordclass.context.cs=\
-CAP Cap Caps Cisla \
-KAP Kap Kaps MESIC Rimskecislice \
-SLOVA SLOVO Slova Slovo VSEDNIDEN \
-Znak Znaky aktualnicislonadpisu aktualnidatum appendix \
-arg atleftmargin atrightmargin barevnalista barva \
-bilemisto bottomspace bublinkovanapoveda bydliste bypassblocks \
-cap celkovypocetstran cernalinka cernelinky chapter \
-chem cisla cislonadpisu cislopodrovnice cislorovnice \
-cislostrany citace citovat comment completecombinedlist \
-completelistoffloats completelistofsorts completelistofsynonyms completepagenumber completeregister \
-coupledregister crlf cutspace datum decrementnumber \
-definebodyfontDEF definebodyfontREF definecolumnbreak definecolumnset definecombination \
-definedfont definefontfeature definefonthandling defineindentedtext defineinmargin \
-defineitemgroup definelayer definelayout definemathalignment definepagebreak \
-defineplacement definerawfont definerule definetextposition definetextvariable \
-definetype definetypeface definuj definujakcent definujbarvu \
-definujblok definujbloksekce definujbuffer definujfont definujformatodkazu \
-definujhbox definujhlavnipole definujinterakcnimenu definujkombinovanyseznam definujkonverzi \
-definujlogo definujnadpis definujobrazeksymbol definujodkaz definujodstavce \
-definujopis definujoramovani definujoramovanytext definujpaletu definujplvouciobjekt \
-definujpodpole definujpole definujpopis definujpopisek definujprekryv \
-definujpreskok definujprikaz definujprofil definujprogram definujprostredizakladnihofontu \
-definujrejstrik definujsablonutabulky definujsekci definujseznam definujseznamodkazu \
-definujskupinubarev definujstartstop definujstyl definujstylfontu definujsymbol \
-definujsynonumumfontu definujsynonyma definujtabelaci definujtext definujtrideni \
-definujupravu definujvelikostpapiru definujverzi definujvycet definujvystup \
-definujzakladnifont definujzasobnikpoli definujznaceni definujznak delkaseznamu \
-description dodrzujprofil dodrzujverzi dodrzujverziprofilu dvoustrannypapir \
-emptylines enumeration externiobraz fakt footnotetext \
-forceblocks framedtext getnumber headsym hl \
-hlavnijazyk hlavniuroven hodnotabarvy hodnotasedi immediatebetweenlist \
-immediatetolist indentation ininner inneredgedistance inneredgewidth \
-innermargindistance innermarginwidth inouter instalacejazyka interakcnilista \
-interakcnitlacitka interaktivnimenu jazyk jdidolu jdina \
-jdinabox jdinastranu jmeno kap klonujpole \
-komponenta konvertujcislo kopirujpole korekcebilehomista labeling \
-leg listsymbol loadsorts loadsynonyms maoramovani \
-mapfontsize marginalnilinka marginalninadpis marginalnislovo marginalnitext \
-matematika mazaramovani mediaeval meritko mesic \
-mezera moveformula movesidefloat mrizka nadpis \
-nadruhyokraj nalevo nalevyokraj name naokraj \
-napravo napravyokraj nastavbarvu nastavbarvy nastavbilamista \
-nastavblok nastavbloksekce nastavbuffer nastavcernelinky nastavcislonadpisu \
-nastavcislostrany nastavcislovani nastavcislovaniodstavcu nastavcislovaniradku nastavcislovanistran \
-nastavcitaci nastavdefinicipoznamekpodcarou nastavdeleniplvoucichobjektu nastavdelitko nastavdolnitexty \
-nastaveni nastavexterniobrazy nastavhorejsek nastavhornitexty nastavinterakci \
-nastavinterakcnilistu nastavinterakcnimenu nastavinterakcniobrazovku nastavjazyk nastavkapitalky \
-nastavkombinovanyseznam nastavkomentar nastavkomentarstrany nastavlegendu nastavmarginalie \
-nastavmarginalniblok nastavmarginalnilinky nastavmeziradkovoumezeru nastavnadpis nastavnadpisy \
-nastavodkazovani nastavodsazovani nastavodstavce nastavopis nastavoramovanetexty \
-nastavoramovani nastavorez nastavotoceni nastavpaletu nastavplvouciobjekt \
-nastavplvouciobjekty nastavpodcislostrany nastavpodtrzeni nastavpole nastavpolozky \
-nastavpopisek nastavpopisky nastavpopisy nastavpozadi nastavpoznamkypodcarou \
-nastavprechodstrany nastavpreskok nastavprofily nastavprogramy nastavprostredizakladnihofontu \
-nastavpublikace nastavradkovani nastavradky nastavrastr nastavrejstrik \
-nastavrovnice nastavsadusymbolu nastavsekci nastavseznam nastavseznamodkazu \
-nastavsirkucary nastavsloupce nastavspodek nastavspojeni nastavsynchronizaci \
-nastavsynchronizacnilistu nastavsynonyma nastavsystem nastavtab nastavtabelaci \
-nastavtabulky nastavtenkelinky nastavtext nastavtexthlavicky nastavtextovelinky \
-nastavtextpopisku nastavtexttexty nastavtextyupati nastavtextyzahlavi nastavtlacitka \
-nastavtoleranci nastavtrideni nastavtype nastavumisteniprotejsku nastavumistovani \
-nastavupati nastavupravu nastavurl nastavusporadani nastavvelikostpapiru \
-nastavverze nastavvsechnapole nastavvycty nastavvyplnovelinky nastavvyplnoveradky \
-nastavvystup nastavvzhled nastavzahlavi nastavzakladnifont nastavzarovnani \
-nastavznaceni nastavzuzeni nastrane navigating nejakyradek \
-nekde nextsection neznamo nivy nizky \
-nocap nokap nop numberofsubpages obrazovka \
-odkaz odkaznadatum odkaznastranu odkaznatext odkazujici \
-odsazenishora odsazenizleva odsazovani okr opakovat \
-opis opissoubor oramovani oref orez \
-otocit outeredgedistance outeredgewidth outermargindistance outermarginwidth \
-overbar overbars overstrike overstrikes oznaceni \
-oznacverzi pagedepth pageoffset paragraph parovastrana \
-part pis placefloat placeheadnumber placeheadtext \
-placelistoffloats placelistofsorts placelistofsynonyms placepagenumber placerawlist \
-placereferencelist placerule placetextvariable plnezneni pol \
-pole polozka polozky popisky poppisek \
-porovnejpaletu porovnejskupinubarev positiontext pozadi pozice \
-poznamka poznamkapodcarou pref prelozit premistinamrizku \
-prepninazakladnifont preskoc prizpusobivepole prizpusobvzhled produkt \
-program projekt propojeneznaceni propojenydokument propojenyrejstrik \
-prostredi publikace ran ref register \
-reservefloat reset resetnumber resettextcontent resetznaceni \
-rimskecislice rozdelplvouciobjekt rozmer rozpojeneznaceni roztazene \
-schovejbloky section sedabarva seeregister setnumber \
-settextcontent settextvariable setupanswerarea setupcolumnset setupcolumnsetlines \
-setupcolumnsetstart setupfonthandling setupfontsynonym setupforms setupindentedtext \
-setupinterlinespace2 setupitemgroup setuplistalternative setupmathalignment setupnumber \
-setuppaper setupplacement setuprule setupstartstop setupstrut \
-setuptextposition setuptextvariable sirkalevehookraje sirkalevemarginalie sirkamarginalie \
-sirkaokraje sirkapapiru sirkapravehookraje sirkapravemarginalie sirkasazby \
-sirkaseznamu sirkatextu sirkatiskpapiru sloupec slovovpravo \
-sort spodek stanovcharakteristickuseznamu stanovcislonadpisu startalignment \
-startbarva startbuffer startcislovaniradku startcitace startcolumnmakeup \
-startcolumns startcolumnset startcombination startcomment startdescription \
-startdocument startdokument startenumeration startfakt startfigure \
-startfloattext startformula startframedtext startglobalni starthiding \
-startinteraktivnimenu startitemgroup startkodovani startkomponenta startkorekceradku \
-startlegend startline startlinecorrection startlinenumbering startlines \
-startlocal startlocalenvironment startlocalfootnotes startlokalni startlokalnipoznamkypodcarou \
-startmakeup startmarginalniblok startmarginalnilinka startmarginblock startnamemakeup \
-startnarrower startnezhustene startobraz startopposite startoverlay \
-startoverview startparagraph startpositioning startpostponing startpozadi \
-startprehled startprekryv startprodukt startprofil startprofile \
-startprojekt startprostredi startprotejsek startradek startradky \
-startrastr startregister startsadasymbolu startsloupce startspojeni \
-startsymbolset startsynchronizace startsynchronization starttable starttables \
-starttabulate starttabulka starttabulky starttext starttextovalinka \
-starttyping startumistovani startunpacked startuprava startverze \
-startzarovnavani startzhustene startzuzeni stopalignment stopbarva \
-stopbuffer stopcislovaniradku stopcitace stopcolumnmakeup stopcolumns \
-stopcolumnset stopcombination stopcomment stopdescription stopdocument \
-stopdokument stopenumeration stopfakt stopfigure stopfloattext \
-stopformula stopframedtext stopglobalni stophiding stopinteraktivnimenu \
-stopitemgroup stopkodovani stopkomponenta stopkorekceradku stoplegend \
-stopline stoplinecorrection stoplinenumbering stoplines stoplocal \
-stoplocalenvironment stoplocalfootnotes stoplokalni stoplokalnipoznamkypodcarou stopmakeup \
-stopmarginalniblok stopmarginalnilinka stopmarginblock stopnamemakeup stopnarrower \
-stopnezhustene stopopposite stopoverlay stopoverview stopparagraph \
-stoppositioning stoppostponing stoppozadi stopprehled stopprekryv \
-stopprodukt stopprofil stopprofile stopprojekt stopprostredi \
-stopprotejsek stopradek stopradky stoprastr stopsloupce \
-stopspojeni stopsymbolset stopsynchronizace stopsynchronization stoptable \
-stoptables stoptabulate stoptabulka stoptabulky stoptext \
-stoptextovalinka stoptyping stopumistovani stopunpacked stopuprava \
-stopverze stopzarovnavani stopzhustene stopzuzeni strana \
-sub subject subpagenumber subsection subsubject \
-subsubsection subsubsubject switchtorawfont sym symbol \
-synchronizacnilista synchronizovat synonym tab tecky \
-tenkalinka tenkelinky testcolumn testpage tex \
-texthlavicky textovalinka textpopisku textvariable title \
-tlacitko tlacitkomenu tloustkacary tref tvrdamezera \
-tvrdemezery txt typebuffer ukazbarvu ukazexterniobrazy \
-ukazmrizku ukaznastaveni ukazpaletu ukazpodpery ukazpole \
-ukazpostredizakladnihofontu ukazramecek ukazsadusymbolu ukazskupinubarev ukazupravu \
-ukazvytisk ukazvzhled ukazzakladnifont umistikombinovanyseznam umistilegendu \
-umistiloga umistilokalnipoznamkypodcarou umistinadsebe umistinamrizku umistipodrovnici \
-umistipoznamkypodcarou umistirejstrik umistirovnici umistiseznam umistivedlesebe \
-umistizalozky underbar underbars urcicharakteristikurejstriku useXMLfilter \
-usedirectory usetypescript usetypescriptfile uzijJSscripts uzijURL \
-uzijadresar uzijbloky uzijexternidokument uzijexterniobraz uzijexternisoubor \
-uzijexternisoubory uzijexternizvuk uzijkodovani uzijmodul uzijmoduly \
-uzijodkazy uzijprikazy uzijspeciality uzijsymbol uzijurl \
-verze vl vlasovalinka vlevo vpravo \
-vradku vsedniden vyberbloky vyberpapir vyberverzi \
-vyplnenytext vyplnovelinky vyplnovepole vyplnovyradek vyskahorejsku \
-vyskapapiru vyskasazby vyskaseznamu vyskaspodku vyskatextu \
-vyskatiskpapiru vyskaupati vyskazahlavi vysoky vyznam \
-vzdalenosthorejsku vzdalenostlevehookraje vzdalenostlevemarginalie vzdalenostmarginalie vzdalenostokraje \
-vzdalenostpravehookraje vzdalenostpravemarginalie vzdalenostspodku vzdalenostupati vzdalenostzahlavi \
-zablokujinterakcnimenu zachovejbloky zadnamezera zadnebilemisto zadnedalsibloky \
-zadnedalsisoubory zadnehorniadolniradky zadneodsazovani zadnezahlaviaupati zadneznaceni \
-zadnyrozmer zadnyseznam zadnytest zalozka zapisdorejstriku \
-zapisdoseznamu zapisdoseznamuodkazu zapismeziseznam zaramovani zarovnanonastred \
-zarovnanovlevo zarovnanovpravo zasobnikpoli zaznamovepole zhustene \
-ziskejbuffer ziskejznaceni zlomek znaceni znak \
-znaky zpracujbloky zpracujstranu zrcadlit zref \
-zvysujicicislo 
-
 keywordclass.context.fr=\
 CAP Cap Caps Caractere \
 Caracteres Chiffresromains JOURSEMAINE MOIS MOT \
@@ -1274,3 +956,321 @@ usaspecialita usaurl useXMLfilter usedirectory usetypescript \
 usetypescriptfile vaia vaiabox vaiapagina vaigiu \
 valorecolore valoregrigio variabiletesto versione vl 
 
+keywordclass.context.ro=\
+CAP CUVANT CUVINTE Cap \
+Caps Cuvant Cuvinte KAP Kap \
+Kaps LUNA Litera Litere Numere \
+Numereromane ZIDINSAPTAMANA adapteazaaspect adubuffer adumarcaje \
+afiseazaaspect afiseazacampuri afiseazaculoare afiseazafiguriexterne afiseazafonttext \
+afiseazagrid afiseazagrupculoare afiseazamakeup afiseazamediufonttext afiseazapaleta \
+afiseazarama afiseazasetari afiseazasetsimboluri afiseazastruts afiseazatiparire \
+aliniat aliniatcentru aliniatdreapta aliniatstanga appendix \
+arg ascundeblocuri atleftmargin atrightmargin baraculoare \
+barainteractiune barasincronizare blanc but butoaneinteractiune \
+buton butonmeniu camp campumplere cap \
+chapter chem citat clip cloneazacamp \
+coloana comment comparagrupculoare comparapaleta completeazanumarpagina \
+completecombinedlist completelistoffloats completelistofsorts completelistofsynonyms completeregister \
+componenta convertestenumar copiazacamp corecteazaspatiualb coupledregister \
+crlf culoare culoaregri cupleazadocument cupleazamarcaje \
+cupleazaregistru cutspace cuvantdreapta cuvantmarginal data \
+datacurenta datareferit decrementnumber decupleazamarcaje definebodyfontDEF \
+definebodyfontREF definecolumnbreak definecolumnset definecombination definedfont \
+definefontfeature definefonthandling defineindentedtext defineinmargin defineitemgroup \
+definelayer definelayout definemathalignment definepagebreak defineplacement \
+defineste definesteaccent definesteantet definesteblanc definestebloc \
+definesteblocsectiune definestebuffer definestecamp definestecampprincipal definestecaracter \
+definestecomanda definesteconversie definesteculoare definestedescriere definestedimensiunehartie \
+definesteenumerare definesteeticheta definestefloat definestefont definestefontraw \
+definestefonttext definesteformatreferinte definestegrupculori definestehbox definesteinconjurare \
+definestelista definestelistacombinata definestelistareferinte definestelogo definestemakeup \
+definestemarcaje definestemediulfonttext definestemeniuinteractiune definesteoutput definesteoverlay \
+definestepaleta definesteparagraf definestepozitietext definesteprofil definesteprogram \
+definestereferinte definesteregistru definesterigla definestesablontabel definestesectiune \
+definestesimbol definestesimbolfigura definestesinonim definestesinonimfont definestesortare \
+definestestartstop definestestil definestestilfont definestestivacampuri definestesubcamp \
+definestetabulatori definestetext definestetexteinconjurate definestetextinconjurat definestetyping \
+definestevariabilatext definesteversiune definetype definetypeface description \
+despre determinacaracteristicilelistei determinacaracteristiciregistru determinanumartitlu dezactiveazameniuinteractiune \
+dimensiune din distantaantet distantacolt distantacoltdreapta \
+distantacoltstanga distantajos distantamargine distantamarginedreapta distantamarginestanga \
+distantasubsol distantasus domiciliu dute dutebox \
+dutepagina ecran el element emptylines \
+enumeration eticheta etichete fact faraaliniat \
+faradimensiune farafisiere faraliniiantetsisubsol faraliniisussijos faralista \
+faramarcaje faraspatiu faraspatiualb figuraexterna firdepar \
+folosesteURL folosestebloc folosestecodificarea folosestecomenzi folosestedirector \
+folosestedocumentextern folosestefiguraexterna folosestefisiereexterne folosestefisierextern folosestemodul \
+folosestemodule folosestemuzicaexterna folosestereferinte folosestescriptJS folosestesimboluri \
+folosestespeciale folosesteurl footnotetext forteazablocuri fractie \
+framed framedtext fundal gatablocuri getnumber \
+grid grosimelinie hartiedubla headsym hl \
+immediatebetweenlist immediatetolist impachetat impartefloat in \
+inalt inaltamargine inaltimeantet inaltimehartie inaltimehartieimprimanta \
+inaltimejos inaltimelista inaltimemakeup inaltimesubsol inaltimesus \
+inaltimetext indentation indreapta inframed ininner \
+injos inlinie inmaframed inmargineadreapta inmargineastanga \
+inneredgedistance inneredgewidth innermargindistance innermarginwidth inouter \
+inparteadreapta inparteastanga instalarelimba instanga intins \
+jos jossus kap la labeling \
+lapagina latimecoltdreapta latimecoltstanga latimecolturi latimehartie \
+latimehartieimprimanta latimelista latimemakeup latimemargine latimemarginedreapta \
+latimemarginestanga latimetext leg limba limbaprincipala \
+liniemargine linieneagra liniesubtire linieumplere liniinegre \
+liniisubtiri listsymbol litera litere loadsorts \
+loadsynonyms logcampuri luna lungimelista maframed \
+mapfontsize mar marcaje marcheazaversiune marginal \
+matematica mediaeval mediu meniuinteractiune minicitat \
+moveformula movesidefloat mutapegrid name navigating \
+necunoscut nextsection niveltitlu nocap nokap \
+nop nota notasubsol numarformula numarincrement \
+numarpagina numarsubformula numartitlu numartitlucurent numartotalpagini \
+numberofsubpages nume numere numereromane numeunitate \
+nutesta olinie outeredgedistance outeredgewidth outermargindistance \
+outermarginwidth overbar overbars overstrike overstrikes \
+pagedepth pageoffset pagina paginadubla paragraph \
+part pastreazablocuri pelung placefloat placeheadnumber \
+placeheadtext placelistoffloats placelistofsorts placelistofsynonyms placerawlist \
+placereferencelist plaseazapegrid plaseazasemnecarte potrivestecamp pozitie \
+pozitietext proceseazabloc proceseazapagina produs program \
+proiect publicatie puncte punedeasuprafiecareia punefatainfata \
+puneformula punelegenda punelista punelistacombinata punelogouri \
+punenotesubsol punenotesubsollocale punenumarpagina puneregistru punerigla \
+punesubformula punevariabilatext ran ref refa \
+referinta referintapagina referintatext referit referring \
+reflexie register remarca reservefloat reset \
+reseteazamarcaje resetnumber resettextcontent riglatext rigleumplere \
+roteste saripesteblocuri scala scriebuffer scrieinlista \
+scrieinlistareferinte scrieinregistru scrieintreliste section seeregister \
+selecteazablocuri selecteazahartie selecteazaversiune semncarte setarebarasincronizare \
+setareitemization setarelimba setareoutput setarepozitie setaresincronizare \
+setari seteazaaliniat seteazaalinierea seteazaantet seteazaaranjareapag \
+seteazaaspect seteazabarainteractiune seteazablanc seteazabloc seteazablocsectiune \
+seteazablocurimarginale seteazabuffer seteazabutoane seteazacamp seteazacampuri \
+seteazaclipping seteazacoloane seteazacombinari seteazacomentariu seteazacomentariupagina \
+seteazaculoare seteazaculori seteazadefinireanotasubsol seteazadescriere seteazadimensiunihartie \
+seteazaecrane seteazaecraninteractiune seteazaelemente seteazaenumerare seteazafiguriexterne \
+seteazafloat seteazafloats seteazafonttext seteazaformulare seteazaformule \
+seteazafundal seteazafundaluri seteazagrosimelinie seteazaimpartireafloat seteazainconjurat \
+seteazaingust seteazainteractiunea seteazajos seteazalegenda seteazalegendele \
+seteazaliniesilabe seteazaliniesubtire seteazalinii seteazaliniimargine seteazaliniinegre \
+seteazaliniiumplere seteazalista seteazalistacombinata seteazalistareferinte seteazamajuscule \
+seteazamakeup seteazamarcaje seteazamarginal seteazamediulfonttext seteazameniuinteractiune \
+seteazaminicitat seteazanotasubsol seteazanumarpagina seteazanumarsubpagina seteazanumartitlu \
+seteazanumerotare seteazanumerotarelinii seteazanumerotarepagina seteazanumerotareparagrafe seteazapaleta \
+seteazaparagrafe seteazaplasareaopozita seteazapozitietext seteazaprofile seteazaprograme \
+seteazapublicatii seteazareferinte seteazaregistru seteazarigla seteazarigletext \
+seteazarigleumplere seteazarotare seteazasectiune seteazasimbol seteazasinonime \
+seteazasistem seteazasortare seteazaspatiu seteazaspatiualb seteazaspatiuinterliniar \
+seteazastrut seteazasublinie seteazasubsol seteazasus seteazatab \
+seteazatabele seteazatabulatori seteazatext seteazatexteantet seteazatextejos \
+seteazatextesubsol seteazatextesus seteazatextetext seteazatexteticheta seteazatexttitlu \
+seteazatitlu seteazatitluri seteazatoleranta seteazatranzitiepagina seteazatype \
+seteazatyping seteazaurl seteazavariabilatext seteazaversiuni setnumber \
+settextcontent setupanswerarea setupcolumnset setupcolumnsetlines setupcolumnsetstart \
+setupfonthandling setupfontsynonym setupindentedtext setupinterlinespace2 setupitemgroup \
+setuplistalternative setupmathalignment setupnumber setuppaper setupplacement \
+setupstartstop setvariabilatext sim simbol sincronizeaza \
+sort spatiifixate spatiu spatiualb spatiufixat \
+spatiujos spatiuspate spatiusus startalignment startaliniere \
+startblocmarginal startbuffer startcitat startcodificare startcoloane \
+startcolumnmakeup startcolumns startcolumnset startcombinare startcombination \
+startcomment startcomponenta startcorectielinie startculoare startdescription \
+startdocument startenumeration startfact startfigura startfigure \
+startfloattext startformula startframedtext startfundal startglobal \
+starthiding startimpachetat startingust startitemgroup startlegend \
+startline startlinecorrection startlinenumbering startlines startlinie \
+startliniemargine startlinii startlocal startlocalenvironment startlocalfootnotes \
+startmakeup startmarginblock startmediu startmeniuinteractiune startnamemakeup \
+startnarrower startneimpachetat startnotesubsollocale startnumerotarelinii startopozit \
+startopposite startoverlay startoverview startparagraph startpositioning \
+startpostponing startpozitionare startprodus startprofil startprofile \
+startproiect startraster startregister startriglatext startsetsimboluri \
+startsincronizare startsymbolset startsynchronization starttabel starttabele \
+starttable starttables starttabulate starttext starttyping \
+startunpacked startversiune stivacampuri stopalignment stopaliniere \
+stopblobal stopblocmarginal stopbuffer stopcitat stopcodificare \
+stopcoloane stopcolumnmakeup stopcolumns stopcolumnset stopcombinare \
+stopcombination stopcomment stopcomponenta stopcorectielinie stopculoare \
+stopdescription stopdocument stopenumeration stopfact stopfigure \
+stopfloattext stopformula stopframedtext stopfundal stophiding \
+stopimpachetat stopingust stopitemgroup stoplegend stopline \
+stoplinecorrection stoplinenumbering stoplines stoplinie stopliniemargine \
+stoplinii stoplocal stoplocalenvironment stoplocalfootnotes stopmakeup \
+stopmarginblock stopmediu stopmeniuinteractiune stopnamemakeup stopnarrower \
+stopneimpachetat stopnotesubsollocale stopnumerotarelinii stopopozit stopopposite \
+stopoverlay stopoverview stopparagraph stoppositioning stoppostponing \
+stoppozitionare stopprodus stopprofil stopprofile stopproiect \
+stopraster stopriglatext stopsincronizare stopsymbolset stopsynchronization \
+stoptabel stoptabele stoptable stoptables stoptabulate \
+stoptext stoptyping stopunpacked stopversiune sub \
+subject subpagenumber subsection subsubject subsubsection \
+subsubsubject synonym tab testcolumn testpage \
+tex texteticheta textmarginal texttitlu textumplere \
+title titlu titlumarginal tooltip traduce \
+trecilafontraw trecilafonttext txt typ type \
+typefile underbar underbars undeva urmeazaprofil \
+urmeazaversiune urmeazaversiuneprofil useXMLfilter usedirectory usetypescript \
+usetypescriptfile valoareculoare valoaregri variabilatext versiune \
+vl zidinsaptamana 
+
+keywordclass.context.nl=\
+CAP Cap Caps Cijfers \
+KAP Kap Kaps Letter Letters \
+MAAND Romeins WEEKDAG WOORD WOORDEN \
+Woord Woorden aantalsubpaginas about achtergrond \
+appendix arg bepaalkopnummer bepaallijstkenmerken bepaalregisterkenmerken \
+betekenis binnenmargeafstand binnenmargebreedte binnenrandafstand binnenrandbreedte \
+blanko blokje blokjes blokkeerinteractiemenu bodemwit \
+bookmark bovenafstand bovenhoogte breuk buitenmargeafstand \
+buitenmargebreedte buitenrandafstand buitenrandbreedte but button \
+cap chapter chem cijfers citaat \
+citeer clip comment completecombinedlist completelistoffloats \
+completelistofsorts completelistofsynonyms converteernummer copieerveld corrigeerwitruimte \
+coupledregister crlf datum definebodyfontDEF definebodyfontREF \
+definedfont definefontfeature definefonthandling definerawfont definetypeface \
+definieer definieeraccent definieeralineas definieerbeeldmerk definieerblanko \
+definieerblok definieerbuffer definieercombinatie definieercommando definieerconversie \
+definieerfiguursymbool definieerfont definieerfontstijl definieerfontsynoniem definieerhbox \
+definieerhoofdveld definieeringesprongentext definieerinmarge definieerinteractiemenu definieeritemgroep \
+definieerkadertekst definieerkarakter definieerkleur definieerkleurgroep definieerkolomgroep \
+definieerkolomovergang definieerkop definieerkorps definieerkorpsomgeving definieerlayer \
+definieerlayout definieerletter definieerlijn definieerlijst definieermarkering \
+definieeromlijnd definieeropmaak definieeroverlay definieerpaginaovergang definieerpalet \
+definieerpapierformaat definieerplaats definieerplaatsblok definieerprofiel definieerprogramma \
+definieerreferentie definieerreferentieformaat definieerreferentielijst definieerregister definieersamengesteldelijst \
+definieersectie definieersectieblok definieersorteren definieerstartstop definieersubveld \
+definieersymbool definieersynoniemen definieertabelvorm definieertabulatie definieertekst \
+definieertekstpositie definieertekstvariabele definieertype definieertypen definieeruitvoer \
+definieerveld definieerveldstapel definieerversie definieerwiskundeuitlijnen description \
+dimensie directnaarlijst directtussenlijst doordefinieren doorlabelen \
+doornummeren dunnelijn dunnelijnen eenregel enumeration \
+ergens externfiguur forceerblokken formulenummer framedtext \
+gebruikJSscripts gebruikURL gebruikXMLfilter gebruikblokken gebruikcommandos \
+gebruikexterndocument gebruikexternefile gebruikexternefiles gebruikexternfiguur gebruikexterngeluidsfragment \
+gebruikgebied gebruikmodule gebruikmodules gebruikreferenties gebruikspecials \
+gebruiksymbolen gebruiktypescript gebruiktypescriptfile gebruikurl geenblokkenmeer \
+geenbovenenonderregels geendimensie geenfilesmeer geenhoofdenvoetregels geenlijst \
+geenmarkering geenspatie geentest geenwitruimte geg \
+grijskleur grijswaarde haalbuffer haalmarkering haalnummer \
+haarlijn handhaafblokken herhaal hl hoofdafstand \
+hoofdhoogte hoofdtaal hoog huidigedatum huidigekopnummer \
+in inanderemarge inbinnen inbuiten indentation \
+inlijnd inlinker inlinkermarge inlinkerrand inmarge \
+inrechter inrechtermarge inrechterrand inregel inspringen \
+installeertaal instellingen interactiebalk interactiebuttons interactiemenu \
+invullijnen invulregel invultekst invulveld inwilijnd \
+items its kantlijn kap kenmerk \
+kenmerkdatum kentekstvariabeletoe kleur kleurenbalk kleurwaarde \
+kloonveld kolom kop kopniveau kopnummer \
+koppeldocument koppelmarkering koppelpagina koppelpapier koppelregister \
+kopsym koptekst kopwit laag label \
+labeling labels labeltekst laho leg \
+legeregels letter letters lijndikte lijstbreedte \
+lijsthoogte lijstlengte lijstsymbool linkermargeafstand linkermargebreedte \
+linkerrandafstand linkerrandbreedte loadsorts loadsynonyms maand \
+mapfontsize mar margeafstand margebreedte margetekst \
+margetitel margewoord markeer markeerversie mediaeval \
+menubutton naam naar naarbox naarpagina \
+name navigerend nextsection nietinspringen nocap \
+nokap noot nop omgeving omlaag \
+omlijnd onbekend onderafstand onderdeel onderhoogte \
+ontkoppelmarkering op opelkaar oplinkermarge oppagina \
+oprechtermarge overbar overbars overstrike overstrikes \
+pagina paginadiepte paginanummer paginaoffset paginareferentie \
+papierbreedte papierhoogte paragraph part paslayoutaan \
+passeerblokken passendveld plaatsbeeldmerken plaatsbookmarks plaatsformule \
+plaatskopnummer plaatskoptekst plaatslegenda plaatslijn plaatslijst \
+plaatslokalevoetnoten plaatsnaastelkaar plaatsonderelkaar plaatsopgrid plaatspaginanummer \
+plaatsplaatsblok plaatsreferentielijst plaatsregister plaatsruwelijst plaatssamengesteldelijst \
+plaatssubformule plaatstekstvariabele plaatsvoetnoten placelistoffloats placelistofsorts \
+placelistofsynonyms positioneer positioneertekst printpapierbreedte printpapierhoogte \
+produkt programma projekt publicatie punten \
+ran randafstand randbreedte rechtermargeafstand rechtermargebreedte \
+rechterrandafstand rechterrandbreedte ref refereer referentie \
+regellinks regelmidden regelrechts register registreervelden \
+reservefloat reset resetmarkering resetnummer resettekstinhoud \
+resettextcontent romeins rooster roteer rugwit \
+schaal scherm schrijfnaarlijst schrijfnaarreferentielijst schrijfnaarregister \
+schrijftussenlijst section seeregister selecteerblokken selecteerpapier \
+selecteerversie setnummer setupfonthandling setupfontsynonym setupinterlinespace2 \
+setuplistalternative snijwit som sort spatie \
+spiegel splitsplaatsblok startachtergrond startalignment startbuffer \
+startcitaat startcodering startcolumns startcombinatie startcombination \
+startcomment startdescription startdocument startenumeration startfigure \
+startfiguur startfloattext startformula startframedtext startgeg \
+startglobaal starthiding startinteractiemenu startitemgroup startkantlijn \
+startkleur startkolomgroep startkolommen startkolomopmaak startlegend \
+startline startlinecorrection startlinenumbering startlines startlocal \
+startlocalenvironment startlocalfootnotes startlokaal startlokalevoetnoten startmakeup \
+startmargeblok startmarginblock startnaast startnamemakeup startnarrower \
+startomgeving startonderdeel startopelkaar startopmaak startopposite \
+startoverlay startoverview startoverzicht startparagraph startpositioneren \
+startpositioning startpostponing startprodukt startprofiel startprofile \
+startprojekt startraster startregel startregelcorrectie startregelnummeren \
+startregels startregister startsmaller startsymbolset startsymboolset \
+startsynchronisatie startsynchronization starttabel starttabellen starttable \
+starttables starttabulate starttekst starttekstlijn starttyping \
+startuitlijnen startunpacked startvanelkaar startversie stelachtergrondenin \
+stelachtergrondin stelalineasin stelantwoordgebiedin stelarrangerenin stelblankoin \
+stelblokin stelblokjesin stelblokkopjein stelblokkopjesin stelbovenin \
+stelboventekstenin stelbufferin stelbuttonsin stelciterenin stelclipin \
+stelcombinatiesin stelcommentaarin steldoordefinierenin steldoornummerenin steldunnelijnenin \
+stelexternefigurenin stelformulesin stelformulierenin stelhoofdin stelhoofdtekstenin \
+stelingesprongentextin stelinmargein stelinspringenin stelinteractiebalkin stelinteractiein \
+stelinteractiemenuin stelinteractieschermin stelinterliniein stelinvullijnenin stelinvulregelsin \
+stelitemgroepin stelitemsin stelkadertekstenin stelkantlijnin stelkapitalenin \
+stelkleurenin stelkleurin stelkolomgroepin stelkolomgroepregelsin stelkolomgroepstartin \
+stelkolommenin stelkopin stelkopnummerin stelkoppeltekenin stelkoppenin \
+stelkoptekstin stelkorpsin stelkorpsomgevingin stellabeltekstin stellayoutin \
+stellegendain stellijndiktein stellijnin stellijstin stelmargeblokkenin \
+stelmarkeringin stelnaastplaatsenin stelnummerenin stelnummerin stelomlijndin \
+stelonderin stelonderstrepenin stelondertekstenin stelopmaakin stelopsommingenin \
+stelpaginacommentaarin stelpaginanummerin stelpaginanummeringin stelpaginaovergangenin stelpaletin \
+stelpapierformaatin stelpapierin stelparagraafnummerenin stelplaatsblokin stelplaatsblokkenin \
+stelplaatsbloksplitsenin stelplaatsin stelpositionerenin stelprofielenin stelprogrammasin \
+stelpublicatiesin stelrastersin stelreferentielijstin stelrefererenin stelregelnummerenin \
+stelregelsin stelregisterin stelroterenin stelsamengesteldelijstin stelsectieblokin \
+stelsectiein stelsmallerin stelsorterenin stelspatieringin stelstartstopin \
+stelstrutin stelsubpaginanummerin stelsymboolsetin stelsynchronisatiebalkin stelsynchronisatiein \
+stelsynoniemenin stelsysteemin steltaalin steltabellenin steltabin \
+steltabulatiein steltekstin steltekstinhoudin steltekstlijnenin steltekstpositiein \
+stelteksttekstenin steltekstvariabelein steltolerantiein steltypein steltypenin \
+steluitlijnenin steluitvoerin stelurlin stelveldenin stelveldin \
+stelversiesin stelvoetin stelvoetnootdefinitiein stelvoetnotenin stelvoettekstenin \
+stelwiskundeuitlijnenin stelwitruimtein stopachtergrond stopalignment stopbuffer \
+stopcitaat stopcodering stopcolumns stopcombinatie stopcombination \
+stopcomment stopdescription stopdocument stopenumeration stopfigure \
+stopfloattext stopformula stopframedtext stopgeg stopglobaal \
+stophiding stopinteractiemenu stopitemgroup stopkantlijn stopkleur \
+stopkolomgroep stopkolommen stopkolomopmaak stoplegend stopline \
+stoplinecorrection stoplinenumbering stoplines stoplocal stoplocalenvironment \
+stoplocalfootnotes stoplokaal stoplokalevoetnoten stopmakeup stopmargeblok \
+stopmarginblock stopnaast stopnamemakeup stopnarrower stopomgeving \
+stoponderdeel stopopelkaar stopopmaak stopopposite stopoverlay \
+stopoverview stopoverzicht stopparagraph stoppositioneren stoppositioning \
+stoppostponing stopprodukt stopprofiel stopprofile stopprojekt \
+stopraster stopregel stopregelcorrectie stopregelnummeren stopregels \
+stopsmaller stopsymbolset stopsynchronisatie stopsynchronization stoptabel \
+stoptabellen stoptable stoptables stoptabulate stoptekst \
+stoptekstlijn stoptyping stopuitlijnen stopunpacked stopvanelkaar \
+stopversie sub subformulenummer subject subpaginanummer \
+subsection subsubject subsubsection subsubsubject suggestie \
+switchnaarkorps switchtorawfont sym symbool symoffset \
+synchronisatiebalk synchroniseer synonym taal tab \
+tekstbreedte teksthoogte tekstlijn tekstreferentie tekstvariabele \
+testkolom testpagina tex title toelichting \
+toonexternefiguren toongrid tooninstellingen toonkader toonkleur \
+toonkleurgroep toonkorps toonkorpsomgeving toonlayout toonopmaak \
+toonpalet toonprint toonstruts toonsymboolset toonvelden \
+totaalaantalpaginas txt typ type typebuffer \
+typefile uit uitgerekt underbar underbars \
+usecodering usedirectory vastespatie vastespaties veld \
+veldstapel verbergblokken vergelijkkleurgroep vergelijkpalet verhoognummer \
+verlaagnummer verplaatsformule verplaatsopgrid verplaatszijblok versie \
+vertaal verwerkblokken verwerkpagina vl voetafstand \
+voethoogte voetnoot voetnoottekst volgprofiel volgprofielversie \
+volgversie volledigepaginanummer volledigregister voluit weekdag \
+wilijnd wiskunde witruimte woonplaats woordrechts \
+zetbreedte zethoogte 
+
diff --git a/context/data/scite/scite-context-data-metafun.properties b/context/data/scite/scite-context-data-metafun.properties
index 80cb13417..c5aa4cbed 100644
--- a/context/data/scite/scite-context-data-metafun.properties
+++ b/context/data/scite/scite-context-data-metafun.properties
@@ -1,3 +1,10 @@
+keywordclass.metafun.internals=\
+nocolormodel greycolormodel graycolormodel rgbcolormodel \
+cmykcolormodel shadefactor textextoffset normaltransparent multiplytransparent \
+screentransparent overlaytransparent softlighttransparent hardlighttransparent colordodgetransparent \
+colorburntransparent darkentransparent lightentransparent differencetransparent exclusiontransparent \
+huetransparent saturationtransparent colortransparent luminositytransparent metapostversion 
+
 keywordclass.metafun.commands=\
 sqr log ln exp \
 inv pow pi radian tand \
@@ -45,10 +52,3 @@ drawpoints drawcontrolpoints drawcontrollines drawpointlabels drawlineoptions \
 drawpointoptions drawcontroloptions drawlabeloptions draworiginoptions drawboundoptions \
 drawpathoptions resetdrawoptions decorated redecorated undecorated 
 
-keywordclass.metafun.internals=\
-nocolormodel greycolormodel graycolormodel rgbcolormodel \
-cmykcolormodel shadefactor textextoffset normaltransparent multiplytransparent \
-screentransparent overlaytransparent softlighttransparent hardlighttransparent colordodgetransparent \
-colorburntransparent darkentransparent lightentransparent differencetransparent exclusiontransparent \
-huetransparent saturationtransparent colortransparent luminositytransparent metapostversion 
-
diff --git a/context/data/scite/scite-context-data-metapost.properties b/context/data/scite/scite-context-data-metapost.properties
index f26f751f3..f2a7c6e11 100644
--- a/context/data/scite/scite-context-data-metapost.properties
+++ b/context/data/scite/scite-context-data-metapost.properties
@@ -1,9 +1,40 @@
+keywordclass.metapost.tex=\
+btex etex verbatimtex 
+
 keywordclass.metapost.shortcuts=\
 .. ... -- --- \
 & 
 
-keywordclass.metapost.tex=\
-btex etex verbatimtex 
+keywordclass.metapost.commands=\
+beginfig endfig 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 
 
 keywordclass.metapost.internals=\
 mitered rounded beveled butt \
@@ -65,34 +96,3 @@ graycolor colormodel graypart dashpart penpart \
 stroked filled textual clipped bounded \
 expandafter 
 
-keywordclass.metapost.commands=\
-beginfig endfig 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 
-
diff --git a/context/data/scite/scite-context-data-tex.properties b/context/data/scite/scite-context-data-tex.properties
index c11653d21..f534c1b9b 100644
--- a/context/data/scite/scite-context-data-tex.properties
+++ b/context/data/scite/scite-context-data-tex.properties
@@ -1,3 +1,8 @@
+keywordclass.tex.aleph=\
+AlephVersion Alephminorversion Alephrevision Alephversion \
+Omegaminorversion Omegarevision Omegaversion boxdir pagebottomoffset \
+pagerightoffset 
+
 keywordclass.tex.etex=\
 botmarks clubpenalties currentgrouplevel currentgrouptype \
 currentifbranch currentiflevel currentiftype detokenize dimexpr \
@@ -13,6 +18,79 @@ showtokens splitbotmarks splitdiscards splitfirstmarks topmarks \
 tracingassigns tracinggroups tracingifs tracingnesting tracingscantokens \
 unexpanded unless widowpenalties 
 
+keywordclass.tex.luatex=\
+Udelcode Udelcodenum Udelimiter Udelimiterover \
+Udelimiterunder Umathaccent Umathaxis Umathbinbinspacing Umathbinclosespacing \
+Umathbininnerspacing Umathbinopenspacing Umathbinopspacing Umathbinordspacing Umathbinpunctspacing \
+Umathbinrelspacing Umathchar Umathchardef Umathcharnum Umathclosebinspacing \
+Umathcloseclosespacing Umathcloseinnerspacing Umathcloseopenspacing Umathcloseopspacing Umathcloseordspacing \
+Umathclosepunctspacing Umathcloserelspacing Umathcode Umathcodenum Umathconnectoroverlapmin \
+Umathfractiondelsize Umathfractiondenomdown Umathfractiondenomvgap Umathfractionnumup Umathfractionnumvgap \
+Umathfractionrule Umathinnerbinspacing Umathinnerclosespacing Umathinnerinnerspacing Umathinneropenspacing \
+Umathinneropspacing Umathinnerordspacing Umathinnerpunctspacing Umathinnerrelspacing Umathlimitabovebgap \
+Umathlimitabovekern Umathlimitabovevgap Umathlimitbelowbgap Umathlimitbelowkern Umathlimitbelowvgap \
+Umathopbinspacing Umathopclosespacing Umathopenbinspacing Umathopenclosespacing Umathopeninnerspacing \
+Umathopenopenspacing Umathopenopspacing Umathopenordspacing Umathopenpunctspacing Umathopenrelspacing \
+Umathoperatorsize Umathopinnerspacing Umathopopenspacing Umathopopspacing Umathopordspacing \
+Umathoppunctspacing Umathoprelspacing Umathordbinspacing Umathordclosespacing Umathordinnerspacing \
+Umathordopenspacing Umathordopspacing Umathordordspacing Umathordpunctspacing Umathordrelspacing \
+Umathoverbarkern Umathoverbarrule Umathoverbarvgap Umathoverdelimiterbgap Umathoverdelimitervgap \
+Umathpunctbinspacing Umathpunctclosespacing Umathpunctinnerspacing Umathpunctopenspacing Umathpunctopspacing \
+Umathpunctordspacing Umathpunctpunctspacing Umathpunctrelspacing Umathquad Umathradicaldegreeafter \
+Umathradicaldegreebefore Umathradicaldegreeraise Umathradicalkern Umathradicalrule Umathradicalvgap \
+Umathrelbinspacing Umathrelclosespacing Umathrelinnerspacing Umathrelopenspacing Umathrelopspacing \
+Umathrelordspacing Umathrelpunctspacing Umathrelrelspacing Umathspaceafterscript Umathstackdenomdown \
+Umathstacknumup Umathstackvgap Umathsubshiftdown Umathsubshiftdrop Umathsubsupshiftdown \
+Umathsubsupvgap Umathsubtopmax Umathsupbottommin Umathsupshiftdrop Umathsupshiftup \
+Umathsupsubbottommax Umathunderbarkern Umathunderbarrule Umathunderbarvgap Umathunderdelimiterbgap \
+Umathunderdelimitervgap Uoverdelimiter Uradical Uroot Ustack \
+Ustartdisplaymath Ustartmath Ustopdisplaymath Ustopmath Usubscript \
+Usuperscript Uunderdelimiter alignmark aligntab attribute \
+attributedef catcodetable clearmarks crampeddisplaystyle crampedscriptscriptstyle \
+crampedscriptstyle crampedtextstyle fontid formatname gleaders \
+ifabsdim ifabsnum ifprimitive initcatcodetable latelua \
+luaescapestring luastartup luatexdatestamp luatexrevision luatexversion \
+mathstyle nokerns noligs outputbox pageleftoffset \
+pagetopoffset postexhyphenchar posthyphenchar preexhyphenchar prehyphenchar \
+primitive savecatcodetable scantextokens suppressfontnotfounderror suppressifcsnameerror \
+suppresslongerror suppressoutererror synctex 
+
+keywordclass.tex.omega=\
+OmegaVersion bodydir chardp charht \
+charit charwd leftghost localbrokenpenalty localinterlinepenalty \
+localleftbox localrightbox mathdir odelcode odelimiter \
+omathaccent omathchar omathchardef omathcode oradical \
+pagedir pageheight pagewidth pardir rightghost \
+textdir 
+
+keywordclass.tex.xetex=\
+XeTeXversion 
+
+keywordclass.tex.pdftex=\
+efcode expanded ifincsname ifpdfabsdim \
+ifpdfabsnum ifpdfprimitive leftmarginkern letterspacefont lpcode \
+pdfadjustspacing pdfannot pdfcatalog pdfcolorstack pdfcolorstackinit \
+pdfcompresslevel pdfcopyfont pdfcreationdate pdfdecimaldigits pdfdest \
+pdfdestmargin pdfdraftmode pdfeachlinedepth pdfeachlineheight pdfendlink \
+pdfendthread pdffirstlineheight pdffontattr pdffontexpand pdffontname \
+pdffontobjnum pdffontsize pdfgamma pdfgentounicode pdfglyphtounicode \
+pdfhorigin pdfignoreddimen pdfimageapplygamma pdfimagegamma pdfimagehicolor \
+pdfimageresolution pdfincludechars pdfinclusioncopyfonts pdfinclusionerrorlevel pdfinfo \
+pdfinsertht pdflastannot pdflastlinedepth pdflastlink pdflastobj \
+pdflastxform pdflastximage pdflastximagecolordepth pdflastximagepages pdflastxpos \
+pdflastypos pdflinkmargin pdfliteral pdfmapfile pdfmapline \
+pdfminorversion pdfnames pdfnoligatures pdfnormaldeviate pdfobj \
+pdfobjcompresslevel pdfoptionpdfminorversion pdfoutline pdfoutput pdfpageattr \
+pdfpagebox pdfpageheight pdfpageref pdfpageresources pdfpagesattr \
+pdfpagewidth pdfpkmode pdfpkresolution pdfprimitive pdfprotrudechars \
+pdfpxdimen pdfrandomseed pdfrefobj pdfrefxform pdfrefximage \
+pdfreplacefont pdfrestore pdfretval pdfsave pdfsavepos \
+pdfsetmatrix pdfsetrandomseed pdfstartlink pdfstartthread pdftexbanner \
+pdftexrevision pdftexversion pdfthread pdfthreadmargin pdftracingfonts \
+pdftrailer pdfuniformdeviate pdfuniqueresname pdfvorigin pdfxform \
+pdfxformattr pdfxformname pdfxformresources pdfximage pdfximagebbox \
+quitvmode rightmarginkern rpcode tagcode 
+
 keywordclass.tex.tex=\
 - / AlephVersion Alephminorversion \
 Alephrevision Alephversion OmegaVersion Omegaminorversion Omegarevision \
@@ -158,81 +236,3 @@ vskip vsplit vss vtop wd \
 widowpenalties widowpenalty write xdef xleaders \
 xspaceskip year 
 
-keywordclass.tex.aleph=\
-AlephVersion Alephminorversion Alephrevision Alephversion \
-Omegaminorversion Omegarevision Omegaversion boxdir pagebottomoffset \
-pagerightoffset 
-
-keywordclass.tex.xetex=\
-XeTeXversion 
-
-keywordclass.tex.pdftex=\
-efcode expanded ifincsname ifpdfabsdim \
-ifpdfabsnum ifpdfprimitive leftmarginkern letterspacefont lpcode \
-pdfadjustspacing pdfannot pdfcatalog pdfcolorstack pdfcolorstackinit \
-pdfcompresslevel pdfcopyfont pdfcreationdate pdfdecimaldigits pdfdest \
-pdfdestmargin pdfdraftmode pdfeachlinedepth pdfeachlineheight pdfendlink \
-pdfendthread pdffirstlineheight pdffontattr pdffontexpand pdffontname \
-pdffontobjnum pdffontsize pdfgamma pdfgentounicode pdfglyphtounicode \
-pdfhorigin pdfignoreddimen pdfimageapplygamma pdfimagegamma pdfimagehicolor \
-pdfimageresolution pdfincludechars pdfinclusioncopyfonts pdfinclusionerrorlevel pdfinfo \
-pdfinsertht pdflastannot pdflastlinedepth pdflastlink pdflastobj \
-pdflastxform pdflastximage pdflastximagecolordepth pdflastximagepages pdflastxpos \
-pdflastypos pdflinkmargin pdfliteral pdfmapfile pdfmapline \
-pdfminorversion pdfnames pdfnoligatures pdfnormaldeviate pdfobj \
-pdfobjcompresslevel pdfoptionpdfminorversion pdfoutline pdfoutput pdfpageattr \
-pdfpagebox pdfpageheight pdfpageref pdfpageresources pdfpagesattr \
-pdfpagewidth pdfpkmode pdfpkresolution pdfprimitive pdfprotrudechars \
-pdfpxdimen pdfrandomseed pdfrefobj pdfrefxform pdfrefximage \
-pdfreplacefont pdfrestore pdfretval pdfsave pdfsavepos \
-pdfsetmatrix pdfsetrandomseed pdfstartlink pdfstartthread pdftexbanner \
-pdftexrevision pdftexversion pdfthread pdfthreadmargin pdftracingfonts \
-pdftrailer pdfuniformdeviate pdfuniqueresname pdfvorigin pdfxform \
-pdfxformattr pdfxformname pdfxformresources pdfximage pdfximagebbox \
-quitvmode rightmarginkern rpcode tagcode 
-
-keywordclass.tex.omega=\
-OmegaVersion bodydir chardp charht \
-charit charwd leftghost localbrokenpenalty localinterlinepenalty \
-localleftbox localrightbox mathdir odelcode odelimiter \
-omathaccent omathchar omathchardef omathcode oradical \
-pagedir pageheight pagewidth pardir rightghost \
-textdir 
-
-keywordclass.tex.luatex=\
-Udelcode Udelcodenum Udelimiter Udelimiterover \
-Udelimiterunder Umathaccent Umathaxis Umathbinbinspacing Umathbinclosespacing \
-Umathbininnerspacing Umathbinopenspacing Umathbinopspacing Umathbinordspacing Umathbinpunctspacing \
-Umathbinrelspacing Umathchar Umathchardef Umathcharnum Umathclosebinspacing \
-Umathcloseclosespacing Umathcloseinnerspacing Umathcloseopenspacing Umathcloseopspacing Umathcloseordspacing \
-Umathclosepunctspacing Umathcloserelspacing Umathcode Umathcodenum Umathconnectoroverlapmin \
-Umathfractiondelsize Umathfractiondenomdown Umathfractiondenomvgap Umathfractionnumup Umathfractionnumvgap \
-Umathfractionrule Umathinnerbinspacing Umathinnerclosespacing Umathinnerinnerspacing Umathinneropenspacing \
-Umathinneropspacing Umathinnerordspacing Umathinnerpunctspacing Umathinnerrelspacing Umathlimitabovebgap \
-Umathlimitabovekern Umathlimitabovevgap Umathlimitbelowbgap Umathlimitbelowkern Umathlimitbelowvgap \
-Umathopbinspacing Umathopclosespacing Umathopenbinspacing Umathopenclosespacing Umathopeninnerspacing \
-Umathopenopenspacing Umathopenopspacing Umathopenordspacing Umathopenpunctspacing Umathopenrelspacing \
-Umathoperatorsize Umathopinnerspacing Umathopopenspacing Umathopopspacing Umathopordspacing \
-Umathoppunctspacing Umathoprelspacing Umathordbinspacing Umathordclosespacing Umathordinnerspacing \
-Umathordopenspacing Umathordopspacing Umathordordspacing Umathordpunctspacing Umathordrelspacing \
-Umathoverbarkern Umathoverbarrule Umathoverbarvgap Umathoverdelimiterbgap Umathoverdelimitervgap \
-Umathpunctbinspacing Umathpunctclosespacing Umathpunctinnerspacing Umathpunctopenspacing Umathpunctopspacing \
-Umathpunctordspacing Umathpunctpunctspacing Umathpunctrelspacing Umathquad Umathradicaldegreeafter \
-Umathradicaldegreebefore Umathradicaldegreeraise Umathradicalkern Umathradicalrule Umathradicalvgap \
-Umathrelbinspacing Umathrelclosespacing Umathrelinnerspacing Umathrelopenspacing Umathrelopspacing \
-Umathrelordspacing Umathrelpunctspacing Umathrelrelspacing Umathspaceafterscript Umathstackdenomdown \
-Umathstacknumup Umathstackvgap Umathsubshiftdown Umathsubshiftdrop Umathsubsupshiftdown \
-Umathsubsupvgap Umathsubtopmax Umathsupbottommin Umathsupshiftdrop Umathsupshiftup \
-Umathsupsubbottommax Umathunderbarkern Umathunderbarrule Umathunderbarvgap Umathunderdelimiterbgap \
-Umathunderdelimitervgap Uoverdelimiter Uradical Uroot Ustack \
-Ustartdisplaymath Ustartmath Ustopdisplaymath Ustopmath Usubscript \
-Usuperscript Uunderdelimiter alignmark aligntab attribute \
-attributedef catcodetable clearmarks crampeddisplaystyle crampedscriptscriptstyle \
-crampedscriptstyle crampedtextstyle fontid formatname gleaders \
-ifabsdim ifabsnum ifprimitive initcatcodetable latelua \
-luaescapestring luastartup luatexdatestamp luatexrevision luatexversion \
-mathstyle nokerns noligs outputbox pageleftoffset \
-pagetopoffset postexhyphenchar posthyphenchar preexhyphenchar prehyphenchar \
-primitive savecatcodetable scantextokens suppressfontnotfounderror suppressifcsnameerror \
-suppresslongerror suppressoutererror synctex 
-
diff --git a/context/data/scite/scite-context-external.properties b/context/data/scite/scite-context-external.properties
index 6bba2b7ff..2bca111b4 100644
--- a/context/data/scite/scite-context-external.properties
+++ b/context/data/scite/scite-context-external.properties
@@ -30,6 +30,8 @@ if PLAT_GTK
 
 lexer.*.lpeg=lpeg
 
+file.patterns.cweb=*.h;*.c;*.w;*.hh;*.cc;*.ww;*.hpp;*.cpp;*.hxx;*.cxx;
+
 lexer.$(file.patterns.metapost)=lpeg_scite-context-lexer-mps
 lexer.$(file.patterns.metafun)=lpeg_scite-context-lexer-mps
 lexer.$(file.patterns.context)=lpeg_scite-context-lexer-tex
@@ -38,15 +40,8 @@ lexer.$(file.patterns.lua)=lpeg_scite-context-lexer-lua
 lexer.$(file.patterns.example)=lpeg_scite-context-lexer-xml
 lexer.$(file.patterns.text)=lpeg_scite-context-lexer-txt
 lexer.$(file.patterns.pdf)=lpeg_scite-context-lexer-pdf
-
-#~ lexer.$(file.patterns.metapost)=lpeg_ctx-mps
-#~ lexer.$(file.patterns.metafun)=lpeg_ctx-mps
-#~ lexer.$(file.patterns.context)=lpeg_ctx-tex
-#~ lexer.$(file.patterns.tex)=lpeg_ctx-tex
-#~ lexer.$(file.patterns.lua)=lpeg_ctx-lua
-#~ lexer.$(file.patterns.example)=lpeg_ctx-xml
-#~ lexer.$(file.patterns.text)=lpeg_ctx-txt
-#~ lexer.$(file.patterns.pdf)=lpeg_ctx-pdf
+lexer.$(file.patterns.cweb)=lpeg_scite-context-lexer-web
+lexer.$(file.patterns.cpp)=lpeg_scite-context-lexer-web
 
 comment.block.lpeg_scite-context-lexer-tex=%
 comment.block.at.line.start.lpeg_scite-context-lexer-tex=1
diff --git a/context/data/scite/scite-context.properties b/context/data/scite/scite-context.properties
index 739967d3c..84e212ed6 100644
--- a/context/data/scite/scite-context.properties
+++ b/context/data/scite/scite-context.properties
@@ -83,6 +83,10 @@ lexer.$(file.patterns.lua)=lua
 command.compile.$(file.patterns.lua)=mtxrun --script "$(FileNameExt)"
 command.go.$(file.patterns.lua)=mtxrun --script "$(FileNameExt)"
 
+# W: patterns
+#
+# file.patterns.w=*.c;*.w;*.cc;*.cpp;*.cxx;*.h;*.hh;*.hpp;*.hxx;
+
 # Test: patterns
 
 file.patterns.text=*.txt
diff --git a/scripts/context/lua/mtx-tools.lua b/scripts/context/lua/mtx-tools.lua
index c1aaf9e5d..22a83e603 100644
--- a/scripts/context/lua/mtx-tools.lua
+++ b/scripts/context/lua/mtx-tools.lua
@@ -124,7 +124,7 @@ function scripts.tools.dirtoxml()
             if mode == "file" then
                 result[#result+1] = format("%s<file name='%s'>",d,(longname and path and join(path,name)) or name)
                 result[#result+1] = format("%s  <base>%s</base>",d,removesuffix(name))
-                result[#result+1] = format("%s  <type>%s</type>",d,extname(name))
+                result[#result+1] = format("%s  <type>%s</type>",d,suffixonly(name))
                 result[#result+1] = format("%s  <size>%s</size>",d,attr.size)
                 result[#result+1] = format("%s  <permissions>%s</permissions>",d,sub(attr.permissions,7,9))
                 result[#result+1] = format("%s  <date>%s</date>",d,date(timestamp,attr.modification))
diff --git a/tex/context/base/anch-tab.mkiv b/tex/context/base/anch-tab.mkiv
index 2fb6938a2..a70f63e24 100644
--- a/tex/context/base/anch-tab.mkiv
+++ b/tex/context/base/anch-tab.mkiv
@@ -185,7 +185,7 @@
 \def\tabulateEQpos
   {\setbox\scratchbox\hbox{\tabulateEQ}%
    \hbox to \wd\scratchbox{\hss\kern\zeropoint\tabulatepos\hss}%
-   \hskip-\wd\scratchbox
+   \kern-\wd\scratchbox
    \box\scratchbox}
 
 \appendtoks
diff --git a/tex/context/base/back-pdf.mkiv b/tex/context/base/back-pdf.mkiv
index e0966ef52..1cf7a3703 100644
--- a/tex/context/base/back-pdf.mkiv
+++ b/tex/context/base/back-pdf.mkiv
@@ -187,7 +187,7 @@
 
 \unexpanded\def\dodotransformnextbox#1#2#3%
   {\hbox
-     {\hskip#1\onebasepoint
+     {\kern#1\onebasepoint
       \raise#2\onebasepoint\hbox
         {\pdfsave
          \pdfsetmatrix{#3}% 0 0 (no #5 #6 yet)
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 6aa0a82d5..398664072 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{2013.01.22 18:33}
+\newcontextversion{2013.01.23 14:04}
 
 %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 2e0a6c4c4..a14f18de8 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.01.22 18:33}
+\newcontextversion{2013.01.23 14:04}
 
 %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 1318060a5..c52eadf52 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 26753f6a0..75fd4e262 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 b6f91d1ed..3d0dcf74e 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{2013.01.22 18:33}
+\edef\contextversion{2013.01.23 14:04}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 3e85c4426..c727a998d 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.01.22 18:33}
+\edef\contextversion{2013.01.23 14:04}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/font-mis.lua b/tex/context/base/font-mis.lua
index cfef770d7..247b0f641 100644
--- a/tex/context/base/font-mis.lua
+++ b/tex/context/base/font-mis.lua
@@ -22,7 +22,7 @@ local handlers = fonts.handlers
 handlers.otf   = handlers.otf or { }
 local otf      = handlers.otf
 
-otf.version    = otf.version or 2.740
+otf.version    = otf.version or 2.741
 otf.cache      = otf.cache   or containers.define("fonts", "otf", otf.version, true)
 
 function otf.loadcached(filename,format,sub)
diff --git a/tex/context/base/font-odk.lua b/tex/context/base/font-odk.lua
new file mode 100644
index 000000000..c34efc120
--- /dev/null
+++ b/tex/context/base/font-odk.lua
@@ -0,0 +1,904 @@
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+-- We keep the original around for a while so that we can check it   --
+-- when the above code does it wrong (data tables are not included). --
+-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+-- author    : Kai Eigner, TAT Zetwerk
+-- copyright : TAT Zetwerk
+-- comment   : see font-odv.lua for current implementation
+
+-- local state = attributes.private('state')
+-- local sylnr = attributes.private('syllabe')
+--
+-- local function install_dev(tfmdata)
+--     local features = tfmdata.resources.features
+--     local sequences = tfmdata.resources.sequences
+--
+--     local insertpos = 1
+--     for s=1,#sequences do    -- classify chars
+--         for k in pairs(basic_shaping_forms) do
+--             if sequences[s].features and ( sequences[s].features[k] or sequences[s].features.locl ) then insertpos = s + 1 end
+--         end
+--     end
+--
+--     features.gsub["dev2_reorder_matras"] = { ["dev2"] = { ["dflt"] = true } }
+--     features.gsub["dev2_reorder_reph"] = { ["dev2"] = { ["dflt"] = true } }
+--     features.gsub["dev2_reorder_pre_base_reordering_consonants"] = { ["dev2"] = { ["dflt"] = true } }
+--     features.gsub["remove_joiners"] = { ["deva"] = { ["dflt"] = true }, ["dev2"] = { ["dflt"] = true } }
+--
+--     local sequence_dev2_reorder_matras = {
+--         chain = 0,
+--         features = { dev2_reorder_matras = { dev2 = { dflt = true } } },
+--         flags = { false, false, false, false },
+--         name = "dev2_reorder_matras",
+--         subtables = { "dev2_reorder_matras" },
+--         type = "dev2_reorder_matras",
+--     }
+--     local sequence_dev2_reorder_reph = {
+--         chain = 0,
+--         features = { dev2_reorder_reph = { dev2 = { dflt = true } } },
+--         flags = { false, false, false, false },
+--         name = "dev2_reorder_reph",
+--         subtables = { "dev2_reorder_reph" },
+--         type = "dev2_reorder_reph",
+--     }
+--     local sequence_dev2_reorder_pre_base_reordering_consonants = {
+--         chain = 0,
+--         features = { dev2_reorder_pre_base_reordering_consonants = { dev2 = { dflt = true } } },
+--         flags = { false, false, false, false },
+--         name = "dev2_reorder_pre_base_reordering_consonants",
+--         subtables = { "dev2_reorder_pre_base_reordering_consonants" },
+--         type = "dev2_reorder_pre_base_reordering_consonants",
+--     }
+--     local sequence_remove_joiners = {
+--         chain = 0,
+--         features = { remove_joiners = { deva = { dflt = true }, dev2 = { dflt = true } } },
+--         flags = { false, false, false, false },
+--         name = "remove_joiners",
+--         subtables = { "remove_joiners" },
+--         type = "remove_joiners",
+--     }
+--     table.insert(sequences, insertpos, sequence_dev2_reorder_pre_base_reordering_consonants)
+--     table.insert(sequences, insertpos, sequence_dev2_reorder_reph)
+--     table.insert(sequences, insertpos, sequence_dev2_reorder_matras)
+--     table.insert(sequences, insertpos, sequence_remove_joiners)
+-- end
+--
+-- local function deva_reorder(head,start,stop,font,attr)
+--     local tfmdata = fontdata[font]
+--     local lookuphash = tfmdata.resources.lookuphash
+--     local sequences = tfmdata.resources.sequences
+--
+--     if not lookuphash["remove_joiners"] then install_dev(tfmdata) end    --install Devanagari-features
+--
+--     local sharedfeatures = tfmdata.shared.features
+--     sharedfeatures["remove_joiners"] = true
+--     local datasets = otf.dataset(tfmdata,font,attr)
+--
+--     lookuphash["remove_joiners"] = { [0x200C] = true, [0x200D] = true }
+--
+--     local current, n, base, firstcons, lastcons, basefound = start, start.next, nil, nil, nil, false
+--     local reph, vattu = false, false
+--     for s=1,#sequences do
+--         local dataset = datasets[s]
+--         featurevalue = dataset and dataset[1]
+--         if featurevalue and dataset[4] == "rphf" then reph = true end
+--         if featurevalue and dataset[4] == "blwf" then vattu = true end
+--     end
+--     if ra[start.char] and halant[n.char] and reph then    -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants
+--         if n == stop then return head, stop end
+--         if zwj[n.next.char] then
+--             current = start
+--         else
+--             current = n.next
+--             set_attribute(start,state,5) -- rphf
+--         end
+--     end
+--
+--     if nbsp[current.char] then    --Stand Alone cluster
+--         if current == stop then
+--             stop = stop.prev
+--             head = node.remove(head, current)
+--             node.free(current)
+--             return head, stop
+--         else
+--             base, firstcons, lastcons = current, current, current
+--             current = current.next
+--             if current ~= stop then
+--                 if nukta[current.char] then current = current.next end
+--                 if zwj[current.char] then
+--                     if current ~= stop and current.next ~= stop and halant[current.next.char] then
+--                         current = current.next
+--                         local tmp = current.next.next
+--                         local changestop = current.next == stop
+--                         local tempcurrent = node.copy(current.next)
+--                         tempcurrent.next = node.copy(current)
+--                         tempcurrent.next.prev = tempcurrent
+--                         set_attribute(tempcurrent,state,8)    --blwf
+--                         tempcurrent = nodes.handlers.characters(tempcurrent)
+--                         unset_attribute(tempcurrent,state)
+--                         if current.next.char == tempcurrent.char then
+--                             node.flush_list(tempcurrent)
+--                             local n = node.copy(current)
+--                             current.char = dotted_circle
+--                             head = node.insert_after(head, current, n)
+--                         else
+--                             current.char = tempcurrent.char    -- (assumes that result of blwf consists of one node)
+--                             local freenode = current.next
+--                             current.next = tmp
+--                             tmp.prev = current
+--                             node.free(freenode)
+--                             node.flush_list(tempcurrent)
+--                             if changestop then stop = current end
+--                         end
+--                     end
+--                 end
+--             end
+--         end
+--     end
+--
+--     while not basefound do    -- find base consonant
+--         if consonant[current.char] then
+--             set_attribute(current, state, 6)    --    half
+--             if not firstcons then firstcons = current end
+--             lastcons = current
+--             if not base then
+--                 base = current
+--             else    --check whether consonant has below-base (or post-base) form
+--                 local baseform = true
+--                 for s=1,#sequences do
+--                     local sequence = sequences[s]
+--                     local dataset = datasets[s]
+--                     featurevalue = dataset and dataset[1]
+--                     if featurevalue and dataset[4] == "blwf" then
+--                         local subtables = sequence.subtables
+--                         for i=1,#subtables do
+--                             local lookupname = subtables[i]
+--                             local lookupcache = lookuphash[lookupname]
+--                             if lookupcache then
+--                                 local lookupmatch = lookupcache[current.char]
+--                                 if lookupmatch then
+--                                     set_attribute(current, state, 8)    --    blwf
+--                                     baseform = false
+--                                 end
+--                             end
+--                         end
+--                     end
+--                 end
+--                 if baseform then base = current end
+--             end
+--         end
+--         basefound = current == stop
+--         current = current.next
+--     end
+--     if base ~= lastcons then    -- if base consonant is not last one then move halant from base consonant to last one
+--         n = base.next
+--         if nukta[n.char] then n = n.next end
+--         if halant[n.char] then
+--             if lastcons ~= stop then
+--                 local ln = lastcons.next
+--                 if nukta[ln.char] then lastcons = ln end
+--             end
+--             local np, nn, ln = n.prev, n.next, lastcons.next
+--             np.next = n.next
+--             nn.prev = n.prev
+--             lastcons.next = n
+--             if ln then ln.prev = n end
+--             n.next = ln
+--             n.prev = lastcons
+--             if lastcons == stop then stop = n end
+--         end
+--     end
+--
+--     n = start.next
+--     if ra[start.char] and halant[n.char] and not ( n ~= stop and ( zwj[n.next.char] or zwnj[n.next.char] ) ) then    -- if syllable starts with Ra + H then move this combination so that it follows either: the post-base 'matra' (if any) or the base consonant
+--         local matra = base
+--         if base ~= stop and dependent_vowel[base.next.char] then matra = base.next end
+--         local sp, nn, mn = start.prev, n.next, matra.next
+--         if sp then sp.next = nn end
+--         nn.prev = sp
+--         matra.next = start
+--         start.prev = matra
+--         n.next = mn
+--         if mn then mn.prev = n end
+--         if head == start then head = nn end
+--         start = nn
+--         if matra == stop then stop = n end
+--     end
+--
+--     local current = start
+--     while current ~= stop do
+--         if halant[current.next.char] and current.next ~= stop and zwnj[current.next.next.char] then unset_attribute(current, state) end
+--         current = current.next
+--     end
+--
+--     if has_attribute(base, state) and base ~= stop and halant[base.next.char] and not ( base.next ~= stop and zwj[base.next.next.char] ) then unset_attribute(base, state) end
+--
+--     local current, allreordered, moved = start, false, { [base] = true }
+--     local a, b, p, bn = base, base, base, base.next
+--     if base ~= stop and nukta[bn.char] then a, b, p = bn, bn, bn end
+--     while not allreordered do
+--         local c, n, l = current, current.next, nil    --current is always consonant
+--         if c ~= stop and nukta[n.char] then c = n n = n.next end
+--         if c ~= stop and halant[n.char] then c = n n = n.next end
+--         while c ~= stop and dependent_vowel[n.char] do c = n n = n.next end
+--         if c ~= stop and vowel_modifier[n.char] then c = n n = n.next end
+--         if c ~= stop and stress_tone_mark[n.char] then c = n n = n.next end
+--         local bp, cn = firstcons.prev, current.next
+--         while cn ~= c.next do    -- move pre-base matras...
+--             if pre_mark[cn.char] then
+--                 if bp then bp.next = cn end
+--                 cn.prev.next = cn.next
+--                 if cn.next then cn.next.prev = cn.prev end
+--                 if cn == stop then stop = cn.prev end
+--                 cn.prev = bp
+--                 cn.next = firstcons
+--                 firstcons.prev = cn
+--                 if firstcons == start then
+--                     if head == start then head = cn end
+--                     start = cn
+--                 end
+--                 break
+--             end
+--             cn = cn.next
+--         end
+--         allreordered = c == stop
+--         current = c.next
+--     end
+--
+--     if reph or vattu then
+--         local current, cns = start, nil
+--         while current ~= stop do
+--             local c, n = current, current.next
+--             if ra[current.char] and halant[n.char] then
+--                 c, n = n, n.next
+--                 local b, bn = base, base
+--                 while bn ~= stop  do
+--                     if dependent_vowel[bn.next.char] then b = bn.next end
+--                     bn = bn.next
+--                 end
+--                 if has_attribute(current,state,attribute) == 5 then    -- position Reph (Ra + H) after post-base 'matra' (if any) since these become marks on the 'matra', not on the base glyph
+--                     if b ~= current then
+--                         if current == start then
+--                             if head == start then head = n end
+--                             start = n
+--                         end
+--                         if b == stop then stop = c end
+--                         if current.prev then current.prev.next = n end
+--                         if n then n.prev = current.prev end
+--                         c.next = b.next
+--                         if b.next then b.next.prev = c end
+--                         b.next = current
+--                         current.prev = b
+--                     end
+--                 elseif cns and cns.next ~= current then    -- position below-base Ra (vattu) following the consonants on which it is placed (either the base consonant or one of the pre-base consonants)
+--                     local cp, cnsn = current.prev, cns.next
+--                     if cp then cp.next = n end
+--                     if n then n.prev = cp end
+--                     cns.next = current
+--                     current.prev = cns
+--                     c.next = cnsn
+--                     if cnsn then cnsn.prev = c end
+--                     if c == stop then stop = cp break end
+--                     current = n.prev
+--                 end
+--             elseif consonant[current.char] or nbsp[current.char] then
+--                 cns = current
+--                 if halant[cns.next.char] then cns = cns.next end
+--             end
+--             current = current.next
+--         end
+--     end
+--
+--     if nbsp[base.char] then
+--         head = node.remove(head, base)
+--         node.free(base)
+--     end
+--
+--     return head, stop
+-- end
+--
+-- function dev2_reorder_matras(start,kind,lookupname,replacement)
+--     local current = start
+--     while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do
+--         if halant[current.char] and not has_attribute(current, state) then
+--             if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end
+--             local sn = start.next
+--             start.next.prev = start.prev
+--             if start.prev then start.prev.next = start.next end
+--             if current.next then current.next.prev = start end
+--             start.next = current.next
+--             current.next = start
+--             start.prev = current
+--             start = sn
+--             break
+--         end
+--         current = current.next
+--     end
+--     return start, true
+-- end
+--
+-- function dev2_reorder_reph(start,kind,lookupname,replacement)
+--     local current, sn = start.next, nil
+--     while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do    --step 2
+--         if halant[current.char] and not has_attribute(current, state) then
+--             if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end
+--             sn = start.next
+--             start.next.prev = start.prev
+--             if start.prev then start.prev.next = start.next end
+--             if current.next then current.next.prev = start end
+--             start.next = current.next
+--             current.next = start
+--             start.prev = current
+--             start = sn
+--             break
+--         end
+--         current = current.next
+--     end
+--     if not sn then
+--         current = start.next
+--         while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do    --step 4
+--             if has_attribute(current, state) == 9 then    --post-base
+--                 sn = start.next
+--                 start.next.prev = start.prev
+--                 if start.prev then start.prev.next = start.next end
+--                 start.prev = current.prev
+--                 current.prev.next = start
+--                 start.next = current
+--                 current.prev = start
+--                 start = sn
+--                 break
+--             end
+--             current = current.next
+--         end
+--     end
+--     if not sn then
+--         current = start.next
+--         local c = nil
+--         while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do    --step 5
+--             if not c and ( above_mark[current.char] or below_mark[current.char] or post_mark[current.char] ) and ReorderClass[current.char] ~= "after subscript" then c = current end
+--             current = current.next
+--         end
+--         if c then
+--             sn = start.next
+--             start.next.prev = start.prev
+--             if start.prev then start.prev.next = start.next end
+--             start.prev = c.prev
+--             c.prev.next = start
+--             start.next = c
+--             c.prev = start
+--             start = sn
+--         end
+--     end
+--     if not sn then
+--         current = start
+--         while current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) do    --step 6
+--             current = current.next
+--         end
+--         if start ~= current then
+--             sn = start.next
+--             start.next.prev = start.prev
+--             if start.prev then start.prev.next = start.next end
+--             if current.next then current.next.prev = start end
+--             start.next = current.next
+--             current.next = start
+--             start.prev = current
+--             start = sn
+--         end
+--     end
+--     return start, true
+-- end
+--
+-- function dev2_reorder_pre_base_reordering_consonants(start,kind,lookupname,replacement)
+--     local current, sn = start, nil
+--     while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do
+--         if halant[current.char] and not has_attribute(current, state) then
+--             if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == start.font and has_attribute(current.next, sylnr) == has_attribute(start, sylnr) and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end
+--             sn = start.next
+--             start.next.prev = start.prev
+--             if start.prev then start.prev.next = start.next end
+--             if current.next then current.next.prev = start end
+--             start.next = current.next
+--             current.next = start
+--             start.prev = current
+--             start = sn
+--             break
+--         end
+--         current = current.next
+--     end
+--     if not sn then
+--         current = start.next
+--         while current and current.id == glyph and current.subtype<256 and current.font == start.font and has_attribute(current, sylnr) == has_attribute(start, sylnr) do
+--             if not consonant[current.char] and has_attribute(current, state) then    --main
+--                 sn = start.next
+--                 start.next.prev = start.prev
+--                 if start.prev then start.prev.next = start.next end
+--                 start.prev = current.prev
+--                 current.prev.next = start
+--                 start.next = current
+--                 current.prev = start
+--                 start = sn
+--                 break
+--             end
+--             current = current.next
+--         end
+--     end
+--     return start, true
+-- end
+--
+-- function remove_joiners(start,kind,lookupname,replacement)
+--     local stop = start.next
+--     while stop and stop.id == glyph and stop.subtype<256 and stop.font == start.font and (zwj[stop.char] or zwnj[stop.char]) do stop = stop.next end
+--     if stop then stop.prev.next = nil stop.prev = start.prev end
+--     if start.prev then start.prev.next = stop end
+--     node.flush_list(start)
+--     return stop, true
+-- end
+--
+-- local function dev2_reorder(head,start,stop,font,attr)
+--     local tfmdata = fontdata[font]
+--     local lookuphash = tfmdata.resources.lookuphash
+--     local sequences = tfmdata.resources.sequences
+--
+--     if not lookuphash["remove_joiners"] then install_dev(tfmdata) end    --install Devanagari-features
+--
+--     local sharedfeatures = tfmdata.shared.features
+--     sharedfeatures["dev2_reorder_matras"] = true
+--     sharedfeatures["dev2_reorder_reph"] = true
+--     sharedfeatures["dev2_reorder_pre_base_reordering_consonants"] = true
+--     sharedfeatures["remove_joiners"] = true
+--     local datasets = otf.dataset(tfmdata,font,attr)
+--
+--     local reph, pre_base_reordering_consonants = false, nil
+--     local halfpos, basepos, subpos, postpos = nil, nil, nil, nil
+--     local locl = { }
+--
+--     for s=1,#sequences do    -- classify chars
+--         local sequence = sequences[s]
+--         local dataset = datasets[s]
+--         featurevalue = dataset and dataset[1]
+--         if featurevalue and dataset[4] then
+--             local subtables = sequence.subtables
+--             for i=1,#subtables do
+--                 local lookupname = subtables[i]
+--                 local lookupcache = lookuphash[lookupname]
+--                 if lookupcache then
+--                     if dataset[4] == "rphf" then
+--                         if dataset[3] ~= 0 then --rphf is result of of chain
+--                         else
+--                             reph = lookupcache[0x0930] and lookupcache[0x0930][0x094D] and lookupcache[0x0930][0x094D]["ligature"]
+--                         end
+--                     end
+--                     if dataset[4] == "pref" and not pre_base_reordering_consonants then
+--                         for k, v in pairs(lookupcache[0x094D]) do
+--                             pre_base_reordering_consonants[k] = v and v["ligature"]    --ToDo: reph might also be result of chain
+--                         end
+--                     end
+--                     local current = start
+--                     while current ~= stop.next do
+--                         if dataset[4] == "locl" then locl[current] = lookupcache[current.char] end    --ToDo: locl might also be result of chain
+--                         if current ~= stop then
+--                             local c, n = locl[current] or current.char, locl[current.next] or current.next.char
+--                             if dataset[4] == "rphf" and lookupcache[c] and lookupcache[c][n] then    --above-base: rphf    Consonant + Halant
+--                             if current.next ~= stop and ( zwj[current.next.next.char] or zwnj[current.next.next.char] ) then    --ZWJ and ZWNJ prevent creation of reph
+--                                 current = current.next
+--                             elseif current == start then
+--                                 set_attribute(current,state,5)
+--                                 end
+--                                 current = current.next
+--                             end
+--                             if dataset[4] == "half" and lookupcache[c] and lookupcache[c][n] then    --half forms: half    Consonant + Halant
+--                                 if current.next ~= stop and zwnj[current.next.next.char] then    --ZWNJ prevent creation of half
+--                                     current = current.next
+--                                 else
+--                                     set_attribute(current,state,6)
+--                                     if not halfpos then halfpos = current end
+--                                 end
+--                                 current = current.next
+--                             end
+--                             if dataset[4] == "pref" and lookupcache[c] and lookupcache[c][n] then    --pre-base: pref    Halant + Consonant
+--                                 set_attribute(current,state,7)
+--                                 set_attribute(current.next,state,7)
+--                                 current = current.next
+--                             end
+--                             if dataset[4] == "blwf" and lookupcache[c] and lookupcache[c][n] then    --below-base: blwf    Halant + Consonant
+--                                 set_attribute(current,state,8)
+--                                 set_attribute(current.next,state,8)
+--                                 current = current.next
+--                                 subpos = current
+--                             end
+--                             if dataset[4] == "pstf" and lookupcache[c] and lookupcache[c][n] then    --post-base: pstf    Halant + Consonant
+--                                 set_attribute(current,state,9)
+--                                 set_attribute(current.next,state,9)
+--                                 current = current.next
+--                                 postpos = current
+--                             end
+--                         end
+--                         current = current.next
+--                     end
+--                 end
+--             end
+--         end
+--     end
+--
+--     lookuphash["dev2_reorder_matras"] = pre_mark
+--     lookuphash["dev2_reorder_reph"] = { [reph] = true }
+--     lookuphash["dev2_reorder_pre_base_reordering_consonants"] = pre_base_reordering_consonants or { }
+--     lookuphash["remove_joiners"] = { [0x200C] = true, [0x200D] = true }
+--
+--     local current, base, firstcons = start, nil, nil
+--     if has_attribute(start,state) == 5 then current = start.next.next end    -- if syllable starts with Ra + H and script has 'Reph' then exclude Reph from candidates for base consonants
+--
+--     if current ~= stop.next and nbsp[current.char] then    --Stand Alone cluster
+--         if current == stop then
+--             stop = stop.prev
+--             head = node.remove(head, current)
+--             node.free(current)
+--             return head, stop
+--         else
+--             base = current
+--             current = current.next
+--             if current ~= stop then
+--                 if nukta[current.char] then current = current.next end
+--                 if zwj[current.char] then
+--                     if current ~= stop and current.next ~= stop and halant[current.next.char] then
+--                         current = current.next
+--                         local tmp = current.next.next
+--                         local changestop = current.next == stop
+--                         current.next.next = nil
+--                         set_attribute(current,state,7)    --pref
+--                         current = nodes.handlers.characters(current)
+--                         set_attribute(current,state,8)    --blwf
+--                         current = nodes.handlers.characters(current)
+--                         set_attribute(current,state,9)    --pstf
+--                         current = nodes.handlers.characters(current)
+--                         unset_attribute(current,state)
+--                         if halant[current.char] then
+--                             current.next.next = tmp
+--                             local nc = node.copy(current)
+--                             current.char = dotted_circle
+--                             head = node.insert_after(head, current, nc)
+--                         else
+--                             current.next = tmp    -- (assumes that result of pref, blwf, or pstf consists of one node)
+--                             if changestop then stop = current end
+--                         end
+--                     end
+--                 end
+--             end
+--         end
+--     else    --not Stand Alone cluster
+--         while current ~= stop.next do    -- find base consonant
+--             if consonant[current.char] and not ( current ~= stop and halant[current.next.char] and current.next ~= stop and zwj[current.next.next.char] ) then
+--                 if not firstcons then firstcons = current end
+--                 if not ( has_attribute(current, state) == 7 or has_attribute(current, state) == 8 or has_attribute(current, state) == 9 ) then base = current end    --check whether consonant has below-base or post-base form or is pre-base reordering Ra
+--             end
+--             current = current.next
+--         end
+--         if not base then
+--             base = firstcons
+--         end
+--     end
+--
+--     if not base then
+--         if has_attribute(start, state) == 5 then unset_attribute(start, state) end
+--         return head, stop
+--     else
+--         if has_attribute(base, state) then unset_attribute(base, state) end
+--         basepos = base
+--     end
+--     if not halfpos then halfpos = base end
+--     if not subpos then subpos = base end
+--     if not postpos then postpos = subpos or base end
+--
+--     --Matra characters are classified and reordered by which consonant in a conjunct they have affinity for
+--     local moved = { }
+--     current = start
+--     while current ~= stop.next do
+--         local char, target, cn = locl[current] or current.char, nil, current.next
+--         if not moved[current] and dependent_vowel[char] then
+--             if pre_mark[char] then            -- Before first half form in the syllable
+--                 moved[current] = true
+--                 if current.prev then current.prev.next = current.next end
+--                 if current.next then current.next.prev = current.prev end
+--                 if current == stop then stop = current.prev end
+--                 if halfpos == start then
+--                     if head == start then head = current end
+--                     start = current
+--                 end
+--                 if halfpos.prev then halfpos.prev.next = current end
+--                 current.prev = halfpos.prev
+--                 halfpos.prev = current
+--                 current.next = halfpos
+--                 halfpos = current
+--             elseif above_mark[char] then    -- After main consonant
+--                 target = basepos
+--                 if subpos == basepos then subpos = current end
+--                 if postpos == basepos then postpos = current end
+--                 basepos = current
+--             elseif below_mark[char] then    -- After subjoined consonants
+--                 target = subpos
+--                 if postpos == subpos then postpos = current end
+--                 subpos = current
+--             elseif post_mark[char] then    -- After post-form consonant
+--                 target = postpos
+--                 postpos = current
+--             end
+--             if ( above_mark[char] or below_mark[char] or post_mark[char] ) and current.prev ~= target then
+--                 if current.prev then current.prev.next = current.next end
+--                 if current.next then current.next.prev = current.prev end
+--                 if current == stop then stop = current.prev end
+--                 if target.next then target.next.prev = current end
+--                 current.next = target.next
+--                 target.next = current
+--                 current.prev = target
+--             end
+--         end
+--         current = cn
+--     end
+--
+--     --Reorder marks to canonical order: Adjacent nukta and halant or nukta and vedic sign are always repositioned if necessary, so that the nukta is first.
+--     local current, c = start, nil
+--     while current ~= stop do
+--         if halant[current.char] or stress_tone_mark[current.char] then
+--             if not c then c = current end
+--         else
+--             c = nil
+--         end
+--         if c and nukta[current.next.char] then
+--             if head == c then head = current.next end
+--             if stop == current.next then stop = current end
+--             if c.prev then c.prev.next = current.next end
+--             current.next.prev = c.prev
+--             current.next = current.next.next
+--             if current.next.next then current.next.next.prev = current end
+--             c.prev = current.next
+--             current.next.next = c
+--         end
+--         if stop == current then break end
+--         current = current.next
+--     end
+--
+--     if nbsp[base.char] then
+--         head = node.remove(head, base)
+--         node.free(base)
+--     end
+--
+--     return head, stop
+-- end
+--
+-- function fonts.analyzers.methods.deva(head,font,attr)
+-- local orighead = head
+--     local current, start, done = head, true, false
+--     while current do
+--         if current.id == glyph and current.subtype<256 and current.font == font then
+--             done = true
+--             local syllablestart, syllableend = current, nil
+--
+--             local c = current    --Checking Stand Alone cluster (this behavior is copied from dev2)
+--             if ra[c.char] and c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] and c.next.next and c.next.next.id == glyph and c.next.next.subtype<256 and c.next.next.font == font then c = c.next.next end
+--             if nbsp[c.char] and ( not current.prev or current.prev.id ~= glyph or current.prev.subtype>=256 or current.prev.font ~= font or
+--                                         ( not consonant[current.prev.char] and not independent_vowel[current.prev.char] and not dependent_vowel[current.prev.char] and
+--                                         not vowel_modifier[current.prev.char] and not stress_tone_mark[current.prev.char] and not nukta[current.prev.char] and not halant[current.prev.char] )
+--                                     ) then    --Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[<ZWJ|ZWNJ>]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end
+--                 local n = c.next
+--                 if n and n.id == glyph and n.subtype<256 and n.font == font then
+--                     local ni = n.next
+--                     if ( zwj[n.char] or zwnj[n.char] ) and ni and ni.id == glyph and ni.subtype<256 and ni.font == font then n = ni ni = ni.next end
+--                     if halant[n.char] and ni and ni.id == glyph and ni.subtype<256 and ni.font == font and consonant[ni.char] then c = ni end
+--                 end
+--                 while c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] do c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 current = c.next
+--                 syllableend = c
+--                 if syllablestart ~= syllableend then
+--                     head, current = deva_reorder(head, syllablestart,syllableend,font,attr)
+--                     current = current.next
+--                 end
+--             elseif consonant[current.char] then    -- syllable containing consonant
+--                 prevc = true
+--                 while prevc do
+--                     prevc = false
+--                     local n = current.next
+--                     if n and n.id == glyph and n.subtype<256 and n.font == font and nukta[n.char] then n = n.next end
+--                     if n and n.id == glyph and n.subtype<256 and n.font == font and halant[n.char] then
+--                         local n = n.next
+--                         if n and n.id == glyph and n.subtype<256 and n.font == font and ( zwj[n.char] or zwnj[n.char] ) then n = n.next end
+--                         if n and n.id == glyph and n.subtype<256 and n.font == font and consonant[n.char] then
+--                             prevc = true
+--                             current = n
+--                         end
+--                     end
+--                 end
+--                 if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == font and nukta[current.next.char] then current = current.next end    -- nukta (not specified in Microsft Devanagari OpenType specification)
+--                 syllableend = current
+--                 current = current.next
+--                 if current and current.id == glyph and current.subtype<256 and current.font == font and halant[current.char] then    -- syllable containing consonant without vowels: {C + [Nukta] + H} + C + H
+--                     if current.next and current.next.id == glyph and current.next.subtype<256 and current.next.font == font and ( zwj[current.next.char] or zwnj[current.next.char] ) then current = current.next end
+--                     syllableend = current
+--                     current = current.next
+--                 else    -- syllable containing consonant with vowels: {C + [Nukta] + H} + C + [M] + [VM] + [SM]
+--                     if current and current.id == glyph and current.subtype<256 and current.font == font and dependent_vowel[current.char] then
+--                         syllableend = current
+--                         current = current.next
+--                     end
+--                     if current and current.id == glyph and current.subtype<256 and current.font == font and vowel_modifier[current.char] then
+--                         syllableend = current
+--                         current = current.next
+--                     end
+--                     if current and current.id == glyph and current.subtype<256 and current.font == font and stress_tone_mark[current.char] then
+--                         syllableend = current
+--                         current = current.next
+--                     end
+--                 end
+--                 if syllablestart ~= syllableend then
+--                     head, current = deva_reorder(head,syllablestart,syllableend,font,attr)
+--                     current = current.next
+--                 end
+--             elseif current.id == glyph and current.subtype<256 and current.font == font and independent_vowel[current.char] then -- syllable without consonants: VO + [VM] + [SM]
+--                 syllableend = current
+--                 current = current.next
+--                 if current and current.id == glyph and current.subtype<256 and current.font == font and vowel_modifier[current.char] then
+--                     syllableend = current
+--                     current = current.next
+--                 end
+--                 if current and current.id == glyph and current.subtype<256 and current.font == font and stress_tone_mark[current.char] then
+--                     syllableend = current
+--                     current = current.next
+--                 end
+--             else    -- Syntax error
+--                 if pre_mark[current.char] or above_mark[current.char] or below_mark[current.char] or post_mark[current.char] then
+--                     local n = node.copy(current)
+--                     if pre_mark[current.char] then
+--                         n.char = dotted_circle
+--                     else
+--                         current.char = dotted_circle
+--                     end
+--                     head, current = node.insert_after(head, current, n)
+--                 end
+--                 current = current.next
+--             end
+--         else
+--             current = current.next
+--         end
+--         start = false
+--     end
+--
+--     return head, done
+-- end
+--
+-- function fonts.analyzers.methods.dev2(head,font,attr)
+--     local current, start, done, syl_nr = head, true, false, 0
+--     while current do
+--         local syllablestart, syllableend = nil, nil
+--         if current.id == glyph and current.subtype<256 and current.font == font then
+--             syllablestart = current
+--             done = true
+--             local c, n = current, current.next
+--             if ra[current.char] and n and n.id == glyph and n.subtype<256 and n.font == font and halant[n.char] and n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font then c = n.next end
+--             if independent_vowel[c.char] then --Vowel-based syllable: [Ra+H]+V+[N]+[<[<ZWJ|ZWNJ>]+H+C|ZWJ+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
+--                 n = c.next
+--                 local ni, nii = nil, nil
+--                 if n and n.id == glyph and n.subtype<256 and n.font == font and nukta[n.char] then n = n.next end
+--                 if n and n.id == glyph and n.subtype<256 and n.font == font then local ni = n.next end
+--                 if ni and ni.id == glyph and ni.subtype<256 and ni.font == font and ni.next and ni.next.id == glyph and ni.next.subtype<256 and ni.next.font == font then
+--                     nii = ni.next
+--                     if zwj[ni.char] and consonant[nii.char] then
+--                         c = nii
+--                     elseif (zwj[ni.char] or zwnj[ni.char]) and halant[nii.char] and nii.next and nii.next.id == glyph and nii.next.subtype<256 and nii.next.font == font and consonant[nii.next.char] then
+--                         c = nii.next
+--                     end
+--                 end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 current = c
+--                 syllableend = c
+--             elseif nbsp[c.char] and ( not current.prev or current.prev.id ~= glyph or current.prev.subtype>=256 or current.prev.font ~= font or
+--                                         ( not consonant[current.prev.char] and not independent_vowel[current.prev.char] and not dependent_vowel[current.prev.char] and
+--                                         not vowel_modifier[current.prev.char] and not stress_tone_mark[current.prev.char] and not nukta[current.prev.char] and not halant[current.prev.char] )
+--                                     ) then    --Stand Alone cluster (at the start of the word only): #[Ra+H]+NBSP+[N]+[<[<ZWJ|ZWNJ>]+H+C>]+[{M}+[N]+[H]]+[SM]+[(VD)]
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end
+--                 n = c.next
+--                 if n and n.id == glyph and n.subtype<256 and n.font == font then
+--                     local ni = n.next
+--                     if ( zwj[n.char] or zwnj[n.char] ) and ni and ni.id == glyph and ni.subtype<256 and ni.font == font then n = ni ni = ni.next end
+--                     if halant[n.char] and ni and ni.id == glyph and ni.subtype<256 and ni.font == font and consonant[ni.char] then c = ni end
+--                 end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 current = c
+--                 syllableend = c
+--             elseif consonant[current.char] then    --Consonant syllable: {C+[N]+<H+[<ZWNJ|ZWJ>]|<ZWNJ|ZWJ>+H>} + C+[N]+[A] + [< H+[<ZWNJ|ZWJ>] | {M}+[N]+[H]>]+[SM]+[(VD)]
+--                 c = current
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end
+--                 n = c
+--                 while n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and ( halant[n.next.char] or zwnj[n.next.char] or zwj[n.next.char] ) do
+--                     if halant[n.next.char] then
+--                         n = n.next
+--                         if n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and ( zwnj[n.next.char] or zwj[n.next.char] ) then n = n.next end
+--                     else
+--                         if n.next.next and n.next.next.id == glyph and n.next.next.subtype<256 and n.next.next.font == font and halant[n.next.next.char] then n = n.next.next end
+--                     end
+--                     if n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and consonant[n.next.char] then
+--                         n = n.next
+--                         if n.next and n.next.id == glyph and n.next.subtype<256 and n.next.font == font and nukta[n.next.char] then n = n.next end
+--                         c = n
+--                     else
+--                         break
+--                     end
+--                 end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and anudatta[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then
+--                     c = c.next
+--                     if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and ( zwnj[c.next.char] or zwj[c.next.char] ) then c = c.next end
+--                 else
+--                     if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and dependent_vowel[c.next.char] then c = c.next end
+--                     if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and nukta[c.next.char] then c = c.next end
+--                     if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and halant[c.next.char] then c = c.next end
+--                 end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and vowel_modifier[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 if c.next and c.next.id == glyph and c.next.subtype<256 and c.next.font == font and stress_tone_mark[c.next.char] then c = c.next end
+--                 current = c
+--                 syllableend = c
+--             end
+--         end
+--
+--         if syllableend then
+--             syl_nr = syl_nr + 1
+--             c = syllablestart
+--             while c ~= syllableend.next do
+--                 set_attribute(c,sylnr,syl_nr)
+--                 c = c.next
+--             end
+--         end
+--         if syllableend and syllablestart ~= syllableend then
+--             head, current = dev2_reorder(head,syllablestart,syllableend,font,attr)
+--         end
+--
+--         if not syllableend and not has_attribute(current, state) and current.id == glyph and current.subtype<256 and current.font == font then    -- Syntax error
+--             if pre_mark[current.char] or above_mark[current.char] or below_mark[current.char] or post_mark[current.char] then
+--                 local n = node.copy(current)
+--                 if pre_mark[current.char] then
+--                     n.char = dotted_circle
+--                 else
+--                     current.char = dotted_circle
+--                 end
+--                 head, current = node.insert_after(head, current, n)
+--             end
+--         end
+--
+--         start = false
+--         current = current.next
+--     end
+--
+--     return head, done
+-- end
+--
+-- function otf.handlers.dev2_reorder_matras(start,kind,lookupname,replacement)
+--     return dev2_reorder_matras(start,kind,lookupname,replacement)
+-- end
+--
+-- function otf.handlers.dev2_reorder_reph(start,kind,lookupname,replacement)
+--     return dev2_reorder_reph(start,kind,lookupname,replacement)
+-- end
+--
+-- function otf.handlers.dev2_reorder_pre_base_reordering_consonants(start,kind,lookupname,replacement)
+--     return dev2_reorder_pre_base_reordering_consonants(start,kind,lookupname,replacement)
+-- end
+--
+-- function otf.handlers.remove_joiners(start,kind,lookupname,replacement)
+--     return remove_joiners(start,kind,lookupname,replacement)
+-- end
diff --git a/tex/context/base/font-odv.lua b/tex/context/base/font-odv.lua
index baacc3fce..c4def223e 100644
--- a/tex/context/base/font-odv.lua
+++ b/tex/context/base/font-odv.lua
@@ -6,6 +6,14 @@ if not modules then modules = { } end modules ['font-odv'] = {
     license   = "see context related readme files"
 }
 
+if true then
+    -- Not yet as there is some change in headnode handling as needed
+    -- for this mechanism and I won't adapt this code because soon there's
+    -- another adaption coming (already in my private tree) but that need
+    -- a newer luatex.
+    return
+end
+
 -- Kai: we're leaking nodes (happens when assigning start nodes behind start, also
 -- in the original code) so this needs to be sorted out. As I touched nearly all code,
 -- reshuffled, etc. etc. (imagine how much can get messed up in nearly a week work) it
diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua
index 782e2d194..80a17aaca 100644
--- a/tex/context/base/font-otf.lua
+++ b/tex/context/base/font-otf.lua
@@ -47,7 +47,7 @@ local otf                = fonts.handlers.otf
 
 otf.glists               = { "gsub", "gpos" }
 
-otf.version              = 2.740 -- beware: also sync font-mis.lua
+otf.version              = 2.741 -- beware: also sync font-mis.lua
 otf.cache                = containers.define("fonts", "otf", otf.version, true)
 
 local fontdata           = fonts.hashes.identifiers
@@ -1236,7 +1236,7 @@ actions["reorganize lookups"] = function(data,filename,raw) -- we could check fo
                             for i=1,#current do
                                 current[i] = current_class[current[i]] or { }
                                 if lookups and not lookups[i] then
-                                    lookups[i] = false -- e.g. we can have two lookups and one replacement
+                                    lookups[i] = "" -- (was: false) e.g. we can have two lookups and one replacement
                                 end
                             end
                             rule.current = t_hashed(current,t_h_cache)
diff --git a/tex/context/base/font-otp.lua b/tex/context/base/font-otp.lua
index 62368adc0..8a37c5cdf 100644
--- a/tex/context/base/font-otp.lua
+++ b/tex/context/base/font-otp.lua
@@ -79,6 +79,35 @@ local function tabstr_flat(t)
     end
 end
 
+local function tabstr_mixed(t) -- indexed
+    local s = { }
+    local n = #t
+    if n == 0 then
+        return ""
+    elseif n == 1 then
+        local k = t[1]
+        if k == true then
+            return "++" -- we need to distinguish from "true"
+        elseif k == false then
+            return "--" -- we need to distinguish from "false"
+        else
+            return tostring(k) -- number or string
+        end
+    else
+        for i=1,n do
+            local k = t[i]
+            if k == true then
+                s[i] = "++" -- we need to distinguish from "true"
+            elseif k == false then
+                s[i] = "--" -- we need to distinguish from "false"
+            else
+                s[i] = k -- number or string
+            end
+        end
+        return concat(s,",")
+    end
+end
+
 local function tabstr_boolean(t)
     local s = { }
     local n = 0
@@ -110,7 +139,6 @@ end
 --     return b
 -- end
 
-
 local function packdata(data)
     if data then
      -- stripdata(data)
@@ -173,6 +201,21 @@ local function packdata(data)
                 return nt
             end
         end
+        local function pack_mixed(v)
+            local tag = tabstr_mixed(v)
+-- print(">>>",tag)
+            local ht = h[tag]
+            if ht then
+                c[ht] = c[ht] + 1
+                return ht
+            else
+                nt = nt + 1
+                t[nt] = v
+                h[tag] = nt
+                c[nt] = 1
+                return nt
+            end
+        end
         local function pack_final(v)
             -- v == number
             if c[v] <= criterium then
@@ -234,9 +277,9 @@ local function packdata(data)
         end
         local function packers(pass)
             if pass == 1 then
-                return pack_normal, pack_indexed, pack_flat, pack_boolean
+                return pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed
             else
-                return pack_final, pack_final, pack_final, pack_final
+                return pack_final, pack_final, pack_final, pack_final, pack_final
             end
         end
         local resources = data.resources
@@ -245,7 +288,7 @@ local function packdata(data)
             if trace_packing then
                 report_otf("start packing: stage 1, pass %s",pass)
             end
-            local pack_normal, pack_indexed, pack_flat, pack_boolean = packers(pass)
+            local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass)
             for unicode, description in next, data.descriptions do
                 local boundingbox = description.boundingbox
                 if boundingbox then
@@ -324,8 +367,9 @@ local function packdata(data)
                             local r = rule.before       if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
                             local r = rule.after        if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
                             local r = rule.current      if r then for i=1,#r do r[i] = pack_boolean(r[i]) end end
-                            local r = rule.replacements if r then rule.replacements  = pack_flat   (r)    end
-                            local r = rule.lookups      if r then rule.lookups       = pack_indexed(r)    end
+                            local r = rule.replacements if r then rule.replacements  = pack_flat   (r)    end -- can have holes
+                         -- local r = rule.lookups      if r then rule.lookups       = pack_mixed  (r)    end -- can have false
+                            local r = rule.lookups      if r then rule.lookups       = pack_indexed(r)    end -- can have ""
                         end
                     end
                 end
@@ -394,7 +438,7 @@ local function packdata(data)
                 if trace_packing then
                     report_otf("start packing: stage 2, pass %s",pass)
                 end
-                local pack_normal, pack_indexed, pack_flat, pack_boolean = packers(pass)
+                local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass)
                 for unicode, description in next, data.descriptions do
                     local kerns = description.kerns
                     if kerns then
@@ -444,7 +488,7 @@ local function packdata(data)
             end
 
             for pass=1,2 do
-                local pack_normal, pack_indexed, pack_flat, pack_boolean = packers(pass)
+                local pack_normal, pack_indexed, pack_flat, pack_boolean, pack_mixed = packers(pass)
                 for unicode, description in next, data.descriptions do
                     local slookups = description.slookups
                     if slookups then
diff --git a/tex/context/base/mlib-pdf.mkiv b/tex/context/base/mlib-pdf.mkiv
index 4deb26203..f000e9a10 100644
--- a/tex/context/base/mlib-pdf.mkiv
+++ b/tex/context/base/mlib-pdf.mkiv
@@ -49,7 +49,7 @@
 
 \def\repositionMPboxindeed
   {\setbox\MPbox\hbox\bgroup
-     \hskip-\MPllx
+     \kern-\MPllx
      \raise-\MPlly
      \box\MPbox
    \egroup}
diff --git a/tex/context/base/pack-rul.mkiv b/tex/context/base/pack-rul.mkiv
index 33eaacff3..6bcc4da7f 100644
--- a/tex/context/base/pack-rul.mkiv
+++ b/tex/context/base/pack-rul.mkiv
@@ -1765,7 +1765,7 @@
 \newdimen\d_framed_toffset
 \newdimen\d_framed_boffset
 
-\def\pack_framed_check_extra_offsets
+\def\pack_framed_check_extra_offsets % we could check h and v indepently
   {\setfalse\c_framed_has_extra_offset
    \d_framed_loffset\framedparameter\c!loffset\relax
    \d_framed_roffset\framedparameter\c!roffset\relax
@@ -2236,9 +2236,9 @@
    \fi
    \unskip
    \setbox\scratchbox\hbox
-     {\hskip\scratchoffset
+     {\kern\scratchoffset
       \vrule\s!height\dimen\scratchheight\s!depth\dimen\scratchdepth\s!width\d_framed_linewidth
-      \hskip\scratchoffset}%
+      \kern\scratchoffset}%
    \ht\scratchbox\strutht
    \dp\scratchbox\strutdp
    \box\scratchbox
@@ -2707,19 +2707,19 @@
      \scratchbottomoffset\framedcontentparameter\c!bottomoffset\relax
      \advance\hsize\dimexpr-\scratchleftoffset-\scratchrightoffset \relax
      \advance\vsize\dimexpr-\scratchtopoffset -\scratchbottomoffset\relax
-     \hskip\scratchleftoffset
+     \kern\scratchleftoffset
      \vbox\bgroup
-     \vskip\scratchtopoffset
-     \vbox\bgroup
-     \forgetall
-     \blank[\v!disable]}
+       \vskip\scratchtopoffset
+         \vbox\bgroup
+           \forgetall
+           \blank[\v!disable]}
 
 \def\pack_framed_stop_content_indeed
-  {\removelastskip
-   \egroup
-   \vskip\scratchbottomoffset
-   \egroup
-   \hskip\scratchrightoffset
+          {\removelastskip
+        \egroup
+        \vskip\scratchbottomoffset
+     \egroup
+     \kern\scratchrightoffset
    \egroup
    \doif{\framedcontentparameter\c!width}\v!fit
      {\letframedcontentparameter\c!width\v!fixed}% no shapebox
diff --git a/tex/context/base/s-fnt-20.mkiv b/tex/context/base/s-fnt-20.mkiv
index 54ed419c0..584043099 100644
--- a/tex/context/base/s-fnt-20.mkiv
+++ b/tex/context/base/s-fnt-20.mkiv
@@ -126,16 +126,17 @@
 \startsetups otftracker
     \setupbodyfont[tt,10pt]
     \starttext
-        \chapter{\getvariable{otftracker}{title}}
-        \doifsomething {\getvariable{otftracker}{figure}} {
-            \startlinecorrection
-                \externalfigure[\getvariable{otftracker}{figure}][maxwidth=\hsize,frame=on]
-            \stoplinecorrection
-        }
-        \showotfcomposition
-            {\getvariable{otftracker}{font}*\getvariable{otftracker}{features} at \getvariable{otftracker}{size}}
-            {\getvariable{otftracker}{direction}}
-            {\getvariable{otftracker}{sample}}
+        \normalexpanded{\startchapter[title={\getvariable{otftracker}{title}}]}
+            \doifsomething {\getvariable{otftracker}{figure}} {
+                \startlinecorrection
+                    \externalfigure[\getvariable{otftracker}{figure}][maxwidth=\hsize,frame=on]
+                \stoplinecorrection
+            }
+            \showotfcomposition
+                {\getvariable{otftracker}{font}*\getvariable{otftracker}{features} at \getvariable{otftracker}{size}}
+                {\getvariable{otftracker}{direction}}
+                {\getvariable{otftracker}{sample}}
+        \stopchapter
     \stoptext
 \stopsetups
 
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 9db601262..7d3baa7f4 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 06121b179..d5542307f 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-ref.lua b/tex/context/base/strc-ref.lua
index e5ce5973b..7f37f20ff 100644
--- a/tex/context/base/strc-ref.lua
+++ b/tex/context/base/strc-ref.lua
@@ -28,6 +28,7 @@ local trace_referencing  = false  trackers.register("structures.referencing",
 local trace_analyzing    = false  trackers.register("structures.referencing.analyzing",   function(v) trace_analyzing   = v end)
 local trace_identifying  = false  trackers.register("structures.referencing.identifying", function(v) trace_identifying = v end)
 local trace_importing    = false  trackers.register("structures.referencing.importing",   function(v) trace_importing   = v end)
+local trace_empty        = false  trackers.register("structures.referencing.empty",       function(v) trace_empty       = v end)
 
 local check_duplicates   = true
 
@@ -36,9 +37,10 @@ directives.register("structures.referencing.checkduplicates", function(v)
 end)
 
 local report_references  = logs.reporter("references")
-local report_unknown     = logs.reporter("unknown")
+local report_unknown     = logs.reporter("references","unknown")
 local report_identifying = logs.reporter("references","identifying")
 local report_importing   = logs.reporter("references","importing")
+local report_empty       = logs.reporter("references","empty")
 
 local variables          = interfaces.variables
 local constants          = interfaces.constants
@@ -1865,10 +1867,10 @@ function filters.section.number(data,what,prefixspec)
             end
         elseif numberdata.hidenumber then
             local references = data.references
-            if references then
-                report_unknown("reference %q has a hidden number",references.reference or "?")
+            if trace_empty then
+                report_empty("reference %q has a hidden number",references.reference or "?")
+                context.emptyreference() -- maybe an option
             end
-            context.wrongreference() -- maybe an option
         else
             sections.typesetnumber(numberdata,"number",prefixspec,numberdata)
         end
diff --git a/tex/context/base/strc-ref.mkvi b/tex/context/base/strc-ref.mkvi
index e69df8d7b..3a357f342 100644
--- a/tex/context/base/strc-ref.mkvi
+++ b/tex/context/base/strc-ref.mkvi
@@ -603,7 +603,7 @@
 %D text).
 
 \def\dummyreference{{\tttf ??}}
-\def\wrongreference{{\tttf !!}}
+\def\emptyreference{{\tttf !!}}
 
 %D To prevent repetitive messages concerning a reference
 %D being defined, we set such an unknown reference to an empty
diff --git a/tex/context/base/supp-box.mkiv b/tex/context/base/supp-box.mkiv
index 8ab205d4c..25c7764f8 100644
--- a/tex/context/base/supp-box.mkiv
+++ b/tex/context/base/supp-box.mkiv
@@ -1799,7 +1799,7 @@
       \ht\hhbox\strutht
       \dp\hhbox\strutdp
       \ifzeropt\hhboxindent\else % \ifdim\hhboxindent=\zeropoint\else
-        \setbox\hhbox\hbox{\hskip-\hhboxindent\box\hhbox}%
+        \setbox\hhbox\hbox{\kern-\hhboxindent\box\hhbox}%
         \hhboxindent\zeropoint
       \fi
       \global\lasthhboxwidth\wd\hhbox
@@ -2229,7 +2229,7 @@
   {\global\boxhdisplacement\boxoffset
    \global\boxvdisplacement.5\ht\nextbox
    \global\advance\boxvdisplacement-.5\dp\nextbox
-   \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_leftbox_finish
@@ -2237,21 +2237,21 @@
    \global\advance\boxhdisplacement-\boxoffset
    \global\boxvdisplacement.5\ht\nextbox
    \global\advance\boxvdisplacement-.5\dp\nextbox
-   \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_topbox_finish
   {\global\boxhdisplacement-.5\wd\nextbox
    \global\boxvdisplacement-\dp\nextbox
    \global\advance\boxvdisplacement-\boxoffset
-   \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_bottombox_finish
   {\global\boxhdisplacement-.5\wd\nextbox
    \global\boxvdisplacement\ht\nextbox
    \global\advance\boxvdisplacement\boxoffset
-   \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_lefttopbox_finish
@@ -2259,14 +2259,14 @@
    \global\advance\boxhdisplacement-\boxoffset
    \global\boxvdisplacement-\dp\nextbox
    \global\advance\boxvdisplacement-\boxoffset
-   \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_righttopbox_finish
   {\global\boxhdisplacement\boxoffset
    \global\boxvdisplacement-\dp\nextbox
    \global\advance\boxvdisplacement-\boxoffset
-   \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_leftbottombox_finish
@@ -2274,14 +2274,14 @@
    \global\advance\boxhdisplacement-\boxoffset
    \global\boxvdisplacement\ht\nextbox
    \global\advance\boxvdisplacement\boxoffset
-   \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_rightbottombox_finish
   {\global\boxhdisplacement\boxoffset
    \global\boxvdisplacement\ht\nextbox
    \global\advance\boxvdisplacement\boxoffset
-   \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox
    \egroup}
 
 \unexpanded\def\middlebox        {\hbox\bgroup\dowithnextboxcs\syst_boxes_middlebox_finish        \placedbox}
@@ -2293,27 +2293,27 @@
   {\global\boxhdisplacement-.5\wd\nextbox
    \global\boxvdisplacement.5\ht\nextbox
    \global\advance\boxvdisplacement-.5\dp\nextbox
-   \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\lower\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_baselinemiddlebox_finish
   {\global\boxhdisplacement-.5\wd\nextbox
    \global\advance\boxhdisplacement-\boxoffset
    \global\boxvdisplacement-\boxoffset
-   \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_baselineleftbox_finish
   {\global\boxhdisplacement-\wd\nextbox
    \global\advance\boxhdisplacement-\boxoffset
    \global\boxvdisplacement-\boxoffset
-   \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
    \egroup}
 
 \def\syst_boxes_baselinerightbox_finish
   {\global\boxhdisplacement\boxoffset
    \global\boxvdisplacement-\boxoffset
-   \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
+   \boxcursor\kern\boxhdisplacement\raise-\boxvdisplacement\box\nextbox
    \egroup}
 
 %D \macros
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 7b2b0a282..5cb8bcf49 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  : 01/22/13 18:33:20
+-- merge date  : 01/23/13 14:04:19
 
 do -- begin closure to overcome local limits and interference
 
@@ -5793,7 +5793,7 @@ local otf                = fonts.handlers.otf
 
 otf.glists               = { "gsub", "gpos" }
 
-otf.version              = 2.740 -- beware: also sync font-mis.lua
+otf.version              = 2.741 -- beware: also sync font-mis.lua
 otf.cache                = containers.define("fonts", "otf", otf.version, true)
 
 local fontdata           = fonts.hashes.identifiers
@@ -6982,7 +6982,7 @@ actions["reorganize lookups"] = function(data,filename,raw) -- we could check fo
                             for i=1,#current do
                                 current[i] = current_class[current[i]] or { }
                                 if lookups and not lookups[i] then
-                                    lookups[i] = false -- e.g. we can have two lookups and one replacement
+                                    lookups[i] = "" -- (was: false) e.g. we can have two lookups and one replacement
                                 end
                             end
                             rule.current = t_hashed(current,t_h_cache)
@@ -8493,6 +8493,7 @@ if not modules then modules = { } end modules ['node-inj'] = {
 -- that can be of help. Some optimizations can go away when we have faster machines.
 
 local next = next
+local utfchar = utf.char
 
 local trace_injections = false  trackers.register("nodes.injections", function(v) trace_injections = v end)
 
@@ -8626,7 +8627,8 @@ local function trace(head)
             local md = n[a_markdone]
             local cb = n[a_cursbase]
             local cc = n[a_curscurs]
-            report_injections("char U+%05X, font=%s",n.char,n.font)
+            local char = n.char
+            report_injections("char U+%05X, font %s, glyph %s",char,n.font,utfchar(char))
             if kp then
                 local k = kerns[kp]
                 if k[3] then
@@ -9585,8 +9587,7 @@ local onetimemessage     = fonts.loggers.onetimemessage
 
 otf.defaultnodealternate = "none" -- first last
 
--- we share some vars here, after all, we have no nested lookups and
--- less code
+-- we share some vars here, after all, we have no nested lookups and less code
 
 local tfmdata             = false
 local characters          = false
@@ -9814,12 +9815,12 @@ local function toligature(kind,lookupname,start,stop,char,markflag,discfound) --
     return base
 end
 
-function handlers.gsub_single(start,kind,lookupname,replacement)
+function handlers.gsub_single(head,start,kind,lookupname,replacement)
     if trace_singles then
         logprocess("%s: replacing %s by single %s",pref(kind,lookupname),gref(start.char),gref(replacement))
     end
     start.char = replacement
-    return start, true
+    return head, start, true
 end
 
 local function get_alternative_glyph(start,alternatives,value)
@@ -9859,7 +9860,7 @@ local function get_alternative_glyph(start,alternatives,value)
     return choice
 end
 
-local function multiple_glyphs(start,multiple) -- marks ?
+local function multiple_glyphs(head,start,multiple) -- marks ?
     local nofmultiples = #multiple
     if nofmultiples > 0 then
         start.char = multiple[1]
@@ -9877,16 +9878,16 @@ local function multiple_glyphs(start,multiple) -- marks ?
                 start = n
             end
         end
-        return start, true
+        return head, start, true
     else
         if trace_multiples then
             logprocess("no multiple for %s",gref(start.char))
         end
-        return start, false
+        return head, start, false
     end
 end
 
-function handlers.gsub_alternate(start,kind,lookupname,alternative,sequence)
+function handlers.gsub_alternate(head,start,kind,lookupname,alternative,sequence)
     local value  = featurevalue == true and tfmdata.shared.features[kind] or featurevalue
     local choice = get_alternative_glyph(start,alternative,value)
     if choice then
@@ -9899,17 +9900,17 @@ function handlers.gsub_alternate(start,kind,lookupname,alternative,sequence)
             logwarning("%s: no variant %s for %s",pref(kind,lookupname),tostring(value),gref(start.char))
         end
     end
-    return start, true
+    return head, start, true
 end
 
-function handlers.gsub_multiple(start,kind,lookupname,multiple)
+function handlers.gsub_multiple(head,start,kind,lookupname,multiple)
     if trace_multiples then
         logprocess("%s: replacing %s by multiple %s",pref(kind,lookupname),gref(start.char),gref(multiple))
     end
-    return multiple_glyphs(start,multiple)
+    return multiple_glyphs(head,start,multiple)
 end
 
-function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence)
+function handlers.gsub_ligature(head,start,kind,lookupname,ligature,sequence)
     local s, stop, discfound = start.next, nil, false
     local startchar = start.char
     if marks[startchar] then
@@ -9938,7 +9939,7 @@ function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence)
                 else
                     start = markstoligature(kind,lookupname,start,stop,lig)
                 end
-                return start, true
+                return head, start, true
             else
                 -- ok, goto next lookup
             end
@@ -9982,13 +9983,13 @@ function handlers.gsub_ligature(start,kind,lookupname,ligature,sequence)
                 else
                     start = toligature(kind,lookupname,start,stop,lig,skipmark,discfound)
                 end
-                return start, true
+                return head, start, true
             else
                 -- ok, goto next lookup
             end
         end
     end
-    return start, false
+    return head, start, false
 end
 
 --[[ldx--
@@ -9996,7 +9997,7 @@ end
 we need to explicitly test for basechar, baselig and basemark entries.</p>
 --ldx]]--
 
-function handlers.gpos_mark2base(start,kind,lookupname,markanchors,sequence)
+function handlers.gpos_mark2base(head,start,kind,lookupname,markanchors,sequence)
     local markchar = start.char
     if marks[markchar] then
         local base = start.prev -- [glyph] [start=mark]
@@ -10014,7 +10015,7 @@ function handlers.gpos_mark2base(start,kind,lookupname,markanchors,sequence)
                         if trace_bugs then
                             logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
                         end
-                        return start, false
+                        return head, start, false
                     end
                 end
             end
@@ -10035,7 +10036,7 @@ function handlers.gpos_mark2base(start,kind,lookupname,markanchors,sequence)
                                     logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%s,%s)",
                                         pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
                                 end
-                                return start, true
+                                return head, start, true
                             end
                         end
                     end
@@ -10053,10 +10054,10 @@ function handlers.gpos_mark2base(start,kind,lookupname,markanchors,sequence)
     elseif trace_bugs then
         logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
     end
-    return start, false
+    return head, start, false
 end
 
-function handlers.gpos_mark2ligature(start,kind,lookupname,markanchors,sequence)
+function handlers.gpos_mark2ligature(head,start,kind,lookupname,markanchors,sequence)
     -- check chainpos variant
     local markchar = start.char
     if marks[markchar] then
@@ -10075,7 +10076,7 @@ function handlers.gpos_mark2ligature(start,kind,lookupname,markanchors,sequence)
                         if trace_bugs then
                             logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
                         end
-                        return start, false
+                        return head, start, false
                     end
                 end
             end
@@ -10098,7 +10099,7 @@ function handlers.gpos_mark2ligature(start,kind,lookupname,markanchors,sequence)
                                             logprocess("%s, anchor %s, index %s, bound %s: anchoring mark %s to baselig %s at index %s => (%s,%s)",
                                                 pref(kind,lookupname),anchor,index,bound,gref(markchar),gref(basechar),index,dx,dy)
                                         end
-                                        return start, true
+                                        return head, start, true
                                     end
                                 end
                             end
@@ -10118,10 +10119,10 @@ function handlers.gpos_mark2ligature(start,kind,lookupname,markanchors,sequence)
     elseif trace_bugs then
         logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
     end
-    return start, false
+    return head, start, false
 end
 
-function handlers.gpos_mark2mark(start,kind,lookupname,markanchors,sequence)
+function handlers.gpos_mark2mark(head,start,kind,lookupname,markanchors,sequence)
     local markchar = start.char
     if marks[markchar] then
         local base = start.prev -- [glyph] [basemark] [start=mark]
@@ -10154,7 +10155,7 @@ function handlers.gpos_mark2mark(start,kind,lookupname,markanchors,sequence)
                                         logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%s,%s)",
                                             pref(kind,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
                                     end
-                                    return start,true
+                                    return head, start, true
                                 end
                             end
                         end
@@ -10173,10 +10174,10 @@ function handlers.gpos_mark2mark(start,kind,lookupname,markanchors,sequence)
     elseif trace_bugs then
         logwarning("%s: mark %s is no mark",pref(kind,lookupname),gref(markchar))
     end
-    return start,false
+    return head, start, false
 end
 
-function handlers.gpos_cursive(start,kind,lookupname,exitanchors,sequence) -- to be checked
+function handlers.gpos_cursive(head,start,kind,lookupname,exitanchors,sequence) -- to be checked
     local alreadydone = cursonce and start[a_cursbase]
     if not alreadydone then
         local done = false
@@ -10223,30 +10224,30 @@ function handlers.gpos_cursive(start,kind,lookupname,exitanchors,sequence) -- to
                 end
             end
         end
-        return start, done
+        return head, start, done
     else
         if trace_cursive and trace_details then
             logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(start.char),alreadydone)
         end
-        return start, false
+        return head, start, false
     end
 end
 
-function handlers.gpos_single(start,kind,lookupname,kerns,sequence)
+function handlers.gpos_single(head,start,kind,lookupname,kerns,sequence)
     local startchar = start.char
     local dx, dy, w, h = setpair(start,tfmdata.parameters.factor,rlmode,sequence.flags[4],kerns,characters[startchar])
     if trace_kerns then
         logprocess("%s: shifting single %s by (%s,%s) and correction (%s,%s)",pref(kind,lookupname),gref(startchar),dx,dy,w,h)
     end
-    return start, false
+    return head, start, false
 end
 
-function handlers.gpos_pair(start,kind,lookupname,kerns,sequence)
+function handlers.gpos_pair(head,start,kind,lookupname,kerns,sequence)
     -- todo: kerns in disc nodes: pre, post, replace -> loop over disc too
     -- todo: kerns in components of ligatures
     local snext = start.next
     if not snext then
-        return start, false
+        return head, start, false
     else
         local prev, done = start, false
         local factor = tfmdata.parameters.factor
@@ -10302,7 +10303,7 @@ function handlers.gpos_pair(start,kind,lookupname,kerns,sequence)
                 break
             end
         end
-        return start, done
+        return head, start, done
     end
 end
 
@@ -10335,21 +10336,21 @@ local logwarning = report_chain
 -- We could share functions but that would lead to extra function calls with many
 -- arguments, redundant tests and confusing messages.
 
-function chainprocs.chainsub(start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname)
+function chainprocs.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname)
     logwarning("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname))
-    return start, false
+    return head, start, false
 end
 
-function chainmores.chainsub(start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname,n)
+function chainmores.chainsub(head,start,stop,kind,chainname,currentcontext,lookuphash,lookuplist,chainlookupname,n)
     logprocess("%s: a direct call to chainsub cannot happen",cref(kind,chainname,chainlookupname))
-    return start, false
+    return head, start, false
 end
 
 -- The reversesub is a special case, which is why we need to store the replacements
 -- in a bit weird way. There is no lookup and the replacement comes from the lookup
 -- itself. It is meant mostly for dealing with Urdu.
 
-function chainprocs.reversesub(start,stop,kind,chainname,currentcontext,lookuphash,replacements)
+function chainprocs.reversesub(head,start,stop,kind,chainname,currentcontext,lookuphash,replacements)
     local char = start.char
     local replacement = replacements[char]
     if replacement then
@@ -10357,9 +10358,9 @@ function chainprocs.reversesub(start,stop,kind,chainname,currentcontext,lookupha
             logprocess("%s: single reverse replacement of %s by %s",cref(kind,chainname),gref(char),gref(replacement))
         end
         start.char = replacement
-        return start, true
+        return head, start, true
     else
-        return start, false
+        return head, start, false
     end
 end
 
@@ -10387,10 +10388,10 @@ local function delete_till_stop(start,stop,ignoremarks) -- keeps start
         repeat -- start x x m x x stop => start m
             local next = start.next
             if not marks[next.char] then
-local components = next.components
-if components then -- probably not needed
-    flush_node_list(components)
-end
+                local components = next.components
+                if components then -- probably not needed
+                    flush_node_list(components)
+                end
                 delete_node(start,next)
             end
             n = n + 1
@@ -10398,10 +10399,10 @@ end
     else -- start x x x stop => start
         repeat
             local next = start.next
-local components = next.components
-if components then -- probably not needed
-    flush_node_list(components)
-end
+            local components = next.components
+            if components then -- probably not needed
+                flush_node_list(components)
+            end
             delete_node(start,next)
             n = n + 1
         until next == stop
@@ -10414,7 +10415,7 @@ end
 match.</p>
 --ldx]]--
 
-function chainprocs.gsub_single(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
+function chainprocs.gsub_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
     -- todo: marks ?
     local current = start
     local subtables = currentlookup.subtables
@@ -10432,7 +10433,7 @@ function chainprocs.gsub_single(start,stop,kind,chainname,currentcontext,lookuph
                 end
             else
                 replacement = replacement[currentchar]
-                if not replacement then
+                if not replacement or replacement == "" then
                     if trace_bugs then
                         logwarning("%s: no single for %s",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(currentchar))
                     end
@@ -10443,14 +10444,14 @@ function chainprocs.gsub_single(start,stop,kind,chainname,currentcontext,lookuph
                     current.char = replacement
                 end
             end
-            return start, true
+            return head, start, true
         elseif current == stop then
             break
         else
             current = current.next
         end
     end
-    return start, false
+    return head, start, false
 end
 
 chainmores.gsub_single = chainprocs.gsub_single
@@ -10460,7 +10461,7 @@ chainmores.gsub_single = chainprocs.gsub_single
 the match.</p>
 --ldx]]--
 
-function chainprocs.gsub_multiple(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gsub_multiple(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
     delete_till_stop(start,stop) -- we could pass ignoremarks as #3 ..
     local startchar = start.char
     local subtables = currentlookup.subtables
@@ -10472,7 +10473,7 @@ function chainprocs.gsub_multiple(start,stop,kind,chainname,currentcontext,looku
         end
     else
         replacements = replacements[startchar]
-        if not replacements then
+        if not replacements or replacement == "" then
             if trace_bugs then
                 logwarning("%s: no multiple for %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar))
             end
@@ -10480,17 +10481,12 @@ function chainprocs.gsub_multiple(start,stop,kind,chainname,currentcontext,looku
             if trace_multiples then
                 logprocess("%s: replacing %s by multiple characters %s",cref(kind,chainname,chainlookupname,lookupname),gref(startchar),gref(replacements))
             end
-            return multiple_glyphs(start,replacements)
+            return multiple_glyphs(head,start,replacements)
         end
     end
-    return start, false
+    return head, start, false
 end
 
--- function chainmores.gsub_multiple(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,n)
---     logprocess("%s: gsub_multiple not yet supported",cref(kind,chainname,chainlookupname))
---     return start, false
--- end
-
 chainmores.gsub_multiple = chainprocs.gsub_multiple
 
 --[[ldx--
@@ -10505,7 +10501,7 @@ chainmores.gsub_multiple = chainprocs.gsub_multiple
 -- marks come last anyway
 -- are there cases where we need to delete the mark
 
-function chainprocs.gsub_alternate(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gsub_alternate(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
     local current = start
     local subtables = currentlookup.subtables
     local value  = featurevalue == true and tfmdata.shared.features[kind] or featurevalue
@@ -10536,21 +10532,16 @@ function chainprocs.gsub_alternate(start,stop,kind,chainname,currentcontext,look
                     logwarning("%s: no alternative for %s",cref(kind,chainname,chainlookupname,lookupname),gref(currentchar))
                 end
             end
-            return start, true
+            return head, start, true
         elseif current == stop then
             break
         else
             current = current.next
         end
     end
-    return start, false
+    return head, start, false
 end
 
--- function chainmores.gsub_alternate(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,n)
---     logprocess("%s: gsub_alternate not yet supported",cref(kind,chainname,chainlookupname))
---     return start, false
--- end
-
 chainmores.gsub_alternate = chainprocs.gsub_alternate
 
 --[[ldx--
@@ -10559,7 +10550,7 @@ this function (move code inline and handle the marks by a separate function). We
 assume rather stupid ligatures (no complex disc nodes).</p>
 --ldx]]--
 
-function chainprocs.gsub_ligature(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
+function chainprocs.gsub_ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex)
     local startchar = start.char
     local subtables = currentlookup.subtables
     local lookupname = subtables[1]
@@ -10617,7 +10608,7 @@ function chainprocs.gsub_ligature(start,stop,kind,chainname,currentcontext,looku
                     end
                 end
                 start = toligature(kind,lookupname,start,stop,l2,currentlookup.flags[1],discfound)
-                return start, true, nofreplacements
+                return head, start, true, nofreplacements
             elseif trace_bugs then
                 if start == stop then
                     logwarning("%s: replacing character %s by ligature fails",cref(kind,chainname,chainlookupname,lookupname,chainindex),gref(startchar))
@@ -10627,12 +10618,12 @@ function chainprocs.gsub_ligature(start,stop,kind,chainname,currentcontext,looku
             end
         end
     end
-    return start, false, 0
+    return head, start, false, 0
 end
 
 chainmores.gsub_ligature = chainprocs.gsub_ligature
 
-function chainprocs.gpos_mark2base(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gpos_mark2base(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
     local markchar = start.char
     if marks[markchar] then
         local subtables = currentlookup.subtables
@@ -10657,7 +10648,7 @@ function chainprocs.gpos_mark2base(start,stop,kind,chainname,currentcontext,look
                             if trace_bugs then
                                 logwarning("%s: no base for mark %s",pref(kind,lookupname),gref(markchar))
                             end
-                            return start, false
+                            return head, start, false
                         end
                     end
                 end
@@ -10675,7 +10666,7 @@ function chainprocs.gpos_mark2base(start,stop,kind,chainname,currentcontext,look
                                         logprocess("%s, anchor %s, bound %s: anchoring mark %s to basechar %s => (%s,%s)",
                                             cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
                                     end
-                                    return start, true
+                                    return head, start, true
                                 end
                             end
                         end
@@ -10693,10 +10684,10 @@ function chainprocs.gpos_mark2base(start,stop,kind,chainname,currentcontext,look
     elseif trace_bugs then
         logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
     end
-    return start, false
+    return head, start, false
 end
 
-function chainprocs.gpos_mark2ligature(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gpos_mark2ligature(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
     local markchar = start.char
     if marks[markchar] then
         local subtables = currentlookup.subtables
@@ -10721,7 +10712,7 @@ function chainprocs.gpos_mark2ligature(start,stop,kind,chainname,currentcontext,
                             if trace_bugs then
                                 logwarning("%s: no base for mark %s",cref(kind,chainname,chainlookupname,lookupname),markchar)
                             end
-                            return start, false
+                            return head, start, false
                         end
                     end
                 end
@@ -10743,7 +10734,7 @@ function chainprocs.gpos_mark2ligature(start,stop,kind,chainname,currentcontext,
                                             logprocess("%s, anchor %s, bound %s: anchoring mark %s to baselig %s at index %s => (%s,%s)",
                                                 cref(kind,chainname,chainlookupname,lookupname),anchor,a or bound,gref(markchar),gref(basechar),index,dx,dy)
                                         end
-                                        return start, true
+                                        return head, start, true
                                     end
                                 end
                             end
@@ -10762,10 +10753,10 @@ function chainprocs.gpos_mark2ligature(start,stop,kind,chainname,currentcontext,
     elseif trace_bugs then
         logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
     end
-    return start, false
+    return head, start, false
 end
 
-function chainprocs.gpos_mark2mark(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gpos_mark2mark(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
     local markchar = start.char
     if marks[markchar] then
 --~         local alreadydone = markonce and start[a_markmark]
@@ -10806,7 +10797,7 @@ function chainprocs.gpos_mark2mark(start,stop,kind,chainname,currentcontext,look
                                             logprocess("%s, anchor %s, bound %s: anchoring mark %s to basemark %s => (%s,%s)",
                                                 cref(kind,chainname,chainlookupname,lookupname),anchor,bound,gref(markchar),gref(basechar),dx,dy)
                                         end
-                                        return start, true
+                                        return head, start, true
                                     end
                                 end
                             end
@@ -10827,12 +10818,10 @@ function chainprocs.gpos_mark2mark(start,stop,kind,chainname,currentcontext,look
     elseif trace_bugs then
         logwarning("%s: mark %s is no mark",cref(kind,chainname,chainlookupname),gref(markchar))
     end
-    return start, false
+    return head, start, false
 end
 
--- ! ! ! untested ! ! !
-
-function chainprocs.gpos_cursive(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
+function chainprocs.gpos_cursive(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname)
     local alreadydone = cursonce and start[a_cursbase]
     if not alreadydone then
         local startchar = start.char
@@ -10886,18 +10875,18 @@ function chainprocs.gpos_cursive(start,stop,kind,chainname,currentcontext,lookup
                     end
                 end
             end
-            return start, done
+            return head, start, done
         else
             if trace_cursive and trace_details then
                 logprocess("%s, cursive %s is already done",pref(kind,lookupname),gref(start.char),alreadydone)
             end
-            return start, false
+            return head, start, false
         end
     end
-    return start, false
+    return head, start, false
 end
 
-function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
+function chainprocs.gpos_single(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
     -- untested .. needs checking for the new model
     local startchar = start.char
     local subtables = currentlookup.subtables
@@ -10912,12 +10901,12 @@ function chainprocs.gpos_single(start,stop,kind,chainname,currentcontext,lookuph
             end
         end
     end
-    return start, false
+    return head, start, false
 end
 
 -- when machines become faster i will make a shared function
 
-function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
+function chainprocs.gpos_pair(head,start,stop,kind,chainname,currentcontext,lookuphash,currentlookup,chainlookupname,chainindex,sequence)
 --    logwarning("%s: gpos_pair not yet supported",cref(kind,chainname,chainlookupname))
     local snext = start.next
     if snext then
@@ -10981,11 +10970,11 @@ function chainprocs.gpos_pair(start,stop,kind,chainname,currentcontext,lookuphas
                         break
                     end
                 end
-                return start, done
+                return head, start, done
             end
         end
     end
-    return start, false
+    return head, start, false
 end
 
 -- what pointer to return, spec says stop
@@ -11004,7 +10993,7 @@ local function show_skip(kind,chainname,char,ck,class)
     end
 end
 
-local function normal_handle_contextchain(start,kind,chainname,contexts,sequence,lookuphash)
+local function normal_handle_contextchain(head,start,kind,chainname,contexts,sequence,lookuphash)
     --  local rule, lookuptype, sequence, f, l, lookups = ck[1], ck[2] ,ck[3], ck[4], ck[5], ck[6]
     local flags        = sequence.flags
     local done         = false
@@ -11230,7 +11219,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
                     if chainlookup then
                         local cp = chainprocs[chainlookup.type]
                         if cp then
-                            start, done = cp(start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
+                            head, start, done = cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,nil,sequence)
                         else
                             logprocess("%s: %s is not yet supported",cref(kind,chainname,chainlookupname),chainlookup.type)
                         end
@@ -11261,7 +11250,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
                         local cp = chainlookup and chainmores[chainlookup.type]
                         if cp then
                             local ok, n
-                            start, ok, n = cp(start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,i,sequence)
+                            head, start, ok, n = cp(head,start,last,kind,chainname,ck,lookuphash,chainlookup,chainlookupname,i,sequence)
                             -- messy since last can be changed !
                             if ok then
                                 done = true
@@ -11281,7 +11270,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
             else
                 local replacements = ck[7]
                 if replacements then
-                    start, done = chainprocs.reversesub(start,last,kind,chainname,ck,lookuphash,replacements) -- sequence
+                    head, start, done = chainprocs.reversesub(head,start,last,kind,chainname,ck,lookuphash,replacements) -- sequence
                 else
                     done = true -- can be meant to be skipped
                     if trace_contexts then
@@ -11291,7 +11280,7 @@ local function normal_handle_contextchain(start,kind,chainname,contexts,sequence
             end
         end
     end
-    return start, done
+    return head, start, done
 end
 
 -- Because we want to keep this elsewhere (an because speed is less an issue) we
@@ -11304,7 +11293,7 @@ local verbose_handle_contextchain = function(font,...)
 end
 
 otf.chainhandlers = {
-    normal = normal_handle_contextchain,
+    normal  = normal_handle_contextchain,
     verbose = verbose_handle_contextchain,
 }
 
@@ -11511,12 +11500,8 @@ local function featuresprocessor(head,font,attr)
                                         if lookupcache then
                                             local lookupmatch = lookupcache[start.char]
                                             if lookupmatch then
-                                                local headnode = start == head
-                                                start, success = handler(start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
+                                                head, start, success = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
                                                 if success then
-                                                    if headnode then
-                                                        head = start
-                                                    end
                                                     break
                                                 end
                                             end
@@ -11560,14 +11545,10 @@ local function featuresprocessor(head,font,attr)
                                             local lookupmatch = lookupcache[start.char]
                                             if lookupmatch then
                                                 -- sequence kan weg
-                                                local headnode = start == head
                                                 local ok
-                                                start, ok = handler(start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
+                                                head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,1)
                                                 if ok then
                                                     success = true
-                                                    if headnode then
-                                                        head = start
-                                                    end
                                                 end
                                             end
                                             if start then start = start.next end
@@ -11637,14 +11618,10 @@ local function featuresprocessor(head,font,attr)
                                                 local lookupmatch = lookupcache[start.char]
                                                 if lookupmatch then
                                                     -- we could move all code inline but that makes things even more unreadable
-                                                    local headnode = start == head
                                                     local ok
-                                                    start, ok = handler(start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
+                                                    head, start, ok = handler(head,start,dataset[4],lookupname,lookupmatch,sequence,lookuphash,i)
                                                     if ok then
                                                         success = true
-                                                        if headnode then
-                                                            head = start
-                                                        end
                                                         break
                                                     end
                                                 end
@@ -11971,7 +11948,7 @@ registerotffeature {
     }
 }
 
--- this will change but is needed for an experiment:
+-- This can be used for extra handlers, but should be used with care!
 
 otf.handlers = handlers
 
-- 
cgit v1.2.3