gbranden pushed a commit to branch master in repository groff. commit ece4499a2aee21f0f01be8bfed2b2f50460330b4 Author: G. Branden Robinson <g.branden.robin...@gmail.com> 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 <g.branden.robin...@gmail.com> + + * 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 <g.branden.robin...@gmail.com> * 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 groff-commit@gnu.org https://lists.gnu.org/mailman/listinfo/groff-commit