Map XML attributes to variables, dynamically
Hello! A Markdown document resembles the following: ::: {.concurrent title="Berth 5" location="San Diego"} Text Goes Here ::: ::: {.concurrent title="Road" location="Beale AFB"} Different Text Goes Here ::: The XHTML generated from that document resembles: <div class="concurrent" data-title="Berth 5" data-location="San Diego"> Text Goes Here </div> <div class="concurrent" data-title="Road" data-location="Beale AFB"> Different Text Goes Here </div> Environments for the DIV element gets translated using: \startxmlsetups xml:div \start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups This creates "\startconcurrent" and "\stopconcurrent", which are later defined using "\definestartstop[concurrent]". I'd like to dynamically define all the data- attributes to make key/value pairs accessible from the document. For example, I have this: \definestartstop[concurrent][ before={% \blank[big]% \setMPtext{1}{Berth 5}% \startTextConcurrentFrame}, after={\stopTextConcurrentFrame\blank[big]}, ] I'd like to replace \setMPText calls with a reference to a dynamically created variable reference. For example: \setMPtext{1}{\usermap[concurrent.title]} \setMPtext{2}{\usermap[concurrent.location]} I can verify the attribute values exist by exporting them to the document: \startxmlsetups xml:div title:\xmlatt{#1}{data-title} location:\xmlatt{#1}{data-location} \start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups How would you change the xml:div setup to create a map of its attributes as key/value pairs? Thank you!
On 8/10/2023 9:10 AM, Thangalin wrote:
Environments for the DIV element gets translated using:
\startxmlsetups xml:div
\setvariable {div} {\xmlatt{#1}{class}} {#1}
\start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups \setMPtext{1}{\usermap[concurrent.title]} \setMPtext{2}{\usermap[concurrent.location]}
\setMPtext{1}{% \xmlatt {\getvariable {div} {concurrent} {title}% }
I can verify the attribute values exist by exporting them to the document: something like that .. untested as no mwe
Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Here's an MWE:
% SOT
\startbuffer[demo]
<html>
<body>
<div class="concurrent" data-title="Berth 5" data-location="San Diego">
Text Goes Here
</div>
<div class="concurrent" data-title="Road" data-location="Beale AFB">
Different Text Goes Here
</div>
</body>
</html>
\stopbuffer
\startxmlsetups xml:xhtml
\xmlsetsetup{\xmldocument}{*}{-}
\xmlsetsetup{\xmldocument}{html|body}{xml:*}
\xmlsetsetup{\xmldocument}{div}{xml:*}
\stopxmlsetups
\xmlregistersetup{xml:xhtml}
\startxmlsetups xml:html
\xmlflush{#1}
\stopxmlsetups
\startxmlsetups xml:body
\xmlflush{#1}
\stopxmlsetups
\startxmlsetups xml:div
\setvariable{div}{\xmlatt{#1}{class}}{#1}
\start[\xmlatt{#1}{class}]\xmlflush{#1}\stop
\stopxmlsetups
\definestartstop[concurrent][
before={TITLE: \xmlatt{\getvariable {div} {concurrent} {title}}},
]
\starttext
\xmlprocessbuffer{main}{demo}{}
\stoptext
% EOT
It doesn't look like the variables are taking, regardless of whether
{title} or {data-title} are used.
On Thu, Aug 10, 2023 at 12:44 AM Hans Hagen
On 8/10/2023 9:10 AM, Thangalin wrote:
Environments for the DIV element gets translated using:
\startxmlsetups xml:div
\setvariable {div} {\xmlatt{#1}{class}} {#1}
\start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups \setMPtext{1}{\usermap[concurrent.title]} \setMPtext{2}{\usermap[concurrent.location]}
\setMPtext{1}{% \xmlatt {\getvariable {div} {concurrent} {title}% }
I can verify the attribute values exist by exporting them to the document: something like that .. untested as no mwe
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / https://www.ntg.nl/mailman/listinfo/ntg-context webpage : https://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : https://contextgarden.net
___________________________________________________________________________________
On 8/10/2023 10:14 AM, Thangalin wrote:
Here's an MWE:
% SOT \startbuffer[demo] <html> <body> <div class="concurrent" data-title="Berth 5" data-location="San Diego"> Text Goes Here </div> <div class="concurrent" data-title="Road" data-location="Beale AFB"> Different Text Goes Here </div> </body> </html> \stopbuffer
\startxmlsetups xml:xhtml \xmlsetsetup{\xmldocument}{*}{-} \xmlsetsetup{\xmldocument}{html|body}{xml:*} \xmlsetsetup{\xmldocument}{div}{xml:*} \stopxmlsetups
\xmlregistersetup{xml:xhtml}
\startxmlsetups xml:html \xmlflush{#1} \stopxmlsetups
\startxmlsetups xml:body \xmlflush{#1} \stopxmlsetups
\startxmlsetups xml:div \setvariable{div}{\xmlatt{#1}{class}}{#1} \start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups
\definestartstop[concurrent][ before={TITLE: \xmlatt{\getvariable {div} {concurrent} {title}}}, ]
\starttext \xmlprocessbuffer{main}{demo}{} \stoptext % EOT
It doesn't look like the variables are taking, regardless of whether {title} or {data-title} are used.
\startxmlsetups xml:div \setvariable{div}{\xmlatt{#1}{class}}{#1} \start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups \definestartstop [concurrent] [before={TITLE: \xmlatt{\getvariable{div}{concurrent}}{data-title}}] -- watch the braces -- use data-title and not title Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 8/10/2023 10:37 AM, Hans Hagen wrote:
On 8/10/2023 10:14 AM, Thangalin wrote:
Here's an MWE:
% SOT \startbuffer[demo] <html> <body> <div class="concurrent" data-title="Berth 5" data-location="San Diego"> Text Goes Here </div> <div class="concurrent" data-title="Road" data-location="Beale AFB"> Different Text Goes Here </div> </body> </html> \stopbuffer
\startxmlsetups xml:xhtml \xmlsetsetup{\xmldocument}{*}{-} \xmlsetsetup{\xmldocument}{html|body}{xml:*} \xmlsetsetup{\xmldocument}{div}{xml:*} \stopxmlsetups
\xmlregistersetup{xml:xhtml}
\startxmlsetups xml:html \xmlflush{#1} \stopxmlsetups
\startxmlsetups xml:body \xmlflush{#1} \stopxmlsetups
\startxmlsetups xml:div \setvariable{div}{\xmlatt{#1}{class}}{#1} \start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups
\definestartstop[concurrent][ before={TITLE: \xmlatt{\getvariable {div} {concurrent} {title}}}, ]
\starttext \xmlprocessbuffer{main}{demo}{} \stoptext % EOT
It doesn't look like the variables are taking, regardless of whether {title} or {data-title} are used.
\startxmlsetups xml:div \setvariable{div}{\xmlatt{#1}{class}}{#1} \start[\xmlatt{#1}{class}]\xmlflush{#1}\stop \stopxmlsetups
\definestartstop [concurrent] [before={TITLE: \xmlatt{\getvariable{div}{concurrent}}{data-title}}]
-- watch the braces -- use data-title and not title
Hans You can actually do this:
\startxmlsetups xml:div \setupstartstop [\xmlatt{#1}{class}] [before={TITLE: \xmlatt{#1}{data-title}}]% \start[\xmlatt{#1}{class}]% \xmlflush{#1} \stop \stopxmlsetups \definestartstop [concurrent] and you then can also do \namedstartstopparameter{concurrent}{before} when needed, which save you the intermediate variable because it's already in before, so from that it's a natural step to \startxmlsetups xml:div \setupstartstop [\xmlatt{#1}{class}] [title=\xmlatt{#1}{data-title}, before={TITLE: \namedstartstopparameter{concurrent}{title}}]% \start[\xmlatt{#1}{class}]% \xmlflush{#1} \stop \stopxmlsetups \definestartstop [concurrent] and then with: \namedstartstopparameter{concurrent}{title} (i'll add this example to the test suite as demo) ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On 8/10/2023 10:50 AM, Hans Hagen via ntg-context wrote:
On 8/10/2023 10:37 AM, Hans Hagen wrote:
On 8/10/2023 10:14 AM, Thangalin wrote:
Here's an MWE: attached the more final version
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
participants (3)
-
Hans Hagen
-
Hans Hagen
-
Thangalin