summaryrefslogtreecommitdiff
path: root/source/luametatex/source/lua
diff options
context:
space:
mode:
Diffstat (limited to 'source/luametatex/source/lua')
-rw-r--r--source/luametatex/source/lua/lmtinterface.h131
-rw-r--r--source/luametatex/source/lua/lmtnodelib.c85
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 },