lmtcallbacklib.h /size: 4850 b    last modification: 2025-02-21 11:03
1/*
2    See license.txt in the root of this project.
3*/
4
5# ifndef LMT_LCALLBACKLIB_H
6# define LMT_LCALLBACKLIB_H
7
8# include "lapi.h"
9
10typedef enum callback_types {
11    find_log_file_callback = 1,
12    find_format_file_callback,
13    open_data_file_callback,
14    process_jobname_callback,
15    start_run_callback,
16    stop_run_callback,
17    define_font_callback,
18    quality_font_callback,
19    pre_output_filter_callback,
20    buildpage_filter_callback,
21    hpack_filter_callback,
22    vpack_filter_callback,
23    hyphenate_callback,
24    ligaturing_callback,
25    kerning_callback,
26    glyph_run_callback,
27    pre_linebreak_filter_callback,
28    linebreak_filter_callback,
29    post_linebreak_filter_callback,
30    append_to_vlist_filter_callback,
31    alignment_filter_callback,
32    local_box_filter_callback,
33    packed_vbox_filter_callback,
34    mlist_to_hlist_callback,
35    pre_dump_callback,
36    start_file_callback,
37    stop_file_callback,
38    intercept_tex_error_callback,
39    intercept_lua_error_callback,
40    show_error_message_callback,
41    show_warning_message_callback,
42    hpack_quality_callback,
43    vpack_quality_callback,
44    line_break_callback,
45    balance_callback,
46    show_vsplit_callback,
47    show_build_callback,
48    insert_par_callback,
49    append_line_filter_callback,
50    insert_distance_callback,
51 /* fire_up_output_callback, */
52    wrapup_run_callback,
53    begin_paragraph_callback,
54    paragraph_context_callback,
55 /* get_math_char_callback, */
56    math_rule_callback,
57    make_extensible_callback,
58    register_extensible_callback,
59    show_whatsit_callback,
60    get_attribute_callback,
61    get_noad_class_callback,
62    get_math_dictionary_callback,
63    show_lua_call_callback,
64    trace_memory_callback,
65    handle_overload_callback,
66    missing_character_callback,
67    process_character_callback,
68    linebreak_quality_callback,
69    paragraph_pass_callback,
70    handle_uleader_callback,
71    handle_uinsert_callback,
72    italic_correction_callback,
73    show_loners_callback,
74    tail_append_callback,
75    balance_boundary_callback,
76    balance_insert_callback,
77    total_callbacks,
78} callback_types;
79
80/* Todo: provide support for this: */
81
82typedef enum callback_states {
83    callback_set      = 0x01, /* can be used */
84    callback_disabled = 0x02, /* temporarily disabled */
85    callback_frozen   = 0x04, /* can never be set or changed again */
86} callback_states;
87
88typedef struct callback_state_info {
89    int      metatable_id;
90    int      padding;
91    int      values[total_callbacks];
92 /* unsigned states[total_callbacks]; */ /* can be a singleword */
93} callback_state_info;
94
95extern callback_state_info lmt_callback_state;
96
97typedef enum callback_keys {
98    callback_boolean_key   = 'b', /*tex a boolean (int) */
99    callback_charnum_key   = 'c', /*tex a byte (char) */
100    callback_integer_key   = 'd', /*tex an integer */
101    callback_line_key      = 'l', /*tex a buffer section, with implied start */
102    callback_strnumber_key = 's', /*tex a \TEX\ string (index) */
103    callback_lstring_key   = 'L', /*tex a \LUA\ string (struct) */
104    callback_node_key      = 'N', /*tex a \TEX\ node (halfword) */
105    callback_string_key    = 'S', /*tex a \CCODE\ string */
106    callback_result_s_key  = 'R', /*tex a string (return value) but nil is also okay */
107    callback_result_i_key  = 'r', /*tex a number (return value) but nil is also okay */
108} callback_keys;
109
110static inline int  lmt_callback_defined         (int i);
111
112static inline int  lmt_callback_call            (lua_State *L, int i, int o, int top);
113extern int         lmt_callback_okay            (lua_State *L, int i, int *top);
114extern void        lmt_callback_error           (lua_State *L, int top, int i);
115static inline void lmt_callback_wrapup          (lua_State *L, int top);
116 
117extern int         lmt_run_callback             (lua_State *L, int i, const char *values, ...);
118extern int         lmt_run_and_save_callback    (lua_State *L, int i, const char *values, ...);
119extern int         lmt_run_saved_callback_line  (lua_State *L, int i, int firstpos);
120extern int         lmt_run_saved_callback_close (lua_State *L, int i);
121
122extern void        lmt_destroy_saved_callback   (lua_State *L, int i);
123
124extern void        lmt_run_memory_callback      (const char *what, int success);
125
126extern void        lmt_push_callback_usage      (lua_State *L);
127
128/* The implementation: */
129
130static inline int  lmt_callback_defined(
131    int i
132) { 
133    return lmt_callback_state.values[i];
134 // return (lmt_callback_state.states[i] & callback_disabled) ? 0 : lmt_callback_state.values[i]; 
135}
136
137static inline int  lmt_callback_call(
138    lua_State *L, 
139    int        i, 
140    int        o, 
141    int        top
142) { 
143    return lua_pcallk(L, i, o, top + 2, 0, NULL); 
144}
145
146static inline void lmt_callback_wrapup(
147    lua_State *L, 
148    int        top
149)  
150{ 
151    lua_settop(L, top); 
152}
153
154
155# endif
156
157