<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>