diff options
Diffstat (limited to 'source/luametatex/source/lua/lmtinterface.h')
-rw-r--r-- | source/luametatex/source/lua/lmtinterface.h | 1754 |
1 files changed, 1754 insertions, 0 deletions
diff --git a/source/luametatex/source/lua/lmtinterface.h b/source/luametatex/source/lua/lmtinterface.h new file mode 100644 index 000000000..e55b03e84 --- /dev/null +++ b/source/luametatex/source/lua/lmtinterface.h @@ -0,0 +1,1754 @@ +/* + See license.txt in the root of this project. +*/ + +# ifndef LMT_LINTERFACE_H +# define LMT_LINTERFACE_H + +# define lmt_linterface_inline 1 + +/*tex + + In this file we collect all kind of interface stuff related to \LUA. It is a large file because + we also create \LUA\ string entries which speeds up the interfacing. + +*/ + +# include "lua.h" +# include "lauxlib.h" +# include "lualib.h" + +/*tex Just in case: */ + +extern int tex_formatted_error (const char *t, const char *fmt, ...); +extern void tex_formatted_warning (const char *t, const char *fmt, ...); +extern void tex_emergency_message (const char *t, const char *fmt, ...); + +/*tex + + In the beginning we had multiple \LUA\ states but that didn't work out well if you want to + intercace to the \TEX\ kernel. So, we dropped that and now have only one main state. + +*/ + +typedef struct lua_state_info { + lua_State *lua_instance; + int used_bytes; + int used_bytes_max; + int function_table_id; + int function_callback_count; + int value_callback_count; + int bytecode_callback_count; + int local_callback_count; + int saved_callback_count; + int file_callback_count; + int direct_callback_count; + int message_callback_count; + int function_table_size; + int bytecode_bytes; + int bytecode_max; + int version_number; + int release_number; + luaL_Buffer *used_buffer; + int integer_size; +} lua_state_info ; + +extern lua_state_info lmt_lua_state; + +/*tex The libraries are opened and initialized by the following functions. */ + +extern int luaopen_tex (lua_State *L); +extern int luaopen_texio (lua_State *L); +extern int luaopen_language (lua_State *L); +extern int luaopen_filelib (lua_State *L); +extern int luaopen_lpeg (lua_State *L); +extern int luaopen_md5 (lua_State *L); +extern int luaopen_sha2 (lua_State *L); +extern int luaopen_aes (lua_State *L); +extern int luaopen_basexx (lua_State *L); +extern int luaopen_xmath (lua_State *L); +extern int luaopen_xcomplex (lua_State *L); +extern int luaopen_xdecimal (lua_State *L); +extern int luaopen_xzip (lua_State *L); +extern int luaopen_socket_core (lua_State *L); +extern int luaopen_mime_core (lua_State *L); +extern int luaopen_pdfe (lua_State *L); +extern int luaopen_pngdecode (lua_State *L); +extern int luaopen_pdfdecode (lua_State *L); +extern int luaopen_mplib (lua_State *L); +extern int luaopen_fio (lua_State *L); +extern int luaopen_sio (lua_State *L); +extern int luaopen_sparse (lua_State *L); +extern int luaopen_callback (lua_State *L); +extern int luaopen_lua (lua_State *L); +extern int luaopen_luac (lua_State *L); +extern int luaopen_status (lua_State *L); +extern int luaopen_font (lua_State *L); +extern int luaopen_node (lua_State *L); +extern int luaopen_token (lua_State *L); +extern int luaopen_optional (lua_State *L); +extern int luaopen_library (lua_State *L); + +extern int luaextend_os (lua_State *L); +extern int luaextend_io (lua_State *L); +extern int luaextend_string (lua_State *L); +extern int luaextend_xcomplex (lua_State *L); + +/*tex + + We finetune the string hasher. When playing with \LUAJIT\ we found that its hashes was pretty + inefficient and geared for \URL's! So there we switched to the \LUA\ hasher an din the process + we also did experiments with the |LUA_HASHLIMIT| parameter. There's an (already old) article + about that in one of the \LUATEX\ histories. + + */ + +# if !defined(LUAI_HASHLIMIT) +# define LUAI_HASHLIMIT 6 +# endif + +/*tex + + Now comes a large section. Here we create and use macros that preset the access pointers + (indices) to keys which is faster in comparison. We also handle the arrays that hold the + information about what fields there are in nodes. This is code from the early times when we + found out that especially when a lot of access by key happens performance is hit because + strings get rehashed. It might be that in the meantime \LUA\ suffers less from this but we + keep this abstraction anyway. + + As we share this mechanism between all modules and because, although it is built from + components, \LUAMETATEX\ is a whole, we now also moved the \MPLIB\ keys into the same + namespace which saves code and macros. Some are shared anyway. + + There is also a bit of metatable lookup involved but we only do that for those modules for + which it's critical. + + Contrary to \LUATEX\ we use a struct to collect the indices and keys instead of global + pointers. This hides the symbols better. + +*/ + +// todo: add L to some below + +# define lua_key_eq(a,b) (a == lmt_keys.ptr_##b) +# define lua_key_index(a) lmt_keys.idx_##a +# define lua_key(a) lmt_keys.ptr_##a + +# define init_lua_key(L,a) \ + lua_pushliteral(L, #a); \ + lmt_keys.ptr_##a = lua_tolstring(L, -1, NULL); \ + lmt_keys.idx_##a = luaL_ref(L, LUA_REGISTRYINDEX); + +# define init_lua_key_alias(L,a,b) \ + lua_pushliteral(L, b); \ + lmt_keys.ptr_##a = lua_tolstring(L, -1, NULL); \ + lmt_keys.idx_##a = luaL_ref(L, LUA_REGISTRYINDEX); + +# define make_lua_key_ptr(L,a) const char *ptr_##a +# define make_lua_key_idx(L,a) int idx_##a + +# define make_lua_key_ptr_alias(L,a,b) const char *ptr_##a +# define make_lua_key_idx_alias(L,a,b) int idx_##a + +# define make_lua_key +# define make_lua_key_alias + +# define lua_push_key(a) lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(a)); +# define lua_push_key_by_index(a) lua_rawgeti(L, LUA_REGISTRYINDEX, a); + +# define lua_get_metatablelua(a) do { \ + lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(a)); \ + lua_gettable(L, LUA_REGISTRYINDEX); \ +} while (0) + +# define lua_push_number(L,x) lua_pushnumber (L, (lua_Number) (x)) +# define lua_push_integer(L,x) lua_pushinteger(L, (int) (x)) +# define lua_push_halfword(L,x) lua_pushinteger(L, (lua_Integer) (x)) + +# define lua_push_number_at_index(L,i,x) \ + lua_pushnumber(L, (lua_Number) (x)); \ + lua_rawseti(L, -2, i); + +# define lua_push_integer_at_index(L,i,x) \ + lua_pushinteger(L, (x)); \ + lua_rawseti(L, -2, i); + +# define lua_push_key_at_index(L,k,i) \ + lua_pushinteger(L, i); \ + lua_push_key(k); \ + lua_rawset(L, -3); + +# define lua_push_nil_at_key(L,k) \ + lua_push_key(k); \ + lua_pushnil(L); \ + lua_rawset(L, -3); + +# define lua_push_number_at_key(L,k,x) \ + lua_push_key(k); \ + lua_pushnumber(L, (lua_Number) (x)); \ + lua_rawset(L, -3); + +# define lua_push_integer_at_key(L,k,x) \ + lua_push_key(k); \ + lua_pushinteger(L, (x)); \ + lua_rawset(L, -3); + +# define lua_push_string_at_key(L,k,s) \ + lua_push_key(k); \ + lua_pushstring(L, s); \ + lua_rawset(L, -3); + +# define mlua_push_lstring_at_key(L,k,s,l) \ + lua_push_key(k); \ + lua_pushlstring(L, s, l); \ + lua_rawset(L, -3); + +# define lua_push_boolean_at_key(L,k,b) \ + lua_push_key(k); \ + lua_pushboolean(L, b); \ + lua_rawset(L, -3); + +# define lua_push_value_at_key(L,k,v) \ + lua_push_key(k); \ + lua_push_key(v); \ + lua_rawset(L, -3); + +# define lua_push_svalue_at_key(L,k,v) \ + lua_push_key(k); \ + lua_push_key_by_index(v); \ + lua_rawset(L, -3); + +# define lua_push_specification_at_key(L,k,x) \ + lua_push_key(k); \ + lmt_push_specification(L, x, 0); \ + lua_rawset(L, -3); + +/*tex We put some here. These are not public (read: names can change). */ + +/*tex Used in |lmtnodelib|. */ + +# define NODE_METATABLE_INSTANCE "node.instance" +# define NODE_PROPERTIES_DIRECT "node.properties" +# define NODE_PROPERTIES_INDIRECT "node.properties.indirect" +# define NODE_PROPERTIES_INSTANCE "node.properties.instance" + +/*tex Used in |lmttokenlib|. */ + +# define TOKEN_METATABLE_INSTANCE "token.instance" +# define TOKEN_METATABLE_PACKAGE "token.package" + +/*tex Used in |lmtepdflib|. */ + +# define PDFE_METATABLE_INSTANCE "pdfe.instance" +# define PDFE_METATABLE_DICTIONARY "pdfe.dictionary" +# define PDFE_METATABLE_ARRAY "pdfe.array" +# define PDFE_METATABLE_STREAM "pdfe.stream" +# define PDFE_METATABLE_REFERENCE "pdfe.reference" + +/*tex Used in |lmtmplib|. */ + +# define MP_METATABLE_INSTANCE "mp.instance" +# define MP_METATABLE_FIGURE "mp.figure" +# define MP_METATABLE_OBJECT "mp.object" + +/*tex Used in |lmtsparselib|. */ + +# define SPARSE_METATABLE_INSTANCE "sparse.instance" + +/*tex + + Currently we sometimes use numbers and sometimes strings in node properties. We can make that + consistent by having a check on number and if not then assign a string. The strings are + prehashed and we make a bunch of lua tables that have these values. We can preassign these at + startup time. + +*/ + +typedef struct value_info { + union { + int id; + int type; + int value; + }; + int lua; + const char *name; +} value_info; + +typedef struct node_info { + int id; + int size; + value_info *subtypes; + value_info *fields; + const char *name; + int lua; + int visible; + int first; + int last; +} node_info; + +typedef struct command_item { + int id; + int lua; + const char *name; + int kind; + int min; + int max; + int base; + int fixedvalue; +} command_item; + +# define unknown_node 0xFFFF +# define unknown_subtype 0xFFFF +# define unknown_field 0xFFFF +# define unknown_value 0xFFFF + +# define set_value_entry_nop(target,n) target[n].lua = 0; target[n].name = NULL; target[n].value = unknown_value; +# define set_value_entry_key(target,n,k) target[n].lua = lua_key_index(k); target[n].name = lua_key(k); target[n].value = n; +# define set_value_entry_lua(target,n,k) target[n].lua = lua_key_index(k); target[n].name = lua_key(k); +# define set_value_entry_val(target,n,v,k) target[n].lua = lua_key_index(k); target[n].name = lua_key(k); target[n].value = v; + +extern value_info *lmt_aux_allocate_value_info(size_t last); + +typedef struct lmt_interface_info { + /*tex These are mostly used in lmtnodelib. */ + value_info *pack_type_values; + value_info *group_code_values; + value_info *par_context_values; + value_info *page_context_values; + value_info *append_line_context_values; + value_info *alignment_context_values; + value_info *par_begin_values; + value_info *par_mode_values; + value_info *math_style_name_values; + value_info *math_style_variant_values; + /* value_info *noad_option_values; */ + /* value_info *glyph_option_values; */ + /*tex These are mostly used in lmttokenlib. */ + value_info *lua_function_values; + value_info *direction_values; + value_info *node_fill_values; + value_info *page_contribute_values; + value_info *math_style_values; + value_info *math_parameter_values; + value_info *math_font_parameter_values; + value_info *math_indirect_values; + value_info *field_type_values; + /*tex Here's one for nodes. */ + node_info *node_data; + /*tex And this one is for tokens. */ + command_item *command_names; +} lmt_interface_info ; + +extern lmt_interface_info lmt_interface; + +# define lmt_push_pack_type(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.pack_type_values [n].lua) +# define lmt_push_group_code(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.group_code_values [n].lua) +# define lmt_push_par_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.par_context_values [n].lua) +# define lmt_push_page_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.page_context_values [n].lua) +# define lmt_push_append_line_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.append_line_context_values[n].lua) +# define lmt_push_alignment_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.alignment_context_values [n].lua) +# define lmt_push_par_begin(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.par_begin_values [n].lua) +# define lmt_push_par_mode(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.par_mode_values [n].lua) +# define lmt_push_math_style_name(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_style_name_values [n].lua) +# define lmt_push_math_style_variant(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_style_variant_values [n].lua) +# define lmt_push_math_noad_option(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_noad_option_values [n].lua) +# define lmt_push_lua_function_values(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.lua_function_values [n].lua) +# define lmt_push_direction(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.direction_values [n].lua) +# define lmt_push_node_fill(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.node_fill_values [n].lua) +# define lmt_push_page_contribute(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.page_contribute_values [n].lua) +# define lmt_push_math_style(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_style_values [n].lua) +# define lmt_push_math_parameter(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_parameter_values [n].lua) +# define lmt_push_math_font_parameter(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_font_parameter_values[n].lua) +# define lmt_push_math_indirect(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_indirect_values [n].lua) +# define lmt_push_field_type(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.field_type_values [n].lua) + +# define lmt_name_of_pack_type(n) lmt_interface.pack_type_values [n].name +# define lmt_name_of_group_code(n) lmt_interface.group_code_values [n].name +# define lmt_name_of_par_context(n) lmt_interface.par_context_values [n].name +# define lmt_name_of_page_context(n) lmt_interface.page_context_values [n].name +# define lmt_name_of_append_line_context(n) lmt_interface.append_line_context_values[n].name +# define lmt_name_of_alignment_context(n) lmt_interface.alignment_context_values [n].name +# define lmt_name_of_par_begin(n) lmt_interface.par_begin_values [n].name +# define lmt_name_of_par_mode(n) lmt_interface.par_mode_values [n].name +# define lmt_name_of_math_style_name(n) lmt_interface.math_style_name_values [n].name +# define lmt_name_of_math_style_variant(n) lmt_interface.math_style_variant_values [n].name +# define lmt_name_of_math_noad_option(n) lmt_interface.math_noad_option_values [n].name +# define lmt_name_of_lua_function_values(n) lmt_interface.lua_function_values [n].name +# define lmt_name_of_direction(n) lmt_interface.direction_values [n].name +# define lmt_name_of_node_fill(n) lmt_interface.node_fill_values [n].name +# define lmt_name_of_page_contribute(n) lmt_interface.page_contribute_values [n].name +# define lmt_name_of_math_style(n) lmt_interface.math_style_values [n].name +# define lmt_name_of_math_parameter(n) lmt_interface.math_parameter_values [n].name +# define lmt_name_of_math_font_parameter(n) lmt_interface.math_font_parameter_values[n].name +# define lmt_name_of_math_indirect(n) lmt_interface.math_indirect_values [n].name +# define lmt_name_of_field_type(n) lmt_interface.field_type_values [n].name + +/*tex This list will be made smaller because not all values need the boost. */ + +# define declare_shared_lua_keys(L) \ +/* */\ +make_lua_key(L, __index);\ +make_lua_key(L, above);\ +make_lua_key(L, abovedisplayshortskip);\ +make_lua_key(L, abovedisplayskip);\ +make_lua_key(L, accent);\ +make_lua_key(L, AccentBaseHeight);\ +make_lua_key(L, AccentBaseDepth);\ +make_lua_key(L, accentbaseheight);\ +make_lua_key(L, accentbasedepth);\ +make_lua_key(L, AccentTopShiftUp);\ +make_lua_key(L, accenttopshiftup);\ +make_lua_key(L, AccentTopOvershoot);\ +make_lua_key(L, accenttopovershoot);\ +make_lua_key(L, adapted);\ +make_lua_key(L, FlattenedAccentTopShiftUp);\ +make_lua_key(L, flattenedaccenttopshiftup);\ +make_lua_key(L, AccentBottomShiftDown);\ +make_lua_key(L, accentbottomshiftdown);\ +make_lua_key(L, AccentBottomOvershoot);\ +make_lua_key(L, accentbottomovershoot);\ +make_lua_key(L, AccentSuperscriptDrop);\ +make_lua_key(L, accentsuperscriptdrop);\ +make_lua_key(L, AccentSuperscriptPercent);\ +make_lua_key(L, accentsuperscriptpercent);\ +make_lua_key(L, AccentExtendMargin);\ +make_lua_key(L, accentextendmargin);\ +make_lua_key(L, FlattenedAccentBottomShiftDown);\ +make_lua_key(L, flattenedaccentbottomshiftdown);\ +make_lua_key(L, accentkern);\ +make_lua_key(L, accentvariant);\ +make_lua_key(L, active);\ +make_lua_key(L, active_char);\ +make_lua_key(L, adapttoleftsize);\ +make_lua_key(L, adapttorightsize);\ +make_lua_key(L, additional);\ +make_lua_key(L, adjdemerits);\ +make_lua_key(L, adjust);\ +make_lua_key(L, adjustedhbox);\ +make_lua_key(L, adjustspacing);\ +make_lua_key(L, adjustspacingshrink);\ +make_lua_key(L, adjustspacingstep);\ +make_lua_key(L, adjustspacingstretch);\ +make_lua_key(L, advance);\ +make_lua_key(L, after_output);\ +make_lua_key(L, after_something);\ +make_lua_key(L, afterdisplay);\ +make_lua_key(L, afterdisplaypenalty);\ +make_lua_key(L, afteroutput);\ +make_lua_key(L, aliased);\ +make_lua_key(L, align);\ +make_lua_key(L, alignrecord);\ +make_lua_key(L, alignstack);\ +make_lua_key(L, alignhead);\ +make_lua_key(L, alignment);\ +make_lua_key(L, alignment_tab);\ +make_lua_key(L, alignset);\ +make_lua_key(L, alsosimple);\ +make_lua_key(L, anchor);\ +make_lua_key(L, argument);\ +make_lua_key(L, arithmic);\ +make_lua_key(L, attr);\ +make_lua_key(L, attribute);\ +make_lua_key(L, attribute_list);\ +make_lua_key(L, attributelist);\ +make_lua_key(L, auto);\ +make_lua_key(L, automatic);\ +make_lua_key(L, automaticpenalty);\ +make_lua_key(L, axis);\ +make_lua_key(L, AxisHeight);\ +make_lua_key(L, baselineskip);\ +make_lua_key(L, beforedisplay);\ +make_lua_key(L, beforedisplaypenalty);\ +make_lua_key(L, begin_group);\ +make_lua_key(L, begin_local);\ +make_lua_key(L, begin_paragraph);\ +make_lua_key(L, beginmath);\ +make_lua_key(L, beginparagraph);\ +make_lua_key(L, belowdisplayshortskip);\ +make_lua_key(L, belowdisplayskip);\ +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, boolean);\ +make_lua_key(L, bottomaccent);\ +make_lua_key(L, bottomaccentvariant);\ +make_lua_key(L, bothflexible);\ +make_lua_key(L, bottom);\ +make_lua_key(L, bottomleft);\ +make_lua_key(L, bottomlevel);\ +make_lua_key(L, bottommargin);\ +make_lua_key(L, bottomright);\ +make_lua_key(L, boundary);\ +make_lua_key(L, box);\ +make_lua_key(L, broken);\ +make_lua_key(L, brokeninsert);\ +make_lua_key(L, brokenpenalty);\ +make_lua_key(L, bytecode);\ +make_lua_key(L, call);\ +make_lua_key(L, callback);\ +make_lua_key(L, cancel);\ +make_lua_key(L, cardinal);\ +make_lua_key(L, case_shift);\ +make_lua_key(L, catalog);\ +make_lua_key(L, Catalog);\ +make_lua_key(L, catcode_table);\ +make_lua_key(L, category);\ +make_lua_key(L, cell);\ +make_lua_key(L, char);\ +make_lua_key(L, char_given);\ +make_lua_key(L, char_number);\ +make_lua_key(L, character);\ +make_lua_key(L, characters);\ +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);\ +make_lua_key(L, cmdname);\ +make_lua_key(L, collapse);\ +make_lua_key(L, combine_toks);\ +make_lua_key(L, command);\ +make_lua_key(L, comment);\ +make_lua_key(L, compactmath);\ +make_lua_key(L, compound);\ +make_lua_key(L, condition);\ +make_lua_key(L, conditional);\ +make_lua_key(L, conditionalmathskip);\ +make_lua_key(L, connectoroverlapmin);\ +make_lua_key(L, container);\ +make_lua_key(L, contributehead);\ +make_lua_key(L, convert);\ +make_lua_key(L, correctionskip);\ +make_lua_key(L, cost);\ +make_lua_key(L, count);\ +make_lua_key(L, cramped);\ +make_lua_key(L, crampeddisplay);\ +make_lua_key(L, crampedscript);\ +make_lua_key(L, crampedscriptscript);\ +make_lua_key(L, crampedtext);\ +make_lua_key(L, cs_name);\ +make_lua_key(L, csname);\ +make_lua_key(L, current);\ +make_lua_key(L, data);\ +make_lua_key(L, deep_frozen_cs_dont_expand);\ +make_lua_key(L, deep_frozen_cs_end_template);\ +make_lua_key(L, def);\ +make_lua_key(L, define_char_code);\ +make_lua_key(L, define_family);\ +make_lua_key(L, define_font);\ +make_lua_key(L, define_lua_call);\ +make_lua_key(L, degree);\ +make_lua_key(L, degreevariant);\ +make_lua_key(L, DelimitedSubFormulaMinHeight);\ +make_lua_key(L, delimiter);\ +make_lua_key(L, delimited);\ +make_lua_key(L, delimiter_number);\ +make_lua_key(L, delimiterpercent);\ +make_lua_key(L, DelimiterPercent);\ +make_lua_key(L, delimitershortfall);\ +make_lua_key(L, DelimiterShortfall);\ +make_lua_key(L, delimiterover);\ +make_lua_key(L, delimiterovervariant);\ +make_lua_key(L, delimiterunder);\ +make_lua_key(L, delimiterundervariant);\ +make_lua_key(L, delta);\ +make_lua_key(L, demerits);\ +make_lua_key(L, denominator);\ +make_lua_key(L, denominatorvariant);\ +make_lua_key(L, depth);\ +make_lua_key(L, designsize);\ +make_lua_key(L, dimension);\ +make_lua_key(L, dir);\ +make_lua_key(L, direct);\ +make_lua_key(L, direction);\ +make_lua_key(L, directory);\ +make_lua_key(L, disc);\ +make_lua_key(L, discpart);\ +make_lua_key(L, discretionary);\ +make_lua_key(L, display);\ +make_lua_key(L, DisplayOperatorMinHeight);\ +make_lua_key(L, displaywidowpenalties);\ +make_lua_key(L, displaywidowpenalty);\ +make_lua_key(L, doffset);\ +make_lua_key(L, doublehyphendemerits);\ +make_lua_key(L, doublesuperscript);\ +make_lua_key(L, emergencystretch);\ +make_lua_key(L, empty);\ +make_lua_key(L, end);\ +make_lua_key(L, end_cs_name);\ +make_lua_key(L, end_file);\ +make_lua_key(L, end_group);\ +make_lua_key(L, end_job);\ +make_lua_key(L, end_line);\ +make_lua_key(L, end_local);\ +make_lua_key(L, end_match);\ +make_lua_key(L, end_paragraph);\ +make_lua_key(L, end_template);\ +make_lua_key(L, endmath);\ +make_lua_key(L, equation);\ +make_lua_key(L, equation_number);\ +make_lua_key(L, equationnumber);\ +make_lua_key(L, equationnumberpenalty);\ +make_lua_key(L, escape);\ +make_lua_key(L, etex);\ +make_lua_key(L, exact);\ +make_lua_key(L, exactly);\ +make_lua_key(L, expand_after);\ +make_lua_key(L, expandable);\ +make_lua_key(L, expanded);\ +make_lua_key(L, expansion);\ +make_lua_key(L, explicit);\ +make_lua_key(L, explicit_space);\ +make_lua_key(L, explicitpenalty);\ +make_lua_key(L, expression);\ +make_lua_key(L, extender);\ +make_lua_key(L, extensible);\ +make_lua_key(L, extraspace);\ +make_lua_key(L, extrasubprescriptshift);\ +make_lua_key(L, extrasubprescriptspace);\ +make_lua_key(L, extrasubscriptshift);\ +make_lua_key(L, extrasubscriptspace);\ +make_lua_key(L, extrasuperprescriptshift);\ +make_lua_key(L, extrasuperprescriptspace);\ +make_lua_key(L, extrasuperscriptshift);\ +make_lua_key(L, extrasuperscriptspace);\ +make_lua_key(L, fam);\ +make_lua_key(L, feedbackcompound);\ +make_lua_key(L, fence);\ +make_lua_key(L, fenced);\ +make_lua_key(L, fi);\ +make_lua_key(L, fil);\ +make_lua_key(L, file);\ +make_lua_key(L, fill);\ +make_lua_key(L, filll);\ +make_lua_key(L, finalhyphendemerits);\ +make_lua_key(L, finalpenalty);\ +make_lua_key(L, finishrow);\ +make_lua_key(L, first);\ +make_lua_key(L, fixedboth);\ +make_lua_key(L, fixedbottom);\ +make_lua_key(L, fixedtop);\ +make_lua_key(L, flags);\ +make_lua_key(L, FlattenedAccentBaseHeight);\ +make_lua_key(L, flattenedaccentbaseheight);\ +make_lua_key(L, FlattenedAccentBaseDepth);\ +make_lua_key(L, flattenedaccentbasedepth);\ +make_lua_key(L, flataccent);\ +make_lua_key(L, float);\ +make_lua_key(L, followedbyspace);\ +make_lua_key(L, font);\ +make_lua_key(L, fontkern);\ +make_lua_key(L, fontspec);\ +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);\ +make_lua_key(L, fractiondelsize);\ +make_lua_key(L, fractiondenomdown);\ +make_lua_key(L, FractionDenominatorDisplayStyleGapMin);\ +make_lua_key(L, FractionDenominatorDisplayStyleShiftDown);\ +make_lua_key(L, FractionDenominatorGapMin);\ +make_lua_key(L, FractionDenominatorShiftDown);\ +make_lua_key(L, fractiondenomvgap);\ +make_lua_key(L, FractionNumeratorDisplayStyleGapMin);\ +make_lua_key(L, FractionNumeratorDisplayStyleShiftUp);\ +make_lua_key(L, FractionNumeratorGapMin);\ +make_lua_key(L, FractionNumeratorShiftUp);\ +make_lua_key(L, fractionnumup);\ +make_lua_key(L, fractionnumvgap);\ +make_lua_key(L, fractionrule);\ +make_lua_key(L, FractionRuleThickness);\ +make_lua_key(L, fractionvariant);\ +make_lua_key(L, frozen);\ +make_lua_key(L, function);\ +make_lua_key(L, geometry);\ +make_lua_key(L, get_mark);\ +make_lua_key(L, ghost);\ +make_lua_key(L, gleaders);\ +make_lua_key(L, global);\ +make_lua_key(L, glue);\ +make_lua_key(L, glueorder);\ +make_lua_key(L, glueset);\ +make_lua_key(L, gluesign);\ +make_lua_key(L, gluespec);\ +make_lua_key(L, glyph);\ +make_lua_key(L, group);\ +make_lua_key(L, h);\ +make_lua_key(L, halign);\ +make_lua_key(L, hangafter);\ +make_lua_key(L, hangindent);\ +make_lua_key(L, hbox);\ +make_lua_key(L, hdelimiter);\ +make_lua_key(L, head);\ +make_lua_key(L, height);\ +make_lua_key(L, hextensible);\ +make_lua_key(L, hextensiblevariant);\ +make_lua_key(L, hlist);\ +make_lua_key(L, hmodepar);\ +make_lua_key(L, hmove);\ +make_lua_key(L, hoffset);\ +make_lua_key(L, holdhead);\ +make_lua_key(L, horizontal);\ +make_lua_key(L, horizontalmathkern);\ +make_lua_key(L, hrule);\ +make_lua_key(L, hsize);\ +make_lua_key(L, hskip);\ +make_lua_key(L, hparts);\ +make_lua_key(L, hyphenate);\ +make_lua_key(L, hyphenated);\ +make_lua_key(L, hyphenation);\ +make_lua_key(L, hyphenationmode);\ +make_lua_key(L, hyphenchar);\ +make_lua_key(L, id);\ +make_lua_key(L, ifstack);\ +make_lua_key(L, if_test);\ +make_lua_key(L, ignore);\ +make_lua_key(L, ignore_something);\ +make_lua_key(L, ignorebounds);\ +make_lua_key(L, ignored);\ +make_lua_key(L, image);\ +make_lua_key(L, immediate);\ +make_lua_key(L, immutable);\ +make_lua_key(L, indent);\ +make_lua_key(L, indentskip);\ +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, 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, input);\ +make_lua_key(L, insert);\ +make_lua_key(L, insertheights);\ +make_lua_key(L, insertpenalties);\ +make_lua_key(L, instance);\ +make_lua_key(L, integer);\ +make_lua_key(L, interlinepenalties);\ +make_lua_key(L, interlinepenalty);\ +make_lua_key(L, intermathskip);\ +make_lua_key(L, internal_attribute);\ +make_lua_key(L, internal_attribute_reference);\ +make_lua_key(L, internal_box_reference);\ +make_lua_key(L, internal_dimen);\ +make_lua_key(L, internal_dimen_reference);\ +make_lua_key(L, internal_glue);\ +make_lua_key(L, internal_glue_reference);\ +make_lua_key(L, internal_int);\ +make_lua_key(L, internal_int_reference);\ +make_lua_key(L, internal_mu_glue);\ +make_lua_key(L, internal_mu_glue_reference);\ +make_lua_key(L, internal_toks);\ +make_lua_key(L, internal_toks_reference);\ +make_lua_key(L, internaldimension);\ +make_lua_key(L, internalinteger);\ +make_lua_key(L, internalgluespec);\ +make_lua_key(L, internalmugluespec);\ +make_lua_key(L, invalid_char);\ +make_lua_key(L, italic);\ +make_lua_key(L, italic_correction);\ +make_lua_key(L, italiccorrection);\ +make_lua_key(L, iterator_value);\ +make_lua_key(L, kern);\ +make_lua_key(L, kerns);\ +make_lua_key(L, noadstate);\ +make_lua_key(L, language);\ +make_lua_key(L, largechar);\ +make_lua_key(L, largefamily);\ +make_lua_key(L, last);\ +make_lua_key(L, lastinsert);\ +make_lua_key(L, lastlinefit);\ +make_lua_key(L, lazyligatures);\ +make_lua_key(L, leader);\ +make_lua_key(L, leaders);\ +make_lua_key(L, leastpagecost);\ +make_lua_key(L, left);\ +make_lua_key(L, left_brace);\ +make_lua_key(L, leftboundary);\ +make_lua_key(L, leftbox);\ +make_lua_key(L, leftboxwidth);\ +make_lua_key(L, lefthangskip);\ +make_lua_key(L, leftmargin);\ +make_lua_key(L, leftmarginkern);\ +make_lua_key(L, leftprotrusion);\ +make_lua_key(L, leftskip);\ +make_lua_key(L, lefttoright);\ +make_lua_key(L, legacy);\ +make_lua_key(L, let);\ +make_lua_key(L, letter);\ +make_lua_key(L, level);\ +make_lua_key(L, lhmin);\ +make_lua_key(L, ligature);\ +make_lua_key(L, ligatures);\ +make_lua_key(L, limitabovebgap);\ +make_lua_key(L, limitabovekern);\ +make_lua_key(L, limitabovevgap);\ +make_lua_key(L, limitbelowbgap);\ +make_lua_key(L, limitbelowkern);\ +make_lua_key(L, limitbelowvgap);\ +make_lua_key(L, limits);\ +make_lua_key(L, line);\ +make_lua_key(L, linebreakpenalty);\ +make_lua_key(L, linepenalty);\ +make_lua_key(L, lineskip);\ +make_lua_key(L, lineskiplimit);\ +make_lua_key(L, list);\ +make_lua_key(L, local);\ +make_lua_key(L, local_box);\ +make_lua_key(L, localbox);\ +make_lua_key(L, log);\ +make_lua_key(L, logfile);\ +make_lua_key(L, looseness);\ +make_lua_key(L, LowerLimitBaselineDropMin);\ +make_lua_key(L, LowerLimitGapMin);\ +make_lua_key(L, lua);\ +make_lua_key(L, lua_call);\ +make_lua_key(L, lua_function_call);\ +make_lua_key(L, lua_local_call);\ +make_lua_key(L, lua_protected_call);\ +make_lua_key(L, lua_value);\ +make_lua_key(L, luatex);\ +make_lua_key(L, macro);\ +make_lua_key(L, make_box);\ +make_lua_key(L, mark);\ +make_lua_key(L, match);\ +make_lua_key(L, math);\ +make_lua_key(L, mathspec);\ +make_lua_key(L, math_accent);\ +make_lua_key(L, math_char_given);\ +make_lua_key(L, math_char_number);\ +make_lua_key(L, math_char_xgiven);\ +make_lua_key(L, math_choice);\ +make_lua_key(L, math_component);\ +make_lua_key(L, math_fence);\ +make_lua_key(L, math_fraction);\ +make_lua_key(L, math_modifier);\ +make_lua_key(L, math_radical);\ +make_lua_key(L, math_script);\ +make_lua_key(L, math_shift);\ +make_lua_key(L, math_shift_cs);\ +make_lua_key(L, math_style);\ +make_lua_key(L, mathtextchar);\ +make_lua_key(L, mathchar);\ +make_lua_key(L, mathchoice);\ +make_lua_key(L, MathConstants);\ +make_lua_key(L, mathcontrol);\ +make_lua_key(L, mathdir);\ +make_lua_key(L, mathfence);\ +make_lua_key(L, mathfraction);\ +make_lua_key(L, mathkerns);\ +make_lua_key(L, MathLeading);\ +make_lua_key(L, mathoperator);\ +make_lua_key(L, mathpack);\ +make_lua_key(L, mathpostpenalty);\ +make_lua_key(L, mathprepenalty);\ +make_lua_key(L, mathshapekern);\ +make_lua_key(L, mathshift);\ +make_lua_key(L, mathsimple);\ +make_lua_key(L, mathskip);\ +make_lua_key(L, mathstyle);\ +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, mkern);\ +make_lua_key(L, mode);\ +make_lua_key(L, modeline);\ +make_lua_key(L, modifier);\ +make_lua_key(L, move_tolerance);\ +make_lua_key(L, mrule);\ +make_lua_key(L, mskip);\ +make_lua_key(L, muglue);\ +make_lua_key(L, mugluespec);\ +make_lua_key(L, mutable);\ +make_lua_key(L, name);\ +make_lua_key(L, nestedlist);\ +make_lua_key(L, new);\ +make_lua_key(L, next);\ +make_lua_key(L, nil);\ +make_lua_key(L, no);\ +make_lua_key(L, no_expand);\ +make_lua_key(L, noad);\ +make_lua_key(L, noalign);\ +make_lua_key(L, noaligned);\ +make_lua_key(L, noaxis);\ +make_lua_key(L, nocheck);\ +make_lua_key(L, nooverflow);\ +make_lua_key(L, node);\ +make_lua_key(L, nodelist);\ +make_lua_key(L, noindent);\ +make_lua_key(L, nolimits);\ +make_lua_key(L, nolimitsubfactor);\ +make_lua_key(L, NoLimitSubFactor);\ +make_lua_key(L, nolimitsupfactor);\ +make_lua_key(L, NoLimitSupFactor);\ +make_lua_key(L, nomath);\ +make_lua_key(L, none);\ +make_lua_key(L, normal);\ +make_lua_key(L, norule);\ +make_lua_key(L, noruling);\ +make_lua_key(L, noscript);\ +make_lua_key(L, nosubprescript);\ +make_lua_key(L, nosubscript);\ +make_lua_key(L, nosuperprescript);\ +make_lua_key(L, nosuperscript);\ +make_lua_key(L, nucleus);\ +make_lua_key(L, number);\ +make_lua_key(L, numerator);\ +make_lua_key(L, numeratorvariant);\ +make_lua_key(L, oldmath);\ +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, orientation);\ +make_lua_key(L, original);\ +make_lua_key(L, orphanpenalties);\ +make_lua_key(L, orphanpenalty);\ +make_lua_key(L, other_char);\ +make_lua_key(L, outline);\ +make_lua_key(L, output);\ +make_lua_key(L, over);\ +make_lua_key(L, OverbarExtraAscender);\ +make_lua_key(L, overbarkern);\ +make_lua_key(L, overbarrule);\ +make_lua_key(L, OverbarRuleThickness);\ +make_lua_key(L, OverbarVerticalGap);\ +make_lua_key(L, overbarvgap);\ +make_lua_key(L, overdelimiter);\ +make_lua_key(L, overdelimiterbgap);\ +make_lua_key(L, overdelimitervariant);\ +make_lua_key(L, overdelimitervgap);\ +make_lua_key(L, overlayaccent);\ +make_lua_key(L, overlayaccentvariant);\ +make_lua_key(L, overlinevariant);\ +make_lua_key(L, overloaded);\ +make_lua_key(L, page);\ +make_lua_key(L, package);\ +make_lua_key(L, pagediscardshead);\ +make_lua_key(L, pagehead);\ +make_lua_key(L, pageinserthead);\ +make_lua_key(L, Pages);\ +make_lua_key(L, pages);\ +make_lua_key(L, par);\ +make_lua_key(L, parameter);\ +make_lua_key(L, parameter_reference);\ +make_lua_key(L, parameters);\ +make_lua_key(L, parfillleftskip);\ +make_lua_key(L, parfillrightskip);\ +make_lua_key(L, parinitleftskip);\ +make_lua_key(L, parinitrightskip);\ +make_lua_key(L, parfillskip);\ +make_lua_key(L, parindent);\ +make_lua_key(L, parshape);\ +make_lua_key(L, parskip);\ +make_lua_key(L, passive);\ +make_lua_key(L, pdfe);\ +make_lua_key(L, penalty);\ +make_lua_key(L, permanent);\ +make_lua_key(L, permitall);\ +make_lua_key(L, permitglue);\ +make_lua_key(L, permitmathreplace);\ +make_lua_key(L, phantom);\ +make_lua_key(L, post);\ +make_lua_key(L, post_linebreak);\ +make_lua_key(L, postadjust);\ +make_lua_key(L, postadjusthead);\ +make_lua_key(L, postmigrate);\ +make_lua_key(L, postmigratehead);\ +make_lua_key(L, pre);\ +make_lua_key(L, pre_align);\ +make_lua_key(L, preadjust);\ +make_lua_key(L, preadjusthead);\ +make_lua_key(L, preamble);\ +make_lua_key(L, prebox);\ +make_lua_key(L, preferfontthickness);\ +make_lua_key(L, prefix);\ +make_lua_key(L, premigrate);\ +make_lua_key(L, premigratehead);\ +make_lua_key(L, prepost);\ +make_lua_key(L, preroll);\ +make_lua_key(L, presub);\ +make_lua_key(L, presubscriptshiftdistance);\ +make_lua_key(L, presup);\ +make_lua_key(L, presuperscriptshiftdistance);\ +make_lua_key(L, pretolerance);\ +make_lua_key(L, prev);\ +make_lua_key(L, prevdepth);\ +make_lua_key(L, prevgraf);\ +make_lua_key(L, prime);\ +make_lua_key(L, PrimeBaselineDropMax);\ +make_lua_key(L, primeraise);\ +make_lua_key(L, PrimeRaisePercent);\ +make_lua_key(L, primeraisecomposed);\ +make_lua_key(L, PrimeRaiseComposedPercent);\ +make_lua_key(L, primeshiftdrop);\ +make_lua_key(L, PrimeShiftUp);\ +make_lua_key(L, primeshiftup);\ +make_lua_key(L, PrimeShiftUpCramped);\ +make_lua_key(L, primespaceafter);\ +make_lua_key(L, PrimeSpaceAfter);\ +make_lua_key(L, primewidth);\ +make_lua_key(L, PrimeWidthPercent);\ +make_lua_key(L, primevariant);\ +make_lua_key(L, primitive);\ +make_lua_key(L, protected);\ +make_lua_key(L, protected_call);\ +make_lua_key(L, protrudechars);\ +make_lua_key(L, protrusion);\ +make_lua_key(L, properties);\ +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, 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);\ +make_lua_key(L, radicalextensibleafter);\ +make_lua_key(L, radicalextensiblebefore);\ +make_lua_key(L, RadicalKernAfterExtensible);\ +make_lua_key(L, RadicalKernBeforeExtensible);\ +make_lua_key(L, RadicalDegreeBottomRaisePercent);\ +make_lua_key(L, radicaldegreeraise);\ +make_lua_key(L, RadicalDisplayStyleVerticalGap);\ +make_lua_key(L, RadicalExtraAscender);\ +make_lua_key(L, radicalkern);\ +make_lua_key(L, RadicalKernAfterDegree);\ +make_lua_key(L, RadicalKernBeforeDegree);\ +make_lua_key(L, radicalrule);\ +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);\ +make_lua_key(L, register_attribute_reference);\ +make_lua_key(L, register_box);\ +make_lua_key(L, register_box_reference);\ +make_lua_key(L, register_dimen);\ +make_lua_key(L, register_dimen_reference);\ +make_lua_key(L, register_glue);\ +make_lua_key(L, register_glue_reference);\ +make_lua_key(L, register_int);\ +make_lua_key(L, register_int_reference);\ +make_lua_key(L, register_mu_glue);\ +make_lua_key(L, register_mu_glue_reference);\ +make_lua_key(L, register_toks);\ +make_lua_key(L, register_toks_reference);\ +make_lua_key(L, registerdimension);\ +make_lua_key(L, registerinteger);\ +make_lua_key(L, registergluespec);\ +make_lua_key(L, registermugluespec);\ +make_lua_key(L, regular);\ +make_lua_key(L, rel);\ +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);\ +make_lua_key(L, reserved);\ +make_lua_key(L, reset);\ +make_lua_key(L, rhmin);\ +make_lua_key(L, right);\ +make_lua_key(L, right_brace);\ +make_lua_key(L, rightboundary);\ +make_lua_key(L, rightbox);\ +make_lua_key(L, rightboxwidth);\ +make_lua_key(L, righthangskip);\ +make_lua_key(L, rightmargin);\ +make_lua_key(L, rightmarginkern);\ +make_lua_key(L, rightprotrusion);\ +make_lua_key(L, rightskip);\ +make_lua_key(L, righttoleft);\ +make_lua_key(L, root);\ +make_lua_key(L, rooted);\ +make_lua_key(L, rule);\ +make_lua_key(L, rulebasedmathskip);\ +make_lua_key(L, ruledepth);\ +make_lua_key(L, ruleheight);\ +make_lua_key(L, same);\ +make_lua_key(L, saved);\ +make_lua_key(L, scale);\ +make_lua_key(L, script);\ +make_lua_key(L, scriptorder);\ +make_lua_key(L, ScriptPercentScaleDown);\ +make_lua_key(L, scripts);\ +make_lua_key(L, scriptscale);\ +make_lua_key(L, scriptscript);\ +make_lua_key(L, ScriptScriptPercentScaleDown);\ +make_lua_key(L, scriptscriptscale);\ +make_lua_key(L, second);\ +make_lua_key(L, semisimple);\ +make_lua_key(L, set);\ +make_lua_key(L, set_auxiliary);\ +make_lua_key(L, set_box);\ +make_lua_key(L, set_box_property);\ +make_lua_key(L, set_font);\ +make_lua_key(L, set_font_property);\ +make_lua_key(L, set_interaction);\ +make_lua_key(L, set_mark);\ +make_lua_key(L, set_math_parameter);\ +make_lua_key(L, set_page_property);\ +make_lua_key(L, set_specification);\ +make_lua_key(L, shapingpenaltiesmode);\ +make_lua_key(L, shapingpenalty);\ +make_lua_key(L, shift);\ +make_lua_key(L, shiftedsubscript);\ +make_lua_key(L, shiftedsuperscript);\ +make_lua_key(L, shiftedsubprescript);\ +make_lua_key(L, shiftedsuperprescript);\ +make_lua_key(L, shorthand_def);\ +make_lua_key(L, shrink);\ +make_lua_key(L, shrinkorder);\ +make_lua_key(L, simple);\ +make_lua_key(L, size);\ +make_lua_key(L, skewchar);\ +make_lua_key(L, skeweddelimitertolerance);\ +make_lua_key(L, SkewedDelimiterTolerance);\ +make_lua_key(L, skewedfractionhgap);\ +make_lua_key(L, SkewedFractionHorizontalGap);\ +make_lua_key(L, SkewedFractionVerticalGap);\ +make_lua_key(L, skewedfractionvgap);\ +make_lua_key(L, skip);\ +make_lua_key(L, slant);\ +make_lua_key(L, small);\ +make_lua_key(L, smallchar);\ +make_lua_key(L, smaller);\ +make_lua_key(L, smallfamily);\ +make_lua_key(L, some_item);\ +make_lua_key(L, source);\ +make_lua_key(L, space);\ +make_lua_key(L, SpaceAfterScript);\ +make_lua_key(L, spaceafterscript);\ +make_lua_key(L, spacebeforescript);\ +make_lua_key(L, SpaceBeforeScript);\ +make_lua_key(L, spacefactor);\ +make_lua_key(L, spacer);\ +make_lua_key(L, spaceshrink);\ +make_lua_key(L, spaceskip);\ +make_lua_key(L, spacestretch);\ +make_lua_key(L, span);\ +make_lua_key(L, spec);\ +make_lua_key(L, specification);\ +make_lua_key(L, specification_reference);\ +make_lua_key(L, split);\ +make_lua_key(L, split_insert);\ +make_lua_key(L, splitbottom);\ +make_lua_key(L, splitdiscardshead);\ +make_lua_key(L, splitfirst);\ +make_lua_key(L, splitkeep);\ +make_lua_key(L, splitoff);\ +make_lua_key(L, splittopskip);\ +make_lua_key(L, stack);\ +make_lua_key(L, StackBottomDisplayStyleShiftDown);\ +make_lua_key(L, StackBottomShiftDown);\ +make_lua_key(L, stackdenomdown);\ +make_lua_key(L, StackDisplayStyleGapMin);\ +make_lua_key(L, StackGapMin);\ +make_lua_key(L, stacknumup);\ +make_lua_key(L, StackTopDisplayStyleShiftUp);\ +make_lua_key(L, StackTopShiftUp);\ +make_lua_key(L, stackvariant);\ +make_lua_key(L, stackvgap);\ +make_lua_key(L, start);\ +make_lua_key(L, state);\ +make_lua_key(L, step);\ +make_lua_key(L, stretch);\ +make_lua_key(L, stretchorder);\ +make_lua_key(L, StretchStackBottomShiftDown);\ +make_lua_key(L, StretchStackGapAboveMin);\ +make_lua_key(L, StretchStackGapBelowMin);\ +make_lua_key(L, StretchStackTopShiftUp);\ +make_lua_key(L, strictend);\ +make_lua_key(L, strictstart);\ +make_lua_key(L, string);\ +make_lua_key(L, strut);\ +make_lua_key(L, style);\ +make_lua_key(L, sub);\ +make_lua_key(L, subbox);\ +make_lua_key(L, submlist);\ +make_lua_key(L, subpre);\ +make_lua_key(L, subscript);\ +make_lua_key(L, SubscriptBaselineDropMin);\ +make_lua_key(L, subscriptshiftdistance);\ +make_lua_key(L, SubscriptShiftDown);\ +make_lua_key(L, SubscriptShiftDownWithSuperscript);\ +make_lua_key(L, SubscriptTopMax);\ +make_lua_key(L, subscriptvariant);\ +make_lua_key(L, subshiftdown);\ +make_lua_key(L, subshiftdrop);\ +make_lua_key(L, substitute);\ +make_lua_key(L, SubSuperscriptGapMin);\ +make_lua_key(L, subsupshiftdown);\ +make_lua_key(L, subsupvgap);\ +make_lua_key(L, subtopmax);\ +make_lua_key(L, subtype);\ +make_lua_key(L, sup);\ +make_lua_key(L, supbottommin);\ +make_lua_key(L, superscript);\ +make_lua_key(L, SuperscriptBaselineDropMax);\ +make_lua_key(L, SuperscriptBottomMaxWithSubscript);\ +make_lua_key(L, SuperscriptBottomMin);\ +make_lua_key(L, superscriptshiftdistance);\ +make_lua_key(L, SuperscriptShiftUp);\ +make_lua_key(L, SuperscriptShiftUpCramped);\ +make_lua_key(L, superscriptvariant);\ +make_lua_key(L, suppre);\ +make_lua_key(L, supshiftdrop);\ +make_lua_key(L, supshiftup);\ +make_lua_key(L, supsubbottommax);\ +make_lua_key(L, surround);\ +make_lua_key(L, syllable);\ +make_lua_key(L, tabskip);\ +make_lua_key(L, tail);\ +make_lua_key(L, target);\ +make_lua_key(L, temp);\ +make_lua_key(L, temphead);\ +make_lua_key(L, terminal);\ +make_lua_key(L, terminal_and_logfile);\ +make_lua_key(L, tex);\ +make_lua_key(L, tex_nest);\ +make_lua_key(L, text);\ +make_lua_key(L, textcontrol);\ +make_lua_key(L, textscale);\ +make_lua_key(L, the);\ +make_lua_key(L, thickmuskip);\ +make_lua_key(L, thinmuskip);\ +make_lua_key(L, tok);\ +make_lua_key(L, token);\ +make_lua_key(L, tokenlist);\ +make_lua_key(L, tolerance);\ +make_lua_key(L, tolerant);\ +make_lua_key(L, tolerant_call);\ +make_lua_key(L, tolerant_protected_call);\ +make_lua_key(L, top);\ +make_lua_key(L, topaccent);\ +make_lua_key(L, topaccentvariant);\ +make_lua_key(L, topleft);\ +make_lua_key(L, topmargin);\ +make_lua_key(L, topright);\ +make_lua_key(L, topskip);\ +make_lua_key(L, total);\ +make_lua_key(L, tracingparagraphs);\ +make_lua_key(L, trailer);\ +make_lua_key(L, Trailer);\ +make_lua_key(L, type);\ +make_lua_key(L, uchyph);\ +make_lua_key(L, uleaders);\ +make_lua_key(L, un_hbox);\ +make_lua_key(L, un_vbox);\ +make_lua_key(L, undefined_cs);\ +make_lua_key(L, under);\ +make_lua_key(L, UnderbarExtraDescender);\ +make_lua_key(L, underbarkern);\ +make_lua_key(L, underbarrule);\ +make_lua_key(L, UnderbarRuleThickness);\ +make_lua_key(L, UnderbarVerticalGap);\ +make_lua_key(L, underbarvgap);\ +make_lua_key(L, underdelimiter);\ +make_lua_key(L, underdelimiterbgap);\ +make_lua_key(L, underdelimitervariant);\ +make_lua_key(L, underdelimitervgap);\ +make_lua_key(L, underlinevariant);\ +make_lua_key(L, unhbox);\ +make_lua_key(L, unhyphenated);\ +make_lua_key(L, unknown);\ +make_lua_key(L, unpacklist);\ +make_lua_key(L, unrolllist);\ +make_lua_key(L, unset);\ +make_lua_key(L, untraced);\ +make_lua_key(L, unvbox);\ +make_lua_key(L, uppercase);\ +make_lua_key(L, UpperLimitBaselineRiseMin);\ +make_lua_key(L, UpperLimitGapMin);\ +make_lua_key(L, user);\ +make_lua_key(L, userkern);\ +make_lua_key(L, userpenalty);\ +make_lua_key(L, userskip);\ +make_lua_key(L, v);\ +make_lua_key(L, vadjust);\ +make_lua_key(L, valign);\ +make_lua_key(L, value);\ +make_lua_key(L, variable);\ +make_lua_key(L, vbox);\ +make_lua_key(L, vcenter);\ +make_lua_key(L, vdelimiter);\ +make_lua_key(L, vertical);\ +make_lua_key(L, verticalmathkern);\ +make_lua_key(L, vextensible);\ +make_lua_key(L, vextensiblevariant);\ +make_lua_key(L, vitalic);\ +make_lua_key(L, vlist);\ +make_lua_key(L, vmode);\ +make_lua_key(L, vmodepar);\ +make_lua_key(L, vmove);\ +make_lua_key(L, void);\ +make_lua_key(L, vrule);\ +make_lua_key(L, vskip);\ +make_lua_key(L, vtop);\ +make_lua_key(L, vparts);\ +make_lua_key(L, whatsit);\ +make_lua_key(L, widowpenalties);\ +make_lua_key(L, widowpenalty);\ +make_lua_key(L, width);\ +make_lua_key(L, woffset);\ +make_lua_key(L, word);\ +make_lua_key(L, wordpenalty);\ +make_lua_key(L, wrapup);\ +make_lua_key(L, xheight);\ +make_lua_key(L, xleaders);\ +make_lua_key(L, xoffset);\ +make_lua_key(L, xray);\ +make_lua_key(L, xscale);\ +make_lua_key(L, xspaceskip);\ +make_lua_key(L, yoffset);\ +make_lua_key(L, yscale);\ +make_lua_key(L, zerospaceskip);\ +/* */ \ +make_lua_key_alias(L, empty_string, "");\ +/* */ \ +make_lua_key_alias(L, node_instance, NODE_METATABLE_INSTANCE);\ +make_lua_key_alias(L, node_properties, NODE_PROPERTIES_DIRECT);\ +make_lua_key_alias(L, node_properties_indirect, NODE_PROPERTIES_INDIRECT);\ +/* */ \ +make_lua_key_alias(L, token_instance, TOKEN_METATABLE_INSTANCE);\ +make_lua_key_alias(L, token_package, TOKEN_METATABLE_PACKAGE);\ +/* */ \ +make_lua_key_alias(L, sparse_instance, SPARSE_METATABLE_INSTANCE);\ +/* */ \ +make_lua_key_alias(L, pdfe_instance, PDFE_METATABLE_INSTANCE);\ +make_lua_key_alias(L, pdfe_dictionary, PDFE_METATABLE_DICTIONARY);\ +make_lua_key_alias(L, pdfe_array, PDFE_METATABLE_ARRAY);\ +make_lua_key_alias(L, pdfe_stream, PDFE_METATABLE_STREAM);\ +make_lua_key_alias(L, pdfe_reference, PDFE_METATABLE_REFERENCE);\ +/* done */ + +# define declare_metapost_lua_keys(L) \ +/* */\ +/* (L, close); */\ +make_lua_key(L, color);\ +make_lua_key(L, curl);\ +make_lua_key(L, curled);\ +make_lua_key(L, curved);\ +make_lua_key(L, cycle);\ +make_lua_key(L, dash);\ +make_lua_key(L, dashes);\ +/* (L, depth); */\ +make_lua_key(L, direction_x);\ +make_lua_key(L, direction_y);\ +make_lua_key(L, elliptical);\ +make_lua_key(L, end_cycle);\ +make_lua_key(L, endpoint);\ +make_lua_key(L, error);\ +make_lua_key(L, error_line);\ +/* (L, explicit); */\ +make_lua_key(L, extensions);\ +make_lua_key(L, fig);\ +/* (L, fill); */\ +make_lua_key(L, find_file);\ +/* (L, font); */\ +make_lua_key(L, given);\ +make_lua_key(L, halt_on_error);\ +make_lua_key(L, hash);\ +/* (L, height); */\ +make_lua_key(L, htap);\ +make_lua_key(L, interaction);\ +make_lua_key(L, internals);\ +make_lua_key(L, job_name);\ +make_lua_key(L, knots);\ +make_lua_key(L, left_curl);\ +make_lua_key(L, left_tension);\ +make_lua_key(L, left_type);\ +make_lua_key(L, left_x);\ +make_lua_key(L, left_y);\ +make_lua_key(L, linecap);\ +make_lua_key(L, linejoin);\ +make_lua_key(L, make_text);\ +make_lua_key(L, math_mode);\ +make_lua_key(L, memory);\ +make_lua_key(L, miterlimit);\ +make_lua_key(L, nodes);\ +make_lua_key(L, offset);\ +/* (L, open); */\ +make_lua_key(L, open_file);\ +/* (L, outline); */\ +make_lua_key(L, pairs);\ +make_lua_key(L, path);\ +make_lua_key(L, pen);\ +make_lua_key(L, postscript);\ +make_lua_key(L, prescript);\ +make_lua_key(L, print_line);\ +make_lua_key(L, random_seed);\ +/* (L, reader); */\ +make_lua_key(L, right_curl);\ +make_lua_key(L, right_tension);\ +make_lua_key(L, right_type);\ +make_lua_key(L, right_x);\ +make_lua_key(L, right_y);\ +make_lua_key(L, run_error);\ +make_lua_key(L, run_internal);\ +make_lua_key(L, run_logger);\ +make_lua_key(L, run_overload);\ +make_lua_key(L, run_script);\ +make_lua_key(L, run_warning);\ +make_lua_key(L, rx);\ +make_lua_key(L, ry);\ +make_lua_key(L, show_mode);\ +make_lua_key(L, stacking);\ +make_lua_key(L, start_bounds);\ +make_lua_key(L, start_clip);\ +make_lua_key(L, start_group);\ +make_lua_key(L, status);\ +make_lua_key(L, stop_bounds);\ +make_lua_key(L, stop_clip);\ +make_lua_key(L, stop_group);\ +make_lua_key(L, strings);\ +make_lua_key(L, sx);\ +make_lua_key(L, sy);\ +make_lua_key(L, symbols);\ +/* (L, text); */\ +make_lua_key(L, text_mode);\ +make_lua_key(L, tokens);\ +make_lua_key(L, transform);\ +make_lua_key(L, tx);\ +make_lua_key(L, ty);\ +/* (L, type); */\ +make_lua_key(L, utf8_mode);\ +make_lua_key(L, warning);\ +/* (L, width); */\ +make_lua_key(L, writer);\ +make_lua_key(L, x_coord);\ +make_lua_key(L, y_coord);\ +/* */\ +make_lua_key_alias(L, mplib_instance, MP_METATABLE_INSTANCE);\ +make_lua_key_alias(L, mplib_figure, MP_METATABLE_FIGURE);\ +make_lua_key_alias(L, mplib_object, MP_METATABLE_OBJECT);\ +/* done */ + +/*tex + We want them properly aligned so we put pointers and indices in blocks. +*/ + +typedef struct lmt_keys { +# undef make_lua_key +# undef make_lua_key_alias +# define make_lua_key make_lua_key_ptr +# define make_lua_key_alias make_lua_key_ptr_alias +declare_shared_lua_keys(NULL) +declare_metapost_lua_keys(NULL) +# undef make_lua_key +# undef make_lua_key_alias +# define make_lua_key make_lua_key_idx +# define make_lua_key_alias make_lua_key_idx_alias +declare_shared_lua_keys(NULL) +declare_metapost_lua_keys(NULL) +# undef make_lua_key +# undef make_lua_key_alias +} lmt_keys_info ; + +extern lmt_keys_info lmt_keys; + +# define make_lua_key init_lua_key +# define make_lua_key_alias init_lua_key_alias + +# define lmt_initialize_shared_keys declare_shared_lua_keys +# define lmt_initialize_metapost_keys declare_metapost_lua_keys + +/*tex + + We use round from |math.h| because when in a macro we check for sign we (depending on + optimization) can fetch numbers multiple times. I need to measure this a bit more as inlining + looks a bit faster on for instance |experiment.tex| but of course the bin becomes (some 10K) + larger. + +*/ + +//define lmt_rounded(d) (lua_Integer) (round(d)) +//define lmt_roundedfloat(f) (lua_Integer) (round((double) f)) + +# define lmt_rounded(d) (lua_Integer) (llround(d)) +# define lmt_roundedfloat(f) (lua_Integer) (llround((double) f)) + + +# define lmt_tolong(L,i) (long) lua_tointeger(L,i) +# define lmt_checklong(L,i) (long) luaL_checkinteger(L,i) +# define lmt_optlong(L,i,j) (long) luaL_optinteger(L,i,j) + +# define lmt_tointeger(L,i) (int) lua_tointeger(L,i) +# define lmt_checkinteger(L,i) (int) luaL_checkinteger(L,i) +# define lmt_optinteger(L,i,j) (int) luaL_optinteger(L,i,j) + +# define lmt_tosizet(L,i) (size_t) lua_tointeger(L,i) +# define lmt_checksizet(L,i) (size_t) luaL_checkinteger(L,i) +# define lmt_optsizet(L,i,j) (size_t) luaL_optinteger(L,i,j) + +# define lmt_tohalfword(L,i) (halfword) lua_tointeger(L,i) +# define lmt_checkhalfword(L,i) (halfword) luaL_checkinteger(L,i) +# define lmt_opthalfword(L,i,j) (halfword) luaL_optinteger(L,i,j) + +# define lmt_toscaled(L,i) (scaled) lua_tointeger(L,i) +# define lmt_checkscaled(L,i) (scaled) luaL_checkinteger(L,i) +# define lmt_optscaled(L,i,j) (scaled) luaL_optinteger(L,i,j) + +# define lmt_toquarterword(L,i) (quarterword) lua_tointeger(L,i) +# define lmt_checkquarterword(L,i) (quarterword) luaL_checkinteger(L,i) +# define lmt_optquarterword(L,i,j) (quarterword) luaL_optinteger(L,i,j) + +# define lmt_tosingleword(L,i) (singleword) lua_tointeger(L,i) +# define lmt_checksingleword(L,i) (singleword) luaL_checkinteger(L,i) +# define lmt_optsingleword(L,i,j) (singleword) luaL_optinteger(L,i,j) + +# undef lround +# include <math.h> + +inline static int lmt_roundnumber(lua_State *L, int i) +{ + double n = lua_tonumber(L, i); + return n == 0.0 ? 0 : lround(n); +} + +inline static int lmt_optroundnumber(lua_State *L, int i, int dflt) +{ + double n = luaL_optnumber(L, i, dflt); + return n == 0.0 ? 0 : lround(n); +} + +inline static unsigned int lmt_uroundnumber(lua_State *L, int i) +{ + double n = lua_tonumber(L, i); + return n == 0.0 ? 0 : (unsigned int) lround(n); +} + +inline static double lmt_number_from_table(lua_State *L, int i, int j, lua_Number d) +{ + double n; + lua_rawgeti(L, i, j); + n = luaL_optnumber(L, -1, d); + lua_pop(L, 1); + return n; +} + +extern void lmt_initialize_interface(void); + +# define lmt_toroundnumber lmt_roundnumber +# define lmt_touroundnumber lmt_uroundnumber + +/* +# define lua_set_string_by_key(L,a,b) \ + lua_pushstring(L, b ? b : ""); \ + lua_setfield(L, -2, a); + +# define lua_set_string_by_index(L,a,b) \ + lua_pushstring(L, b ? b : ""); \ + lua_rawseti(L, -2, a); + +# define lua_set_integer_by_key(L,a,b) \ + lua_pushinteger(L, b); \ + lua_setfield(L, -2, a); + +# define lua_set_integer_by_index(L,a,b) \ + lua_pushinteger(L, b); \ + lua_rawseti(L, -2, a); + +# define lua_set_boolean_by_key(L,a,b) \ + lua_pushboolean(L, b); \ + lua_setfield(L, -2, a); + +# define lua_set_boolean_by_index(L,a,b) \ + lua_pushboolean(L, b); \ + lua_rawseti(L, -2, a); +*/ + +inline static void lua_set_string_by_key(lua_State *L, const char *a, const char *b) +{ + lua_pushstring(L, b ? b : ""); + lua_setfield(L, -2, a); +} + +inline static void lua_set_string_by_index(lua_State *L, int a, const char *b) +{ + lua_pushstring(L, b ? b : ""); + lua_rawseti(L, -2, a); +} + +inline static void lua_set_integer_by_key(lua_State *L, const char *a, int b) +{ + lua_pushinteger(L, b); + lua_setfield(L, -2, a); +} + +inline static void lua_set_integer_by_index(lua_State *L, int a, int b) +{ + lua_pushinteger(L, b); + lua_rawseti(L, -2, a); +} + +inline static void lua_set_cardinal_by_key(lua_State *L, const char *a, unsigned b) +{ + lua_pushinteger(L, b); + lua_setfield(L, -2, a); +} + +inline static void lua_set_cardinal_by_index(lua_State *L, int a, unsigned b) +{ + lua_pushinteger(L, b); + lua_rawseti(L, -2, a); +} + +inline static void lua_set_boolean_by_key(lua_State *L, const char *a, int b) +{ + lua_pushboolean(L, b); + lua_setfield(L, -2, a); +} + +inline static void lua_set_boolean_by_index(lua_State *L, int a, int b) +{ + lua_pushboolean(L, b); + lua_rawseti(L, -2, a); +} + +inline void lmt_string_to_buffer(const char *str) +{ + luaL_addstring(lmt_lua_state.used_buffer, str); +} + +inline void lmt_char_to_buffer(char c) +{ + luaL_addchar(lmt_lua_state.used_buffer, c); +} + +inline void lmt_newline_to_buffer(void) +{ + luaL_addchar(lmt_lua_state.used_buffer, '\n'); +} + +# endif |