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

Reply via email to