ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* redefining xmlsetups inside a XML document
@ 2022-03-10 15:59 mf via ntg-context
  2022-03-10 16:52 ` Hans Hagen via ntg-context
  0 siblings, 1 reply; 5+ messages in thread
From: mf via ntg-context @ 2022-03-10 15:59 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: mf

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

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

Massi

[-- Attachment #2: nested-xmlsetup.tex --]
[-- Type: text/x-tex, Size: 1021 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}{html:p}
\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
end
function xml.functions.flushBody(b)
  local xmlsetups = b and b.at and b.at["data-xmlsetups"]
  if xmlsetups then
    lxml.tobuffer(b, ".", "body")
    context("\\typebuffer[body]")
    context.xmlprocessbuffer("body", "body", xmlsetups)
  else
    lxml.flush(b)
  end
end
\stopluacode

\startxmlsetups html:script:context
  \xmlfunction{#1}{parseScript}
\stopxmlsetups

\startxmlsetups html:body
  \starttext
    \xmlfunction{#1}{flushBody}
  \stoptext
\stopxmlsetups

\startxmlsetups html:p
  \dontleavehmode\xmlflush{#1}\par
\stopxmlsetups

\xmlregistersetup{html}

[-- Attachment #3: nested-xmlsetup.xhtml --]
[-- Type: application/xhtml+xml, Size: 339 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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-03-24 13:34 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-10 15:59 redefining xmlsetups inside a XML document 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       ` embedding tex and lua code in <script> elements inside HTML - was: " mf via ntg-context

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).