ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: mf via ntg-context <ntg-context@ntg.nl>
To: ntg-context@ntg.nl
Cc: mf <massifr@fastwebnet.it>
Subject: Re: redefining xmlsetups inside a XML document
Date: Tue, 22 Mar 2022 17:07:24 +0100	[thread overview]
Message-ID: <957bba69-72bb-1a1b-1827-dc0dcbbe82bd@fastwebnet.it> (raw)
In-Reply-To: <70329b93-6ac9-a87f-be4b-860dd43b1e6e@fastwebnet.it>

[-- Attachment #1: Type: text/plain, Size: 5049 bytes --]

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.

*  *  *

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
> ___________________________________________________________________________________

[-- Attachment #2: nested-xmlsetup.xhtml --]
[-- Type: application/xhtml+xml, Size: 714 bytes --]

[-- Attachment #3: nested-xmlsetup.tex --]
[-- Type: text/x-tex, Size: 1007 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 and mimetype == "text/vnd.context" then
    lxml.context(s)
  end
  if mimetype and mimetype == "text/x-lua" then
    local code = xml.text(s)
    context( "\\startluacode " .. code .. " \\stopluacode" )
  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 #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
___________________________________________________________________________________

  reply	other threads:[~2022-03-22 16:07 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 [this message]
2022-03-24 13:34       ` embedding tex and lua code in <script> elements inside HTML - was: " mf via ntg-context

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=957bba69-72bb-1a1b-1827-dc0dcbbe82bd@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).