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
-----------------------------------------------------------------
___________________________________________________________________________________
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://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to