source@mandoc.bsd.lv
 help / color / mirror / Atom feed
From: schwarze@mandoc.bsd.lv
To: source@mandoc.bsd.lv
Subject: mandoc: Surprisingly, every escape sequence can also be used as an
Date: Wed, 8 Jun 2022 08:24:33 -0500 (EST)	[thread overview]
Message-ID: <3365ac9043f4071c@mandoc.bsd.lv> (raw)

Log Message:
-----------
Surprisingly, every escape sequence can also be used as an argument
delimiter for an outer escape sequence, in which case the delimiting
escape sequence retains its syntax but usually ignores its argument
and loses its inherent effect.  Add rudimentary support for this
syntax quirk in order to improve parsing compatibility with groff.

Modified Files:
--------------
    mandoc:
        roff_escape.c
    mandoc/regress/char:
        Makefile
    mandoc/regress/char/N:
        Makefile
    mandoc/regress/roff/esc:
        B.in
        B.out_ascii
        B.out_lint
        Makefile
        h.in
        h.out_ascii
        h.out_lint
        l.in
        l.out_ascii
        l.out_lint
        o.in
        o.out_ascii
        w.in
        w.out_ascii
        w.out_lint

Added Files:
-----------
    mandoc/regress/char/C:
        Makefile
        delim.in
        delim.out_ascii
        delim.out_lint
    mandoc/regress/char/N:
        basic.out_lint
        delim.in
        delim.out_ascii
        delim.out_lint
    mandoc/regress/roff/esc:
        A1.in
        A1.out_ascii
        A1.out_lint

