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