Le 19/11/2010 10:33, Taco Hoekwater a écrit :
On 11/18/2010 09:52 PM, Paul Isambert wrote:
Hello all,
I've been trying to devise a Lua function which, when fed a string,
returns a
list of nodes. The application I have in mind is line numbering,
counting lines
in the post_linebreak_filter and adding an \hbox with the number to
lines that
are a multiple of a given number. Everything should be done in Lua,
and thus the
counter must be converted to a list of nodes. I.e. the following
should be
possible:
mylist = string_tolist(tostring(linecounter))
This case is fairly straightforward, you could even prepare the 10
needed nodes in advance and then use node.copy() to chain them.
And here come the questions: Have I missed a definitely simpler way
to do what I
want?
No, there is not. The simple reason for that is that it is an
exceedingly tricky function to write in the general case: the
luatex main control function has numerous side-effects and global
state variables at the moment, making it unsuitable for general use
on 'tex input', while on the other hand it seemed a shame to write a
'copy' of main control just for this.
So ignore my previous message. I'd thought it might be quite tricky indeed.
The 'pure ascii input' is simple enough to do in pure lua, as seen from
your own code and Patrick's.
for item in node.traverse(head) do
if item.next then
-- If the second argument isn't there, LuaTeX crashes.
node.kerning(item, item.next)
end
end
This is overdoing it, there is no need for a loop here. In fact,
the reason for it crashing in the lacking .next case is probably
because the list is getting modified inside of the loop.
You should be able to simply run
node.kerning(head)
Yes, the manual is quite clear, but for some reason I'd understood that
the function applied to its argument only instead of the entire nodelist.
Best,
Paul