Revision Data
-------------
--- /dev/null
+++ regress/char/N/delim.out_ascii
@@ -0,0 +1,52 @@
+N-DELIM(1)                  General Commands Manual                 N-DELIM(1)
+
+N\bNA\bAM\bME\bE
+     N\bN-\b-d\bde\bel\bli\bim\bm - argument delimiters for the N escape sequence
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+     unsupported \!: *u
+     unsupported \r: 42u
+     ignored \%: *u
+     ignored \&: *u
+     ignored \): *u
+     ignored \,: 42u
+     ignored \/: *u
+     ignored \^: 42u
+     ignored \a: 42u
+     ignored \d: 42u
+     ignored \t: 42u
+     ignored \u: 42u
+     ignored \{: *u
+     ignored \|: 42u
+     ignored \}: *u
+     useless \.: 42.u
+     invalid \G: *u
+     special \ : 42 u
+     special \': *u
+     special \-: *u
+     special \0: 42 u
+     special \:: *u
+     special \_: *u
+     special \`: *u
+     special \e: *u
+     special \~: 42 u
+     break \p: *u
+     nospace \c: *u
+     string expansion: *u
+     register expansion: 3u
+     ignored \O: 42u
+     ignored \Y: 42u
+     ignored \k: *u
+     special character: *u
+     ignored \D: 42u
+     ignored \L: 42u
+     ignored \X: 42u
+     ignored \Z: 42u
+     ignored \b: 42u
+     ignored \v: 42u
+     ignored \x: 42u
+     horizontal motion: 42   u
+     horizontal line: 42__u
+     overstrike: 42c\bdu
+
+OpenBSD                          June 8, 2022                          OpenBSD
--- /dev/null
+++ regress/char/N/delim.out_lint
@@ -0,0 +1,29 @@
+mandoc: delim.in:9:20: UNSUPP: unsupported escape sequence: \!
+mandoc: delim.in:9:24: UNSUPP: unsupported escape sequence: \!
+mandoc: delim.in:11:20: UNSUPP: unsupported escape sequence: \r
+mandoc: delim.in:11:18: ERROR: invalid escape argument delimiter: \N\r
+mandoc: delim.in:19:14: ERROR: invalid escape argument delimiter: \N\,
+mandoc: delim.in:23:14: ERROR: invalid escape argument delimiter: \N\^
+mandoc: delim.in:25:14: ERROR: invalid escape argument delimiter: \N\a
+mandoc: delim.in:27:14: ERROR: invalid escape argument delimiter: \N\d
+mandoc: delim.in:29:14: ERROR: invalid escape argument delimiter: \N\t
+mandoc: delim.in:31:14: ERROR: invalid escape argument delimiter: \N\u
+mandoc: delim.in:35:14: ERROR: invalid escape argument delimiter: \N\|
+mandoc: delim.in:39:14: ERROR: invalid escape argument delimiter: \N\.
+mandoc: delim.in:43:16: WARNING: undefined escape, printing literally: \G
+mandoc: delim.in:45:15: ERROR: invalid escape argument delimiter: \N\ 
+mandoc: delim.in:51:14: ERROR: invalid escape argument delimiter: \N\0
+mandoc: delim.in:61:14: ERROR: invalid escape argument delimiter: \N\~
+mandoc: delim.in:73:21: ERROR: invalid escape argument delimiter: \N2
+mandoc: delim.in:75:14: ERROR: invalid escape argument delimiter: \N\O1
+mandoc: delim.in:77:14: ERROR: invalid escape argument delimiter: \N\Y[mystr]
+mandoc: delim.in:83:14: ERROR: invalid escape argument delimiter: \N\D't 1'
+mandoc: delim.in:85:14: ERROR: invalid escape argument delimiter: \N\L'2'
+mandoc: delim.in:87:14: ERROR: invalid escape argument delimiter: \N\X'foo'
+mandoc: delim.in:89:14: ERROR: invalid escape argument delimiter: \N\Z'foo'
+mandoc: delim.in:91:14: ERROR: invalid escape argument delimiter: \N\b'2'
+mandoc: delim.in:93:14: ERROR: invalid escape argument delimiter: \N\v'2'
+mandoc: delim.in:95:14: ERROR: invalid escape argument delimiter: \N\x'2'
+mandoc: delim.in:97:20: ERROR: invalid escape argument delimiter: \N\h'1'
+mandoc: delim.in:99:18: ERROR: invalid escape argument delimiter: \N\l'4'
+mandoc: delim.in:101:13: ERROR: invalid escape argument delimiter: \N\o'ab'
Index: Makefile
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/char/N/Makefile,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/char/N/Makefile -Lregress/char/N/Makefile -u -p -r1.1 -r1.2
--- regress/char/N/Makefile
+++ regress/char/N/Makefile
@@ -1,5 +1,6 @@
-# $OpenBSD: Makefile,v 1.2 2011/11/17 16:28:45 schwarze Exp $
+# $OpenBSD: Makefile,v 1.3 2022/06/08 13:08:00 schwarze Exp $
 
-REGRESS_TARGETS=basic
+REGRESS_TARGETS	 = basic delim
+LINT_TARGETS	 = basic delim
 
 .include <bsd.regress.mk>
--- /dev/null
+++ regress/char/N/basic.out_lint
@@ -0,0 +1 @@
+mandoc: basic.in:23:14: ERROR: invalid escape argument delimiter: \N6
--- /dev/null
+++ regress/char/N/delim.in
@@ -0,0 +1,101 @@
+.\" $OpenBSD: delim.in,v 1.1 2022/06/08 13:08:00 schwarze Exp $
+.Dd $Mdocdate: June 8 2022 $
+.Dt N-DELIM 1
+.Os
+.Sh NAME
+.Nm N-delim
+.Nd argument delimiters for the N escape sequence
+.Sh DESCRIPTION
+unsupported \e!: \N\!42\!u
+.br
+unsupported \er: \N\r42u
+.br
+ignored \e%: \N\%42\%u
+.br
+ignored \e&: \N\&42\&u
+.br
+ignored \e): \N\)42\)u
+.br
+ignored \e,: \N\,42\,u
+.br
+ignored \e/: \N\/42\/u
+.br
+ignored \e^: \N\^42\^u
+.br
+ignored \ea: \N\a42\au
+.br
+ignored \ed: \N\d42\du
+.br
+ignored \et: \N\t42\tu
+.br
+ignored \eu: \N\u42\uu
+.br
+ignored \e{: \N\{42\{u
+.br
+ignored \e|: \N\|42\|u
+.br
+ignored \e}: \N\}42\}u
+.br
+useless \e.: \N\.42.u
+.\".br
+.\"XXX useless \e\e: \N\\42\\u
+.br
+invalid \eG: \N\G42Gu
+.br
+special \e\ : \N\ 42\ u
+.br
+special \e\(aq: \N\'42\'u
+.br
+special \e-: \N\-42\-u
+.br
+special \e0: \N\042\0u
+.br
+special \e:: \N\:42\:u
+.br
+special \e_: \N\_42\_u
+.br
+special \e\(ga: \N\`42\`u
+.br
+special \ee: \N\e42\eu
+.br
+special \e~: \N\~42\~u
+.br
+break \ep: \N\p42\pu
+.br
+nospace \ec: \N\c42\cu
+.\".br
+.\"XXX skipchar \ez: \N\z42\zu
+.br
+.ds mystr x42xu
+string expansion: \N\*[mystr]
+.br
+.nr myreg 23
+register expansion: \N\n[myreg]u
+.br
+ignored \eO: \N\O142\O2u
+.br
+ignored \eY: \N\Y[mystr]42\Y[mystr]u
+.br
+ignored \ek: \N\k[myreg]42\k[myreg]u
+.br
+special character: \N\(hy42\(hyu
+.br
+ignored \eD: \N\D't 1'42\D't 2'u
+.br
+ignored \eL: \N\L'2'42u
+.br
+ignored \eX: \N\X'foo'42\X'bar'u
+.br
+ignored \eZ: \N\Z'foo'42\Z''u
+.br
+ignored \eb: \N\b'2'42\b''u
+.br
+ignored \ev: \N\v'2'42\v'0'u
+.br
+ignored \ex: \N\x'2'42\v'0'u
+.br
+horizontal motion: \N\h'1'42\h'3'u
+.br
+horizontal line: \N\l'4'42\l'2'u
+.br
+overstrike: \N\o'ab'42\o'cd'u
Index: roff_escape.c
===================================================================
RCS file: /home/cvs/mandoc/mandoc/roff_escape.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -Lroff_escape.c -Lroff_escape.c -u -p -r1.13 -r1.14
--- roff_escape.c
+++ roff_escape.c
@@ -59,7 +59,7 @@ mandoc_escape(const char **rendarg, cons
  * sequence are returned in *resc ... *rend.
  * Otherwise, *resc is set to aesc and the positions of the escape
  * sequence starting at aesc are returned.
- * Diagnostic messages are generated if and only if resc != NULL,
+ * Diagnostic messages are generated if and only if ln != 0,
  * that is, if and only if called by roff_expand().
  */
 enum mandoc_esc
@@ -72,11 +72,13 @@ roff_escape(const char *buf, const int l
 	int		 iendarg;	/* index right after the argument */
 	int		 iend;		/* index right after the sequence */
 	int		 sesc, snam, sarg, sendarg, send; /* for sub-escape */
+	int		 escterm;	/* whether term is escaped */
 	int		 maxl;		/* expected length of the argument */
 	int		 argl;		/* actual length of the argument */
 	int		 c, i;		/* for \[char...] parsing */
 	int 		 valid_A;	/* for \A parsing */
 	enum mandoc_esc	 rval;		/* return value */
+	enum mandoc_esc	 stype;		/* for sub-escape */
 	enum mandocerr	 err;		/* diagnostic code */
 	char		 term;		/* byte terminating the argument */
 
@@ -264,13 +266,32 @@ roff_escape(const char *buf, const int l
 
 	/* Decide how to end the argument. */
 
+	escterm = 0;
+	stype = ESCAPE_EXPAND;
 	if ((term == '\b' || (term == '\0' && maxl == INT_MAX)) &&
-	    buf[iarg] == buf[iesc] && roff_escape(buf, ln, iendarg,
-	    &sesc, &snam, &sarg, &sendarg, &send) == ESCAPE_EXPAND)
-		goto out_sub;
+	    buf[iarg] == buf[iesc]) {
+		stype = roff_escape(buf, ln, iendarg,
+		    &sesc, &snam, &sarg, &sendarg, &send);
+		if (stype == ESCAPE_EXPAND)
+			goto out_sub;
+	}
 
 	if (term == '\b') {
-		if (strchr("BDHLRSvxNhl", buf[inam]) != NULL &&
+		if (stype == ESCAPE_UNDEF)
+			iarg++;
+		if (stype != ESCAPE_EXPAND && stype != ESCAPE_UNDEF) {
+			if (strchr("BHLRSNhlvx", buf[inam]) != NULL &&
+			    strchr(" ,.0DLOXYZ^abdhlortuvx|~",
+			    buf[snam]) != NULL) {
+				err = MANDOCERR_ESC_DELIM;
+				iend = send;
+				iarg = iendarg = sesc;
+				goto out;
+			}
+			escterm = 1;
+			iarg = send;
+			term = buf[snam];
+		} else if (strchr("BDHLRSvxNhl", buf[inam]) != NULL &&
 		    strchr(" %&()*+-./0123456789:<=>", buf[iarg]) != NULL) {
 			err = MANDOCERR_ESC_DELIM;
 			if (rval != ESCAPE_EXPAND)
@@ -280,7 +301,8 @@ roff_escape(const char *buf, const int l
 				goto out;
 			}
 		}
-		term = buf[iarg++];
+		if (term == '\b')
+			term = buf[iarg++];
 	} else if (term == '\0' && maxl == INT_MAX) {
 		if (buf[inam] == 'n' && (buf[iarg] == '+' || buf[iarg] == '-'))
 			iarg++;
@@ -311,34 +333,34 @@ roff_escape(const char *buf, const int l
 	while (maxl > 0) {
 		if (buf[iendarg] == '\0') {
 			err = MANDOCERR_ESC_INCOMPLETE;
-			if (rval != ESCAPE_EXPAND)
+			if (rval != ESCAPE_EXPAND &&
+			    rval != ESCAPE_OVERSTRIKE)
 				rval = ESCAPE_ERROR;
-			/* Ignore an incomplete argument except for \w. */
-			if (buf[inam] != 'w')
+			/* Usually, ignore an incomplete argument. */
+			if (strchr("Aow", buf[inam]) == NULL)
 				iendarg = iarg;
 			break;
 		}
-		if (buf[iendarg] == term) {
-			iend = iendarg + 1;
-			break;
-		}
-		if (buf[inam] == 'N' &&
-		    isdigit((unsigned char)buf[iendarg]) == 0) {
+		if (escterm == 0 && buf[iendarg] == term) {
 			iend = iendarg + 1;
 			break;
 		}
 		if (buf[iendarg] == buf[iesc]) {
-			switch (roff_escape(buf, ln, iendarg,
-			    &sesc, &snam, &sarg, &sendarg, &send)) {
-			case ESCAPE_EXPAND:
+			stype = roff_escape(buf, ln, iendarg,
+			    &sesc, &snam, &sarg, &sendarg, &send);
+			if (stype == ESCAPE_EXPAND)
 				goto out_sub;
-			case ESCAPE_UNDEF:
+			iend = send;
+			if (escterm == 1 &&
+			    (buf[snam] == term || buf[inam] == 'N'))
 				break;
-			default:
+			if (stype != ESCAPE_UNDEF)
 				valid_A = 0;
-				break;
-			}
-			iendarg = iend = send;
+			iendarg = send;
+		} else if (buf[inam] == 'N' &&
+		    isdigit((unsigned char)buf[iendarg]) == 0) {
+			iend = iendarg + 1;
+			break;
 		} else {
 			if (buf[iendarg] == ' ' || buf[iendarg] == '\t')
 				valid_A = 0;
@@ -483,6 +505,8 @@ out_sub:
 	rval = ESCAPE_EXPAND;
 
 out:
+	if (resc != NULL)
+		*resc = iesc;
 	if (rnam != NULL)
 		*rnam = inam;
 	if (rarg != NULL)
@@ -491,7 +515,7 @@ out:
 		*rendarg = iendarg;
 	if (rend != NULL)
 		*rend = iend;
-	if (resc == NULL)
+	if (ln == 0)
 		return rval;
 
 	/*
@@ -499,7 +523,6 @@ out:
 	 * from the parser, not when called from the formatters.
 	 */
 
-	*resc = iesc;
 	switch (rval) {
 	case ESCAPE_UNSUPP:
 		err = MANDOCERR_ESC_UNSUPP;
Index: Makefile
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/char/Makefile,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lregress/char/Makefile -Lregress/char/Makefile -u -p -r1.1 -r1.2
--- regress/char/Makefile
+++ regress/char/Makefile
@@ -1,6 +1,6 @@
-# $OpenBSD: Makefile,v 1.9 2014/06/20 18:27:51 schwarze Exp $
+# $OpenBSD: Makefile,v 1.10 2022/06/08 13:08:00 schwarze Exp $
 
-SUBDIR = accent bar hyphen space unicode N
+SUBDIR = accent bar hyphen space unicode C N
 
 .include "../Makefile.sub"
 .include <bsd.subdir.mk>
--- /dev/null
+++ regress/char/C/delim.in
@@ -0,0 +1,51 @@
+.\" $OpenBSD: delim.in,v 1.1 2022/06/08 13:08:00 schwarze Exp $
+.Dd $Mdocdate: June 8 2022 $
+.Dt C-DELIM 1
+.Os
+.Sh NAME
+.Nm C-delim
+.Nd argument delimiters for the C escape sequence
+.Sh DESCRIPTION
+empty: \C''
+.br
+single byte: \C'_'\C'-'
+.br
+two bytes: \C'hy'
+.br
+multiple bytes: \C'integral'
+.Ss Argument delimiters
+unsupported \er: \C\rat\ru
+.br
+ignored \e&: \C\&at\&u
+.br
+useless \e.: \C\.at.u
+.br
+invalid \eG: \C\GatGu
+.br
+special \e-: \C\-at\-u
+.br
+break \ep: \C\pat\pu
+.br
+nospace \ec: \C\cat\cu
+.\".br
+.\"XXX skipchar \ec: \C\zat\zu
+.br
+.ds mystr xatxu
+string expansion: \C\*[mystr]
+.br
+.nr myreg 1341
+register expansion: \C\n[myreg]u
+.br
+ignored \eON: \C\O1at\O2u
+.br
+special character: \C\(hyat\(hyu
+.br
+ignored \eZ\(aqstr\(aq: \C\Z'foo'at\Z'bar'u
+.br
+horizontal motion: \C\h'1'at\h'3'u
+.br
+horizontal line: \C\l'4'at\l'2'u
+.br
+overstrike: \C\o'ab'at\o'cd'u
+.br
+unterminated: \C'at
--- /dev/null
+++ regress/char/C/delim.out_ascii
@@ -0,0 +1,30 @@
+C-DELIM(1)                  General Commands Manual                 C-DELIM(1)
+
+N\bNA\bAM\bME\bE
+     C\bC-\b-d\bde\bel\bli\bim\bm - argument delimiters for the C escape sequence
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+     empty:
+     single byte: -
+     two bytes: -
+     multiple bytes: <integral>
+
+   A\bAr\brg\bgu\bum\bme\ben\bnt\bt d\bde\bel\bli\bim\bmi\bit\bte\ber\brs\bs
+     unsupported \r: @u
+     ignored \&: @u
+     useless \.: @u
+     invalid \G: @u
+     special \-: @u
+     break \p: @u
+     nospace \c: @u
+     string expansion: @u
+     register expansion: 3/4u
+     ignored \ON: @u
+     special character: @u
+     ignored \Z'str': @u
+     horizontal motion: @u
+     horizontal line: @u
+     overstrike: @u
+     unterminated:
+
+OpenBSD                          June 8, 2022                          OpenBSD
--- /dev/null
+++ regress/char/C/delim.out_lint
@@ -0,0 +1,6 @@
+mandoc: delim.in:9:8: ERROR: invalid special character: \C''
+mandoc: delim.in:11:14: ERROR: invalid special character: \C'_'
+mandoc: delim.in:17:20: UNSUPP: unsupported escape sequence: \r
+mandoc: delim.in:17:24: UNSUPP: unsupported escape sequence: \r
+mandoc: delim.in:23:16: WARNING: undefined escape, printing literally: \G
+mandoc: delim.in:51:15: ERROR: incomplete escape sequence: \C'at
--- /dev/null
+++ regress/char/C/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.1 2022/06/08 13:08:00 schwarze Exp $
+
+REGRESS_TARGETS	 = delim
+LINT_TARGETS	 = delim
+
+.include <bsd.regress.mk>
Index: h.out_ascii
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/h.out_ascii,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lregress/roff/esc/h.out_ascii -Lregress/roff/esc/h.out_ascii -u -p -r1.4 -r1.5
--- regress/roff/esc/h.out_ascii
+++ regress/roff/esc/h.out_ascii
@@ -11,6 +11,52 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      escape at the end: ><
      escape at the beginning: ><
      escape in the middle: ><
-     invalid delimiter: ><
 
-OpenBSD                          July 4, 2017                          OpenBSD
+   A\bAr\brg\bgu\bum\bme\ben\bnt\bt d\bde\bel\bli\bim\bmi\bit\bte\ber\brs\bs
+     invalid ASCII: ><
+     unsupported \!:   u
+     unsupported \r: 2u
+     ignored \%:   u
+     ignored \&:   u
+     ignored \):   u
+     ignored \,: 2u
+     ignored \/:   u
+     ignored \^: 2u
+     ignored \a: 2u
+     ignored \d: 2u
+     ignored \t: 2u
+     ignored \u: 2u
+     ignored \{:   u
+     ignored \|: 2u
+     ignored \}:   u
+     useless \.: 2.u
+     invalid \G:   u
+     special \ : 2 u
+     special \':   u
+     special \-:   u
+     special \0: 2 u
+     special \::   u
+     special \_:   u
+     special \`:   u
+     special \e:   u
+     special \~: 2 u
+     break \p:   u
+     nospace \c:   u
+     string expansion:   u
+     register expansion: 21u
+     ignored \O: 2u
+     ignored \Y: 2u
+     ignored \k:   u
+     special character:   u
+     ignored \D: 2u
+     ignored \L: 2u
+     ignored \X: 2u
+     ignored \Z: 2u
+     ignored \b: 2u
+     ignored \v: 2u
+     ignored \x: 2u
+     horizontal motion: 2   u
+     horizontal line: 2___u
+     overstrike: 2c\bdu
+
+OpenBSD                          June 8, 2022                          OpenBSD
--- /dev/null
+++ regress/roff/esc/A1.in
@@ -0,0 +1,53 @@
+.\" $OpenBSD: A1.in,v 1.1 2022/06/08 13:08:00 schwarze Exp $
+.Dd $Mdocdate: June 8 2022 $
+.Dt ESC-A1 1
+.Os
+.Sh NAME
+.Nm esc-A1
+.Nd the roff escape A sequence: identifier syntax validation
+.Sh DESCRIPTION
+empty: \A''
+.br
+letters: \A'word'
+.br
+blank: \A'two words'
+.br
+ASCII non-letters: \AA!"#$%&'()*+,-./0123456789:;<=>?@[\\]^_`{|}~A
+.br
+invalid escapes: \A'\\\.\G'
+.Ss Argument delimiters
+unsupported \er: \A\rword\ru
+.br
+ignored \e&: \A\&word\&u
+.br
+useless \e.: \A\.word.u
+.br
+invalid \eG: \A\GwordGu
+.br
+special \e-: \A\-word\-u
+.br
+break \ep: \A\pword\pu
+.br
+nospace \ec: \A\cword\cu
+.\".br
+.\"skipchar \ez: \A\zword\zu
+.br
+.ds mystr xwordxu
+string expansion: \A\*[mystr]
+.br
+.nr myreg 121
+register expansion: \A\n[myreg]u
+.br
+ignored \eON: \A\O1word\O2u
+.br
+special character: \A\(hyword\(hyu
+.br
+ignored \eZ\(aqstr\(aq: \A\Z'foo'word\Z'bar'u
+.br
+horizontal motion: \A\h'1'word\h'3'u
+.br
+horizontal line: \A\l'4'word\l'2'u
+.br
+overstrike: \A\o'ab'word\o'cd'u
+.br
+unterminated: \A'word
Index: o.out_ascii
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/o.out_ascii,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lregress/roff/esc/o.out_ascii -Lregress/roff/esc/o.out_ascii -u -p -r1.2 -r1.3
--- regress/roff/esc/o.out_ascii
+++ regress/roff/esc/o.out_ascii
@@ -11,4 +11,22 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      wide/narrow/narrow: xO\b-\b|x
      narrow/narrow/wide: x|\b-\bOx
 
-OpenBSD                          July 4, 2017                          OpenBSD
+   A\bAr\brg\bgu\bum\bme\ben\bnt\bt d\bde\bel\bli\bim\bmi\bit\bte\ber\brs\bs
+     unsupported \r: x\byu
+     ignored \&: x\byu
+     useless \.: x\byu
+     invalid \G: x\byu
+     special \-: x\byu
+     break \p: x\byu
+     nospace \c: x\byu
+     string expansion: x\byu
+     register expansion: 2\b3u
+     ignored \ON: x\byu
+     special character: x\byu
+     ignored \Z'str': x\byu
+     horizontal motion: x\byu
+     horizontal line: x\byu
+     overstrike: x\byu
+     unterminated: x\by
+
+OpenBSD                          June 8, 2022                          OpenBSD
Index: B.out_lint
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/B.out_lint,v
retrieving revision 1.6
retrieving revision 1.7
diff -Lregress/roff/esc/B.out_lint -Lregress/roff/esc/B.out_lint -u -p -r1.6 -r1.7
--- regress/roff/esc/B.out_lint
+++ regress/roff/esc/B.out_lint
@@ -1 +1,29 @@
-mandoc: B.in:37:23: ERROR: incomplete escape sequence: \B'1+1
+mandoc: B.in:37:20: UNSUPP: unsupported escape sequence: \!
+mandoc: B.in:37:24: UNSUPP: unsupported escape sequence: \!
+mandoc: B.in:39:20: UNSUPP: unsupported escape sequence: \r
+mandoc: B.in:39:18: ERROR: invalid escape argument delimiter: \B\r
+mandoc: B.in:47:14: ERROR: invalid escape argument delimiter: \B\,
+mandoc: B.in:51:14: ERROR: invalid escape argument delimiter: \B\^
+mandoc: B.in:53:14: ERROR: invalid escape argument delimiter: \B\a
+mandoc: B.in:55:14: ERROR: invalid escape argument delimiter: \B\d
+mandoc: B.in:57:14: ERROR: invalid escape argument delimiter: \B\t
+mandoc: B.in:59:14: ERROR: invalid escape argument delimiter: \B\u
+mandoc: B.in:63:14: ERROR: invalid escape argument delimiter: \B\|
+mandoc: B.in:67:14: ERROR: invalid escape argument delimiter: \B\.
+mandoc: B.in:71:16: WARNING: undefined escape, printing literally: \G
+mandoc: B.in:73:15: ERROR: invalid escape argument delimiter: \B\ 
+mandoc: B.in:79:14: ERROR: invalid escape argument delimiter: \B\0
+mandoc: B.in:89:14: ERROR: invalid escape argument delimiter: \B\~
+mandoc: B.in:101:21: ERROR: invalid escape argument delimiter: \B2
+mandoc: B.in:103:14: ERROR: invalid escape argument delimiter: \B\O1
+mandoc: B.in:105:14: ERROR: invalid escape argument delimiter: \B\Y[mystr]
+mandoc: B.in:111:14: ERROR: invalid escape argument delimiter: \B\D't 1'
+mandoc: B.in:113:14: ERROR: invalid escape argument delimiter: \B\L'2'
+mandoc: B.in:115:14: ERROR: invalid escape argument delimiter: \B\X'foo'
+mandoc: B.in:117:14: ERROR: invalid escape argument delimiter: \B\Z'foo'
+mandoc: B.in:119:14: ERROR: invalid escape argument delimiter: \B\b'2'
+mandoc: B.in:121:14: ERROR: invalid escape argument delimiter: \B\v'2'
+mandoc: B.in:123:14: ERROR: invalid escape argument delimiter: \B\x'2'
+mandoc: B.in:125:20: ERROR: invalid escape argument delimiter: \B\h'1'
+mandoc: B.in:127:18: ERROR: invalid escape argument delimiter: \B\l'4'
+mandoc: B.in:129:13: ERROR: invalid escape argument delimiter: \B\o'ab'
Index: w.out_ascii
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/w.out_ascii,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lregress/roff/esc/w.out_ascii -Lregress/roff/esc/w.out_ascii -u -p -r1.2 -r1.3
--- regress/roff/esc/w.out_ascii
+++ regress/roff/esc/w.out_ascii
@@ -8,6 +8,23 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      character: 24
      blank: 24
      text: 96
+
+   A\bAr\brg\bgu\bum\bme\ben\bnt\bt d\bde\bel\bli\bim\bmi\bit\bte\ber\brs\bs
+     unsupported \r: 24u
+     ignored \&: 24u
+     useless \.: 24u
+     invalid \G: 24u
+     special \-: 24u
+     break \p: 24u
+     nospace \c: 24u
+     string expansion: 24u
+     register expansion: 24u
+     ignored \ON: 24u
+     special character: 24u
+     ignored \Z'str': 24u
+     horizontal motion: 24u
+     horizontal line: 24u
+     overstrike: 24u
      unterminated: 72
 
-OpenBSD                          July 4, 2017                          OpenBSD
+OpenBSD                          June 8, 2022                          OpenBSD
Index: w.out_lint
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/w.out_lint,v
retrieving revision 1.6
retrieving revision 1.7
diff -Lregress/roff/esc/w.out_lint -Lregress/roff/esc/w.out_lint -u -p -r1.6 -r1.7
--- regress/roff/esc/w.out_lint
+++ regress/roff/esc/w.out_lint
@@ -1 +1,4 @@
-mandoc: w.in:17:15: ERROR: incomplete escape sequence: \w'foo
+mandoc: w.in:17:20: UNSUPP: unsupported escape sequence: \r
+mandoc: w.in:17:23: UNSUPP: unsupported escape sequence: \r
+mandoc: w.in:23:16: WARNING: undefined escape, printing literally: \G
+mandoc: w.in:51:15: ERROR: incomplete escape sequence: \w'foo
--- /dev/null
+++ regress/roff/esc/A1.out_ascii
@@ -0,0 +1,31 @@
+ESC-A1(1)                   General Commands Manual                  ESC-A1(1)
+
+N\bNA\bAM\bME\bE
+     e\bes\bsc\bc-\b-A\bA1\b1 - the roff escape A sequence: identifier syntax validation
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+     empty: 0
+     letters: 1
+     blank: 0
+     ASCII non-letters: 1
+     invalid escapes: 1
+
+   A\bAr\brg\bgu\bum\bme\ben\bnt\bt d\bde\bel\bli\bim\bmi\bit\bte\ber\brs\bs
+     unsupported \r: 1u
+     ignored \&: 1u
+     useless \.: 1u
+     invalid \G: 1u
+     special \-: 1u
+     break \p: 1u
+     nospace \c: 1u
+     string expansion: 1u
+     register expansion: 1u
+     ignored \ON: 1u
+     special character: 1u
+     ignored \Z'str': 1u
+     horizontal motion: 1u
+     horizontal line: 1u
+     overstrike: 1u
+     unterminated: 1
+
+OpenBSD                          June 8, 2022                          OpenBSD
Index: l.in
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/l.in,v
retrieving revision 1.3
retrieving revision 1.4
diff -Lregress/roff/esc/l.in -Lregress/roff/esc/l.in -u -p -r1.3 -r1.4
--- regress/roff/esc/l.in
+++ regress/roff/esc/l.in
@@ -1,4 +1,4 @@
-.\" $OpenBSD: l.in,v 1.3 2022/06/07 09:51:03 schwarze Exp $
+.\" $OpenBSD: l.in,v 1.4 2022/06/08 13:08:00 schwarze Exp $
 .Dd $Mdocdate$
 .Dt ESC-L 1
 .Os
@@ -19,5 +19,99 @@ explicit scaling unit and escape sequenc
 default unit and escape char: >\l'7n\(at'<
 .br
 rounding: >\l'0.26ix'<
+.Ss Argument delimiters
+invalid ASCII: >\l-<
 .br
-invalid delimiter: >\l-<
+unsupported \e!: \l\!2\!u
+.br
+unsupported \er: \l\r2u
+.br
+ignored \e%: \l\%2\%u
+.br
+ignored \e&: \l\&2nx\&u
+.br
+ignored \e): \l\)2nx\)u
+.br
+ignored \e,: \l\,2\,u
+.br
+ignored \e/: \l\/2\/u
+.br
+ignored \e^: \l\^2\^u
+.br
+ignored \ea: \l\a2\au
+.br
+ignored \ed: \l\d2\du
+.br
+ignored \et: \l\t2\tu
+.br
+ignored \eu: \l\u2\uu
+.br
+ignored \e{: \l\{2\{u
+.br
+ignored \e|: \l\|2\|u
+.br
+ignored \e}: \l\}2\}u
+.br
+useless \e.: \l\.2.u
+.\".br
+.\"XXX useless \e\e: \l\\2\\u
+.br
+invalid \eG: \l\G2Gu
+.br
+special \e\ : \l\ 2\ u
+.br
+special \e\(aq: \l\'2nx\'u
+.br
+special \e-: \l\-2nx\-u
+.br
+special \e0: \l\02\0u
+.br
+special \e:: \l\:2\:u
+.br
+special \e_: \l\_2\_u
+.br
+special \e\(ga: \l\`2nx\`u
+.br
+special \ee: \l\e2nx\eu
+.br
+special \e~: \l\~2\~u
+.br
+break \ep: \l\p2\pu
+.br
+nospace \ec: \l\c2\cu
+.\".br
+.\"XXX skipchar \ec: \l\z2\zu
+.br
+.ds mystr x2xu
+string expansion: \l\*[mystr]
+.br
+.nr myreg 121
+register expansion: \l\n[myreg]u
+.br
+ignored \eO: \l\O12\O2u
+.br
+ignored \eY: \l\Y[mystr]2\Y[mystr]u
+.br
+ignored \ek: \l\k[myreg]2\k[myreg]u
+.br
+special character: \l\(hy2nx\(hyu
+.br
+ignored \eD: \l\D't 1'2\D't 3'u
+.br
+ignored \eL: \l\L'3'2u
+.br
+ignored \eX: \l\X'foo'2\X'bar'u
+.br
+ignored \eZ: \l\Z'foo'2\Z''u
+.br
+ignored \eb: \l\b'3'2\b''u
+.br
+ignored \ev: \l\v'3'2\v'0'u
+.br
+ignored \ex: \l\x'3'2\v'0'u
+.br
+horizontal motion: \l\h'1'2\h'3'u
+.br
+horizontal line: \l\l'4'2\l'3'u
+.br
+overstrike: \l\o'ab'2\o'cd'u
Index: B.out_ascii
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/B.out_ascii,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lregress/roff/esc/B.out_ascii -Lregress/roff/esc/B.out_ascii -u -p -r1.2 -r1.3
--- regress/roff/esc/B.out_ascii
+++ regress/roff/esc/B.out_ascii
@@ -18,6 +18,51 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      parentheses containing number: 1
      complex expression: 1
      other delimiter: 1
-     no closing delimiter: 0
 
-OpenBSD                          July 4, 2017                          OpenBSD
+   A\bAr\brg\bgu\bum\bme\ben\bnt\bt d\bde\bel\bli\bim\bmi\bit\bte\ber\brs\bs
+     unsupported \!: 1u
+     unsupported \r: 042u
+     ignored \%: 1u
+     ignored \&: 1u
+     ignored \): 1u
+     ignored \,: 042u
+     ignored \/: 1u
+     ignored \^: 042u
+     ignored \a: 042u
+     ignored \d: 042u
+     ignored \t: 042u
+     ignored \u: 042u
+     ignored \{: 1u
+     ignored \|: 042u
+     ignored \}: 1u
+     useless \.: 042.u
+     invalid \G: 1u
+     special \ : 042 u
+     special \': 1u
+     special \-: 1u
+     special \0: 042 u
+     special \:: 1u
+     special \_: 1u
+     special \`: 1u
+     special \e: 1u
+     special \~: 042 u
+     break \p: 1u
+     nospace \c: 1u
+     string expansion: 1u
+     register expansion: 03u
+     ignored \O: 042u
+     ignored \Y: 042u
+     ignored \k: 1u
+     special character: 1u
+     ignored \D: 042u
+     ignored \L: 042u
+     ignored \X: 042u
+     ignored \Z: 042u
+     ignored \b: 042u
+     ignored \v: 042u
+     ignored \x: 042u
+     horizontal motion: 042   u
+     horizontal line: 042__u
+     overstrike: 042c\bdu
+
+OpenBSD                          June 8, 2022                          OpenBSD
Index: Makefile
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/Makefile,v
retrieving revision 1.12
retrieving revision 1.13
diff -Lregress/roff/esc/Makefile -Lregress/roff/esc/Makefile -u -p -r1.12 -r1.13
--- regress/roff/esc/Makefile
+++ regress/roff/esc/Makefile
@@ -1,10 +1,11 @@
-# $OpenBSD: Makefile,v 1.22 2022/05/30 22:50:40 schwarze Exp $
+# $OpenBSD: Makefile,v 1.23 2022/06/08 13:08:00 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 r V1 w z
+REGRESS_TARGETS	+= A1 B bs_man bs_mdoc c c_man E1 e f h hneg
+REGRESS_TARGETS	+= l O1 o p r V1 w z
 REGRESS_TARGETS	+= ignore invalid unsupp
 HTML_TARGETS	 = f
-LINT_TARGETS	 = comment B h l O1 r V1 w ignore invalid unsupp
+LINT_TARGETS	 = comment A1 B h l O1 o r V1 w ignore invalid unsupp
 
 # mandoc defects:
 # - \h with a negative argument replaces output characters
Index: h.out_lint
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/h.out_lint,v
retrieving revision 1.8
retrieving revision 1.9
diff -Lregress/roff/esc/h.out_lint -Lregress/roff/esc/h.out_lint -u -p -r1.8 -r1.9
--- regress/roff/esc/h.out_lint
+++ regress/roff/esc/h.out_lint
@@ -1 +1,30 @@
-mandoc: h.in:23:21: ERROR: invalid escape argument delimiter: \h-
+mandoc: h.in:23:17: ERROR: invalid escape argument delimiter: \h-
+mandoc: h.in:25:20: UNSUPP: unsupported escape sequence: \!
+mandoc: h.in:25:23: UNSUPP: unsupported escape sequence: \!
+mandoc: h.in:27:20: UNSUPP: unsupported escape sequence: \r
+mandoc: h.in:27:18: ERROR: invalid escape argument delimiter: \h\r
+mandoc: h.in:35:14: ERROR: invalid escape argument delimiter: \h\,
+mandoc: h.in:39:14: ERROR: invalid escape argument delimiter: \h\^
+mandoc: h.in:41:14: ERROR: invalid escape argument delimiter: \h\a
+mandoc: h.in:43:14: ERROR: invalid escape argument delimiter: \h\d
+mandoc: h.in:45:14: ERROR: invalid escape argument delimiter: \h\t
+mandoc: h.in:47:14: ERROR: invalid escape argument delimiter: \h\u
+mandoc: h.in:51:14: ERROR: invalid escape argument delimiter: \h\|
+mandoc: h.in:55:14: ERROR: invalid escape argument delimiter: \h\.
+mandoc: h.in:59:16: WARNING: undefined escape, printing literally: \G
+mandoc: h.in:61:15: ERROR: invalid escape argument delimiter: \h\ 
+mandoc: h.in:67:14: ERROR: invalid escape argument delimiter: \h\0
+mandoc: h.in:77:14: ERROR: invalid escape argument delimiter: \h\~
+mandoc: h.in:89:21: ERROR: invalid escape argument delimiter: \h1
+mandoc: h.in:91:14: ERROR: invalid escape argument delimiter: \h\O1
+mandoc: h.in:93:14: ERROR: invalid escape argument delimiter: \h\Y[mystr]
+mandoc: h.in:99:14: ERROR: invalid escape argument delimiter: \h\D't 1'
+mandoc: h.in:101:14: ERROR: invalid escape argument delimiter: \h\L'3'
+mandoc: h.in:103:14: ERROR: invalid escape argument delimiter: \h\X'foo'
+mandoc: h.in:105:14: ERROR: invalid escape argument delimiter: \h\Z'foo'
+mandoc: h.in:107:14: ERROR: invalid escape argument delimiter: \h\b'3'
+mandoc: h.in:109:14: ERROR: invalid escape argument delimiter: \h\v'3'
+mandoc: h.in:111:14: ERROR: invalid escape argument delimiter: \h\x'3'
+mandoc: h.in:113:20: ERROR: invalid escape argument delimiter: \h\h'1'
+mandoc: h.in:115:18: ERROR: invalid escape argument delimiter: \h\l'4'
+mandoc: h.in:117:13: ERROR: invalid escape argument delimiter: \h\o'ab'
--- /dev/null
+++ regress/roff/esc/A1.out_lint
@@ -0,0 +1,5 @@
+mandoc: A1.in:17:25: WARNING: undefined escape, printing literally: \G
+mandoc: A1.in:19:20: UNSUPP: unsupported escape sequence: \r
+mandoc: A1.in:19:26: UNSUPP: unsupported escape sequence: \r
+mandoc: A1.in:25:16: WARNING: undefined escape, printing literally: \G
+mandoc: A1.in:53:15: ERROR: incomplete escape sequence: \A'word
Index: B.in
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/B.in,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lregress/roff/esc/B.in -Lregress/roff/esc/B.in -u -p -r1.2 -r1.3
--- regress/roff/esc/B.in
+++ regress/roff/esc/B.in
@@ -1,4 +1,4 @@
-.\" $OpenBSD: B.in,v 1.3 2017/07/04 14:53:27 schwarze Exp $
+.\" $OpenBSD: B.in,v 1.4 2022/06/08 13:08:00 schwarze Exp $
 .Dd $Mdocdate$
 .Dt ESC-B 1
 .Os
@@ -33,5 +33,97 @@ parentheses containing number: \B'(42)'
 complex expression: \B'3+(3*(5==5*2)*4)+(3*5)/2'
 .br
 other delimiter: \Bx1+1x
+.Ss Argument delimiters
+unsupported \e!: \B\!42\!u
 .br
-no closing delimiter: \B'1+1
+unsupported \er: \B\r42u
+.br
+ignored \e%: \B\%42\%u
+.br
+ignored \e&: \B\&42\&u
+.br
+ignored \e): \B\)42\)u
+.br
+ignored \e,: \B\,42\,u
+.br
+ignored \e/: \B\/42\/u
+.br
+ignored \e^: \B\^42\^u
+.br
+ignored \ea: \B\a42\au
+.br
+ignored \ed: \B\d42\du
+.br
+ignored \et: \B\t42\tu
+.br
+ignored \eu: \B\u42\uu
+.br
+ignored \e{: \B\{42\{u
+.br
+ignored \e|: \B\|42\|u
+.br
+ignored \e}: \B\}42\}u
+.br
+useless \e.: \B\.42.u
+.\".br
+.\"XXX useless \e\e: \B\\42\\u
+.br
+invalid \eG: \B\G42Gu
+.br
+special \e\ : \B\ 42\ u
+.br
+special \e\(aq: \B\'42\'u
+.br
+special \e-: \B\-42\-u
+.br
+special \e0: \B\042\0u
+.br
+special \e:: \B\:42\:u
+.br
+special \e_: \B\_42\_u
+.br
+special \e\(ga: \B\`42\`u
+.br
+special \ee: \B\e42\eu
+.br
+special \e~: \B\~42\~u
+.br
+break \ep: \B\p42\pu
+.br
+nospace \ec: \B\c42\cu
+.\".br
+.\"XXX skipchar \ec: \B\z42\zu
+.br
+.ds mystr x42xu
+string expansion: \B\*[mystr]
+.br
+.nr myreg 23
+register expansion: \B\n[myreg]u
+.br
+ignored \eO: \B\O142\O2u
+.br
+ignored \eY: \B\Y[mystr]42\Y[mystr]u
+.br
+ignored \ek: \B\k[myreg]42\k[myreg]u
+.br
+special character: \B\(hy42\(hyu
+.br
+ignored \eD: \B\D't 1'42\D't 2'u
+.br
+ignored \eL: \B\L'2'42u
+.br
+ignored \eX: \B\X'foo'42\X'bar'u
+.br
+ignored \eZ: \B\Z'foo'42\Z''u
+.br
+ignored \eb: \B\b'2'42\b''u
+.br
+ignored \ev: \B\v'2'42\v'0'u
+.br
+ignored \ex: \B\x'2'42\v'0'u
+.br
+horizontal motion: \B\h'1'42\h'3'u
+.br
+horizontal line: \B\l'4'42\l'2'u
+.br
+overstrike: \B\o'ab'42\o'cd'u
Index: l.out_ascii
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/l.out_ascii,v
retrieving revision 1.3
retrieving revision 1.4
diff -Lregress/roff/esc/l.out_ascii -Lregress/roff/esc/l.out_ascii -u -p -r1.3 -r1.4
--- regress/roff/esc/l.out_ascii
+++ regress/roff/esc/l.out_ascii
@@ -11,6 +11,52 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
      explicit scaling unit and escape sequence: >+-+-+-<
      default unit and escape char: >@@@@@@@<
      rounding: >xxx<
-     invalid delimiter: ><
 
-OpenBSD                          June 7, 2022                          OpenBSD
+   A\bAr\brg\bgu\bum\bme\ben\bnt\bt d\bde\bel\bli\bim\bmi\bit\bte\ber\brs\bs
+     invalid ASCII: ><
+     unsupported \!: __u
+     unsupported \r: 2u
+     ignored \%: __u
+     ignored \&: xxu
+     ignored \): xxu
+     ignored \,: 2u
+     ignored \/: __u
+     ignored \^: 2u
+     ignored \a: 2u
+     ignored \d: 2u
+     ignored \t: 2u
+     ignored \u: 2u
+     ignored \{: __u
+     ignored \|: 2u
+     ignored \}: __u
+     useless \.: 2.u
+     invalid \G: __u
+     special \ : 2 u
+     special \': xxu
+     special \-: xxu
+     special \0: 2 u
+     special \:: __u
+     special \_: __u
+     special \`: xxu
+     special \e: xxu
+     special \~: 2 u
+     break \p: __u
+     nospace \c: __u
+     string expansion: __u
+     register expansion: 21u
+     ignored \O: 2u
+     ignored \Y: 2u
+     ignored \k: __u
+     special character: xxu
+     ignored \D: 2u
+     ignored \L: 2u
+     ignored \X: 2u
+     ignored \Z: 2u
+     ignored \b: 2u
+     ignored \v: 2u
+     ignored \x: 2u
+     horizontal motion: 2   u
+     horizontal line: 2___u
+     overstrike: 2c\bdu
+
+OpenBSD                          June 8, 2022                          OpenBSD
Index: w.in
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/w.in,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lregress/roff/esc/w.in -Lregress/roff/esc/w.in -u -p -r1.2 -r1.3
--- regress/roff/esc/w.in
+++ regress/roff/esc/w.in
@@ -1,4 +1,4 @@
-.\" $OpenBSD: w.in,v 1.3 2017/07/04 14:53:27 schwarze Exp $
+.\" $OpenBSD: w.in,v 1.4 2022/06/08 13:08:00 schwarze Exp $
 .Dd $Mdocdate$
 .Dt ESC-W 1
 .Os
@@ -13,5 +13,39 @@ character: \w'n'
 blank: \w' '
 .br
 text: \w'text'
+.Ss Argument delimiters
+unsupported \er: \w\rM\ru
+.br
+ignored \e&: \w\&M\&u
+.br
+useless \e.: \w\.M.u
+.br
+invalid \eG: \w\GMGu
+.br
+special \e-: \w\-M\-u
+.br
+break \ep: \w\pM\pu
+.br
+nospace \ec: \w\cM\cu
+.\".br
+.\"XXX skipchar \ec: \w\zM\zu
+.br
+.ds mystr xMxu
+string expansion: \w\*[mystr]
+.br
+.nr myreg 121
+register expansion: \w\n[myreg]u
+.br
+ignored \eON: \w\O1M\O2u
+.br
+special character: \w\(hyM\(hyu
+.br
+ignored \eZ\(aqstr\(aq: \w\Z'foo'M\Z'bar'u
+.br
+horizontal motion: \w\h'1'M\h'3'u
+.br
+horizontal line: \w\l'4'M\l'2'u
+.br
+overstrike: \w\o'ab'M\o'cd'u
 .br
 unterminated: \w'foo
Index: l.out_lint
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/l.out_lint,v
retrieving revision 1.5
retrieving revision 1.6
diff -Lregress/roff/esc/l.out_lint -Lregress/roff/esc/l.out_lint -u -p -r1.5 -r1.6
--- regress/roff/esc/l.out_lint
+++ regress/roff/esc/l.out_lint
@@ -1 +1,30 @@
-mandoc: l.in:23:21: ERROR: invalid escape argument delimiter: \l-
+mandoc: l.in:23:17: ERROR: invalid escape argument delimiter: \l-
+mandoc: l.in:25:20: UNSUPP: unsupported escape sequence: \!
+mandoc: l.in:25:23: UNSUPP: unsupported escape sequence: \!
+mandoc: l.in:27:20: UNSUPP: unsupported escape sequence: \r
+mandoc: l.in:27:18: ERROR: invalid escape argument delimiter: \l\r
+mandoc: l.in:35:14: ERROR: invalid escape argument delimiter: \l\,
+mandoc: l.in:39:14: ERROR: invalid escape argument delimiter: \l\^
+mandoc: l.in:41:14: ERROR: invalid escape argument delimiter: \l\a
+mandoc: l.in:43:14: ERROR: invalid escape argument delimiter: \l\d
+mandoc: l.in:45:14: ERROR: invalid escape argument delimiter: \l\t
+mandoc: l.in:47:14: ERROR: invalid escape argument delimiter: \l\u
+mandoc: l.in:51:14: ERROR: invalid escape argument delimiter: \l\|
+mandoc: l.in:55:14: ERROR: invalid escape argument delimiter: \l\.
+mandoc: l.in:59:16: WARNING: undefined escape, printing literally: \G
+mandoc: l.in:61:15: ERROR: invalid escape argument delimiter: \l\ 
+mandoc: l.in:67:14: ERROR: invalid escape argument delimiter: \l\0
+mandoc: l.in:77:14: ERROR: invalid escape argument delimiter: \l\~
+mandoc: l.in:89:21: ERROR: invalid escape argument delimiter: \l1
+mandoc: l.in:91:14: ERROR: invalid escape argument delimiter: \l\O1
+mandoc: l.in:93:14: ERROR: invalid escape argument delimiter: \l\Y[mystr]
+mandoc: l.in:99:14: ERROR: invalid escape argument delimiter: \l\D't 1'
+mandoc: l.in:101:14: ERROR: invalid escape argument delimiter: \l\L'3'
+mandoc: l.in:103:14: ERROR: invalid escape argument delimiter: \l\X'foo'
+mandoc: l.in:105:14: ERROR: invalid escape argument delimiter: \l\Z'foo'
+mandoc: l.in:107:14: ERROR: invalid escape argument delimiter: \l\b'3'
+mandoc: l.in:109:14: ERROR: invalid escape argument delimiter: \l\v'3'
+mandoc: l.in:111:14: ERROR: invalid escape argument delimiter: \l\x'3'
+mandoc: l.in:113:20: ERROR: invalid escape argument delimiter: \l\h'1'
+mandoc: l.in:115:18: ERROR: invalid escape argument delimiter: \l\l'4'
+mandoc: l.in:117:13: ERROR: invalid escape argument delimiter: \l\o'ab'
Index: o.in
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/o.in,v
retrieving revision 1.2
retrieving revision 1.3
diff -Lregress/roff/esc/o.in -Lregress/roff/esc/o.in -u -p -r1.2 -r1.3
--- regress/roff/esc/o.in
+++ regress/roff/esc/o.in
@@ -1,4 +1,4 @@
-.\" $OpenBSD: o.in,v 1.2 2017/07/04 14:53:27 schwarze Exp $
+.\" $OpenBSD: o.in,v 1.3 2022/06/08 13:08:00 schwarze Exp $
 .Dd $Mdocdate$
 .Dt ESC-O 1
 .Os
@@ -17,3 +17,39 @@ narrow/wide: x\o'|O'x
 wide/narrow/narrow: x\o'O-|'x
 .br
 narrow/narrow/wide: x\o'|-O'x
+.Ss Argument delimiters
+unsupported \er: \o\rxy\ru
+.br
+ignored \e&: \o\&xy\&u
+.br
+useless \e.: \o\.xy.u
+.br
+invalid \eG: \o\GxyGu
+.br
+special \e-: \o\-xy\-u
+.br
+break \ep: \o\pxy\pu
+.br
+nospace \ec: \o\cxy\cu
+.\".br
+.\"XXX skipchar \ec: \o\zxy\zu
+.br
+.ds mystr zx
+string expansion: \o\*[mystr]yzu
+.br
+.nr myreg 12
+register expansion: \o\n[myreg]31u
+.br
+ignored \eON: \o\O1xy\O2u
+.br
+special character: \o\(hyxy\(hyu
+.br
+ignored \eZ\(aqstr\(aq: \o\Z'foo'xy\Z'bar'u
+.br
+horizontal motion: \o\h'1'xy\h'3'u
+.br
+horizontal line: \o\l'4'xy\l'2'u
+.br
+overstrike: \o\o'ab'xy\o'cd'u
+.br
+unterminated: \o'xy
Index: h.in
===================================================================
RCS file: /home/cvs/mandoc/mandoc/regress/roff/esc/h.in,v
retrieving revision 1.5
retrieving revision 1.6
diff -Lregress/roff/esc/h.in -Lregress/roff/esc/h.in -u -p -r1.5 -r1.6
--- regress/roff/esc/h.in
+++ regress/roff/esc/h.in
@@ -1,4 +1,4 @@
-.\" $OpenBSD: h.in,v 1.6 2017/07/04 14:53:27 schwarze Exp $
+.\" $OpenBSD: h.in,v 1.7 2022/06/08 13:08:00 schwarze Exp $
 .Dd $Mdocdate$
 .Dt ESC-H 1
 .Os
@@ -19,5 +19,99 @@ escape at the end: >\h'0+\w'\&''<
 escape at the beginning: >\h'\w'\&'M+0'<
 .br
 escape in the middle: >\h'0+\w'\&'+0'<
+.Ss Argument delimiters
+invalid ASCII: >\h-<
 .br
-invalid delimiter: >\h-<
+unsupported \e!: \h\!2\!u
+.br
+unsupported \er: \h\r2u
+.br
+ignored \e%: \h\%2\%u
+.br
+ignored \e&: \h\&2\&u
+.br
+ignored \e): \h\)2\)u
+.br
+ignored \e,: \h\,2\,u
+.br
+ignored \e/: \h\/2\/u
+.br
+ignored \e^: \h\^2\^u
+.br
+ignored \ea: \h\a2\au
+.br
+ignored \ed: \h\d2\du
+.br
+ignored \et: \h\t2\tu
+.br
+ignored \eu: \h\u2\uu
+.br
+ignored \e{: \h\{2\{u
+.br
+ignored \e|: \h\|2\|u
+.br
+ignored \e}: \h\}2\}u
+.br
+useless \e.: \h\.2.u
+.\".br
+.\"XXX useless \e\e: \h\\2\\u
+.br
+invalid \eG: \h\G2Gu
+.br
+special \e\ : \h\ 2\ u
+.br
+special \e\(aq: \h\'2\'u
+.br
+special \e-: \h\-2\-u
+.br
+special \e0: \h\02\0u
+.br
+special \e:: \h\:2\:u
+.br
+special \e_: \h\_2\_u
+.br
+special \e\(ga: \h\`2\`u
+.br
+special \ee: \h\e2\eu
+.br
+special \e~: \h\~2\~u
+.br
+break \ep: \h\p2\pu
+.br
+nospace \ec: \h\c2\cu
+.\".br
+.\"XXX skipchar \ec: \h\z2\zu
+.br
+.ds mystr x2xu
+string expansion: \h\*[mystr]
+.br
+.nr myreg 121
+register expansion: \h\n[myreg]u
+.br
+ignored \eO: \h\O12\O2u
+.br
+ignored \eY: \h\Y[mystr]2\Y[mystr]u
+.br
+ignored \ek: \h\k[myreg]2\k[myreg]u
+.br
+special character: \h\(hy2\(hyu
+.br
+ignored \eD: \h\D't 1'2\D't 3'u
+.br
+ignored \eL: \h\L'3'2u
+.br
+ignored \eX: \h\X'foo'2\X'bar'u
+.br
+ignored \eZ: \h\Z'foo'2\Z''u
+.br
+ignored \eb: \h\b'3'2\b''u
+.br
+ignored \ev: \h\v'3'2\v'0'u
+.br
+ignored \ex: \h\x'3'2\v'0'u
+.br
+horizontal motion: \h\h'1'2\h'3'u
+.br
+horizontal line: \h\l'4'2\l'3'u
+.br
+overstrike: \h\o'ab'2\o'cd'u
--
 To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv


                 reply	other threads:[~2022-06-08 13:24 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3365ac9043f4071c@mandoc.bsd.lv \
    --to=schwarze@mandoc.bsd.lv \
    --cc=source@mandoc.bsd.lv \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).