Le 16/10/2011 19:13, Yannis Haralambous a écrit :
Hi,
I'm using
for t in node.traverse(h) do
texio.write_nl(string.rep("...",prof) .. 'NODE type=' .. node.type(t.id)
.. ' subtype=' .. t.subtype )
end
in the pre_linebreak_filter to display all nodes in an hlist. This works well.
My question is: how to access math lists? When there is math in my document I get only
one node, of type "math" (subtype 1),
I guess that behind that node there is an mlist, but how can I traverse it?
I found the mlist_to_hlist() method, but when I do
for x in node.traverse(node.mlist_to_hlist(t,"text",true)) do
texio.write_nl('in MATH list ' .. string.rep("...",prof) ..
'NODE type=' .. node.type(x.id) .. ' subtype=' .. x.subtype )
end
I get the following error:
! This can't happen (mlist1).
l.14
I'm broken. Please show this to someone who can fix can fix
And even if I manage to convert the mlist into a hlist to traverse it, the
question is: how do I get back to the mlist? (since I want
to replace some glyphs by others).
In the pre_linebreak_filter the mlist has already been turned into an
hlist. So you'll find usual nodes surrounded by math nodes. To access
the mlist itself, you have to use the mlist_to_hlist callback:
callback.register("mlist_to_hlist",
function (h, d, p)
for t in node.traverse(h) do
texio.write_nl(string.rep("...",prof) .. 'NODE type=' ..
node.type(t.id) .. ' subtype=' .. t.subtype )
end
return node.mlist_to_hlist(h, d, p)
end)
Note that the node.mlist_to_hlist function is called there, to do the
conversion the callback normally does by itself.
Best,
Paul