texinserts.h /size: 4818 b    last modification: 2025-02-21 11:03
1/*
2    See license.txt in the root of this project.
3*/
4
5# ifndef LMT_INSERTS_H
6# define LMT_INSERTS_H
7
8typedef struct insert_record {
9    halfword limit;
10    halfword multiplier;
11    halfword distance;
12    halfword content;
13    halfword initialized;
14    halfword options;
15    halfword penalty;
16    scaled   maxdepth;
17    halfword before;
18    halfword inbetween;
19    scaled   lineheight;
20    scaled   linedepth;
21    scaled   stretch;
22    scaled   shrink;
23} insert_record;
24
25typedef enum insert_modes {
26    unset_insert_mode,
27    index_insert_mode,
28    class_insert_mode,
29} insert_modes;
30
31typedef enum insert_class_options {
32    insert_option_storing  = 0x1,
33    insert_option_penalty  = 0x2,
34    insert_option_maxdepth = 0x4,
35} insert_class_options;
36
37typedef enum insert_storage_actions {
38    insert_storage_ignore,
39    insert_storage_delay,
40    insert_storage_inject,
41} insert_storage_actions;
42
43typedef struct insert_state_info {
44    insert_record *inserts;
45    memory_data    insert_data;
46    int            mode;
47    halfword       storing;
48    halfword       head;
49    halfword       tail;
50} insert_state_info;
51
52extern insert_state_info lmt_insert_state;
53
54# define has_insert_option(a,b)   (lmt_insert_state.mode == class_insert_mode && (lmt_insert_state.inserts[a].options & b) == b)
55# define set_insert_option(a,b)   (lmt_insert_state.inserts[a].options |= b)
56# define unset_insert_option(a,b) (lmt_insert_state.inserts[a].options & ~(b))
57
58extern scaled   tex_get_insert_limit       (halfword i);
59extern halfword tex_get_insert_multiplier  (halfword i);
60extern halfword tex_get_insert_penalty     (halfword i);
61extern halfword tex_get_insert_distance    (halfword i);
62extern halfword tex_get_insert_maxdepth    (halfword i);
63extern scaled   tex_get_insert_height      (halfword i);
64extern scaled   tex_get_insert_depth       (halfword i);
65extern scaled   tex_get_insert_width       (halfword i);
66extern halfword tex_get_insert_content     (halfword i);
67extern halfword tex_get_insert_storage     (halfword i);
68extern scaled   tex_get_insert_line_height (halfword i);
69extern scaled   tex_get_insert_line_depth  (halfword i);
70extern scaled   tex_get_insert_stretch     (halfword i);
71extern scaled   tex_get_insert_shrink      (halfword i);
72                                           
73extern void     tex_set_insert_limit       (halfword i, scaled v);
74extern void     tex_set_insert_multiplier  (halfword i, halfword v);
75extern void     tex_set_insert_penalty     (halfword i, halfword v);
76extern void     tex_set_insert_distance    (halfword i, halfword v);
77extern void     tex_set_insert_maxdepth    (halfword i, halfword v);
78extern void     tex_set_insert_height      (halfword i, scaled v);
79extern void     tex_set_insert_depth       (halfword i, scaled v);
80extern void     tex_set_insert_width       (halfword i, scaled v);
81extern void     tex_set_insert_content     (halfword i, halfword v);
82extern void     tex_set_insert_storage     (halfword i, halfword v);
83extern void     tex_set_insert_line_height (halfword i, scaled v);
84extern void     tex_set_insert_line_depth  (halfword i, scaled v);
85extern void     tex_set_insert_stretch     (halfword i, scaled v);
86extern void     tex_set_insert_shrink      (halfword i, scaled v);
87                                           
88extern void     tex_wipe_insert            (halfword i);
89                                           
90extern void     tex_initialize_inserts     (void);
91extern int      tex_valid_insert_id        (halfword n);
92extern void     tex_dump_insert_data       (dumpstream f);
93extern void     tex_undump_insert_data     (dumpstream f);
94                                           
95extern halfword lmt_get_insert_distance    (halfword i, int slot); /* callback */
96                                           
97extern halfword tex_get_insert_progress    (halfword i);
98                                           
99extern void     tex_insert_store           (halfword i, halfword n);
100extern void     tex_insert_restore         (halfword n);
101extern int      tex_insert_stored          (void);
102                                           
103extern halfword tex_scan_insert_index      (void);
104extern void     tex_set_insert_mode        (halfword mode);
105extern int      tex_insert_is_void         (halfword i);
106
107extern int      tex_identify_inserts       (halfword b, halfword cbk);
108                                           
109extern void     tex_run_insert             (void);
110extern void     tex_finish_insert_group    (void);
111
112extern void     tex_show_insert_group      (void);
113extern int      tex_show_insert_record     (void);
114
115extern scaled   tex_insert_height          (halfword node);
116extern void     tex_insert_reset_distances (void);
117extern scaled   tex_insert_distances       (halfword first, halfword last, scaled *stretch, scaled *shrink);
118
119# endif
120