summaryrefslogtreecommitdiff
path: root/tex/context/base/x-chemml.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/x-chemml.tex')
-rw-r--r--tex/context/base/x-chemml.tex212
1 files changed, 212 insertions, 0 deletions
diff --git a/tex/context/base/x-chemml.tex b/tex/context/base/x-chemml.tex
new file mode 100644
index 000000000..8475fe81a
--- /dev/null
+++ b/tex/context/base/x-chemml.tex
@@ -0,0 +1,212 @@
+%D \module
+%D [ file=m-chemml,
+%D version=2001.09.12,
+%D title=\CONTEXT\ XML Modules,
+%D subtitle=Loading \CHEMML\ Filters,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\useXMLfilter[cml]
+
+%D Structural formulas are codes in a \PPCHTEX\ way; this
+%D will change -)
+%D
+%D \startbuffer
+%D <dchem>
+%D <structure>
+%D <component>
+%D <graphic>SIX,B</graphic>
+%D <graphic>R135</graphic>
+%D </component>
+%D <component>
+%D <graphic>R246</graphic>
+%D </component>
+%D <component>
+%D <graphic>RZ</graphic>
+%D <text>A,B,C,D,E,F</text>
+%D </component>
+%D <component>
+%D <graphic>Z</graphic>
+%D <oxidation n="3">A</oxidation>
+%D <text>A</text>
+%D <annotation location="t">
+%D <text>B</text>
+%D <caption>x<context:b>x<context:compound token="*"/>x</context:b>x</caption>
+%D </annotation>
+%D <oxidation n="3" sign="+">B</oxidation>
+%D <text>C,D,E,F</text>
+%D </component>
+%D </structure>
+%D <structure>
+%D <component>
+%D <graphic>SIX,B</graphic>
+%D <graphic>r135</graphic>
+%D </component>
+%D <component>
+%D <graphic>R246</graphic>
+%D </component>
+%D <component>
+%D <graphic>RZ</graphic>
+%D <text>A,B,C,D,E,F</text>
+%D </component>
+%D </structure>
+%D </dchem>
+%D \stopbuffer
+%D
+%D \typebuffer
+
+% \ifx\XMLgtoks\undefined \newtoks\XMLgtoks \fi
+% \ifx\XMLttoks\undefined \newtoks\XMLttoks \fi
+%
+% \defineXMLenvironment [structure]
+% {\startchemical\ignorespaces}
+% {\relax\stopchemical}
+%
+% \def\chemicalXMLg#1% \defineXMLcollect [graphic] \XMLgtoks
+% {\doifelsenothing{\the\XMLgtoks}
+% {\doglobal\appendtoks #1\to\XMLgtoks\ignorespaces}
+% {\doglobal\appendtoks,#1\to\XMLgtoks\ignorespaces}}
+%
+% \def\chemicalXMLt#1%
+% {\doifelsenothing{\the\XMLttoks}
+% {\doglobal\appendtoks #1\to\XMLttoks\ignorespaces}
+% {\doglobal\appendtoks,#1\to\XMLttoks\ignorespaces}}
+%
+% \defineXMLenvironment [component] [type=]
+% {\global\XMLgtoks\emptytoks
+% \global\XMLttoks\emptytoks
+% \defineXMLargument[graphic]\chemicalXMLg
+% \defineXMLargument[text]\chemicalXMLt
+% \ignorespaces}
+% {\expanded{\chemical[\the\XMLgtoks][\the\XMLttoks]}%
+% \ignorespaces}
+%
+% \defineXMLargument [oxidation] [sign=,n=1] \chemicalXMLo % +/- 1..7
+%
+% \def\chemicalXMLo#1%
+% {\expanded{\chemicalXMLt
+% {\noexpand\chemicaloxidation{\XMLop{sign}}{\XMLop{n}}{#1}}}%
+% \ignorespaces}
+%
+% \defineXMLenvironment [annotation] [location=]
+% {\bgroup
+% \defineXMLenvironmentsave[text]{\ignorespaces}{\ignorespaces}%
+% \defineXMLenvironmentsave[caption]{\ignorespaces}{\ignorespaces}%
+% \ignorespaces}
+% {\scratchtoks{\chemicalright}%
+% \processaction
+% [\XMLop{location}]
+% [ t=>\scratchtoks{\chemicaltop},
+% b=>\scratchtoks{\chemicalbottom},
+% l=>\scratchtoks{\chemicalleft},
+% r=>\scratchtoks{\chemicalright},
+% lc=>\scratchtoks{\chemicalleftcentered},
+% rc=>\scratchtoks{\chemicalrightcentered},
+% tl=>\scratchtoks{\chemicaltopleft},
+% bl=>\scratchtoks{\chemicalbottomleft},
+% tr=>\scratchtoks{\chemicaltopright},
+% br=>\scratchtoks{\chemicalbottomright},
+% lt=>\scratchtoks{\chemicallefttop},
+% lb=>\scratchtoks{\chemicalleftbottom},
+% rt=>\scratchtoks{\chemicalrighttop},
+% rb=>\scratchtoks{\chemicalrightbottom},
+% x=>\scratchtoks{\chemicaltighttext},
+% sl=>\scratchtoks{\chemicalsmashedleft},
+% sm=>\scratchtoks{\chemicalsmashedmiddle},
+% sr=>\scratchtoks{\chemicalsmashedright}]%
+% \expanded{\chemicalXMLt
+% {\the\scratchtoks{\XMLflush{text}}{\XMLflush{caption}}}}%
+% \egroup
+% \ignorespaces}
+%
+% \defineXMLenvironment [forever]
+% {\chemicalXMLt{\[}\ignorespaces}
+% {\chemicalXMLt{\]}\ignorespaces}
+
+\ifx\XMLgtoks\undefined \newtoks\XMLgtoks \fi
+\ifx\XMLttoks\undefined \newtoks\XMLttoks \fi
+
+\startXMLmapping [cml]
+
+% this will be a more natural method; this also triggers it
+
+\installXMLunknownremapping
+
+% extensions
+
+\remapXMLsequence [structure] [CPA] \doCMLstructure
+\remapXMLsequence [component] [CPA] \doCMLcomponent
+\remapXMLsequence [graphic] [CPA] \doCMLgraphic
+\remapXMLsequence [text] [CPA] \doCMLtext
+
+\remapXMLsequence [caption] [CPA] \doCMLcaption
+\remapXMLsequence [oxidation] [CPA] \doCMLoxidation
+\remapXMLsequence [annotation][CPA] \doCMLannotation
+\remapXMLsequence [forever] [CPA] \doCMLforever
+
+\def\doCMLstructure#1#2%
+ {\startchemical\ignorespaces#2\unskip\stopchemical}
+
+\def\doCMLgraphic#1#2%
+ {\doifelsenothing{\the\XMLgtoks}
+ {\uppercase{\doglobal\appendtoks #2\to\XMLgtoks\ignorespaces}}
+ {\uppercase{\doglobal\appendtoks,#2\to\XMLgtoks\ignorespaces}}%
+ \ignorespaces}
+
+\def\doCMLtext#1#2%
+ {\doifelsenothing{\the\XMLttoks}
+ {\doglobal\appendtoks #2\to\XMLttoks\ignorespaces}
+ {\doglobal\appendtoks,#2\to\XMLttoks\ignorespaces}%
+ \ignorespaces}
+
+\def\doCMLcomponent#1#2%
+ {\global\XMLgtoks\emptytoks
+ \global\XMLttoks\emptytoks
+ \ignorespaces#2\unskip
+ \expanded{\chemical[\the\XMLgtoks][\the\XMLttoks]}%
+ \ignorespaces}
+
+\def\doCMLannotation#1#2%
+ {\getXMLarguments{cml}{location="" #1}%
+ \def\dodoCMLannotation##1%
+ {\doCMLtext\empty{##1%
+ {\let\doCMLtext \secondoftwoarguments\processXMLRchild{text}{#2}}%
+ {\let\doCMLcaption\unmapXMLdata \processXMLRchild{caption}{#2}}}}%
+ \processaction
+ [\XMLpar{cml}{location}{r}]
+ [ t=>\dodoCMLannotation\chemicaltop,
+ b=>\dodoCMLannotation\chemicalbottom,
+ l=>\dodoCMLannotation\chemicalleft,
+ r=>\dodoCMLannotation\chemicalright,
+ lc=>\dodoCMLannotation\chemicalleftcentered,
+ rc=>\dodoCMLannotation\chemicalrightcentered,
+ tl=>\dodoCMLannotation\chemicaltopleft,
+ bl=>\dodoCMLannotation\chemicalbottomleft,
+ tr=>\dodoCMLannotation\chemicaltopright,
+ br=>\dodoCMLannotation\chemicalbottomright,
+ lt=>\dodoCMLannotation\chemicallefttop,
+ lb=>\dodoCMLannotation\chemicalleftbottom,
+ rt=>\dodoCMLannotation\chemicalrighttop,
+ rb=>\dodoCMLannotation\chemicalrightbottom,
+ x=>\dodoCMLannotation\chemicaltighttext,
+ sl=>\dodoCMLannotation\chemicalsmashedleft,
+ sm=>\dodoCMLannotation\chemicalsmashedmiddle,
+ sr=>\dodoCMLannotation\chemicalsmashedright]%
+ \ignorespaces}
+
+\def\doCMLoxidation#1#2%
+ {\getXMLarguments{cml}{sign="" n="1" #1}%
+ \expanded{\doCMLtext{}%
+ {\noexpand\chemicaloxidation{\XMLpar{cml}{sign}{}}{\XMLpar{cml}{n}{}}{#2}}}%
+ \ignorespaces}
+
+\def\doCMLforever#1#2{\[#2\]}
+
+\stopXMLmapping
+
+\endinput