From d4c53f5bdf8e0bb716ef21847306ab24c8e67d3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Fabian=20Kr=C3=BCger?= Date: Mon, 28 Feb 2022 11:59:15 +0100 Subject: [PATCH] Add node.current_latelua --- manual/luatex-nodes.tex | 12 ++++++++++ source/texk/web2c/luatexdir/lua/lnodelib.c | 26 ++++++++++++++++++++++ source/texk/web2c/luatexdir/lua/luastuff.c | 6 +++++ 3 files changed, 44 insertions(+) diff --git a/manual/luatex-nodes.tex b/manual/luatex-nodes.tex index 5a48b4c18..aaff0a38c 100644 --- a/manual/luatex-nodes.tex +++ b/manual/luatex-nodes.tex @@ -1421,6 +1421,18 @@ attribute list, not a copy thereof. Therefore, changing any of the attributes in the list will change these values for all nodes that have the current attribute list assigned to them. +\subsection{\type {current_latelua}} + +\libindex{current_latelua} + +When called directly or indirectly from a \type{late_lua} whatsit, return the +whatsit node which triggered this execution. + +\startfunctioncall + m = + node.current_latelua() +\stopfunctioncall + \subsection{\type {hpack}} \libindex {hpack} diff --git a/source/texk/web2c/luatexdir/lua/lnodelib.c b/source/texk/web2c/luatexdir/lua/lnodelib.c index 1ff36bc95..84bccee60 100644 --- a/source/texk/web2c/luatexdir/lua/lnodelib.c +++ b/source/texk/web2c/luatexdir/lua/lnodelib.c @@ -6541,6 +6541,30 @@ static int lua_nodelib_direct_currentattr(lua_State * L) } +/* Defined in luastuff.c */ +extern halfword current_latelua; + +/* node.current_latelua(node m) */ + +static int lua_nodelib_currentlatelua(lua_State * L) +{ + lua_nodelib_push_fast(L, current_latelua); + return 1; +} + + +/* node.direct.current_latelua() */ + +static int lua_nodelib_direct_currentlatelua(lua_State * L) +{ + if (current_latelua) + lua_pushinteger(L, current_latelua); + else + lua_pushnil(L); + return 1; +} + + /* node.direct.todirect */ static int lua_nodelib_direct_todirect(lua_State * L) @@ -8890,6 +8914,7 @@ static const struct luaL_Reg direct_nodelib_f[] = { {"copy_list", lua_nodelib_direct_copy_list}, {"count", lua_nodelib_direct_count}, {"current_attr", lua_nodelib_direct_currentattr}, + {"current_latelua", lua_nodelib_direct_currentlatelua}, {"dimensions", lua_nodelib_direct_dimensions}, {"rangedimensions", lua_nodelib_direct_rangedimensions}, /* {"do_ligature_n", lua_nodelib_direct_do_ligature_n}, */ @@ -9036,6 +9061,7 @@ static const struct luaL_Reg nodelib_f[] = { {"copy_list", lua_nodelib_copy_list}, {"count", lua_nodelib_count}, {"current_attr", lua_nodelib_currentattr}, + {"current_latelua", lua_nodelib_currentlatelua}, {"dimensions", lua_nodelib_dimensions}, {"rangedimensions", lua_nodelib_rangedimensions}, /* {"do_ligature_n", lua_nodelib_do_ligature_n}, */ diff --git a/source/texk/web2c/luatexdir/lua/luastuff.c b/source/texk/web2c/luatexdir/lua/luastuff.c index fb05c60dd..469074d8c 100644 --- a/source/texk/web2c/luatexdir/lua/luastuff.c +++ b/source/texk/web2c/luatexdir/lua/luastuff.c @@ -32,6 +32,8 @@ lua_State *Luas = NULL; int luastate_bytes = 0; int lua_active = 0; +halfword current_latelua = null; + #ifdef LuajitTeX #define Luas_load(Luas,getS,ls,lua_id) \ lua_load(Luas,getS,ls,lua_id); @@ -594,8 +596,11 @@ void luacall_vf(int p, int f, int c) void late_lua(PDF pdf, halfword p) { + halfword saved; halfword t; (void) pdf; + saved = current_latelua; + current_latelua = p; t = late_lua_type(p); if (t == normal) { /*tex sets |def_ref| */ @@ -609,6 +614,7 @@ void late_lua(PDF pdf, halfword p) } else { /*tex Let's just ignore it, could be some user specific thing. */ } + current_latelua = saved; } void luatokencall(int p, int nameptr) -- 2.35.1