Hello
My assumption was that everything is catcode 11 or 12 or some other harmless value. \directlua does indeed read the entire braced argument at once.
Thanks for your reply. When coming home yesterday, I experimented a little bit, and the results do not seem to match your answer. In Plain TeX: \directlua0{% tex.sprint('A')% \directlua0{tex.sprint('B')}% tex.sprint('C')% } This results in "LuaTeX error [string "luas[0]"]:1: attempt to index global 'Btex' (a nil value)". So it seems that the first \directlua expands its braced argument while reading it (possibly using get_x_token), thus also expands the second \directlua which inserts "B" into the token stream, resulting in "Btex.sprint('C')". This on the other hand works: \directlua0{% tex.sprint('A')% \directlua0{tex.sprint('tex')}% .sprint('C')% } In this case, the second \directlua inserts the table name "tex" into the token stream, resulting in "tex.sprint('C')". What do you think?
Best wishes, Taco
Jonathan