[NTG-context] Xml filtering in Lua

Thomas A. Schmitz thomas.schmitz at uni-bonn.de
Wed Nov 16 20:55:31 CET 2022


On 11/16/22 19:56, mf via ntg-context wrote:
> local ch_id = t.at["ch:id"]

You're right, of course, using a colon was a stupid idea. When I replace 
it with an underscore, you can see that both are in fact identical:

\startbuffer[test]
<document>
   <topics>
      <topic t_id="test1">
	<title>This is the first test</title>
	<date>22/11/16</date>
      </topic>
      <topic t_id="test2">
	<title>This is the second test</title>
	<date>22/11/17</date>
      </topic>
   </topics>
   <chapters>
      <chapter ch_id="test1">
	<content>
	  This will be the content of the <emph>first</emph> chapter.
	</content>
      </chapter>
      <chapter ch_id="test2">
	 <content>
	  This will be the content of the <emph>second</emph> chapter.
	 </content>
      </chapter>
   </chapters>
</document>
\stopbuffer

\startxmlsetups xml:testsetups
        \xmlsetsetup{#1}{*}{-}
	\xmlsetsetup{#1}{document|chapters|chapter|content|emph}{xml:*}
\stopxmlsetups

\xmlregistersetup{xml:testsetups}

\startxmlsetups xml:document
	\xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:chapters
	\xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:chapter
	\xmlfunction {#1} {chapter}
%	 \xmlflush {#1}	
\stopxmlsetups

\startxmlsetups xml:chapter:content
	\xmltext {#1} {content}
\stopxmlsetups

\startxmlsetups xml:emph
   {\em \xmlflush {#1}}
\stopxmlsetups

\startluacode
function xml.functions.chapter (t)
	 local chapter_id = t.at.ch_id
	 local other_chapter_id = t.at["ch_id"]
	 context (chapter_id)
	 context.par ()
	 context (other_chapter_id)
	 context.par ()
		local metadata = xml.filter (t, '../../topics/topic[@t:id=="%s"]', ch_id)
		print (inspect(metadata))
		lxml.command(t, ".", "xml:chapter:content")
		context.par ()
end
\stopluacode

\starttext
	\xmlprocessbuffer{main}{test}{}
\stoptext



More information about the ntg-context mailing list