"Jonathan Sauer" <[EMAIL PROTECTED]> writes:

> Hello,
>
>> > -- Assume there are TeX two count registers allocated, `stackIndex'
>> > -- and `groupIndex'

groupLevel.  The code is a bit harder to follow for a human since the
names change throughout, and quite a bit harder to follow for Lua...

>> > 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.

Ok, the group housekeeping of the TeX counters should do the trick here.

-- 
David Kastrup, Kriemhildstr. 15, 44793 Bochum
_______________________________________________
dev-luatex mailing list
[email protected]
http://www.ntg.nl/mailman/listinfo/dev-luatex

Reply via email to