[luatex] Behavior of node lists.

Hans Hagen pragma at wxs.nl
Sat Nov 10 12:28:41 CET 2012

On 11/10/2012 11:55 AM, Stephan Hennig wrote:

> Good point, too.  But let me ask again, the returned nodes are always
> the same as those given as arguments, with changed fields, but they
> never change identity?  That's not clear from the manual.

Sure, why should they change identity? Think of something like this (no 
head checking and such):

here.next = newnode
newnode.prev = here
if here.next then
   here.next.prev = newnode
   newnode.next = here.next

why should nodes become different nodes?

(maybe you think that a head node is something special, but it's not, 
it's just a name for the first node in alist)

> The node 'list' terminology is a bit confusing.  These node 'lists' are
> actually trees.  The latter having sub-trees with their own root (head)
> nodes etc.  A list, in contrast, usually has one invariant head node
> (putting aside operations that explicitly change a list head).  Even
> though I guess, for someone with a strong TeX background it is a trivial
> fact, I think the manual should be a bit more explicit about what head
> exactly to use in insert_before/after.

it's not invariant

head = tex.box[0].list

then mess with the list starting with head and in case of pushing 
something in front adapt the head variable and afterwards set:

tex.box[0].list = head

just linked lists (the concept in luatex is not different from other 
programming langauges)

the manual is not a 'tutorial in programming' and 'linked lists'; in 
fact: a programmer should recognize the concept but a tex macro writer 
might be somewhat confused as tex itself because there is talk like "the 
main vertical list" in manuals but on the other hand, once one starts 
messing with that one knows about the stuff (there is no access to the 
list at the tex end apart from some \last.. and \un.. operations and 
maybe un*box and vsplit resemble some messing list)

concerning a tree: indeed it is a tree with some nodes (not only hlist 
etc but also glyphs that are ligatures) being trees themselves

actually, the tex tracing primitives (showbox etc) will show you that 
kind of nesting in the log


                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl

More information about the luatex mailing list