This time I come with a patch. I propose to implement the following new read-only registers.
.it Interpolates the number of lines remaining in the input trap. .itc Interpolates 1 if the input trap respects \c, 0 otherwise. .itm Interpolates the name of the macro bound to the input trap. The above data are reported in `pev` output but there is no way to expose this information to a *roff document. The foregoing new registers would do so. Any objections to this extension? Regards, Branden
diff --git a/src/roff/troff/env.cpp b/src/roff/troff/env.cpp index ea3f0d9cf..2dfe5e1ab 100644 --- a/src/roff/troff/env.cpp +++ b/src/roff/troff/env.cpp @@ -427,6 +427,21 @@ int environment::get_no_number_count() return no_number_count; } +int environment::get_input_trap_line_count() +{ + return input_trap_count; +} + +int environment::get_input_trap_respects_continuation() +{ + return continued_input_trap; +} + +const char *environment::get_input_trap_macro() +{ + return input_trap.contents(); +} + void environment::add_italic_correction() { if (current_tab) { @@ -691,7 +706,7 @@ environment::environment(symbol nm) have_temporary_indent(0), underline_lines(0), underline_spaces(0), - input_trap_count(0), + input_trap_count(-1), continued_input_trap(false), line(0), prev_text_length(0), @@ -784,7 +799,7 @@ environment::environment(const environment *e) have_temporary_indent(0), underline_lines(0), underline_spaces(0), - input_trap_count(0), + input_trap_count(-1), continued_input_trap(false), line(0), prev_text_length(e->prev_text_length), @@ -865,7 +880,7 @@ void environment::copy(const environment *e) temporary_indent = 0; underline_lines = 0; underline_spaces = 0; - input_trap_count = 0; + input_trap_count = -1; continued_input_trap = false; prev_text_length = e->prev_text_length; width_total = 0; @@ -2589,7 +2604,8 @@ void no_adjust() void do_input_trap(bool respect_continuation) { - curenv->input_trap_count = 0; + curenv->input_trap_count = -1; + curenv->input_trap = 0 /* nullptr */; if (respect_continuation) curenv->continued_input_trap = true; else @@ -2598,7 +2614,7 @@ void do_input_trap(bool respect_continuation) if (has_arg() && get_integer(&n)) { if (n <= 0) warning(WARN_RANGE, - "number of lines for input trap must be greater than zero"); + "input trap line count must be greater than zero"); else { symbol s = get_name(true /* required */); if (!s.is_null()) { @@ -3520,6 +3536,9 @@ void init_env_requests() init_hunits_env_reg(".i", get_indent); init_hunits_env_reg(".in", get_saved_indent); init_int_env_reg(".int", get_prev_line_interrupted); + init_int_env_reg(".it", get_input_trap_line_count); + init_int_env_reg(".itc", get_input_trap_respects_continuation); + init_string_env_reg(".itm", get_input_trap_macro); init_int_env_reg(".linetabs", get_line_tabs); init_hunits_env_reg(".lt", get_title_length); init_int_env_reg(".j", get_adjust_mode); diff --git a/src/roff/troff/env.h b/src/roff/troff/env.h index 65b9f0103..0777a3c6b 100644 --- a/src/roff/troff/env.h +++ b/src/roff/troff/env.h @@ -314,6 +314,9 @@ public: hunits get_hyphenation_space(); hunits get_hyphenation_margin(); int get_center_lines(); + int get_input_trap_line_count(); + int get_input_trap_respects_continuation(); + const char *get_input_trap_macro(); int get_right_justify_lines(); int get_no_number_count(); int get_prev_line_interrupted() { return prev_line_interrupted; }
signature.asc
Description: PGP signature