Minimal code for exporting custom tags
Hi, What is needed to enable export of user defined macros? Consider the following example: ``` \def\startmycommand{\dostarttagged{mycommand}\empty} \def\stopmycommand {\dostoptagged} \setupbackend[export=xml, level=0] \starttext \startsection[title={Sample document}] \startparagraph This is a paragraph \stopparagraph \startmycommand This is mycommand \stopmycommand \stopsection \stoptext ``` If I compile using `context --trackers=structures.tags filename`, I get ``` backend > tags > U+0031:1 => U+0031:1 : 00004 document>1 section>1 sectioncaption>1 sectionnumber>1 backend > tags > U+0053:S => U+0074:t : 00005 document>1 section>1 sectioncaption>1 sectiontitle>1 backend > tags > U+0054:T => U+0068:h : 00007 document>1 section>1 sectioncontent>1 paragraph>1 backend > tags > U+0054:T => U+0064:d : 00008 document>1 section>1 sectioncontent>1 mycommand>1 ``` so the tag is applied. I can also verify this by looking at the PDF which contains ``` << /K 27 0 R /ParentTree 2 0 R /RoleMap << /document /Div /mycommand /Span /paragraph /P /section /Sect /sectioncaption /Div /sectioncontent /Div /sectionnumber /H /sectiontitle /H >> /Type /StructTreeRoot >> ``` and the tag `mycommand` is used at appropriate location. However, the exported xml file contains no tag: ``` <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!-- input filename : test-tag processing date : 2020-05-18T03:00:33-04:00 context version : 2020.04.30 11:10 exporter version : 0.35 --> <!-- This export file is used for filtering runtime only! --> <document context="2020.04.30 11:10" date="2020-05-18T03:00:33-04:00" file="test-tag" language="en" version="0.35" xmlns:m="http://www.w3.org/1998/Math/MathML"> <metadata> </metadata> <section detail="section" chain="section" implicit="1" level="3"> <sectioncaption> <sectionnumber>1</sectionnumber> <sectiontitle>Sample document</sectiontitle> </sectioncaption> <sectioncontent> <paragraph>This is a paragraph</paragraph> </sectioncontent> </section> </document> ``` What am I missing in order to pass user-defined macros to the exporter? Thanks, Aditya
On 5/18/2020 9:09 AM, Aditya Mahajan wrote:
Hi,
What is needed to enable export of user defined macros? Consider the following example:
``` \def\startmycommand{\dostarttagged{mycommand}\empty} \def\stopmycommand {\dostoptagged}
\setupbackend[export=xml, level=0]
\starttext \startsection[title={Sample document}] \startparagraph This is a paragraph \stopparagraph \startmycommand This is mycommand \stopmycommand \stopsection \stoptext ```
If I compile using `context --trackers=structures.tags filename`, I get
``` backend > tags > U+0031:1 => U+0031:1 : 00004 document>1 section>1 sectioncaption>1 sectionnumber>1 backend > tags > U+0053:S => U+0074:t : 00005 document>1 section>1 sectioncaption>1 sectiontitle>1 backend > tags > U+0054:T => U+0068:h : 00007 document>1 section>1 sectioncontent>1 paragraph>1 backend > tags > U+0054:T => U+0064:d : 00008 document>1 section>1 sectioncontent>1 mycommand>1 ```
so the tag is applied. I can also verify this by looking at the PDF which contains
``` << /K 27 0 R /ParentTree 2 0 R /RoleMap << /document /Div /mycommand /Span /paragraph /P /section /Sect /sectioncaption /Div /sectioncontent /Div /sectionnumber /H /sectiontitle /H >> /Type /StructTreeRoot >> ```
and the tag `mycommand` is used at appropriate location.
However, the exported xml file contains no tag:
``` <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!-- This export file is used for filtering runtime only! -->
<document context="2020.04.30 11:10" date="2020-05-18T03:00:33-04:00" file="test-tag" language="en" version="0.35" xmlns:m="http://www.w3.org/1998/Math/MathML"> <metadata> </metadata> <section detail="section" chain="section" implicit="1" level="3"> <sectioncaption> <sectionnumber>1</sectionnumber> <sectiontitle>Sample document</sectiontitle> </sectioncaption> <sectioncontent> <paragraph>This is a paragraph</paragraph> </sectioncontent> </section> </document> ```
What am I missing in order to pass user-defined macros to the exporter? you're probably missing documentation + a high level define command
This registers (extra) elements: \setelementbackendtag[mycommand] \setelementnature [mycommand][mixed] after that you can use \startelement[mycommamd] \starttext \startsection[title={Sample document}] \startparagraph This is a paragraph \stopparagraph \startelement[mycommand] This is mycommand \stopelement \stopsection \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On Mon, 18 May 2020, Hans Hagen wrote:
On 5/18/2020 9:09 AM, Aditya Mahajan wrote:
Hi,
What is needed to enable export of user defined macros? Consider the following example:
What am I missing in order to pass user-defined macros to the exporter? you're probably missing documentation + a high level define command
This registers (extra) elements:
\setelementbackendtag[mycommand] \setelementnature [mycommand][mixed]
Thanks! This also helped me find the documentation in hybrid.pdf. I am not using a high-level interface because I was looking at how to get the output of `t-filter` and `t-vim` modules export correctly. Aditya
On Mon, 18 May 2020, Aditya Mahajan wrote:
On Mon, 18 May 2020, Hans Hagen wrote:
On 5/18/2020 9:09 AM, Aditya Mahajan wrote:
Hi,
What is needed to enable export of user defined macros? Consider the following example:
What am I missing in order to pass user-defined macros to the exporter? you're probably missing documentation + a high level define command
This registers (extra) elements:
\setelementbackendtag[mycommand] \setelementnature [mycommand][mixed]
Thanks! This also helped me find the documentation in hybrid.pdf.
How do I pass options so that the export is <mycommand name=whatever>...</mycommand> (or some variant of that). I thought that \startelement[mycommand][name=whatever] should work (there are some such examples in the texmf tree), but it does not. ``` \setelementbackendtag[mycommand] \setelementnature [mycommand][mixed] \setupbackend[export=xml, level=0] \starttext \startsection[title={Sample document}] \startparagraph This is a paragraph \stopparagraph \startelement[mycommand][name=whatever] This is mycommand \stopelement \stopsection \stoptext ``` Using `\dostarttagged{mycommand}{whatever}` does export as `<mycommand detail="whatever">`, and looking at the code, I don't see why `\startelement` should behave differently. Thanks, Aditya
On Mon, 18 May 2020, Aditya Mahajan wrote:
Thanks! This also helped me find the documentation in hybrid.pdf.
Also epub-mkiv.pdf. Not sure why I didn't think of looking there.
How do I pass options so that the export is
<mycommand name=whatever>...</mycommand>
(or some variant of that). I thought that
\startelement[mycommand][name=whatever]
should work (there are some such examples in the texmf tree), but it does not.
epub-mkiv.pdf states that I need `\setupexport[properties=yes]`, but that doesn't work either: ``` \setupbackend[export=xml] \setupexport [properties=my] \setelementbackendtag[mycommand] \setelementnature [mycommand][mixed] \starttext \startsection[title={Sample document}] \startparagraph This is a paragraph \stopparagraph \startelement[mycommand][name=whatever] This is mycommand \stopelement \stopsection \stoptext ``` gives ``` <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <!-- input filename : test-tag processing date : 2020-05-19T01:34:41-04:00 context version : 2020.05.09 15:37 exporter version : 0.35 --> <!-- This export file is used for filtering runtime only! --> <document context="2020.05.09 15:37" date="2020-05-19T01:34:41-04:00" file="test-tag" language="en" version="0.35" xmlns:m="http://www.w3.org/1998/Math/MathML"> <metadata> </metadata> <section detail="section" chain="section" implicit="1" level="3"> <sectioncaption> <sectionnumber>1</sectionnumber> <sectiontitle>Sample document</sectiontitle> </sectioncaption> <sectioncontent> <paragraph>This is a paragraph</paragraph> <mycommand>This is mycommand</mycommand> </sectioncontent> </section> </document> ``` What am I still missing? On a different note, I didn't realize that interfaces.implement could create macros which could be used like this: ``` \unexpanded\def\dostartexport {%\glet\dostartexport\relax \let\currentexport\empty \clf_setupexport align {\exportparameter\c!align}% bodyfont \dimexpr\exportparameter\c!bodyfont\relax width \dimexpr\exportparameter\c!width\relax properties {\exportparameter\c!properties}% hyphen {\exportparameter\c!hyphen}% title {\exportparameter\c!title}% subtitle {\exportparameter\c!subtitle}% author {\exportparameter\c!author}% firstpage {\exportparameter\c!firstpage}% lastpage {\exportparameter\c!lastpage}% svgstyle {\exportparameter\c!svgstyle}% cssfile {\exportparameter\c!cssfile}% file {\exportparameter\c!file}% export {\backendparameter\c!export}% \relax} ``` This nicely gets around TeX's limitation of 9 arguments! Aditya
On Tue, 19 May 2020, Aditya Mahajan wrote:
On Mon, 18 May 2020, Aditya Mahajan wrote:
Thanks! This also helped me find the documentation in hybrid.pdf.
Also epub-mkiv.pdf. Not sure why I didn't think of looking there.
How do I pass options so that the export is
<mycommand name=whatever>...</mycommand>
(or some variant of that). I thought that
\startelement[mycommand][name=whatever]
should work (there are some such examples in the texmf tree), but it does not.
epub-mkiv.pdf states that I need `\setupexport[properties=yes]`, but that doesn't work either:
There is a bug in back-exp.lua: --- /tmp/back-exp.lua 2020-05-19 02:13:54.961276226 -0400 +++ /opt/luametatex/texmf-context/tex/context/base/mkiv/back-exp.lua 2020-05-19 02:13:01.687385009 -0400 @@ -2305,8 +2305,10 @@ if not p then -- skip elseif exportproperties == v_yes then + n = n+1 r[n] = attributes(p) else + n = n+1 r[n] = properties(p) end end Patching this fixes the export. Aditya
participants (2)
-
Aditya Mahajan
-
Hans Hagen