[XeTeX] Adding some basic programming functionality (mostly ICU string operations) to XeTeX?

Michiel Kamermans pomax at nihongoresources.com
Wed Dec 23 13:55:16 CET 2009

Hi all,

in addition to the things that already makes XeTeX unique 
(intercharclass behaviour, system fonts), could a request for string 
operations be considered? There's two things I'm missing in TeX, one 
being the ability to perform normal arithmetic, the other being string 
operations. Both of these I expect to be properly tackled by the LUATeX 
project, except that's roadmapped to be "done" in 2012...

How hard would it be to implement -at least- string operations in XeTeX 
with a few additional special xetex macros? Something that lets one use 
special commands along the lines of:

\XeTeXissubstring{fragment}{string}- true if fragment in string, false 
if not ('needle in haystack' argument ordering)
\XeTeXcountsubstrings{fragment}{string} - 0 if fragment not in string, n 
if fragment in string n times. (different functionality from issubstring 
- issubstring should not rely on countsubstring>0 =)
\XeTeXsubstring{string}{pos}{length} - generates a substring starting at 
(unicode) character position 'pos' (starting at 0?) of length 'length'.
\XeTeXstringlength{string} - gives the string length (in terms of 
unicode glyphs)

I know that in plain LaTeX the ifsubstring and countsubstring ideas are 
available through the "substr" package, but this package does not offer 
constructive functionality, only evaluative functionality. Having to 
rely on a package that doesn't even come close to proper string 
operations, when the ICU library that XeTeX relies on already offers all 
the unicode-correct functions that one might want to work with, strikes 
me as rather odd from an end-user point of view =)

ICU also implements regular expression processing, so ideally -in 
addition to simple string operations- there could also be two special 
XeTeX commands for working with regexp, such as:

\XeTeXrematch{fragment}{string}{modifiers} - true if matched, false if not
\XeTeXrereplace{search}{replace}{string}{modifiers} - replaces all 
instances of the search pattern with the replace pattern in the given 

(As for arithmetics, a simple set of floating point \XeTeXadd{1}{2}, 
\XeTeXsubtract{1}{2}, \XeTeXmultiply{1}{2}, \XeTeXdivide{1}{2} and 
perhaps \XeTeXpower{1}{2} and \XeTeXroot{1}{2} with arguments 1 and 2 
being pure numerals would already be incredibly useful. For these kind 
of operations, there is no point in relying on counters, when an 
immediate evaluation can be performed. A little care might be required 
for dealing with nested arithmetic operations, but as long as the 
arguments are purely numerical, inner-most first evaluation should make 
this a non-problem)

Would this be difficult?

- Mike "Pomax" Kamermans

More information about the XeTeX mailing list