[XeTeX] expandable version of \char

Bruno Le Floch blflatex at gmail.com
Tue May 27 19:46:00 CEST 2014

Hello all,

On 5/4/14, David Carlisle <d.p.carlisle at gmail.com> wrote:
> Would it be possible (ever:-) to add a \Uchar primitive like that in
> luatex?
>
> So like \char but is expandable and returns a character token rather than a
> typesetting primitive.

I think it should not be too hard to use the procedures scan_int and
print_char to build the primitive \Uchar.  My main question will be:
where do I find the XeTeX codebase?  I seem to have found it at some
point, so I have an old version on my computer, but it would be better
if I make a diff starting from the right files.

Here is how it could be done.  First declare a new command code for
\Uchar by defining XeTeX_Uchar_code and shifting etex_convert_codes by
1:

@d XeTeX_glyph_name_code=10
@d XeTeX_Uchar_code = 11
@d etex_convert_codes=XeTeX_Uchar_code+1 {end of \eTeX's command codes}

Then declare the primitive via

primitive("Uchar",convert,XeTeX_Uchar_code);@/
@!@:XeTeX_Uchar_}{\.{\\Uchar} primitive@>

Then add the second line in

XeTeX_glyph_name_code: print_esc("XeTeXglyphname");
XeTeX_Uchar_code: print_esc("Uchar");

In @ @<Cases of `Scan the argument for command |c|'@>= add

XeTeX_Uchar_code: scan_int;

In @ @<Cases of `Print the result of command |c|'@>= add

XeTeX_Uchar_code: print_char(cur_val);

Am I missing anything?  Ah, I don't know if this works for >BMP
characters, as it seems XeTeX's print_char treats them specially.

Regards,
Bruno