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

Reply via email to