[luatex] node list

Paul Isambert zappathustra at free.fr
Wed Nov 28 19:44:05 CET 2012


Herbert Voss <Herbert.Voss at fu-berlin.de> a écrit:
> Hi,
> I am playing with nodes and callbacks to understand how it works.
> 
> \directlua{
> function checknode(head)
> while head do
>   if head.id==37 then
>    if head.char==string.byte("c") then
>     n=node.new(37)
>     n.char=string.byte("d")
>     n.font=1
>     head=node.insert_after(head,head,n)
>    end
>   end
>   if head.id==0 or head.id==1 then checknode(head.list) end
>   head=head.next
> end
> return true
> end
> callback.register("post_linebreak_filter",checknode,"checknode")}

callback.register takes only two arguments.

> abc1
> \bye
> 
> I tried to test "node.insert_after()" instead of using the next and prev
> fields. Is it the correct way to use
> 
>     head=node.insert_after(head,head,n)
> 
> if I want to insert the new glyph node bwtween existing nodes?

More clearly:
  
  head = node.insert_after(a, b, c)

to insert c after b in the list whose head is a (actually any node in
that list).

> And am i right, that the prev field from node n is missing, but
> doesn't hurt in this case? I know, that I can set it.

Actually it IS set (try "print(n.prev)"), and I'm surprised myself,
because I thought ``natural'' nodelists (created by TeX) didn't set the
prev field of their nodes, but actually they're all set. (I thought that
because node.slide() is said to set those prev fields, so I concluded
that by default they aren't.)

But anyway it wouldn't hurt, at least on the TeX side (I don't know any
internal mechanism that needs prev to be set, but I might very well be
wrong).

Best,
Paul



More information about the luatex mailing list