gbranden pushed a commit to branch master
in repository groff.
commit 45e77e894ec19a38ffa8722a76b6c9b2bdf5c7b3
Author: G. Branden Robinson <[email protected]>
AuthorDate: Mon Mar 3 04:08:58 2025 -0600
[troff]: Implement recursive node dumping (5n/9).
* src/roff/troff/node.h (class suppress_node): Specialize (override)
`dump_properties()` for this class.
* src/roff/troff/node.cpp (suppress_node::dump_properties): New member
function reports values of `is_on`, `emit_limits`, `filename` (if not
null), `position` (if not a null character), and `image_id`
properties.
"Suppress nodes" are some of groff's blacker magic, and are entangled
with grohtml. Given the following simple input document:
.EQ
x = 1
.EN
.pline
Hello suppress node world.
...processed with `groff -e -Thtml` (and application of `sort -u` to
stderr), this commit changes `pline` request output as follows.
-{"type": "suppress_node", "diversion level": 0, "is_special_node": false},
-{"type": "suppress_node", "diversion level": 0, "is_special_node": true,
"state": "<state>"},
-{"type": "suppress_node", "diversion level": 0, "is_special_node": true},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": false,
"is_on": 0, "emit_limits": false, "image_id": 0},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": false,
"is_on": 0, "emit_limits": false, "image_id": 0},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": false,
"is_on": 1, "emit_limits": false, "image_id": 0},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": false,
"is_on": 1, "emit_limits": false, "image_id": 0},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": false,
"is_on": 1, "emit_limits": true, "image_id": 0},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": false,
"is_on": 1, "emit_limits": true, "image_id": 0},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": true,
"state": "<state>", "is_on": 2, "emit_limits": false, "filename": "1.png",
"position": "c", "image_id": 1},
+{"type": "suppress_node", "diversion level": 0, "is_special_node": true,
"state": "<state>", "is_on": 2, "emit_limits": false, "filename": "2.png",
"position": "c", "image_id": 2},
---
ChangeLog | 10 ++++++++++
src/roff/troff/node.cpp | 14 ++++++++++++++
src/roff/troff/node.h | 1 +
3 files changed, 25 insertions(+)
diff --git a/ChangeLog b/ChangeLog
index 7928e4771..acb820702 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2025-03-03 G. Branden Robinson <[email protected]>
+
+ * src/roff/troff/node.h (class suppress_node): Specialize
+ {override} `dump_properties()` for this class.
+ * src/roff/troff/node.cpp
+ (suppress_node::dump_properties): New member function
+ reports values of `is_on`, `emit_limits`, `filename` (if not
+ null), `position` (if not a null character), and `image_id`
+ properties.
+
2025-03-03 G. Branden Robinson <[email protected]>
* src/roff/troff/node.h (class device_extension_node):
diff --git a/src/roff/troff/node.cpp b/src/roff/troff/node.cpp
index 83df3e903..e665e71da 100644
--- a/src/roff/troff/node.cpp
+++ b/src/roff/troff/node.cpp
@@ -4167,6 +4167,20 @@ suppress_node::suppress_node(int issue_limits, int
on_or_off,
{
}
+void suppress_node::dump_properties()
+{
+ node::dump_properties();
+ fprintf(stderr, ", \"is_on\": %d", is_on);
+ fprintf(stderr, ", \"emit_limits\": %s",
+ emit_limits ? "true" : "false");
+ if (filename.contents() != 0 /* nullptr */)
+ fprintf(stderr, ", \"filename\": \"%s\"", filename.contents());
+ if (position != '\0')
+ fprintf(stderr, ", \"position\": \"%c\"", position);
+ fprintf(stderr, ", \"image_id\": %d", image_id);
+ fflush(stderr);
+}
+
bool suppress_node::is_same_as(node *n)
{
return ((is_on == ((suppress_node *)n)->is_on)
diff --git a/src/roff/troff/node.h b/src/roff/troff/node.h
index f4a527999..b2fc1e521 100644
--- a/src/roff/troff/node.h
+++ b/src/roff/troff/node.h
@@ -615,6 +615,7 @@ public:
const char *type();
bool causes_tprint();
bool is_tag();
+ void dump_properties();
private:
void put(troff_output_file *, const char *);
};
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit