gbranden pushed a commit to branch master
in repository groff.
commit ea1e00de47b376560267b9e1390ee2613fdedccf
Author: G. Branden Robinson <[email protected]>
AuthorDate: Wed Dec 4 04:31:34 2024 -0600
[troff]: Fix Savannah #66526 (`|` handling).
* src/roff/troff/input.cpp (is_conditional_expression_true): Stop
treating `|` as a delimiter, but instead as beginning a numeric
expression, _only_ as the predicate of a control structure request.
Improves compatibility with AT&T troff, including DWB 3.3 and Heirloom
Doctools. Problem appears to date back to groff 1.02.
GNU troff has long thrown diagnostics in this context, of increasing
detail in recent years. For example:
troff:mm/0.MT:271: warning: missing closing delimiter in output
comparison operator; expected character '|', got a newline
However, this was easily overlooked in our automated tests because it
didn't break formatting, except on Solaris 10 (or if you ran the
post-1.23.0 test "contrib/mm/tests/memoranda-format-correctly.sh"
with an older groff release).
Fixes <https://savannah.gnu.org/bugs/?66526>.
---
ChangeLog | 22 ++++++++++++++++++++++
src/roff/troff/input.cpp | 4 +++-
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/ChangeLog b/ChangeLog
index 7e8c31203..573f25c8f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2024-12-04 G. Branden Robinson <[email protected]>
+
+ * src/roff/troff/input.cpp (is_conditional_expression_true):
+ Stop treating `|` as a delimiter, but instead as beginning a
+ numeric expression, _only_ as the predicate of a control
+ structure request. Improves compatibility with AT&T troff,
+ including DWB 3.3 and Heirloom Doctools. Problem appears to
+ date back to groff 1.02.
+
+ GNU troff has long thrown diagnostics in this context, of
+ increasing detail in recent years. For example:
+
+ troff:mm/0.MT:271: warning: missing closing delimiter in output
+ comparison operator; expected character '|', got a newline
+
+ However, this was easily overlooked in our automated tests
+ because it didn't break formatting, except on Solaris 10 (or if
+ you ran the post-1.23.0 test "contrib/mm/tests/
+ memoranda-format-correctly.sh" with an older groff release).
+
+ Fixes <https://savannah.gnu.org/bugs/?66526>.
+
2024-12-04 G. Branden Robinson <[email protected]>
* src/roff/troff/input.cpp: Trivially refactor.
diff --git a/src/roff/troff/input.cpp b/src/roff/troff/input.cpp
index 2be0b1e0a..09d4dd6a7 100644
--- a/src/roff/troff/input.cpp
+++ b/src/roff/troff/input.cpp
@@ -6415,7 +6415,9 @@ static bool is_conditional_expression_true()
}
else if (tok.is_space())
result = false;
- else if (tok.is_usable_as_delimiter()) {
+ // Treat `|` specially for AT&T troff compatibility, where it _isn't_
+ // a delimiter in this context; see Savannah #66526.
+ else if (tok.is_usable_as_delimiter() && (tok.ch() != '|')) {
// Perform (formatted) output comparison.
token delim = tok;
int delim_level = input_stack::get_level();
_______________________________________________
groff-commit mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/groff-commit