summaryrefslogtreecommitdiff
path: root/source/luametatex/source/lua/lmtcallbacklib.h
blob: 6faa4ddaccf68e5199bbf03c5ce16835aaa692f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
    See license.txt in the root of this project.
*/

# ifndef LMT_LCALLBACKLIB_H
# define LMT_LCALLBACKLIB_H

# include "lapi.h"

typedef enum callback_callback_types {
    find_log_file_callback = 1,
    find_format_file_callback,
    open_data_file_callback,
    process_jobname_callback,
    start_run_callback,
    stop_run_callback,
    define_font_callback,
    pre_output_filter_callback,
    buildpage_filter_callback,
    hpack_filter_callback,
    vpack_filter_callback,
    hyphenate_callback,
    ligaturing_callback,
    kerning_callback,
    glyph_run_callback,
    pre_linebreak_filter_callback,
    linebreak_filter_callback,
    post_linebreak_filter_callback,
    append_to_vlist_filter_callback,
    alignment_filter_callback,
    local_box_filter_callback,
    packed_vbox_filter_callback,
    mlist_to_hlist_callback,
    pre_dump_callback,
    start_file_callback,
    stop_file_callback,
    intercept_tex_error_callback,
    intercept_lua_error_callback,
    show_error_message_callback,
    show_warning_message_callback,
    hpack_quality_callback,
    vpack_quality_callback,
    insert_par_callback,
    append_line_filter_callback,
    build_page_insert_callback,
 /* fire_up_output_callback, */
    wrapup_run_callback,
    begin_paragraph_callback,
    paragraph_context_callback,
 /* get_math_char_callback, */
    math_rule_callback,
    make_extensible_callback,
    register_extensible_callback,
    show_whatsit_callback,
    get_attribute_callback,
    get_noad_class_callback,
    get_math_dictionary_callback,
    show_lua_call_callback,
    trace_memory_callback,
    handle_overload_callback,
    missing_character_callback,
    process_character_callback,
    total_callbacks,
} callback_callback_types;

typedef struct callback_state_info {
    int metatable_id;
    int padding;
    int values[total_callbacks];
} callback_state_info;

extern callback_state_info lmt_callback_state;

typedef enum callback_keys {
    callback_boolean_key   = 'b', /*tex a boolean (int) */
    callback_charnum_key   = 'c', /*tex a byte (char) */
    callback_integer_key   = 'd', /*tex an integer */
    callback_line_key      = 'l', /*tex a buffer section, with implied start */
    callback_strnumber_key = 's', /*tex a \TEX\ string (index) */
    callback_lstring_key   = 'L', /*tex a \LUA\ string (struct) */
    callback_node_key      = 'N', /*tex a \TEX\ node (halfword) */
    callback_string_key    = 'S', /*tex a \CCODE\ string */
    callback_result_key    = 'R', /*tex a string (return value) but nil is also okay */
} callback_keys;

inline static int lmt_callback_defined   (int a)                               { return lmt_callback_state.values[a]; }
inline static int lmt_callback_call      (lua_State *L, int i, int o, int top) { return lua_pcallk(L, i, o, top + 2, 0, NULL); }

extern int  lmt_callback_okay            (lua_State *L, int i, int *top);
extern void lmt_callback_error           (lua_State *L, int top, int i);
inline void lmt_callback_wrapup          (lua_State *L, int top)  { lua_settop(L, top); }

extern int  lmt_run_callback             (lua_State *L, int i, const char *values, ...);
extern int  lmt_run_and_save_callback    (lua_State *L, int i, const char *values, ...);
extern int  lmt_run_saved_callback_line  (lua_State *L, int i, int firstpos);
extern int  lmt_run_saved_callback_close (lua_State *L, int i);

extern void lmt_destroy_saved_callback   (lua_State *L, int i);

extern void lmt_run_memory_callback      (const char *what, int success);

extern void lmt_push_callback_usage      (lua_State *L);

# endif