How can I process every single letter in math? Processing
glyph nodes in text is more or less trivial, and to some
extent even in-line math (surrounded by 'math' type nodes),
but processing math, including displays, sub/superscripts,
fractions, radicals. etc.? From the manual I think the
solution must be the node.mlist_to_hlist and the
corresponding callback [...]
That is the correct callback. But at this point, you are still working
on noads, not nodes, so ids 0 and 1 will not be the only ones containing
nested node lists.
See the following code, taken from minim-math.lua:
-----------------------------------------------------------------
local listmathfields = { 'head', 'nucleus', 'sub', 'sup', 'accent',
'bot_accent', 'display', 'text', 'script', 'scriptscript', 'num',
'denom', 'degree', 'next' } -- note that ‘next’ should be last!
local function noad_iterator(head)
local nodelist = { up=nil, current=head }
return function()
if nodelist == nil then return nil end
local n = nodelist.current
nodelist = nodelist.up
for _,f in pairs(listmathfields) do
if node.has_field(n, f) and n[f] ~= nil then
nodelist = { up=nodelist, current=n[f] }
end
end
return n
end
end
local function inspect_noads(h,d,n)
for nd in noad_iterator(h) do
if nd.id == node.id('math_char') then
-- TODO: whatever you wish
end
end
node.mlist_to_hlist(h,d,n)
end
callback.register('mlist_to_hlist', inspect_noads)
-----------------------------------------------------------------