On Thu, Jun 27, 2019 at 2:01 PM Marcel Fabian Krüger <t...@2krueger.de>
wrote:

> Hi everyone,
>
> in current LuaTeX versions, the result of `linebreak` filter is ignored
> and instead it is always treated as if no node has been returned (so the
> internal linebreak algorithm is applied). A minimal example:
>
>
> \directlua{
> callback.register("linebreak_filter", function(nodes)
>   return node.hpack(nodes)
> end)
> }
> Some very very very very very very very very very very very very very
> very very very very very very very very very very very very very very
> very very very very very very very very very very very very very very
> very very very very very very very very very very very very very very
> very very very very very very very very very very very very very very
> very very very long paragraph.
> \bye
>
> You would expect the whole paragraph to be set in a single line, but
> normal paragraph breaking is applies instead. This is caused by a change
> in revision 6686 from Mar 29 2018 "experimental) possible fix for for lua
> stack issue + consistent error handling (HH)". There in the function
> lua_linebreak_callback, the change
>
>          return ret;
>      }
> +    lua_settop(Luas, s_top);
>      p = lua_touserdata(Luas, -1);
>      if (p != NULL) {
>          a = nodelist_from_lua(Luas);
>          try_couple_nodes(*new_head,a);
>          ret = 1;
>      }
> -    lua_settop(Luas, s_top);
>      return ret;
>
> has been applied. I am not sure what kind of stack issue this was
> supposed to fix, but as a side effect this moves the check for the node
> return value after `lua_settop`, so the return value is already removed
> from the stack when the test is done. So it is ignored.
>

hm, I will try reverting the code to see when the stack issue appears.


-- 
luigi
_______________________________________________
dev-luatex mailing list
dev-luatex@ntg.nl
https://mailman.ntg.nl/mailman/listinfo/dev-luatex

Reply via email to