gbranden pushed a commit to branch master
in repository groff.

commit b8d7c1481bd8241e08f8b6f2988ed400260ff5dd
Author: G. Branden Robinson <[email protected]>
AuthorDate: Thu May 15 13:12:46 2025 -0500

    [troff]: Refactor margin character flag handling.
    
    Namespace it inside the `environment` class and use enumeration
    constants rather than global ones.
    
    * src/roff/troff/env.h: Drop global constant unsigned `int`s
      `MARGIN_CHARACTER_ON` and `MARGIN_CHARACTER_NEXT` in favor of...
      (class enviromment): ...a public anonymous enum type with
      constant values `MC_ON` and `MC_NEXT`.
    
    * src/roff/troff/env.cpp (environment::environment): Use
      unsigned integer literal when initializing `margin_character_flags`
      member variable.
    
      (margin_character, environment::print_env): Migrate to the namespaced
      enumeration constants.
    
      (margin_character, environment::output_line): Use unsigned integer
      literal when comparing to `margin_character_flags` member variable.
---
 ChangeLog              | 19 +++++++++++++++++++
 src/roff/troff/env.cpp | 21 ++++++++++-----------
 src/roff/troff/env.h   | 12 +++++++-----
 3 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index de5eac7ee..9bd9dd037 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2025-05-15  G. Branden Robinson <[email protected]>
+
+       [troff]: Refactor margin character flag handling.  Namespace it
+       inside the `environment` class and use enumeration constants
+       rather than global ones.
+
+       * src/roff/troff/env.h: Drop global constant unsigned `int`s
+       `MARGIN_CHARACTER_ON` and `MARGIN_CHARACTER_NEXT` in favor of...
+       (class enviromment): ...a public anonymous enum type with
+       constant values `MC_ON` and `MC_NEXT`.
+       * src/roff/troff/env.cpp (environment::environment): Use
+       unsigned integer literal when initializing
+       `margin_character_flags` member variable.
+       (margin_character, environment::print_env): Migrate to the
+       namespaced enumeration constants.
+       (margin_character, environment::output_line): Use unsigned
+       integer literal when comparing to `margin_character_flags`
+       member variable.
+
 2025-05-15  G. Branden Robinson <[email protected]>
 
        * src/roff/troff/input.cpp (do_translate): Fix code style nit.
diff --git a/src/roff/troff/env.cpp b/src/roff/troff/env.cpp
index 443e639b3..4b6e85de5 100644
--- a/src/roff/troff/env.cpp
+++ b/src/roff/troff/env.cpp
@@ -788,7 +788,7 @@ environment::environment(symbol nm)
   has_current_field(false),
   is_discarding(false),
   is_spreading(false),
-  margin_character_flags(0),
+  margin_character_flags(0U),
   margin_character_node(0 /* nullptr */),
   margin_character_distance(points_to_units(10)),
   numbering_nodes(0 /* nullptr */),
@@ -1653,8 +1653,8 @@ void margin_character()
     if (nd) {
       delete curenv->margin_character_node;
       curenv->margin_character_node = nd;
-      curenv->margin_character_flags = MARGIN_CHARACTER_ON
-                                      | MARGIN_CHARACTER_NEXT;
+      curenv->margin_character_flags = environment::MC_ON
+                                      | environment::MC_NEXT;
       hunits d;
       if (has_arg() && get_hunits(&d, 'm'))
        curenv->margin_character_distance = d;
@@ -1662,8 +1662,8 @@ void margin_character()
   }
   else {
     check_missing_character();
-    curenv->margin_character_flags &= ~MARGIN_CHARACTER_ON;
-    if (curenv->margin_character_flags == 0) {
+    curenv->margin_character_flags &= ~environment::MC_ON;
+    if (curenv->margin_character_flags == 0U) {
       delete curenv->margin_character_node;
       curenv->margin_character_node = 0 /* nullptr */;
     }
@@ -1901,14 +1901,14 @@ void environment::newline()
 void environment::output_line(node *nd, hunits width, bool was_centered)
 {
   prev_text_length = width;
-  if (margin_character_flags) {
+  if (margin_character_flags > 0U) {
     hunits d = line_length + margin_character_distance - saved_indent
               - width;
     if (d > 0) {
       nd = new hmotion_node(d, get_fill_color(), nd);
       width += d;
     }
-    margin_character_flags &= ~MARGIN_CHARACTER_NEXT;
+    margin_character_flags &= ~MC_NEXT;
     node *tem;
     if (!margin_character_flags) {
       tem = margin_character_node;
@@ -3559,12 +3559,11 @@ void environment::print_env()
   errprint("  forcing adjustment: %1\n", is_spreading ? "yes" : "no");
   if (margin_character_node != 0 /* nullptr */) {
     errprint("  margin character flags: %1\n",
-            margin_character_flags == MARGIN_CHARACTER_ON
+            margin_character_flags == MC_ON
               ? "on"
-              : margin_character_flags == MARGIN_CHARACTER_NEXT
+              : margin_character_flags == MC_NEXT
                   ? "next"
-                  : margin_character_flags == (MARGIN_CHARACTER_ON
-                                               | MARGIN_CHARACTER_NEXT)
+                  : margin_character_flags == (MC_ON | MC_NEXT)
                       ? "on, next"
                       : "none");
     errprint("  margin character distance: %1u\n",
diff --git a/src/roff/troff/env.h b/src/roff/troff/env.h
index e2c2bd51c..5e0cedc80 100644
--- a/src/roff/troff/env.h
+++ b/src/roff/troff/env.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-2024 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2025 Free Software Foundation, Inc.
      Written by James Clark ([email protected])
 
 This file is part of groff.
@@ -92,9 +92,6 @@ public:
   const char *to_string();
 };
 
-const unsigned MARGIN_CHARACTER_ON = 1;
-const unsigned MARGIN_CHARACTER_NEXT = 2;
-
 class charinfo;
 struct node;
 struct breakpoint;
@@ -203,7 +200,7 @@ class environment {
   bool tab_precedes_field;
   bool is_discarding;
   bool is_spreading;           // set by \p
-  unsigned margin_character_flags;
+  unsigned char margin_character_flags;
   node *margin_character_node;
   hunits margin_character_distance;
   node *numbering_nodes;
@@ -254,6 +251,11 @@ class environment {
                      node * /* next */ = 0 /* nullptr */);
   node *get_prev_char();
 public:
+  // C++11: Use `enum : unsigned char`.
+  enum {
+    MC_ON = 0x1,
+    MC_NEXT = 0x2
+  };
   bool seen_space;
   bool seen_eol;
   bool suppress_next_eol;

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

Reply via email to