summaryrefslogtreecommitdiff
path: root/tex/context/base/xtag-ini.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/xtag-ini.tex')
-rw-r--r--tex/context/base/xtag-ini.tex800
1 files changed, 201 insertions, 599 deletions
diff --git a/tex/context/base/xtag-ini.tex b/tex/context/base/xtag-ini.tex
index ee876b1a8..fd545cd78 100644
--- a/tex/context/base/xtag-ini.tex
+++ b/tex/context/base/xtag-ini.tex
@@ -26,13 +26,6 @@
\endinput
\endTEX
-% to be moved
-
-\ifx\globalscratchtoks \undefined \newtoks \globalscratchtoks \fi
-\ifx\globalscratchdimen\undefined \newdimen\globalscratchdimen \fi
-
-% tzt nog eens child grabber maken; mooier in mathml
-
%D This module is highly optimized for speed, which sometimes
%D reads to rather unreadable code. Sorry for this.
@@ -179,7 +172,6 @@
\edef\@@XMLdepth {\@@XML dep} % used to track nesting
\edef\@@XMLdopth {\@@XML dop} % used to track nesting
\edef\@@XMLsave {\@@XML sav} % namespace for saved elements
-\edef\@@XMLglobal {\@@XML glb} % global assignment
\iffalse % slightly faster
@@ -200,7 +192,6 @@
\edef\@@XMLdepth {\@@XML n} % used to track nesting
\edef\@@XMLdopth {\@@XML o} % used to track nesting
\edef\@@XMLsave {\@@XML p} % namespace for saved elements
-\edef\@@XMLglobal {\@@XML x} % global assignment
\fi
@@ -372,9 +363,9 @@
%D called an empty element. The following definitions are
%D equivalent:
%D
-%D \starttyping
+%D \starttypen
%D <eerste></eerste> <eerste/> <eerste />
-%D \stoptyping
+%D \stoptypen
%D
%D Empty elements can have arguments too. Conforming the
%D standard, each key must have a value. These are separated
@@ -382,15 +373,15 @@
%D \type {"} or \type {'}. There may be spaces around the
%D equal sign.
%D
-%D \starttyping
+%D \starttypen
%D <eerste a= "b" c ="d" /> <eerste a = "b" c="d"/>
-%D \stoptyping
+%D \stoptypen
%D
%D Officially the following definition is not valid:
%D
-%D \starttyping
+%D \starttypen
%D <eerste>some text</eerste> <eerste/> <eerste />
-%D \stoptyping
+%D \stoptypen
%D
%D Although we can handle both cases independently, this is
%D seldom needed.
@@ -398,27 +389,27 @@
%D Processing instructions are identified by a~\type {?} and are
%D like empty elements.
%D
-%D \starttyping
+%D \starttypen
%D <?doel a="b" c="d"?> <?doel a="b" c="d" ?>
-%D \stoptyping
+%D \stoptypen
%D
%D Comment is formatted as follows.
%D
-%D \starttyping
+%D \starttypen
%D <!-- comment -->
-%D \stoptyping
+%D \stoptypen
%D
%D Verbatim code inits purest form is called \type {CDATA} and
%D is embedded in the following ugly and therefore recognizable
%D way:
%D
-%D \starttyping
+%D \starttypen
%D <![CDATA[
%D Dit is nogal verbatim !
%D Dit is nogal verbatim !
%D Dit is nogal verbatim !
%D ]]>
-%D \stoptyping
+%D \stoptypen
%D The parser is implemented as a multi||step macro. Because
%D \type {!} and \type {?} should be picked up correctly, we
@@ -704,13 +695,9 @@
\long\def\cleanupXMLarguments
{\ifnum\kindofXMLelement=\emptyXMLtag
\ifx\currentXMLarguments\empty \else
- \@EA\docleanupXMLarguments\currentXMLarguments/ \relax
+ \@EA\docleanupXMLarguments\currentXMLarguments/ \relax
\fi
- \else\ifnum\kindofXMLelement=\beginXMLtag
- \ifx\currentXMLarguments\space
- \let\currentXMLarguments\empty
- \fi
- \fi\fi}
+ \fi}
% \long\def\docleanupXMLarguments#1/ #2\relax % space added earlier
% {\edef\currentXMLarguments{#1}}
@@ -849,13 +836,10 @@
\def\beginXMLelement
{\global\advance\XMLdepth\plusone
- \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\currentXMLelement
- }%\writestatus{XML TRACE}{[begin] [\the\XMLdepth] [\XMLself]}}
+ \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\currentXMLelement}
\def\endXMLelement
- {%\writestatus{XML TRACE}{[end] [\the\XMLdepth] [\XMLself]}%
- \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\undefined
- \global\advance\XMLdepth\minusone}
+ {\global\advance\XMLdepth\minusone}
% 0 = nothing
% 1 = unknown
@@ -870,127 +854,29 @@
\ifcase\XMLancestormode\or\s!unknown\or\currentXMLelement\fi
\fi}
+\def\XMLparent
+ {\XMLancestor\plusone}
+
\def\XMLpureancestor#1%
{\ifnum\numexpr(\XMLdepth-#1)>0
\csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname
\fi}
-% \def\XMLpureancestor#1% test for relax insertion
-% {\ifcase\numexpr(\XMLdepth-#1)\or
-% \csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname
-% \fi}
-
-\def\XMLparent{\XMLancestor\plusone}
-\def\XMLself {\XMLancestor\zerocount}
-
-\def\XMLpureparent{\XMLpureancestor\plusone}
-\def\XMLpureself {\XMLpureancestor\zerocount}
-
-% \def\XMLpureancestor#1%
-% {\csname
-% \ifnum\numexpr(\XMLdepth-#1)>\zerocount
-% \@@XMLdepth:\the\numexpr(\XMLdepth-#1)%
-% \else
-% \s!empty
-% \fi
-% \endcsname}
-
\def\XMLpureparent
{\XMLpureancestor\plusone}
-% probleem: depth is vast en dus ook ancestor
-
-% \XMLinh{...} will backtrack definitions (given that the elements
-% use begin/end, the backtracking stops when a non-empty value is
-% encountered; maybe we will add some keyword (inherit) some day
-
-% \def\XMLinh#1% will recurse so no trickery can be used
-% {\ifcsname\@@XMLvariable:\XMLpureancestor\plusone:#1\endcsname
-% \@EA\@EA\csname\@@XMLvariable:\XMLpureancestor\plusone:#1\endcsname
-% \fi}
-
-\def\XMLinh#1%
- {\@EA\ifx\csname\@@XMLvariable:\currentXMLelement:#1\endcsname\empty
- \@EA\pXMLinh
- \else
- \csname\@@XMLvariable:\currentXMLelement:#1\endcsname
- \@EA\gobbletwoarguments
- \fi\XMLdepth{#1}}
-
-\def\pXMLinh#1%
- {\@EA\ppXMLinh\@EA{\the\numexpr(#1-\plusone)}}
-
-% \def\ppXMLinh#1#2%
-% {\ifcsname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname
-% \@EA\ifx\csname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname\empty
-% \@EAEAEA\pppXMLinh
-% \else
-% \csname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname
-% \@EAEAEA\gobbletwoarguments
-% \fi
-% \else
-% \@EA\pppXMLinh
-% \fi{#1}{#2}}
-
-% \def\pppXMLinh#1%
-% {\ifnum#1>\zerocount
-% \@EA\pXMLinh
-% \else
-% \@EA\gobbletwoarguments
-% \fi{#1}}
-
-\def\ppXMLinh#1#2%
- {\@EA\ifx\csname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname\empty
- \ifnum#1>\plusone
- \@EAEAEA\pXMLinh
- \else
- \@EAEAEA\gobbletwoarguments
- \fi
- \else
- \csname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname
- \@EA\gobbletwoarguments
- \fi{#1}{#2}}
-
-% better
-%
-% \def\XMLpureancestor#1%
-% {\ifcsname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname
-% \csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname
-% \fi}
-
-% replaces macro in xtag-ini: ! ! !
-
-\def\edefXMLop#1#2% \macro{att}
- {\edef#1%
- {\csname\ifcsname\@@XMLvariable:\ownXMLelement:#2\endcsname
- \@@XMLvariable:\ownXMLelement:#2\else\s!empty
- \fi\endcsname}}
-
-\def\edefXMLinh#1#2% \macro{att}
- {\edef#1{\XMLinh{#2}}}
-
-% \def\doifXMLopdef#1#2% \macro{att}
-% {\ifcsname\@@XMLvariable:\ownXMLelement:#1\endcsname
-% \@EA\let\@EA#1\csname\@@XMLvariable:\ownXMLelement:#1\endcsname
-% \expandafter\firstofoneargument
-% \else
-% \expandafter\gobbleoneargument
-% \fi}
-
-\fetchruntimecommand \tracebackXMLattribute {\f!xtagprefix\s!run}
-
% \defineXMLenvironment[one]
% {\beginXMLelement}
% {\endXMLelement}
%
% \defineXMLenvironment[two]
% {\beginXMLelement
-% \starttabulatie
+% \starttabulate
% \NC ancestor 1 \NC \XMLancestor{1} \NC \NR
% \NC ancestor 2 \NC \XMLancestor{2} \NC \NR
% \NC ancestor 3 \NC \XMLancestor{3} \NC \NR
% \NC ancestor 4 \NC \XMLancestor{4} \NC \NR
-% \stoptabulatie}
+% \stoptabulate}
% {\endXMLelement}
%
% \startbuffer
@@ -1000,7 +886,7 @@
% {fallback A: \setXMLfallbackmode 0 \processXMLbuffer}\par
% {fallback B: \setXMLfallbackmode 1 \processXMLbuffer}\par
% {fallback C: \setXMLfallbackmode 2 \processXMLbuffer}\par
-
+
% todo: split #1 into raws en reconstruct, set current etc, push and pop
%
% \def\beginXMLelement
@@ -1023,10 +909,10 @@
%D \defineXMLenvironment[two]
%D {\beginXMLelement
%D \starttabulate
-%D \NC parent 1 \NC \XMLancestor{1} \NC \NR
-%D \NC parent 2 \NC \XMLancestor{2} \NC \NR
-%D \NC parent 3 \NC \XMLancestor{3} \NC \NR
-%D \NC parent 4 \NC \XMLancestor{4} \NC \NR
+%D \NC parent 1 \NC \XMLparent{1} \NC \NR
+%D \NC parent 2 \NC \XMLparent{2} \NC \NR
+%D \NC parent 3 \NC \XMLparent{3} \NC \NR
+%D \NC parent 4 \NC \XMLparent{4} \NC \NR
%D \stoptabulate}
%D {\endXMLelement}
%D
@@ -1034,14 +920,14 @@
%D <x:one> <x:two> <one> <two> </two> </one> </x:two> </x:one>
%D \stopbuffer
%D
-%D fallback A: \setXMLfallbackmode0 \processXMLbuffer
-%D fallback B: \setXMLfallbackmode1 \processXMLbuffer
-%D fallback C: \setXMLfallbackmode2 \processXMLbuffer
+%D fallback A: \setXMLfallbacklevel0 \processXMLbuffer
+%D fallback B: \setXMLfallbacklevel1 \processXMLbuffer
+%D fallback C: \setXMLfallbacklevel2 \processXMLbuffer
%D Here we do the namespace (re)mapping. More examples are
%D provided in the manual.
%D
-%D \starttyping
+%D \starttypen
%D \supportXMLnamespace [test] % needed to get a namespace working
%D \skipXMLnamespace [test] % slow
%D \ignoreXMLnamespace [test] % faster
@@ -1052,7 +938,7 @@
%D \remapXMLurlspace [http://www.pragma-ade.com/dtd/context] [context]
%D \autoXMLnamespace [context] % fallback
%D \autoXMLnamespace [whatever] % second fall back
-%D \stoptyping
+%D \stoptypen
\newtoks\autoXMLnamespaces
@@ -1331,9 +1217,14 @@
\else \@EAEAEA \crapXMLentity
\fi\fi{#1}}
-\def\execXMLentity#1{\csname\@@XMLentity:#1\endcsname}
-\def\crapXMLentity#1{\inframed[\c!offset=.1ex]{\tttf#1}}
-\def\autoXMLentity#1{\ifcsname#1\endcsname\csname#1\endcsname\fi}
+\def\execXMLentity#1%
+ {\csname\@@XMLentity:#1\endcsname}
+
+\def\crapXMLentity#1%
+ {\inframed[\c!offset=.1ex]{\tttf#1}}
+
+\def\autoXMLentity#1%
+ {\ifcsname#1\endcsname\csname#1\endcsname\fi}
\unexpanded\def\getXMLentity{\expandedXMLentity}
@@ -1376,7 +1267,6 @@
\def\dosetXMLattributeB#1%
{\ifx\@@XMLspac\originalXMLnamespace
\@EA\def\csname\@@XMLvariable:\@@XMLclass:\@@XMLname\endcsname{#1}%
- % maybe some day global handling here as well
\fi}
% \def\dosetXMLattributeC#1%
@@ -1397,9 +1287,10 @@
% \@EA\def\csname\@@XMLvariable:\@@XMLclass:\@@XMLspac:\@@XMLname\endcsname{#1}%
% \fi}
-\def\dosetXMLattributeD
+\def\dosetXMLattributeD%
{\@EA\def\csname\@@XMLvariable:\@@XMLclass:\ifx\@@XMLspac
- \originalXMLnamespace\currentXMLnamespace\else\@@XMLspac\fi:\@@XMLname\endcsname}
+ \originalXMLnamespace\currentXMLnamespace\else\@@XMLspac\fi
+ :\@@XMLname\endcsname}
\def\setXMLattributemode#1%
{\ifcase#1\relax
@@ -1557,22 +1448,6 @@
%
% the ugly alternative
-% \def\dosetXMLargument#1% ugly alternative
-% {\ifXMLnamespace
-% \XMLnamespacefalse
-% \ifx\@@XMLspac\@@XMLns
-% \@EAEAEA\checkXMLnamespaceattr % xmlns:\@@XMLname="#1"
-% \else
-% \@EAEAEA\dosetXMLattribute % some:\@@XMLname="#1"
-% \fi
-% \else\ifx\@@XMLname\@@XMLns
-% \@EAEAEA\checkXMLnamespaceattr % xmlns="#1"
-% \else
-% \@EAEAEA\dodosetXMLargument
-% \fi\fi{#1}%
-% \let\dodoparseXMLarguments\doparseXMLarguments
-% \dodoparseXMLarguments}
-
\def\dosetXMLargument#1% ugly alternative
{\ifXMLnamespace
\XMLnamespacefalse
@@ -1586,22 +1461,10 @@
\else
\@EAEAEA\dodosetXMLargument
\fi\fi{#1}%
- \dodocopyXMLargument
\let\dodoparseXMLarguments\doparseXMLarguments
\dodoparseXMLarguments}
-\let\dodocopyXMLargument\relax
-
-\def\dododocopyXMLargument
- {\@EA\@EA\@EA\let\@EA\@EA
- \csname\@@XMLvariable:\csname\@@XMLglobal:\currentXMLelement\endcsname:\@@XMLname\endcsname
- \csname\@@XMLvariable:\@@XMLclass :\@@XMLname\endcsname}
-
-\def\copyXMLargumentindeed
- {\def\dodocopyXMLargument{\ifcsname\@@XMLglobal:\currentXMLelement\endcsname\dododocopyXMLargument\fi}%
- \let\copyXMLargumentindeed\relax}
-
-\def\dodosetXMLargumentA
+\def\dodosetXMLargumentA%
{\@EA\def\csname\@@XMLvariable:\@@XMLclass:\@@XMLname\endcsname}
\def\dodosetXMLargumentB#1%
@@ -1624,6 +1487,8 @@
\def\theXMLarguments#1%
{\ifcsname\@@XMLmap:#1\endcsname\csname\@@XMLmap:#1\endcsname\fi}
+\newtoks\globalscratchtoks
+
\def\doexpandXMLvalue#1#2%
{\ifcsname#2\endcsname
\bgroup
@@ -1698,180 +1563,222 @@
\bgroup \catcode`<=\@@active
+% \long\gdef\dododefineXMLsingular#1#2%
+% {\long\setvalue{\@@XMLelement:#1/}{#2}}
+
\long\gdef\dododefineXMLsingular#1#2%
{\long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2}}
+% \long\gdef\dododefineXMLcommand#1#2%
+% {\long\setvalue{\@@XMLelement:#1/}{#2}%
+% \long\setvalue{\@@XMLelement:#1}{#2}}
+
\long\gdef\dododefineXMLcommand#1#2%
- {\long\@EA\def\csname\@@XMLelement:#1\endcsname{#2}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2}}
+ {\long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{#2}}
+
+% \long\gdef\dododefineXMLgrouped#1#2%
+% {\long\setvalue{\@@XMLelement:#1}{\groupedcommand{#2}{}\bgroup}%
+% \long\setvalue{\@@XMLelement:/#1}{\egroup}}
\long\gdef\dododefineXMLgrouped#1#2%
{\long\@EA\def\csname\@@XMLelement:#1\endcsname{\groupedcommand{#2}\donothing\bgroup}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\egroup
- \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing}
+ \@EA\let\csname\@@XMLelement:/#1\endcsname\egroup}
+
+% \long\gdef\dododefineXMLargument#1#2% watch the {} around ##1
+% {\long\setvalue{\@@XMLelement:#1/}{#2{}}%
+% \long\setvalue{\@@XMLelement:#1}##1</#1>{#2{##1}}}
+
+% \long\gdef\dododefineXMLargument#1#2% watch the {} around ##1
+% {\long\setvalue{\@@XMLelement:#1/}{#2{}}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLargument{#1}{#2}}}
\long\gdef\dododefineXMLargument#1#2% watch the {} around ##1
- {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLargument{#1}{#2}}
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2{}}}
+ {\long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2{}}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLargument{#1}{#2}}}
\long\gdef\redoXMLargument#1#2% potential optimization: globalnext
{\long\@EA\gdef\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>{#2{##1}}%
\next}
+%\long\gdef\dododefineXMLignore#1%
+% {\long\setvalue{\@@XMLelement:#1/}{}%
+% \long\setvalue{\@@XMLelement:#1}##1</#1>{}}
+
+% \long\gdef\dododefineXMLignore#1%
+% {\long\setvalue{\@@XMLelement:#1/}{}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLignore{#1}}}
+
\long\gdef\dododefineXMLignore#1%
- {\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLignore{#1}}
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing}
+ {\@EA\let\csname\@@XMLelement:#1/\endcsname\donothing
+ \@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLignore{#1}}}
\long\gdef\redoXMLignore#1%
{\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>{}%
\next}
+% \long\gdef\dododefineXMLpickup#1#2#3%
+% {\long\setvalue{\@@XMLelement:#1/}{#2#3}%
+% \long\setvalue{\@@XMLelement:#1}##1</#1>{#2##1#3}}
+
+% \long\gdef\dododefineXMLpickup#1#2#3%
+% {\long\setvalue{\@@XMLelement:#1/}{#2#3}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLpickup{#1}{#2}{#3}}}
+
\long\gdef\dododefineXMLpickup#1#2#3%
- {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLpickup{#1}{#2}{#3}}
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2#3}}
+ {\long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2#3}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLpickup{#1}{#2}{#3}}}
\long\gdef\redoXMLpickup#1#2#3%
{\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>{#2##1#3}%
\next}
+% \long\gdef\dododefineXMLenvironment#1#2#3%
+% {\long\setvalue{\@@XMLelement:#1/}{#2#3}%
+% \long\setvalue{\@@XMLelement:#1}{#2}%
+% \long\setvalue{\@@XMLelement:/#1}{#3}}
+
\long\gdef\dododefineXMLenvironment#1#2#3%
- {\long\@EA\def\csname\@@XMLelement:#1\endcsname{#2}%
- \long\@EA\def\csname\@@XMLelement:/#1\endcsname{#3}%
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2#3}}
+ {\long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2#3}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{#2}%
+ \long\@EA\def\csname\@@XMLelement:/#1\endcsname{#3}}
+
+% \long\gdef\dododefineXMLsave#1%
+% {\letvalue{\@@XMLdata:#1}\longempty
+% \long\setvalue{\@@XMLelement:#1/}{\long\setvalue{\@@XMLdata:#1}{}}%
+% \long\setvalue{\@@XMLelement:#1}##1</#1>{\long\setvalue{\@@XMLdata:#1}{##1}}}
+
+% \long\gdef\dododefineXMLsave#1%
+% {\letvalue{\@@XMLdata:#1}\longempty
+% \long\setvalue{\@@XMLelement:#1/}{\long\setvalue{\@@XMLdata:#1}{}}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLsave{#1}}}
\long\gdef\dododefineXMLsave#1%
{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty
- \long\@EA\def\csname\@@XMLelement:#1\endcsname {\redoXMLsave{#1}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}}
+ \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname {\redoXMLsave{#1}}}
+
+% \long\gdef\dododefineXMLsavecontent#1#2%
+% {\long\setvalue{\@@XMLdata:#1}{#2}%
+% \long\setvalue{\@@XMLelement:#1/}{}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLsave{#1}}}
\long\gdef\dododefineXMLsavecontent#1#2%
{\long\@EA\def\csname\@@XMLdata:#1\endcsname{#2}%
- \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLsave{#1}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}}
+ \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLsave{#1}}}
\gdef\redoXMLsave#1%
{\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>%
{\long\@EA\def\csname\@@XMLdata:#1\endcsname{##1}}%
\next}
+% \long\gdef\dododefineXMLgsave#1%
+% {\letgvalue{\@@XMLdata:#1}\longempty
+% \long\setvalue{\@@XMLelement:#1/}{\long\setgvalue{\@@XMLdata:#1}{}}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLgsave{#1}}}
+
\long\gdef\dododefineXMLgsave#1%
{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty
- \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLgsave{#1}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}}
+ \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLgsave{#1}}}
+
+% \long\gdef\dododefineXMLgsavecontent#1#2%
+% {\long\setvalue{\@@XMLdata:#1}{#2}%
+% %\long\setvalue{\@@XMLelement:#1/}{}%
+% \long\setvalue{\@@XMLelement:#1/}{\long\setgvalue{\@@XMLdata:#1}{}}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLgsave{#1}}}
\long\gdef\dododefineXMLgsavecontent#1#2%
{\long\@EA\gdef\csname\@@XMLdata:#1\endcsname{#2}%
- \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLgsave{#1}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}}
+ \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLgsave{#1}}}
\gdef\redoXMLgsave#1%
{\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>%
{\long\@EA\gdef\csname\@@XMLdata:#1\endcsname{##1}}%
\next}
+% \long\gdef\dododefineXMLenvironmentsave#1#2#3%
+% {\letvalue{\@@XMLdata:#1}\longempty
+% \long\setvalue{\@@XMLelement:#1/}{#2\long\setvalue{\@@XMLdata:#1}{}#3}%
+% \long\setvalue{\@@XMLelement:#1}##1</#1>{#2\long\setvalue{\@@XMLdata:#1}{##1}#3}}
+
+% \long\gdef\dododefineXMLenvironmentsave#1#2#3%
+% {\letvalue{\@@XMLdata:#1}\longempty
+% \long\setvalue{\@@XMLelement:#1/}{#2\long\setvalue{\@@XMLdata:#1}{}#3}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLenvironmentsave{#1}{#2}{#3}}}
+
\long\gdef\dododefineXMLenvironmentsave#1#2#3%
{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty
- \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLenvironmentsave{#1}{#2}{#3}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}}
-
-% maybe \globalnext
+ \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLenvironmentsave{#1}{#2}{#3}}}
\gdef\redoXMLenvironmentsave#1#2#3%
{\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>%
{#2\long\@EA\def\csname\@@XMLdata:#1\endcsname{##1}#3}%
\next}
+% \long\gdef\dododefineXMLenvironmentgsave#1#2#3%
+% {\letgvalue{\@@XMLdata:#1}\longempty
+% \long\setvalue{\@@XMLelement:#1/}{#2\long\setgvalue{\@@XMLdata:#1}{}#3}%
+% \long\setvalue{\@@XMLelement:#1}{\redoXMLenvironmentgsave{#1}{#2}{#3}}}
+
\long\gdef\dododefineXMLenvironmentgsave#1#2#3%
{\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty
- \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLenvironmentgsave{#1}{#2}{#3}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}}
+ \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\global\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}%
+ \long\@EA\def\csname\@@XMLelement:#1\endcsname{\redoXMLenvironmentgsave{#1}{#2}{#3}}}
\gdef\redoXMLenvironmentgsave#1#2#3%
{\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>%
{#2\long\@EA\gdef\csname\@@XMLdata:#1\endcsname{##1}#3}%
\next}
-\long\gdef\dododefineXMLprocess#1%
- {\@EA\let\csname\@@XMLelement:#1\endcsname\donothing
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing}
+% \long\gdef\dododefineXMLprocess#1%
+% {\long\setvalue{\@@XMLelement:#1/}{}%
+% \long\setvalue{\@@XMLelement:#1}{}%
+% \long\setvalue{\@@XMLelement:/#1}{}}
-\long\gdef\dododefineXMLnestedenvironment#1#2#3%
- {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\getXMLgroupedenvironment{#1}{#2}{#3}}}
+% \long\gdef\dododefineXMLprocess#1%
+% {\letvalue{\@@XMLelement:#1/}\donothing
+% \letvalue{\@@XMLelement:#1}\donothing
+% \letvalue{\@@XMLelement:/#1}\donothing}
-\long\gdef\dododefineXMLnestedargument#1#2%
- {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\getXMLgroupedargument{#1}{#2}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2{}}}
+\long\gdef\dododefineXMLprocess#1%
+ {\@EA\let\csname\@@XMLelement:#1/\endcsname\donothing
+ \@EA\let\csname\@@XMLelement:#1\endcsname\donothing
+ \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing}
-\long\gdef\dododefineXMLnestedsave#1%
- {\@EA\let\csname\@@XMLdata:#1\endcsname\longempty
- \long\@EA\def\csname\@@XMLelement:#1\endcsname {\getXMLgroupednestedsave{#1}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{\@EA\let\csname\@@XMLdata:#1\endcsname\longempty}}
+% \long\gdef\dododefineXMLnestedenvironment#1#2#3%
+% {\long\setvalue{\@@XMLelement:#1}{\getXMLgroupedenvironment{#1}{#2}{#3}}}
-\long\unexpanded\gdef\getXMLgroupednestedsave#1%
- {\collectXMLgroupedtrue
- \long\def\dodogetgrouped{\long\@EA\edef\csname\@@XMLdata:#1\endcsname{\the\groupedtoks}}%
- \getXMLgrouped{#1}}
+\long\gdef\dododefineXMLnestedenvironment#1#2#3%
+ {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\getXMLgroupedenvironment{#1}{#2}{#3}}}
-\long\gdef\dododefineXMLnestedenvironmentsave#1#2#3%
- {\@EA\let\csname\@@XMLdata:#1\endcsname\longempty
- \long\@EA\def\csname\@@XMLelement:#1\endcsname {\getXMLgroupednestedenvironmentsave{#1}{#2}{#3}}%
- \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
- \long\@EA\def\csname\@@XMLelement:#1/\endcsname{#2\@EA\let\csname\@@XMLdata:#1\endcsname\longempty#3}}
+% \long\gdef\dododefineXMLnestedargument#1#2%
+% {\long\setvalue{\@@XMLelement:#1}{\getXMLgroupedargument{#1}{#2}}}
-\long\unexpanded\gdef\getXMLgroupednestedenvironmentsave#1#2#3%
- {\collectXMLgroupedtrue
- \long\def\dodogetgrouped{#2\long\@EA\edef\csname\@@XMLdata:#1\endcsname{\the\groupedtoks}#3}%
- \getXMLgrouped{#1}}
+\long\gdef\dododefineXMLnestedargument#1#2%
+ {\long\@EA\def\csname\@@XMLelement:#1\endcsname{\getXMLgroupedargument{#1}{#2}}}
\egroup
%D The high level definition macros.
-\def\defineXMLsingular {\dotripleempty\dodefineXMLsingular}
-\def\defineXMLcommand {\dotripleempty\dodefineXMLcommand}
-\def\defineXMLgrouped {\dotripleempty\dodefineXMLgrouped}
-\def\defineXMLargument {\dotripleempty\dodefineXMLargument}
-\def\defineXMLignore {\dotripleempty\dodefineXMLignore}
-\def\defineXMLpickup {\dotripleempty\dodefineXMLpickup}
-\def\defineXMLenvironment {\dotripleempty\dodefineXMLenvironment}
-\def\defineXMLsave {\dotripleempty\dodefineXMLsave}
-\def\defineXMLsavecontent {\dotripleempty\dodefineXMLsavecontent}
-\def\defineXMLgsave {\dotripleempty\dodefineXMLgsave}
-\def\defineXMLgsavecontent {\dotripleempty\dodefineXMLgsavecontent}
-\def\defineXMLenvironmentsave {\dotripleempty\dodefineXMLenvironmentsave}
-\def\defineXMLenvironmentgsave {\dotripleempty\dodefineXMLenvironmentgsave}
-\def\defineXMLprocess {\dotripleempty\dodefineXMLprocess}
-\def\defineXMLnested {\dotripleempty\dodefineXMLnestedenvironment}
-\def\defineXMLnestedenvironment {\dotripleempty\dodefineXMLnestedenvironment}
-\def\defineXMLnestedargument {\dotripleempty\dodefineXMLnestedargument}
-\def\defineXMLnestedsave {\dotripleempty\dodefineXMLnestedsave}
-\def\defineXMLnestedenvironmentsave{\dotripleempty\dodefineXMLnestedenvironmentsave}
-
-%D We can nill definitions with:
-
-\def\resetXMLelement[#1]{\dododefineXMLprocess{#1}}
-
-%D This is equivalent to:
-%D
-%D \starttyping
-%D \def\resetXMLelement[#1]% handy in case only singular
-%D {\@EA\let\csname\@@XMLelement:#1\endcsname \donothing
-%D \@EA\let\csname\@@XMLelement:/#1\endcsname\donothing
-%D \@EA\let\csname\@@XMLelement:#1/\endcsname\donothing}
-%D \stoptyping
+\def\defineXMLsingular {\dotripleempty\dodefineXMLsingular}
+\def\defineXMLcommand {\dotripleempty\dodefineXMLcommand}
+\def\defineXMLgrouped {\dotripleempty\dodefineXMLgrouped}
+\def\defineXMLargument {\dotripleempty\dodefineXMLargument}
+\def\defineXMLignore {\dotripleempty\dodefineXMLignore}
+\def\defineXMLpickup {\dotripleempty\dodefineXMLpickup}
+\def\defineXMLenvironment {\dotripleempty\dodefineXMLenvironment}
+\def\defineXMLsave {\dotripleempty\dodefineXMLsave}
+\def\defineXMLsavecontent {\dotripleempty\dodefineXMLsavecontent}
+\def\defineXMLgsave {\dotripleempty\dodefineXMLgsave}
+\def\defineXMLgsavecontent {\dotripleempty\dodefineXMLgsavecontent}
+\def\defineXMLenvironmentsave {\dotripleempty\dodefineXMLenvironmentsave}
+\def\defineXMLenvironmentgsave{\dotripleempty\dodefineXMLenvironmentgsave}
+\def\defineXMLprocess {\dotripleempty\dodefineXMLprocess}
% push is (not yet) a real push, so:
@@ -1880,6 +1787,10 @@
% goes for all types
+\def\defineXMLnested {\dotripleempty\dodefineXMLnestedenvironment}
+\def\defineXMLnestedenvironment{\dotripleempty\dodefineXMLnestedenvironment}
+\def\defineXMLnestedargument {\dotripleempty\dodefineXMLnestedargument}
+
\long\def\dodefineXMLsingular[#1][#2][#3]#4%
{\defineXMLmethod\dododefineXMLsingular{#1}{#2}{#3}{#4}{}}
@@ -1928,12 +1839,6 @@
\long\def\dodefineXMLnestedargument[#1][#2][#3]#4%
{\defineXMLmethod\dododefineXMLnestedargument{#1}{#2}{#3}{#4}{}}
-\long\def\dodefineXMLnestedsave[#1][#2][#3]%
- {\defineXMLmethod\dododefineXMLnestedsave{#1}{#2}{#3}{}{}}
-
-\long\def\dodefineXMLnestedenvironmentsave[#1][#2][#3]#4#5%
- {\defineXMLmethod\dododefineXMLnestedenvironmentsave{#1}{#2}{#3}{#4}{#5}}
-
% [key=val] => \presetXMLarguments{element} => default key/vals
% [blabla] => \theXMLarguments{blabla} => user key/vals
% [blabla] [key=val] => \presetXMLarguments{element} => default key/vals
@@ -1971,101 +1876,8 @@
\presetXMLarguments\rawXMLidentifier
\to \everyXMLelement
-%D We now overload the previously defined argument setter by one
-%D that is faster when definitions are surrounded by
-%D
-%D \starttyping
-%D \startXMLcompiling ... \stopXMLcompiling
-%D \stoptyping
-%D
-%D This method is twice as fast on (for instance) 100K calls to
-%D an empty element with 10 arguments.
-
-% \long\def\prepareXMLargument#1#2#3%
-% {\scratchtoks\expandafter{\the\scratchtoks\@EA\def\csname#1#2\endcsname{#3}}}
-
-% \long\def\prepareXMLargument#1#2#3%
-% {\scratchtoks\@EA\@EA\@EA{\@EA\the\@EA\scratchtoks\@EA\def\csname\@@XMLvariable:#1:#2\endcsname{#3}}}
-
-\let\@@globalprefix\empty
-
-\long\def\prepareXMLargument#1#2#3%
- {\expanded{\scratchtoks
- {\the\scratchtoks
- \def\@EA\noexpand\csname\@@XMLvariable:#1:#2\endcsname{#3}%
- \ifx\@@globalprefix\empty\else
- \let\@EA\noexpand\csname\@@XMLvariable:\@@globalprefix:#2\endcsname
- \@EA\noexpand\csname\@@XMLvariable:#1:#2\endcsname
- \fi}}}
-
-\long\def\setXMLargumentsN#1#2#3% element [tag] settings
- {\doifassignmentelse{#2}
- {\letbeundefined{\@@XMLmap:#1}%
- \long\setvalue{\@@XMLpars:#1}{\getrawparameters[\@@XMLvariable:#1:][#2]}}
- {\long\setvalue{\@@XMLmap:#1}{#2}% later we can init vars by this name
- \doifsomething{#3}{\long\setvalue{\@@XMLpars:#1}{\getrawparameters[#2][#3]}}}}
-
-\long\def\setXMLargumentsP#1#2#3% element settings empty (we cannot test for assignment)
- {\letbeundefined{\@@XMLmap:#1}%
- \ifx\@@globalprefix\empty\else
- \@EA\let\csname\@@XMLglobal:#1\endcsname\@@globalprefix
- \fi
- \bgroup
-% \def\XMLinheritance{\noexpand\XMLinheritance}
- \def\XMLop##1{\noexpand\XMLpar{#1}{##1}{}}%
- \def\XMLpar{\noexpand\XMLpar}%
- \def\XMLanc{\noexpand\XMLanc}%
- \def\XMLinh{\noexpand\XMLinh}%
- \xdef\!!XMLattr{[#1][#2]}%
- \scratchtoks\emptytoks
- \@EA\dogetparameters\@EA\prepareXMLargument\!!XMLattr
- \xdef\globalnext{\the\scratchtoks}%
- \egroup
- \letvalue{\@@XMLpars:#1}\globalnext
- \globallet\globalnext\relax}
-
-\def\defineXMLattributeset{\dodoubleargument\dodefineXMLattributeset}
-\def\extendXMLattributeset{\dodoubleargument\doextendXMLattributeset}
-
-\def\dodefineXMLattributeset[#1][#2]{\setvalue {\@@XMLpars::#1}{#2}}
-\def\doextendXMLattributeset[#1][#2]{\appendvalue{\@@XMLpars::#1}{,#2}}
-
-\def\XMLattributeset #1{\executeifdefined{\@@XMLpars::#1}\empty}
-%def\XMLinheritance #1{\executeifdefined{\@@XMLpars:#1}\empty}
-\def\showXMLattributes#1{\showvalue{\@@XMLpars:#1}}
-
-\chardef\@@precompile\zerocount
-
-\def\setXMLarguments
- {\ifcase\@@precompile
- \expandafter\setXMLargumentsN
- \else
- \expandafter\setXMLargumentsP
- \fi}
-
-\def\docopyXMLargument
- {\@EA\@EA\@EA\let\@EA\@EA
- \csname\@@XMLvariable:\csname\@@XMLglobal:\currentXMLelement\endcsname:\@@XMLname\endcsname
- \csname\@@XMLvariable:\@@XMLclass :\@@XMLname\endcsname}
-
-\def\startXMLcompiling
- {\dosingleargument\dostartXMLcompiling}
-
-\def\dostartXMLcompiling[#1]%
- {\iffirstargument
- \copyXMLargumentindeed % when needed, from now on -)
- \def\@@globalprefix{#1}%
- \fi
- \chardef\@@precompile\plusone}
-
-\def\stopXMLcompiling
- {\chardef\@@precompile\zerocount
- \let\@@globalprefix\empty}
-
-%D Interesting what kind of things are needed \unknown
-
\appendtoks
- \disablelanguagespecifics
+ \disablelanguagespecifics % interesting what kind of things are needed ...
\to \everyenableXML
\long\def\longempty{}
@@ -2224,13 +2036,8 @@
%D We can pick up key|/|value pairs, but we still need a way
%D to process these.
-% bugged
-%
-% \def\mapXMLvalue#1#2#3% td align center -> middle
-% {\setvalue{\@@XMLvalue:#1:#2:#3}}
-
-\def\mapXMLvalue#1#2#3% td:align center -> middle
- {\setvalue{\@@XMLvalue:#1:#2}{#3}} % keep #3 to grab spaces
+\def\mapXMLvalue#1#2#3% td align center -> middle
+ {\setvalue{\@@XMLvalue:#1:#2:#3}}
\def\XMLvar#1#2#3% td align center
{\ifcsname\@@XMLvariable:#1:#2\endcsname
@@ -2243,22 +2050,12 @@
% {\XMLval{#1}{#2}{\ifcsname\@@XMLvariable:#1:#2\endcsname
% \csname\@@XMLvariable:#1:#2\endcsname\else#3\fi}}
-% \def\XMLval#1#2#3% td:align value default
-% {\ifcsname\@@XMLvalue:#1:#2\endcsname
-% \csname\@@XMLvalue:#1:#2\endcsname
-% \else
-% #3%
-% \fi}
-%
-% The next one permits commands instead of strings in #3
-
-\def\XMLval#1#2% #1=td:align #2=value #3=default
+\def\XMLval#1#2#3%
{\ifcsname\@@XMLvalue:#1:#2\endcsname
- \@EA\firstoftwoarguments
+ \csname\@@XMLvalue:#1:#2\endcsname
\else
- \@EA\secondoftwoarguments
- \fi
- {\csname\@@XMLvalue:#1:#2\endcsname}}
+ #3%
+ \fi}
\def\XMLpar#1#2#3%
{\ifcsname\@@XMLvariable:#1:#2\endcsname
@@ -2277,190 +2074,6 @@
\def\setXMLpar#1#2%
{\@EA\def\csname\@@XMLvariable:#1:#2\endcsname}
-% ancestor arguments:
-%
-% \defineXMLenvironment
-% [fo:root]
-% [test=unset]
-% {\beginXMLelement}
-% {\endXMLelement}
-%
-% \defineXMLenvironment
-% [fo:block-container]
-% [test=oeps]
-% {\beginXMLelement}
-% {\endXMLelement}
-%
-% \defineXMLenvironment
-% [fo:block]
-% {\beginXMLelement
-% \begingroup}
-% {\endgroup
-% \XMLanc{test}{}
-% \endXMLelement}
-%
-% \startXMLdata
-% <fo:root>
-% <fo:block-container test='first'><fo:block test='second'>second:</fo:block></fo:block-container>
-% <fo:block>unset:</fo:block>
-% <fo:block test='outer'><fo:block test='nested'><fo:block>deep:</fo:block>nested:</fo:block>outer:</fo:block>
-% <fo:block test='last'>last:</fo:block>
-% </fo:root>
-% \stopXMLdata
-%
-% \startXMLdata
-% <fo:root>
-% <fo:block-container test='first'><fo:block>second:</fo:block></fo:block-container>
-% <fo:block>unset:</fo:block>
-% <fo:block test='second'><fo:block><fo:block>deep:</fo:block>nested:</fo:block>outer:</fo:block>
-% <fo:block>last:</fo:block>
-% </fo:root>
-% \stopXMLdata
-%
-% \startXMLdata
-% <fo:root>
-% <fo:block-container test='first'><fo:block>second:</fo:block></fo:block-container>
-% <fo:block>unset:</fo:block>
-% <fo:block><fo:block><fo:block>deep:</fo:block>nested:</fo:block>outer:</fo:block>
-% <fo:block>last:</fo:block>
-% </fo:root>
-% \stopXMLdata
-
-% dit werkt alleen ok in niet <a> <b> <b> ... situaties omdat anders
-% de laatste b de attributen van de vorige heeft:
-
-\def\XMLanc#1%
- {\ifcsname\@@XMLvariable:\currentXMLelement:#1\endcsname % \ownXMLelement
- \csname\@@XMLvariable:\currentXMLelement:#1\endcsname % \ownXMLelement
- \@EA\gobblethreearguments
- \else
- \@EA\pXMLanc
- \fi\XMLdepth{#1}}
-
-\def\pXMLanc#1%
- {\@EA\ppXMLanc\@EA{\the\numexpr(#1-\plusone)}}
-
-\def\ppXMLanc#1#2#3%
- {\ifcsname\@@XMLdepth:#1\endcsname % is er altijd dus redundant
- \ifcsname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname
- \csname\@@XMLvariable:\csname\@@XMLdepth:#1\endcsname:#2\endcsname
- \@EAEAEA\gobblethreearguments
- \else
- \@EAEAEA\pppXMLanc
- \fi
- \else
- \@EA\pppXMLanc
- \fi{#1}{#2}{#3}}
-
-\def\pppXMLanc#1%
- {\ifnum#1>\zerocount
- \@EA\pXMLanc
- \else
- \@EA\thirdofthreearguments
- \fi{#1}}
-
-%D Experimental: local and global attributes, don't ask -)
-%D
-%D \starttyping
-%D \gXMLpar{element}{global}{attribute}{default}
-%D \gXMLatt{element}{attribute}
-%D \lXMLatt{element}{attribute}
-%D \lcXMLatt{atribute}
-%D \gcXMLatt{atribute}
-%D \stoptyping
-
-\def\gXMLpar#1#2#3#4% #2 can be auto: \csname\@@XMLglobal:#1\endcsname
- {\ifcsname\@@XMLvariable:#1:#3\endcsname
- \csname\@@XMLvariable:#1:#3\endcsname
- \else\ifcsname\@@XMLvariable:#2:#3\endcsname
- \csname\@@XMLvariable:#2:#3\endcsname
- \else
- #4%
- \fi\fi}
-
-\def\gXMLatt#1#2% element tag
- {\csname
- \ifcsname\@@XMLvariable:#1:#2\endcsname
- \@@XMLvariable:#1:#2%
- \else\ifcsname\@@XMLglobal:#1\endcsname
- \ifcsname\@@XMLvariable:\csname\@@XMLglobal:#1\endcsname:#2\endcsname
- \@@XMLvariable:\csname\@@XMLglobal:#1\endcsname:#2%
- \else
- \s!empty
- \fi
- \else
- \s!empty
- \fi\fi
- \endcsname}
-
-\def\lXMLatt#1#2% element tag
- {\ifcsname\@@XMLvariable:#1:#2\endcsname
- \csname\@@XMLvariable:#1:#2\endcsname
- \else
- \s!empty
- \fi}
-
-\def\gcXMLatt{\gXMLatt\currentXMLelement} % tag
-\def\lcXMLatt{\lXMLatt\currentXMLelement} % tag
-
-%D Experimental (not sure if this will stay):
-%D
-%D \starttyping
-%D \startdefineXMLhandlers[one,two]
-%D
-%D \defineXMLenvironment[a=b,c=\XMLop{a}]
-%D {}{}
-%D
-%D \stopdefineXMLhandlers
-%D \stoptyping
-
-\long\def\startdefineXMLhandlers
- {\bgroup\catcode`\^^M=\@@space
- \dodoubleempty\dostartdefineXMLhandlers}
-
-\long\def\dostartdefineXMLhandlers[#1][#2]#3#4\stopdefineXMLhandlers % #2 is dummy
- {\egroup
- \long\def\dodefineXMLhandlers##1{#3[##1]#4}%
- \processcommalist[#1]\dodefineXMLhandlers}
-
-\let\currentXMLhandler\s!unknown
-
-% \long\def\dostartdefineXMLhandlers[#1][#2]#3#4[#5]#6\stopdefineXMLhandlers % #2 is dummy
-% {\egroup
-% \pushmacro\XMLop
-% \pushmacro\XMLpar
-% \pushmacro\currentXMLhandler
-% \long\def\dodefineXMLhandlers##1%
-% {\edef\currentXMLhandler{##1}%
-% \def\XMLop####1{\noexpand\XMLpar{##1}{####1}{}}%
-% \def\XMLpar{\noexpand\XMLpar}%
-% \def\XMLanc{\noexpand\XMLanc}%
-% \edef\!!stringa{[##1][#5]}%
-% \expandafter#3\!!stringa#6}%
-% \processcommalist[#1]\dodefineXMLhandlers
-% \popmacro\currentXMLhandler
-% \popmacro\XMLpar
-% \popmacro\XMLop}
-
-\long\def\dostartdefineXMLhandlers[#1][#2]#3#4[#5]#6\stopdefineXMLhandlers % #2 is dummy
- {\egroup
- \long\def\dodefineXMLhandlers##1%
- {\bgroup
- \edef\currentXMLhandler{##1}%
- \def\XMLop####1{\noexpand\XMLpar{##1}{####1}{}}%
- \def\XMLpar{\noexpand\XMLpar}%
- \def\XMLanc{\noexpand\XMLanc}%
- \def\XMLinh{\noexpand\XMLinh}%
- \xdef\!!XMLattr{[##1][#5]}%
- \egroup
- \expandafter#3\!!XMLattr#6}%
- \processcommalist[#1]\dodefineXMLhandlers}
-
-\def\XMLpav#1#2#3#4%
- {\XMLval{#1}{\XMLpar{#2}{#3}{}}{#4}}
-
-%D A few weird ones:
-
\def\TEXpar#1#2%
{\csname#1\interfaced{#2}\endcsname}
@@ -2556,14 +2169,10 @@
\def\ownXMLelement{\rawXMLnamespace\rawXMLidentifier}
\def\XMLop#1% ownpar
- {\csname\ifcsname\@@XMLvariable:\ownXMLelement:#1\endcsname
- \@@XMLvariable:\ownXMLelement:#1\else\s!empty
- \fi\endcsname}
+ {\csname\@@XMLvariable:\ownXMLelement:#1\endcsname}
\def\XMLtp#1% texpar
- {\csname\ifcsname\@@XMLmapmap\interfaced{#1}\endcsname
- \@@XMLmapmap\interfaced{#1}\else\s!empty
- \fi\endcsname}
+ {\csname\@@XMLmapmap\interfaced{#1}\endcsname}
\def\doifelseXMLop#1{\doifelse{\XMLop{#1}}}
\def\doifXMLop #1{\doif {\XMLop{#1}}}
@@ -2582,19 +2191,12 @@
\def\doifnothingXMLtp #1{\doifnothing {\XMLtp{#1}}}
\def\XMLflushself{\csname\@@XMLdata:\ownXMLelement\endcsname}
-
-\def\showXMLdata#1{\showvalue{\@@XMLdata:#1}}
\def\XMLta {\theXMLarguments\@@XMLmapmap}
\def\getXMLta {\expanded{\getparameters[\@@XMLmapmap][\XMLta]}}
\def\expandXMLta{\expandXMLarguments\@@XMLmapmap}
\def\expandXMLtp{\expandTEXpar\@@XMLmapmap} % #1
-\def\getXMLparameters[#1]% faster than \rawgetparameters[#1][\theXMLar..]
- {\ifcsname\@@XMLmap:#1\endcsname
- \expanded{\rawgetparameters[#1][\csname\@@XMLmap:#1\endcsname]}%
- \fi}
-
\def\defXMLop#1#2{\@EA\let\@EA#1\csname\@@XMLvariable:\ownXMLelement:#2\endcsname}
\def\defXMLtp#1#2{\@EA\let\@EA#1\csname\@@XMLmapmap\interfaced{#2}\endcsname}
@@ -2632,7 +2234,7 @@
\protectXMLdata
\dostartXMLdata}
-\long\def\dostartXMLdata#1\stopXMLdata % evt \everyeof{}
+\long\def\dostartXMLdata#1\stopXMLdata
{\enableXML\scantokens{#1<gobblespacetokens/>}%
\endgroup
\ifhmode\unskip\unskip\fi}
@@ -2820,7 +2422,7 @@
\def\doXMLifequalelse#1#2%
{\@EA\@@ifequal#1\relax\@@and#2\relax\@@then}
-%D \starttyping
+%D \starttypen
%D \defineXMLenvironment[test][a=1]
%D {\XMLownifequalelse{a}{2}{YES}{NO}}
%D {}
@@ -2832,8 +2434,8 @@
%D \startXMLdata
%D <test a="1">test</test>
%D \stopXMLdata
-%D \stoptyping
+%D \stoptypen
\def\XMLyes#1{\XMLownifequalelse{#1}{yes}{#1}{}}
-\protect \endinput
+\protect \endinput \ No newline at end of file