summaryrefslogtreecommitdiff
path: root/tex/context/base/xtag-ext.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/xtag-ext.tex')
-rw-r--r--tex/context/base/xtag-ext.tex33
1 files changed, 30 insertions, 3 deletions
diff --git a/tex/context/base/xtag-ext.tex b/tex/context/base/xtag-ext.tex
index 539efa2ae..b5c38db0b 100644
--- a/tex/context/base/xtag-ext.tex
+++ b/tex/context/base/xtag-ext.tex
@@ -87,16 +87,43 @@
\edef\@@XMLmapping{\@@XMLmapping+#1}%
\edef\@@XMLelement{\@@XMLelement+#1}}
-\def\stopXMLmapping%
+\def\stopXMLmapping
{\protect
\popmacro\@@XMLmapping
\popmacro\@@XMLelement}
-
+
+%D \macros
+%D {startXMLmappinggroup}
+%D
+%D Imagine something:
+%D
+%D \starttypen
+%D \defineXMLenvironment [something]
+%D {\startXMLmapping[whatever]}
+%D {\stopXMLmapping}
+%D \stoptypen
+%D
+%D Here the \type {\stopXMLmapping} will never be reached
+%D because we are in a mapping. Therefore we need:
+
+\def\startXMLmappinggroup
+ {\dodoubleempty\dostartXMLmappinggroup}
+
+\def\dostartXMLmappinggroup[#1][#2]%
+ {\bgroup
+ \letcscsname\savedXMLmeaning\csname\@@XMLelement:/\currentXMLelement\endcsname
+ \dostartXMLmapping[#1][#2]% do ! else wrong !
+ \letcsnamecs\csname\@@XMLelement:/\currentXMLelement\endcsname\savedXMLmeaning}
+
+\def\stopXMLmappinggroup
+ {\stopXMLmapping
+ \egroup}
+
%D Context Directives:
\def\@@CTXML{@@CTXML}
-\def\defineXMLdirective%
+\def\defineXMLdirective
{\dodoubleempty\dodefineXMLdirective}
\long\def\dodefineXMLdirective[#1][#2]#3%