On 14-12-2011 19:33, Jon Crump wrote:
@xml:id==string.sub('#N020-18', 2) -> (ll.at and ll.at['xml:id'])==string.sub('#N020-18', 2) ! Missing number, treated as zero.
lua error with sub .. not sure what you want t o test here
indeed an error will prevent the multipass file to be saved (feature)
Hans
Thanks Hans, It's good to know the --result problem is not a bug, but a feature. My problem then arises from my use of \note as opposed to \footnote. In processing a<ref> tag in the xml, I need to test if the current ref node has an ancestor<div> with attribute: @xml:id='apr_engl'. If it does, I need to create a \footnote whose text comes from a<note> element with attribute xml:id='N020-18', if it does not, I need to create a \note whose reference number corresponds to the one created by \footnote and thus points to the same footnote contents:
<div xml:id='apr_arab'> <...> <ref target="#N020-18">referenced text</ref> <...> </div> <div xml:id='apr_engl'> <...> <ref target="#N020-18">referenced text</ref> <...> </div> .... <note xml:id='N020-18'>footnote contents</note>
To result in:
arabic text (1) english text (1) (1) footnote content
Currently I'm getting:
arabic text ?? english text (1) (1) footnote content
Document order problem maybe?
probably a too complex solution ... this is an alternative: \startbuffer[test] <text> <div type='a'> a <ref target="#N01"> a </ref> a <ref target="#N02"> a </ref> </div> <div type='b'> b <ref target="#N01"> b </ref> b <ref target="#N02"> b </ref> </div> <div type='c'> <note xml:id="N01">ONE</note> <note xml:id="N02">TWO</note> </div> </text> \stopbuffer \startxmlsetups xml:somesetups \xmlsetsetup{#1}{text|div|ref|note}{xml:*} \xmlsetsetup{#1}{div[@type='a']}{xml:div:a} \xmlsetsetup{#1}{div[@type='b']}{xml:div:b} \xmlsetsetup{#1}{div[@type='c']}{xml:div:c} \stopxmlsetups \xmlregistersetup{xml:somesetups} \startluacode function document.preprocess() local notes = { } for e in lxml.collected("main","note") do notes[e.at["xml:id"]] = 0 end for e in lxml.collected("main","ref") do local target = e.at["target"] if target then local id = string.gsub(target,"^#","") local n = notes[id] if n then n = n + 1 e.at.footnote = n notes[id] = n e.at["xml:id"] = id end end end end \stopluacode \startxmlsetups xml:text \ctxlua{document.preprocess()} \xmlflush{#1} \stopxmlsetups \startxmlsetups xml:div:a \par[div a]\par \xmlflush{#1} \par[div a]\par \stopxmlsetups \startxmlsetups xml:div:b \par[div b]\par \xmlflush{#1} \par[div b]\par \stopxmlsetups % \startxmlsetups xml:div:c % \par[div c]\par % \xmlflush{#1} % \par[div c]\par % \stopxmlsetups % % \startxmlsetups xml:note % [note \footnote[\letterhash\xmlatt{#1}{xml:id}]{\xmlflush{#1}}] % \stopxmlsetups % % \startxmlsetups xml:ref % [ref : \note[\xmlatt{#1}{target}] ] % \stopxmlsetups \startxmlsetups xml:div:c \stopxmlsetups \startxmlsetups xml:note \stopxmlsetups \startxmlsetups xml:ref \doifsomething{\xmlatt{#1}{footnote}} { \doifelse{\xmlatt{#1}{footnote}} {1} { [footnote \footnote[\xmlatt{#1}{xml:id}]{\xmlflush{#1}}] } { [note \note[\xmlatt{#1}{xml:id}]{\xmlflush{#1}}] } } \stopxmlsetups \starttext \xmlprocessbuffer{main}{test}{} \stoptext (if it works ... wikify it) ----------------------------------------------------------------- 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 -----------------------------------------------------------------