diff options
Diffstat (limited to 'source/luametatex/source/lua')
-rw-r--r-- | source/luametatex/source/lua/lmtinterface.h | 131 | ||||
-rw-r--r-- | source/luametatex/source/lua/lmtnodelib.c | 85 |
2 files changed, 65 insertions, 151 deletions
diff --git a/source/luametatex/source/lua/lmtinterface.h b/source/luametatex/source/lua/lmtinterface.h index f5fd10900..c3ea2a184 100644 --- a/source/luametatex/source/lua/lmtinterface.h +++ b/source/luametatex/source/lua/lmtinterface.h @@ -488,18 +488,7 @@ make_lua_key(L, bend_tolerance);\ make_lua_key(L, bestinsert);\ make_lua_key(L, bestpagebreak);\ make_lua_key(L, bestsize);\ -make_lua_key(L, bin);\ -make_lua_key(L, binbinspacing);\ -make_lua_key(L, binclosespacing);\ -make_lua_key(L, binfracspacing);\ -make_lua_key(L, bininnerspacing);\ -make_lua_key(L, binmiddlespacing);\ -make_lua_key(L, binopenspacing);\ -make_lua_key(L, binopspacing);\ -make_lua_key(L, binordspacing);\ -make_lua_key(L, binpunctspacing);\ -make_lua_key(L, binradspacing);\ -make_lua_key(L, binrelspacing);\ +make_lua_key(L, binary);\ make_lua_key(L, boolean);\ make_lua_key(L, bothflexible);\ make_lua_key(L, bottom);\ @@ -536,17 +525,6 @@ make_lua_key(L, choice);\ make_lua_key(L, class);\ make_lua_key(L, cleaders);\ make_lua_key(L, close);\ -make_lua_key(L, closebinspacing);\ -make_lua_key(L, closeclosespacing);\ -make_lua_key(L, closefracspacing);\ -make_lua_key(L, closeinnerspacing);\ -make_lua_key(L, closemiddlespacing);\ -make_lua_key(L, closeopenspacing);\ -make_lua_key(L, closeopspacing);\ -make_lua_key(L, closeordspacing);\ -make_lua_key(L, closepunctspacing);\ -make_lua_key(L, closeradspacing);\ -make_lua_key(L, closerelspacing);\ make_lua_key(L, clubpenalties);\ make_lua_key(L, clubpenalty);\ make_lua_key(L, cmd);\ @@ -697,17 +675,6 @@ make_lua_key(L, force);\ make_lua_key(L, forcecheck);\ make_lua_key(L, forcehandler);\ make_lua_key(L, forcerulethickness);\ -make_lua_key(L, fracbinspacing);\ -make_lua_key(L, fracclosespacing);\ -make_lua_key(L, fracfracspacing);\ -make_lua_key(L, fracinnerspacing);\ -make_lua_key(L, fracmiddlespacing);\ -make_lua_key(L, fracopenspacing);\ -make_lua_key(L, fracopspacing);\ -make_lua_key(L, fracordspacing);\ -make_lua_key(L, fracpunctspacing);\ -make_lua_key(L, fracradspacing);\ -make_lua_key(L, fracrelspacing);\ make_lua_key(L, fraction);\ make_lua_key(L, FractionDelimiterDisplayStyleSize);\ make_lua_key(L, FractionDelimiterSize);\ @@ -782,18 +749,7 @@ make_lua_key(L, index);\ make_lua_key(L, info);\ make_lua_key(L, Info);\ make_lua_key(L, inner);\ -make_lua_key(L, innerbinspacing);\ -make_lua_key(L, innerclosespacing);\ -make_lua_key(L, innerfracspacing);\ -make_lua_key(L, innerinnerspacing);\ make_lua_key(L, innerlocation);\ -make_lua_key(L, innermiddlespacing);\ -make_lua_key(L, inneropenspacing);\ -make_lua_key(L, inneropspacing);\ -make_lua_key(L, innerordspacing);\ -make_lua_key(L, innerpunctspacing);\ -make_lua_key(L, innerradspacing);\ -make_lua_key(L, innerrelspacing);\ make_lua_key(L, innerxoffset);\ make_lua_key(L, inneryoffset);\ make_lua_key(L, input);\ @@ -931,18 +887,7 @@ make_lua_key(L, mathtextchar);\ make_lua_key(L, medmuskip);\ make_lua_key(L, message);\ make_lua_key(L, middle);\ -make_lua_key(L, middlebinspacing);\ make_lua_key(L, middlebox);\ -make_lua_key(L, middleclosespacing);\ -make_lua_key(L, middlefracspacing);\ -make_lua_key(L, middleinnerspacing);\ -make_lua_key(L, middlemiddlespacing);\ -make_lua_key(L, middleopenspacing);\ -make_lua_key(L, middleopspacing);\ -make_lua_key(L, middleordspacing);\ -make_lua_key(L, middlepunctspacing);\ -make_lua_key(L, middleradspacing);\ -make_lua_key(L, middlerelspacing);\ make_lua_key(L, MinConnectorOverlap);\ make_lua_key(L, mirror);\ make_lua_key(L, mkern);\ @@ -991,47 +936,13 @@ make_lua_key(L, nucleus);\ make_lua_key(L, number);\ make_lua_key(L, numerator);\ make_lua_key(L, numeratorvariant);\ -make_lua_key(L, op);\ -make_lua_key(L, opbinspacing);\ -make_lua_key(L, opclosespacing);\ make_lua_key(L, open);\ -make_lua_key(L, openbinspacing);\ -make_lua_key(L, openclosespacing);\ -make_lua_key(L, openfracspacing);\ -make_lua_key(L, openinnerspacing);\ -make_lua_key(L, openmiddlespacing);\ -make_lua_key(L, openopenspacing);\ -make_lua_key(L, openopspacing);\ -make_lua_key(L, openordspacing);\ -make_lua_key(L, openpunctspacing);\ -make_lua_key(L, openradspacing);\ -make_lua_key(L, openrelspacing);\ make_lua_key(L, openupdepth);\ make_lua_key(L, openupheight);\ make_lua_key(L, operator);\ make_lua_key(L, operatorsize);\ -make_lua_key(L, opfracspacing);\ -make_lua_key(L, opinnerspacing);\ -make_lua_key(L, opmiddlespacing);\ -make_lua_key(L, opopenspacing);\ -make_lua_key(L, opopspacing);\ -make_lua_key(L, opordspacing);\ -make_lua_key(L, oppunctspacing);\ -make_lua_key(L, opradspacing);\ -make_lua_key(L, oprelspacing);\ make_lua_key(L, options);\ -make_lua_key(L, ord);\ -make_lua_key(L, ordbinspacing);\ -make_lua_key(L, ordclosespacing);\ -make_lua_key(L, ordfracspacing);\ -make_lua_key(L, ordinnerspacing);\ -make_lua_key(L, ordmiddlespacing);\ -make_lua_key(L, ordopenspacing);\ -make_lua_key(L, ordopspacing);\ -make_lua_key(L, ordordspacing);\ -make_lua_key(L, ordpunctspacing);\ -make_lua_key(L, ordradspacing);\ -make_lua_key(L, ordrelspacing);\ +make_lua_key(L, ordinary);\ make_lua_key(L, orientation);\ make_lua_key(L, original);\ make_lua_key(L, orphanpenalties);\ @@ -1134,22 +1045,8 @@ make_lua_key(L, semi_protected_call);\ make_lua_key(L, protrudechars);\ make_lua_key(L, protrusion);\ make_lua_key(L, ptr);\ -make_lua_key(L, punct);\ -make_lua_key(L, punctbinspacing);\ -make_lua_key(L, punctclosespacing);\ -make_lua_key(L, punctfracspacing);\ -make_lua_key(L, punctinnerspacing);\ -make_lua_key(L, punctmiddlespacing);\ -make_lua_key(L, punctopenspacing);\ -make_lua_key(L, punctopspacing);\ -make_lua_key(L, punctordspacing);\ -make_lua_key(L, punctpunctspacing);\ -make_lua_key(L, punctradspacing);\ -make_lua_key(L, punctrelspacing);\ +make_lua_key(L, punctuation);\ make_lua_key(L, quad);\ -make_lua_key(L, radbinspacing);\ -make_lua_key(L, radclosespacing);\ -make_lua_key(L, radfracspacing);\ make_lua_key(L, radical);\ make_lua_key(L, radicaldegreeafter);\ make_lua_key(L, radicaldegreebefore);\ @@ -1169,14 +1066,6 @@ make_lua_key(L, RadicalRuleThickness);\ make_lua_key(L, radicalvariant);\ make_lua_key(L, RadicalVerticalGap);\ make_lua_key(L, radicalvgap);\ -make_lua_key(L, radinnerspacing);\ -make_lua_key(L, radmiddlespacing);\ -make_lua_key(L, radopenspacing);\ -make_lua_key(L, radopspacing);\ -make_lua_key(L, radordspacing);\ -make_lua_key(L, radpunctspacing);\ -make_lua_key(L, radradspacing);\ -make_lua_key(L, radrelspacing);\ make_lua_key(L, reader);\ make_lua_key(L, register);\ make_lua_key(L, register_attribute);\ @@ -1198,19 +1087,8 @@ make_lua_key(L, registergluespec);\ make_lua_key(L, registerinteger);\ make_lua_key(L, registermugluespec);\ make_lua_key(L, regular);\ -make_lua_key(L, rel);\ +make_lua_key(L, relation);\ make_lua_key(L, relax);\ -make_lua_key(L, relbinspacing);\ -make_lua_key(L, relclosespacing);\ -make_lua_key(L, relfracspacing);\ -make_lua_key(L, relinnerspacing);\ -make_lua_key(L, relmiddlespacing);\ -make_lua_key(L, relopenspacing);\ -make_lua_key(L, relopspacing);\ -make_lua_key(L, relordspacing);\ -make_lua_key(L, relpunctspacing);\ -make_lua_key(L, relradspacing);\ -make_lua_key(L, relrelspacing);\ make_lua_key(L, remove_item);\ make_lua_key(L, repeat);\ make_lua_key(L, replace);\ @@ -1450,6 +1328,7 @@ make_lua_key(L, vertical);\ make_lua_key(L, verticalmathkern);\ make_lua_key(L, vextensible);\ make_lua_key(L, vextensiblevariant);\ +make_lua_key(L, virtual);\ make_lua_key(L, vlist);\ make_lua_key(L, vmode);\ make_lua_key(L, vmodepar);\ diff --git a/source/luametatex/source/lua/lmtnodelib.c b/source/luametatex/source/lua/lmtnodelib.c index 116860f85..6a07e3454 100644 --- a/source/luametatex/source/lua/lmtnodelib.c +++ b/source/luametatex/source/lua/lmtnodelib.c @@ -2902,6 +2902,27 @@ static int nodelib_direct_getlistdimensions(lua_State *L) return 0; } +static int nodelib_direct_getruledimensions(lua_State *L) +{ + halfword n = nodelib_valid_direct_from_index(L, 1); + if (n && node_type(n) == rule_node) { + if (node_subtype(n) == virtual_rule_subtype) { + lua_pushinteger(L, rule_data(n)); + lua_pushinteger(L, rule_left(n)); + lua_pushinteger(L, rule_right(n)); + lua_pushboolean(L, 1); + } else { + lua_pushinteger(L, rule_width(n)); + lua_pushinteger(L, rule_height(n)); + lua_pushinteger(L, rule_depth(n)); + lua_pushboolean(L, 0); + } + return 4; + } else { + return 0; + } +} + /* node.direct.getlist */ static int nodelib_direct_getlist(lua_State *L) @@ -3541,32 +3562,45 @@ static int nodelib_direct_setlink(lua_State *L) and the nodes themselves can have old values for prev and next, so ... only single nodes are looked at! */ - if (lua_type(L, i) == LUA_TNUMBER) { - halfword c = nodelib_valid_direct_from_index(L, i); /* current node */ - if (c) { - if (c != t) { - if (t) { - node_next(t) = c; - node_prev(c) = t; - } else if (i > 1) { - /* we assume that the first node is a kind of head */ - node_prev(c) = null; - } - t = c; - if (! h) { - h = t; + switch (lua_type(L, i)) { + case LUA_TNUMBER: + { + halfword c = nodelib_valid_direct_from_index(L, i); /* current node */ + if (c) { + if (c != t) { + if (t) { + node_next(t) = c; + node_prev(c) = t; + } else if (i > 1) { + /* we assume that the first node is a kind of head */ + node_prev(c) = null; + } + t = c; + if (! h) { + h = t; + } + } else { + /* we ignore duplicate nodes which can be tails or the previous */ + } + } else { + /* we ignore bad nodes, but we could issue a message */ } - } else { - /* we ignore duplicate nodes which can be tails or the previous */ } - } else { - /* we ignore bad nodes, but we could issue a message */ - } - } else if (t) { - /* safeguard: a nil in the list can be meant as end so we nil the next of tail */ - node_next(t) = null; - } else { - /* we just ignore nil nodes and have no tail yet */ + break; + case LUA_TBOOLEAN: + if (lua_toboolean(L, i)) { + /*tex Just skip this one. */ + break; + } else { + /* fall through */ + } + default: + if (t) { + /* safeguard: a nil in the list can be meant as end so we nil the next of tail */ + node_next(t) = null; + } else { + /* we just ignore nil nodes and have no tail yet */ + } } } nodelib_push_direct_or_nil(L, h); @@ -9758,7 +9792,8 @@ static const struct luaL_Reg nodelib_direct_function_list[] = { { "rangedimensions", nodelib_direct_rangedimensions }, /* maybe get... */ { "getglyphdimensions", nodelib_direct_getglyphdimensions }, { "getkerndimension", nodelib_direct_getkerndimension }, - { "getlistdimensions", nodelib_direct_getlistdimensions }, + { "getlistdimensions", nodelib_direct_getlistdimensions }, + { "getruledimensions", nodelib_direct_getruledimensions }, { "patchattributes", nodelib_direct_patchattributes }, { "remove", nodelib_direct_remove }, { "removefromlist", nodelib_direct_remove_from_list }, |