From 85b7bc695629926641c7cb752fd478adfdf374f3 Mon Sep 17 00:00:00 2001
From: Marius <mariausol@gmail.com>
Date: Sun, 4 Jul 2010 15:32:09 +0300
Subject: stable 2010-05-24 13:10

---
 tex/context/base/xtag-cml.tex | 228 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 228 insertions(+)
 create mode 100644 tex/context/base/xtag-cml.tex

(limited to 'tex/context/base/xtag-cml.tex')

diff --git a/tex/context/base/xtag-cml.tex b/tex/context/base/xtag-cml.tex
new file mode 100644
index 000000000..6da7fd26f
--- /dev/null
+++ b/tex/context/base/xtag-cml.tex
@@ -0,0 +1,228 @@
+% see mathml, == \defineXMLdirective [mathml] \setupMMLappearance
+
+% will be rewritten avoiding the mapper
+
+\useXMLfilter[map]
+
+\unprotect
+
+\def\setupCMLappearance[#1]{\dodoubleargument\getparameters[@@CML#1]}
+
+\defineXMLdirective [chemml] \setupCMLappearance
+
+\defineXMLargument [chem]  \doXMLchem
+\defineXMLargument [ichem] \doXMLichem
+\defineXMLargument [dchem] \doXMLdchem
+
+\unexpanded\def\doXMLchem {\ifhmode\@EA\doXMLichem\else\@EA\doXMLdchem\fi}
+\unexpanded\def\doXMLichem{\XMLremapdata[cml]{$\rm}{$}}
+\unexpanded\def\doXMLdchem{\XMLremapdata[cml]{\dostartformula{}\rm}{\dostopformula}}
+
+\startXMLmapping [cml]
+
+\remapXMLsequence [molecule] [CPA] \doCMLmolecule
+\remapXMLsequence [ion]      [CPA] \doCMLion
+\remapXMLsequence [atom]     [CPA] \doCMLatom
+
+\setupCMLappearance [ion] [\c!alternative=\v!a]
+
+\let\CMLtopcaption\empty
+\let\CMLbotcaption\empty
+
+\def\someCMLtext#1%
+  {\ifx\CMLtopcaption\empty
+     \setbox0\null
+   \else
+     \setbox0\hbox{\txx\setstrut\strut\ignorespaces\CMLtopcaption\unskip}%
+   \fi
+   \setbox2\hbox{\ignorespaces\strut#1\unskip}%
+   \ifx\CMLbotcaption\empty
+     \setbox4\null
+   \else
+     \setbox4\hbox{\txx\setstrut\strut\ignorespaces\CMLbotcaption\unskip}%
+   \fi
+   \scratchdimen=\wd2\advance\scratchdimen-.5em
+   \ifdim\wd0>\scratchdimen
+     \setbox0\hbox spread .5em{\hss\box0\hss}%
+   \fi
+   \ifdim\wd4>\scratchdimen
+     \setbox4\hbox spread .5em{\hss\box4\hss}%
+   \fi
+   \setbox6=\vbox
+     {\offinterlineskip\halign{\hss##\hss\cr\copy0\cr\copy2\cr\copy4\cr}}%
+   \hbox{\lower\ht4\hbox{\lower\dp2\box6}}}
+
+\def\CMLscript#1%
+  {$\scriptscriptstyle\ignorespaces#1\unskip$}
+
+\def\doifnotXMLzero#1#2#3%
+  {\ifcase\XMLpar{#1}{#2}{0}\else#3{\XMLpar{#1}{#2}{0}}\fi}
+
+\newcounter\currentCMLatom
+\newcounter\nofCMLatoms
+
+\def\doCMLmolecule#1#2%
+  {\resetCMLcaption
+   \processXMLRchild{caption}{#2}%
+   \someCMLtext
+     {\bgroup
+      \newcounter\currentCMLatom
+      \newcounter\nofCMLatoms
+      \getXMLarguments{cml-m}{n="0" #1}%
+      \doifnotXMLzero{cml-m}{n}\firstofoneargument
+      \ignorespaces
+      \processXMLRchild{atom,ion,bond/,singlebond/,doublebond/,triplebond/}{#2}%
+      \unskip
+      \egroup}%
+   \ignorespaces}
+
+\def\doCMLion#1#2%
+  {\resetCMLcaption
+   \processXMLRchild{caption}{#2}%
+   \someCMLtext
+     {\bgroup
+      \newcounter\currentCMLatom
+      \newcounter\nofCMLatoms
+      \getXMLarguments{cml-i}{n="0" charge="0" #1}%
+      \doifnotXMLzero{cml-i}{n}\firstofoneargument
+      \doifelse\@@CMLionalternative\v!b
+        {[\ignorespaces
+          \processXMLRchild{atom,bond/,singlebond/,doublebond/,triplebond/}{#2}%
+          \unskip]%
+         \high{\doifnotXMLzero{cml-i}{charge}\CMLscript}}
+        {\countXMLRchild{atom}{\ignorespaces#2\unskip}%
+         \let\nofCMLatoms\nofXMLRchildren
+         \ignorespaces
+         \processXMLRchild{atom,bond/,singlebond/,doublebond/,triplebond/}{#2}%
+         \unskip}%
+      \egroup}%
+   \ignorespaces}
+
+\def\doCMLatom#1#2%
+  {\getXMLarguments{cml-a}{n="0" weight="0" protons="0" charge="0" #1}%
+   \increment\currentCMLatom
+   \resetCMLcaption
+   \someCMLtext
+     {\bgroup
+      \lohi
+        {\doifnotXMLzero{cml-a}{protons}\CMLscript}
+        {\doifnotXMLzero{cml-a}{weight}\CMLscript}%
+      \ignorespaces#2\unskip
+      \lohi
+        {\doifnotXMLzero{cml-a}{n}\CMLscript}
+        {\ifnum\nofCMLatoms=\currentCMLatom\relax
+           \doifnotXMLzero{cml-i}{charge}\CMLscript
+         \else
+           \doifnotXMLzero{cml-a}{charge}\CMLscript
+         \fi}%
+      \egroup}%
+   \ignorespaces}
+
+\remapXMLsequence [reaction] [CPA] \doCMLreaction
+
+\let\someCMLsymbol\gobbleoneargument
+\let\someCMLarrow \gobblethreearguments
+
+\def\doCMLreaction#1#2%
+  {\begingroup
+   \let\someCMLsymbol\dosomeCMLsymbol
+   \let\someCMLarrow \dosomeCMLarrow
+   #2%
+   \endgroup}
+
+\remapXMLsequence [plus]  [CPA] \doCMLplus
+\remapXMLsingular [plus]  [CPA] \doCMLplus
+\remapXMLsequence [minus] [CPA] \doCMLminus
+\remapXMLsingular [minus] [CPA] \doCMLminus
+\remapXMLsequence [equal] [CPA] \doCMLequal
+\remapXMLsingular [equal] [CPA] \doCMLequal
+
+\def\doCMLplus #1#2{\someCMLsymbol{+}}
+\def\doCMLminus#1#2{\someCMLsymbol{-}}
+\def\doCMLequal#1#2{\someCMLsymbol{=}}
+
+\def\dosomeCMLsymbol#1%
+  {\quad\mathop{#1}\quad}
+
+\remapXMLsequence [gives]       [CPA] \doCMLgives
+\remapXMLsingular [gives]       [CPA] \doCMLgives
+\remapXMLsequence [equilibrium] [CPA] \doCMLequilibrium
+\remapXMLsingular [equilibrium] [CPA] \doCMLequilibrium
+\remapXMLsequence [mesomeric]   [CPA] \doCMLmesomeric
+\remapXMLsingular [mesomeric]   [CPA] \doCMLmesomeric
+
+\def\doCMLgives      #1#2{\resetCMLcaption#2\someCMLgives      }
+\def\doCMLequilibrium#1#2{\resetCMLcaption#2\someCMLequilibrium}
+\def\doCMLmesomeric  #1#2{\resetCMLcaption#2\someCMLmesomeric  }
+
+\def\dosomeCMLarrow#1%
+  {\quad
+   \someCMLtext
+     {$\vcenter{\offinterlineskip\halign{##\cr\hskip3em\cr#1\cr}}$}%
+   \quad}
+
+\def\someCMLgives
+  {\someCMLarrow{\rightarrowfill}}
+
+\def\someCMLequilibrium
+  {\someCMLarrow{\rightarrowfill\cr\noalign{\nointerlineskip}\leftarrowfill}}
+
+\def\someCMLmesomeric
+  {\someCMLarrow{$\leftarrow\hskip-1em$\rightarrowfill}}
+
+\remapXMLsequence [cml] [caption] [CPA] \doCMLcaption
+
+\let\CMLtopcaption\empty
+\let\CMLbotcaption\empty
+
+\def\dodoCMLcaption#1#2%
+  {\def\CMLbotcaption{#2}%
+   \def\doCMLcaption##1##2%
+     {\def\CMLtopcaption{##2}%
+      \let\doCMLcaption\gobbletwoarguments}}
+
+\def\resetCMLcaption
+  {\let\CMLtopcaption\empty
+   \let\CMLbotcaption\empty
+   \let\doCMLcaption\dodoCMLcaption}
+
+\resetCMLcaption
+
+\remapXMLsingular [bond]       [CPA] \doCMLbond
+\remapXMLsingular [singlebond] [CPA] \doCMLsinglebond
+\remapXMLsingular [doublebond] [CPA] \doCMLdoublebond
+\remapXMLsingular [triplebond] [CPA] \doCMLtriplebond
+
+\def\doCMLbond#1#2%
+  {\getXMLarguments{cml-b}{n="0" #1}%
+   \ifcase\XMLpar{cml-b}{n}{0}\relax
+     \doCMLsinglebond
+   \or
+     \doCMLdoublebond
+   \or
+     \doCMLtriplebond
+   \fi}
+
+\def\someCMLbond
+  {\hrule \!!width \hsize \!!height .1ex} % .4pt
+
+\def\dosomeCMLbond#1#2#3%
+  {{\setbox\scratchbox=\hbox{$M$}%
+    \vbox to \ht\scratchbox
+      {\hsize\wd\scratchbox
+       \vskip.1\wd\scratchbox
+       #1\vfill#2\vfill#3%
+       \vskip.1\wd\scratchbox}}}
+
+\def\doCMLsinglebond
+  {\dosomeCMLbond\relax\someCMLbond\relax}
+
+\def\doCMLdoublebond
+  {\dosomeCMLbond\someCMLbond\relax\someCMLbond}
+
+\def\doCMLtriplebond
+  {\dosomeCMLbond\someCMLbond\someCMLbond\someCMLbond}
+
+\stopXMLmapping
+
+\protect \endinput
-- 
cgit v1.2.3

