summaryrefslogtreecommitdiff
path: root/tex/context/base/back-exp.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/back-exp.mkiv')
-rw-r--r--tex/context/base/back-exp.mkiv103
1 files changed, 103 insertions, 0 deletions
diff --git a/tex/context/base/back-exp.mkiv b/tex/context/base/back-exp.mkiv
new file mode 100644
index 000000000..131dfe295
--- /dev/null
+++ b/tex/context/base/back-exp.mkiv
@@ -0,0 +1,103 @@
+%D \module
+%D [ file=back-exp,
+%D version=2010.08.22,
+%D title=\CONTEXT\ Backend Macros,
+%D subtitle=XML export,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%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 Backend Macros / XML export}
+
+\registerctxluafile{back-exp.lua}{}
+
+%D This is an experimental exporter and a logical follow up on tagging. The
+%D exporter assumes a properly tagged document. Some elements get a couple
+%D of attributes becaus eitherwise rendering information would get lost. In
+%D general we assume that when the \XML\ is converted to \HTML\ some stylesheet
+%D is applied anyway.
+
+\unprotect
+
+% we can replace this by a more generic attributeset mechanism where we bind
+% to any element (needed anyway, see userdata thingies)
+
+\definesystemattribute[taggedrows] [public]
+\definesystemattribute[taggedcolumns][public]
+\definesystemattribute[taggedalign] [public]
+\definesystemattribute[taggedpar] [public]
+\definesystemattribute[taggedpacked] [public]
+\definesystemattribute[taggedsymbol] [public]
+\definesystemattribute[taggedinsert] [public]
+
+\def\setelementexporttag
+ {\dotripleargument\dosetelementexporttag}
+
+\def\dosetelementexporttag[#1][#2][#3]%
+ {\ifthirdargument
+ \ctxlua{structures.tags.settagproperty("#1","#2", "#3")}%
+ \else\ifsecondargument
+ \ctxlua{structures.tags.settagproperty("#1","export", "#2")}%
+ \fi\fi}
+
+\newcount\tagparcounter
+
+\let\dotagsetparcounter\relax
+
+\appendtoks
+ \dotagsetparcounter
+\to \everypar
+
+\appendtoks
+ \dotagsetparcounter
+\to \neverypar
+
+\appendtoks
+ \dotagsetparcounter
+\to \everytabulatepar % tricky, maybe this should be neverypar
+
+\appendtoks
+ \def\dotagnoftablecolumns{\attribute\taggedcolumnsattribute\!!counta}%
+ \def\dotagnoftablerows {\attribute\taggedrowsattribute \!!countb}%
+\to \everyenableelements
+
+\appendtoks
+ \def\dotagTABLEalign{\attribute\taggedalignattribute\raggedstatus}%
+ \def\dotagTABLEcell {\char\zerocount}%
+\to \everyenableelements
+
+\appendtoks
+ \def\dotagtabulatealign{\attribute\taggedalignattribute\ifcase\tabulatealign\attributeunsetvalue\or\plusthree\or\plusone\or\plustwo\or\attributeunsetvalue\fi}%
+\to \everyenableelements
+
+\appendtoks
+ \def\dotagsetparcounter{\global\advance\tagparcounter\plusone\attribute\taggedparattribute\tagparcounter}%
+\to \everyenableelements
+
+\appendtoks
+ \def\dotagsetitemize{\ctxlua{structures.tags.setitemgroup(\ifconditional\packlistitem true\else false\fi,"\currentitemsymbol")}}%
+\to \everyenableelements
+
+\appendtoks
+ \def\dotagsetdescriptiontag{\ctxlua{structures.tags.setdescriptionid("\currentdescription",\currentdescriptionnumberentry)}}%
+\to \everyenableelements
+
+\appendtoks
+ \def\dotagsetnotesymbol{\ctxlua{structures.tags.setdescriptionid("\currentnote",\currentnotenumber)}}%
+\to \everyenableelements
+
+% The action: \setubackend[export=yes] % or filename
+
+\def\c!export{export}
+
+\appendtoks
+ \doifsomething{\backendparameter\c!export}
+ {\setupstructure[\c!state=\v!start]%
+ \enabledirectives[backend.export=\backendparameter\c!export]}%
+\to \everysetupbackend
+
+\protect \endinput