summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/xtag-ext.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/xtag-ext.tex')
-rw-r--r--Master/texmf-dist/tex/context/base/xtag-ext.tex331
1 files changed, 331 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/xtag-ext.tex b/Master/texmf-dist/tex/context/base/xtag-ext.tex
new file mode 100644
index 00000000000..aa522cc8c9b
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/xtag-ext.tex
@@ -0,0 +1,331 @@
+%D \module
+%D [ file=xtag-ext,
+%D version=2001.03.21,
+%D title=\CONTEXT\ XML Support,
+%D subtitle=Extra Macros,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / 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.
+
+\beginTEX
+ \writestatus{xml}{sorry, xml is only supported in (pdf)etex}
+ \expandafter \endinput
+\endTEX
+
+\writestatus{loading}{Context XML Macros (extras)}
+
+\unprotect
+
+%D \macros
+%D {startXMLmapping}
+%D
+%D You can define macros within a namespace, so that they
+%D will not conflict (don't confuse this with \XML\
+%D namespaces.)
+%D
+%D \starttyping
+%D \startXMLmapping [tag] | [-] [tag] | [+] [tag]
+%D definitions
+%D \stopXMLmapping
+%D \stoptyping
+%D
+%D When a \type {[+]} is specified, the mappings will
+%D nest.
+
+\let\normal@@XMLelement\@@XMLelement
+
+\def\resetXMLmapping
+ {\let\@@XMLelement\normal@@XMLelement
+ \let\@@XMLmapping\empty}
+
+\resetXMLmapping
+
+\def\startXMLmapping
+ {\dodoubleempty\dostartXMLmapping}
+
+% \def\dostartXMLmapping[#1][#2]% sneller maken
+% {\pushmacro\@@XMLelement
+% \pushmacro\@@XMLmapping
+% \ifsecondargument
+% \doifelse{#1}{-}
+% {\donostartXMLmapping{#2}}
+% {\doifelse{#1}{+}
+% {\dodostartXMLmapping{#2}}
+% {\donostartXMLmapping{#2}}}%
+% \else
+% \donostartXMLmapping{#1}%
+% \fi
+% \unprotect}
+
+\def\dostartXMLmapping[#1#2][#3]%
+ {\pushmacro\@@XMLelement
+ \pushmacro\@@XMLmapping
+ \ifsecondargument
+ \if\noexpand#1-%
+ \@EA\donostartXMLmapping
+ \else\if\noexpand#1+%
+ \@EAEAEA\dodostartXMLmapping
+ \else
+ \@EAEAEA\donostartXMLmapping
+ \fi\fi{#3}%
+ \else
+ \donostartXMLmapping{#1#2}%
+ \fi
+ \unprotect}
+
+\def\donostartXMLmapping#1%
+ {\let\@@XMLprevelement\@@XMLelement
+ \edef\@@XMLmapping{#1}%
+ \edef\@@XMLelement{\normal@@XMLelement+#1}}
+
+\def\dodostartXMLmapping#1%
+ {\let\@@XMLprevelement\@@XMLelement
+ \edef\@@XMLmapping{\@@XMLmapping+#1}%
+ \edef\@@XMLelement{\@@XMLelement+#1}}
+
+\def\stopXMLmapping
+ {\protect
+ \popmacro\@@XMLmapping
+ \popmacro\@@XMLelement}
+
+%D \macros
+%D {startXMLmappinggroup}
+%D
+%D Imagine something:
+%D
+%D \starttyping
+%D \defineXMLenvironment [something]
+%D {\startXMLmapping[whatever]}
+%D {\stopXMLmapping}
+%D \stoptyping
+%D
+%D Here the \type {\stopXMLmapping} will never be reached
+%D because we are in a mapping. Therefore we need:
+
+\def\startXMLmappinggroup
+ {\dodoubleempty\dostartXMLmappinggroup}
+
+\def\dostartXMLmappinggroup[#1][#2]%
+ {\bgroup
+ \letcscsname\savedXMLmeaning\csname\@@XMLelement:/\currentXMLelement\endcsname
+ \dostartXMLmapping[#1][#2]% do ! else wrong !
+ \letcsnamecs\csname\@@XMLelement:/\currentXMLelement\endcsname\savedXMLmeaning}
+
+\def\stopXMLmappinggroup
+ {\stopXMLmapping
+ \egroup}
+
+%D Context Directives:
+
+\def\@@CTXML{@@CTXML}
+
+\def\defineXMLdirective
+ {\dodoubleempty\dodefineXMLdirective}
+
+\long\def\dodefineXMLdirective[#1][#2]#3%
+ {\defineXMLprocessor[context-#1-directive]{\dohandleXMLdirective{#1}{#3}}%
+ \ifsecondargument
+ \long\setvalue{\@@CTXML-#1-#2}{#3}%
+ \fi}
+
+\def\dohandleXMLdirective#1#2#3%
+ {\dodohandleXMLdirective#3 @ @ @\end{#1}{#2}}
+
+%\def\dodohandleXMLdirective#1 #2 #3 #4\end#5#6%
+% {\doifdefinedelse{\@@CTXML-#5-#1}
+% {\getvalue{\@@CTXML-#5-#1}[#2=#3]}
+% {#6[#1][#2=#3]}}
+
+\def\dodohandleXMLdirective#1 #2 #3 #4\end#5#6%
+ {\executeifdefined{\@@CTXML-#5-#1}{#6[#1]}[#2=#3]}
+
+% \defineXMLdirective [mathml] \setupMMLappearance % [#1][#2=#3]
+% \defineXMLdirective [flowchart] [shapes] \setupFLOWshapes % [#2=#3]
+% \defineXMLdirective [flowchart] [lines] \setupFLOWlines % [#2=#3]
+
+\defineXMLprocessor [context-begin-group] {\bgroup\gobbleoneargument}
+\defineXMLprocessor [context-end-group] {\egroup\gobbleoneargument}
+
+% \def\XMLnspart#1:#2\empty{#1} % call ...:\empty\empty
+% \def\XMLidpart#1:#2#3\empty{\ifx#2\empty#1\else\XMLidpart#2#3\empty\empty\fi}
+
+% trial macros (used in setupx), to be sped up !
+
+\bgroup \catcode`\<=\active
+
+\gdef\saveXMLasdata#1#2% name raw data
+ {\dodoglobal\setevalue{\@@XMLsave:#1}{#2}} % \edef!
+
+\gdef\saveXMLdata#1#2% name data-name ; definitely no \edef
+ {\dodoglobal\copycsname\@@XMLsave:#1\endcsname\csname\@@XMLdata:#2\endcsname}
+
+\gdef\saveXMLdatainelement#1#2#3% name element data
+ {\dodoglobal\setevalue{\@@XMLsave:#1}% todo: one level expansion
+ {<#2 \currentXMLarguments>\XMLflush{#3}</#2>}}
+
+\gdef\saveXMLdatastructure#1#2#3#4#5#6% name element args before data after
+ {\dodoglobal\setevalue{\@@XMLsave:#1}% todo: one level expansion
+ {<#2 #3 \currentXMLarguments>#4\XMLflush{#5}#6</#2>}}
+
+\gdef\gsaveXMLasdata {\doglobal\saveXMLasdata}
+\gdef\gsaveXMLdata {\doglobal\saveXMLdata}
+\gdef\gsaveXMLdatainelement{\doglobal\saveXMLdatainelement}
+\gdef\gsaveXMLdatastructure{\doglobal\saveXMLdatastructure}
+
+\gdef\doifelseXMLelement#1%
+ {\doifdefinedelse{\@@XMLsave:#1}}
+
+\gdef\doifelseXMLelementcontent#1%
+ {\ifcsname\@@XMLsave:#1\endcsname
+ \bgroup
+ \@EA\convertcommand\csname\@@XMLsave:#1\endcsname\to\ascii
+ \setbox\scratchbox\hbox{\ignorespaces\ascii\unskip\unskip\unskip}%
+ \ifdim\wd\scratchbox>\zeropoint
+ \egroup\@EAEAEA\firstoftwoarguments
+ \else
+ \egroup\@EAEAEA\secondoftwoarguments
+ \fi
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\gdef\doifelseXMLelementequals#1#2%
+ {\ifcsname\@@XMLsave:#1\endcsname
+ \bgroup
+ \@EA\convertcommand\csname\@@XMLsave:#1\endcsname\to\asciia
+ \convertargument#2\to\asciib
+ \ifx\asciia\asciib
+ \egroup\@EAEAEA\firstoftwoarguments
+ \else
+ \egroup\@EAEAEA\secondoftwoarguments
+ \fi
+ \else
+ \@EA\secondoftwoarguments
+ \fi}
+
+\gdef\doifXMLtextelse#1% new
+ {\doiftextelse{\simplifyXMLelements#1}}
+
+\gdef\doifXMLtext#1#2% new
+ {\doiftextelse{\simplifyXMLelements#1}{#2}\donothing}
+
+\gdef\convertXMLelement#1\to#2%
+ {\ifcsname\@@XMLsave:#1\endcsname
+ \@EA\convertcommand\csname\@@XMLsave:#1\endcsname\to#2%
+ \else
+ \let#2\ascii
+ \fi}
+
+\gdef\flushXMLelement#1%
+ {\csname
+ \@@XMLsave:\ifcsname\@@XMLsave:#1\endcsname#1\else\@@XMLsave\fi
+ \endcsname}
+
+\letgvalueempty{\@@XMLsave:\@@XMLsave}
+
+\gdef\showXMLelement#1%
+ {\showvalue{\@@XMLsave:#1}}
+
+\gdef\eraseXMLelement#1%
+ {\dodoglobal\letbeundefined{\@@XMLsave:#1}}
+
+\gdef\geraseXMLelement
+ {\doglobal\eraseXMLelement}
+
+\gdef\processXMLelement#1%
+ {\bgroup
+ \enableXMLelements
+ \getvalue{\@@XMLsave:#1}%
+ \egroup}
+
+\gdef\texXMLelement#1%
+ {\begingroup
+% \setnormalcatcodes
+ \disableXML
+ \scantokens\@EA\@EA\@EA{\csname\@@XMLsave:#1\endcsname}%
+ \endgroup}
+
+\gdef\reduceXMLescapeentities
+ {\setXMLentity{amp}{\string&}%
+ \setXMLentity{lt}{\string<}%
+ \setXMLentity{gt}{\string>}%
+ \setXMLentity{quot}{\string'}%
+ \setXMLentity{dquot}{\string"}}
+
+\gdef\reduceXMLelement#1\to#2%
+ {\ifcsname\@@XMLsave:#1\endcsname
+ \bgroup
+ \reduceXMLescapetokens
+ \reduceXMLescapeentities
+ \expanded{\egroup\noexpand\def\noexpand#2{\csname\@@XMLsave:#1\endcsname}}%
+ \else
+ \let#2\empty
+ \fi}
+
+\egroup
+
+\def\potentialXMLentity#1%
+ {\doifXMLentityelse{#1}{\getXMLentity{#1}}{#1}}
+
+% \def\XMLnoschema{standalone='yes'}
+
+\def\writtenXMLelement #1#2{<#1>#2</#1>}
+\def\writtenXMLstart #1{<#1>}
+\def\writtenXMLend #1{</#1>}
+\def\writtenXMLempty #1{<#1/>}
+\def\writtenXMLelementcs#1#2{\ifx#2\empty\else<#1>#2</#1>\fi}
+\def\writtenXMLemptycs #1#2{\ifx#2\empty<#1/>\else<#1>#2</#1>\fi}
+
+%D This one can be used to get sound tuo files.
+%D
+%D \starttyping
+%D \setuphead[chapter][expansion=xml]
+%D % \setuplist[chapter][textcommand=\enableXML]
+%D
+%D \enableregime[utf] \autoXMLentitiestrue
+%D \stoptyping
+%D
+%D with:
+%D
+%D \starttyping
+%D <chapter>test &#xEB; test &ediaeresis; test <e>ediaeresis</e></chapter>
+%D \stoptyping
+%D
+%D This gives:
+%D
+%D \starttyping
+%D test Äk <b>test</b> <e>ediaeresis</e> test <e>ediaeresis</e>
+%D \stoptyping
+
+\def\XMLprocessingparameter#1%
+ {\csname\??xp#1\endcsname}
+
+\appendtoks
+ \defineXMLargument[\XMLprocessingparameter\c!escape]\getXMlentity
+\to \aftersetupXMLprocessing
+
+\setupXMLprocessing
+ [\c!escape=e]
+
+\bgroup \catcode`\<=\active
+
+\long\gdef\expandxmlargument#1\to
+ {\begingroup
+ \let\uppercase\firstofoneargument
+ \def\getXMLhexcharacter##1{\numbertoutf{"##1}}%
+ \def\getXMLdeccharacter##1{\numbertoutf{##1}}%
+ \def\getXMLentity##1{<e>##1</e>}%
+ \def<{\noexpand<}%
+ \xdef\@@globalexpanded{#1}%
+ \endgroup
+ \convertcommand\@@globalexpanded\to}
+
+\egroup
+
+\installexpander \v!xml {\expandxmlargument}
+
+\protect \endinput