Hi Jean-Pierre, 

 

Just a quick note: You’re using \xmltext where I would probably prefer 
\xmlflush. With \xmltext you may be loosing elements further down the tree (not 
the element content).

 

Say, the first line of the poem where:

<l>First <emph>light</emph> touches the closed houses,</l>

 

With \xmltext, you’ll just get the textual content. But with \xmlflush you can 
process nested elements as well:

 

\startxmlsetups xml:original

\language[english]

\xmlflush{#1}

\stopxmlsetups

 

\startxmlsetups xml:emph

\emph{\xmlflush{#1}}

\stopxmlsetups

 

Of course, that’s not relevant for your example, but it may be worth mentioning 
anyway.

 

Best,

Denis

 

Von: Jean-Pierre Delange via ntg-context <[email protected]> 
Gesendet: Freitag, 12. Dezember 2025 21:11
An: [email protected]
Cc: Jean-Pierre Delange <[email protected]>
Betreff: [NTG-context] Re: XML-TEI : \xmlprocessfile: unexpected character in 
setup name

 

Hi Hans !

Many thanks for your help and for the example you shared on the list. The 
method of placing the XML directly in a \startbuffer...\stopbuffer and then 
processing it with \xmlprocessbuffer had completely escaped me—it's a simple 
trick, but extremely robust and educational, especially for producing 
standalone MWEs. Using your skeleton as a basis, I was able to set up a working 
example (XML-TEI poem, original/translation in columns, line-by-line comments 
in the form of placeable notes), without any collisions with tables or footnote 
stacking. I am pasting the complete source file .tex below, which compiles as 
is; I will also integrate it as an MWE in ConTeXt Garden and in a French 
ConTeXt Wikibook I am working on, explicitly mentioning your approach.

Thank you again for this elegant and “ConTeXt-proof” solution !

Best regards,

JP

The MWE (1 PDF page) :

\setuppapersize[A4]

\setupbodyfont[Noto Serif,10pt] % Latin Modern (défaut), 10pt % choose a font

 

 

\setupTABLE[frame=off]

\setupTABLE[column][1][width=.1\textwidth]

\setupTABLE[column][2][width=.450\textwidth]

\setupTABLE[column][3][width=.45\textwidth]

% ----------------------------------------------------------

% Pied de page

% ----------------------------------------------------------

\setupfootertexts

[]

[{\tfxx Document composé avec \ConTeXt}]

 

% ----------------------------------------------------------

% Notes "plaçables" (robustes avec les tableaux)

% ----------------------------------------------------------

\definenote[commnote]

\setupnote[commnote][

rule=off,

paragraph=yes,

inbetween=\quad,

style=\tfxx,

]

% ----------------------------------------------------------

% XML dans un buffer (méthode Hans) — 16 vers + commentaire

% ----------------------------------------------------------

\startbuffer[poem]

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

<TEI>

<text>

<body>

<lg type="stanza">

<lg type="orig">

<l>First light touches the closed houses,</l>

<l>and the street breathes a pale memory.</l>

<l>I hear the fountain count its coins,</l>

<l>while sparrows edit yesterday’s crumbs.</l>

<l>The baker lifts a shutter like a veil,</l>

<l>and flour rises, a brief white weather.</l>

<l>At the corner, a newspaper opens,</l>

<l>its headlines folded like tired wings.</l>

<l>I write your name, then cross it out,</l>

<l>the paper keeps the pressure, not the meaning.</l>

<l>Between two words a well appears,</l>

<l>and echoes practice someone else’s voice.</l>

<l>A tram arrives; its doors hesitate,</l>

<l>as if choosing which century to enter.</l>

<l>In my pocket, a key warms slowly,</l>

<l>metal remembering the shape of home.</l>

</lg>

 

<lg type="trans">

<l>La première lumière effleure les maisons closes,</l>

<l>et la rue respire une mémoire pâle.</l>

<l>J’entends la fontaine compter ses pièces,</l>

<l>tandis que les moineaux corrigent les miettes d’hier.</l>

<l>Le boulanger relève un volet comme un voile,</l>

<l>et la farine monte, brève météo blanche.</l>

<l>Au coin, un journal s’ouvre,</l>

<l>ses gros titres pliés comme des ailes lassées.</l>

<l>J’écris ton nom, puis je le rature,</l>

<l>le papier garde la pression, pas le sens.</l>

<l>Entre deux mots, un puits apparaît,</l>

<l>et les échos répètent la voix d’un autre.</l>

<l>Un tram arrive ; ses portes hésitent,</l>

<l>comme si elles choisissaient le siècle où entrer.</l>

<l>Dans ma poche, une clé se réchauffe lentement,</l>

<l>le métal se souvient de la forme du foyer.</l>

</lg>

<lg type="comm">

<l>light] atmospheric motif; establishes the scene.</l>

<l>memory] semantic key recurring across the poem.</l>

<l>fountain] auditory image; introduces counting/metre.</l>

