Hi all, I'm back here with the following problem: I'm processing XML files (DocBook DTD) which also may contain the <programlisting> tag with some preformatted text. In a sample TeX file, I've tested the following: \starttyping <somecontext> <variable name="Var"> Value of Var </variable> </somecontext> \stoptyping This works and the result is great. So I defined a macro to process the <programlisting> tag from the XML file: \defineXMLenvironment[programlisting]{\starttyping}{\stoptyping} This causes an error while processing. Most probably the \starttyping command breaks things inside the \defineXMLenvironment macro... Any guess how to solve this issue? Many thanks! Richard
Richard Gabriel said this at Tue, 14 Dec 2004 16:48:05 +0100:
So I defined a macro to process the <programlisting> tag from the XML file: \defineXMLenvironment[programlisting]{\starttyping}{\stoptyping}
Richard, Have you taken a look at x-contml to see how it solves this problem with verbatim? adam -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Adam T. Lindsay, Computing Dept. atl@comp.lancs.ac.uk Lancaster University, InfoLab21 +44(0)1524/510.514 Lancaster, LA1 4WA, UK Fax:+44(0)1524/510.492 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Hi Adam, I did so right now (thanks for the hint!). But in that file ther's only solved a case when each line of the verbatim text is placed in a special tag: <verbatim> <line>Dit \is nogal verbatim !</line> <line>Dit is {nogal} verbatim !</line> <line>Dit is <nogal> verbatim !</line> </verbatim> This is trivial because you can pass the contents of each <line> element as an argument to the \type command ( \defineXMLargument[line]{\type} ) But this solution is unusable e.g. for longer program or configuration file listings, and, mainly, the DocBook DTD doesn't define such tags. I need to process multiline verbatims enclosed in a single tag: <programlisting> Line 1 Line 2 Line 3 </programlisting> --- Of course I have some "dirty" workaround, but the result is really ugly... \defineXMLenvironment[programlisting]{ \bgroup \startpacked \tttf \obeylines\obeyspaces\obeytabs }{ \stoppacked \egroup } The line breaks are processed correctly. But all the tabs and spaces are treated as a single space. It seems the \obeyspaces and \obeytabs command are ignored or they do not work the way I'd expect. This will totally break the indentation and tabulation of the verbatim text... -Richard Adam Lindsay wrote:
Richard Gabriel said this at Tue, 14 Dec 2004 16:48:05 +0100:
So I defined a macro to process the <programlisting> tag from the XML file: \defineXMLenvironment[programlisting]{\starttyping}{\stoptyping}
Richard,
Have you taken a look at x-contml to see how it solves this problem with verbatim?
adam
Richard Gabriel wrote:
Hi Adam,
I did so right now (thanks for the hint!). But in that file ther's only solved a case when each line of the verbatim text is placed in a special tag:
<verbatim> <line>Dit \is nogal verbatim !</line> <line>Dit is {nogal} verbatim !</line> <line>Dit is <nogal> verbatim !</line> </verbatim>
This is trivial because you can pass the contents of each <line> element as an argument to the \type command ( \defineXMLargument[line]{\type} )
But this solution is unusable e.g. for longer program or configuration file listings, and, mainly, the DocBook DTD doesn't define such tags. I need to process multiline verbatims enclosed in a single tag:
<programlisting> Line 1 Line 2 Line 3 </programlisting>
--- Of course I have some "dirty" workaround, but the result is really ugly...
\defineXMLenvironment[programlisting]{ \bgroup \startpacked \tttf \obeylines\obeyspaces\obeytabs }{ \stoppacked \egroup }
The line breaks are processed correctly. But all the tabs and spaces are treated as a single space. It seems the \obeyspaces and \obeytabs command are ignored or they do not work the way I'd expect. This will totally break the indentation and tabulation of the verbatim text...
maybe the following is better \defineXMLenvironment [programlisting] {\processtaggeddisplayverbatim{</programlisting>}} {} \startbuffer <programlisting> Line 1 Line 2 Line 3 </programlisting> \stopbuffer \starttext \processXMLbuffer \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Hello Hans, thank you very much for the advice. It works almost perfectly, except one small (but important) detail: Let's have a HTML source code in the <programlisting> tag. It will be stored the following way in the XML file: <programlisting> <html> <body> <p>Some text</p> </body> </html> </programlisting> I have defined the entity conversion: \defineXMLentity[gt]{\char`\>{}} \defineXMLentity[lt]{\char`\<{}} This works OK if the entities occur somewhere in the normal text but it doesn't matter in the verbatim text. Is there any solution for this? Maybe changing catcodes of the & and ; characters? Thanks again... Richard Hans Hagen wrote:
Richard Gabriel wrote:
maybe the following is better
\defineXMLenvironment [programlisting] {\processtaggeddisplayverbatim{</programlisting>}} {}
\startbuffer <programlisting> Line 1 Line 2 Line 3 </programlisting> \stopbuffer
\starttext
\processXMLbuffer
\stoptext
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
_______________________________________________ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
Richard Gabriel wrote:
Hello Hans,
thank you very much for the advice. It works almost perfectly, except one small (but important) detail: Let's have a HTML source code in the <programlisting> tag. It will be stored the following way in the XML file: <programlisting> <html> <body> <p>Some text</p> </body> </html> </programlisting>
I have defined the entity conversion: \defineXMLentity[gt]{\char`\>{}} \defineXMLentity[lt]{\char`\<{}}
This works OK if the entities occur somewhere in the normal text but it doesn't matter in the verbatim text. Is there any solution for this? Maybe changing catcodes of the & and ; characters?
maybe it's enough to add \catcode`\&=\active Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Great! Thank you very, very much for your help, Hans! Richard Hans Hagen wrote:
Richard Gabriel wrote:
Hello Hans,
thank you very much for the advice. It works almost perfectly, except one small (but important) detail: Let's have a HTML source code in the <programlisting> tag. It will be stored the following way in the XML file: <programlisting> <html> <body> <p>Some text</p> </body> </html> </programlisting>
I have defined the entity conversion: \defineXMLentity[gt]{\char`\>{}} \defineXMLentity[lt]{\char`\<{}}
This works OK if the entities occur somewhere in the normal text but it doesn't matter in the verbatim text. Is there any solution for this? Maybe changing catcodes of the & and ; characters?
maybe it's enough to add
\catcode`\&=\active
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
_______________________________________________ ntg-context mailing list ntg-context@ntg.nl http://www.ntg.nl/mailman/listinfo/ntg-context
participants (3)
-
Adam Lindsay
-
Hans Hagen
-
Richard Gabriel