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