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

Reply via email to