gbranden pushed a commit to branch master
in repository groff.
commit 7276437c5fe05b46faa9012cd9b31f2caab3290d
Author: G. Branden Robinson <[email protected]>
AuthorDate: Wed Sep 2 15:37:28 2026 -0500
[ms]: Fix Savannah #64466.
Improve diagnostics involving keeps/diversions.
* tmac/s.tmac: Introduce new Boolean-valued register in `kp` module,
`kp*in-keep`, tracking that element of package state.
(pg@super-eject): Enhance diagnostic to supply a hint about why a
diversion might still be open when the document ends.
(KS, KF): Check `kp*in-keep`; if already true, throw error diagnostic
and return early. Otherwise, make it true.
(KE): Make `kp*in-keep` false. Clarify error diagnostic.
Fixes <https://savannah.gnu.org/bugs/?64466>. Thanks to Doug McIlroy
for the report.
---
ChangeLog | 15 +++++++++++++++
tmac/s.tmac | 17 +++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index eca04354f..c21b3b17c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2026-09-03 G. Branden Robinson <[email protected]>
+
+ [ms]: Improve diagnostics involving keeps/diversions.
+
+ * tmac/s.tmac: Introduce new Boolean-valued register in `kp`
+ module, `kp*in-keep`, tracking that element of package state.
+ (pg@super-eject): Enhance diagnostic to supply a hint about why
+ a diversion might still be open when the document ends.
+ (KS, KF): Check `kp*in-keep`; if already true, throw error
+ diagnostic and return early. Otherwise, make it true.
+ (KE): Make `kp*in-keep` false. Clarify error diagnostic.
+
+ Fixes <https://savannah.gnu.org/bugs/?64466>. Thanks to Doug
+ McIlroy for the report.
+
2026-09-03 G. Branden Robinson <[email protected]>
* configure.ac: Defeat C23/C++23 presumption. We want to be
diff --git a/tmac/s.tmac b/tmac/s.tmac
index 92a664a9a..98fc11cfb 100644
--- a/tmac/s.tmac
+++ b/tmac/s.tmac
@@ -834,7 +834,8 @@ along with this program. If not, see
<http://www.gnu.org/licenses/>.
.de pg@super-eject
.br
.if !'\\n(.z'' \{\
-. ds @msg diversion open while ejecting page\"
+. ds @msg diversion open while ejecting page;\"
+. as @msg " possible .KS/.KF/.KE mismatch\"
. as @msg " (last file seen: \\*[@last-file-seen])\"
. @error-recover \\*[@msg]
. rm @msg
@@ -1047,12 +1048,23 @@ along with this program. If not, see
<http://www.gnu.org/licenses/>.
.\" ******** module kp ********
.\" ***************************
.\" Keeps.
+.nr kp*in-keep 0
.de KS
.br
+.if \\n[kp*in-keep] \{\
+. @error ignoring .\\$0: cannot nest keeps
+. return
+.\}
+.nr kp*in-keep 1
.di kp@div
..
.de KF
+.if \\n[kp*in-keep] \{\
+. @error ignoring .\\$0: cannot nest keeps
+. return
+.\}
.if !'\\n(.z'' .@error-recover .KF while diversion open
+.nr kp*in-keep 1
.di kp@fdiv
.ev k
.if \\n[@is-initialized] \{\
@@ -1062,9 +1074,10 @@ along with this program. If not, see
<http://www.gnu.org/licenses/>.
..
.de KE
.nr kp*did-closure-succeed 0
+.nr kp*in-keep 0
.if '\\n(.z'kp@div' .kp*end
.if '\\n(.z'kp@fdiv' .kp*fend
-.if !\\n[kp*did-closure-succeed] .@error .KE without .KS or .KF
+.if !\\n[kp*did-closure-succeed] .@error .KE without (valid) .KS or .KF
.rr kp*did-closure-succeed
..
.de @div-end!kp@div
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit