On 16/02/2010 15:43, luigi scarso wrote:
On Tue, Feb 16, 2010 at 1:14 PM, Joseph Wright<[email protected]> wrote:
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.
joseph = joseph or { }
Next you need to implement strcmp function
function joseph.strcmp(A,B)
-- your implementation here
Further testing suggests the issue may be slightly different to my
original explanation. As far as I can tell, if I use \pdfstrcmp as
defined above during the format-creation process then all is fine (for
example if I just stick \pdfstrcmp{a}{a} just before \dump): no errors.
However, if I try to use if after making a format then I get the error
as described. The conclusion is that the lua part of the set up does not
survive the format-creation process. This seems to be very odd: am I
getting something wrong? After all, the whole point of a format is that
it is a pre-compiled and self-contained entity.
--
Joseph Wright