From: Michael Guravage <guravage@literatesolutions.com>
To: ntg-context@ntg.nl
Subject: [NTG-context] XML processing, unwanted indentation/alignment
Date: Thu, 15 Feb 2024 21:28:32 +0100 [thread overview]
Message-ID: <CAL-A5LYre0jNp+=2e3FFST__2g1rU19YtTuGLAchiX0u=o7VHg@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 1767 bytes --]
Greetings,
I'm typesetting an address book whose addresses are in XML. A typical entry
has this structure:
<family surname="">
<address street="" housenumber="" postcode="1" city="" telephone="" />
<members>
<member first_name="" initials="" maiden_name="" birthday="" email=""
mobile="" />
<member first_name="" initials="" birthday="" email="" mobile="" />
<member first_name="" initials="" birthday="" />
</members>
</family>
initials and birthday are required, first_name can be left blank and email,
mobile and maiden_name are optional.
I've written a macro (name) to compose the name, i.e. initials, first_name
(maiden_name), and another macro (nameemaillink) to make the name a link
associated with an email address.
% Derive an individual's name
\def\name#1%
{\ifxmlattempty{#1}{first_name} {\xmlatt{#1}{initials}} \else
{\xmlatt{#1}{initials}, \xmlatt{#1}{first_name}} \fi
\ifxmlattempty{#1}{maiden_name} {} \else {
\tfxx(\xmlatt{#1}{maiden_name})} \fi}
% Create a mailto:link that associates a individual's name with their email
address.
\def\nameemaillink#1%
{\ifxmlattempty{#1}{email} {\name{#1}} \else {\goto{\name{#1}}
[url(mailto:\xmlatt{#1}{email})]} \fi}
I thought I was done when I noticed that a composed name with an empty
first name, with or without an email address, is slightly indented. In the
mwe Moe and Curly, without first names, are indented; while Shemp and
Michael aren't.
That the undesired indentation/alignment is dependent on the presence of a
first name is baffling. After this long description, if someone would look
at the code and tell me where I've gone wrong I would be very grateful. The
interesting bits begin on lines 8 and 12 in xml.tex.
--
With kind regards,
Michael
[-- Attachment #1.2: Type: text/html, Size: 2668 bytes --]
[-- Attachment #2: xml.tex --]
[-- Type: text/x-tex, Size: 2069 bytes --]
% XML processing instructions
% Turn a phone number into a tel:link - without spaces
\def\phonelink#1%
{\goto{#1} [url(tel:\cldcontext{string.nospaces("#1")})]}
% Derive an individual's name
\def\name#1%
{\ifxmlattempty{#1}{first_name} {\xmlatt{#1}{initials}} \else {\xmlatt{#1}{initials}, \xmlatt{#1}{first_name}} \fi
\ifxmlattempty{#1}{maiden_name} {} \else { \tfxx(\xmlatt{#1}{maiden_name})} \fi}
% Create a mailto:link that associates a individual's name with their email address.
\def\nameemaillink#1%
{\ifxmlattempty{#1}{email} {\name{#1}} \else {\goto{\name{#1}} [url(mailto:\xmlatt{#1}{email})]} \fi}
% Make an individual's mobile phone number a tel:link.
\def\mobilelink#1%
{\ifxmlattempty{#1}{mobile} {} \else {\phonelink{\xmlatt{#1}{mobile}}} \fi}
% Track these several elements.
\startxmlsetups xml:list:base
\xmlsetsetup{#1}{addressBook|family|address|members|member}{xml:list:*}
\stopxmlsetups
\xmlregisterdocumentsetup{list}{xml:list:base}
% When we encounter the root <addressBook> element merely flush the rest.
\startxmlsetups xml:list:addressBook
\xmlflush{#1}
\stopxmlsetups
% Place each family in a frametext box
\startxmlsetups xml:list:family
\startframedtext[width=\textwidth]
{\tfb \bf \xmlatt{#1}{surname}\ifxmlattempty{#1}{prefix}{}\else{, \xmlatt{#1}{prefix}}\fi}\blank
\xmlflush{#1}
\stopframedtext
\blank[big]
\stopxmlsetups
% Enumerate the address information
\startxmlsetups xml:list:address
\xmlatt{#1}{street} \xmlatt{#1}{housenumber}\crlf
\xmlatt{#1}{postcode} \xmlatt{#1}{city}\crlf
\ifxmlattempty{#1}{telephone}{\vskip -1em}\else{\phonelink{\xmlatt{#1}{telephone}}}\fi
%\vskip -1em
\xmlflush{#1}
\blank[big]
\stopxmlsetups
% The only purpose of the <members> element is to make a table of members.
\startxmlsetups xml:list:members
\starttabulate[|l|l|l|]
\xmlflush{#1}
\stoptabulate
\stopxmlsetups
% Each <member> gets his own table row.
\startxmlsetups xml:list:member
\NC \nameemaillink{#1} \NC \xmlatt{#1}{birthday} \NC \mobilelink{#1} \NC\NR
\stopxmlsetups
% finis
[-- Attachment #3: mwe.tex --]
[-- Type: text/x-tex, Size: 250 bytes --]
\environment xml.tex % XML processing instructions
\setupframedtext[frame=off, width=\textwidth, align={flushleft,broad,nothyphenated}]
\setupinteraction[state=start, color=darkblue]
\starttext
\xmlprocessfile{list}{mwe.xml}{}
\stoptext
% finis
[-- Attachment #4: mwe.xml --]
[-- Type: text/xml, Size: 777 bytes --]
<?xml version="1.0" encoding="utf-8"?>
<addressBook>
<family surname="Horwitz"> <!-- The Three Stooges -->
<address street="Dorpstraat" housenumber="42" postcode="1234 AB" city="Hilversum" telephone="0123 456789" />
<members>
<member first_name="Samuel" initials="S." birthday="17.03.1895" email="shemp@@stooges.com" mobile="0123456789" /> <!-- Shemp -->
<member first_name="" initials="M." birthday="19.06.1897" email="moe@stooges.com" mobile="0123456789"/> <!-- Moe -->
<member first_name="" initials="J." birthday="22.10.1903" mobile="0123456789" /> <!-- Curly -->
<member first_name="Michael" initials="M." birthday="09.03.1939" mobile="0123456789" /> <!-- Michael -->
</members>
</family>
</addressBook>
<!-- finis -->
[-- Attachment #5: mwe.pdf --]
[-- Type: application/pdf, Size: 13551 bytes --]
[-- Attachment #6: Type: text/plain, Size: 511 bytes --]
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / 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
___________________________________________________________________________________
next reply other threads:[~2024-02-15 20:33 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-15 20:28 Michael Guravage [this message]
2024-02-15 21:03 ` [NTG-context] " Wolfgang Schuster
2024-02-15 23:34 ` Bruce Horrocks
2024-02-16 8:32 ` Taco Hoekwater
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAL-A5LYre0jNp+=2e3FFST__2g1rU19YtTuGLAchiX0u=o7VHg@mail.gmail.com' \
--to=guravage@literatesolutions.com \
--cc=ntg-context@ntg.nl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).