summaryrefslogtreecommitdiff
path: root/tex/context/base/xtag-exp.tex
blob: fbcaf07f4eebe98cffb4b235d5cc0915c7f40251 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
%D \module
%D   [       file=xtag-exp,
%D        version=2001.08.20,
%D          title=\CONTEXT\ XML Support,
%D       subtitle=Expansion Related Things,
%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}
  \def\startXMLdefinitions{\gobbleuntil\stopXMLdefinitions}
  \endinput
\endTEX

\writestatus{loading}{Context XML Macros (expansion)}

\unprotect

%D Files

\newcounter\XMLfilenesting \let\restoreXMLelements\relax

\def\startXMLreading
  {\increment \XMLfilenesting \relax
   \ifnum\XMLfilenesting=1
%\ifcase\XMLfilenesting\or
     \ifprocessingXML
       \let\restoreXMLelements\relax
     \else
       \let\restoreXMLelements\disableXMLelements
       \enableXMLelements
     \fi
   \fi}

\def\stopXMLreading
  {\ifnum\XMLfilenesting=1
%\ifcase\XMLfilenesting\or
     \restoreXMLelements
     \let\restoreXMLelements\relax
   \fi
   \decrement \XMLfilenesting \relax}

\def\enableXMLfiledata
  {\prependtoks \enableXMLelements      \to \mainoutput % brrr, will change
   \appendtoks  \startXMLreading        \to \everybeforeutilityread
   \appendtoks  \stopXMLreading         \to \everyafterutilityread
   \appendtoks  \forcefileexpansiontrue \to \everyenableXML
   \let\enableXMLfiledata\relax}

\setupXMLprocessing[\c!state=\v!start]

\appendtoks
  \ifproductionrun \enableXMLfiledata \fi
\to \aftersetupXMLprocessing

%D Here we overload the mark handler.

\def\XMLexpanded#1%
  {\bgroup
   \honorunexpanded
   \dontexpandencoding
   \xdef\@@globalexpanded{\noexpand#1}%
   \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}}

\protect \endinput