[luatex] Turning a string into a list of nodes.

Paul Isambert zappathustra at free.fr
Fri Nov 19 10:37:08 CET 2010


Thanks Patrick for your code.

Apparently we do the same things (except your code is simply better), so 
there is no simple hard-coded function to do that. Which function I 
think might be a good idea, especially if it can process real TeX input, 
e.g. string_tolist("a\kern1em b"), perhaps with catcodes declared 
beforehand. So I'm kind of feature-requesting here, yes, yes, can't deny.

Patrick, is it on purpose you don't set "n.prev = last"? Is it useless 
or are you sure you'll simply never manipulate those node lists?

Thanks for lang.hyphenate() -- I realize there are areas of the manual I 
still haven't laid an eye on.

Best,
Paul

Le 18/11/2010 22:49, Patrick Gundlach a écrit :
> Hi Paul,
>
> i do something like this (pseudo code):
>
>    local match = unicode.utf8.match
>
>    for s in string.utfvalues(str) do
>      char = unicode.utf8.char(s)
>      if match(char,"%s") and last and last.id == 10 then -- is it 10, the glue node??
>        -- double whitespace, \relax
>      elseif match(char,"%s") then -- ws
>        n = node.new("glue")
>        n.spec = node.new("glue_spec")
>        n.spec.width   = space -- calculated somewhere else
>        n.spec.shrink  = shrink
>        n.spec.stretch = stretch
>
>        if head then
>          last.next = n
>        else
>          head = n
>        end
>        last = n
>
>      else
>        n = node.new("glyph")
>        n.font = ... (set somewhere else)
>        n.char = s
>        n.lang = 0
>        n.left = tex.lefthyphenmin
>        n.right = tex.righthyphenmin
>
>        if head then
>          last.next = n
>        else
>          head = n
>        end
>        last = n
>      end
>    end
>
>
> and then I use node.kerning() for kerning and lang.hyphenate() for inserting disc nodes.
>
>
> Patrick
>
>


More information about the luatex mailing list