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/texnesting.h | |
parent | e94fa4dc30ec28a6727aa85e17aaac18b76aeadb (diff) | |
download | context-c161b7d6fe142231346cc1844e6e27c0ab7718c1.tar.gz |
2022-09-16 14:41:00
Diffstat (limited to 'source/luametatex/source/tex/texnesting.h')
-rw-r--r-- | source/luametatex/source/tex/texnesting.h | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/source/luametatex/source/tex/texnesting.h b/source/luametatex/source/tex/texnesting.h new file mode 100644 index 000000000..f940094a0 --- /dev/null +++ b/source/luametatex/source/tex/texnesting.h @@ -0,0 +1,71 @@ +/* + See license.txt in the root of this project. +*/ + +# ifndef LMT_NESTING_H +# define LMT_NESTING_H + +typedef struct list_state_record { + int mode; + halfword head; + halfword tail; + int prev_graf; + int mode_line; + halfword prev_depth; // scaled + halfword space_factor; + halfword direction_stack; + int math_dir; + int math_style; + int math_scale; + int math_main_style; + halfword delim; + halfword incomplete_noad; + halfword math_flatten; + halfword math_begin; + halfword math_end; + halfword math_mode; +} list_state_record; + +typedef struct nest_state_info { + list_state_record *nest; + memory_data nest_data; + int shown_mode; + int padding; +} nest_state_info; + +extern nest_state_info lmt_nest_state; + +# define cur_list lmt_nest_state.nest[lmt_nest_state.nest_data.ptr] /*tex The \quote {top} semantic state. */ +# define cur_mode (abs(cur_list.mode)) + +extern void tex_initialize_nest_state (void); +/* int tex_room_on_nest_stack (void); */ +extern void tex_initialize_nesting (void); +extern void tex_push_nest (void); +extern void tex_pop_nest (void); +extern void tex_tail_append (halfword p); +extern halfword tex_pop_tail (void); +extern const char *tex_string_mode (int m); +extern void tex_show_activities (void); +extern int tex_vmode_nest_index (void); + +/*tex + When we use a macro instead of a function we need to use an intermediate variable because |_p_| + can be a functioncall itself (something |new_*|). The gain is a little performance because this + one is called a lot. The loss is a bit larger binary. There are some more macros sensitive for + this, like the ones that couple nodes. Also, inlining a function can spoil this game! +*/ + +/* +# define tail_append(_p_) do { \ + halfword __p__ = _p_ ; \ + tex_couple_nodes(cur_list.tail, __p__); \ + cur_list.tail = __p__; \ +} while (0) +*/ + +/* +# define tail_append tex_tail_append +*/ + +# endif |