summaryrefslogtreecommitdiff
path: root/tex/context/base/mkii/xtag-exp.mkii
blob: 9ecfcc5b12446f15e650d7485e1f891724f57a61 (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
86
87
88
89
90
%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 ADE \& \CONTEXT\ Development Team}]
%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}

\ifnum\texengine=\luatexengine \endinput \fi

\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