[Dev-luatex] used_font always return false

Marcel Krüger tex at 2krueger.de
Tue Sep 17 15:27:51 CEST 2019



On 17 September 2019 14:56:20 CEST, luigi scarso <luigi.scarso at gmail.com> wrote:
>On Tue, Sep 17, 2019 at 2:52 PM Marcel Fabian Krüger <tex at 2krueger.de>
>wrote:
>
>> Hi,
>>
>> the node(.direct).uses_font helpers currently always return false for
>> glyph nodes:
>> In the implementation
>>
>> static int lua_nodelib_direct_uses_font(lua_State * L)
>> {
>>     halfword n = lua_tointeger(L,1);
>>     halfword f = lua_tointeger(L,2);
>>     halfword p;
>>     if (type(n) == glyph_node) {
>>         lua_pushboolean(L,font(n) == f);
>>     } else if (type(n) == disc_node) {
>>         uses_font_disc(pre_break,p,n);
>>         uses_font_disc(post_break,p,n);
>>         uses_font_disc(no_break,p,n);
>>     }
>>     /* todo: other node types */
>>     lua_pushboolean(L,0);
>>     return 1;
>> }
>>
>> the actual result is first calculated, but then the last pushboolean
>> pushes a `false` on top of the stack and return this false.
>> It could e.g. be fixed by adding a `return 1;` at the end of the
>first
>> if block. `disc` nodes are not affected because uses_font_disc is a
>> macro containing `return`.
>>
>> A minimal example in plain LuaTeX:
>>
>> \directlua{
>>   local g = node.new'glyph'
>>   g.font = font.current()
>>   if not node.uses_font(g, font.current()) then
>>     error'This should not happen'
>>   end
>>   node.free(g)
>> }
>> \bye
>>
>>
>
>hm, probably a missed else, ie
>
>} else {
>    /* todo: other node types */
>    lua_pushboolean(L,0);
> }

That wouldn't quite work because the uses_font_disc code only returns if the result is true, so pushboolean would also be needed in the disc case.


More information about the dev-luatex mailing list