[Dev-luatex] tex.currentgrouplevel

David Kastrup dak at gnu.org
Tue Aug 19 11:03:02 CEST 2008


"Jonathan Sauer" <Jonathan.Sauer at silverstroke.com> writes:

> Hello,
>
> given is the following PlainTeX file:
>
> %&luatex
>
> % \message{\the\currentgrouplevel}
> \directlua0{texio.write_nl(tex.currentgrouplevel)}
>
> \bye
>
>
> This results in:
>
> This is LuaTeX, Version snapshot-0.29.0-2008072919 (Web2C 7.5.7)
> (currentgrouplevel.tex
> ! You can't use `\currentgrouplevel' as tex library index.
> l.3 ...lua0{texio.write_nl(tex.currentgrouplevel)}
>                                                   
> ? 
>
>
> Looking into section 4.1.1 of the manual, currentgrouplevel is not in
> the list of tex's integer parameters -- unfortunately. It would be a
> quite useful addition in order to create `grouped variables' in Lua
> (variables whose previous value is restored at the end of a TeX
> group):
>
>
> -- 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

Whether or not reading the current group level might be interesting is a
different question.  But for this application, it is not sufficient.

What one would need is something like a unique group _id_, and a means
to check whether a certain group id is dead (the group has ended) or
not.  Something like that.

-- 
David Kastrup


More information about the dev-luatex mailing list