gbranden pushed a commit to branch master
in repository groff.

commit aba2843a6550a536f945b820f10788064d5b6c81
Author: G. Branden Robinson <[email protected]>
AuthorDate: Tue Nov 4 11:50:02 2025 -0600

    [troff]: Slightly refactor.
    
    * src/roff/troff/input.cpp (do_overstrike)
      (do_bracket)
      (do_name_test)
      (do_expr_test)
      (do_zero_width_output)
      (get_line_arg)
      (do_width)
      (do_device_extension): Delay collecting the input level (interpolation
      depth) until we're sure the escape sequence we're interpreting is
      validly delimited.
---
 ChangeLog                | 13 +++++++++++++
 src/roff/troff/input.cpp | 14 +++++++-------
 2 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 14223b225..ae401b027 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2025-11-05  G. Branden Robinson <[email protected]>
+
+       * src/roff/troff/input.cpp (do_overstrike)
+       (do_bracket)
+       (do_name_test)
+       (do_expr_test)
+       (do_zero_width_output)
+       (get_line_arg)
+       (do_width)
+       (do_device_extension): Slightly refactor.  Delay collecting the
+       input level (interpolation depth) until we're sure the escape
+       sequence we're interpreting is validly delimited.
+
 2025-11-04  G. Branden Robinson <[email protected]>
 
        * src/roff/troff/input.cpp (token::is_usable_as_delimter): Fix
diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp
index 8e910ebe4..ca66dad6c 100644
--- a/src/roff/troff/input.cpp
+++ b/src/roff/troff/input.cpp
@@ -1683,7 +1683,6 @@ node *do_overstrike() // \o
 static node *do_bracket() // \b
 {
   bracket_node *bracketnode = new bracket_node;
-  int start_level = input_stack::get_level();
   token start_token;
   start_token.next();
   if (!want_att_compat && !start_token.is_usable_as_delimiter())
@@ -1706,6 +1705,7 @@ static node *do_bracket() // \b
     return 0 /* nullptr */;
   }
 #endif
+  int start_level = input_stack::get_level();
   for (;;) {
     tok.next();
     if (tok.is_newline() || tok.is_eof()) {
@@ -1734,7 +1734,6 @@ static node *do_bracket() // \b
 
 static const char *do_name_test() // \A
 {
-  int start_level = input_stack::get_level();
   token start_token;
   start_token.next();
   if (!want_att_compat && !start_token.is_usable_as_delimiter())
@@ -1754,6 +1753,7 @@ static const char *do_name_test() // \A
   if (!start_token.is_usable_as_delimiter(true /* report error */))
     return 0 /* nullptr */;
 #endif
+  int start_level = input_stack::get_level();
   bool got_bad_char = false;
   bool got_some_char = false;
   for (;;) {
@@ -1783,7 +1783,6 @@ static const char *do_expr_test() // \B
 {
   token start_token;
   start_token.next();
-  int start_level = input_stack::get_level();
   if (!want_att_compat
       && !start_token.is_usable_as_delimiter(true /* report error */))
     return 0 /* nullptr */;
@@ -1795,6 +1794,7 @@ static const char *do_expr_test() // \B
            start_token.description());
     return 0 /* nullptr */;
   }
+  int start_level = input_stack::get_level();
   tok.next();
   // disable all warning and error messages temporarily
   unsigned int saved_warning_mask = warning_mask;
@@ -1868,7 +1868,6 @@ static node *do_zero_width_output() // \Z
 {
   node *rev = new dummy_node;
   node *n = 0 /* nullptr */;
-  int start_level = input_stack::get_level();
   token start_token;
   start_token.next();
   if (!want_att_compat && !start_token.is_usable_as_delimiter())
@@ -1890,6 +1889,7 @@ static node *do_zero_width_output() // \Z
     return 0 /* nullptr */;
   }
 #endif
+  int start_level = input_stack::get_level();
   for (;;) {
     tok.next();
     if (tok.is_newline() || tok.is_eof()) {
@@ -5835,7 +5835,6 @@ static bool get_line_arg(units *n, unsigned char si, 
charinfo **cp)
 {
   token start_token;
   start_token.next();
-  int start_level = input_stack::get_level();
   if (!want_att_compat
       && !start_token.is_usable_as_delimiter(true /* report error */))
     return false;
@@ -5847,6 +5846,7 @@ static bool get_line_arg(units *n, unsigned char si, 
charinfo **cp)
            start_token.description());
     return false;
   }
+  int start_level = input_stack::get_level();
   tok.next();
   if (read_measurement(n, si)) {
     if (tok.is_dummy() || tok.is_transparent_dummy())
@@ -6125,7 +6125,6 @@ static void do_register() // \R
 
 static void do_width() // \w
 {
-  int start_level = input_stack::get_level();
   token start_token;
   start_token.next();
   if (!want_att_compat && !start_token.is_usable_as_delimiter())
@@ -6145,6 +6144,7 @@ static void do_width() // \w
   if (!start_token.is_usable_as_delimiter(true /* report error */))
     return;
 #endif
+  int start_level = input_stack::get_level();
   environment env(curenv);
   environment *oldenv = curenv;
   curenv = &env;
@@ -6435,7 +6435,6 @@ static void encode_character_for_device_output(macro 
*mac, const char c)
 
 static node *do_device_extension() // \X
 {
-  int start_level = input_stack::get_level();
   token start_token;
   start_token.next();
   if (!want_att_compat && !start_token.is_usable_as_delimiter())
@@ -6455,6 +6454,7 @@ static node *do_device_extension() // \X
   if (!start_token.is_usable_as_delimiter(true /* report error */))
     return 0 /* nullptr */;
 #endif
+  int start_level = input_stack::get_level();
   macro mac;
   if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0))
     topdiv->begin_page();

_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit

Reply via email to