From feaaf2049e30bc2f13d589565889fb06465f3f04 Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Sat, 26 May 2012 18:00:14 +0300
Subject: beta 2012.05.26 16:40

---
 tex/context/base/chem-str.mkiv                     | 360 ++++++++++-----------
 tex/context/base/cont-new.mkii                     |   2 +-
 tex/context/base/cont-new.mkiv                     |   2 +-
 tex/context/base/context-version.pdf               | Bin 4128 -> 4134 bytes
 tex/context/base/context-version.png               | Bin 106161 -> 106127 bytes
 tex/context/base/context.mkii                      |   2 +-
 tex/context/base/context.mkiv                      |   2 +-
 tex/context/base/file-res.lua                      |  67 +++-
 tex/context/base/grph-inc.lua                      | 102 ++++--
 tex/context/base/mult-sys.mkiv                     |   2 -
 tex/context/base/pack-bck.mkvi                     |  18 +-
 tex/context/base/pack-rul.mkiv                     |  18 +-
 tex/context/base/status-files.pdf                  | Bin 24406 -> 24432 bytes
 tex/context/base/status-lua.pdf                    | Bin 180035 -> 180073 bytes
 tex/context/base/status-mkiv.lua                   |   2 +-
 tex/generic/context/luatex/luatex-fonts-merged.lua |   2 +-
 16 files changed, 333 insertions(+), 246 deletions(-)

(limited to 'tex')

diff --git a/tex/context/base/chem-str.mkiv b/tex/context/base/chem-str.mkiv
index 197c13bc6..e74c268da 100644
--- a/tex/context/base/chem-str.mkiv
+++ b/tex/context/base/chem-str.mkiv
@@ -49,13 +49,12 @@
 
 \unprotect
 
+\installcorenamespace{chemical}
 \installcorenamespace{chemicalsymbol}
+\installcorenamespace{chemicalframed}
+\installcorenamespace{chemicalsize}
 
-\unexpanded\def\setupchemical
-  {\dosingleempty\dosetupchemical}
-
-\def\dosetupchemical
-  {\getparameters[\??cm]}
+\installsimplecommandhandler \??chemical {chemical} \??chemical % no \define...
 
 \let\setupchemicals\setupchemical
 
@@ -63,72 +62,91 @@
   {\dosingleempty\dosetupchemicalframed}
 
 \def\dosetupchemicalframed
-  {\getparameters[\??cm:\c!frame]}
-
-\def\chemicalparameter#1{\csname\??cm#1\endcsname}
+  {\getparameters[\??chemicalframed]}
 
