Hello,

> > -- Assume there are TeX two count registers allocated, `stackIndex'
> > -- and `groupIndex'
> > tex.count.stackIndex = 0
> > tex.count.groupLevel = -1
> >
> > -- The `grouped variable' stack
> > local stack = { }
> >
> >
> > -- Sets a `grouped variable'
> > function set(name, value)
> >     if tex.currentgrouplevel > tex.count.grouplevel then
> >             -- New group opened since the last time. Create a new
stack
> >             -- element
> >             tex.count.stackIndex = tex.count.stackIndex + 1
> >             stack[tex.count.stackIndex] = { }
> >             tex.count.groupLevel = tex.currentgrouplevel
> >             
> >             -- TODO: Optional: Clear the stack above the new element
to
> >             -- release old values
> >     end
> >     
> >     -- Add the value
> >     stack[tex.count.stackIndex][name] = value end
> >
> >
> > -- Gets a `grouped variable'
> > function get(name)
> >     -- Look through the stack, top to bottom
> >     for i = tex.count.stackIndex, 1, -1 do
> >             if stack[i][name] then
> >                     return stack[i][name]
> >             end
> >     end
> >     
> >     -- Value not found
> >     return nil
> > end
> 
> Would not work anyway.  Local values would survive across
> \endgroup\begingroup

Why? At \endgroup, tex.count.stackIndex would be reset to the value it
had at the beginning of the group (since it is a tex \count register,
not a Lua variable). Then, after \begingroup, setting a variable would
notice that tex.count.groupLevel (which would also have been reset to
its previous value at \endgroup) is lower than tex.currentgrouplevel,
and a new stack element would be created, replacing the previous
element for this grouping level.


> David Kastrup

Jonathan

_______________________________________________
dev-luatex mailing list
[email protected]
http://www.ntg.nl/mailman/listinfo/dev-luatex

Reply via email to