<l>edit] meta-textual verb; aligns with “variants” later.</l>

<l>shutter/veil] unveiling metaphor; morning as revelation.</l>

<l>white weather] synesthetic image; flour as climate.</l>

<l>newspaper] public voice entering the private walk.</l>

<l>headlines] folded wings; fatigue of news cycles.</l>

<l>name] inscription + erasure; motif of revision.</l>

<l>pressure/meaning] material trace vs semantic loss.</l>

<l>well] gap between words; abyss of interpretation.</l>

<l>someone else] polyphony; speaker displaced.</l>

<l>tram] modern intrusion; tests punctuation in table.</l>

<l>century] controlled anachronism; time as choice.</l>

<l>key] pocket object; memory by touch/heat.</l>

<l>home] “shape” as form; stable equivalence in translation.</l>

</lg>

</lg>

</body>

</text>

</TEI>

\stopbuffer

% ----------------------------------------------------------

% Setups XML (structure Hans)

% ----------------------------------------------------------

\startxmlsetups xml:main

\xmlsetsetup{#1}{*}{xml:*}

\stopxmlsetups

 

\xmlregistersetup{xml:main}

 

\startxmlsetups xml:TEI

\xmlcommand{#1}{text/body/lg[@type='stanza']}{xml:stanza}

\stopxmlsetups

 

\startxmlsetups xml:original

\language[english]

\xmltext{#1}

\stopxmlsetups

 

\startxmlsetups xml:translation

\language[french]

\xmltext{#1}

\stopxmlsetups

% commentaire -> note "plaçable"

\startxmlsetups xml:comment

\commnote{\xmltext{#1}}

\stopxmlsetups

 

\startxmlsetups xml:stanza

\bTABLE

\bTR

\bTH line \eTH

\bTH original \eTH

\bTH translation \eTH

\eTR

\dorecurse{\xmlcount{#1}{./lg[@type='orig']/l}}{%

\bTR

\bTD ##1 \eTD

\bTD

\xmlcommand{#1}{./lg[@type='orig']/l[##1]}{xml:original}

\xmlcommand{#1}{./lg[@type='comm']/l[##1]}{xml:comment}

\eTD

\bTD

\xmlcommand{#1}{./lg[@type='trans']/l[##1]}{xml:translation}

\eTD

\eTR

}

\eTABLE

\stopxmlsetups

 

\starttext

\centerline{\bfb Poème TEI-XML : original, traduction, notes “plaçables”}

\blank[big]

{\em 

Objectif : montrer une méthode robuste (inspirée de Hans Hagen) pour afficher 
un poème encodé en XML-TEI

en trois colonnes (n° du vers, original, traduction) tout en attachant un 
commentaire ligne à ligne sous forme de notes,

placées à un endroit choisi (ici : après le tableau), afin d’éviter les 
collisions “tableau + footnotes”. On remarquera les commentaires en anglais 
placés dans la cellule concernant le texte original.}

 

\blank[medium]

\centerline{\sc — Procédure (résumé technique) —}

\starttyping

1) XML intégré dans un buffer (\startbuffer...\stopbuffer)

2) Boucle sur le nombre de vers : \dorecurse{\xmlcount{#1}, etc.

3) Extraction des lignes via XPath : orig/l[i], trans/l[i], comm/l[i]

4) Commentaires collectés avec \commnote{\xmltext{#1}}, puis rendus par 
\placenotes[commnote]

\stoptyping

\blank[big]

 

\xmlprocessbuffer{main}{poem}{}

 

\blank[big]

% Notes en deux colonnes pour limiter les débordements

\startcolumns[n=2,balance=yes]

\placenotes[commnote]

\stopcolumns

\stoptext

 

 

 

Le 12/12/2025 à 10:01, Hans Hagen via ntg-context a écrit :

On 12/11/2025 9:01 PM, Jean-Pierre Delange via ntg-context wrote: 




\startxmlsetups xml:comm 
   \xmlfilter{#1}{./l}{\footnote{\xmltext{##1}}} 
\stopxmlsetups 


you have a double # here 

I attached a solution. 

Hans 


----------------------------------------------------------------- 
                                          Hans Hagen | PRAGMA ADE 
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands 
       tel: 038 477 53 69 | www.pragma-ade.nl <http://www.pragma-ade.nl>  | 
www.pragma-pod.nl <http://www.pragma-pod.nl>  
-----------------------------------------------------------------




___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!
 
maillist : [email protected] <mailto:[email protected]>  / 
https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : [email protected] / 
https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

Reply via email to