gbranden pushed a commit to branch master
in repository groff.
commit ece4499a2aee21f0f01be8bfed2b2f50460330b4
Author: G. Branden Robinson <[email protected]>
AuthorDate: Sat Mar 15 15:43:34 2025 -0500
[troff]: Implement recursive node dumping (8k/9).
* src/roff/troff/node.cpp (class kern_pair_node): Add `dump_node` member
function, overriding virtual function in `node` base class.
(kern_pair_node::dump_node): Disclose more information, namely the
contents of any defined nodes within.
Changes `pline` request output as follows.
-{"type": "kern_pair_node", "diversion level": 0, "is_special_node": false,
"amount": -100},
+{"type": "kern_pair_node", "diversion level": 0, "is_special_node": false,
"amount": -100, "n1": {"type": "glyph_node", "diversion level": 0,
"is_special_node": false, "character": "k"}, "n2": {"type": "glyph_node",
"diversion level": 0, "is_special_node": false, "character": "e"}},
-{"type": "dbreak_node", "diversion level": 0, "is_special_node": false,
"none": {"type": "glyph_node", "diversion level": 0, "is_special_node": false,
"character": "r"}, "pre": {"type": "kern_pair_node", "diversion level": 0,
"is_special_node": false, "amount": -200}},
+{"type": "dbreak_node", "diversion level": 0, "is_special_node": false,
"none": {"type": "glyph_node", "diversion level": 0, "is_special_node": false,
"character": "r"}, "pre": {"type": "kern_pair_node", "diversion level": 0,
"is_special_node": false, "amount": -200, "n1": {"type": "glyph_node",
"diversion level": 0, "is_special_node": false, "character": "r"}, "n2":
{"type": "glyph_node", "diversion level": 0, "is_special_node": false, "special
character": "hy"}}},
---
ChangeLog | 8 ++++++++
src/roff/troff/node.cpp | 24 ++++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index c18ed59fe..9be5d62e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2025-03-15 G. Branden Robinson <[email protected]>
+
+ * src/roff/troff/node.cpp (class kern_pair_node): Add
+ `dump_node` member function, overriding virtual function in
+ `node` base class.
+ (kern_pair_node::dump_node): Disclose more information, namely
+ the contents of any contained nodes.
+
2025-03-15 G. Branden Robinson <[email protected]>
* src/roff/troff/node.cpp (dbreak_node::dump_node): Refactor to
diff --git a/src/roff/troff/node.cpp b/src/roff/troff/node.cpp
index d0448d671..f43dddb8d 100644
--- a/src/roff/troff/node.cpp
+++ b/src/roff/troff/node.cpp
@@ -1990,8 +1990,8 @@ public:
void dump_node();
};
-// TODO: Do not derive from `container_node`; implement custom double
-// container dumper in dump_node().
+// Not derived from `container_node`; implements custom double container
+// dumper in dump_node().
class kern_pair_node : public node {
hunits amount;
node *n1;
@@ -2020,6 +2020,7 @@ public:
bool is_tag();
void vertical_extent(vunits *, vunits *);
void dump_properties();
+ void dump_node();
};
// Not derived from `container_node`; implements custom triple container
@@ -2332,6 +2333,25 @@ void kern_pair_node::dump_properties()
fflush(stderr);
}
+void kern_pair_node::dump_node()
+{
+ fputc('{', stderr);
+ // Flush so that in case something goes wrong with property dumping,
+ // we know that we traversed to a new node.
+ fflush(stderr);
+ dump_properties();
+ if (n1 != 0 /* nullptr */) {
+ fputs(", \"n1\": ", stderr);
+ n1->dump_node();
+ }
+ if (n2 != 0 /* nullptr */) {
+ fputs(", \"n2\": ", stderr);
+ n2->dump_node();
+ }
+ fputc('}', stderr);
+ fflush(stderr);
+}
+
dbreak_node::dbreak_node(node *n, node *p, statem *s, int divlevel,
node *x)
: node(x, s, divlevel), none(n), pre(p), post(0 /* nullptr */)
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit