gbranden pushed a commit to branch master
in repository groff.
commit 3648a3be66435e17c6cc4080e4146171b26ceca5
Author: G. Branden Robinson <[email protected]>
AuthorDate: Sat Mar 15 15:04:03 2025 -0500
[troff]: Implement recursive node dumping (8i/9).
* src/roff/troff/node.cpp (class ligature_node): Add `dump_node` member
function, overriding virtual function in `node` base class.
(ligature_node::dump_node): Disclose more information, namely the
contents of any contained nodes.
Changes `pline` request output as follows.
-{"type": "ligature_node", "diversion level": 0, "is_special_node": false,
"special character": "fl"},
+{"type": "ligature_node", "diversion level": 0, "is_special_node": false,
"n1": {"type": "glyph_node", "diversion level": 0, "is_special_node": false,
"character": "f"}, "n2": {"type": "glyph_node", "diversion level": 0,
"is_special_node": false, "character": "l"}},
---
ChangeLog | 8 ++++++++
src/roff/troff/node.cpp | 24 ++++++++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index f1bcf224a..68b2d7627 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2025-03-15 G. Branden Robinson <[email protected]>
+
+ * src/roff/troff/node.cpp (class ligature_node): Add `dump_node`
+ member function, overriding virtual function in `node` base
+ class.
+ (ligature_node::dump_node): Disclose more information, namely
+ the contents of any contained nodes.
+
2025-03-15 G. Branden Robinson <[email protected]>
[troff]: Derive class `bracket_node` from struct
diff --git a/src/roff/troff/node.cpp b/src/roff/troff/node.cpp
index 6df4bccd5..c82b02517 100644
--- a/src/roff/troff/node.cpp
+++ b/src/roff/troff/node.cpp
@@ -1961,8 +1961,8 @@ public:
bool is_tag();
};
-// 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 ligature_node : public glyph_node {
node *n1;
node *n2;
@@ -1987,6 +1987,7 @@ public:
const char *type();
bool causes_tprint();
bool is_tag();
+ void dump_node();
};
// TODO: Do not derive from `container_node`; implement custom double
@@ -2299,6 +2300,25 @@ node *ligature_node::add_self(node *n, hyphen_list **p)
return n;
}
+void ligature_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);
+ node::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);
+}
+
kern_pair_node::kern_pair_node(hunits n, node *first, node *second,
statem* s, int divlevel, node *x)
: node(x, s, divlevel), amount(n), n1(first), n2(second)
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit