gbranden pushed a commit to branch master
in repository groff.
commit d667af72e162c3ef269f7da269ab75f186ad9e4c
Author: G. Branden Robinson <[email protected]>
AuthorDate: Wed Feb 26 04:40:23 2025 -0600
[troff]: Improve `node` types' const-correctness.
* src/roff/troff/node.{h,cpp}: Improve `const`-correctness of
`ascii_output_file` class and related helper functions.
* src/roff/troff/node.h (struct node, class space_node)
(class hmotion_node, class space_char_hmotion_node)
(class zero_width_node, class left_italic_corrected_node): Mark
`ascii_print()` member functions' `ascii_output_file` pointer argument
as `const`.
* src/roff/troff/node.cpp (class ascii_output_file): Declare `outc()`
and `outs()` member functions as `const` (for our C-only readers, this
means they don't mutate the object upon which they're called).
(ascii_output_file::outc, ascii_output_file::outs): Mark them as
`const` in corresponding definitions.
(class glyph_node, class ligature_node, class kern_pair_node)
(class dbreak_node, class glyph_node, class ligature_node)
(class italic_corrected_node, class break_char_node)
(class composite_node): Mark `ascii_print()` member functions'
`ascii_output_file` pointer argument as `const`.
(italic_corrected_node::ascii_print)
(break_char_node::ascii_print, dbreak_node::ascii_print)
(kern_pair_node::ascii_print, node::ascii_print)
(space_node::ascii_print, hmotion_node::ascii_print)
(space_char_hmotion_node::ascii_print)
(zero_width_node::ascii_print, composite_node::ascii_print)
(left_italic_corrected_node::ascii_print): Mark them as `const` in
corresponding definitions.
(ascii_print_node_list, ascii_print_reverse_node_list): Mark
`ascii_output_file` pointer argument as `const`.
---
ChangeLog | 33 ++++++++++++++++++++++++++++++
src/roff/troff/node.cpp | 54 +++++++++++++++++++++++++------------------------
src/roff/troff/node.h | 12 +++++------
3 files changed, 67 insertions(+), 32 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 0c8e08c44..5eb4dc56e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,36 @@
+2025-02-26 G. Branden Robinson <[email protected]>
+
+ * src/roff/troff/node.{h,cpp}: Improve `const`-correctness of
+ `ascii_output_file` class and related helper functions.
+
+ * src/roff/troff/node.h (struct node, class space_node)
+ (class hmotion_node, class space_char_hmotion_node)
+ (class zero_width_node, class left_italic_corrected_node): Mark
+ `ascii_print()` member functions' `ascii_output_file` pointer
+ argument as `const`.
+
+ * src/roff/troff/node.cpp (class ascii_output_file): Declare
+ `outc()` and `outs()` member functions as `const` (for our
+ C-only readers, this means they don't mutate the object upon
+ which they're called).
+ (ascii_output_file::outc, ascii_output_file::outs): Mark them
+ as `const` in corresponding definitions.
+ (class glyph_node, class ligature_node, class kern_pair_node)
+ (class dbreak_node, class glyph_node, class ligature_node)
+ (class italic_corrected_node, class break_char_node)
+ (class composite_node): Mark `ascii_print()` member functions'
+ `ascii_output_file` pointer argument as `const`.
+ (italic_corrected_node::ascii_print)
+ (break_char_node::ascii_print, dbreak_node::ascii_print)
+ (kern_pair_node::ascii_print, node::ascii_print)
+ (space_node::ascii_print, hmotion_node::ascii_print)
+ (space_char_hmotion_node::ascii_print)
+ (zero_width_node::ascii_print, composite_node::ascii_print)
+ (left_italic_corrected_node::ascii_print): Mark them as `const`
+ in corresponding definitions.
+ (ascii_print_node_list, ascii_print_reverse_node_list): Mark
+ `ascii_output_file` pointer argument as `const`.
+
2025-02-26 G. Branden Robinson <[email protected]>
* src/roff/troff/node.cpp: Fix code style nit.
diff --git a/src/roff/troff/node.cpp b/src/roff/troff/node.cpp
index 4ba404a39..58e9148a8 100644
--- a/src/roff/troff/node.cpp
+++ b/src/roff/troff/node.cpp
@@ -765,17 +765,17 @@ public:
void really_transparent_char(unsigned char);
void really_print_line(hunits x, vunits y, node *n, vunits, vunits, hunits
width);
void really_begin_page(int pageno, vunits page_length);
- void outc(unsigned char c);
- void outs(const char *s);
+ void outc(unsigned char c) const;
+ void outs(const char *s) const;
};
-void ascii_output_file::outc(unsigned char c)
+void ascii_output_file::outc(unsigned char c) const
{
if (fp != 0 /* nullptr */)
fputc(c, fp);
}
-void ascii_output_file::outs(const char *s)
+void ascii_output_file::outs(const char *s) const
{
if (fp != 0 /* nullptr */) {
fputc('<', fp);
@@ -1925,7 +1925,7 @@ public:
void zero_width_tprint(troff_output_file *);
hyphen_list *get_hyphen_list(hyphen_list *, int *);
node *add_self(node *, hyphen_list **);
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
int character_type();
bool is_same_as(node *);
@@ -1953,7 +1953,7 @@ public:
node *copy();
node *add_self(node *, hyphen_list **);
hyphen_list *get_hyphen_list(hyphen_list *, int *);
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
bool is_same_as(node *);
const char *type();
@@ -1981,7 +1981,7 @@ public:
void tprint(troff_output_file *);
hyphenation_type get_hyphenation_type();
int ends_sentence();
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
bool is_same_as(node *);
const char *type();
@@ -2012,7 +2012,7 @@ public:
int ends_sentence();
void split(int, node **, node **);
hyphenation_type get_hyphenation_type();
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
bool is_same_as(node *);
const char *type();
@@ -2201,7 +2201,7 @@ hyphenation_type glyph_node::get_hyphenation_type()
return HYPHEN_MIDDLE;
}
-void glyph_node::ascii_print(ascii_output_file *ascii)
+void glyph_node::ascii_print(const ascii_output_file *ascii)
{
unsigned char c = ci->get_ascii_code();
if (c != '\0')
@@ -2265,7 +2265,7 @@ node *ligature_node::copy()
#endif
}
-void ligature_node::ascii_print(ascii_output_file *ascii)
+void ligature_node::ascii_print(const ascii_output_file *ascii)
{
n1->ascii_print(ascii);
n2->ascii_print(ascii);
@@ -2670,7 +2670,7 @@ public:
node * = 0 /* nullptr */);
~italic_corrected_node();
node *copy();
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
hunits width();
node *last_char_node();
@@ -2748,7 +2748,7 @@ hunits italic_corrected_node::subscript_correction()
return n->subscript_correction() - x;
}
-void italic_corrected_node::ascii_print(ascii_output_file *out)
+void italic_corrected_node::ascii_print(const ascii_output_file *out)
{
n->ascii_print(out);
}
@@ -2824,7 +2824,7 @@ public:
hyphen_list *get_hyphen_list(hyphen_list *, int *);
void tprint(troff_output_file *);
void zero_width_tprint(troff_output_file *);
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
hyphenation_type get_hyphenation_type();
int overlaps_vertically();
@@ -2947,7 +2947,7 @@ hyphenation_type break_char_node::get_hyphenation_type()
return HYPHEN_MIDDLE;
}
-void break_char_node::ascii_print(ascii_output_file *ascii)
+void break_char_node::ascii_print(const ascii_output_file *ascii)
{
ch->ascii_print(ascii);
}
@@ -3531,7 +3531,8 @@ void vline_node::vertical_extent(vunits *min, vunits *max)
/* ascii_print methods */
-static void ascii_print_node_list(ascii_output_file *ascii, node *n)
+static void ascii_print_node_list(const ascii_output_file *ascii,
+ node *n)
{
node *nn = n;
while(nn != 0 /* nullptr */) {
@@ -3540,7 +3541,8 @@ static void ascii_print_node_list(ascii_output_file
*ascii, node *n)
}
}
-static void ascii_print_reverse_node_list(ascii_output_file *ascii, node *n)
+static void ascii_print_reverse_node_list(
+ const ascii_output_file *ascii, node *n)
{
if (0 /* nullptr */ == n)
return;
@@ -3548,40 +3550,40 @@ static void
ascii_print_reverse_node_list(ascii_output_file *ascii, node *n)
n->ascii_print(ascii);
}
-void dbreak_node::ascii_print(ascii_output_file *ascii)
+void dbreak_node::ascii_print(const ascii_output_file *ascii)
{
ascii_print_reverse_node_list(ascii, none);
}
-void kern_pair_node::ascii_print(ascii_output_file *ascii)
+void kern_pair_node::ascii_print(const ascii_output_file *ascii)
{
n1->ascii_print(ascii);
n2->ascii_print(ascii);
}
-void node::ascii_print(ascii_output_file *)
+void node::ascii_print(const ascii_output_file *)
{
}
-void space_node::ascii_print(ascii_output_file *ascii)
+void space_node::ascii_print(const ascii_output_file *ascii)
{
if (!n.is_zero())
ascii->outc(' ');
}
-void hmotion_node::ascii_print(ascii_output_file *ascii)
+void hmotion_node::ascii_print(const ascii_output_file *ascii)
{
// this is pretty arbitrary
if (n >= points_to_units(2))
ascii->outc(' ');
}
-void space_char_hmotion_node::ascii_print(ascii_output_file *ascii)
+void space_char_hmotion_node::ascii_print(const ascii_output_file *ascii)
{
ascii->outc(' ');
}
-void zero_width_node::ascii_print(ascii_output_file *out)
+void zero_width_node::ascii_print(const ascii_output_file *out) const
{
ascii_print_node_list(out, n);
}
@@ -4330,7 +4332,7 @@ public:
units size();
void tprint(troff_output_file *);
hyphenation_type get_hyphenation_type();
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
hyphen_list *get_hyphen_list(hyphen_list *, int *);
node *add_self(node *, hyphen_list **);
@@ -4411,7 +4413,7 @@ void composite_node::asciify(macro *m)
m->append(this);
}
-void composite_node::ascii_print(ascii_output_file *ascii)
+void composite_node::ascii_print(const ascii_output_file *ascii)
{
unsigned char c = ci->get_ascii_code();
if (c != 0)
@@ -5615,7 +5617,7 @@ bool left_italic_corrected_node::is_same_as(node *nd)
&& same_node(n, ((left_italic_corrected_node *)nd)->n));
}
-void left_italic_corrected_node::ascii_print(ascii_output_file *out)
+void left_italic_corrected_node::ascii_print(const ascii_output_file *out)
{
if (n)
n->ascii_print(out);
diff --git a/src/roff/troff/node.h b/src/roff/troff/node.h
index fe96fa1c6..3bf034876 100644
--- a/src/roff/troff/node.h
+++ b/src/roff/troff/node.h
@@ -85,7 +85,7 @@ struct node {
virtual node *add_discretionary_hyphen();
virtual node *add_self(node *, hyphen_list **);
virtual hyphen_list *get_hyphen_list(hyphen_list *, int *);
- virtual void ascii_print(ascii_output_file *);
+ virtual void ascii_print(const ascii_output_file *);
virtual void asciify(macro *);
virtual int discardable();
virtual void spread_space(int *, hunits *);
@@ -201,7 +201,7 @@ public:
bool /* is_inner */ = false);
int nbreaks();
void split(int, node **, node **);
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
bool is_same_as(node *);
void asciify(macro *);
const char *type();
@@ -350,7 +350,7 @@ public:
void asciify(macro *);
void tprint(troff_output_file *);
hunits width();
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
bool is_same_as(node *);
const char *type();
bool causes_tprint();
@@ -367,7 +367,7 @@ public:
space_char_hmotion_node(hunits, color *, statem *, int,
node * /* nxt */ = 0 /* nullptr */);
node *copy();
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
void tprint(troff_output_file *);
bool is_same_as(node *);
@@ -461,7 +461,7 @@ public:
~zero_width_node();
node *copy();
void tprint(troff_output_file *);
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *) const;
bool is_same_as(node *);
const char *type();
bool causes_tprint();
@@ -480,7 +480,7 @@ public:
node * /* xx */ = 0 /* nullptr */);
~left_italic_corrected_node();
void tprint(troff_output_file *);
- void ascii_print(ascii_output_file *);
+ void ascii_print(const ascii_output_file *);
void asciify(macro *);
node *copy();
bool is_same_as(node *);
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit