gbranden pushed a commit to branch master in repository groff. commit 7f643d1f765c53437471207ffbff11d01e38f57e Author: G. Branden Robinson <g.branden.robin...@gmail.com> AuthorDate: Fri Feb 7 18:50:18 2025 -0600
[troff]: Revert most of Savannah #66387 fix. Retain unit test, which fails at this commit. See Savannah #66392 for background. --- ChangeLog | 39 +++------------------------------------ src/roff/troff/env.cpp | 45 +++------------------------------------------ src/roff/troff/env.h | 4 ---- 3 files changed, 6 insertions(+), 82 deletions(-) diff --git a/ChangeLog b/ChangeLog index e0be30d76..24581da80 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2602,47 +2602,14 @@ 2024-10-31 G. Branden Robinson <g.branden.robin...@gmail.com> - [troff]: Couple the current hyphenation language more tightly - with the environment. This is to ease maintenance of - multilingual documents, and address a curious situation where an - environment could bear an automatic hyphenation code that had - nothing to do with the selected hyphenation language, because - the `hla` request has to date never altered the environment. - - * src/roff/troff/env.h (class environment): Add private member - variable `language_code` of type `symbol`. Declare public - member functions `get_language_code()` and - `set_language_code()`. Declare `environment_switch()` as a - friend function. - * src/roff/troff/env.cpp (environment::environment): Plain - constructor initializes `language_code` as empty string. - (environment::environment): Copy constructor copies the language - code from the source object. - (environment::copy): Member function backing `evc` request - copies the language code from the source environment. - (environment::print_env): Report the hyphenation language code - in use by the environment. Clarify when the automatic - hyphenation mode is ignored because no hyphenation language is - configured in the environment. - (select_hyphenation_language): When the `hla` request is called - without an argument, set the current environment's hyphenation - language code to the empty string. With an argument, update the - environment's hyphenation to the value of the argument. Add - assertions prior to function return to enforce invariants: (1) - the current environment's hyphenation language code must not be - null and (2) the `current_language` global variable and the - current environment's hyphenation language code must agree. - (environment_copy, environment_switch): Set the - `current_language` global variable to current environment's - hyphenation language code. - (environment::get_language_code): Implement accessor. - (environment::set_language_code): Implement mutator. + Add test of hyphenation language as a global vs. environmental + property. * src/roff/groff/tests/\ current-language-and-environment-in-sync.sh: Add unit test. * src/roff/groff/groff.am (groff_TESTS): Run test. - Fixes <https://savannah.gnu.org/bugs/?66387>. + See <https://savannah.gnu.org/bugs/?66387>. 2024-10-30 G. Branden Robinson <g.branden.robin...@gmail.com> diff --git a/src/roff/troff/env.cpp b/src/roff/troff/env.cpp index 0e83cf46a..4abb05f56 100644 --- a/src/roff/troff/env.cpp +++ b/src/roff/troff/env.cpp @@ -787,7 +787,6 @@ environment::environment(symbol nm) line_number_indent(0), line_number_multiple(1), no_number_count(0), - language_code(""), hyphenation_mode(1), hyphenation_mode_default(1), hyphen_line_count(0), @@ -882,7 +881,6 @@ environment::environment(const environment *e) line_number_indent(e->line_number_indent), line_number_multiple(e->line_number_multiple), no_number_count(e->no_number_count), - language_code(e->language_code), hyphenation_mode(e->hyphenation_mode), hyphenation_mode_default(e->hyphenation_mode_default), hyphen_line_count(0), @@ -970,7 +968,6 @@ void environment::copy(const environment *e) no_number_count = e->no_number_count; tab_char = e->tab_char; leader_char = e->leader_char; - set_language_code(e->language_code.contents()); hyphenation_mode = e->hyphenation_mode; hyphenation_mode_default = e->hyphenation_mode_default; fontno = e->fontno; @@ -3553,10 +3550,6 @@ void environment::print_env() errprint(" lines remaining for which to suppress numbering: %1\n", no_number_count); } - const char *hl = language_code.contents(); - bool is_hyphenation_impossible = language_code.is_empty(); - errprint(" hyphenation language code: %1\n", - is_hyphenation_impossible ? "(none)" : hl); string hf = hyphenation_mode ? "on" : "off"; if (hyphenation_mode & HYPHEN_NOT_LAST_LINE) hf += ", not on line before vertical position trap"; @@ -3569,10 +3562,8 @@ void environment::print_env() if (hyphenation_mode & HYPHEN_NOT_FIRST_CHARS) hf += ", not allowed within first two characters"; hf += '\0'; - errprint(" hyphenation mode: %1 (%2)%3\n", hyphenation_mode, - hf.contents(), - is_hyphenation_impossible ? " [no hyphenation language]" - : ""); + errprint(" hyphenation mode: %1 (%2)\n", hyphenation_mode, + hf.contents()); errprint(" hyphenation mode default: %1\n", hyphenation_mode_default); errprint(" count of consecutive hyphenated lines: %1\n", @@ -3659,7 +3650,6 @@ static void select_hyphenation_language() { if (!has_arg()) { current_language = 0 /* nullptr */; - curenv->set_language_code(""); skip_line(); return; } @@ -3672,22 +3662,10 @@ static void select_hyphenation_language() (void) language_dictionary.lookup(nm, static_cast<hyphenation_language *>(current_language)); } - curenv->set_language_code(nm.contents()); } - assert(!(curenv->get_language_code().is_null())); - if (current_language != 0 /* nullptr */) - assert(strcmp(current_language->name.contents(), - curenv->get_language_code().contents()) == 0); skip_line(); } -// The environment class has no visibility into which hyphenation -// languages are defined; it has only a code that is either empty -// or must reference a valid one (and since the code uniquely -// identifies a language, a `const char *` is more ergonomic than a -// pointer to a type that's not visible in the class's scope). So -// updating that code is a two-step process. - void environment_copy() { if (!has_arg()) { @@ -3701,27 +3679,14 @@ void environment_copy() symbol nm = get_long_name(); assert(nm != 0 /* nullptr */); e = static_cast<environment *>(env_dictionary.lookup(nm)); - if (e != 0 /* nullptr */) { + if (e != 0 /* nullptr */) curenv->copy(e); - current_language = static_cast<hyphenation_language *> - (language_dictionary.lookup(e->get_language_code())); - } else error("cannot copy from nonexistent environment '%1'", nm.contents()); skip_line(); } -symbol environment::get_language_code() -{ - return language_code; -} - -void environment::set_language_code(const char *lang) -{ - language_code = lang; -} - void environment_switch() { if (curenv->is_dummy()) { @@ -3737,8 +3702,6 @@ void environment_switch() bool seen_eol = curenv->seen_eol; bool suppress_next_eol = curenv->suppress_next_eol; curenv = env_stack->env; - current_language = static_cast<hyphenation_language *> - (language_dictionary.lookup(curenv->language_code)); curenv->seen_space = seen_space; curenv->seen_eol = seen_eol; curenv->suppress_next_eol = suppress_next_eol; @@ -3756,8 +3719,6 @@ void environment_switch() } env_stack = new env_list_node(curenv, env_stack); curenv = e; - current_language = static_cast<hyphenation_language *> - (language_dictionary.lookup(curenv->language_code)); } } skip_line(); diff --git a/src/roff/troff/env.h b/src/roff/troff/env.h index 1d70f5529..6b4ec03f9 100644 --- a/src/roff/troff/env.h +++ b/src/roff/troff/env.h @@ -212,7 +212,6 @@ class environment { int line_number_indent; // in digit spaces int line_number_multiple; int no_number_count; - symbol language_code; unsigned hyphenation_mode; unsigned hyphenation_mode_default; int hyphen_line_count; @@ -313,8 +312,6 @@ public: hunits get_input_line_position(); const char *get_tabs(); int is_using_line_tabs(); - symbol get_language_code(); - void set_language_code(const char *); unsigned get_hyphenation_mode(); unsigned get_hyphenation_mode_default(); int get_hyphen_line_max(); @@ -398,7 +395,6 @@ public: friend void number_lines(); friend void leader_character(); friend void tab_character(); - friend void environment_switch(); friend void hyphenate_request(); friend void set_hyphenation_mode_default(); friend void no_hyphenate(); _______________________________________________ groff-commit mailing list groff-commit@gnu.org https://lists.gnu.org/mailman/listinfo/groff-commit