lmtinterface.c /size: 42 Kb    last modification: 2025-02-21 11:03
1/*
2    See license.txt in the root of this project.
3*/
4
5/*tex
6
7    There isn't much here because most happens in the header file. Here we also set up the
8    environment in which we run, which depends in the operating system used.
9
10*/
11
12# include "luametatex.h"
13
14lua_state_info lmt_lua_state = {
15    .lua_instance            = NULL,
16    .used_bytes              = 0,
17    .used_bytes_max          = 0,
18    .function_table_id       = 0,
19    .function_callback_count = 0,
20    .value_callback_count    = 0,
21    .bytecode_callback_count = 0,
22    .local_callback_count    = 0,
23    .saved_callback_count    = 0,
24    .file_callback_count     = 0,
25    .direct_callback_count   = 0,
26    .message_callback_count  = 0,
27    .function_table_size     = 0,
28    .bytecode_bytes          = 0,
29    .bytecode_max            = 0,
30    .version_number          = (int) LUA_VERSION_NUM,
31    .release_number          = (int) LUA_VERSION_RELEASE_NUM,
32    .used_buffer             = NULL,
33    .integer_size            = sizeof(lua_Integer),
34};
35
36/*tex
37    Some more can move here, or we can move some to modules instead. It's a very stepwise
38    process because things need to keep running. We only have fast accessors for strings 
39    that we use in the \LUA\ interface. 
40*/
41
42lmt_keys_info lmt_keys;
43
44lmt_interface_info lmt_interface = {
45    .pack_type_values          = NULL,
46    .group_code_values         = NULL,
47    .par_context_values        = NULL,
48    .par_trigger_values        = NULL,
49    .par_mode_values           = NULL,
50    .math_style_name_values    = NULL,
51    .math_style_variant_values = NULL,
52    .lua_function_values       = NULL,
53    .direction_values          = NULL,
54    .node_fill_values          = NULL,
55    .page_contribute_values    = NULL,
56    .math_style_values         = NULL,
57    .math_parameter_values     = NULL,
58    .field_type_values         = NULL,
59    .node_data                 = NULL,
60    .par_data                  = NULL, 
61    .command_names             = NULL,
62} ;
63
64value_info *lmt_aux_allocate_value_info(size_t last)
65{
66    value_info *v = lmt_memory_calloc(last + 2, sizeof(value_info));
67    set_value_entry_nop(v, last + 1);
68    return v;
69}
70
71void lmt_initialize_interface(void)
72{
73    lmt_interface.pack_type_values = lmt_aux_allocate_value_info(packing_adapted);
74
75    # define set_pack_type_value(n,k) lmt_interface.pack_type_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
76
77    set_pack_type_value(packing_exactly,    exactly);
78    set_pack_type_value(packing_additional, additional);
79    set_pack_type_value(packing_expanded,   expanded);
80    set_pack_type_value(packing_substitute, substitute);
81    set_pack_type_value(packing_adapted,    adapted);
82
83    lmt_interface.group_code_values = lmt_aux_allocate_value_info(lua_group);
84
85    # define set_group_code_value(n,k) lmt_interface.group_code_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
86
87    set_group_code_value(bottom_level_group,   bottomlevel);
88    set_group_code_value(simple_group,         simple);
89    set_group_code_value(hbox_group,           hbox);
90    set_group_code_value(adjusted_hbox_group,  adjustedhbox);
91    set_group_code_value(vbox_group,           vbox);
92    set_group_code_value(vtop_group,           vtop);
93    set_group_code_value(dbox_group,           dbox);
94    set_group_code_value(align_group,          align);
95    set_group_code_value(no_align_group,       noalign);
96    set_group_code_value(output_group,         output);
97    set_group_code_value(math_group,           mathsubformula);
98    set_group_code_value(math_component_group, mathcomponent);
99    set_group_code_value(math_stack_group,     mathstack);
100    set_group_code_value(discretionary_group,  discretionary);
101    set_group_code_value(insert_group,         insert);
102    set_group_code_value(vadjust_group,        vadjust);
103    set_group_code_value(vcenter_group,        vcenter);
104    set_group_code_value(math_fraction_group,  mathfraction);
105    set_group_code_value(math_radical_group,   mathradical);
106    set_group_code_value(math_operator_group,  mathoperator);
107    set_group_code_value(math_choice_group,    mathchoice);
108    set_group_code_value(also_simple_group,    alsosimple);
109    set_group_code_value(semi_simple_group,    semisimple);
110    set_group_code_value(math_simple_group,    mathsimple);
111    set_group_code_value(math_inline_group,    mathinline);
112    set_group_code_value(math_display_group,   mathdisplay);
113    set_group_code_value(math_number_group,    mathnumber);
114    set_group_code_value(math_fence_group,     mathfence);
115    set_group_code_value(local_box_group,      localbox);
116    set_group_code_value(split_off_group,      splitoff);
117    set_group_code_value(split_keep_group,     splitkeep);
118    set_group_code_value(preamble_group,       preamble);
119    set_group_code_value(align_set_group,      alignset);
120    set_group_code_value(finish_row_group,     finishrow);
121    set_group_code_value(lua_group,            lua);
122
123    lmt_interface.par_context_values = lmt_aux_allocate_value_info(reset_par_context);
124
125    # define set_par_context_value(n,k) lmt_interface.par_context_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
126
127    set_par_context_value(normal_par_context,      normal);
128    set_par_context_value(vmode_par_context,       vmode);
129    set_par_context_value(vbox_par_context,        vbox);
130    set_par_context_value(vtop_par_context,        vtop);
131    set_par_context_value(dbox_par_context,        dbox);
132    set_par_context_value(vcenter_par_context,     vcenter);
133    set_par_context_value(vadjust_par_context,     vadjust);
134    set_par_context_value(insert_par_context,      insert);
135    set_par_context_value(output_par_context,      output);
136    set_par_context_value(align_par_context,       align);
137    set_par_context_value(no_align_par_context,    noalign);
138    set_par_context_value(span_par_context,        span);
139    set_par_context_value(math_par_context,        math);
140    set_par_context_value(lua_par_context,         lua);
141    set_par_context_value(reset_par_context,       reset);
142
143    lmt_interface.page_context_values = lmt_aux_allocate_value_info(triggered_page_context);
144
145    # define set_page_context_value(n,k) lmt_interface.page_context_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
146
147    set_page_context_value(box_page_context,             box);
148    set_page_context_value(end_page_context,             end);
149    set_page_context_value(vadjust_page_context,         vadjust);
150    set_page_context_value(penalty_page_context,         penalty);
151    set_page_context_value(boundary_page_context,        boundary);
152    set_page_context_value(insert_page_context,          insert);
153    set_page_context_value(hmode_par_page_context,       hmodepar);
154    set_page_context_value(vmode_par_page_context,       vmodepar);
155    set_page_context_value(begin_paragraph_page_context, beginparagraph);
156    set_page_context_value(before_display_page_context,  beforedisplay);
157    set_page_context_value(after_display_page_context,   afterdisplay);
158    set_page_context_value(after_output_page_context,    afteroutput);
159    set_page_context_value(alignment_page_context,       alignment);
160    set_page_context_value(triggered_page_context,       triggered);
161
162    lmt_interface.append_line_context_values = lmt_aux_allocate_value_info(post_migrate_append_line_context);
163
164    # define set_append_line_context_value(n,k) lmt_interface.append_line_context_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
165
166    set_append_line_context_value(box_append_line_context,          box);
167    set_append_line_context_value(pre_box_append_line_context,      prebox);
168    set_append_line_context_value(pre_adjust_append_line_context,   preadjust);
169    set_append_line_context_value(post_adjust_append_line_context,  postadjust);
170    set_append_line_context_value(pre_migrate_append_line_context,  premigrate);
171    set_append_line_context_value(post_migrate_append_line_context, postmigrate);
172
173    lmt_interface.alignment_context_values = lmt_aux_allocate_value_info(wrapup_pass_alignment_context);
174
175    # define set_alignment_context_value(n,k) lmt_interface.alignment_context_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
176
177    set_alignment_context_value(preamble_pass_alignment_context, preamble);
178    set_alignment_context_value(preroll_pass_alignment_context,  preroll);
179    set_alignment_context_value(package_pass_alignment_context,  package);
180    set_alignment_context_value(wrapup_pass_alignment_context,   wrapup);
181
182    lmt_interface.line_break_context_values = lmt_aux_allocate_value_info(wrapup_line_break_context);
183
184    # define set_break_context_value(n,k) lmt_interface.line_break_context_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
185
186    set_break_context_value(initialize_line_break_context, initialize);
187    set_break_context_value(start_line_break_context,      start);
188    set_break_context_value(list_line_break_context,       list); 
189    set_break_context_value(stop_line_break_context,       stop);
190    set_break_context_value(collect_line_break_context,    collect);
191    set_break_context_value(line_line_break_context,       line);
192    set_break_context_value(delete_line_break_context,     delete);
193    set_break_context_value(report_line_break_context,     report); 
194    set_break_context_value(wrapup_line_break_context,     wrapup);
195
196    lmt_interface.build_context_values = lmt_aux_allocate_value_info(wrapup_show_build_context);
197
198    # define set_build_context_value(n,k) lmt_interface.build_context_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
199
200    set_build_context_value(initialize_show_build_context, initialize);
201    set_build_context_value(step_show_build_context,       step);
202    set_build_context_value(check_show_build_context,      check);
203    set_build_context_value(skip_show_build_context,       skip);
204    set_build_context_value(move_show_build_context,       move);
205    set_build_context_value(fireup_show_build_context,     fireup);
206    set_build_context_value(wrapup_show_build_context,     wrapup);
207
208    lmt_interface.vsplit_context_values = lmt_aux_allocate_value_info(wrapup_show_vsplit_context);
209
210    # define set_vsplit_context_value(n,k) lmt_interface.vsplit_context_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
211
212    set_vsplit_context_value(initialize_show_vsplit_context, initialize);
213    set_vsplit_context_value(continue_show_vsplit_context,   continue);
214    set_vsplit_context_value(check_show_vsplit_context,      check);
215    set_vsplit_context_value(quit_show_vsplit_context,       quit);
216    set_vsplit_context_value(wrapup_show_vsplit_context,     wrapup);
217
218
219    lmt_interface.par_trigger_values = lmt_aux_allocate_value_info(vrule_char_par_trigger);
220
221    # define set_par_trigger_value(n,k) lmt_interface.par_trigger_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
222
223    set_par_trigger_value(normal_par_trigger,       normal);
224    set_par_trigger_value(force_par_trigger,        force);
225    set_par_trigger_value(indent_par_trigger,       indent);
226    set_par_trigger_value(no_indent_par_trigger,    noindent);
227    set_par_trigger_value(math_char_par_trigger,    mathchar);
228    set_par_trigger_value(char_par_trigger,         char);
229    set_par_trigger_value(boundary_par_trigger,     boundary);
230    set_par_trigger_value(space_par_trigger,        space);
231    set_par_trigger_value(math_par_trigger,         math);
232    set_par_trigger_value(kern_par_trigger,         kern);
233    set_par_trigger_value(hskip_par_trigger,        hskip);
234    set_par_trigger_value(un_hbox_char_par_trigger, unhbox);
235    set_par_trigger_value(valign_char_par_trigger,  valign);
236    set_par_trigger_value(vrule_char_par_trigger,   vrule);
237
238    lmt_interface.par_mode_values = lmt_aux_allocate_value_info(math_par_subtype);
239
240    # define set_par_mode_value(n,k) lmt_interface.par_mode_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
241
242    set_par_mode_value(vmode_par_par_subtype, vmodepar);
243    set_par_mode_value(local_box_par_subtype, localbox);
244    set_par_mode_value(hmode_par_par_subtype, hmodepar);
245    set_par_mode_value(parameter_par_subtype, parameter);
246    set_par_mode_value(math_par_subtype,      math);
247
248    lmt_interface.math_style_name_values = lmt_aux_allocate_value_info(cramped_script_script_style);
249
250    # define set_math_style_name_value(n,k) lmt_interface.math_style_name_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
251
252    set_math_style_name_value(display_style,               display);
253    set_math_style_name_value(cramped_display_style,       crampeddisplay);
254    set_math_style_name_value(text_style,                  text);
255    set_math_style_name_value(cramped_text_style,          crampedtext);
256    set_math_style_name_value(script_style,                script);
257    set_math_style_name_value(cramped_script_style,        crampedscript);
258    set_math_style_name_value(script_script_style,         scriptscript);
259    set_math_style_name_value(cramped_script_script_style, crampedscriptscript);
260
261    lmt_interface.math_style_variant_values = lmt_aux_allocate_value_info(math_double_superscript_variant);
262
263    # define set_math_style_variant_value(n,k) lmt_interface.math_style_variant_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
264
265    set_math_style_variant_value(math_normal_style_variant,       normal);
266    set_math_style_variant_value(math_cramped_style_variant,      cramped);
267    set_math_style_variant_value(math_subscript_style_variant,    subscript);
268    set_math_style_variant_value(math_superscript_style_variant,  superscript);
269    set_math_style_variant_value(math_small_style_variant,        small);
270    set_math_style_variant_value(math_smaller_style_variant,      smaller);
271    set_math_style_variant_value(math_numerator_style_variant,    numerator);
272    set_math_style_variant_value(math_denominator_style_variant,  denominator);
273    set_math_style_variant_value(math_double_superscript_variant, doublesuperscript);
274
275    lmt_interface.lua_function_values = lmt_aux_allocate_value_info(lua_value_conditional_code);
276
277    # define set_lua_function_value(n,k) lmt_interface.lua_function_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
278
279    set_lua_function_value(lua_value_none_code,        none);
280    set_lua_function_value(lua_value_integer_code,     integer);
281    set_lua_function_value(lua_value_cardinal_code,    cardinal);
282    set_lua_function_value(lua_value_dimension_code,   dimension);
283    set_lua_function_value(lua_value_skip_code,        skip);
284    set_lua_function_value(lua_value_boolean_code,     boolean);
285    set_lua_function_value(lua_value_float_code,       float);
286    set_lua_function_value(lua_value_string_code,      string);
287    set_lua_function_value(lua_value_node_code,        node);
288    set_lua_function_value(lua_value_direct_code,      direct);
289    set_lua_function_value(lua_value_conditional_code, conditional);
290
291    lmt_interface.direction_values = lmt_aux_allocate_value_info(dir_righttoleft);
292
293    # define set_direction_value(n,k) lmt_interface.direction_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
294
295    set_direction_value(dir_lefttoright, lefttoright);
296    set_direction_value(dir_righttoleft, righttoleft);
297
298    lmt_interface.field_type_values = lmt_aux_allocate_value_info(attribute_field);
299
300    # define set_field_type_value(n,k) lmt_interface.field_type_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
301
302    set_field_type_value(nil_field,            nil);
303    set_field_type_value(integer_field,        integer);
304    set_field_type_value(dimension_field,      dimension);
305    set_field_type_value(glue_field,           glue);
306    set_field_type_value(number_field,         number);
307    set_field_type_value(string_field,         string);
308    set_field_type_value(boolean_field,        boolean);
309    set_field_type_value(function_field,       function);
310    set_field_type_value(node_field,           node);
311    set_field_type_value(node_list_field,      nodelist);
312    set_field_type_value(token_field,          token);
313    set_field_type_value(token_list_field,     tokenlist);
314    set_field_type_value(attribute_field,      attribute);
315
316    lmt_interface.node_fill_values = lmt_aux_allocate_value_info(filll_glue_order);
317
318    # define set_node_fill_value(n,k) lmt_interface.node_fill_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
319
320    set_node_fill_value(normal_glue_order, normal);
321    set_node_fill_value(fi_glue_order,     fi);
322    set_node_fill_value(fil_glue_order,    fil);
323    set_node_fill_value(fill_glue_order,   fill);
324    set_node_fill_value(filll_glue_order,  filll);
325
326    lmt_interface.page_contribute_values = lmt_aux_allocate_value_info(contribute_rule);
327
328    # define set_page_contribute_value(n,k) lmt_interface.page_contribute_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
329
330    set_page_contribute_value(contribute_nothing, empty);
331    set_page_contribute_value(contribute_insert,  insert);
332    set_page_contribute_value(contribute_box,     box);
333    set_page_contribute_value(contribute_rule,    rule);
334
335    lmt_interface.math_style_values = lmt_aux_allocate_value_info(cramped_script_script_style);
336
337    # define set_math_style_value(n,k) lmt_interface.math_style_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
338
339    set_math_style_value(display_style,               display);
340    set_math_style_value(cramped_display_style,       crampeddisplay);
341    set_math_style_value(text_style,                  text);
342    set_math_style_value(cramped_text_style,          crampedtext);
343    set_math_style_value(script_style,                script);
344    set_math_style_value(cramped_script_style,        crampedscript);
345    set_math_style_value(script_script_style,         scriptscript);
346    set_math_style_value(cramped_script_script_style, crampedscriptscript);
347
348    lmt_interface.math_indirect_values = lmt_aux_allocate_value_info(last_math_indirect);
349
350    # define set_math_indirect_value(n,k) lmt_interface.math_indirect_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .id = n }
351
352    set_math_indirect_value(indirect_math_unset,               unset);
353    set_math_indirect_value(indirect_math_regular,             regular);
354    set_math_indirect_value(indirect_math_integer,             integer);
355    set_math_indirect_value(indirect_math_dimension,           dimension);
356    set_math_indirect_value(indirect_math_gluespec,            gluespec);
357    set_math_indirect_value(indirect_math_mugluespec,          mugluespec);
358    set_math_indirect_value(indirect_math_register_integer,    registerinteger);
359    set_math_indirect_value(indirect_math_register_dimension,  registerdimension);
360    set_math_indirect_value(indirect_math_register_gluespec,   registergluespec);
361    set_math_indirect_value(indirect_math_register_mugluespec, registermugluespec);
362    set_math_indirect_value(indirect_math_internal_integer,    internalinteger);
363    set_math_indirect_value(indirect_math_internal_dimension,  internaldimension);
364    set_math_indirect_value(indirect_math_internal_dimension,  internalgluespec);
365    set_math_indirect_value(indirect_math_internal_mugluespec, internalmugluespec);
366
367    lmt_interface.math_parameter_values = lmt_aux_allocate_value_info(last_math_parameter);
368
369    # define set_math_parameter_value(n,t,k) lmt_interface.math_parameter_values[n] = (value_info) { .lua = lua_key_index(k), .name = lua_key(k), .type = t }
370
371    set_math_parameter_value(math_parameter_quad,                             math_dimension_parameter, quad);
372    set_math_parameter_value(math_parameter_exheight,                         math_dimension_parameter, exheight);
373    set_math_parameter_value(math_parameter_axis,                             math_dimension_parameter, axis);
374    set_math_parameter_value(math_parameter_accent_base_height,               math_dimension_parameter, accentbaseheight);
375    set_math_parameter_value(math_parameter_accent_base_depth,                math_dimension_parameter, accentbasedepth);
376    set_math_parameter_value(math_parameter_flattened_accent_base_height,     math_dimension_parameter, flattenedaccentbaseheight);
377    set_math_parameter_value(math_parameter_flattened_accent_base_depth,      math_dimension_parameter, flattenedaccentbasedepth);
378    set_math_parameter_value(math_parameter_x_scale,                          math_integer_parameter,   xscale);
379    set_math_parameter_value(math_parameter_y_scale,                          math_integer_parameter,   yscale);
380    set_math_parameter_value(math_parameter_operator_size,                    math_dimension_parameter, operatorsize);
381    set_math_parameter_value(math_parameter_overbar_kern,                     math_dimension_parameter, overbarkern);
382    set_math_parameter_value(math_parameter_overbar_rule,                     math_dimension_parameter, overbarrule);
383    set_math_parameter_value(math_parameter_overbar_vgap,                     math_dimension_parameter, overbarvgap);
384    set_math_parameter_value(math_parameter_underbar_kern,                    math_dimension_parameter, underbarkern);
385    set_math_parameter_value(math_parameter_underbar_rule,                    math_dimension_parameter, underbarrule);
386    set_math_parameter_value(math_parameter_underbar_vgap,                    math_dimension_parameter, underbarvgap);
387    set_math_parameter_value(math_parameter_radical_kern,                     math_dimension_parameter, radicalkern);
388    set_math_parameter_value(math_parameter_radical_rule,                     math_dimension_parameter, radicalrule);
389    set_math_parameter_value(math_parameter_radical_vgap,                     math_dimension_parameter, radicalvgap);
390    set_math_parameter_value(math_parameter_radical_degree_before,            math_dimension_parameter, radicaldegreebefore);
391    set_math_parameter_value(math_parameter_radical_degree_after,             math_dimension_parameter, radicaldegreeafter);
392    set_math_parameter_value(math_parameter_radical_degree_raise,             math_integer_parameter,   radicaldegreeraise);
393    set_math_parameter_value(math_parameter_radical_extensible_after,         math_dimension_parameter, radicalextensibleafter);
394    set_math_parameter_value(math_parameter_radical_extensible_before,        math_dimension_parameter, radicalextensiblebefore);
395    set_math_parameter_value(math_parameter_stack_vgap,                       math_dimension_parameter, stackvgap);
396    set_math_parameter_value(math_parameter_stack_num_up,                     math_dimension_parameter, stacknumup);
397    set_math_parameter_value(math_parameter_stack_denom_down,                 math_dimension_parameter, stackdenomdown);
398    set_math_parameter_value(math_parameter_fraction_rule,                    math_dimension_parameter, fractionrule);
399    set_math_parameter_value(math_parameter_fraction_num_vgap,                math_dimension_parameter, fractionnumvgap);
400    set_math_parameter_value(math_parameter_fraction_num_up,                  math_dimension_parameter, fractionnumup);
401    set_math_parameter_value(math_parameter_fraction_denom_vgap,              math_dimension_parameter, fractiondenomvgap);
402    set_math_parameter_value(math_parameter_fraction_denom_down,              math_dimension_parameter, fractiondenomdown);
403    set_math_parameter_value(math_parameter_fraction_del_size,                math_dimension_parameter, fractiondelsize);
404    set_math_parameter_value(math_parameter_skewed_fraction_hgap,             math_dimension_parameter, skewedfractionhgap);
405    set_math_parameter_value(math_parameter_skewed_fraction_vgap,             math_dimension_parameter, skewedfractionvgap);
406    set_math_parameter_value(math_parameter_limit_above_vgap,                 math_dimension_parameter, limitabovevgap);
407    set_math_parameter_value(math_parameter_limit_above_bgap,                 math_dimension_parameter, limitabovebgap);
408    set_math_parameter_value(math_parameter_limit_above_kern,                 math_dimension_parameter, limitabovekern);
409    set_math_parameter_value(math_parameter_limit_below_vgap,                 math_dimension_parameter, limitbelowvgap);
410    set_math_parameter_value(math_parameter_limit_below_bgap,                 math_dimension_parameter, limitbelowbgap);
411    set_math_parameter_value(math_parameter_limit_below_kern,                 math_dimension_parameter, limitbelowkern);
412    set_math_parameter_value(math_parameter_nolimit_sup_factor,               math_dimension_parameter, nolimitsupfactor);
413    set_math_parameter_value(math_parameter_nolimit_sub_factor,               math_dimension_parameter, nolimitsubfactor);
414    set_math_parameter_value(math_parameter_under_delimiter_vgap,             math_dimension_parameter, underdelimitervgap);
415    set_math_parameter_value(math_parameter_under_delimiter_bgap,             math_dimension_parameter, underdelimiterbgap);
416    set_math_parameter_value(math_parameter_over_delimiter_vgap,              math_dimension_parameter, overdelimitervgap);
417    set_math_parameter_value(math_parameter_over_delimiter_bgap,              math_dimension_parameter, overdelimiterbgap);
418    set_math_parameter_value(math_parameter_subscript_shift_drop,             math_dimension_parameter, subshiftdrop);
419    set_math_parameter_value(math_parameter_superscript_shift_drop,           math_dimension_parameter, supshiftdrop);
420    set_math_parameter_value(math_parameter_subscript_shift_down,             math_dimension_parameter, subshiftdown);
421    set_math_parameter_value(math_parameter_subscript_superscript_shift_down, math_dimension_parameter, subsupshiftdown);
422    set_math_parameter_value(math_parameter_subscript_top_max,                math_dimension_parameter, subtopmax);
423    set_math_parameter_value(math_parameter_superscript_shift_up,             math_dimension_parameter, supshiftup);
424    set_math_parameter_value(math_parameter_superscript_bottom_min,           math_dimension_parameter, supbottommin);
425    set_math_parameter_value(math_parameter_superscript_subscript_bottom_max, math_dimension_parameter, supsubbottommax);
426    set_math_parameter_value(math_parameter_subscript_superscript_vgap,       math_dimension_parameter, subsupvgap);
427    set_math_parameter_value(math_parameter_space_before_script,              math_dimension_parameter, spacebeforescript);
428    set_math_parameter_value(math_parameter_space_between_script,             math_dimension_parameter, spacebetweenscript);
429    set_math_parameter_value(math_parameter_space_after_script,               math_dimension_parameter, spaceafterscript);
430    set_math_parameter_value(math_parameter_connector_overlap_min,            math_dimension_parameter, connectoroverlapmin);
431
432    /*tex
433
434        Gone are the many:
435
436        \starttyping
437        set_math_parameter_value(math_parameter_ordinary_ordinary_spacing, math_muglue_parameter, ordordspacing);
438        \stoptyping
439
440        thanks to the more generic multiple class mechanism.
441
442    */
443
444    set_math_parameter_value(math_parameter_extra_superscript_shift,            math_dimension_parameter,  extrasuperscriptshift);
445    set_math_parameter_value(math_parameter_extra_subscript_shift,              math_dimension_parameter,  extrasubscriptshift);
446    set_math_parameter_value(math_parameter_extra_superprescript_shift,         math_dimension_parameter,  extrasuperprescriptshift);
447    set_math_parameter_value(math_parameter_extra_subprescript_shift,           math_dimension_parameter,  extrasubprescriptshift);
448
449    set_math_parameter_value(math_parameter_prime_raise,                        math_integer_parameter,    primeraise);
450    set_math_parameter_value(math_parameter_prime_raise_composed,               math_integer_parameter,    primeraisecomposed);
451    set_math_parameter_value(math_parameter_prime_shift_up,                     math_dimension_parameter,  primeshiftup);
452    set_math_parameter_value(math_parameter_prime_shift_drop,                   math_dimension_parameter,  primeshiftdrop);
453    set_math_parameter_value(math_parameter_prime_space_after,                  math_dimension_parameter,  primespaceafter);
454
455    set_math_parameter_value(math_parameter_rule_height,                        math_dimension_parameter,  ruleheight);
456    set_math_parameter_value(math_parameter_rule_depth,                         math_dimension_parameter,  ruledepth);
457
458    set_math_parameter_value(math_parameter_extra_superscript_space,            math_dimension_parameter,  extrasuperscriptspace);
459    set_math_parameter_value(math_parameter_extra_subscript_space,              math_dimension_parameter,  extrasubscriptspace);
460    set_math_parameter_value(math_parameter_extra_superprescript_space,         math_dimension_parameter,  extrasuperprescriptspace);
461    set_math_parameter_value(math_parameter_extra_subprescript_space,           math_dimension_parameter,  extrasubprescriptspace);
462
463    set_math_parameter_value(math_parameter_superscript_snap,                   math_dimension_parameter,  superscriptsnap);
464    set_math_parameter_value(math_parameter_subscript_snap,                     math_dimension_parameter,  subscriptsnap);
465
466    set_math_parameter_value(math_parameter_skewed_delimiter_tolerance,         math_dimension_parameter,  skeweddelimitertolerance);
467
468    set_math_parameter_value(math_parameter_accent_top_shift_up,                math_dimension_parameter,  accenttopshiftup);
469    set_math_parameter_value(math_parameter_accent_bottom_shift_down,           math_dimension_parameter,  accentbottomshiftdown);
470    set_math_parameter_value(math_parameter_accent_top_overshoot,               math_integer_parameter,    accenttopovershoot);
471    set_math_parameter_value(math_parameter_accent_bottom_overshoot,            math_integer_parameter,    accentbottomovershoot);
472    set_math_parameter_value(math_parameter_accent_superscript_drop,            math_dimension_parameter,  accentsuperscriptdrop);
473    set_math_parameter_value(math_parameter_accent_superscript_percent,         math_integer_parameter,    accentsuperscriptpercent);
474    set_math_parameter_value(math_parameter_accent_extend_margin,               math_integer_parameter,    accentextendmargin);
475    set_math_parameter_value(math_parameter_flattened_accent_top_shift_up,      math_dimension_parameter,  flattenedaccenttopshiftup);
476    set_math_parameter_value(math_parameter_flattened_accent_bottom_shift_down, math_dimension_parameter,  flattenedaccentbottomshiftdown);
477
478    set_math_parameter_value(math_parameter_delimiter_percent,                  math_integer_parameter,    delimiterpercent);
479    set_math_parameter_value(math_parameter_delimiter_shortfall,                math_dimension_parameter,  delimitershortfall);
480    set_math_parameter_value(math_parameter_delimiter_extend_margin,            math_dimension_parameter,  delimiterextendmargin);
481
482    set_math_parameter_value(math_parameter_over_line_variant,                  math_style_parameter,      overlinevariant);
483    set_math_parameter_value(math_parameter_under_line_variant,                 math_style_parameter,      underlinevariant);
484    set_math_parameter_value(math_parameter_over_delimiter_variant,             math_style_parameter,      overdelimitervariant);
485    set_math_parameter_value(math_parameter_under_delimiter_variant,            math_style_parameter,      underdelimitervariant);
486    set_math_parameter_value(math_parameter_delimiter_over_variant,             math_style_parameter,      delimiterovervariant);
487    set_math_parameter_value(math_parameter_delimiter_under_variant,            math_style_parameter,      delimiterundervariant);
488    set_math_parameter_value(math_parameter_h_extensible_variant,               math_style_parameter,      hextensiblevariant);
489    set_math_parameter_value(math_parameter_v_extensible_variant,               math_style_parameter,      vextensiblevariant);
490    set_math_parameter_value(math_parameter_fraction_variant,                   math_style_parameter,      fractionvariant);
491    set_math_parameter_value(math_parameter_radical_variant,                    math_style_parameter,      radicalvariant);
492    set_math_parameter_value(math_parameter_degree_variant,                     math_style_parameter,      degreevariant);
493    set_math_parameter_value(math_parameter_accent_variant,                     math_style_parameter,      accentvariant);
494    set_math_parameter_value(math_parameter_top_accent_variant,                 math_style_parameter,      topaccentvariant);
495    set_math_parameter_value(math_parameter_bottom_accent_variant,              math_style_parameter,      bottomaccentvariant);
496    set_math_parameter_value(math_parameter_overlay_accent_variant,             math_style_parameter,      overlayaccentvariant);
497    set_math_parameter_value(math_parameter_numerator_variant,                  math_style_parameter,      numeratorvariant);
498    set_math_parameter_value(math_parameter_denominator_variant,                math_style_parameter,      denominatorvariant);
499    set_math_parameter_value(math_parameter_superscript_variant,                math_style_parameter,      superscriptvariant);
500    set_math_parameter_value(math_parameter_subscript_variant,                  math_style_parameter,      subscriptvariant);
501    set_math_parameter_value(math_parameter_prime_variant,                      math_style_parameter,      primevariant);
502    set_math_parameter_value(math_parameter_stack_variant,                      math_style_parameter,      stackvariant);
503
504    lmt_interface.math_font_parameter_values = lmt_aux_allocate_value_info(math_parameter_last_code + 1);
505
506    # define set_math_font_parameter(n, t) lmt_interface.math_font_parameter_values[n] = (value_info) { .lua = lua_key_index(n), .name = lua_key(n), .type = t }
507
508    set_math_font_parameter(ScriptPercentScaleDown,                   math_integer_parameter);
509    set_math_font_parameter(ScriptScriptPercentScaleDown,             math_integer_parameter);
510    set_math_font_parameter(DelimitedSubFormulaMinHeight,             math_dimension_parameter);
511    set_math_font_parameter(DisplayOperatorMinHeight,                 math_dimension_parameter);
512    set_math_font_parameter(MathLeading,                              math_dimension_parameter);
513    set_math_font_parameter(AxisHeight,                               math_dimension_parameter);
514    set_math_font_parameter(AccentBaseHeight,                         math_dimension_parameter);
515    set_math_font_parameter(AccentBaseDepth,                          math_dimension_parameter);
516    set_math_font_parameter(FlattenedAccentBaseHeight,                math_dimension_parameter);
517    set_math_font_parameter(FlattenedAccentBaseDepth,                 math_dimension_parameter);
518    set_math_font_parameter(SubscriptShiftDown,                       math_dimension_parameter);
519    set_math_font_parameter(SubscriptTopMax,                          math_dimension_parameter);
520    set_math_font_parameter(SubscriptBaselineDropMin,                 math_dimension_parameter);
521    set_math_font_parameter(SuperscriptShiftUp,                       math_dimension_parameter);
522    set_math_font_parameter(SuperscriptShiftUpCramped,                math_dimension_parameter);
523    set_math_font_parameter(SuperscriptBottomMin,                     math_dimension_parameter);
524    set_math_font_parameter(SuperscriptBaselineDropMax,               math_dimension_parameter);
525    set_math_font_parameter(SubSuperscriptGapMin,                     math_dimension_parameter);
526    set_math_font_parameter(SuperscriptBottomMaxWithSubscript,        math_dimension_parameter);
527    set_math_font_parameter(SpaceBeforeScript,                        math_dimension_parameter);
528    set_math_font_parameter(SpaceBetweenScript,                       math_dimension_parameter);
529    set_math_font_parameter(SpaceAfterScript,                         math_dimension_parameter);
530    set_math_font_parameter(UpperLimitGapMin,                         math_dimension_parameter);
531    set_math_font_parameter(UpperLimitBaselineRiseMin,                math_dimension_parameter);
532    set_math_font_parameter(LowerLimitGapMin,                         math_dimension_parameter);
533    set_math_font_parameter(LowerLimitBaselineDropMin,                math_dimension_parameter);
534    set_math_font_parameter(StackTopShiftUp,                          math_dimension_parameter);
535    set_math_font_parameter(StackTopDisplayStyleShiftUp,              math_dimension_parameter);
536    set_math_font_parameter(StackBottomShiftDown,                     math_dimension_parameter);
537    set_math_font_parameter(StackBottomDisplayStyleShiftDown,         math_dimension_parameter);
538    set_math_font_parameter(StackGapMin,                              math_dimension_parameter);
539    set_math_font_parameter(StackDisplayStyleGapMin,                  math_dimension_parameter);
540    set_math_font_parameter(StretchStackTopShiftUp,                   math_dimension_parameter);
541    set_math_font_parameter(StretchStackBottomShiftDown,              math_dimension_parameter);
542    set_math_font_parameter(StretchStackGapAboveMin,                  math_dimension_parameter);
543    set_math_font_parameter(StretchStackGapBelowMin,                  math_dimension_parameter);
544    set_math_font_parameter(FractionNumeratorShiftUp,                 math_dimension_parameter);
545    set_math_font_parameter(FractionNumeratorDisplayStyleShiftUp,     math_dimension_parameter);
546    set_math_font_parameter(FractionDenominatorShiftDown,             math_dimension_parameter);
547    set_math_font_parameter(FractionDenominatorDisplayStyleShiftDown, math_dimension_parameter);
548    set_math_font_parameter(FractionNumeratorGapMin,                  math_dimension_parameter);
549    set_math_font_parameter(FractionNumeratorDisplayStyleGapMin,      math_dimension_parameter);
550    set_math_font_parameter(FractionRuleThickness,                    math_dimension_parameter);
551    set_math_font_parameter(FractionDenominatorGapMin,                math_dimension_parameter);
552    set_math_font_parameter(FractionDenominatorDisplayStyleGapMin,    math_dimension_parameter);
553    set_math_font_parameter(SkewedFractionHorizontalGap,              math_dimension_parameter);
554    set_math_font_parameter(SkewedFractionVerticalGap,                math_dimension_parameter);
555    set_math_font_parameter(OverbarVerticalGap,                       math_dimension_parameter);
556    set_math_font_parameter(OverbarRuleThickness,                     math_dimension_parameter);
557    set_math_font_parameter(OverbarExtraAscender,                     math_dimension_parameter);
558    set_math_font_parameter(UnderbarVerticalGap,                      math_dimension_parameter);
559    set_math_font_parameter(UnderbarRuleThickness,                    math_dimension_parameter);
560    set_math_font_parameter(UnderbarExtraDescender,                   math_dimension_parameter);
561    set_math_font_parameter(RadicalVerticalGap,                       math_dimension_parameter);
562    set_math_font_parameter(RadicalDisplayStyleVerticalGap,           math_dimension_parameter);
563    set_math_font_parameter(RadicalRuleThickness,                     math_dimension_parameter);
564    set_math_font_parameter(RadicalExtraAscender,                     math_dimension_parameter);
565    set_math_font_parameter(RadicalKernBeforeDegree,                  math_dimension_parameter);
566    set_math_font_parameter(RadicalKernAfterDegree,                   math_dimension_parameter);
567    set_math_font_parameter(RadicalDegreeBottomRaisePercent,          math_integer_parameter);
568    set_math_font_parameter(RadicalKernAfterExtensible,               math_dimension_parameter);
569    set_math_font_parameter(RadicalKernBeforeExtensible,              math_dimension_parameter);
570    set_math_font_parameter(MinConnectorOverlap,                      math_dimension_parameter);
571    set_math_font_parameter(SuperscriptSnap,                          math_dimension_parameter);
572    set_math_font_parameter(SubscriptSnap,                            math_dimension_parameter);
573    set_math_font_parameter(SubscriptShiftDownWithSuperscript,        math_dimension_parameter);
574    set_math_font_parameter(FractionDelimiterSize,                    math_dimension_parameter);
575    set_math_font_parameter(FractionDelimiterDisplayStyleSize,        math_dimension_parameter);
576    set_math_font_parameter(NoLimitSubFactor,                         math_integer_parameter);
577    set_math_font_parameter(NoLimitSupFactor,                         math_integer_parameter);
578    set_math_font_parameter(PrimeRaisePercent,                        math_integer_parameter);
579    set_math_font_parameter(PrimeRaiseComposedPercent,                math_integer_parameter);
580    set_math_font_parameter(PrimeShiftUp,                             math_dimension_parameter);
581    set_math_font_parameter(PrimeShiftUpCramped,                      math_dimension_parameter);
582    set_math_font_parameter(PrimeBaselineDropMax,                     math_dimension_parameter);
583    set_math_font_parameter(PrimeSpaceAfter,                          math_dimension_parameter);
584    set_math_font_parameter(PrimeWidthPercent,                        math_integer_parameter);
585    set_math_font_parameter(SkewedDelimiterTolerance,                 math_dimension_parameter);
586    set_math_font_parameter(AccentTopShiftUp,                         math_dimension_parameter);
587    set_math_font_parameter(AccentBottomShiftDown,                    math_dimension_parameter);
588    set_math_font_parameter(AccentTopOvershoot,                       math_integer_parameter);
589    set_math_font_parameter(AccentBottomOvershoot,                    math_integer_parameter);
590    set_math_font_parameter(AccentSuperscriptDrop,                    math_dimension_parameter);
591    set_math_font_parameter(AccentSuperscriptPercent,                 math_integer_parameter);
592    set_math_font_parameter(AccentExtendMargin,                       math_dimension_parameter);
593    set_math_font_parameter(FlattenedAccentTopShiftUp,                math_dimension_parameter);
594    set_math_font_parameter(FlattenedAccentBottomShiftDown,           math_dimension_parameter);
595    set_math_font_parameter(DelimiterPercent,                         math_integer_parameter);
596    set_math_font_parameter(DelimiterShortfall,                       math_dimension_parameter);
597    set_math_font_parameter(DelimiterDisplayPercent,                  math_integer_parameter);
598    set_math_font_parameter(DelimiterDisplayShortfall,                math_dimension_parameter);
599    set_math_font_parameter(DelimiterExtendMargin,                    math_dimension_parameter);
600}
601