diff options
Diffstat (limited to 'src/roff/troff/env.cc')
-rw-r--r-- | src/roff/troff/env.cc | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/roff/troff/env.cc b/src/roff/troff/env.cc index a7330ad1..1bd12cb6 100644 --- a/src/roff/troff/env.cc +++ b/src/roff/troff/env.cc @@ -601,6 +601,7 @@ environment::environment(symbol nm) underline_lines(0), underline_spaces(0), input_trap_count(0), + continued_input_trap(0), line(0), prev_text_length(0), width_total(0), @@ -690,6 +691,7 @@ environment::environment(const environment *e) underline_lines(0), underline_spaces(0), input_trap_count(0), + continued_input_trap(0), line(0), prev_text_length(e->prev_text_length), width_total(0), @@ -767,6 +769,7 @@ void environment::copy(const environment *e) underline_lines = 0; underline_spaces = 0; input_trap_count = 0; + continued_input_trap = 0; prev_text_length = e->prev_text_length; width_total = 0; space_total = 0; @@ -1632,8 +1635,9 @@ void environment::newline() hyphen_line_count = 0; } if (input_trap_count > 0) { - if (--input_trap_count == 0) - spring_trap(input_trap); + if (!(continued_input_trap && prev_line_interrupted)) + if (--input_trap_count == 0) + spring_trap(input_trap); } } @@ -2337,9 +2341,11 @@ void no_adjust() skip_line(); } -void input_trap() +void do_input_trap(int continued) { curenv->input_trap_count = 0; + if (continued) + curenv->continued_input_trap = 1; int n; if (has_arg() && get_integer(&n)) { if (n <= 0) @@ -2356,6 +2362,16 @@ void input_trap() skip_line(); } +void input_trap() +{ + do_input_trap(0); +} + +void input_trap_continued() +{ + do_input_trap(1); +} + /* tabs */ // must not be R or C or L or a legitimate part of a number expression @@ -3042,6 +3058,7 @@ const char *environment::get_requested_point_size_string() void init_env_requests() { init_request("it", input_trap); + init_request("itc", input_trap_continued); init_request("ad", adjust); init_request("na", no_adjust); init_request("ev", environment_switch); |