gbranden pushed a commit to branch master
in repository groff.

commit e1f1d8e3aa2263c881a8202818607a0d4f837d73
Author: G. Branden Robinson <[email protected]>
AuthorDate: Tue Sep 10 01:13:00 2024 -0500

    [troff]: Trivially refactor.
    
    * src/roff/troff/div.h (class top_level_diversion): Rename
      `before_first_page` to `before_first_page_status` to emphasize its
      non-Boolean nature.
    
    * src/roff/troff/div.cpp (top_level_diversion::top_level_diversion):
      Migrate constructor.
    
    * src/roff/troff/div.cpp (top_level_diversion::top_level_diversion):
      (top_level_diversion::output)
      (top_level_diversion::transparent_output)
      (top_level_diversion::copy_file)
      (top_level_diversion::space)
      (top_level_diversion::begin_page)
      (vertical_position_reg::get_value)
      (vertical_position_reg::get_string)
      (nl_reg::get_string):
    * src/roff/troff/env.cpp (environment::make_tag)
      (environment::do_break, title):
    * src/roff/troff/input.cpp (possibly_handle_first_page_transition)
      (device_request, copy_file, transparent_file): Explicitly compare to
      integer literal instead of punning to Boolean.
---
 ChangeLog                | 22 ++++++++++++++++++++++
 src/roff/troff/div.cpp   | 32 ++++++++++++++++----------------
 src/roff/troff/div.h     |  2 +-
 src/roff/troff/env.cpp   |  7 +++----
 src/roff/troff/input.cpp |  9 +++++----
 5 files changed, 47 insertions(+), 25 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index db78e4257..2d1597a86 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2024-09-10  G. Branden Robinson <[email protected]>
+
+       * src/roff/troff/div.h (class top_level_diversion): Rename
+       `before_first_page` to `before_first_page_status` to emphasize
+       its non-Boolean nature.
+       * src/roff/troff/div.cpp
+       (top_level_diversion::top_level_diversion): Migrate constructor.
+       * src/roff/troff/div.cpp (top_level_diversion::output)
+       (top_level_diversion::transparent_output)
+       (top_level_diversion::copy_file)
+       (top_level_diversion::space)
+       (top_level_diversion::begin_page)
+       (vertical_position_reg::get_value)
+       (vertical_position_reg::get_string)
+       (nl_reg::get_string):
+       * src/roff/troff/env.cpp (environment::make_tag)
+       (environment::do_break, title):
+       * src/roff/troff/input.cpp
+       (possibly_handle_first_page_transition, device_request)
+       (copy_file, transparent_file): Explicitly compare to integer
+       literal instead of punning to Boolean.
+
 2024-09-10  G. Branden Robinson <[email protected]>
 
        * src/roff/troff/div.h (class top_level_diversion): Boolify
diff --git a/src/roff/troff/div.cpp b/src/roff/troff/div.cpp
index 45fb8f7f1..0f97c52fa 100644
--- a/src/roff/troff/div.cpp
+++ b/src/roff/troff/div.cpp
@@ -364,7 +364,7 @@ top_level_diversion::top_level_diversion()
   page_length(units_per_inch*11),
   prev_page_offset(units_per_inch), page_offset(units_per_inch),
   page_trap_list(0 /* nullptr */), overriding_next_page_number(false),
-  ejecting_page(false), before_first_page(1)
+  ejecting_page(false), before_first_page_status(1)
 {
 }
 
