[NTG-context] embedding tex and lua code in <script> elements inside HTML - was: redefining xmlsetups inside a XML document

mf massifr at fastwebnet.it
Thu Mar 24 14:34:16 CET 2022


The attached MWE shows how to:

- embed tex code in <script type="text/vnd.context"> or <script 
type="text/vnd.lmtx"> HTML elements to be run by ConTeXt

- embed lua code in <script type="text/x-lua"> elements to be run by ConTeXt

- redefine xmlsetups from the HTML document itself

Massi

Il 22/03/22 17:07, mf via ntg-context ha scritto:
> I've added a <script type="text/x-lua"> in the <head> element (BTW,
> "text/x-lua" is the mimetype proposed by freedesktop.org for lua scripts.
> 
> That element is managed by this code:
> 
> ------------------------------
>    if mimetype and mimetype == "text/x-lua" then
>      local code = xml.text(s)
>      context( "\\startluacode " .. code .. " \\stopluacode" )
>    end
> ------------------------------
> 
> s is the table representing the script element.
> That works, but it has a problem with one-line comments:
> 
> ------------------------------
>    <script type="text/x-lua">
>      -- comment
>      context.setuppapersize{ "A7" }
>    </script>
> ------------------------------
> 
> The code above is considered a long comment as if it were written as
> ------------------------------
>    <script type="text/x-lua">
>      -- comment   context.setuppapersize{ "A7" }
>    </script>
> ------------------------------
> 
> so the context.setuppapersize function call is ignored.
> 
> The workaround is:
> ------------------------------
>    <script type="text/x-lua">
>      --[[ comment --]]
>      context.setuppapersize{ "A7" }
>    </script>
> ------------------------------
> 
> A lua analogous of \xmlcontext (line-wise) would be great.
> 


Hans prompted me to use xml.content() instead of xml.text(). The first 
one preserves newlines, so short comments don't extend to the next line.


> *  *  *
> 
> Here's another problem related to space in <script> elements.
> This code:
> 
> ------------------------------
>    <script type="text/vnd.context">
>      % default setup for paragraphs
>      \startxmlsetups myHtml:p
>        \dontleavehmode\red\xmlflush{#1}\par
>      \stopxmlsetups
> 
>      % default setup for italic inlines
>      \startxmlsetups myHtml:i
>        {\it\blue\xmlflush{#1}}% <-- problem here
>      \stopxmlsetups
>    </script>
> ------------------------------
> 
> adds a space after an <i> element.
> A solution could be this:
> 
> ------------------------------
>    \startxmlsetups myHtml:i
>      {\it\blue\xmlflush{#1}}\stopxmlsetups
> ------------------------------
> 
> I prefer this one:
> 
> ------------------------------
>    \startxmlsetups myHtml:i
>      {\it\blue\xmlflush{#1}}\relax
>    \stopxmlsetups
> ------------------------------
> 
> You need to end the line with a macro eating up all the trailing spaces 
> (newlines included).
> 
> Massi
> 
> Il 22/03/22 15:23, mf via ntg-context ha scritto:
>> I found the solution I was looking for. The command to run is still
>>
>> context --environment=nested-xmlsetup.tex --forcexml 
>> nested-xmlsetup.xhtml
>>
>> In the <script> element there's some tex code, which redefines the 
>> xmlsetups for <p> and <i> elements, coloring the first ones in red and 
>> the second ones in blue.
>>
>> The key command is
>>
>> \xmlsetsetup{\xmldocument}{p|i}{myHtml:*}
>>
>> where \xmldocument instead of #1 applies the myHtml:* setups to the 
>> whole XHTML document and not only to the <script> element identified 
>> by #1.
>>
>> I tried also this, to prevent redefining the setups of <html>, <head>, 
>> <script> elements:
>>
>> \xmlsetsetup{\xmlfirst{\xmldocument}{body}}{p|i}{myHtml:*}
>>
>> but it doesn't work, since \xmldocument seems to be the actual 
>> document instead of an id pointing to its root element.
>>
>> Massi
>>
>> Il 10/03/22 17:52, Hans Hagen ha scritto:
>>> On 3/10/2022 4:59 PM, mf via ntg-context wrote:
>>>> Hello,
>>>> I'm trying to add new templates (xmlsetups) from the XML document 
>>>> itself.
>>>>
>>>> See the attached MWE.
>>>>
>>>> - the XML document is a simple XHTML file
>>>>
>>>> - in the "head" element there's a "script" element with the "type" 
>>>> attribute set to "text/vnd.context", whose contents are then passed 
>>>> to \xmlcontext
>>>>
>>>> - the "body" element has a "data-xmlsetups" attribute whose value 
>>>> should tell which xmlsetups is to be applied on the body contents 
>>>> (it's defined in the "script" element above)
>>>>
>>>> If it worked, the resulting PDF should show the body element, 
>>>> followed by a "Hello world!" paragraph written in red.
>>>> But it does not work, because there's something I'm missing in the 
>>>> redefinition and application of xmlsetups.
>>>>
>>>> To try the MWE, type:
>>>>
>>>> context --environment=nested-xmlsetup.tex --forcexml 
>>>> nested-xmlsetup.xhtml
>>>      <script type="text/vnd.context">
>>>        \startxmlsetups myHtml
>>>         \xmlsetsetup{#1}{p}{myHtml:p}
>>>         % you're missing this
>>>         \xmlsetup{#1}{xml:process}
>>>         % which is
>>>         %  \xmlregistereddocumentsetups{#1}{#1}
>>>         %  \xmlmain{#1}
>>>        \stopxmlsetups
>>>
>>>        \startxmlsetups myHtml:p
>>>           \dontleavehmode\red\xmlflush{#1}\par
>>>        \stopxmlsetups
>>>      </script>
>>>
>>
>> ___________________________________________________________________________________ 
>>
>> If your question is of interest to others as well, please add an entry 
>> to the Wiki!
>>
>> maillist : ntg-context at ntg.nl / 
>> http://www.ntg.nl/mailman/listinfo/ntg-context
>> webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
>> archive  : https://bitbucket.org/phg/context-mirror/commits/
>> wiki     : http://contextgarden.net
>> ___________________________________________________________________________________
> 
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
> 
> maillist : ntg-context at ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
> archive  : https://bitbucket.org/phg/context-mirror/commits/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nested-xmlsetup.tex
Type: text/x-tex
Size: 1027 bytes
Desc: not available
URL: <http://mailman.ntg.nl/pipermail/ntg-context/attachments/20220324/adfc55c3/attachment.tex>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nested-xmlsetup.xhtml
Type: application/xhtml+xml
Size: 703 bytes
Desc: not available
URL: <http://mailman.ntg.nl/pipermail/ntg-context/attachments/20220324/adfc55c3/attachment.xhtml>


More information about the ntg-context mailing list