summaryrefslogtreecommitdiff
path: root/source/luametatex/source/tex/texmath.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/luametatex/source/tex/texmath.c')
-rw-r--r--source/luametatex/source/tex/texmath.c109
1 files changed, 63 insertions, 46 deletions
diff --git a/source/luametatex/source/tex/texmath.c b/source/luametatex/source/tex/texmath.c
index ffc73cd12..ec30de1ca 100644
--- a/source/luametatex/source/tex/texmath.c
+++ b/source/luametatex/source/tex/texmath.c
@@ -2458,53 +2458,70 @@ halfword tex_math_make_disc(halfword d)
void tex_run_math_modifier(void)
{
halfword tail = cur_list.tail;
- if (cur_list.head != tail && node_type(tail) == simple_noad) { // maybe all
- switch (cur_chr) {
- case adapt_to_left_modifier_code:
- noad_options(tail) = unset_option(noad_options(tail), noad_option_adapt_to_right_size);
- noad_options(tail) |= noad_option_adapt_to_left_size;
- break;
- case adapt_to_right_modifier_code:
- noad_options(tail) = unset_option(noad_options(tail), noad_option_adapt_to_left_size);
- noad_options(tail) |= noad_option_adapt_to_right_size;
- break;
- /* todo: actually this one can also be used for other types */
- case axis_modifier_code:
- noad_options(tail) |= noad_option_axis;
- break;
- case no_axis_modifier_code:
- noad_options(tail) |= noad_option_no_axis;
- break;
- case phantom_modifier_code:
- noad_options(tail) |= noad_option_phantom;
- break;
- case void_modifier_code:
- noad_options(tail) |= noad_option_void;
- break;
- case source_modifier_code:
- if (tex_scan_keyword("nucleus")) {
- noad_options(tail) |= noad_option_source_on_nucleus;
+ if (cur_list.head != tail) {
+ switch (node_type(tail)) {
+ case simple_noad:
+ switch (cur_chr) {
+ case adapt_to_left_modifier_code:
+ noad_options(tail) = unset_option(noad_options(tail), noad_option_adapt_to_right_size);
+ noad_options(tail) |= noad_option_adapt_to_left_size;
+ break;
+ case adapt_to_right_modifier_code:
+ noad_options(tail) = unset_option(noad_options(tail), noad_option_adapt_to_left_size);
+ noad_options(tail) |= noad_option_adapt_to_right_size;
+ break;
+ /* todo: actually this one can also be used for other types */
+ case axis_modifier_code:
+ noad_options(tail) |= noad_option_axis;
+ break;
+ case no_axis_modifier_code:
+ noad_options(tail) |= noad_option_no_axis;
+ break;
+ case phantom_modifier_code:
+ noad_options(tail) |= noad_option_phantom;
+ break;
+ case void_modifier_code:
+ noad_options(tail) |= noad_option_void;
+ break;
+ case source_modifier_code:
+ if (tex_scan_keyword("nucleus")) {
+ noad_options(tail) |= noad_option_source_on_nucleus;
+ }
+ noad_source(tail) = tex_scan_int(0, NULL);
+ break;
+ case openup_height_modifier_code:
+ noad_options(tail) |= noad_option_openup_height;
+ noad_height(tail) = tex_scan_dimen(0, 0, 0, 0, NULL);
+ break;
+ case openup_depth_modifier_code:
+ noad_options(tail) |= noad_option_openup_depth;
+ noad_depth(tail) = tex_scan_dimen(0, 0, 0, 0, NULL);
+ break;
+ case display_limits_modifier_code:
+ noad_options(tail) = unset_option(noad_options(tail), noad_option_limits | noad_option_no_limits);
+ break;
+ case limits_modifier_code:
+ noad_options(tail) = unset_option(noad_options(tail), noad_option_no_limits);
+ noad_options(tail) |= noad_option_limits;
+ break;
+ case no_limits_modifier_code:
+ noad_options(tail) = unset_option(noad_options(tail), noad_option_limits);
+ noad_options(tail) |= noad_option_no_limits;
+ break;
+ }
+ default:
+ switch (node_type(tail)) {
+ case accent_noad:
+ switch (cur_chr) {
+ case source_modifier_code:
+ if (tex_scan_keyword("nucleus")) {
+ noad_options(tail) |= noad_option_source_on_nucleus;
+ }
+ noad_source(tail) = tex_scan_int(0, NULL);
+ break;
+ }
+
}
- noad_source(tail) = tex_scan_int(0, NULL);
- break;
- case openup_height_modifier_code:
- noad_options(tail) |= noad_option_openup_height;
- noad_height(tail) = tex_scan_dimen(0, 0, 0, 0, NULL);
- break;
- case openup_depth_modifier_code:
- noad_options(tail) |= noad_option_openup_depth;
- noad_depth(tail) = tex_scan_dimen(0, 0, 0, 0, NULL);
- break;
- case display_limits_modifier_code:
- noad_options(tail) = unset_option(noad_options(tail), noad_option_limits | noad_option_no_limits);
- break;
- case limits_modifier_code:
- noad_options(tail) = unset_option(noad_options(tail), noad_option_no_limits);
- noad_options(tail) |= noad_option_limits;
- break;
- case no_limits_modifier_code:
- noad_options(tail) = unset_option(noad_options(tail), noad_option_limits);
- noad_options(tail) |= noad_option_no_limits;
break;
}
}