[luatex] The node returned by node.traverse().
Paul Isambert
zappathustra at free.fr
Wed Feb 15 14:44:48 CET 2012
luigi scarso <luigi.scarso at gmail.com> a écrit:
>
> On Wed, Feb 15, 2012 at 9:02 AM, Paul Isambert <zappathustra at free.fr> wrote:
> > Hello there,
> >
> > I have a problem with the identity, so to speak, of nodes returned by
> > node.traverse(); I don't know if I'm missing something (perhaps related
> > to Lua rather than LuaTeX) or what. The following code should illustrate
> > the problem (I do not bother with breaks since there is only one node in
> > the list and one entry in the table):
> >
> > %%%%%%%%%%%
> > \setbox0=\hbox{a}
> >
> > \directlua{
> > local head = tex.box[0].head
> > local t = { [head] = true }
> > for n in node.traverse(head) do
> > texio.write_nl(tostring(t[n]))
> > texio.write_nl(tostring(n == head))
> > for a in pairs(t) do
> > if a == n then
> > texio.write_nl("They match!")
> > end
> > end
> > end
> > }
> The key of t is head, and head is a userdata.
>
> n==head is managed by __eq(n,head) handler so can happen that
> __eq(n,head) is true based on some considerations of n and head.
>
> On the other side rawequal(n,head) gives false
> so n and head have not the same identity (can be a different address,
> but we don't have a
> way to print addresses in Lua).
> With
> local head_copy = head
> rawequal(head_copy,head)
> gives true , i.e head_copy and head have the same identity.
> (and of course head_copy == head is true )
>
> As far I know, keys are based on identities, so t[n] and t[head] differs.
Thank you Luigi; I'd thought about metatable magic but I hadn't considered
rawequal to make sure.
Now I should recast the question: why are "head" an "n" different? I
suppose the answer of course is: because node.traverse() doesn't really
return the node, but then what does it return and why?
Best,
Paul
More information about the luatex
mailing list