diff options
author | Hans Hagen <pragma@wxs.nl> | 2022-09-16 15:53:42 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2022-09-16 15:53:42 +0200 |
commit | c161b7d6fe142231346cc1844e6e27c0ab7718c1 (patch) | |
tree | 3fd877b8986137703e987e4651a2db8e946a0f72 /source/luametatex/source/tex/texinserts.h | |
parent | e94fa4dc30ec28a6727aa85e17aaac18b76aeadb (diff) | |
download | context-c161b7d6fe142231346cc1844e6e27c0ab7718c1.tar.gz |
2022-09-16 14:41:00
Diffstat (limited to 'source/luametatex/source/tex/texinserts.h')
-rw-r--r-- | source/luametatex/source/tex/texinserts.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/source/luametatex/source/tex/texinserts.h b/source/luametatex/source/tex/texinserts.h new file mode 100644 index 000000000..e91965e6f --- /dev/null +++ b/source/luametatex/source/tex/texinserts.h @@ -0,0 +1,101 @@ +/* + See license.txt in the root of this project. +*/ + +# ifndef LMT_INSERTS_H +# define LMT_INSERTS_H + +typedef struct insert_record { + halfword limit; + halfword multiplier; + halfword distance; + halfword content; + halfword initialized; + halfword options; + halfword penalty; + halfword maxdepth; +} insert_record; + +typedef enum insert_modes { + unset_insert_mode, + index_insert_mode, + class_insert_mode, +} insert_modes; + +typedef enum insert_class_options { + insert_option_storing = 0x1, + insert_option_penalty = 0x2, + insert_option_maxdepth = 0x4, +} insert_class_options; + +typedef enum insert_storage_actions { + insert_storage_ignore, + insert_storage_delay, + insert_storage_inject, +} insert_storage_actions; + +typedef enum saved_insert_items { + saved_insert_item_index = 0, + saved_insert_n_of_items = 1, +} saved_insert_items; + +typedef struct insert_state_info { + insert_record *inserts; + memory_data insert_data; + int mode; + halfword storing; + halfword head; + halfword tail; +} insert_state_info; + +extern insert_state_info lmt_insert_state; + +# define has_insert_option(a,b) (lmt_insert_state.mode == class_insert_mode && (lmt_insert_state.inserts[a].options & b) == b) +# define set_insert_option(a,b) (lmt_insert_state.inserts[a].options |= b) +# define unset_insert_option(a,b) (lmt_insert_state.inserts[a].options & ~(b)) + +extern scaled tex_get_insert_limit (halfword i); +extern halfword tex_get_insert_multiplier (halfword i); +extern halfword tex_get_insert_penalty (halfword i); +extern halfword tex_get_insert_distance (halfword i); +extern halfword tex_get_insert_maxdepth (halfword i); +extern scaled tex_get_insert_height (halfword i); +extern scaled tex_get_insert_depth (halfword i); +extern scaled tex_get_insert_width (halfword i); +extern halfword tex_get_insert_content (halfword i); +extern halfword tex_get_insert_storage (halfword i); + +extern void tex_set_insert_limit (halfword i, scaled v); +extern void tex_set_insert_multiplier (halfword i, halfword v); +extern void tex_set_insert_penalty (halfword i, halfword v); +extern void tex_set_insert_distance (halfword i, halfword v); +extern void tex_set_insert_maxdepth (halfword i, halfword v); +extern void tex_set_insert_height (halfword i, scaled v); +extern void tex_set_insert_depth (halfword i, scaled v); +extern void tex_set_insert_width (halfword i, scaled v); +extern void tex_set_insert_content (halfword i, halfword v); +extern void tex_set_insert_storage (halfword i, halfword v); + +extern void tex_wipe_insert (halfword i); + +extern void tex_initialize_inserts (void); +extern int tex_valid_insert_id (halfword n); +extern void tex_dump_insert_data (dumpstream f); +extern void tex_undump_insert_data (dumpstream f); + +extern halfword lmt_get_insert_distance (halfword i, int slot); /* callback */ + +extern halfword tex_get_insert_progress (halfword i); + +extern void tex_insert_store (halfword i, halfword n); +extern void tex_insert_restore (halfword n); +extern int tex_insert_stored (void); + +extern halfword tex_scan_insert_index (void); +extern void tex_set_insert_mode (halfword mode); +extern int tex_insert_is_void (halfword i); + +extern void tex_run_insert (void); +extern void tex_finish_insert_group (void); + +# endif |