From: mf via ntg-context <ntg-context@ntg.nl>
To: ntg-context@ntg.nl
Cc: mf <massifr@fastwebnet.it>
Subject: Re: embedding tex and lua code in <script> elements inside HTML - was: redefining xmlsetups inside a XML document
Date: Thu, 24 Mar 2022 14:34:16 +0100 [thread overview]
Message-ID: <a9f4af93-73f3-096a-738e-107c3e26e844@fastwebnet.it> (raw)
In-Reply-To: <957bba69-72bb-1a1b-1827-dc0dcbbe82bd@fastwebnet.it>
[-- Attachment #1: Type: text/plain, Size: 6378 bytes --]
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@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@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
> ___________________________________________________________________________________
[-- Attachment #2: nested-xmlsetup.tex --]
[-- Type: text/x-tex, Size: 1027 bytes --]
\startxmlsetups html
\xmlsetsetup{#1}{{html|head}}{html:flush}
\xmlsetsetup{#1}{{html head script}}{html:script:context}
\xmlsetsetup{#1}{{html body}}{html:body}
\xmlsetsetup{#1}{p|i}{html:*}
\stopxmlsetups
\startxmlsetups html:flush
\xmlflush{#1}
\stopxmlsetups
\startluacode
function xml.functions.parseScript(s)
local mimetype = s and s.at and s.at.type
if mimetype then
if mimetype == "text/vnd.context" or mimetype == "text/vnd.lmtx" then
lxml.context(s)
elseif mimetype == "text/x-lua" then
local luacode = xml.content(s)
context( loadstring(luacode) )
end
end
end
\stopluacode
\startxmlsetups html:script:context
\xmlfunction{#1}{parseScript}
\stopxmlsetups
\startxmlsetups html:body
\starttext
\xmlflush{#1}
\stoptext
\stopxmlsetups
% default setup for paragraphs
\startxmlsetups html:p
\dontleavehmode\xmlflush{#1}\par
\stopxmlsetups
% default setup for italic inlines
\startxmlsetups html:i
{\it\xmlflush{#1}}%
\stopxmlsetups
\xmlregistersetup{html}
[-- Attachment #3: nested-xmlsetup.xhtml --]
[-- Type: application/xhtml+xml, Size: 703 bytes --]
[-- Attachment #4: Type: text/plain, Size: 493 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@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
___________________________________________________________________________________
prev parent reply other threads:[~2022-03-24 13:34 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-10 15:59 mf via ntg-context
2022-03-10 16:52 ` Hans Hagen via ntg-context
2022-03-22 14:23 ` mf via ntg-context
2022-03-22 16:07 ` mf via ntg-context
2022-03-24 13:34 ` mf via ntg-context [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a9f4af93-73f3-096a-738e-107c3e26e844@fastwebnet.it \
--to=ntg-context@ntg.nl \
--cc=massifr@fastwebnet.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).