# [luatex] Getting the extra primitives?

Taco Hoekwater taco at elvenkind.com
Wed Feb 17 13:41:05 CET 2010

T T wrote:
> On 17 February 2010 11:08, Joseph Wright
> <joseph.wright at morningstar2.co.uk> wrote:
>> On 17/02/2010 09:27, Taco Hoekwater wrote:
>>> Lua stuff is not saved in the format unless you put in a lua bytecode
>>> register (wrapped in a function). This is inconvenient, I know, but
>>> serializing a whole lua state is a lot of work and therefore not done
>>> (yet?).
>> Okay, how would I do this? As it's only one function, I think some
>> awkwardness setting things up is acceptable. AS I'm looking at this from a
>> LaTeX-like point of view I'd like the format to be self-contained (no
>> additional files required for it to at least load and function "as
>
> Hi Joseph,
>
> I had a quick stab at this (with essentially no prior experience in
> LuaTeX programming). The following seemed to work for me and does what
> you want:

Yes. A somewhat more generic solution is this:

\directlua
{
tex.enableprimitives('',tex.extraprimitives ())
lua.bytecode[1]=function ()
function pdfstrcmp (A, B)
if A == B then
tex.write("0")
elseif A < B then
tex.write("-1")
else
tex.write("1")
end
end
end
lua.bytecode[1]()
}
\everyjob{\directlua{lua.bytecode[1]()}}
\long\def\pdfstrcmp#1#2{%
\directlua
{%
pdfstrcmp("\luaescapestring{#1}","\luaescapestring{#2}")%
}%
}