handling HTML notes in ConTeXt
Dear list, I would like to be able to parse HTML output from pandoc with ConTeXt XML parser (or whichever the right name is). The only issue I cannot solve are footnotes. From markdown: Text^[A footnote.] pandoc parses into HTML as: <p>Text<a href="#fn1" class="footnoteRef" id="fnref1"><sup>1</sup></a></p> <div class="footnotes"> <hr /> <ol> <li id="fn1"><p>A footnote.<a href="#fnref1">↩</a></p></li> </ol> </div> Is there a way that the environment file can make a footnote of this? Sorry for the question, but I’m totally lost at this. Many thanks for your help, Pablo -- http://www.ousia.tk
On 12/28/2014 12:55 PM, Pablo Rodriguez wrote:
Dear list,
I would like to be able to parse HTML output from pandoc with ConTeXt XML parser (or whichever the right name is).
The only issue I cannot solve are footnotes. From markdown:
Text^[A footnote.]
pandoc parses into HTML as:
<p>Text<a href="#fn1" class="footnoteRef" id="fnref1"><sup>1</sup></a></p> <div class="footnotes"> <hr /> <ol> <li id="fn1"><p>A footnote.<a href="#fnref1">↩</a></p></li> </ol> </div>
Is there a way that the environment file can make a footnote of this?
Sorry for the question, but I’m totally lost at this.
\startbuffer[demo] <doc> <p>Text <a href="#fn1" class="footnoteRef" id="fnref1"><sup>1</sup></a> and <a href="#fn2" class="footnoteRef" id="fnref2"><sup>2</sup></a> </p> <div class="footnotes"> <hr /> <ol> <li id="fn1"><p>A footnote.<a href="#fnref1">↩</a></p></li> <li id="fn2"><p>A second footnote.<a href="#fnref2">↩</a></p></li> </ol> </div> </doc> \stopbuffer \starttext % variant 1: \startxmlsetups xml:initialize \xmlsetsetup{#1}{p|doc}{xml:*} \xmlsetsetup{#1}{a[@class='footnoteRef']}{xml:footnote} \xmlsetsetup{#1}{div[@class='footnotes']}{xml:nothing} \stopxmlsetups \xmlregistersetup{xml:initialize} \startxmlsetups xml:doc variant 1: \blank \xmlflush{#1} \blank \stopxmlsetups \startxmlsetups xml:p \xmlflush{#1} \stopxmlsetups \startxmlsetups xml:footnote (1)\footnote{\xmlfirst{main}{div[@class='footnotes']/ol/li[@id=string.sub('\xmlatt{#1}{href}',2)]}} \stopxmlsetups \startxmlsetups xml:initialize \xmlsetsetup{#1}{p|doc}{xml:*} \xmlsetsetup{#1}{a[@class='footnoteRef']}{xml:footnote} \xmlfilter{#1}{div[@class='footnotes']/ol/li/command(xml:collectnotes)} \xmlsetsetup{#1}{div[@class='footnotes']}{} \stopxmlsetups \xmlregistersetup{xml:initialize} \xmlprocessbuffer{main}{demo}{} % variant 2: \startxmlsetups xml:doc variant 2: \blank \xmlflush{#1} \blank \stopxmlsetups \startxmlsetups xml:p \xmlflush{#1} \stopxmlsetups \startluacode userdata.notes = {} \stopluacode \startxmlsetups xml:collectnotes \ctxlua{userdata.notes['\letterhash\xmlatt{#1}{id}'] = '#1'} \stopxmlsetups \startxmlsetups xml:footnote (2)\footnote{\xmlflush{\cldcontext{userdata.notes['\xmlatt{#1}{href}']}}} \stopxmlsetups \xmlprocessbuffer{main}{demo}{} \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Hans, many thanks for your sample. It is really amazing. Pablo On 12/28/2014 06:53 PM, Hans Hagen wrote:
\startbuffer[demo] <doc> <p>Text <a href="#fn1" class="footnoteRef" id="fnref1"><sup>1</sup></a> and <a href="#fn2" class="footnoteRef" id="fnref2"><sup>2</sup></a> </p> <div class="footnotes"> <hr /> <ol> <li id="fn1"><p>A footnote.<a href="#fnref1">↩</a></p></li> <li id="fn2"><p>A second footnote.<a href="#fnref2">↩</a></p></li> </ol> </div> </doc> \stopbuffer
\starttext
% variant 1:
\startxmlsetups xml:initialize \xmlsetsetup{#1}{p|doc}{xml:*} \xmlsetsetup{#1}{a[@class='footnoteRef']}{xml:footnote} \xmlsetsetup{#1}{div[@class='footnotes']}{xml:nothing} \stopxmlsetups
\xmlregistersetup{xml:initialize}
\startxmlsetups xml:doc variant 1: \blank \xmlflush{#1} \blank \stopxmlsetups
\startxmlsetups xml:p \xmlflush{#1} \stopxmlsetups
\startxmlsetups xml:footnote
(1)\footnote{\xmlfirst{main}{div[@class='footnotes']/ol/li[@id=string.sub('\xmlatt{#1}{href}',2)]}} \stopxmlsetups
\startxmlsetups xml:initialize \xmlsetsetup{#1}{p|doc}{xml:*} \xmlsetsetup{#1}{a[@class='footnoteRef']}{xml:footnote} \xmlfilter{#1}{div[@class='footnotes']/ol/li/command(xml:collectnotes)} \xmlsetsetup{#1}{div[@class='footnotes']}{} \stopxmlsetups
\xmlregistersetup{xml:initialize}
\xmlprocessbuffer{main}{demo}{}
% variant 2:
\startxmlsetups xml:doc variant 2: \blank \xmlflush{#1} \blank \stopxmlsetups
\startxmlsetups xml:p \xmlflush{#1} \stopxmlsetups
\startluacode userdata.notes = {} \stopluacode
\startxmlsetups xml:collectnotes \ctxlua{userdata.notes['\letterhash\xmlatt{#1}{id}'] = '#1'} \stopxmlsetups
\startxmlsetups xml:footnote
(2)\footnote{\xmlflush{\cldcontext{userdata.notes['\xmlatt{#1}{href}']}}} \stopxmlsetups
\xmlprocessbuffer{main}{demo}{}
\stoptext
participants (2)
-
Hans Hagen
-
Pablo Rodriguez