summaryrefslogtreecommitdiff
path: root/tex/context/base/xtag-ext.tex
blob: 9bf9f89a9e5f90aaefb67a8c64d6f1678a35f37c (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
91
92
93
94
95
96
97
98
99
100
101
%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  {startXMLnamespace}
%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 \starttypen
%D \startXMLnamespace [tag] | [-] [tag] | [+] [tag]
%D   definitions 
%D \stopXMLnamespace 
%D \stoptypen 
%D 
%D When a \type {[+]} is specified, the namespaces will 
%D nest.  

\let\normal@@XMLelement\@@XMLelement
\let\XMLnamespace\empty

\def\startXMLnamespace%
  {\dodoubleempty\dostartXMLnamespace}

\def\dostartXMLnamespace[#1][#2]%
  {\pushmacro\@@XMLelement
   \pushmacro\@@XMLnamespace
   \ifsecondargument
     \doifelse{#1}{-}
       {\donostartXMLnamespace{#1}}
       {\doifelse{#1}{+}
          {\dodostartXMLnamespace{#1}{#2}}
          {\donostartXMLnamespace{#1}}}%
   \else
     \donostartXMLnamespace{#1}%
   \fi
   \unprotect}

\def\donostartXMLnamespace#1%
  {\edef\XMLnamespace{#1}%
   \let\@@XMLelement\normal@@XMLelement}

\def\dodostartXMLnamespace#1#2%
  {\edef\XMLnamespace{\XMLnamespace:#2}%
   \edef\@@XMLelement{\@@XMLelement:#2}}

\def\stopXMLnamespace%
  {\protect
   \popmacro\@@XMLnamespace
   \popmacro\@@XMLelement}

%D Context Directives: 

\def\@@CTXML{@@CTXML}

\def\defineXMLdirective%
  {\dodoubleempty\dodefineXMLdirective}

\def\dodefineXMLdirective[#1][#2]#3%
  {\defineXMLprocessor[context-#1-directive]{\dohandleXMLdirective{#1}{#3}}%
   \ifsecondargument     
     \setvalue{\@@CTXML-#1-#2}{#3}%
   \fi}

\def\dohandleXMLdirective#1#2#3% 
%  {\dodohandleXMLdirective#3 dummy dummy dummy\end{#1}{#2}}
  {\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[#2=#3]}}

% \defineXMLdirective [mathml] \setupMMLappearance % [#1][#2=#3]
% \defineXMLdirective [flowchart] [shapes] \setupFLOWshapes % [#2=#3]    
% \defineXMLdirective [flowchart] [lines] \setupFLOWlines % [#2=#3]    

\defineXMLprocessor [context-begin-group] {\begingroup\gobbleoneargument}
\defineXMLprocessor [context-end-group]   {\endgroup  \gobbleoneargument}

\protect \endinput