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