summaryrefslogtreecommitdiff
path: root/tex/context/base/xtag-exp.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/xtag-exp.tex')
-rw-r--r--tex/context/base/xtag-exp.tex88
1 files changed, 88 insertions, 0 deletions
diff --git a/tex/context/base/xtag-exp.tex b/tex/context/base/xtag-exp.tex
new file mode 100644
index 000000000..337b49348
--- /dev/null
+++ b/tex/context/base/xtag-exp.tex
@@ -0,0 +1,88 @@
+%D \module
+%D [ file=xtag-exp,
+%D version=2001.08.20,
+%D title=\CONTEXT\ XML Macros,
+%D subtitle=Expansion,
+%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.
+
+\writestatus{loading}{ConTeXt XML Macros / Expansion}
+
+\unprotect
+
+%D Files
+
+\newcounter\XMLfilenesting \let\restoreXMLelements\relax
+
+\def\startXMLreading
+ {\increment \XMLfilenesting \relax
+ \ifcase\XMLfilenesting\or
+ \ifprocessingXML
+ \let\restoreXMLelements\relax
+ \else
+ \let\restoreXMLelements\disableXMLelements
+ \enableXMLelements
+ \fi
+ \fi}
+
+\def\stopXMLreading
+ {\ifcase\XMLfilenesting\or
+ \restoreXMLelements
+ \let\restoreXMLelements\relax
+ \fi
+ \decrement \XMLfilenesting \relax}
+
+\ifnum\texengine=\luatexengine
+ \def\enableXMLfiledata
+ {\prependtoks \enableXMLelements \to \mainoutput % brrr, will change
+ \appendtoks \forcefileexpansiontrue \to \everyenableXML
+ \let\enableXMLfiledata\relax}
+\else
+ \def\enableXMLfiledata
+ {\prependtoks \enableXMLelements \to \mainoutput % brrr, will change
+ \appendtoks \startXMLreading \to \everybeforeutilityread
+ \appendtoks \stopXMLreading \to \everyafterutilityread
+ \appendtoks \forcefileexpansiontrue \to \everyenableXML
+ \let\enableXMLfiledata\relax}
+\fi
+
+\setupXMLprocessing[\c!state=\v!start]
+
+\appendtoks
+ \ifproductionrun \enableXMLfiledata \fi
+\to \aftersetupXMLprocessing
+
+%D Here we overload the mark handler.
+
+\ifnum\texengine=\luatexengine \else
+
+ \def\XMLexpanded#1%
+ {\bgroup
+ \honorunexpanded
+ \dontexpandencoding
+ \xdef\@@globalexpanded{\noexpand#1}% why \noexpand?
+ \egroup
+ \@@globalexpanded}
+
+ \let\normalsetnormalmark\setnormalmark
+
+ \long\def\setnormalmark#1% overloaded
+ {\ifprocessingXML
+ \expandafter\setXMLexpandedmark
+ \else
+ \expandafter\normalsetnormalmark
+ \fi#1}
+
+ \def\setXMLexpandedmark#1#2% using a tok prevents unwanted expansion in mark
+ {\XMLexpanded{\scratchtoks{\enableXMLelements#2}}%
+ \setxvalue{\@@crk\string#1}{\the\scratchtoks}%
+ \normalmarks#1{\the\scratchtoks}}
+
+\fi
+
+\protect \endinput