Hello all,
Thanks for the help thus far. I'm now stuck on the next step, I'm
afraid. With a file to build a format something like:
\catcode `\{ = 1 \relax
\catcode `\} = 2 \relax
\catcode `\# = 6 \relax
\catcode `\^ = 7 \relax
\catcode `\^^I = 10 \relax
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname directlua\endcsname\relax
\else
\long\def\pdfstrcmp#1#2{%
\directlua
{%
joseph.strcmp("\luaescapestring{#1}","\luaescapestring{#2}")%
}%
}
\directlua
{
tex.enableprimitives('',tex.extraprimitives ())
module("joseph",package.seeall)
function strcmp(A, B)
if A == B then
tex.write("0")
elseif A < B then
tex.write("-1")
else
tex.write("1")
end
end
}
\fi
\dump
If I then try building the format and using it, with something as simple as
\ifnum\pdfstrcmp{a}{b}=0\TRUE\else\FALSE\fi
I get:
! LuaTeX error <\directlua >:1: attempt to index global 'joseph' (a nil
value)
stack traceback:
<\directlua >:1: in main chunk.
\pdfstrcmp ...ring {#1}","\luaescapestring {#2}")}
<*> \ifnum\pdfstrcmp{a}{b}
=0 \TRUE\else\FALSE\fi
?
Obviously I'm still getting something wrong.
(Also, am I correct in thinking that there is no way to avoid needing
\unexpanded to get the string comparison "as is"?)
That depends on the actual strings and the current catcode assignments
of course, but \directlua expands its argument, so yes, if you want to
compare control sequence names, you will need some way to make sure
they don't expand automatically.
Just thought I should check: thanks.
--
Joseph Wright