Re-classify the roff(7) \r (reverse line feed) escape sequence
authorschwarze <schwarze@openbsd.org>
Fri, 20 May 2022 13:06:26 +0000 (13:06 +0000)
committerschwarze <schwarze@openbsd.org>
Fri, 20 May 2022 13:06:26 +0000 (13:06 +0000)
from "ignore" to "unsupported" because when an input file uses it,
mandoc(1) is likely to significantly misformat the output,
usually showing parts of the output in a different order
than the author intended.

regress/usr.bin/mandoc/roff/esc/Makefile
regress/usr.bin/mandoc/roff/esc/r.in [new file with mode: 0644]
regress/usr.bin/mandoc/roff/esc/r.out_ascii [new file with mode: 0644]
regress/usr.bin/mandoc/roff/esc/r.out_lint [new file with mode: 0644]
share/man/man7/roff.7
usr.bin/mandoc/roff_escape.c

index 111e59b..bd39e37 100644 (file)
@@ -1,15 +1,16 @@
-# $OpenBSD: Makefile,v 1.20 2022/05/01 16:18:59 schwarze Exp $
+# $OpenBSD: Makefile,v 1.21 2022/05/20 13:06:27 schwarze Exp $
 
 REGRESS_TARGETS         = one two multi comment
-REGRESS_TARGETS        += B bs_man bs_mdoc c c_man E1 e f h hneg l O1 o p w z
+REGRESS_TARGETS        += B bs_man bs_mdoc c c_man E1 e f h hneg l O1 o p w z
 REGRESS_TARGETS        += ignore invalid unsupp
 HTML_TARGETS    = f
-LINT_TARGETS    = comment B h l O1 w ignore invalid unsupp
+LINT_TARGETS    = comment B h l O1 w ignore invalid unsupp
 
-# mandoc defect:
+# mandoc defects:
 # - \h with a negative argument replaces output characters
 #   instead of overstriking them
+# - \r does not return to the previous output line
 
-SKIP_GROFF      = hneg
+SKIP_GROFF      = hneg r
 
 .include <bsd.regress.mk>
diff --git a/regress/usr.bin/mandoc/roff/esc/r.in b/regress/usr.bin/mandoc/roff/esc/r.in
new file mode 100644 (file)
index 0000000..835121d
--- /dev/null
@@ -0,0 +1,13 @@
+.\" $OpenBSD: r.in,v 1.1 2022/05/20 13:06:27 schwarze Exp $
+.Dd $Mdocdate: May 20 2022 $
+.Dt ESC-R 1
+.Os
+.Sh NAME
+.Nm esc-r
+.Nd the roff reverse line feed escape sequence
+.Sh DESCRIPTION
+.Bd -literal
+first line
+before\rafter
+last line
+.Ed
diff --git a/regress/usr.bin/mandoc/roff/esc/r.out_ascii b/regress/usr.bin/mandoc/roff/esc/r.out_ascii
new file mode 100644 (file)
index 0000000..83ec942
--- /dev/null
@@ -0,0 +1,11 @@
+ESC-R(1)                    General Commands Manual                   ESC-R(1)
+
+N\bNA\bAM\bME\bE
+     e\bes\bsc\bc-\b-r\br - the roff reverse line feed escape sequence
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+     first line
+     beforeafter
+     last line
+
+OpenBSD                          May 20, 2022                          OpenBSD
diff --git a/regress/usr.bin/mandoc/roff/esc/r.out_lint b/regress/usr.bin/mandoc/roff/esc/r.out_lint
new file mode 100644 (file)
index 0000000..d86f19f
--- /dev/null
@@ -0,0 +1 @@
+mandoc: r.in:11:7: UNSUPP: unsupported escape sequence: \r
index b32f27d..cd334c0 100644 (file)
@@ -1,7 +1,7 @@
-.\"    $OpenBSD: roff.7,v 1.97 2022/01/01 03:59:22 jsg Exp $
+.\" $OpenBSD: roff.7,v 1.98 2022/05/20 13:06:27 schwarze Exp $
 .\"
+.\" Copyright (c) 2010-2019, 2022 Ingo Schwarze <schwarze@openbsd.org>
 .\" Copyright (c) 2010, 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
-.\" Copyright (c) 2010-2019 Ingo Schwarze <schwarze@openbsd.org>
 .\"
 .\" Permission to use, copy, modify, and distribute this software for any
 .\" purpose with or without fee is hereby granted, provided that the above
@@ -15,7 +15,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd $Mdocdate: January 1 2022 $
+.Dd $Mdocdate: May 20 2022 $
 .Dt ROFF 7
 .Os
 .Sh NAME
@@ -2166,8 +2166,8 @@ Break the output line at the end of the current word.
 Set number register; ignored by
 .Xr mandoc 1 .
 .It Ic \er
-Move up by one line; ignored by
-.Xr mandoc 1 .
+Reverse line feed: move up by one output line.
+Currently unsupported.
 .It Ic \eS\(aq Ns Ar number Ns Ic \(aq
 Slant output; ignored by
 .Xr mandoc 1 .
index 4571873..0780cce 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: roff_escape.c,v 1.1 2022/05/19 15:17:51 schwarze Exp $ */
+/* $OpenBSD: roff_escape.c,v 1.2 2022/05/20 13:06:26 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012, 2013, 2014, 2015, 2017, 2018, 2020, 2022
  *               Ingo Schwarze <schwarze@openbsd.org>
@@ -103,6 +103,7 @@ roff_escape(const char *buf, const int ln, const int aesc,
 
        case '!':
        case '?':
+       case 'r':
                rval = ESCAPE_UNSUPP;
                goto out;
 
@@ -114,7 +115,6 @@ roff_escape(const char *buf, const int ln, const int aesc,
        case '^':
        case 'a':
        case 'd':
-       case 'r':
        case 't':
        case 'u':
        case '{':