From d672f8cb82878baf3834e938c4c416f4493952cf Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Sat, 15 Dec 2018 19:30:25 +0000 Subject: Several improvements to escape sequence handling. * Add the missing special character \_ (underscore). * Partial implementations of \a (leader character) and \E (uninterpreted escape character). * Parse and ignore \r (reverse line feed). * Add a WARNING message about undefined escape sequences. * Add an UNSUPP message about unsupported escape sequences. * Mark \! and \? (transparent throughput) and \O (suppress output) as unsupported. * Treat the various variants of zero-width spaces as one-byte escape sequences rather than as special characters, to avoid defining bogus forms with square brackets. * For special characters with one-byte names, do not define bogus forms with square brackets, except for \[-], which is valid. * In the form with square brackets, undefined special characters do not fall back to printing the name verbatim, not even for one-byte names. * Starting a special character name with a blank is an error. * Undefined escape sequences never abort formatting of the input string, not even in HTML output mode. * Document the newly handled escapes, and a few that were missing. * Regression tests for most of the above. --- regress/roff/esc/Makefile | 5 +++-- regress/roff/esc/O.in | 15 +++++++++++++ regress/roff/esc/O.out_ascii | 21 +++++++++++++++++++ regress/roff/esc/O.out_lint | 5 +++++ regress/roff/esc/ignore.in | 18 +++++++--------- regress/roff/esc/ignore.out_ascii | 19 +++++++++++------ regress/roff/esc/ignore.out_lint | 5 ++++- regress/roff/esc/invalid.in | 28 +++++++++++++++++++++++++ regress/roff/esc/invalid.out_ascii | 34 ++++++++++++++++++++++++++++++ regress/roff/esc/invalid.out_lint | 43 ++++++++++++++++++++++++++++++++++++++ regress/roff/esc/one.in | 18 ++++++---------- regress/roff/esc/one.out_ascii | 18 +++++++++------- regress/roff/esc/unsupp.in | 8 +++++++ regress/roff/esc/unsupp.out_ascii | 14 +++++++++++++ regress/roff/esc/unsupp.out_lint | 5 +++++ 15 files changed, 218 insertions(+), 38 deletions(-) create mode 100644 regress/roff/esc/O.in create mode 100644 regress/roff/esc/O.out_ascii create mode 100644 regress/roff/esc/O.out_lint create mode 100644 regress/roff/esc/invalid.in create mode 100644 regress/roff/esc/invalid.out_ascii create mode 100644 regress/roff/esc/invalid.out_lint create mode 100644 regress/roff/esc/unsupp.in create mode 100644 regress/roff/esc/unsupp.out_ascii create mode 100644 regress/roff/esc/unsupp.out_lint (limited to 'regress/roff/esc') diff --git a/regress/roff/esc/Makefile b/regress/roff/esc/Makefile index 32589479..74f153d5 100644 --- a/regress/roff/esc/Makefile +++ b/regress/roff/esc/Makefile @@ -1,6 +1,7 @@ # $OpenBSD: Makefile,v 1.11 2015/04/29 18:32:57 schwarze Exp $ -REGRESS_TARGETS = one two multi B c c_man e f h l o p w z ignore -LINT_TARGETS = B h l w ignore +REGRESS_TARGETS = one two multi B c c_man e f h l O o p w z +REGRESS_TARGETS += ignore invalid unsupp +LINT_TARGETS = B h l O w ignore invalid unsupp .include diff --git a/regress/roff/esc/O.in b/regress/roff/esc/O.in new file mode 100644 index 00000000..d446ebb6 --- /dev/null +++ b/regress/roff/esc/O.in @@ -0,0 +1,15 @@ +.\" $OpenBSD$ +.TH ESC-O 1 "December 15, 2018" +.SH NAME +esc-O \- escape sequence to suppress output +.SH DESCRIPTION +.nf +O1: a\O1b +O2: a\O2b +O3: a\O3b +O4: a\O4b +O5: a\O5b +O52: a\O(52b +O5n: a\O[5dummy]b +O6: a\O6b +O0: a\O0\&\O1b diff --git a/regress/roff/esc/O.out_ascii b/regress/roff/esc/O.out_ascii new file mode 100644 index 00000000..d2e5668c --- /dev/null +++ b/regress/roff/esc/O.out_ascii @@ -0,0 +1,21 @@ +ESC-O(1) General Commands Manual ESC-O(1) + + + +NNAAMMEE + esc-O - escape sequence to suppress output + +DDEESSCCRRIIPPTTIIOONN + O1: ab + O2: ab + O3: ab + O4: ab + O5: ab + O52: ab + O5n: ab + O6: ab + O0: ab + + + +OpenBSD December 15, 2018 ESC-O(1) diff --git a/regress/roff/esc/O.out_lint b/regress/roff/esc/O.out_lint new file mode 100644 index 00000000..ee91008d --- /dev/null +++ b/regress/roff/esc/O.out_lint @@ -0,0 +1,5 @@ +mandoc: O.in:11:6: WARNING: invalid escape sequence: \O5 +mandoc: O.in:12:7: WARNING: invalid escape sequence: \O(52 +mandoc: O.in:13:7: UNSUPP: unsupported escape sequence: \O[5dummy] +mandoc: O.in:14:6: WARNING: invalid escape sequence: \O6 +mandoc: O.in:15:6: UNSUPP: unsupported escape sequence: \O0 diff --git a/regress/roff/esc/ignore.in b/regress/roff/esc/ignore.in index d41be2e1..48507f44 100644 --- a/regress/roff/esc/ignore.in +++ b/regress/roff/esc/ignore.in @@ -1,15 +1,13 @@ .\" $OpenBSD: ignore.in,v 1.3 2017/07/04 14:53:27 schwarze Exp $ -.Dd $Mdocdate: July 4 2017 $ -.Dt ESC-IGNORE 1 -.Os -.Sh NAME -.Nm esc-ignore -.Nd ignored roff escape sequences -.Sh DESCRIPTION +.TH ESC-IGNORE 1 "December 15, 2018" +.SH NAME +esc-ignore \- ignored roff escape sequences +.SH DESCRIPTION +.nf +closing parenthesis: a\)b\[)]c +comma: a\,b\[,]c +slash: a\/b\[/]c multiform: a\kxb\k(xyc\k[xyz]d -.br quoted: a\R'myreg 0'b\R'myreg \A'y'0'c -.br sizes: a\s0b\s(12c\s[123]d\s'123'e\s'1\w'xy'2'f -.br signed sizes: a\s-0b\s-(12c\s-[123]d\s-'123'e\s-'1\w'xy'2'f\s- diff --git a/regress/roff/esc/ignore.out_ascii b/regress/roff/esc/ignore.out_ascii index fa16f389..eaee36c0 100644 --- a/regress/roff/esc/ignore.out_ascii +++ b/regress/roff/esc/ignore.out_ascii @@ -1,12 +1,19 @@ ESC-IGNORE(1) General Commands Manual ESC-IGNORE(1) + + NNAAMMEE - eesscc--iiggnnoorree - ignored roff escape sequences + esc-ignore - ignored roff escape sequences DDEESSCCRRIIPPTTIIOONN - multiform: abcd - quoted: abc - sizes: abcdef - signed sizes: abcdef + closing parenthesis: abc + comma: abc + slash: abc + multiform: abcd + quoted: abc + sizes: abcdef + signed sizes: abcdef + + -OpenBSD July 4, 2017 OpenBSD +OpenBSD December 15, 2018 ESC-IGNORE(1) diff --git a/regress/roff/esc/ignore.out_lint b/regress/roff/esc/ignore.out_lint index 95eba933..0f33c929 100644 --- a/regress/roff/esc/ignore.out_lint +++ b/regress/roff/esc/ignore.out_lint @@ -1 +1,4 @@ -mandoc: ignore.in:15:60: WARNING: invalid escape sequence: \s- +mandoc: ignore.in:7:26: WARNING: invalid escape sequence: \[)] +mandoc: ignore.in:8:12: WARNING: invalid escape sequence: \[,] +mandoc: ignore.in:9:12: WARNING: invalid escape sequence: \[/] +mandoc: ignore.in:13:60: WARNING: invalid escape sequence: \s- diff --git a/regress/roff/esc/invalid.in b/regress/roff/esc/invalid.in new file mode 100644 index 00000000..b2e77159 --- /dev/null +++ b/regress/roff/esc/invalid.in @@ -0,0 +1,28 @@ +.\" $OpenBSD$ +.TH ESC-INVALID 1 "December 15, 2018" +.SH NAME +esc-invalid \- invalid roff escape sequences +.SH DESCRIPTION +.nf +plus: a\+b\[+]c +semicolon: a\;b\[;]c +less than: a\b\[>]c +at: a\@b\[@]c +square bracket: a\]b +curly braces: a\[{]b\[}]c +digit: a\1b\[1]c +G: a\Gb\[G]c +I: a\Ib\[I]c +i: a\ib\[i]c +J: a\Jb\[J]c +j: a\jb\[j]c +K: a\Kb\[K]c +P: a\Pb\[P]c +Q: a\Qb\[Q]c +q: a\qb\[q]c +T: a\Tb\[T]c +U: a\Ub\[U]c +W: a\Wb\[W]c +y: a\yb\[y]c diff --git a/regress/roff/esc/invalid.out_ascii b/regress/roff/esc/invalid.out_ascii new file mode 100644 index 00000000..24915262 --- /dev/null +++ b/regress/roff/esc/invalid.out_ascii @@ -0,0 +1,34 @@ +ESC-INVALID(1) General Commands Manual ESC-INVALID(1) + + + +NNAAMMEE + esc-invalid - invalid roff escape sequences + +DDEESSCCRRIIPPTTIIOONN + plus: a+bc + semicolon: a;bc + less than: abc + at: a@bc + square bracket: a]b + curly braces: abc + digit: a1bc + G: aGbc + I: aIbc + i: aibc + J: aJbc + j: ajbc + K: aKbc + P: aPbc + Q: aQbc + q: aqbc + T: aTbc + U: aUbc + W: aWbc + y: aybc + + + +OpenBSD December 15, 2018 ESC-INVALID(1) diff --git a/regress/roff/esc/invalid.out_lint b/regress/roff/esc/invalid.out_lint new file mode 100644 index 00000000..a0afa7ae --- /dev/null +++ b/regress/roff/esc/invalid.out_lint @@ -0,0 +1,43 @@ +mandoc: invalid.in:7:11: WARNING: invalid escape sequence: \[+] +mandoc: invalid.in:7:8: WARNING: undefined escape, printing literally: \+ +mandoc: invalid.in:8:16: WARNING: invalid escape sequence: \[;] +mandoc: invalid.in:8:13: WARNING: undefined escape, printing literally: \; +mandoc: invalid.in:9:16: WARNING: invalid escape sequence: \[<] +mandoc: invalid.in:9:13: WARNING: undefined escape, printing literally: \< +mandoc: invalid.in:10:15: WARNING: invalid escape sequence: \[=] +mandoc: invalid.in:10:12: WARNING: undefined escape, printing literally: \= +mandoc: invalid.in:11:19: WARNING: invalid escape sequence: \[>] +mandoc: invalid.in:11:16: WARNING: undefined escape, printing literally: \> +mandoc: invalid.in:12:9: WARNING: invalid escape sequence: \[@] +mandoc: invalid.in:12:6: WARNING: undefined escape, printing literally: \@ +mandoc: invalid.in:13:18: WARNING: undefined escape, printing literally: \] +mandoc: invalid.in:14:21: WARNING: invalid escape sequence: \[}] +mandoc: invalid.in:14:16: WARNING: invalid escape sequence: \[{] +mandoc: invalid.in:15:12: WARNING: invalid escape sequence: \[1] +mandoc: invalid.in:15:9: WARNING: undefined escape, printing literally: \1 +mandoc: invalid.in:16:8: WARNING: invalid escape sequence: \[G] +mandoc: invalid.in:16:5: WARNING: undefined escape, printing literally: \G +mandoc: invalid.in:17:8: WARNING: invalid escape sequence: \[I] +mandoc: invalid.in:17:5: WARNING: undefined escape, printing literally: \I +mandoc: invalid.in:18:8: WARNING: invalid escape sequence: \[i] +mandoc: invalid.in:18:5: WARNING: undefined escape, printing literally: \i +mandoc: invalid.in:19:8: WARNING: invalid escape sequence: \[J] +mandoc: invalid.in:19:5: WARNING: undefined escape, printing literally: \J +mandoc: invalid.in:20:8: WARNING: invalid escape sequence: \[j] +mandoc: invalid.in:20:5: WARNING: undefined escape, printing literally: \j +mandoc: invalid.in:21:8: WARNING: invalid escape sequence: \[K] +mandoc: invalid.in:21:5: WARNING: undefined escape, printing literally: \K +mandoc: invalid.in:22:8: WARNING: invalid escape sequence: \[P] +mandoc: invalid.in:22:5: WARNING: undefined escape, printing literally: \P +mandoc: invalid.in:23:8: WARNING: invalid escape sequence: \[Q] +mandoc: invalid.in:23:5: WARNING: undefined escape, printing literally: \Q +mandoc: invalid.in:24:8: WARNING: invalid escape sequence: \[q] +mandoc: invalid.in:24:5: WARNING: undefined escape, printing literally: \q +mandoc: invalid.in:25:8: WARNING: invalid escape sequence: \[T] +mandoc: invalid.in:25:5: WARNING: undefined escape, printing literally: \T +mandoc: invalid.in:26:8: WARNING: invalid escape sequence: \[U] +mandoc: invalid.in:26:5: WARNING: undefined escape, printing literally: \U +mandoc: invalid.in:27:8: WARNING: invalid escape sequence: \[W] +mandoc: invalid.in:27:5: WARNING: undefined escape, printing literally: \W +mandoc: invalid.in:28:8: WARNING: invalid escape sequence: \[y] +mandoc: invalid.in:28:5: WARNING: undefined escape, printing literally: \y diff --git a/regress/roff/esc/one.in b/regress/roff/esc/one.in index 6edf9f64..6a4b22a8 100644 --- a/regress/roff/esc/one.in +++ b/regress/roff/esc/one.in @@ -1,17 +1,11 @@ .\" $OpenBSD: one.in,v 1.3 2017/07/04 14:53:27 schwarze Exp $ -.Dd $Mdocdate: July 4 2017 $ -.Dt ESC-ONE 1 -.Os -.Sh NAME -.Nm esc-one -.Nd roff one-character escape sequences -.Sh DESCRIPTION +.TH ESC-ONE 1 "December 15, 2018" +.SH NAME +esc-one \- roff one-character escape sequences +.SH DESCRIPTION +.nf backslash: >\e< -.br -minus: >\-< -.br +minus: >\-|\[-]< acute: >\'< -.br grave: >\`< -.br normal character: >\q< diff --git a/regress/roff/esc/one.out_ascii b/regress/roff/esc/one.out_ascii index bc88dcf2..1eb5f1f2 100644 --- a/regress/roff/esc/one.out_ascii +++ b/regress/roff/esc/one.out_ascii @@ -1,13 +1,17 @@ ESC-ONE(1) General Commands Manual ESC-ONE(1) + + NNAAMMEE - eesscc--oonnee - roff one-character escape sequences + esc-one - roff one-character escape sequences DDEESSCCRRIIPPTTIIOONN - backslash: >\< - minus: >-< - acute: >'< - grave: >`< - normal character: >q< + backslash: >\< + minus: >-|-< + acute: >'< + grave: >`< + normal character: >q< + + -OpenBSD July 4, 2017 OpenBSD +OpenBSD December 15, 2018 ESC-ONE(1) diff --git a/regress/roff/esc/unsupp.in b/regress/roff/esc/unsupp.in new file mode 100644 index 00000000..819f6c33 --- /dev/null +++ b/regress/roff/esc/unsupp.in @@ -0,0 +1,8 @@ +.\" $OpenBSD$ +.TH ESC-UNSUPP 1 "December 15, 2018" +.SH NAME +esc-unsupp \- unsupported escape sequences +.SH DESCRIPTION +.nf +exclamation mark: a\!b\[!]c +question mark: a\?\&\?b\[?]c diff --git a/regress/roff/esc/unsupp.out_ascii b/regress/roff/esc/unsupp.out_ascii new file mode 100644 index 00000000..22613e54 --- /dev/null +++ b/regress/roff/esc/unsupp.out_ascii @@ -0,0 +1,14 @@ +ESC-UNSUPP(1) General Commands Manual ESC-UNSUPP(1) + + + +NNAAMMEE + esc-unsupp - unsupported escape sequences + +DDEESSCCRRIIPPTTIIOONN + exclamation mark: abc + question mark: abc + + + +OpenBSD December 15, 2018 ESC-UNSUPP(1) diff --git a/regress/roff/esc/unsupp.out_lint b/regress/roff/esc/unsupp.out_lint new file mode 100644 index 00000000..d3cc4bf1 --- /dev/null +++ b/regress/roff/esc/unsupp.out_lint @@ -0,0 +1,5 @@ +mandoc: unsupp.in:7:23: WARNING: invalid escape sequence: \[!] +mandoc: unsupp.in:7:20: UNSUPP: unsupported escape sequence: \! +mandoc: unsupp.in:8:24: WARNING: invalid escape sequence: \[?] +mandoc: unsupp.in:8:21: UNSUPP: unsupported escape sequence: \? +mandoc: unsupp.in:8:17: UNSUPP: unsupported escape sequence: \? -- cgit v1.2.3-56-ge451