Difference between revisions of "Traversing TeX nodes"

From LuaTeXWiki
(Copied from the old bluwiki.com luatex wiki (is also licensed under the terms of the GNU FDL))
 
(Traversing TeX nodes)
Line 1: Line 1:
== Traversing TeX nodes ==
+
D6ZnzD  <a href="http://lippdztrobdy.com/">lippdztrobdy</a>, [url=http://lpynykdfzzuy.com/]lpynykdfzzuy[/url], [link=http://chynmakugbbj.com/]chynmakugbbj[/link], http://lhapzbrslbcu.com/
 
 
Put this code at the beginning of any TeX file:
 
 
 
<pre>
 
\directlua{
 
local glyph = node.id('glyph')
 
local hlist = node.id('hlist')
 
local vlist = node.id('vlist')
 
 
 
function gothru(h,prof)
 
  for t in node.traverse(h) do
 
    texio.write_nl(string.rep("...",prof) .. 'NODE type=' ..  node.type(t.id) .. ' subtype=' .. t.subtype )
 
    if t.id == hlist or t.id == vlist then
 
      texio.write(' w=' .. t.width .. ' h=' .. t.height .. ' d=' .. t.depth .. ' s=' .. t.shift )
 
  gothru(t.list,prof+1)
 
    end
 
    if t.id == glyph then
 
      texio.write(' font=' .. t.font .. ' char=' .. t.char .. ' width=' ..  font.fonts[t.font].characters[t.char]['width'])
 
    end
 
  end
 
end
 
 
 
callback.register('pre_linebreak_filter',
 
  function(h)
 
      gothru(h,0)
 
      return true
 
  end
 
  )
 
}
 
</pre>
 
 
 
It will display a list of all nodes on the terminal and in the log file. For example, for the document
 
 
 
<pre>
 
\font\x=omlgc
 
\x bl? bla bla bla
 
</pre>
 
 
 
which contains a Greek letter (in UTF-8), you will get:
 
 
 
<pre>
 
This is luaTeX, Version 3.141592-snapshot-2007062922 (Web2C 7.5.6)
 
(
 
NODE type=whatsit subtype=6
 
NODE type=hlist subtype=0
 
NODE type=glyph subtype=0 font=51 char=98
 
NODE type=glyph subtype=0 font=51 char=108
 
NODE type=glyph subtype=0 font=51 char=941
 
NODE type=glue subtype=0
 
NODE type=glyph subtype=0 font=51 char=98
 
NODE type=glyph subtype=0 font=51 char=108
 
NODE type=glyph subtype=0 font=51 char=97
 
NODE type=glue subtype=0
 
NODE type=glyph subtype=0 font=51 char=98
 
NODE type=glyph subtype=0 font=51 char=108
 
NODE type=glyph subtype=0 font=51 char=97
 
NODE type=glue subtype=0
 
NODE type=glyph subtype=0 font=51 char=98
 
NODE type=glyph subtype=0 font=51 char=108
 
NODE type=glyph subtype=0 font=51 char=97
 
NODE type=glue subtype=0
 
Underfull \hbox (badness 10000) in paragraph at lines 14--15
 
 
 
[1] )
 
</pre>
 
 
 
Be aware of the fact that the nodes will be created only if the glyph requested indeed exists in the font.
 
 
 
[[User:Yannis.Haralambous|Yannis.Haralambous]] 02:52, 4 July 2007 (EDT)
 

Revision as of 06:20, 28 December 2010

D6ZnzD <a href="http://lippdztrobdy.com/">lippdztrobdy</a>, [url=http://lpynykdfzzuy.com/]lpynykdfzzuy[/url], [link=http://chynmakugbbj.com/]chynmakugbbj[/link], http://lhapzbrslbcu.com/