-\unexpanded\def\definechemical
-  {\dosingleargument\dodefinechemical} % global
+\unexpanded\def\definechemical % is global (so we don't use the commandhandler)
+  {\dosingleargument\chem_define}
 
-\def\dodefinechemical[#1]#2%
+\def\chem_define[#1]#2%
   {\startnointerference
+   \edef\currentdefinedchemical{#1}%
+   \let\chemical\chem_chemical_nested
    \ctxlua{chemicals.undefine("#1")}%
-   \def\chemical{\dodoubleempty\dostructurechemical}%
-   \def\dostructurechemical[##1][##2]{\ctxlua{chemicals.define("#1",\!!bs##1\!!es,\!!bs\detokenize{##2}\!!es)}}%
    #2% flush
    \stopnointerference}
 
+\unexpanded\def\chem_chemical_nested
+  {\dodoubleempty\chem_chemical_nested_indeed}
+
+\def\chem_chemical_nested_indeed[#1][#2]%
+  {\ctxlua{chemicals.define("\currentdefinedchemical",\!!bs#1\!!es,\!!bs\detokenize{#2}\!!es)}}
+
+% chemical symbols
+
 \unexpanded\def\definechemicalsymbol
-  {\dodoubleempty\dodefinechemicalsymbol}
+  {\dodoubleempty\chem_symbol_define}
 
-\def\dodefinechemicalsymbol[#1][#2]%
+\def\chem_symbol_define[#1][#2]%
   {\setvalue{\??chemicalsymbol#1}{#2}}
 
 \unexpanded\def\chemicalsymbol[#1]%
-  {\getvalue{\??chemicalsymbol#1}}
+  {\csname\??chemicalsymbol\ifcsname\??chemicalsymbol#1\endcsname\s!unknown\else#1\fi\endcsname}
 
-% size (small medium big)
+\definechemicalsymbol[\s!unknown][] % empty
 
-\unexpanded\def\dosetchemicaltext
-  {\dousestyleparameter\@@cmstyle
-   \dousecolorparameter\@@cmcolor}
+% size (small medium big)
 
 \edef\chemicaltoplocation{t}
 \edef\chemicalbotlocation{b}
 
-\def\dochemicaltext#1% in ppchtex we had a more clever alignment
-  {\dosetchemicaltext\strut#1} % maybe also \setstrut
+\def\chem_text#1% in ppchtex we had a more clever alignment
+  {\usechemicalstyleandcolor\c!style\c!color
+   \strut
+   #1} % maybe also \setstrut
+
+\def\chem_text#1%
+  {\mathematics
+     {\usechemicalstyleandcolor\c!style\c!color
+      \strut
+      \ifcase\currentxfontsize\or\scriptstyle\or\scriptscriptstyle\fi
+      #1}}
 
-\def\dochemicaltext#1%
-  {\mathematics{\dosetchemicaltext\strut\ifcase\currentxfontsize\or\scriptstyle\or\scriptscriptstyle\fi#1}}
+\setvalue{\??chemicalsize\v!small }{\txx}
+\setvalue{\??chemicalsize\v!medium}{\tx}
+\setvalue{\??chemicalsize\v!big   }{}
 
+\newtoks       \everychemical
+\newtoks       \everystructurechemical
 \newconditional\indisplaychemical
 
-\unexpanded\def\startchemical
-  {\dosingleempty\dostartchemical}
+\newtoks       \t_chem_every_box
+\newbox        \b_chem_result
+\newconditional\c_chem_some_text
+\newdimen      \d_chem_width
+\newdimen      \d_chem_height
+\newdimen      \d_chem_depth
 
-\setvalue{\??cm:\c!size:\v!small }{\txx}
-\setvalue{\??cm:\c!size:\v!medium}{\tx}
-\setvalue{\??cm:\c!size:\v!big   }{}
+\unexpanded\def\startchemical
+  {\dodoubleempty\chem_start}
 
-\newtoks       \everychemical
-\newtoks       \everystructurechemical
-\newtoks       \withchemicalbox
-\newbox        \chemicalbox
-\newconditional\somechemicaltext
-\newdimen      \chemicalwidth
-\newdimen      \chemicalheight
-\newdimen      \chemicaldepth
-
-\def\dostartchemical[#1]%
+\def\chem_start[#1][#2]%
   {\ifmmode\vcenter\else\vbox\fi
    \bgroup
    \dontcomplain
    \settrue\indisplaychemical
    \forgetall
-   \getparameters[\??cm][#1]%
+   \ifsecondargument
+     \doifassignmentelse{#1}
+       {\setupcurrentchemical[#1]}% same as \currentchemical
+       {\edef\currentchemical{#1}%
+        \setupcurrentchemical[#2]}%
+   \else\iffirstargument
+     \doifassignmentelse{#1}
+       {\setupcurrentchemical[#1]}% same as \currentchemical
+       {\edef\currentchemical{#1}}%
+   \fi\fi
    \the\everystructurechemical
-   \setbox\chemicalbox\hbox\bgroup
+   \setbox\b_chem_result\hbox\bgroup
    \ctxlua{chemicals.start {
      width  = "\chemicalparameter\c!width",
      height = "\chemicalparameter\c!height",
@@ -146,41 +164,41 @@
   {\stopnointerference
    \ctxlua{chemicals.stop()}%
    \egroup
-   \chemicalwidth \wd\chemicalbox
-   \chemicalheight\ht\chemicalbox
-   \chemicaldepth \dp\chemicalbox
-   \the\withchemicalbox
-   \doifelsenothing{\chemicalparameter\c!frame}\handlechemicalframednop\handlechemicalframedyes
+   \d_chem_width \wd\b_chem_result
+   \d_chem_height\ht\b_chem_result
+   \d_chem_depth \dp\b_chem_result
+   \the\t_chem_every_box
+   \doifelsenothing{\chemicalparameter\c!frame}\chem_framed_nop\chem_framed_yes
    \egroup}
 
-\def\handlechemicalframedyes
+\def\chem_framed_yes
   {\localframed%
-     [\??cm:\c!frame]%
-     [\c!frame=\chemicalparameter\c!frame,\c!align=\v!normal,\c!strut=\v!no]{\vbox{\box\chemicalbox\vss}}} % remove depth
+     [\??chemicalframed]%
+     [\c!frame=\chemicalparameter\c!frame,\c!align=\v!normal,\c!strut=\v!no]{\vbox{\box\b_chem_result\vss}}} % remove depth
 
-\def\handlechemicalframednop
+\def\chem_framed_nop
   {\localframed%
-     [\??cm:\c!frame]%
-     [\c!align=\v!normal,\c!strut=\v!no]{\vbox{\box\chemicalbox\vss}}} % remove depth
+     [\??chemicalframed]%
+     [\c!align=\v!normal,\c!strut=\v!no]{\vbox{\box\b_chem_result\vss}}} % remove depth
 
 \let\startstructurechemical\startchemical
 \let\stopstructurechemical \stopchemical
 
 \unexpanded\def\structurechemical
-  {\dotripleempty\dostructurechemical}
+  {\dotripleempty\strc_chem_indeed}
 
 \appendtoks
     \let\chemical\structurechemical
 \to\everystructurechemical
 
-\def\dostructurechemical
+\def\strc_chem_indeed
   {\ifthirdargument
-     \expandafter\dostructurechemicalthree
+     \expandafter\strc_chem_indeed_three
    \else
-     \expandafter\dostructurechemicaltwo
+     \expandafter\strc_chem_indeed_two
    \fi}
 
-\def\dostructurechemicalthree[#1][#2][#3]%
+\def\strc_chem_indeed_three[#1][#2][#3]%
   {\writestatus\m!chemicals{hyperlinked chemicals not yet supported}% todo reference, for the moment ignored
    \ctxlua{chemicals.component(\!!bs#2\!!es, \!!bs\detokenize{#3}\!!es, { % maybe also pass first two args this way
      rulethickness = "\the\dimexpr\chemicalparameter\c!rulethickness\relax", % todo: scaled points
@@ -188,7 +206,7 @@
     } ) }%
    \ignorespaces}
 
-\def\dostructurechemicaltwo[#1][#2]%
+\def\strc_chem_indeed_two[#1][#2]%
   {\ctxlua{chemicals.component(\!!bs#1\!!es,\!!bs\detokenize{#2}\!!es, { % maybe also pass first two args this way
      rulethickness = "\the\dimexpr\chemicalparameter\c!rulethickness\relax", % todo: scaled points
      rulecolor     = "\MPcolor{\chemicalparameter\c!rulecolor}" % we can precalculate this for speedup
@@ -196,66 +214,66 @@
    \ignorespaces}
 
 \appendtoks
-    \setbox\chemicalbox\hbox{\raise\MPlly\box\chemicalbox}%
-    \chemicalwidth \wd\chemicalbox
-    \chemicalheight\ht\chemicalbox
-    \chemicaldepth \dp\chemicalbox
-\to \withchemicalbox
+    \setbox\b_chem_result\hbox{\raise\MPlly\box\b_chem_result}%
+    \d_chem_width \wd\b_chem_result
+    \d_chem_height\ht\b_chem_result
+    \d_chem_depth \dp\b_chem_result
+\to \t_chem_every_box
 
 % kind of compatible, but text sizes instead of math sizes (i.e. tx is larger than scriptsize)
 
 \appendtoks
-   \edef\chemicalbodyfont{\chemicalparameter\c!bodyfont}%
+   \edef\chemicalbodyfont{\chemicalparameter\c!bodyfont}% public?
    \ifx\chemicalbodyfont\empty
      \switchtobodyfont[\chemicalbodyfont]%
    \fi
-   \getvalue{\??cm:\c!size:\chemicalparameter\c!size}%
+   \getvalue{\??chemicalsize\chemicalparameter\c!size}%
 % \to \everystructurechemical
 \to \everychemical
 
-\def\chemicaltoptext#1{\global\settrue\somechemicaltext\gdef\thetoptext{#1}\ignorespaces}
-\def\chemicalbottext#1{\global\settrue\somechemicaltext\gdef\thebottext{#1}\ignorespaces}
-\def\chemicalmidtext#1{\global\settrue\somechemicaltext\gdef\themidtext{#1}\ignorespaces}
+\def\chemicaltoptext#1{\global\settrue\c_chem_some_text\gdef\m_chem_top_text{#1}\ignorespaces}
+\def\chemicalbottext#1{\global\settrue\c_chem_some_text\gdef\m_chem_bot_text{#1}\ignorespaces}
+\def\chemicalmidtext#1{\global\settrue\c_chem_some_text\gdef\m_chem_mid_text{#1}\ignorespaces}
 
 \appendtoks
-    \let\toptext\chemicaltoptext \glet\thetoptext\empty
-    \let\bottext\chemicalbottext \glet\thebottext\empty
-    \let\midtext\chemicalmidtext \glet\themidtext\empty
-    \global\setfalse\somechemicaltext
+    \let\toptext\chemicaltoptext \glet\m_chem_top_text\empty
+    \let\bottext\chemicalbottext \glet\m_chem_bot_text\empty
+    \let\midtext\chemicalmidtext \glet\m_chem_mid_text\empty
+    \global\setfalse\c_chem_some_text
 \to \everystructurechemical
 
 \def\doaddchemicaltexts
-  {\setbox2\hbox to \chemicalwidth{\strut\hss\hbox{\strut\themidtext}\hss}%
-   \setbox4\hbox to \chemicalwidth{\strut\hss\hbox{\strut\thetoptext}\hss}%
-   \setbox6\hbox to \chemicalwidth{\strut\hss\hbox{\strut\thebottext}\hss}%
-   \setbox\chemicalbox\hbox \bgroup
-     \box\chemicalbox
-     \hskip-\chemicalwidth
-     \raise\chemicalheight\hbox{\lower\ht4\box4}%
-     \hskip-\chemicalwidth
+  {\setbox2\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_mid_text}\hss}%
+   \setbox4\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_top_text}\hss}%
+   \setbox6\hbox to \d_chem_width{\strut\hss\hbox{\strut\m_chem_bot_text}\hss}%
+   \setbox\b_chem_result\hbox \bgroup
+     \box\b_chem_result
+     \hskip-\d_chem_width
+     \raise\d_chem_height\hbox{\lower\ht4\box4}%
+     \hskip-\d_chem_width
      \lower.5\dimexpr\ht2-\dp2\relax\box2%
-     \hskip-\chemicalwidth
-     \lower\chemicaldepth \hbox{\raise\dp6\box6}%
+     \hskip-\d_chem_width
+     \lower\d_chem_depth \hbox{\raise\dp6\box6}%
      \hss
    \egroup} % text on top of chemicals
 
 \appendtoks
-    \ifconditional\somechemicaltext
+    \ifconditional\c_chem_some_text
       \doaddchemicaltexts
-      \chemicalwidth \wd\chemicalbox
-      \chemicalheight\ht\chemicalbox
-      \chemicaldepth \dp\chemicalbox
+      \d_chem_width \wd\b_chem_result
+      \d_chem_height\ht\b_chem_result
+      \d_chem_depth \dp\b_chem_result
     \fi
-\to \withchemicalbox
+\to \t_chem_every_box
 
 % todo: enspace or emspace
 
 \definechemicalsymbol[space]       [\enspace\quad\enspace]
 \definechemicalsymbol[plus]        [\enspace+\enspace]
 \definechemicalsymbol[minus]       [\enspace-\enspace]
-\definechemicalsymbol[gives]       [\dochemicalarrow\xrightarrow]
-\definechemicalsymbol[equilibrium] [\dochemicalarrow\xrightoverleftarrow]
-\definechemicalsymbol[mesomeric]   [\dochemicalarrow\xleftrightarrow]
+\definechemicalsymbol[gives]       [\chem_arrow_construct\xrightarrow]
+\definechemicalsymbol[equilibrium] [\chem_arrow_construct\xrightoverleftarrow]
+\definechemicalsymbol[mesomeric]   [\chem_arrow_construct\xleftrightarrow]
 \definechemicalsymbol[opencomplex] [\mathematics{\Bigg[}] % not yet ok
 \definechemicalsymbol[closecomplex][\mathematics{\Bigg]}] % not yet ok
 
@@ -268,32 +286,30 @@
 \definechemicalsymbol[OPENCOMPLEX] [{\chemicalsymbol[opencomplex]}]
 \definechemicalsymbol[CLOSECOMPLEX][{\chemicalsymbol[closecomplex]}]
 
-\def\dochemicalarrow#1#2#3%
+\def\chem_arrow_construct#1#2#3%
   {\enspace
    \mathematics{#1%
-     {\strut\hbox \!!spread 2em{\hss\ctxlua{chemicals.inline(\!!bs#2\!!es)}\hss}}%
-     {\strut\hbox \!!spread 2em{\hss\ctxlua{chemicals.inline(\!!bs#3\!!es)}\hss}}}%
-%      {\strut\hbox \!!spread 2em{\hss#2\hss}}%
-%      {\strut\hbox \!!spread 2em{\hss#3\hss}}}%
+     {\strut\hbox \!!spread 2\emwidth{\hss\ctxlua{chemicals.inline(\!!bs#2\!!es)}\hss}}%  {\strut\hbox \!!spread 2em{\hss#2\hss}}%
+     {\strut\hbox \!!spread 2\emwidth{\hss\ctxlua{chemicals.inline(\!!bs#3\!!es)}\hss}}}% {\strut\hbox \!!spread 2em{\hss#3\hss}}}%
    \enspace}
 
 % special macros (probably needs some more work)
 
-\def\dochemicaltop#1#2#3#4%
+\def\chem_top_construct#1#2#3#4%
   {\begingroup
    \setbox0\hbox{\tx\setstrut\strut#3}%
    \setbox2\hbox{\setstrut\strut\molecule{#4}}%
    \setbox0\hbox{\raise\dimexpr\dp0+\ht2\relax\hbox to \wd2{#1\box0#2}}%
-% no: \smashbox0
+   % no: \smashbox0
    \hbox{\box0\box2}%
    \endgroup}%
 
-\def\dochemicalbottom#1#2#3#4%
+\def\chem_bottom_construct#1#2#3#4%
   {\begingroup
    \setbox0\hbox{\tx\setstrut\strut#3}%
    \setbox2\hbox{\setstrut\strut#4}%
    \setbox0\hbox{\lower\dimexpr\dp2+\ht0\relax\hbox to \wd2{#1\box0#2}}%
-% no: \smashbox0
+   % no: \smashbox0
    \hbox{\box0\box2}%
    \endgroup}%
 
@@ -307,12 +323,12 @@
    \hbox{\setstrut\strut#2\rlap{\tx\setstrut\strut#1}}%
    \endgroup}%
 
-\unexpanded\def\chemicaltop            {\dochemicaltop    \hss   \hss  }
-\unexpanded\def\chemicallefttop        {\dochemicaltop    \relax \hss  }
-\unexpanded\def\chemicalrighttop       {\dochemicaltop    \hss   \relax}
-\unexpanded\def\chemicalbottom         {\dochemicalbottom \hss   \hss  }
-\unexpanded\def\chemicalleftbottom     {\dochemicalbottom \relax \hss  }
-\unexpanded\def\chemicalrightbottom    {\dochemicalbottom \hss   \relax}
+\unexpanded\def\chemicaltop            {\chem_top_construct    \hss   \hss  }
+\unexpanded\def\chemicallefttop        {\chem_top_construct    \relax \hss  }
+\unexpanded\def\chemicalrighttop       {\chem_top_construct    \hss   \relax}
+\unexpanded\def\chemicalbottom         {\chem_bottom_construct \hss   \hss  }
+\unexpanded\def\chemicalleftbottom     {\chem_bottom_construct \relax \hss  }
+\unexpanded\def\chemicalrightbottom    {\chem_bottom_construct \hss   \relax}
 
 \unexpanded\def\chemicaltopleft      #1{\chemicalleft {\chemicalrighttop   {#1}{}}}
 \unexpanded\def\chemicalbottomleft   #1{\chemicalleft {\chemicalrightbottom{#1}{}}}
@@ -330,7 +346,7 @@
 \unexpanded\def\chemicalalignedtext#1#2#3%
   {\dontleavehmode
    \begingroup
-   \dosetchemicaltext
+   \usechemicalstyleandcolor\c!style\c!color
    \hbox to \fontcharwd\font`C{\setstrut\strut#1\molecule{#3}#2}%
    \endgroup}
 
@@ -347,8 +363,8 @@
 
 \unexpanded\def\chemicaloxidationplus {\dotriplegroupempty\chemicaloxidation{\textplus }} % {} needed!
 \unexpanded\def\chemicaloxidationminus{\dotriplegroupempty\chemicaloxidation{\textminus}} % {} needed!
-\unexpanded\def\chemicalforeveropen   {\dotriplegroupempty\chemicalleft     {$\big[$}} % {} needed!
-\unexpanded\def\chemicalforeverclose  {\dotriplegroupempty\chemicalright    {$\big]$}} % {} needed!
+\unexpanded\def\chemicalforeveropen   {\dotriplegroupempty\chemicalleft     {$\big[$}}    % {} needed!
+\unexpanded\def\chemicalforeverclose  {\dotriplegroupempty\chemicalright    {$\big]$}}    % {} needed!
 \unexpanded\def\chemicaloxidationone  {\chemicaloxidation\relax1}
 \unexpanded\def\chemicaloxidationtwo  {\chemicaloxidation\relax2}
 \unexpanded\def\chemicaloxidationthree{\chemicaloxidation\relax3}
@@ -402,14 +418,14 @@
      \expandafter\inlinechemical
    \fi}
 
-\def\displaychemical
-  {\dotriplegroupempty\dodisplaychemical}
+\unexpanded\def\displaychemical
+  {\dotriplegroupempty\chem_display}
 
-\def\dodisplaychemical#1#2#3% todo:
+\def\chem_display#1#2#3% todo:
   {\the\everychemical \everychemical\emptytoks
    \quad
    \vcenter\bgroup
-     \dosetchemicaltext
+     \usechemicalstyleandcolor\c!style\c!color
      \ifthirdargument
        \ifsecondargument
          \halign{&\hss##\hss\cr#2\cr\molecule{#1}\cr#3\cr}%
@@ -422,10 +438,12 @@
    \egroup
    \quad}
 
-\def\inlinechemical#1%
-  {\dontleavehmode\hbox{\dosetchemicaltext\ctxlua{chemicals.inline(\!!bs#1\!!es)}}}
+\unexpanded\def\inlinechemical#1%
+  {\dontleavehmode
+   \hbox{\usechemicalstyleandcolor\c!style\c!color\ctxlua{chemicals.inline(\!!bs#1\!!es)}}}
 
-\def\chemicalbondrule{\hbox{\vrule\!!height.75ex\!!depth-\dimexpr.75ex-\linewidth\relax\!!width1em\relax}}
+\unexpanded\def\chemicalbondrule
+  {\hbox{\vrule\!!height.75ex\!!depth-\dimexpr.75ex-\linewidth\relax\!!width1em\relax}}
 
 \definechemicalsymbol[i:space]       [\enspace\quad\enspace]
 \definechemicalsymbol[i:plus]        [\enspace\mathematics{+}\enspace]
@@ -437,25 +455,25 @@
 \definechemicalsymbol[i:tripple]     [\hbox{\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}]
 \definechemicalsymbol[i:double]      [\hbox{\chemicalbondrule\hskip-1em\lower.5ex\chemicalbondrule\hskip-1em\raise.5ex\chemicalbondrule}]
 
-\def\chemicalsinglebond {\chemicalsymbol[i:single]}
-\def\chemicaldoublebond {\chemicalsymbol[i:tripple]}
-\def\chemicaltriplebond {\chemicalsymbol[i:double]}
-\def\chemicalgives      {\chemicalsymbol[i:gives]}
-\def\chemicalmesomeric  {\chemicalsymbol[i:mesomeric]}
-\def\chemicalequilibrium{\chemicalsymbol[i:equilibrium]}
-\def\chemicalsplus      {\chemicalsymbol[i:plus]}
-\def\chemicalsminus     {\chemicalsymbol[i:minus]}
-\def\chemicalsspace     {\chemicalsymbol[i:space]}
-\def\chemicalinline   #1{#1}
+\unexpanded\def\chemicalsinglebond {\chemicalsymbol[i:single]}
+\unexpanded\def\chemicaldoublebond {\chemicalsymbol[i:tripple]}
+\unexpanded\def\chemicaltriplebond {\chemicalsymbol[i:double]}
+\unexpanded\def\chemicalgives      {\chemicalsymbol[i:gives]}
+\unexpanded\def\chemicalmesomeric  {\chemicalsymbol[i:mesomeric]}
+\unexpanded\def\chemicalequilibrium{\chemicalsymbol[i:equilibrium]}
+\unexpanded\def\chemicalsplus      {\chemicalsymbol[i:plus]}
+\unexpanded\def\chemicalsminus     {\chemicalsymbol[i:minus]}
+\unexpanded\def\chemicalsspace     {\chemicalsymbol[i:space]}
+\unexpanded\def\chemicalinline   #1{#1}
 
 % display
 
-\newconditional\formulachemicalhastop
-\newconditional\formulachemicalhasbot
+\newconditional\c_chem_has_top
+\newconditional\c_chem_has_bot
 
-\newtoks\formulachemicaltop
-\newtoks\formulachemicalmid
-\newtoks\formulachemicalbot
+\newtoks\t_chem_top
+\newtoks\t_chem_mid
+\newtoks\t_chem_bot
 
 \newif\ifinchemicalformula
 
@@ -465,81 +483,61 @@
    \inchemicalformulatrue
    \the\everychemical
    \everychemical\emptytoks
-   \formulachemicaltop\emptytoks % not needed
-   \formulachemicalmid\emptytoks % not needed
-   \formulachemicalbot\emptytoks % not needed
+   \t_chem_top\emptytoks % not needed
+   \t_chem_mid\emptytoks % not needed
+   \t_chem_bot\emptytoks % not needed
    \let\chemical\formulachemical
-   \setfalse\formulachemicalhastop
-   \setfalse\formulachemicalhasbot }
+   \setfalse\c_chem_has_top
+   \setfalse\c_chem_has_bot}
 
 \unexpanded\def\stopchemicalformula
   {\tabskip1em\relax
    \nointerlineskip
-   \ifconditional\formulachemicalhastop
-     \ifconditional\formulachemicalhasbot
-       \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicaltop\cr\the\formulachemicalmid\cr\the\formulachemicalbot\cr}%
+   \ifconditional\c_chem_has_top
+     \ifconditional\c_chem_has_bot
+       \halign{&\hss\usechemicalstyleandcolor\c!style\c!color##\hss\cr\the\t_chem_top\cr\the\t_chem_mid\cr\the\t_chem_bot\cr}%
      \else
-       \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicaltop\cr\the\formulachemicalmid\cr}%
+       \halign{&\hss\usechemicalstyleandcolor\c!style\c!color##\hss\cr\the\t_chem_top\cr\the\t_chem_mid\cr}%
      \fi
    \else
-     \ifconditional\formulachemicalhasbot
-       \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicalmid\cr\the\formulachemicalbot\cr}%
+     \ifconditional\c_chem_has_bot
+       \halign{&\hss\usechemicalstyleandcolor\c!style\c!color##\hss\cr\the\t_chem_mid\cr\the\t_chem_bot\cr}%
      \else
-       \halign{&\hss\dosetchemicaltext##\hss\cr\the\formulachemicalmid\cr}%
+       \halign{&\hss\usechemicalstyleandcolor\c!style\c!color##\hss\cr\the\t_chem_mid\cr}%
      \fi
    \fi
    \egroup}
 
 \unexpanded\def\formulachemical
-  {\relax\dotriplegroupempty\doformulachemical}
-
-% \def\doformulachemical#1#2#3% we could do hboxes and measure
-%   {\ifthirdargument
-%      \doifelsenothing{#2}\noformulachemicaltop{\doformulachemicaltop{#2}}%
-%      \doifelsenothing{#3}\noformulachemicalbot{\doformulachemicalbot{#3}}%
-%    \else\ifsecondargument
-%      \noformulachemicaltop
-%      \doifelsenothing{#2}\noformulachemicalbot{\doformulachemicalbot{#2}}%
-%    \else
-%      \noformulachemicaltop
-%      \noformulachemicalbot
-%    \fi\fi
-%    \formulachemicalmid\expandafter{\the\formulachemicalmid\dodochemicalformulamid{#1}&}}
-%
-% \def\dodochemicalformulamid#1%
-%   {\ifcsname\??chemicalsymbol\detokenize{#1}\endcsname
-%      \csname\??chemicalsymbol\detokenize{#1}\expandafter\endcsname{}{}%
-%    \else
-%      \molecule{#1}{}{}%
-%    \fi}
-
-\def\domidformulachemical#1%
-  {\csname\??chemicalsymbol\detokenize{#1}\endcsname}
+  {\relax\dotriplegroupempty\chem_formula}
 
-\def\doformulachemical#1#2#3% we could do hboxes and measure
+\def\chem_formula#1#2#3% we could do hboxes and measure
   {\ifcsname\??chemicalsymbol\detokenize{#1}\endcsname
-     \formulachemicalmid\expandafter{\the\formulachemicalmid\domidformulachemical{#1}{#2}{#3}}%
+     \t_chem_mid\expandafter{\the\t_chem_mid\chem_formula_mid{#1}{#2}{#3}}%
    \else
      \ifthirdargument
-       \doifelsenothing{#2}\noformulachemicaltop{\doformulachemicaltop{#2}}%
-       \doifelsenothing{#3}\noformulachemicalbot{\doformulachemicalbot{#3}}%
+       \doifelsenothing{#2}\chem_formula_top_nop{\chem_formula_top_yes{#2}}%
+       \doifelsenothing{#3}\chem_formula_bot_nop{\chem_formula_bot_yes{#3}}%
      \else\ifsecondargument
-       \noformulachemicaltop
-       \doifelsenothing{#2}\noformulachemicalbot{\doformulachemicalbot{#2}}%
+       \chem_formula_top_nop
+       \doifelsenothing{#2}\chem_formula_bot_nop{\chem_formula_bot_yes{#2}}%
      \else
-       \noformulachemicaltop
-       \noformulachemicalbot
+       \chem_formula_top_nop
+       \chem_formula_bot_nop
      \fi\fi
-     \formulachemicalmid\expandafter{\the\formulachemicalmid\molecule{#1}&}%
+     \t_chem_mid\expandafter{\the\t_chem_mid\molecule{#1}&}%
    \fi}
 
-\def\noformulachemicaltop  {\formulachemicaltop\expandafter{\the\formulachemicaltop&}}
-\def\noformulachemicalbot  {\formulachemicalbot\expandafter{\the\formulachemicalbot&}}
-\def\doformulachemicaltop#1{\formulachemicaltop\expandafter{\the\formulachemicaltop\dodochemicalformulatop{#1}&}\settrue\formulachemicalhastop}
-\def\doformulachemicalbot#1{\formulachemicalbot\expandafter{\the\formulachemicalbot\dodochemicalformulabot{#1}&}\settrue\formulachemicalhasbot}
+\def\chem_formula_mid#1%
+  {\csname\??chemicalsymbol\detokenize{#1}\endcsname}
+
+\def\chem_formula_top_nop  {\t_chem_top\expandafter{\the\t_chem_top&}}
+\def\chem_formula_bot_nop  {\t_chem_bot\expandafter{\the\t_chem_bot&}}
+\def\chem_formula_top_yes#1{\t_chem_top\expandafter{\the\t_chem_top\chem_formula_top_indeed{#1}&}\settrue\c_chem_has_top}
+\def\chem_formula_bot_yes#1{\t_chem_bot\expandafter{\the\t_chem_bot\chem_formula_bot_indeed{#1}&}\settrue\c_chem_has_bot}
 
-\def\dodochemicalformulatop#1{\strut#1}
-\def\dodochemicalformulabot#1{\strut#1}
+\def\chem_formula_top_indeed#1{\strut#1}
+\def\chem_formula_bot_indeed#1{\strut#1}
 
 % gone: state option resolution offset (now frame offset) alternative
 
diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 0fbfda73e..ad5bf64cd 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{2012.05.25 18:21}
+\newcontextversion{2012.05.26 16:40}
 
 %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 a521479b5..ecb1e2210 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{2012.05.25 18:21}
+\newcontextversion{2012.05.26 16:40}
 
 %D This file is loaded at runtime, thereby providing an
 %D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf
index 078cdfb31..bf6d22796 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 2ee0c710d..04cf48f56 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 55b4110f1..3a8e0ad0a 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{2012.05.25 18:21}
+\edef\contextversion{2012.05.26 16:40}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index ccbc64c21..ddad74ad6 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -23,7 +23,7 @@
 %D up and the dependencies are more consistent.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2012.05.25 18:21}
+\edef\contextversion{2012.05.26 16:40}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/file-res.lua b/tex/context/base/file-res.lua
index 24b0f1cfc..4687e140e 100644
--- a/tex/context/base/file-res.lua
+++ b/tex/context/base/file-res.lua
@@ -24,24 +24,67 @@ local function readfilename(specification,backtrack,treetoo)
     local name = specification.filename
     local fnd = name and found[name]
     if not fnd then
-        if isfile(name) then
+        local names
+        local suffix = file.suffix(name)
+        if suffix ~= "" then
+            names = { name }
+        else
+            local defaultsuffixes = resolvers.defaultsuffixes
+            names = { }
+            for i=1,#defaultsuffixes do
+                names[i] = name .. "." .. defaultsuffixes[i]
+            end
             if trace_files then
-                report_files("found local: %s",name)
+                report_files("locating: %s, using default suffixes: %s",name,table.concat(defaultsuffixes," "))
+            end
+        end
+        for i=1,#names do
+            local fname = names[i]
+            if isfile(fname) then
+                if trace_files then
+                    report_files("found local: %s",name)
+                end
+                fnd = fname
+                break
             end
-            fnd = name
         end
         if not fnd and backtrack then
-            local fname = name
-            for i=1,backtrack,1 do
-                fname = "../" .. fname
-                if isfile(fname) then
-                    if trace_files then
-                        report_files("found by backtracking: %s",fname)
+            for i=1,#names do
+                local fname = names[i]
+                for i=1,backtrack,1 do
+                    fname = "../" .. fname
+                    if isfile(fname) then
+                        if trace_files then
+                            report_files("found by backtracking: %s",fname)
+                        end
+                        fnd = fname
+                        break
+                    elseif trace_files then
+                        report_files("not found by backtracking: %s",fname)
                     end
-                    fnd = fname
+                end
+                if fnd then
                     break
-                elseif trace_files then
-                    report_files("not found by backtracking: %s",fname)
+                end
+            end
+        end
+        if not fnd then
+            local paths = resolvers.instance.extra_paths
+            if paths then
+                for i=1,#paths do
+                    for i=1,#names do
+                        local fname = paths[i] .. "/" .. names[i]
+                        if isfile(fname) then
+                            if trace_files then
+                                report_files("found on extra path: %s",name)
+                            end
+                            fnd = name
+                            break
+                        end
+                    end
+                    if fnd then
+                        break
+                    end
                 end
             end
         end
diff --git a/tex/context/base/grph-inc.lua b/tex/context/base/grph-inc.lua
index 8a9fd6b47..13c9985fa 100644
--- a/tex/context/base/grph-inc.lua
+++ b/tex/context/base/grph-inc.lua
@@ -47,6 +47,8 @@ local contains = table.contains
 local concat, insert, remove = table.concat, table.insert, table.remove
 local todimen = string.todimen
 
+local P = lpeg.P
+
 local settings_to_array = utilities.parsers.settings_to_array
 local settings_to_hash  = utilities.parsers.settings_to_hash
 local allocate          = utilities.storage.allocate
@@ -133,12 +135,12 @@ figures.defaultdepth   = 0
 figures.nofprocessed   = 0
 figures.preferquality  = true -- quality over location
 
-figures.existers    = allocate()   local existers    = figures.existers
-figures.checkers    = allocate()   local checkers    = figures.checkers
-figures.includers   = allocate()   local includers   = figures.includers
-figures.converters  = allocate()   local converters  = figures.converters
-figures.identifiers = allocate()   local identifiers = figures.identifiers
-figures.programs    = allocate()   local programs    = figures.programs
+local existers    = allocate()   figures.existers    = existers
+local checkers    = allocate()   figures.checkers    = checkers
+local includers   = allocate()   figures.includers   = includers
+local converters  = allocate()   figures.converters  = converters
+local identifiers = allocate()   figures.identifiers = identifiers
+local programs    = allocate()   figures.programs    = programs
 
 figures.localpaths = allocate {
     ".", "..", "../.."
@@ -150,13 +152,13 @@ figures.cachepaths = allocate {
     subpath = ".",
 }
 
-figures.paths  = allocate(table.copy(figures.localpaths))
+figures.paths = allocate(table.copy(figures.localpaths))
 
 figures.order =  allocate{
-    "pdf", "mps", "jpg", "png", "jp2", "jbig", "svg", "eps", "tif", "gif", "mov", "buffer", "tex", "cld",
+    "pdf", "mps", "jpg", "png", "jp2", "jbig", "svg", "eps", "tif", "gif", "mov", "buffer", "tex", "cld", "auto",
 }
 
-figures.formats = allocate{
+local formats = allocate {
     ["pdf"]    = { list = { "pdf" } },
     ["mps"]    = { patterns = { "mps", "%d+" } },
     ["jpg"]    = { list = { "jpg", "jpeg" } },
@@ -171,13 +173,43 @@ figures.formats = allocate{
     ["buffer"] = { list = { "tmp", "buffer", "buf" } },
     ["tex"]    = { list = { "tex" } },
     ["cld"]    = { list = { "cld" } },
+    ["auto"]   = { list = { "auto" } },
+}
+
+local magics = allocate {
+    { format = "png", pattern = P("\137PNG\013\010\026\010") },                   -- 89 50 4E 47 0D 0A 1A 0A,
+    { format = "jpg", pattern = P("\255\216\255") },                              -- FF D8 FF
+    { format = "jp2", pattern = P("\000\000\000\012\106\080\032\032\013\010"), }, -- 00 00 00 0C 6A 50 20 20 0D 0A },
+    { format = "gif", pattern = P("GIF") },
+    { format = "pdf", pattern = (1 - P("%PDF"))^0 * P("%PDF") },
 }
 
-function figures.setlookups()
+figures.formats = formats -- frozen
+figures.magics  = magics  -- frozen
+
+function figures.guess(filename)
+    local f = io.open(filename,'rb')
+    if f then
+        local str = f:read(100)
+        f:close()
+        for i=1,#magics do
+            local pattern = magics[i]
+            if pattern.pattern:match(str) then
+                local format = pattern.format
+                if trace_figures then
+                    report_inclusion("file %q has format %s",filename,format)
+                end
+                return format
+            end
+        end
+    end
+end
+
+function figures.setlookups() -- tobe redone .. just set locals
     local fs, fp = allocate(), allocate()
     figures.suffixes, figures.patterns = fs, fp
     for _, format in next, figures.order do
-        local data = figures.formats[format]
+        local data = formats[format]
         local list = data.list
         if list then
             for i=1,#list do
@@ -204,10 +236,10 @@ function figures.registerresource(t)
 end
 
 local function register(tag,target,what)
-    local data = figures.formats[target] -- resolver etc
+    local data = formats[target] -- resolver etc
     if not data then
         data = { }
-        figures.formats[target] = data
+        formats[target] = data
     end
     local d = data[tag] -- list or pattern
     if d and not contains(d,what) then
@@ -578,14 +610,14 @@ local function locate(request) -- name, format, cache
             end
         end
         if format then
-            local foundname, quitscanning = figures.exists(askedname,format,resolve_too) -- not askedformat
+            local foundname, quitscanning, forcedformat = figures.exists(askedname,format,resolve_too) -- not askedformat
             if foundname then
                 return register(askedname, {
                     askedname  = askedname,
                     fullname   = foundname, -- askedname,
-                    format     = format,
+                    format     = forcedformat or format,
                     cache      = askedcache,
---~                     foundname  = foundname,
+                 -- foundname  = foundname, -- no
                     conversion = askedconversion,
                     resolution = askedresolution,
                 })
@@ -597,12 +629,12 @@ local function locate(request) -- name, format, cache
         end
         if askedpath then
             -- path and type given, todo: strip pieces of path
-            local foundname = figures.exists(askedname,askedformat,resolve_too)
+            local foundname, quitscanning, forcedformat = figures.exists(askedname,askedformat,resolve_too)
             if foundname then
                 return register(askedname, {
                     askedname  = askedname,
                     fullname   = foundname, -- askedname,
-                    format     = askedformat,
+                    format     = forcedformat or askedformat,
                     cache      = askedcache,
                     conversion = askedconversion,
                     resolution = askedresolution,
@@ -616,7 +648,8 @@ local function locate(request) -- name, format, cache
                 local check = path .. "/" .. askedname
              -- we pass 'true' as it can be an url as well, as the type
              -- is given we don't waste much time
-                if figures.exists(check,askedformat,resolve_too) then
+                local foundname, quitscanning, forcedformat = figures.exists(check,askedformat,resolve_too)
+                if foundname then
                     return register(check, {
                         askedname  = askedname,
                         fullname   = check,
@@ -648,16 +681,16 @@ local function locate(request) -- name, format, cache
         local figureorder = figures.order
         for i=1,#figureorder do
             local format = figureorder[i]
-            local list = figures.formats[format].list or { format }
+            local list = formats[format].list or { format }
             for j=1,#list do
                 local suffix = list[j]
                 local check = file.addsuffix(askedname,suffix)
-                local foundname = figures.exists(check,format,resolve_too)
+                local foundname, quitscanning, forcedformat = figures.exists(check,format,resolve_too)
                 if foundname then
                     return register(askedname, {
                         askedname  = askedname,
                         fullname   = foundname, -- check,
-                        format     = format,
+                        format     = forcedformat or format,
                         cache      = askedcache,
                         conversion = askedconversion,
                         resolution = askedresolution,
@@ -674,7 +707,7 @@ local function locate(request) -- name, format, cache
             local figureorder = figures.order
             for j=1,#figureorder do
                 local format = figureorder[j]
-                local list = figures.formats[format].list or { format }
+                local list = formats[format].list or { format }
                 for k=1,#list do
                     local suffix = list[k]
                  -- local name = file.replacesuffix(askedbase,suffix)
@@ -688,12 +721,12 @@ local function locate(request) -- name, format, cache
                                 report_inclusion("warning: skipping path %s",path)
                             end
                         else
-                            local foundname = figures.exists(check,format,true)
+                            local foundname, quitscanning, forcedformat = figures.exists(check,format,true)
                             if foundname then
                                 return register(askedname, {
                                     askedname  = askedname,
                                     fullname   = foundname, -- check
-                                    format     = format,
+                                    format     = forcedformat or format,
                                     cache      = askedcache,
                                     conversion = askedconversion,
                                     resolution = askedresolution,
@@ -713,16 +746,16 @@ local function locate(request) -- name, format, cache
                 local path = figurepaths[i]
                 for j=1,#figureorder do
                     local format = figureorder[j]
-                    local list = figures.formats[format].list or { format }
+                    local list = formats[format].list or { format }
                     for k=1,#list do
                         local suffix = list[k]
                         local check = path .. "/" .. file.replacesuffix(askedbase,suffix)
-                        local foundname = figures.exists(check,format,resolve_too)
+                        local foundname, quitscanning, forcedformat = figures.exists(check,format,resolve_too)
                         if foundname then
                             return register(askedname, {
                                 askedname  = askedname,
                                 fullname   = foudname, -- check,
-                                format     = format,
+                                format     = forcedformat or format,
                                 cache      = askedcache,
                                 conversion = askedconversion,
                                 resolution = askedresolution,
@@ -739,7 +772,7 @@ local function locate(request) -- name, format, cache
             local figureorder = figures.order
             for j=1,#figureorder do
                 local format = figureorder[j]
-                local list = figures.formats[format].list or { format }
+                local list = formats[format].list or { format }
                 for k=1,#list do
                     local suffix = list[k]
                     local check = resolvers.findfile(file.replacesuffix(askedname,suffix))
@@ -1064,6 +1097,17 @@ end
 
 includers.buffers = includers.nongeneric
 
+-- -- -- auto -- -- --
+
+function existers.auto(askedname)
+    local name = file.nameonly(askedname)
+    local format = figures.guess(name)
+    return format and name, true, format
+end
+
+checkers.auto  = checkers.generic
+includers.auto = includers.generic
+
 -- -- -- cld -- -- --
 
 existers.cld = existers.tex
diff --git a/tex/context/base/mult-sys.mkiv b/tex/context/base/mult-sys.mkiv
index cdf73b612..6f9545ec0 100644
--- a/tex/context/base/mult-sys.mkiv
+++ b/tex/context/base/mult-sys.mkiv
@@ -381,7 +381,6 @@
 \definesystemconstant  {bp}
 \definesystemconstant  {in}
 \definesystemconstant  {pc}
-\definesystemconstant  {cm}
 \definesystemconstant  {dd}
 \definesystemconstant  {cc}
 \definesystemconstant  {nd}
@@ -464,7 +463,6 @@
 \definesystemvariable {bp}   % BreakPoint
 \definesystemvariable {bx}   % BackendExport
 \definesystemvariable {cb}   % CollectBox
-\definesystemvariable {cm}   % CheMical
 \definesystemvariable {cp}   % CliP
 \definesystemvariable {da}   % DAte
 \definesystemvariable {db}   % Labels
diff --git a/tex/context/base/pack-bck.mkvi b/tex/context/base/pack-bck.mkvi
index 38750f590..fbe704fab 100644
--- a/tex/context/base/pack-bck.mkvi
+++ b/tex/context/base/pack-bck.mkvi
@@ -97,7 +97,7 @@
 
 \let\pack_backgrounds_stop\relax
 
-\unexpanded\def\pack_backgrounds_stop_indeed
+\unexpanded\def\pack_backgrounds_stop_indeed % we shoul duse the fast background variant of framed
   {\endgraf
    \removelastskip
    \egroup
@@ -199,17 +199,21 @@
 \setupbackground
   [\c!leftoffset=.5\bodyfontsize,
    \c!rightoffset=\backgroundparameter\c!leftoffset,
-   \c!topoffset=\!!zeropoint,
+   \c!topoffset=\zeropoint,
    \c!bottomoffset=\backgroundparameter\c!topoffset,
    \c!state=\v!start,
    \c!radius=.5\bodyfontsize,
    \c!corner=\v!rectangular,
    \c!frame=\v!off,
-   \c!color=,
-   \c!depth=\!!zeropoint,
-   \c!background=\v!screen,
-   \c!backgroundcolor=\backgroundparameter\c!color,
-   \c!screen=\@@rsscreen,
+   \c!depth=\zeropoint,
+%    \c!color=,
+%    \c!background=\v!screen,
+%    \c!backgroundcolor=\backgroundparameter\c!color,
+%    \c!screen=\@@rsscreen,
+%
+   \c!background=\v!color,
+   \c!backgroundcolor=lightgray,
+%
    \c!before=,
    \c!after=]
 
diff --git a/tex/context/base/pack-rul.mkiv b/tex/context/base/pack-rul.mkiv
index d7e41dd70..1f4ddbfc9 100644
--- a/tex/context/base/pack-rul.mkiv
+++ b/tex/context/base/pack-rul.mkiv
@@ -523,12 +523,12 @@
 
 \newtoks\everybackgroundbox
 
-\let\currentbackground\empty
+\let\m_framed_background\empty % we might need a public name
 
 \def\pack_framed_process_background
-  {\ifcsname\??overlaybuiltin\currentbackground\endcsname
+  {\ifcsname\??overlaybuiltin\m_framed_background\endcsname
      \pack_framed_process_background_indeed_internal
-   \else\ifcsname\??overlay\currentbackground\endcsname
+   \else\ifcsname\??overlay\m_framed_background\endcsname
      \pack_framed_process_background_indeed_external
    \fi\fi}
 
@@ -536,10 +536,10 @@
   {\bgroup
    \setbox\b_framed_extra\hbox{%\bgroup
      \ifzeropt\framedbackgroundoffset
-       \csname\??overlaybuiltin\currentbackground\endcsname
+       \csname\??overlaybuiltin\m_framed_background\endcsname
      \else
        \kern-\framedbackgroundoffset
-       \hbox{\csname\??overlaybuiltin\currentbackground\endcsname}%
+       \hbox{\csname\??overlaybuiltin\m_framed_background\endcsname}%
      \fi
    }%\egroup
    \wd\b_framed_extra\zeropoint
@@ -553,10 +553,10 @@
    \bgroup
    \setbox\b_framed_extra\hbox{%\bgroup
      \ifzeropt\framedbackgroundoffset
-       \csname\??overlay\currentbackground\endcsname
+       \csname\??overlay\m_framed_background\endcsname
      \else
        \kern-\framedbackgroundoffset
-       \hbox{\csname\??overlay\currentbackground\endcsname}%
+       \hbox{\csname\??overlay\m_framed_background\endcsname}%
      \fi
    }%\egroup
    \wd\b_framed_extra\zeropoint
@@ -566,8 +566,8 @@
    \egroup}
 
 \def\pack_framed_process_backgrounds#1,#2% #2 gobbles spaces (we could avoid one catch if we have nextbackground)
-  {\edef\currentbackground{#1}%
-   \ifx\currentbackground\s!unknown\else
+  {\edef\m_framed_background{#1}%
+   \ifx\m_framed_background\s!unknown\else
      \pack_framed_process_background
      \expandafter\pack_framed_process_backgrounds
    \fi#2}
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index 1bb5ecfc7..6fd8cf78d 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 ca099cd41..b6509bee6 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/status-mkiv.lua b/tex/context/base/status-mkiv.lua
index a94080378..5887667ee 100644
--- a/tex/context/base/status-mkiv.lua
+++ b/tex/context/base/status-mkiv.lua
@@ -1323,7 +1323,7 @@ return {
         {
             filename = "chem-str",
             marktype = "mkiv",
-            status   = "unknown",
+            status   = "okay",
         },
         {
             filename = "typo-scr",
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index ad962eb88..5389102fe 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  : 05/25/12 18:21:28
+-- merge date  : 05/26/12 16:40:14
 
 do -- begin closure to overcome local limits and interference
 
-- 
cgit v1.2.3