summaryrefslogtreecommitdiff
path: root/source/luametatex/source/lua/lmtcallbacklib.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/luametatex/source/lua/lmtcallbacklib.h')
-rw-r--r--source/luametatex/source/lua/lmtcallbacklib.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/source/luametatex/source/lua/lmtcallbacklib.h b/source/luametatex/source/lua/lmtcallbacklib.h
new file mode 100644
index 000000000..6faa4ddac
--- /dev/null
+++ b/source/luametatex/source/lua/lmtcallbacklib.h
@@ -0,0 +1,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
+