@@ -426,7 +426,7 @@ void top_level_diversion::output(node *nd, bool retain_size,
   is_in_no_space_mode = false;
   vunits next_trap_pos;
   trap *next_trap = find_next_trap(&next_trap_pos);
-  if (before_first_page && begin_page())
+  if ((before_first_page_status > 0) && begin_page())
     fatal("attempting diversion output before first page has started,"
          " when a top-of-page trap is defined; invoke break or flush"
          " request beforehand");
@@ -479,7 +479,7 @@ void top_level_diversion::output(node *nd, bool retain_size,
 
 void top_level_diversion::transparent_output(unsigned char c)
 {
-  if (before_first_page && begin_page())
+  if ((before_first_page_status > 0) && begin_page())
     fatal("attempting transparent output from top-level diversion"
          " before first page has started, when a top-of-page trap is"
          " defined; invoke break or flush request beforehand");
@@ -498,7 +498,7 @@ void top_level_diversion::transparent_output(node * /*n*/)
 // Implement the internals of `.cf`.
 void top_level_diversion::copy_file(const char *filename)
 {
-  if (before_first_page && begin_page())
+  if ((before_first_page_status > 0) && begin_page())
     fatal("attempting transparent copy of file to top-level diversion"
          " before first page has started, when a top-of-page trap is"
          " defined; invoke break or flush request beforehand");
@@ -513,7 +513,7 @@ void top_level_diversion::space(vunits n, bool forcing)
     else
       is_in_no_space_mode = false;
   }
-  if (before_first_page) {
+  if (before_first_page_status > 0) {
     begin_page(n);
     return;
   }
@@ -657,7 +657,7 @@ bool top_level_diversion::begin_page(vunits n)
     page_number = next_page_number;
     overriding_next_page_number = false;
   }
-  else if (before_first_page == 1)
+  else if (before_first_page_status == 1)
     page_number = 1;
   else
     page_number++;
@@ -668,11 +668,11 @@ bool top_level_diversion::begin_page(vunits n)
   vertical_position = V0;
   high_water_mark = V0;
   ejecting_page = false;
-  // If before_first_page was 2, then the top of page transition was
-  // undone using eg .nr nl 0-1.  See nl_reg::set_value.
-  if (before_first_page != 2)
+  // If before_first_page_status was 2, then the top of page transition
+  // was undone using ".nr nl 0-1" or similar.  See nl_reg::set_value.
+  if (before_first_page_status != 2)
     the_output->begin_page(page_number, page_length);
-  before_first_page = 0;
+  before_first_page_status = 0;
   nl_reg_contents = vertical_position.to_units();
   if ((honor_vertical_position_traps && (next_trap != 0 /* nullptr */))
       && (next_trap_pos == V0)) {
@@ -773,7 +773,7 @@ void begin_page()
   while (!tok.is_newline() && !tok.is_eof())
     tok.next();
   if (curdiv == topdiv) {
-    if (topdiv->before_first_page) {
+    if (topdiv->before_first_page_status > 0) {
       if (!want_break) {
        if (got_arg)
          topdiv->set_next_page_number(n);
@@ -1074,7 +1074,7 @@ public:
 
 bool vertical_position_reg::get_value(units *res)
 {
-  if (curdiv == topdiv && topdiv->before_first_page)
+  if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0))
     *res = -1;
   else
     *res = curdiv->get_vertical_position().to_units();
@@ -1083,7 +1083,7 @@ bool vertical_position_reg::get_value(units *res)
 
 const char *vertical_position_reg::get_string()
 {
-  if (curdiv == topdiv && topdiv->before_first_page)
+  if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0))
     return "-1";
   else
     return i_to_a(curdiv->get_vertical_position().to_units());
@@ -1218,11 +1218,11 @@ void nl_reg::set_value(units n)
   // the top-level diversion is 0 undoes the top of page transition,
   // so that the header macro will be called as if the top of page
   // transition hasn't happened.  This is used by Larry Wall's
-  // wrapman program.  Setting before_first_page to 2 rather than 1,
-  // tells top_level_diversion::begin_page not to call
+  // wrapman program.  Setting before_first_page_status to 2 rather than
+  // 1, tells top_level_diversion::begin_page not to call
   // output_file::begin_page again.
   if (n < 0 && topdiv->get_vertical_position() == V0)
-    topdiv->before_first_page = 2;
+    topdiv->before_first_page_status = 2;
 }
 
 class no_space_mode_reg : public reg {
diff --git a/src/roff/troff/div.h b/src/roff/troff/div.h
index daef2c0bf..4d734f74d 100644
--- a/src/roff/troff/div.h
+++ b/src/roff/troff/div.h
@@ -113,7 +113,7 @@ class top_level_diversion : public diversion {
   int next_page_number;
   bool ejecting_page;
 public:
-  int before_first_page;
+  int before_first_page_status; // three-valued Boolean :-|
   top_level_diversion();
   void output(node * /* nd */, bool /* retain_size */, vunits /* vs */,
              vunits /* post_vs */, hunits /* width */);
diff --git a/src/roff/troff/env.cpp b/src/roff/troff/env.cpp
index bb7808df1..bd7616603 100644
--- a/src/roff/troff/env.cpp
+++ b/src/roff/troff/env.cpp
@@ -2404,9 +2404,8 @@ node *environment::make_tag(const char *nm, int i)
      * need to emit tag for post-grohtml
      * but we check to see whether we can emit specials
      */
-    if (curdiv == topdiv && topdiv->before_first_page)
+    if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0))
       topdiv->begin_page();
-
     macro m;
     m.append_str("devtag:");
     for (const char *p = nm; *p; p++)
@@ -2531,7 +2530,7 @@ extern int global_diverted_space;
 void environment::do_break(bool want_adjustment)
 {
   bool was_centered = false;
-  if (curdiv == topdiv && topdiv->before_first_page) {
+  if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0)) {
     topdiv->begin_page();
     return;
   }
@@ -2615,7 +2614,7 @@ void title()
     skip_line();
     return;
   }
-  if (curdiv == topdiv && topdiv->before_first_page) {
+  if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0)) {
     handle_initial_title();
     return;
   }
diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp
index f70d00087..d77e11c7e 100644
--- a/src/roff/troff/input.cpp
+++ b/src/roff/troff/input.cpp
@@ -2941,7 +2941,8 @@ void do_request()
 
 inline int possibly_handle_first_page_transition()
 {
-  if (topdiv->before_first_page && curdiv == topdiv && !curenv->is_dummy()) {
+  if ((topdiv->before_first_page_status > 0) && (curdiv == topdiv)
+      && !curenv->is_dummy()) {
     handle_first_page_transition();
     return 1;
   }
@@ -5914,7 +5915,7 @@ static void device_request()
     if (c != ' ' && c != '\t')
       break;
   }
-  if (curdiv == topdiv && topdiv->before_first_page)
+  if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0))
     topdiv->begin_page();
   // Null characters can correspond to node types like vmotion_node that
   // are unrepresentable in a device extension command, and got scrubbed
@@ -8249,7 +8250,7 @@ void copy_file()
     skip_line();
     return;
   }
-  if (curdiv == topdiv && topdiv->before_first_page) {
+  if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0)) {
     handle_initial_request(COPY_FILE_REQUEST);
     return;
   }
@@ -8293,7 +8294,7 @@ void transparent_file()
     skip_line();
     return;
   }
-  if (curdiv == topdiv && topdiv->before_first_page) {
+  if ((curdiv == topdiv) && (topdiv->before_first_page_status > 0)) {
     handle_initial_request(TRANSPARENT_FILE_REQUEST);
     return;
   }

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

Reply via email to