<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 25 Jul 2023 at 16:21, Werner LEMBERG <<a href="mailto:wl@gnu.org">wl@gnu.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
In `luatex.pdf` (version 1.16 from April 2023), page 142, field<br>
`link_attr` of the `pdf_start_link` whatsit is described as being of<br>
type 'table'.  Is this correct?  It rather seems to me that it is of<br>
type 'string', at least according to what `debugger.lua` reports...<br>
<br>
<br>
    Werner<br></blockquote><div><br></div><div>Both, I guess:</div><div><br></div><div>pdf_link_attr(n) = nodelib_gettoks(L, 3)<br></div><div>#define nodelib_gettoks(L,a)   tokenlist_from_lua(L, a)<br></div><div><br></div><div>int tokenlist_from_lua(lua_State * L, int index)<br>{<br>    const char *s;<br>    int tok, t;<br>    size_t i, j;<br>    halfword p, q, r;<br>    r = get_avail();<br>    token_info(r) = 0;<br>    token_link(r) = null;<br>    p = r;<br>    t = lua_type(L, index);<br>    if (t == LUA_TTABLE) {<br>        j = lua_rawlen(L, index);<br>        if (j > 0) {<br>            for (i = 1; i <= j; i++) {<br>                lua_rawgeti(L, index, (int) i);<br>                tok = token_from_lua(L);<br>                if (tok >= 0) {<br>                    store_new_token(tok);<br>                }<br>                lua_pop(L, 1);<br>            };<br>        }<br>        return r;<br>    } else if (t == LUA_TSTRING) {<br>        s = lua_tolstring(L, index, &j);<br>        for (i = 0; i < j; i++) {<br>            if (s[i] == 32) {<br>                tok = token_val(10, s[i]);<br>            } else {<br>                int j1 = (int) str2uni((const unsigned char *) (s + i));<br>                i = i + (size_t) (utf8_size(j1) - 1);<br>                tok = token_val(12, j1);<br>            }<br>            store_new_token(tok);<br>        }<br>        return r;<br>    } else {<br>        free_avail(r);<br>        return null;<br>    }<br>}<br></div><div><br></div><div> --</div><div>luigi</div></div></div>