Hi,

 

I need to process URLs in XML documents differently depending on the target. Thanks to Hans and Thomas I can now deal with the attributes.

Now I need to prefix certain kind of targets with a certain URL (a web viewer for IIIF images in this particular case). The prefix contains a #, which, as a special character seems to cause an error. Adding a double hash seems to work, but those ## will end up in the link URL. How can I properly escape a single #? I’ve already tried using \Ux{23}, but that won’t work either.

 

Best,

Denis

 

\setupinteraction[state=start]

 

\startxmlsetups xml:test

                \xmlsetsetup{#1}{*}{-}

                \xmlsetsetup{#1}{doc|element}{xml:*}

\stopxmlsetups

 

\xmlregisterdocumentsetup{test}{xml:test}

 

\startxmlsetups xml:doc

\xmlflush{#1}

\stopxmlsetups

 

\startluacode

     function xml.finalizers.tex.url(e,a)

         local u = #e > 0 and e[1].at[a]

         local s = u and lpeg.match(lpeg.patterns.urlunescaper,u)

         context(s)

     end

\stopluacode

 

\startxmlsetups xml:element

\xmldoifelse{#1}{.[@href and contains(@href,'https://iiif.ub.unibe.ch')]}

 

                {\goto{\xmlflush{#1}}[url(https://uv-v4.netlify.app/##?manifest=\xmlatt{#1}{href})]} % gives me two hashes in the Link

               

                %{\goto{\xmlflush{#1}}[url(https://uv-v4.netlify.app/#?manifest=\xmlatt{#1}{xlink:href})]} \par % does not work

               

                {\goto{\xmlflush{#1}}[url(\xmlatt{#1}{href})]}

\stopxmlsetups

 

 

\startbuffer[test]

<?xml version="1.0" encoding="UTF-8"?>

<doc>

<element href="https://iiif.ub.unibe.ch/presentation/v2.1/berner-inkunabeln/manifest/Inc%20I%20104%20fol%20a1r">IIIF-Link</element>

<element href="https://wiki.contextgarden.net/">Other Link</element>

</doc>

\stopbuffer

 

\starttext

 

\xmlprocessbuffer{test}{test}{}

 

\stoptext