groff: add patch reverting problematic commit from upstream (#514839)

This commit is contained in:
Thiago Kenji Okada 2026-05-11 11:05:21 +00:00 committed by GitHub
commit 662aab8cd3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 191 additions and 0 deletions

View file

@ -0,0 +1,184 @@
diff --git a/ChangeLog b/ChangeLog
index 29dfaab41..0e35e38c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8410,35 +8410,6 @@ Version 1.24.0 released 2026-02-28
Fixes <https://savannah.gnu.org/bugs/?65190> (2/2).
-2025-05-18 G. Branden Robinson <g.branden.robinson@gmail.com>
-
- [man]: Refactor continuous rendering mode to use an "infinite
- page length" method facilitated by the new semantics of the `.R`
- register.
-
- * tmac/an.tmac (an-ne): Drop unneeded macro.
- (an-bp): Rename this...
- (an*bp): ...to this, define it with `de1` to temporarily disable
- compatibility mode, and replace definition. No longer altering
- the page length, it works like `br`, including
- control-character-sensitive behavior.
- (an-end): If continously rendering, stop incrementing the page
- length prior to writing the footer and document separation rule,
- and upon encountering the end of the last document (the input
- file name register `.F` becomes empty), set the page length to
- the vertical drawing position.
- (an-end, TH): Call `an*break-page-with-new-number` only if _not_
- continuously rendering.
- (an-set-up-continuous-rendering): Drop macro in favor of
- open-coded initialization logic.
- (PT, BT): Stop manipulating the page length when continuously
- rendering.
- ([initialization]): If continuously rendering, set up
- replacement macro for `bp` request and set the page length to
- "infinite".
-
- Fixes <https://savannah.gnu.org/bugs/?65190> (1/2).
-
2025-05-17 G. Branden Robinson <g.branden.robinson@gmail.com>
[troff]: Improve warning diagnostics.
diff --git a/tmac/an.tmac b/tmac/an.tmac
index 9a885b120..68eea1793 100644
--- a/tmac/an.tmac
+++ b/tmac/an.tmac
@@ -90,8 +90,22 @@ .de1 an-leading-space-trap
. nop \h'\\n[lss]u'\c
..
.
-.de1 an*bp
-. if \\n[.br] .br
+.\" Define alternate requests to handle continuous rendering.
+.\"
+.\" This .ne replacement avoids page breaks; instead, the page length is
+.\" increased to the necessary amount.
+.de an-ne
+. ie \\n[.$] .nr an-amount (v;\\$*)
+. el .nr an-amount 1v
+. if (\\n[an-amount] >= \\n[.t]) \
+. pl +(\\n[an-amount]u - \\n[.t]u + 1v)
+. rr an-amount
+..
+.
+.\" This .bp replacement for continuous rendering mode adjusts the page
+.\" length to the current position so that no empty lines are inserted.
+.de an-bp
+. pl \\n[nl]u
..
.
.\" We need an end-of-input macro to flush any pending output line and
@@ -102,11 +116,21 @@ .de1 an*end-document
. an*input-trap
. if '\\n[.z]'an*paragraph-tag' .an*TP-trap
. if \\n[cR] \{\
+. \" We might have a pending output line that is not yet broken, and
+. \" also be 1v from the bottom of the page. If we break (or flush)
+. \" the output line now, the page will get ejected afterward and
+. \" troff will exit because we're in an end-of-input macro--our
+. \" footer will never be output. So, if that is the case, further
+. \" extend the page length by 1v.
+. if ((\\n[.p] - \\n[nl]) <= \\n[.V]) .pl +1v
+. br
+. pl +1v
. sp 1v
. an-footer
. \" If we're processing multiple documents and have started a new
. \" one, draw a line between this footer and the next header.
. if !'\\n[.F]'' \{\
+. pl +1v
. nf
. ti 0
. nr an*rule-length (\\n[LL]u - 1n)
@@ -119,11 +143,15 @@ .de1 an*end-document
. \}
. ds an*previous-page-ref-string \" empty
. ch an-header
-. \" At the end of the last document, the file name becomes empty;
-. \" force the page length to match the vertical drawing position in
-. \" continuous rendering mode.
-. ie \\n[cR] .if '\\n[.F]'' .pl \\n[nl]u
-. el .an*break-page-with-new-number
+. an*break-page-with-new-number
+..
+.
+.\" Move macros into place for continuous rendering.
+.de an-set-up-continuous-rendering
+. rn ne an-real-ne
+. rn bp an-real-bp
+. rn an-ne ne
+. rn an-bp bp
..
.
.de an*reset-text-parameters
@@ -336,7 +364,7 @@ .de1 TH
. \" Clear the page header trap so it is not sprung with stale
. \" information.
. ch an-header
-. if !\\n[cR] .an*break-page-with-new-number
+. an*break-page-with-new-number
. \}
. if \\n[C] .rr P
.
@@ -488,9 +516,13 @@ .de1 PD
..
.
.\" Write the page header; can be redefined by man.local.
+.\"
+.\" In continuous rendering mode, we need to extend the page length to
+.\" accommodate the vertical size of our header (plus any spacing).
.if d PT .ig
.de1 PT
-. if !\\n[cR] .sp (.5i - .5m)
+. ie \\n[cR] .pl +1v
+. el .sp (.5i - .5m)
. \" Attach a bookmark to the page header on the first page of a new
. \" man(7) document; a changed identifier or section indicates this.
. if !'\\*[an*page-ref-string]'\\*[an*previous-page-ref-string]' \{\
@@ -499,13 +531,17 @@ .de1 PT
. ds an*previous-page-ref-string "\\*[an*page-ref-string]
. \}
. tl '\\*[an-pageref]'\\*[an-extra3]'\\*[an-pageref]'
-. ie \\n[cR] .sp 1v
-. el .sp .5i
+. ie \\n[cR] \{\
+. pl +1v
+. sp 1v
+. \}
+. el .sp .5i
..
.
.\" Write the page footer; can be redefined by man.local.
.if d BT .ig
.de1 BT
+. if \\n[cR] .pl +1v
. ie \\n[D] \{\
. if o .tl '\\*[an*ifoot]'\\*[an-extra1]'\\*[an*ofoot]'
. if e .tl '\\*[an*ofoot]'\\*[an-extra1]'\\*[an*ifoot]'
@@ -1793,13 +1829,8 @@ .de1 EN
.\}
.rm an*ident-style
.
-.\" In continuous rendering mode, make page breaks less potent and the
-.\" page length "infinite".
-.if \n[cR] \{\
-. rn bp an*real-bp
-. rn an*bp bp
-. pl \n[.R]u/1v
-.\}
+.if \n[cR] \
+. an-set-up-continuous-rendering
.
.\" If rendering HTML, suppress headers and footers.
.nr an-suppress-header-and-footer 0
diff --git a/tmac/tmac.am b/tmac/tmac.am
index 6a5f5da8b..7412b84c6 100644
--- a/tmac/tmac.am
+++ b/tmac/tmac.am
@@ -267,6 +267,7 @@ tmac_XFAIL_TESTS = \
tmac/tests/an-ext_ME-punct-hyphenates.sh \
tmac/tests/an-ext_UE-breaks-before-long-URIs.sh \
tmac/tests/an-ext_UE-punct-hyphenates.sh \
+ tmac/tests/an_report-useful-line-numbers-in-diagnostics.sh \
tmac/tests/e_footnotes-work-with-columns.sh \
tmac/tests/pdf_bookmark-starting-with-control-char-works.sh
XFAIL_TESTS += $(tmac_XFAIL_TESTS)

View file

@ -48,6 +48,13 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-dOKBl5W2r/QxrqyYPWOpyJaO6roqLrp9+LpMe0Hnz9g=";
};
patches = [
# This revert a upstream refactor in continuous rendering mode, but this
# causes a big performance regression for big manpages like
# `man 5 configuration.nix`.
./0001-Revert-man-Fix-Savannah-65190.patch
];
outputs = [
"out"
"man"