1
4
5# ifndef LMT_LINTERFACE_H
6# define LMT_LINTERFACE_H
7
8# define lmt_linterface_inline 1
9
10
16# include "lua.h"
17# include "lauxlib.h"
18# include "lualib.h"
19
20
21
22extern int tex_formatted_error (const char *t, const char *fmt, ...);
23extern void tex_formatted_warning (const char *t, const char *fmt, ...);
24extern void tex_emergency_message (const char *t, const char *fmt, ...);
25
26
32
33typedef struct lua_state_info {
34 lua_State *lua_instance;
35 int used_bytes;
36 int used_bytes_max;
37 int function_table_id;
38 int function_callback_count;
39 int value_callback_count;
40 int bytecode_callback_count;
41 int local_callback_count;
42 int saved_callback_count;
43 int file_callback_count;
44 int direct_callback_count;
45 int message_callback_count;
46 int function_table_size;
47 int bytecode_bytes;
48 int bytecode_max;
49 int version_number;
50 int release_number;
51 luaL_Buffer *used_buffer;
52 int integer_size;
53} lua_state_info ;
54
55extern lua_state_info lmt_lua_state;
56
57
58
59extern int luaopen_aes (lua_State *L);
60extern int luaopen_basexx (lua_State *L);
61extern int luaopen_callback (lua_State *L);
62extern int luaopen_filelib (lua_State *L);
63extern int luaopen_fio (lua_State *L);
64extern int luaopen_font (lua_State *L);
65extern int luaopen_language (lua_State *L);
66extern int luaopen_library (lua_State *L);
67extern int luaopen_lpeg (lua_State *L);
68extern int luaopen_lua (lua_State *L);
69extern int luaopen_luac (lua_State *L);
70extern int luaopen_md5 (lua_State *L);
71extern int luaopen_mime_core (lua_State *L);
72extern int luaopen_mplib (lua_State *L);
73extern int luaopen_node (lua_State *L);
74extern int luaopen_optional (lua_State *L);
75extern int luaopen_pdfdecode (lua_State *L);
76extern int luaopen_pdfe (lua_State *L);
77extern int luaopen_pngdecode (lua_State *L);
78extern int luaopen_posit (lua_State *L);
79extern int luaopen_potrace (lua_State *L);
80extern int luaopen_sha2 (lua_State *L);
81extern int luaopen_sio (lua_State *L);
82extern int luaopen_socket_core (lua_State *L);
83extern int luaopen_sparse (lua_State *L);
84extern int luaopen_status (lua_State *L);
85extern int luaopen_tex (lua_State *L);
86extern int luaopen_texio (lua_State *L);
87extern int luaopen_token (lua_State *L);
88extern int luaopen_xcomplex (lua_State *L);
89extern int luaopen_xdecimal (lua_State *L);
90extern int luaopen_xmath (lua_State *L);
91extern int luaopen_xzip (lua_State *L);
92
93extern int luaextend_io (lua_State *L);
94extern int luaextend_os (lua_State *L);
95extern int luaextend_string (lua_State *L);
96extern int luaextend_table (lua_State *L);
97extern int luaextend_xcomplex (lua_State *L);
98
99
107
108# if !defined(LUAI_HASHLIMIT)
109# define LUAI_HASHLIMIT 6
110# endif
111
112
132
133
134
135# define lua_key_eq(a,b) (a == lmt_keys.ptr_##b)
136# define lua_key_index(a) lmt_keys.idx_##a
137# define lua_key(a) lmt_keys.ptr_##a
138
139# define init_lua_key(L,a) \
140 lua_pushliteral(L, #a); \
141 lmt_keys.ptr_##a = lua_tolstring(L, -1, NULL); \
142 lmt_keys.idx_##a = luaL_ref(L, LUA_REGISTRYINDEX);
143
144# define init_lua_key_alias(L,a,b) \
145 lua_pushliteral(L, b); \
146 lmt_keys.ptr_##a = lua_tolstring(L, -1, NULL); \
147 lmt_keys.idx_##a = luaL_ref(L, LUA_REGISTRYINDEX);
148
149# define make_lua_key_ptr(L,a) const char *ptr_##a
150# define make_lua_key_idx(L,a) int idx_##a
151
152# define make_lua_key_ptr_alias(L,a,b) const char *ptr_##a
153# define make_lua_key_idx_alias(L,a,b) int idx_##a
154
155# define make_lua_key
156# define make_lua_key_alias
157
158# define lua_push_key(a) lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(a));
159# define lua_push_key_by_index(a) lua_rawgeti(L, LUA_REGISTRYINDEX, a);
160
161# define lua_get_metatablelua(a) do { \
162 lua_rawgeti(L, LUA_REGISTRYINDEX, lua_key_index(a)); \
163 lua_gettable(L, LUA_REGISTRYINDEX); \
164} while (0)
165
166# define lua_push_number(L,x) lua_pushnumber (L, (lua_Number) (x))
167# define lua_push_integer(L,x) lua_pushinteger(L, (int) (x))
168# define lua_push_halfword(L,x) lua_pushinteger(L, (lua_Integer) (x))
169
170# define lua_push_number_at_index(L,i,x) \
171 lua_pushnumber(L, (lua_Number) (x)); \
172 lua_rawseti(L, -2, i);
173
174# define lua_push_integer_at_index(L,i,x) \
175 lua_pushinteger(L, (x)); \
176 lua_rawseti(L, -2, i);
177
178# define lua_push_string_at_index(L,i,s) \
179 lua_pushstring(L, s); \
180 lua_rawseti(L, -2, i);
181
182
183
184# define lua_push_key_at_index(L,k,i) \
185 lua_pushinteger(L, i); \
186 lua_push_key(k); \
187 lua_rawset(L, -3);
188
189# define lua_push_nil_at_key(L,k) \
190 lua_push_key(k); \
191 lua_pushnil(L); \
192 lua_rawset(L, -3);
193
194# define lua_push_number_at_key(L,k,x) \
195 lua_push_key(k); \
196 lua_pushnumber(L, (lua_Number) (x)); \
197 lua_rawset(L, -3);
198
199# define lua_push_integer_at_key(L,k,x) \
200 lua_push_key(k); \
201 lua_pushinteger(L, (x)); \
202 lua_rawset(L, -3);
203
204# define lua_push_string_at_key(L,k,s) \
205 lua_push_key(k); \
206 lua_pushstring(L, s); \
207 lua_rawset(L, -3);
208
209# define mlua_push_lstring_at_key(L,k,s,l) \
210 lua_push_key(k); \
211 lua_pushlstring(L, s, l); \
212 lua_rawset(L, -3);
213
214# define lua_push_boolean_at_key(L,k,b) \
215 lua_push_key(k); \
216 lua_pushboolean(L, b); \
217 lua_rawset(L, -3);
218
219# define lua_push_value_at_key(L,k,v) \
220 lua_push_key(k); \
221 lua_push_key(v); \
222 lua_rawset(L, -3);
223
224# define lua_push_svalue_at_key(L,k,v) \
225 lua_push_key(k); \
226 lua_push_key_by_index(v); \
227 lua_rawset(L, -3);
228
229# define lua_push_specification_at_key(L,k,x) \
230 lua_push_key(k); \
231 lmt_push_specification(L, x, 0); \
232 lua_rawset(L, -3);
233
234
235
236
237
238# define NODE_METATABLE_INSTANCE "node.instance"
239# define NODE_PROPERTIES_DIRECT "node.properties"
240# define NODE_PROPERTIES_INDIRECT "node.properties.indirect"
241# define NODE_PROPERTIES_INSTANCE "node.properties.instance"
242
243
244
245# define TOKEN_METATABLE_INSTANCE "token.instance"
246# define TOKEN_METATABLE_PACKAGE "token.package"
247
248
249
250# define PDFE_METATABLE_INSTANCE "pdfe.instance"
251# define PDFE_METATABLE_DICTIONARY "pdfe.dictionary"
252# define PDFE_METATABLE_ARRAY "pdfe.array"
253# define PDFE_METATABLE_STREAM "pdfe.stream"
254# define PDFE_METATABLE_REFERENCE "pdfe.reference"
255
256
257
258# define MP_METATABLE_INSTANCE "mp.instance"
259# define MP_METATABLE_FIGURE "mp.figure"
260# define MP_METATABLE_OBJECT "mp.object"
261
262
263
264# define SPARSE_METATABLE_INSTANCE "sparse.instance"
265
266
267
268# define STRING_BUFFER_INSTANCE "stringbuffer.instance"
269
270
274
275
291
292
300
301typedef struct value_info {
302 union {
303 int id;
304 int type;
305 int value;
306 };
307 int lua;
308 const char *name;
309} value_info;
310
311typedef struct node_info {
312 int id;
313 int size;
314 value_info *subtypes;
315 value_info *fields;
316 const char *name;
317 int lua;
318 int visible;
319 int first;
320 int last;
321} node_info;
322
323typedef struct par_info {
324 short cmd;
325 short chr;
326 int category;
327} par_info;
328
329
330typedef struct command_item {
331 int id;
332 int lua;
333 const char *name;
334 int kind;
335 int min;
336 int max;
337 int base;
338 int fixedvalue;
339} command_item;
340
341# define unknown_node 0xFFFF
342# define unknown_subtype 0xFFFF
343# define unknown_field 0xFFFF
344# define unknown_value 0xFFFF
345
346# define set_value_entry_nop(target,n) target[n].lua = 0; target[n].name = NULL; target[n].value = unknown_value;
347# 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;
348# define set_value_entry_lua(target,n,k) target[n].lua = lua_key_index(k); target[n].name = lua_key(k);
349# 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;
350
351extern value_info *lmt_aux_allocate_value_info(size_t last);
352
353typedef struct lmt_interface_info {
354
355 value_info *pack_type_values;
356 value_info *group_code_values;
357 value_info *par_context_values;
358 value_info *page_context_values;
359 value_info *append_line_context_values;
360 value_info *alignment_context_values;
361 value_info *line_break_context_values;
362 value_info *build_context_values;
363 value_info *vsplit_context_values;
364 value_info *par_trigger_values;
365 value_info *par_mode_values;
366 value_info *math_style_name_values;
367 value_info *math_style_variant_values;
368
369
370
371 value_info *lua_function_values;
372 value_info *direction_values;
373 value_info *node_fill_values;
374 value_info *page_contribute_values;
375 value_info *math_style_values;
376 value_info *math_parameter_values;
377 value_info *math_font_parameter_values;
378 value_info *math_indirect_values;
379 value_info *field_type_values;
380
381 node_info *node_data;
382 par_info *par_data;
383
384 command_item *command_names;
385} lmt_interface_info ;
386
387extern lmt_interface_info lmt_interface;
388
389# define lmt_push_pack_type(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.pack_type_values [n].lua)
390# define lmt_push_group_code(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.group_code_values [n].lua)
391# define lmt_push_par_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.par_context_values [n].lua)
392# define lmt_push_page_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.page_context_values [n].lua)
393# define lmt_push_append_line_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.append_line_context_values[n].lua)
394# define lmt_push_alignment_context(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.alignment_context_values [n].lua)
395# define lmt_push_par_trigger(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.par_trigger_values [n].lua)
396# define lmt_push_par_mode(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.par_mode_values [n].lua)
397# define lmt_push_math_style_name(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_style_name_values [n].lua)
398# define lmt_push_math_style_variant(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_style_variant_values [n].lua)
399# define lmt_push_math_noad_option(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_noad_option_values [n].lua)
400# define lmt_push_lua_function_values(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.lua_function_values [n].lua)
401# define lmt_push_direction(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.direction_values [n].lua)
402# define lmt_push_node_fill(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.node_fill_values [n].lua)
403# define lmt_push_page_contribute(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.page_contribute_values [n].lua)
404# define lmt_push_math_style(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_style_values [n].lua)
405# define lmt_push_math_parameter(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_parameter_values [n].lua)
406# define lmt_push_math_font_parameter(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_font_parameter_values[n].lua)
407# define lmt_push_math_indirect(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.math_indirect_values [n].lua)
408# define lmt_push_field_type(L,n) lua_rawgeti(L, LUA_REGISTRYINDEX, lmt_interface.field_type_values [n].lua)
409
410# define lmt_name_of_pack_type(n) lmt_interface.pack_type_values [n].name
411# define lmt_name_of_group_code(n) lmt_interface.group_code_values [n].name
412# define lmt_name_of_par_context(n) lmt_interface.par_context_values [n].name
413# define lmt_name_of_page_context(n) lmt_interface.page_context_values [n].name
414# define lmt_name_of_append_line_context(n) lmt_interface.append_line_context_values[n].name
415# define lmt_name_of_alignment_context(n) lmt_interface.alignment_context_values [n].name
416# define lmt_name_of_trigger_begin(n) lmt_interface.par_trigger_values [n].name
417# define lmt_name_of_par_mode(n) lmt_interface.par_mode_values [n].name
418# define lmt_name_of_math_style_name(n) lmt_interface.math_style_name_values [n].name
419# define lmt_name_of_math_style_variant(n) lmt_interface.math_style_variant_values [n].name
420# define lmt_name_of_math_noad_option(n) lmt_interface.math_noad_option_values [n].name
421# define lmt_name_of_lua_function_values(n) lmt_interface.lua_function_values [n].name
422# define lmt_name_of_direction(n) lmt_interface.direction_values [n].name
423# define lmt_name_of_node_fill(n) lmt_interface.node_fill_values [n].name
424# define lmt_name_of_page_contribute(n) lmt_interface.page_contribute_values [n].name
425# define lmt_name_of_math_style(n) lmt_interface.math_style_values [n].name
426# define lmt_name_of_math_parameter(n) lmt_interface.math_parameter_values [n].name
427# define lmt_name_of_math_font_parameter(n) lmt_interface.math_font_parameter_values[n].name
428# define lmt_name_of_math_indirect(n) lmt_interface.math_indirect_values [n].name
429# define lmt_name_of_field_type(n) lmt_interface.field_type_values [n].name
430
431
439
440# undef quad
441
442# define declare_shared_lua_keys(L) \
443\
444make_lua_key(L, __index);\
445make_lua_key(L, __newindex);\
446make_lua_key(L, above);\
447make_lua_key(L, abovedisplayshortskip);\
448make_lua_key(L, abovedisplayskip);\
449make_lua_key(L, accent);\
450make_lua_key(L, AccentBaseDepth);\
451make_lua_key(L, accentbasedepth);\
452make_lua_key(L, AccentBaseHeight);\
453make_lua_key(L, accentbaseheight);\
454make_lua_key(L, AccentBottomOvershoot);\
455make_lua_key(L, accentbottomovershoot);\
456make_lua_key(L, AccentBottomShiftDown);\
457make_lua_key(L, accentbottomshiftdown);\
458make_lua_key(L, AccentExtendMargin);\
459make_lua_key(L, accentextendmargin);\
460make_lua_key(L, accentkern);\
461make_lua_key(L, AccentSuperscriptDrop);\
462make_lua_key(L, accentsuperscriptdrop);\
463make_lua_key(L, AccentSuperscriptPercent);\
464make_lua_key(L, accentsuperscriptpercent);\
465make_lua_key(L, AccentTopOvershoot);\
466make_lua_key(L, accenttopovershoot);\
467make_lua_key(L, AccentTopShiftUp);\
468make_lua_key(L, accenttopshiftup);\
469make_lua_key(L, accentvariant);\
470make_lua_key(L, active);\
471make_lua_key(L, active_char);\
472make_lua_key(L, adapted);\
473make_lua_key(L, additional);\
474make_lua_key(L, adjacentdemerits);\
475make_lua_key(L, adjdemerits);\
476make_lua_key(L, adjust);\
477make_lua_key(L, adjustedhbox);\
478make_lua_key(L, adjustspacing);\
479make_lua_key(L, adjustspacingshrink);\
480make_lua_key(L, adjustspacingstep);\
481make_lua_key(L, adjustspacingstretch);\
482make_lua_key(L, advance);\
483make_lua_key(L, after_output);\
484make_lua_key(L, after_something);\
485make_lua_key(L, afterdisplay);\
486make_lua_key(L, afterdisplaypenalty);\
487make_lua_key(L, afteroutput);\
488make_lua_key(L, aliased);\
489make_lua_key(L, align);\
490make_lua_key(L, alignhead);\
491make_lua_key(L, alignment);\
492make_lua_key(L, alignment_tab);\
493make_lua_key(L, alignrecord);\
494make_lua_key(L, alignset);\
495make_lua_key(L, alignstack);\
496make_lua_key(L, alsosimple);\
497make_lua_key(L, analyzed);\
498make_lua_key(L, anchor);\
499make_lua_key(L, append);\
500make_lua_key(L, argument);\
501make_lua_key(L, arithmic);\
502make_lua_key(L, atop);\
503make_lua_key(L, association);\
504make_lua_key(L, attr);\
505make_lua_key(L, attribute);\
506make_lua_key(L, attribute_list);\
507make_lua_key(L, attributelist);\
508make_lua_key(L, auto);\
509make_lua_key(L, automatic);\
510make_lua_key(L, auxiliary);\
511make_lua_key(L, axis);\
512make_lua_key(L, AxisHeight);\
513make_lua_key(L, balance);\
514make_lua_key(L, balancefinalpenalty);\
515make_lua_key(L, balanceslot);\
516make_lua_key(L, baselineskip);\
517make_lua_key(L, beforedisplay);\
518make_lua_key(L, beforedisplaypenalty);\
519make_lua_key(L, begin_group);\
520make_lua_key(L, begin_local);\
521make_lua_key(L, begin_paragraph);\
522make_lua_key(L, beginmath);\
523make_lua_key(L, beginbrokenmath);\
524make_lua_key(L, beginparagraph);\
525make_lua_key(L, belowdisplayshortskip);\
526make_lua_key(L, belowdisplayskip);\
527make_lua_key(L, bend_tolerance);\
528make_lua_key(L, bestinsert);\
529make_lua_key(L, bestpagebreak);\
530make_lua_key(L, bestsize);\
531make_lua_key(L, binary);\
532make_lua_key(L, boolean);\
533make_lua_key(L, bothflexible);\
534make_lua_key(L, bottom);\
535make_lua_key(L, bottomaccent);\
536make_lua_key(L, bottomaccentvariant);\
537make_lua_key(L, bottomanchor);\
538make_lua_key(L, bottomleft);\
539make_lua_key(L, bottomlevel);\
540make_lua_key(L, bottommargin);\
541make_lua_key(L, bottomovershoot);\
542make_lua_key(L, bottomright);\
543make_lua_key(L, bottomskip);\
544make_lua_key(L, boundary);\
545make_lua_key(L, box);\
546make_lua_key(L, box_property);\
547make_lua_key(L, broken);\
548make_lua_key(L, brokeninsert);\
549make_lua_key(L, brokenpenalty);\
550make_lua_key(L, brokenpenalties);\
551make_lua_key(L, bytecode);\
552make_lua_key(L, call);\
553make_lua_key(L, callback);\
554make_lua_key(L, cancel);\
555make_lua_key(L, cardinal);\
556make_lua_key(L, case_shift);\
557make_lua_key(L, catalog);\
558make_lua_key(L, Catalog);\
559make_lua_key(L, catcode_table);\
560make_lua_key(L, category);\
561make_lua_key(L, cell);\
562make_lua_key(L, center);\
563make_lua_key(L, char);\
564make_lua_key(L, char_given);\
565make_lua_key(L, char_number);\
566make_lua_key(L, character);\
567make_lua_key(L, characters);\
568make_lua_key(L, check);\
569make_lua_key(L, checks);\
570make_lua_key(L, choice);\
571make_lua_key(L, class);\
572make_lua_key(L, cleaders);\
573make_lua_key(L, close);\
574make_lua_key(L, clubpenalties);\
575make_lua_key(L, clubpenalty);\
576make_lua_key(L, cmd);\
577make_lua_key(L, cmdname);\
578make_lua_key(L, collapse);\
579make_lua_key(L, collect);\
580make_lua_key(L, combine_toks);\
581make_lua_key(L, command);\
582make_lua_key(L, comment);\
583make_lua_key(L, compactmath);\
584make_lua_key(L, compound);\
585make_lua_key(L, compression);\
586make_lua_key(L, condition);\
587make_lua_key(L, conditional);\
588make_lua_key(L, conditionalmathskip);\
589make_lua_key(L, connectoroverlapmin);\
590make_lua_key(L, constant);\
591make_lua_key(L, constant_call);\
592make_lua_key(L, container);\
593make_lua_key(L, continue);\
594make_lua_key(L, contributehead);\
595make_lua_key(L, control);\
596make_lua_key(L, convert);\
597make_lua_key(L, correctionskip);\
598make_lua_key(L, cost);\
599make_lua_key(L, count);\
600make_lua_key(L, cramped);\
601make_lua_key(L, crampeddisplay);\
602make_lua_key(L, crampedscript);\
603make_lua_key(L, crampedscriptscript);\
604make_lua_key(L, crampedtext);\
605make_lua_key(L, cs_name);\
606make_lua_key(L, csname);\
607make_lua_key(L, current);\
608make_lua_key(L, data);\
609make_lua_key(L, dbox);\
610make_lua_key(L, deep_frozen_dont_expand);\
611make_lua_key(L, deep_frozen_end_template);\
612make_lua_key(L, deep_frozen_keep_constant);\
613make_lua_key(L, def);\
614make_lua_key(L, deferred);\
615make_lua_key(L, define_char_code);\
616make_lua_key(L, define_family);\
617make_lua_key(L, define_font);\
618make_lua_key(L, define_lua_call);\
619make_lua_key(L, degree);\
620make_lua_key(L, degreevariant);\
621make_lua_key(L, delete);\
622make_lua_key(L, delimited);\
623make_lua_key(L, DelimitedSubFormulaMinHeight);\
624make_lua_key(L, delimiter);\
625make_lua_key(L, delimiter_number);\
626make_lua_key(L, delimiterextendmargin);\
627make_lua_key(L, DelimiterExtendMargin);\
628make_lua_key(L, delimiterover);\
629make_lua_key(L, delimiterovervariant);\
630make_lua_key(L, DelimiterDisplayPercent);\
631make_lua_key(L, DelimiterPercent);\
632make_lua_key(L, delimiterpercent);\
633make_lua_key(L, DelimiterDisplayShortfall);\
634make_lua_key(L, DelimiterShortfall);\
635make_lua_key(L, delimitershortfall);\
636make_lua_key(L, delimiterunder);\
637make_lua_key(L, delimiterundervariant);\
638make_lua_key(L, delta);\
639make_lua_key(L, demerits);\
640make_lua_key(L, denominator);\
641make_lua_key(L, denominatorvariant);\
642make_lua_key(L, depth);\
643make_lua_key(L, depthbefore);\
644make_lua_key(L, depthafter);\
645make_lua_key(L, designsize);\
646make_lua_key(L, dimension);\
647make_lua_key(L, dimension_reference);\
648make_lua_key(L, dir);\
649make_lua_key(L, direct);\
650make_lua_key(L, direction);\
651make_lua_key(L, directory);\
652make_lua_key(L, disc);\
653make_lua_key(L, discpart);\
654make_lua_key(L, discretionary);\
655make_lua_key(L, discretionarypenalty);\
656make_lua_key(L, display);\
657make_lua_key(L, DisplayOperatorMinHeight);\
658make_lua_key(L, displaywidowpenalties);\
659make_lua_key(L, displaywidowpenalty);\
660make_lua_key(L, doffset);\
661make_lua_key(L, doublehyphendemerits);\
662make_lua_key(L, doublesuperscript);\
663make_lua_key(L, emergencyextrastretch);\
664make_lua_key(L, emergencyleftskip);\
665make_lua_key(L, emergencyrightskip);\
666make_lua_key(L, emergencyshrink);\
667make_lua_key(L, emergencystretch);\
668make_lua_key(L, empty);\
669make_lua_key(L, end);\
670make_lua_key(L, endpartokens);\
671make_lua_key(L, end_cs_name);\
672make_lua_key(L, end_file);\
673make_lua_key(L, end_group);\
674make_lua_key(L, end_job);\
675make_lua_key(L, end_line);\
676make_lua_key(L, end_local);\
677make_lua_key(L, end_match);\
678make_lua_key(L, end_paragraph);\
679make_lua_key(L, end_template);\
680make_lua_key(L, endmath);\
681make_lua_key(L, endbrokenmath);\
682make_lua_key(L, equation);\
683make_lua_key(L, equation_number);\
684make_lua_key(L, equationnumber);\
685make_lua_key(L, equationnumberpenalty);\
686make_lua_key(L, escape);\
687make_lua_key(L, etex);\
688make_lua_key(L, exact);\
689make_lua_key(L, exactly);\
690make_lua_key(L, except);\
691make_lua_key(L, exdepth);\
692make_lua_key(L, exheight);\
693make_lua_key(L, expand_after);\
694make_lua_key(L, expandable);\
695make_lua_key(L, expanded);\
696make_lua_key(L, expansion);\
697make_lua_key(L, exhyphenpenalty);\
698make_lua_key(L, explicit);\
699make_lua_key(L, explicit_space);\
700make_lua_key(L, expression);\
701make_lua_key(L, extender);\
702make_lua_key(L, extensible);\
703make_lua_key(L, extra);\
704make_lua_key(L, extrahyphenpenalty);\
705make_lua_key(L, extraattr);\
706make_lua_key(L, extraspace);\
707make_lua_key(L, extrasubprescriptshift);\
708make_lua_key(L, extrasubprescriptspace);\
709make_lua_key(L, extrasubscriptshift);\
710make_lua_key(L, extrasubscriptspace);\
711make_lua_key(L, extrasuperprescriptshift);\
712make_lua_key(L, extrasuperprescriptspace);\
713make_lua_key(L, extrasuperscriptshift);\
714make_lua_key(L, extrasuperscriptspace);\
715make_lua_key(L, fam);\
716make_lua_key(L, fence);\
717make_lua_key(L, fenced);\
718make_lua_key(L, fi);\
719make_lua_key(L, fil);\
720make_lua_key(L, file);\
721make_lua_key(L, fill);\
722make_lua_key(L, filll);\
723make_lua_key(L, finalhyphendemerits);\
724make_lua_key(L, finalpenalty);\
725make_lua_key(L, finishrow);\
726make_lua_key(L, fireup);\
727make_lua_key(L, first);\
728make_lua_key(L, fitnessclasses);\
729make_lua_key(L, fixedboth);\
730make_lua_key(L, fixedbottom);\
731make_lua_key(L, fixedsuperandsubscript);\
732make_lua_key(L, fixedsuperorsubscript);\
733make_lua_key(L, fixedtop);\
734make_lua_key(L, flags);\
735make_lua_key(L, flataccent);\
736make_lua_key(L, FlattenedAccentBaseDepth);\
737make_lua_key(L, flattenedaccentbasedepth);\
738make_lua_key(L, FlattenedAccentBaseHeight);\
739make_lua_key(L, flattenedaccentbaseheight);\
740make_lua_key(L, FlattenedAccentBottomShiftDown);\
741make_lua_key(L, flattenedaccentbottomshiftdown);\
742make_lua_key(L, flattenedaccenttopshiftup);\
743make_lua_key(L, FlattenedAccentTopShiftUp);\
744make_lua_key(L, float);\
745make_lua_key(L, font);\
746make_lua_key(L, font_property);\
747make_lua_key(L, fontkern);\
748make_lua_key(L, fontspec);\
749make_lua_key(L, force);\
750make_lua_key(L, forcerulethickness);\
751make_lua_key(L, fraction);\
752make_lua_key(L, FractionDelimiterDisplayStyleSize);\
753make_lua_key(L, FractionDelimiterSize);\
754make_lua_key(L, fractiondelsize);\
755make_lua_key(L, fractiondenomdown);\
756make_lua_key(L, FractionDenominatorDisplayStyleGapMin);\
757make_lua_key(L, FractionDenominatorDisplayStyleShiftDown);\
758make_lua_key(L, FractionDenominatorGapMin);\
759make_lua_key(L, FractionDenominatorShiftDown);\
760make_lua_key(L, fractiondenomvgap);\
761make_lua_key(L, FractionNumeratorDisplayStyleGapMin);\
762make_lua_key(L, FractionNumeratorDisplayStyleShiftUp);\
763make_lua_key(L, FractionNumeratorGapMin);\
764make_lua_key(L, FractionNumeratorShiftUp);\
765make_lua_key(L, fractionnumup);\
766make_lua_key(L, fractionnumvgap);\
767make_lua_key(L, fractionrule);\
768make_lua_key(L, FractionRuleThickness);\
769make_lua_key(L, fractionvariant);\
770make_lua_key(L, frozen);\
771make_lua_key(L, function);\
772make_lua_key(L, geometry);\
773make_lua_key(L, get_mark);\
774make_lua_key(L, ghost);\
775make_lua_key(L, gleaders);\
776make_lua_key(L, global);\
777make_lua_key(L, glue);\
778make_lua_key(L, glueorder);\
779make_lua_key(L, glueset);\
780make_lua_key(L, gluesign);\
781make_lua_key(L, gluespec);\
782make_lua_key(L, glyph);\
783make_lua_key(L, group);\
784make_lua_key(L, h);\
785make_lua_key(L, halign);\
786make_lua_key(L, hangafter);\
787make_lua_key(L, hangindent);\
788make_lua_key(L, hbox);\
789make_lua_key(L, hdelimiter);\
790make_lua_key(L, head);\
791make_lua_key(L, height);\
792make_lua_key(L, hextensible);\
793make_lua_key(L, hextensiblevariant);\
794make_lua_key(L, hlist);\
795make_lua_key(L, hfactor);\
796make_lua_key(L, hmodepar);\
797make_lua_key(L, hmove);\
798make_lua_key(L, hoffset);\
799make_lua_key(L, holdhead);\
800make_lua_key(L, horizontal);\
801make_lua_key(L, horizontalmathkern);\
802make_lua_key(L, hrule);\
803make_lua_key(L, hsize);\
804make_lua_key(L, hskip);\
805make_lua_key(L, hyphenate);\
806make_lua_key(L, hyphenated);\
807make_lua_key(L, hyphenation);\
808make_lua_key(L, hyphenationmode);\
809make_lua_key(L, hyphenchar);\
810make_lua_key(L, hyphenpenalty);\
811make_lua_key(L, id);\
812make_lua_key(L, identifier);\
813make_lua_key(L, if_test);\
814make_lua_key(L, ifstack);\
815make_lua_key(L, ignore);\
816make_lua_key(L, ignore_something);\
817make_lua_key(L, ignored);\
818make_lua_key(L, image);\
819make_lua_key(L, immediate);\
820make_lua_key(L, immutable);\
821make_lua_key(L, indent);\
822make_lua_key(L, indentskip);\
823make_lua_key(L, index);\
824make_lua_key(L, Info);\
825make_lua_key(L, info);\
826make_lua_key(L, inherited);\
827make_lua_key(L, initialize);\
828make_lua_key(L, inner);\
829make_lua_key(L, innerlocation);\
830make_lua_key(L, innerxoffset);\
831make_lua_key(L, inneryoffset);\
832make_lua_key(L, input);\
833make_lua_key(L, insert);\
834make_lua_key(L, insertheights);\
835make_lua_key(L, insertpenalties);\
836make_lua_key(L, instance);\
837make_lua_key(L, integer);\
838make_lua_key(L, integer_reference);\
839make_lua_key(L, interaction);\
840make_lua_key(L, interlinepenalties);\
841make_lua_key(L, interlinepenalty);\
842make_lua_key(L, intermathskip);\
843make_lua_key(L, internal_attribute);\
844make_lua_key(L, internal_attribute_reference);\
845make_lua_key(L, internal_box_reference);\
846make_lua_key(L, internal_dimension);\
847make_lua_key(L, internal_dimension_reference);\
848make_lua_key(L, internal_glue);\
849make_lua_key(L, internal_glue_reference);\
850make_lua_key(L, internal_integer);\
851make_lua_key(L, internal_integer_reference);\
852make_lua_key(L, internal_muglue);\
853make_lua_key(L, internal_muglue_reference);\
854make_lua_key(L, internal_posit);\
855make_lua_key(L, internal_posit_reference);\
856make_lua_key(L, internal_toks);\
857make_lua_key(L, internal_toks_reference);\
858make_lua_key(L, internaldimension);\
859make_lua_key(L, internalgluespec);\
860make_lua_key(L, internalinteger);\
861make_lua_key(L, internalmugluespec);\
862make_lua_key(L, invalid_char);\
863make_lua_key(L, italic);\
864make_lua_key(L, italic_correction);\
865make_lua_key(L, italiccorrection);\
866make_lua_key(L, iterator_value);\
867make_lua_key(L, keepbase);\
868make_lua_key(L, kern);\
869make_lua_key(L, kerns);\
870make_lua_key(L, language);\
871make_lua_key(L, largechar);\
872make_lua_key(L, largefamily);\
873make_lua_key(L, last);\
874make_lua_key(L, lastinsert);\
875make_lua_key(L, lastlinefit);\
876make_lua_key(L, leader);\
877make_lua_key(L, leaders);\
878make_lua_key(L, leastpagecost);\
879make_lua_key(L, left);\
880make_lua_key(L, left_brace);\
881make_lua_key(L, leftboundary);\
882make_lua_key(L, leftbox);\
883make_lua_key(L, leftboxwidth);\
884make_lua_key(L, leftcorrectionkern);\
885make_lua_key(L, lefthangskip);\
886make_lua_key(L, leftmargin);\
887make_lua_key(L, leftmarginkern);\
888make_lua_key(L, leftmathslackkern);\
889make_lua_key(L, leftprotrusion);\
890make_lua_key(L, leftslack);\
891make_lua_key(L, leftskip);\
892make_lua_key(L, lefttoright);\
893make_lua_key(L, lefttwindemerits);\
894make_lua_key(L, legacy);\
895make_lua_key(L, leftclass);\
896make_lua_key(L, let);\
897make_lua_key(L, letter);\
898make_lua_key(L, level);\
899make_lua_key(L, lhmin);\
900make_lua_key(L, ligature);\
901make_lua_key(L, ligatures);\
902make_lua_key(L, limitabovebgap);\
903make_lua_key(L, limitabovekern);\
904make_lua_key(L, limitabovevgap);\
905make_lua_key(L, limitbelowbgap);\
906make_lua_key(L, limitbelowkern);\
907make_lua_key(L, limitbelowvgap);\
908make_lua_key(L, limits);\
909make_lua_key(L, line);\
910make_lua_key(L, linebreakchecks);\
911make_lua_key(L, linebreakoptional);\
912make_lua_key(L, linebreakpenalty);\
913make_lua_key(L, linedepth);\
914make_lua_key(L, lineheight);\
915make_lua_key(L, linepenalty);\
916make_lua_key(L, lineskip);\
917make_lua_key(L, lineskiplimit);\
918make_lua_key(L, list);\
919make_lua_key(L, lmtxexpression);\
920make_lua_key(L, local);\
921make_lua_key(L, local_box);\
922make_lua_key(L, localbox);\
923make_lua_key(L, localbreak);\
924make_lua_key(L, log);\
925make_lua_key(L, logfile);\
926make_lua_key(L, loopstate);\
927make_lua_key(L, looseness);\
928make_lua_key(L, LowerLimitBaselineDropMin);\
929make_lua_key(L, LowerLimitGapMin);\
930make_lua_key(L, lua);\
931make_lua_key(L, lua_call);\
932make_lua_key(L, lua_function_call);\
933make_lua_key(L, lua_local_call);\
934make_lua_key(L, lua_protected_call);\
935make_lua_key(L, lua_semiprotected_call);\
936make_lua_key(L, lua_value);\
937make_lua_key(L, luatex);\
938make_lua_key(L, macro);\
939make_lua_key(L, mainclass);\
940make_lua_key(L, make_box);\
941make_lua_key(L, mark);\
942make_lua_key(L, match);\
943make_lua_key(L, math);\
944make_lua_key(L, math_accent);\
945make_lua_key(L, math_char_number);\
946make_lua_key(L, math_choice);\
947make_lua_key(L, math_component);\
948make_lua_key(L, math_fence);\
949make_lua_key(L, math_fraction);\
950make_lua_key(L, math_modifier);\
951make_lua_key(L, math_parameter);\
952make_lua_key(L, math_radical);\
953make_lua_key(L, math_script);\
954make_lua_key(L, math_shift);\
955make_lua_key(L, math_shift_cs);\
956make_lua_key(L, math_style);\
957make_lua_key(L, mathchar);\
958make_lua_key(L, mathchoice);\
959make_lua_key(L, mathcomponent);\
960make_lua_key(L, MathConstants);\
961make_lua_key(L, mathcontrol);\
962make_lua_key(L, mathdir);\
963make_lua_key(L, mathdisplay);\
964make_lua_key(L, mathfence);\
965make_lua_key(L, mathfraction);\
966make_lua_key(L, mathinline);\
967make_lua_key(L, mathkern);\
968make_lua_key(L, mathkerns);\
969make_lua_key(L, MathLeading);\
970make_lua_key(L, mathnumber);\
971make_lua_key(L, mathoperator);\
972make_lua_key(L, mathpack);\
973make_lua_key(L, mathpenaltyfactor);\
974make_lua_key(L, mathpostpenalty);\
975make_lua_key(L, mathprepenalty);\
976make_lua_key(L, mathradical);\
977make_lua_key(L, mathshapekern);\
978make_lua_key(L, mathsimple);\
979make_lua_key(L, mathskip);\
980make_lua_key(L, mathspec);\
981make_lua_key(L, mathstack);\
982make_lua_key(L, mathstyle);\
983make_lua_key(L, mathscale);\
984make_lua_key(L, mathbegin);\
985make_lua_key(L, mathend);\
986make_lua_key(L, mathmode);\
987make_lua_key(L, mathflatten);\
988make_lua_key(L, mathmainstyle);\
989make_lua_key(L, mathparentstyle);\
990make_lua_key(L, mathsubformula);\
991make_lua_key(L, mathtext);\
992make_lua_key(L, mathtextchar);\
993make_lua_key(L, medmuskip);\
994make_lua_key(L, message);\
995make_lua_key(L, middle);\
996make_lua_key(L, middlebox);\
997make_lua_key(L, MinConnectorOverlap);\
998make_lua_key(L, mirror);\
999make_lua_key(L, mkern);\
1000make_lua_key(L, mode);\
1001make_lua_key(L, modeline);\
1002make_lua_key(L, modifier);\
1003make_lua_key(L, move);\
1004make_lua_key(L, move_tolerance);\
1005make_lua_key(L, mrule);\
1006make_lua_key(L, mskip);\
1007make_lua_key(L, muglue);\
1008make_lua_key(L, mugluespec);\
1009make_lua_key(L, mutable);\
1010make_lua_key(L, mvl);\
1011make_lua_key(L, name);\
1012make_lua_key(L, nepalty);\
1013make_lua_key(L, nestedlist);\
1014make_lua_key(L, nestingfactor);\
1015make_lua_key(L, new);\
1016make_lua_key(L, next);\
1017make_lua_key(L, nil);\
1018make_lua_key(L, no);\
1019make_lua_key(L, no_expand);\
1020make_lua_key(L, noad);\
1021make_lua_key(L, noadstate);\
1022make_lua_key(L, noalign);\
1023make_lua_key(L, noaligned);\
1024make_lua_key(L, node);\
1025make_lua_key(L, nodelist);\
1026make_lua_key(L, noindent);\
1027make_lua_key(L, NoLimitSubFactor);\
1028make_lua_key(L, nolimitsubfactor);\
1029make_lua_key(L, nolimitsupfactor);\
1030make_lua_key(L, NoLimitSupFactor);\
1031make_lua_key(L, nomath);\
1032make_lua_key(L, none);\
1033make_lua_key(L, normal);\
1034make_lua_key(L, norule);\
1035make_lua_key(L, nucleus);\
1036make_lua_key(L, number);\
1037make_lua_key(L, numerator);\
1038make_lua_key(L, numeratorvariant);\
1039make_lua_key(L, off);\
1040make_lua_key(L, on);\
1041make_lua_key(L, open);\
1042make_lua_key(L, operator);\
1043make_lua_key(L, operatorsize);\
1044make_lua_key(L, optional);\
1045make_lua_key(L, options);\
1046make_lua_key(L, ordinary);\
1047make_lua_key(L, orientation);\
1048make_lua_key(L, original);\
1049make_lua_key(L, orphanlinefactors);\
1050make_lua_key(L, orphanpenalties);\
1051make_lua_key(L, orphanpenalty);\
1052make_lua_key(L, other_char);\
1053make_lua_key(L, outline);\
1054make_lua_key(L, output);\
1055make_lua_key(L, over);\
1056make_lua_key(L, OverbarExtraAscender);\
1057make_lua_key(L, overbarkern);\
1058make_lua_key(L, overbarrule);\
1059make_lua_key(L, OverbarRuleThickness);\
1060make_lua_key(L, OverbarVerticalGap);\
1061make_lua_key(L, overbarvgap);\
1062make_lua_key(L, overdelimiter);\
1063make_lua_key(L, overdelimiterbgap);\
1064make_lua_key(L, overdelimitervariant);\
1065make_lua_key(L, overdelimitervgap);\
1066make_lua_key(L, overlayaccent);\
1067make_lua_key(L, overlayaccentvariant);\
1068make_lua_key(L, overlinevariant);\
1069make_lua_key(L, overloaded);\
1070make_lua_key(L, package);\
1071make_lua_key(L, packing);\
1072make_lua_key(L, page);\
1073make_lua_key(L, page_property);\
1074make_lua_key(L, pagediscardshead);\
1075make_lua_key(L, pagehead);\
1076make_lua_key(L, pageinserthead);\
1077make_lua_key(L, pages);\
1078make_lua_key(L, Pages);\
1079make_lua_key(L, par);\
1080make_lua_key(L, parameter);\
1081make_lua_key(L, parameter_reference);\
1082make_lua_key(L, parameters);\
1083make_lua_key(L, parfillleftskip);\
1084make_lua_key(L, parfillrightskip);\
1085make_lua_key(L, parfillskip);\
1086make_lua_key(L, parindent);\
1087make_lua_key(L, parinitleftskip);\
1088make_lua_key(L, parinitrightskip);\
1089make_lua_key(L, parpasses);\
1090make_lua_key(L, parshape);\
1091make_lua_key(L, parskip);\
1092make_lua_key(L, parts);\
1093make_lua_key(L, partsitalic);\
1094make_lua_key(L, partsorientation);\
1095make_lua_key(L, passes);\
1096make_lua_key(L, passive);\
1097make_lua_key(L, pdfe);\
1098make_lua_key(L, penalty);\
1099make_lua_key(L, permanent);\
1100make_lua_key(L, phantom);\
1101make_lua_key(L, posit);\
1102make_lua_key(L, post);\
1103make_lua_key(L, post_linebreak);\
1104make_lua_key(L, postadjust);\
1105make_lua_key(L, postadjusthead);\
1106make_lua_key(L, postmigrate);\
1107make_lua_key(L, postmigratehead);\
1108make_lua_key(L, pre);\
1109make_lua_key(L, pre_align);\
1110make_lua_key(L, preadjust);\
1111make_lua_key(L, preadjusthead);\
1112make_lua_key(L, preamble);\
1113make_lua_key(L, prebox);\
1114make_lua_key(L, prefix);\
1115make_lua_key(L, premigrate);\
1116make_lua_key(L, premigratehead);\
1117make_lua_key(L, prepostsup);\
1118make_lua_key(L, prepostsub);\
1119make_lua_key(L, preroll);\
1120make_lua_key(L, presub);\
1121make_lua_key(L, presubscriptshiftdistance);\
1122make_lua_key(L, presup);\
1123make_lua_key(L, presuperscriptshiftdistance);\
1124make_lua_key(L, pretolerance);\
1125make_lua_key(L, prev);\
1126make_lua_key(L, prevdepth);\
1127make_lua_key(L, prevgraf);\
1128make_lua_key(L, prime);\
1129make_lua_key(L, PrimeBaselineDropMax);\
1130make_lua_key(L, primeraise);\
1131make_lua_key(L, primeraisecomposed);\
1132make_lua_key(L, PrimeRaiseComposedPercent);\
1133make_lua_key(L, PrimeRaisePercent);\
1134make_lua_key(L, primeshift);\
1135make_lua_key(L, primeshiftdrop);\
1136make_lua_key(L, primeshiftup);\
1137make_lua_key(L, PrimeShiftUp);\
1138make_lua_key(L, PrimeShiftUpCramped);\
1139make_lua_key(L, primespaceafter);\
1140make_lua_key(L, PrimeSpaceAfter);\
1141make_lua_key(L, primevariant);\
1142make_lua_key(L, primewidth);\
1143make_lua_key(L, PrimeWidthPercent);\
1144make_lua_key(L, primitive);\
1145make_lua_key(L, properties);\
1146make_lua_key(L, protected);\
1147make_lua_key(L, protected_call);\
1148make_lua_key(L, protrudechars);\
1149make_lua_key(L, protrusion);\
1150make_lua_key(L, ptr);\
1151make_lua_key(L, punctuation);\
1152make_lua_key(L, quad);\
1153make_lua_key(L, quit);\
1154make_lua_key(L, radical);\
1155make_lua_key(L, radicaldegreeafter);\
1156make_lua_key(L, radicaldegreebefore);\
1157make_lua_key(L, RadicalDegreeBottomRaisePercent);\
1158make_lua_key(L, radicaldegreeraise);\
1159make_lua_key(L, RadicalDisplayStyleVerticalGap);\
1160make_lua_key(L, radicalextensibleafter);\
1161make_lua_key(L, radicalextensiblebefore);\
1162make_lua_key(L, RadicalExtraAscender);\
1163make_lua_key(L, radicalkern);\
1164make_lua_key(L, RadicalKernAfterDegree);\
1165make_lua_key(L, RadicalKernAfterExtensible);\
1166make_lua_key(L, RadicalKernBeforeDegree);\
1167make_lua_key(L, RadicalKernBeforeExtensible);\
1168make_lua_key(L, radicalrule);\
1169make_lua_key(L, RadicalRuleThickness);\
1170make_lua_key(L, radicalvariant);\
1171make_lua_key(L, RadicalVerticalGap);\
1172make_lua_key(L, radicalvgap);\
1173make_lua_key(L, raise);\
1174make_lua_key(L, reader);\
1175make_lua_key(L, register);\
1176make_lua_key(L, register_attribute);\
1177make_lua_key(L, register_attribute_reference);\
1178make_lua_key(L, register_box);\
1179make_lua_key(L, register_box_reference);\
1180make_lua_key(L, register_dimension);\
1181make_lua_key(L, register_dimension_reference);\
1182make_lua_key(L, register_glue);\
1183make_lua_key(L, register_glue_reference);\
1184make_lua_key(L, register_integer);\
1185make_lua_key(L, register_integer_reference);\
1186make_lua_key(L, register_muglue);\
1187make_lua_key(L, register_muglue_reference);\
1188make_lua_key(L, register_posit);\
1189make_lua_key(L, register_posit_reference);\
1190make_lua_key(L, register_toks);\
1191make_lua_key(L, register_toks_reference);\
1192make_lua_key(L, registerdimension);\
1193make_lua_key(L, registergluespec);\
1194make_lua_key(L, registerinteger);\
1195make_lua_key(L, registermugluespec);\
1196make_lua_key(L, regular);\
1197make_lua_key(L, relation);\
1198make_lua_key(L, relax);\
1199make_lua_key(L, remove_item);\
1200make_lua_key(L, repeat);\
1201make_lua_key(L, rpnexpression);\
1202make_lua_key(L, replace);\
1203make_lua_key(L, report);\
1204make_lua_key(L, reserved);\
1205make_lua_key(L, reset);\
1206make_lua_key(L, rhmin);\
1207make_lua_key(L, right);\
1208make_lua_key(L, right_brace);\
1209make_lua_key(L, rightboundary);\
1210make_lua_key(L, rightbox);\
1211make_lua_key(L, rightboxwidth);\
1212make_lua_key(L, rightclass);\
1213make_lua_key(L, rightcorrectionkern);\
1214make_lua_key(L, righthangskip);\
1215make_lua_key(L, rightmargin);\
1216make_lua_key(L, rightmarginkern);\
1217make_lua_key(L, rightmathslackkern);\
1218make_lua_key(L, rightprotrusion);\
1219make_lua_key(L, rightslack);\
1220make_lua_key(L, rightskip);\
1221make_lua_key(L, righttoleft);\
1222make_lua_key(L, righttwindemerits);\
1223make_lua_key(L, root);\
1224make_lua_key(L, rooted);\
1225make_lua_key(L, rule);\
1226make_lua_key(L, rulebasedmathskip);\
1227make_lua_key(L, ruledepth);\
1228make_lua_key(L, ruleheight);\
1229make_lua_key(L, same);\
1230make_lua_key(L, saved);\
1231make_lua_key(L, scale);\
1232make_lua_key(L, script);\
1233make_lua_key(L, scriptkern);\
1234make_lua_key(L, scriptorder);\
1235make_lua_key(L, ScriptPercentScaleDown);\
1236make_lua_key(L, scripts);\
1237make_lua_key(L, scriptscale);\
1238make_lua_key(L, scriptstate);\
1239make_lua_key(L, scriptxscale);\
1240make_lua_key(L, scriptyscale);\
1241make_lua_key(L, scriptweight);\
1242make_lua_key(L, scriptscript);\
1243make_lua_key(L, ScriptScriptPercentScaleDown);\
1244make_lua_key(L, scriptscriptscale);\
1245make_lua_key(L, scriptscriptxscale);\
1246make_lua_key(L, scriptscriptyscale);\
1247make_lua_key(L, scriptscriptweight);\
1248make_lua_key(L, second);\
1249make_lua_key(L, semi_protected_call);\
1250make_lua_key(L, semiprotected);\
1251make_lua_key(L, semisimple);\
1252make_lua_key(L, set);\
1253make_lua_key(L, set_box);\
1254make_lua_key(L, set_font);\
1255make_lua_key(L, sffactor);\
1256make_lua_key(L, sfstretchfactor);\
1257make_lua_key(L, shape);\
1258make_lua_key(L, shapingpenaltiesmode);\
1259make_lua_key(L, shapingpenalty);\
1260make_lua_key(L, shift);\
1261make_lua_key(L, shorthand_def);\
1262make_lua_key(L, shrink);\
1263make_lua_key(L, shrinkorder);\
1264make_lua_key(L, sign);\
1265make_lua_key(L, simple);\
1266make_lua_key(L, single);\
1267make_lua_key(L, singlelinepenalty);\
1268make_lua_key(L, size);\
1269make_lua_key(L, skewchar);\
1270make_lua_key(L, skewed);\
1271make_lua_key(L, SkewedDelimiterTolerance);\
1272make_lua_key(L, skeweddelimitertolerance);\
1273make_lua_key(L, skewedfractionhgap);\
1274make_lua_key(L, SkewedFractionHorizontalGap);\
1275make_lua_key(L, SkewedFractionVerticalGap);\
1276make_lua_key(L, skewedfractionvgap);\
1277make_lua_key(L, skip);\
1278make_lua_key(L, slant);\
1279make_lua_key(L, small);\
1280make_lua_key(L, smallchar);\
1281make_lua_key(L, smaller);\
1282make_lua_key(L, smallfamily);\
1283make_lua_key(L, some_item);\
1284make_lua_key(L, source);\
1285make_lua_key(L, space);\
1286make_lua_key(L, SpaceAfterScript);\
1287make_lua_key(L, spaceafterscript);\
1288make_lua_key(L, spacebeforescript);\
1289make_lua_key(L, spacebetweenscript);\
1290make_lua_key(L, SpaceBeforeScript);\
1291make_lua_key(L, SpaceBetweenScript);\
1292make_lua_key(L, spacefactor);\
1293make_lua_key(L, spacefontkern);\
1294make_lua_key(L, spacer);\
1295make_lua_key(L, spaceshrink);\
1296make_lua_key(L, spaceskip);\
1297make_lua_key(L, spacestretch);\
1298make_lua_key(L, spacing);\
1299make_lua_key(L, span);\
1300make_lua_key(L, spec);\
1301make_lua_key(L, specification);\
1302make_lua_key(L, specificationspec);\
1303make_lua_key(L, specification_reference);\
1304make_lua_key(L, split);\
1305make_lua_key(L, split_insert);\
1306make_lua_key(L, splitbottom);\
1307make_lua_key(L, splitdiscardshead);\
1308make_lua_key(L, splitfirst);\
1309make_lua_key(L, splitkeep);\
1310make_lua_key(L, splitoff);\
1311make_lua_key(L, splittopskip);\
1312make_lua_key(L, stack);\
1313make_lua_key(L, StackBottomDisplayStyleShiftDown);\
1314make_lua_key(L, StackBottomShiftDown);\
1315make_lua_key(L, stackdenomdown);\
1316make_lua_key(L, StackDisplayStyleGapMin);\
1317make_lua_key(L, StackGapMin);\
1318make_lua_key(L, stacknumup);\
1319make_lua_key(L, StackTopDisplayStyleShiftUp);\
1320make_lua_key(L, StackTopShiftUp);\
1321make_lua_key(L, stackvariant);\
1322make_lua_key(L, stackvgap);\
1323make_lua_key(L, start);\
1324make_lua_key(L, state);\
1325make_lua_key(L, step);\
1326make_lua_key(L, stop);\
1327make_lua_key(L, stretch);\
1328make_lua_key(L, stretched);\
1329make_lua_key(L, stretchorder);\
1330make_lua_key(L, StretchStackBottomShiftDown);\
1331make_lua_key(L, StretchStackGapAboveMin);\
1332make_lua_key(L, StretchStackGapBelowMin);\
1333make_lua_key(L, StretchStackTopShiftUp);\
1334make_lua_key(L, string);\
1335make_lua_key(L, strut);\
1336make_lua_key(L, style);\
1337make_lua_key(L, sub);\
1338make_lua_key(L, subbox);\
1339make_lua_key(L, submlist);\
1340make_lua_key(L, subpre);\
1341make_lua_key(L, subscript);\
1342make_lua_key(L, subshift);\
1343make_lua_key(L, SubscriptBaselineDropMin);\
1344make_lua_key(L, subscriptshiftdistance);\
1345make_lua_key(L, SubscriptShiftDown);\
1346make_lua_key(L, SubscriptShiftDownWithSuperscript);\
1347make_lua_key(L, SubscriptTopMax);\
1348make_lua_key(L, SubscriptSnap);\
1349make_lua_key(L, subscriptsnap);\
1350make_lua_key(L, subscriptvariant);\
1351make_lua_key(L, subshiftdown);\
1352make_lua_key(L, subshiftdrop);\
1353make_lua_key(L, substitute);\
1354make_lua_key(L, SubSuperscriptGapMin);\
1355make_lua_key(L, subsupshiftdown);\
1356make_lua_key(L, subsupvgap);\
1357make_lua_key(L, subtopmax);\
1358make_lua_key(L, subtype);\
1359make_lua_key(L, sup);\
1360make_lua_key(L, supbottommin);\
1361make_lua_key(L, superscript);\
1362make_lua_key(L, SuperscriptBaselineDropMax);\
1363make_lua_key(L, SuperscriptBottomMaxWithSubscript);\
1364make_lua_key(L, SuperscriptBottomMin);\
1365make_lua_key(L, superscriptshiftdistance);\
1366make_lua_key(L, SuperscriptShiftUp);\
1367make_lua_key(L, SuperscriptShiftUpCramped);\
1368make_lua_key(L, SuperscriptSnap);\
1369make_lua_key(L, superscriptsnap);\
1370make_lua_key(L, superscriptvariant);\
1371make_lua_key(L, suppre);\
1372make_lua_key(L, supshift);\
1373make_lua_key(L, supshiftdrop);\
1374make_lua_key(L, supshiftup);\
1375make_lua_key(L, supsubbottommax);\
1376make_lua_key(L, surround);\
1377make_lua_key(L, syllable);\
1378make_lua_key(L, tabskip);\
1379make_lua_key(L, tag);\
1380make_lua_key(L, tail);\
1381make_lua_key(L, target);\
1382make_lua_key(L, temp);\
1383make_lua_key(L, temphead);\
1384make_lua_key(L, terminal);\
1385make_lua_key(L, terminal_and_logfile);\
1386make_lua_key(L, tex);\
1387make_lua_key(L, tex_nest);\
1388make_lua_key(L, text);\
1389make_lua_key(L, textcontrol);\
1390make_lua_key(L, textscale);\
1391make_lua_key(L, textxscale);\
1392make_lua_key(L, textyscale);\
1393make_lua_key(L, textweight);\
1394make_lua_key(L, the);\
1395make_lua_key(L, thickmuskip);\
1396make_lua_key(L, thickness);\
1397make_lua_key(L, thinmuskip);\
1398make_lua_key(L, toddlerpenalty);\
1399make_lua_key(L, toddlerpenalties);\
1400make_lua_key(L, tok);\
1401make_lua_key(L, token);\
1402make_lua_key(L, tokenlist);\
1403make_lua_key(L, tolerance);\
1404make_lua_key(L, tolerant);\
1405make_lua_key(L, tolerant_call);\
1406make_lua_key(L, tolerant_protected_call);\
1407make_lua_key(L, tolerant_semi_protected_call);\
1408make_lua_key(L, top);\
1409make_lua_key(L, topaccent);\
1410make_lua_key(L, topaccentvariant);\
1411make_lua_key(L, topanchor);\
1412make_lua_key(L, topleft);\
1413make_lua_key(L, topmargin);\
1414make_lua_key(L, topovershoot);\
1415make_lua_key(L, topright);\
1416make_lua_key(L, topskip);\
1417make_lua_key(L, total);\
1418make_lua_key(L, tracingbalancing);\
1419make_lua_key(L, tracingparagraphs);\
1420make_lua_key(L, tracingpasses);\
1421make_lua_key(L, tracingfitness);\
1422make_lua_key(L, trailer);\
1423make_lua_key(L, Trailer);\
1424make_lua_key(L, triggered);\
1425make_lua_key(L, type);\
1426make_lua_key(L, uchyph);\
1427make_lua_key(L, uleaders);\
1428make_lua_key(L, un_hbox);\
1429make_lua_key(L, un_vbox);\
1430make_lua_key(L, undefined_cs);\
1431make_lua_key(L, under);\
1432make_lua_key(L, UnderbarExtraDescender);\
1433make_lua_key(L, underbarkern);\
1434make_lua_key(L, underbarrule);\
1435make_lua_key(L, UnderbarRuleThickness);\
1436make_lua_key(L, UnderbarVerticalGap);\
1437make_lua_key(L, underbarvgap);\
1438make_lua_key(L, underdelimiter);\
1439make_lua_key(L, underdelimiterbgap);\
1440make_lua_key(L, underdelimitervariant);\
1441make_lua_key(L, underdelimitervgap);\
1442make_lua_key(L, underlinevariant);\
1443make_lua_key(L, unhbox);\
1444make_lua_key(L, unhyphenated);\
1445make_lua_key(L, unit_reference);\
1446make_lua_key(L, unknown);\
1447make_lua_key(L, unset);\
1448make_lua_key(L, untraced);\
1449make_lua_key(L, unvbox);\
1450make_lua_key(L, uppercase);\
1451make_lua_key(L, UpperLimitBaselineRiseMin);\
1452make_lua_key(L, UpperLimitGapMin);\
1453make_lua_key(L, user);\
1454make_lua_key(L, userkern);\
1455make_lua_key(L, userpenalty);\
1456make_lua_key(L, userskip);\
1457make_lua_key(L, v);\
1458make_lua_key(L, vadjust);\
1459make_lua_key(L, valign);\
1460make_lua_key(L, value);\
1461make_lua_key(L, variable);\
1462make_lua_key(L, variant);\
1463make_lua_key(L, vbox);\
1464make_lua_key(L, vcenter);\
1465make_lua_key(L, vdelimiter);\
1466make_lua_key(L, vertical);\
1467make_lua_key(L, verticalmathkern);\
1468make_lua_key(L, vextensible);\
1469make_lua_key(L, vextensiblevariant);\
1470make_lua_key(L, vfactor);\
1471make_lua_key(L, virtual);\
1472make_lua_key(L, vlist);\
1473make_lua_key(L, vmode);\
1474make_lua_key(L, vmodepar);\
1475make_lua_key(L, vmove);\
1476make_lua_key(L, void);\
1477make_lua_key(L, vrule);\
1478make_lua_key(L, vsize);\
1479make_lua_key(L, vskip);\
1480make_lua_key(L, vtop);\
1481make_lua_key(L, whatsit);\
1482make_lua_key(L, widowpenalties);\
1483make_lua_key(L, widowpenalty);\
1484make_lua_key(L, width);\
1485make_lua_key(L, weight);\
1486make_lua_key(L, woffset);\
1487make_lua_key(L, word);\
1488make_lua_key(L, wordpenalty);\
1489make_lua_key(L, wrapup);\
1490make_lua_key(L, xheight);\
1491make_lua_key(L, xleaders);\
1492make_lua_key(L, xoffset);\
1493make_lua_key(L, xray);\
1494make_lua_key(L, xscale);\
1495make_lua_key(L, xspaceskip);\
1496make_lua_key(L, yoffset);\
1497make_lua_key(L, yscale);\
1498make_lua_key(L, zerospaceskip);\
1499make_lua_key_alias(L, empty_string, "");\
1500 \
1501make_lua_key_alias(L, node_instance, NODE_METATABLE_INSTANCE);\
1502make_lua_key_alias(L, node_properties, NODE_PROPERTIES_DIRECT);\
1503make_lua_key_alias(L, node_properties_indirect, NODE_PROPERTIES_INDIRECT);\
1504 \
1505make_lua_key_alias(L, token_instance, TOKEN_METATABLE_INSTANCE);\
1506make_lua_key_alias(L, token_package, TOKEN_METATABLE_PACKAGE);\
1507 \
1508make_lua_key_alias(L, sparse_instance, SPARSE_METATABLE_INSTANCE);\
1509 \
1510make_lua_key_alias(L, pdfe_instance, PDFE_METATABLE_INSTANCE);\
1511make_lua_key_alias(L, pdfe_dictionary_instance, PDFE_METATABLE_DICTIONARY);\
1512make_lua_key_alias(L, pdfe_array_instance, PDFE_METATABLE_ARRAY);\
1513make_lua_key_alias(L, pdfe_stream_instance, PDFE_METATABLE_STREAM);\
1514make_lua_key_alias(L, pdfe_reference_instance, PDFE_METATABLE_REFERENCE);\
1515 \
1516make_lua_key_alias(L, file_handle_instance, LUA_FILEHANDLE);\
1517 \
1518make_lua_key_alias(L, string_buffer_instance, STRING_BUFFER_INSTANCE);\
1519
1520
1521# define declare_metapost_lua_keys(L) \
1522\
1523\
1524make_lua_key(L, color);\
1525make_lua_key(L, curl);\
1526make_lua_key(L, curled);\
1527make_lua_key(L, curved);\
1528make_lua_key(L, curvature);\
1529make_lua_key(L, cycle);\
1530make_lua_key(L, dash);\
1531make_lua_key(L, dashes);\
1532\
1533make_lua_key(L, direction_x);\
1534make_lua_key(L, direction_y);\
1535make_lua_key(L, elliptical);\
1536make_lua_key(L, end_cycle);\
1537make_lua_key(L, endpoint);\
1538make_lua_key(L, error);\
1539make_lua_key(L, error_line);\
1540\
1541make_lua_key(L, fig);\
1542\
1543make_lua_key(L, find_file);\
1544\
1545make_lua_key(L, given);\
1546make_lua_key(L, halt_on_error);\
1547make_lua_key(L, hash);\
1548\
1549make_lua_key(L, htap);\
1550\
1551make_lua_key(L, internals);\
1552make_lua_key(L, job_name);\
1553make_lua_key(L, knots);\
1554make_lua_key(L, left_curl);\
1555make_lua_key(L, left_tension);\
1556make_lua_key(L, left_type);\
1557make_lua_key(L, left_x);\
1558make_lua_key(L, left_y);\
1559make_lua_key(L, linecap);\
1560make_lua_key(L, linejoin);\
1561make_lua_key(L, make_text);\
1562make_lua_key(L, math_mode);\
1563make_lua_key(L, memory);\
1564make_lua_key(L, miterlimit);\
1565make_lua_key(L, nodes);\
1566make_lua_key(L, offset);\
1567\
1568make_lua_key(L, open_file);\
1569\
1570make_lua_key(L, pairs);\
1571make_lua_key(L, path);\
1572make_lua_key(L, pen);\
1573make_lua_key(L, postscript);\
1574make_lua_key(L, prescript);\
1575make_lua_key(L, primary);\
1576make_lua_key(L, print_line);\
1577make_lua_key(L, random_seed);\
1578\
1579make_lua_key(L, restore);\
1580make_lua_key(L, right_curl);\
1581make_lua_key(L, right_tension);\
1582make_lua_key(L, right_type);\
1583make_lua_key(L, right_x);\
1584make_lua_key(L, right_y);\
1585make_lua_key(L, run_error);\
1586make_lua_key(L, run_internal);\
1587make_lua_key(L, run_logger);\
1588make_lua_key(L, run_overload);\
1589make_lua_key(L, run_script);\
1590make_lua_key(L, run_warning);\
1591make_lua_key(L, rx);\
1592make_lua_key(L, ry);\
1593make_lua_key(L, save);\
1594make_lua_key(L, secondary);\
1595make_lua_key(L, show_mode);\
1596make_lua_key(L, stacking);\
1597make_lua_key(L, start_bounds);\
1598make_lua_key(L, start_clip);\
1599make_lua_key(L, start_group);\
1600make_lua_key(L, status);\
1601make_lua_key(L, stop_bounds);\
1602make_lua_key(L, stop_clip);\
1603make_lua_key(L, stop_group);\
1604make_lua_key(L, strings);\
1605make_lua_key(L, sx);\
1606make_lua_key(L, sy);\
1607make_lua_key(L, symbols);\
1608make_lua_key(L, tertiary);\
1609\
1610make_lua_key(L, text_mode);\
1611make_lua_key(L, tokens);\
1612make_lua_key(L, transform);\
1613make_lua_key(L, tx);\
1614make_lua_key(L, ty);\
1615\
1616make_lua_key(L, utf8_mode);\
1617make_lua_key(L, warning);\
1618\
1619make_lua_key(L, writer);\
1620make_lua_key(L, x_coord);\
1621make_lua_key(L, y_coord);\
1622\
1623make_lua_key_alias(L, mplib_instance, MP_METATABLE_INSTANCE);\
1624make_lua_key_alias(L, mplib_figure, MP_METATABLE_FIGURE);\
1625make_lua_key_alias(L, mplib_object, MP_METATABLE_OBJECT);\
1626
1627
1628
1631
1632typedef struct lmt_keys {
1633# undef make_lua_key
1634# undef make_lua_key_alias
1635# define make_lua_key make_lua_key_ptr
1636# define make_lua_key_alias make_lua_key_ptr_alias
1637declare_shared_lua_keys(NULL)
1638declare_metapost_lua_keys(NULL)
1639# undef make_lua_key
1640# undef make_lua_key_alias
1641# define make_lua_key make_lua_key_idx
1642# define make_lua_key_alias make_lua_key_idx_alias
1643declare_shared_lua_keys(NULL)
1644declare_metapost_lua_keys(NULL)
1645# undef make_lua_key
1646# undef make_lua_key_alias
1647} lmt_keys_info ;
1648
1649extern lmt_keys_info lmt_keys;
1650
1651# define make_lua_key init_lua_key
1652# define make_lua_key_alias init_lua_key_alias
1653
1654# define lmt_initialize_shared_keys declare_shared_lua_keys
1655# define lmt_initialize_metapost_keys declare_metapost_lua_keys
1656
1657
1665
1666
1667
1668
1669# define lmt_rounded(d) (lua_Integer) (llround(d))
1670# define lmt_roundedfloat(f) (lua_Integer) (llround((double) f))
1671
1672# define lmt_tolong(L,i) (long) lua_tointeger(L,i)
1673# define lmt_checklong(L,i) (long) luaL_checkinteger(L,i)
1674# define lmt_optlong(L,i,j) (long) luaL_optinteger(L,i,j)
1675
1676# define lmt_tointeger(L,i) (int) lua_tointeger(L,i)
1677# define lmt_checkinteger(L,i) (int) luaL_checkinteger(L,i)
1678# define lmt_optinteger(L,i,j) (int) luaL_optinteger(L,i,j)
1679
1680# define lmt_tounsigned(L,i) (unsigned int) lua_tointeger(L,i)
1681# define lmt_checkinteger(L,i) (int) luaL_checkinteger(L,i)
1682# define lmt_optunsigned(L,i,j) (unsigned int) luaL_optinteger(L,i,j)
1683
1684# define lmt_tosizet(L,i) (size_t) lua_tointeger(L,i)
1685# define lmt_checksizet(L,i) (size_t) luaL_checkinteger(L,i)
1686# define lmt_optsizet(L,i,j) (size_t) luaL_optinteger(L,i,j)
1687
1688# define lmt_tohalfword(L,i) (halfword) lua_tointeger(L,i)
1689# define lmt_checkhalfword(L,i) (halfword) luaL_checkinteger(L,i)
1690# define lmt_opthalfword(L,i,j) (halfword) luaL_optinteger(L,i,j)
1691
1692# define lmt_tofullword(L,i) (fullword) lua_tointeger(L,i)
1693# define lmt_checkfullword(L,i) (fullword) luaL_checkinteger(L,i)
1694# define lmt_optfullword(L,i,j) (fullword) luaL_optinteger(L,i,j)
1695
1696# define lmt_toscaled(L,i) (scaled) lua_tointeger(L,i)
1697# define lmt_checkscaled(L,i) (scaled) luaL_checkinteger(L,i)
1698# define lmt_optscaled(L,i,j) (scaled) luaL_optinteger(L,i,j)
1699
1700# define lmt_toquarterword(L,i) (quarterword) lua_tointeger(L,i)
1701# define lmt_checkquarterword(L,i) (quarterword) luaL_checkinteger(L,i)
1702# define lmt_optquarterword(L,i,j) (quarterword) luaL_optinteger(L,i,j)
1703
1704# define lmt_tosingleword(L,i) (singleword) lua_tointeger(L,i)
1705# define lmt_checksingleword(L,i) (singleword) luaL_checkinteger(L,i)
1706# define lmt_optsingleword(L,i,j) (singleword) luaL_optinteger(L,i,j)
1707
1708# undef lround
1709# include <math.h>
1710
1711static inline int lmt_roundnumber(lua_State *L, int i)
1712{
1713 double n = lua_tonumber(L, i);
1714 return n == 0.0 ? 0 : lround(n);
1715}
1716
1717static inline unsigned int lmt_uroundnumber(lua_State *L, int i)
1718{
1719 double n = lua_tonumber(L, i);
1720 return n == 0.0 ? 0 : (unsigned int) lround(n);
1721}
1722
1723static inline int lmt_optroundnumber(lua_State *L, int i, int dflt)
1724{
1725 double n = luaL_optnumber(L, i, dflt);
1726 return n == 0.0 ? 0 : lround(n);
1727}
1728
1729static inline int lmt_opturoundnumber(lua_State *L, int i, int dflt)
1730{
1731 double n = luaL_optnumber(L, i, dflt);
1732 return n == 0.0 ? 0 : (unsigned int) lround(n);
1733}
1734
1735static inline double lmt_number_from_table(lua_State *L, int i, int j, lua_Number d)
1736{
1737 double n;
1738 lua_rawgeti(L, i, j);
1739 n = luaL_optnumber(L, -1, d);
1740 lua_pop(L, 1);
1741 return n;
1742}
1743
1744extern void lmt_initialize_interface(void);
1745
1746# define lmt_toroundnumber lmt_roundnumber
1747# define lmt_touroundnumber lmt_uroundnumber
1748
1749static inline void lua_set_string_by_key(lua_State *L, const char *a, const char *b)
1750{
1751 lua_pushstring(L, b ? b : "");
1752 lua_setfield(L, -2, a);
1753}
1754
1755static inline void lua_set_string_by_index(lua_State *L, lua_Integer a, const char *b)
1756{
1757 lua_pushstring(L, b ? b : "");
1758 lua_rawseti(L, -2, a);
1759}
1760
1761static inline void lua_set_integer_by_key(lua_State *L, const char *a, int b)
1762{
1763 lua_pushinteger(L, b);
1764 lua_setfield(L, -2, a);
1765}
1766
1767static inline void lua_set_integer_by_index(lua_State *L, int a, int b)
1768{
1769 lua_pushinteger(L, b);
1770 lua_rawseti(L, -2, a);
1771}
1772
1773static inline void lua_set_number_by_key(lua_State *L, const char *a, double b)
1774{
1775 lua_pushnumber(L, b);
1776 lua_setfield(L, -2, a);
1777}
1778
1779static inline void lua_set_number_by_index(lua_State *L, int a, double b)
1780{
1781 lua_pushnumber(L, b);
1782 lua_rawseti(L, -2, a);
1783}
1784
1785static inline void lua_set_cardinal_by_key(lua_State *L, const char *a, unsigned b)
1786{
1787 lua_pushinteger(L, b);
1788 lua_setfield(L, -2, a);
1789}
1790
1791static inline void lua_set_cardinal_by_index(lua_State *L, int a, unsigned b)
1792{
1793 lua_pushinteger(L, b);
1794 lua_rawseti(L, -2, a);
1795}
1796
1797static inline void lua_set_boolean_by_key(lua_State *L, const char *a, int b)
1798{
1799 lua_pushboolean(L, b);
1800 lua_setfield(L, -2, a);
1801}
1802
1803static inline void lua_set_boolean_by_index(lua_State *L, int a, int b)
1804{
1805 lua_pushboolean(L, b);
1806 lua_rawseti(L, -2, a);
1807}
1808
1809static inline void lmt_string_to_buffer(const char *str)
1810{
1811 luaL_addstring(lmt_lua_state.used_buffer, str);
1812}
1813
1814static inline void lmt_char_to_buffer(char c)
1815{
1816 luaL_addchar(lmt_lua_state.used_buffer, c);
1817}
1818
1819static inline void lmt_newline_to_buffer(void)
1820{
1821 luaL_addchar(lmt_lua_state.used_buffer, '\n');
1822}
1823
1824
1825
1826# if (1)
1827
1828 # define set_numeric_field_by_index(target,name,dflt) \
1829 lua_push_key(name); \
1830 target = (lua_rawget(L, -2) == LUA_TNUMBER) ? lmt_roundnumber(L, -1) : dflt ; \
1831 lua_pop(L, 1);
1832
1833# else
1834
1835 # define set_numeric_field_by_index(target,name,dflt) \
1836 lua_push_key(name); \
1837 if (lua_rawget(L, -2) == LUA_TNUMBER) { \
1838 target = lmt_roundnumber(L, -1); \
1839 lua_pop(L, 1); \
1840 lua_push_key(name); \
1841 lua_push_integer(L, target); \
1842 lua_rawset(L, -3); \
1843 } else { \
1844 target = dflt ; \
1845 lua_pop(L, 1); \
1846 }
1847
1848# endif
1849
1850# define set_boolean_field_by_index(target,name,dflt) \
1851 lua_push_key(name); \
1852 target = (lua_rawget(L, -2) == LUA_TBOOLEAN) ? lua_toboolean(L, -1) : dflt ; \
1853 lua_pop(L, 1);
1854
1855# define set_string_field_by_index(target,name) \
1856 lua_push_key(name); \
1857 target = (lua_rawget(L, -2) == LUA_TSTRING) ? lua_tostring(L, -1) : NULL ; \
1858 lua_pop(L, 1);
1859
1860# define set_any_field_by_index(target,name) \
1861 lua_push_key(name); \
1862 target = (lua_rawget(L, -2) != LUA_TNIL); \
1863 lua_pop(L, 1);
1864
1865
1866# endif
1867 |