summaryrefslogtreecommitdiffstats
path: root/regress/roff
diff options
context:
space:
mode:
Diffstat (limited to 'regress/roff')
-rw-r--r--regress/roff/Makefile7
-rw-r--r--regress/roff/Makefile.inc5
-rw-r--r--regress/roff/args/Makefile6
-rw-r--r--regress/roff/args/man.in134
-rw-r--r--regress/roff/args/man.out_ascii38
-rw-r--r--regress/roff/args/man.out_lint9
-rw-r--r--regress/roff/args/mdoc.in124
-rw-r--r--regress/roff/args/mdoc.out_ascii34
-rw-r--r--regress/roff/args/mdoc.out_lint13
-rw-r--r--regress/roff/args/roff.in71
-rw-r--r--regress/roff/args/roff.out_ascii43
-rw-r--r--regress/roff/args/roff.out_lint16
-rw-r--r--regress/roff/br/Makefile6
-rw-r--r--regress/roff/br/args.in9
-rw-r--r--regress/roff/br/args.out_ascii14
-rw-r--r--regress/roff/br/args.out_lint1
-rw-r--r--regress/roff/cc/Makefile6
-rw-r--r--regress/roff/cc/basic.in19
-rw-r--r--regress/roff/cc/basic.out_ascii17
-rw-r--r--regress/roff/cc/basic.out_lint1
-rw-r--r--regress/roff/cond/Makefile6
-rw-r--r--regress/roff/cond/before-Dd.in30
-rw-r--r--regress/roff/cond/before-Dd.out_ascii17
-rw-r--r--regress/roff/cond/close.in15
-rw-r--r--regress/roff/cond/close.out_ascii19
-rw-r--r--regress/roff/cond/close.out_lint1
-rw-r--r--regress/roff/cond/ie.in30
-rw-r--r--regress/roff/cond/ie.out_ascii19
-rw-r--r--regress/roff/cond/if.in97
-rw-r--r--regress/roff/cond/if.out_ascii34
-rw-r--r--regress/roff/cond/if.out_lint2
-rw-r--r--regress/roff/cond/numeric.in152
-rw-r--r--regress/roff/cond/numeric.out_ascii41
-rw-r--r--regress/roff/cond/register.in11
-rw-r--r--regress/roff/cond/register.out_ascii14
-rw-r--r--regress/roff/cond/strcmp.in37
-rw-r--r--regress/roff/cond/strcmp.out_ascii18
-rw-r--r--regress/roff/de/Dd.in11
-rw-r--r--regress/roff/de/Dd.out_ascii9
-rw-r--r--regress/roff/de/Makefile44
-rw-r--r--regress/roff/de/TH.in8
-rw-r--r--regress/roff/de/TH.out_ascii13
-rw-r--r--regress/roff/de/append.in25
-rw-r--r--regress/roff/de/append.out_ascii9
-rw-r--r--regress/roff/de/cond.in13
-rw-r--r--regress/roff/de/cond.out_ascii9
-rw-r--r--regress/roff/de/escname.in43
-rw-r--r--regress/roff/de/escname.out_ascii23
-rw-r--r--regress/roff/de/escname.out_lint8
-rw-r--r--regress/roff/de/factorial.in31
-rw-r--r--regress/roff/de/factorial.out_ascii18
-rw-r--r--regress/roff/de/indir.in30
-rw-r--r--regress/roff/de/indir.out_ascii12
-rw-r--r--regress/roff/de/indir.out_lint4
-rw-r--r--regress/roff/de/startde.in24
-rw-r--r--regress/roff/de/startde.out_ascii15
-rw-r--r--regress/roff/ds/Makefile5
-rw-r--r--regress/roff/ds/append.in17
-rw-r--r--regress/roff/ds/append.out_ascii12
-rw-r--r--regress/roff/ds/escname.in14
-rw-r--r--regress/roff/ds/escname.out_ascii11
-rw-r--r--regress/roff/ds/nested.in14
-rw-r--r--regress/roff/ds/nested.out_ascii11
-rw-r--r--regress/roff/ds/quoting.in32
-rw-r--r--regress/roff/ds/quoting.out_ascii17
-rw-r--r--regress/roff/esc/B.in36
-rw-r--r--regress/roff/esc/B.out_ascii23
-rw-r--r--regress/roff/esc/B.out_lint1
-rw-r--r--regress/roff/esc/Makefile6
-rw-r--r--regress/roff/esc/c.in17
-rw-r--r--regress/roff/esc/c.out_ascii11
-rw-r--r--regress/roff/esc/c_man.in12
-rw-r--r--regress/roff/esc/c_man.out_ascii15
-rw-r--r--regress/roff/esc/e.in19
-rw-r--r--regress/roff/esc/e.out_ascii13
-rw-r--r--regress/roff/esc/f.in12
-rw-r--r--regress/roff/esc/f.out_ascii11
-rw-r--r--regress/roff/esc/h.in18
-rw-r--r--regress/roff/esc/h.out_ascii14
-rw-r--r--regress/roff/esc/h.out_lint1
-rw-r--r--regress/roff/esc/ignore.in14
-rw-r--r--regress/roff/esc/ignore.out_ascii12
-rw-r--r--regress/roff/esc/ignore.out_lint1
-rw-r--r--regress/roff/esc/multi.in10
-rw-r--r--regress/roff/esc/multi.out_ascii10
-rw-r--r--regress/roff/esc/o.in18
-rw-r--r--regress/roff/esc/o.out_ascii14
-rw-r--r--regress/roff/esc/one.in16
-rw-r--r--regress/roff/esc/one.out_ascii13
-rw-r--r--regress/roff/esc/two.in75
-rw-r--r--regress/roff/esc/two.out_ascii26
-rw-r--r--regress/roff/esc/w.in16
-rw-r--r--regress/roff/esc/w.out_ascii13
-rw-r--r--regress/roff/esc/w.out_lint1
-rw-r--r--regress/roff/esc/z.in24
-rw-r--r--regress/roff/esc/z.out_ascii16
-rw-r--r--regress/roff/ft/Makefile6
-rw-r--r--regress/roff/ft/badargs.in15
-rw-r--r--regress/roff/ft/badargs.out_ascii13
-rw-r--r--regress/roff/ft/badargs.out_lint2
-rw-r--r--regress/roff/ig/Makefile6
-rw-r--r--regress/roff/ig/basic.in27
-rw-r--r--regress/roff/ig/basic.out_ascii13
-rw-r--r--regress/roff/ig/basic.out_lint3
-rw-r--r--regress/roff/it/Makefile6
-rw-r--r--regress/roff/it/badarg.in17
-rw-r--r--regress/roff/it/badarg.out_ascii9
-rw-r--r--regress/roff/it/badarg.out_lint2
-rw-r--r--regress/roff/it/double.in16
-rw-r--r--regress/roff/it/double.out_ascii13
-rw-r--r--regress/roff/it/text.in27
-rw-r--r--regress/roff/it/text.out_ascii16
-rw-r--r--regress/roff/ll/Makefile7
-rw-r--r--regress/roff/ll/basic.in25
-rw-r--r--regress/roff/ll/basic.out_ascii23
-rw-r--r--regress/roff/na/Makefile5
-rw-r--r--regress/roff/na/args.in9
-rw-r--r--regress/roff/na/args.out_ascii13
-rw-r--r--regress/roff/nr/Makefile6
-rw-r--r--regress/roff/nr/argc.in21
-rw-r--r--regress/roff/nr/argc.out_ascii17
-rw-r--r--regress/roff/nr/divzero.in8
-rw-r--r--regress/roff/nr/divzero.out_ascii13
-rw-r--r--regress/roff/nr/divzero.out_lint2
-rw-r--r--regress/roff/nr/escname.in17
-rw-r--r--regress/roff/nr/escname.out_ascii19
-rw-r--r--regress/roff/nr/escname.out_lint4
-rw-r--r--regress/roff/nr/eval.in67
-rw-r--r--regress/roff/nr/eval.out_ascii33
-rw-r--r--regress/roff/nr/int.in15
-rw-r--r--regress/roff/nr/int.out_ascii15
-rw-r--r--regress/roff/nr/predef.in24
-rw-r--r--regress/roff/nr/predef.out_ascii21
-rw-r--r--regress/roff/nr/rr.in15
-rw-r--r--regress/roff/nr/rr.out_ascii14
-rw-r--r--regress/roff/nr/scale.in26
-rw-r--r--regress/roff/nr/scale.out_ascii13
-rw-r--r--regress/roff/ps/Makefile5
-rw-r--r--regress/roff/ps/ignore.in9
-rw-r--r--regress/roff/ps/ignore.out_ascii13
-rw-r--r--regress/roff/rm/Makefile5
-rw-r--r--regress/roff/rm/basic.in19
-rw-r--r--regress/roff/rm/basic.out_ascii10
-rw-r--r--regress/roff/scale/Makefile5
-rw-r--r--regress/roff/scale/horiz.in31
-rw-r--r--regress/roff/scale/horiz.out_ascii27
-rw-r--r--regress/roff/sp/Makefile6
-rw-r--r--regress/roff/sp/badargs-man.in17
-rw-r--r--regress/roff/sp/badargs-man.out_ascii29
-rw-r--r--regress/roff/sp/badargs-man.out_lint1
-rw-r--r--regress/roff/sp/badargs-mdoc.in20
-rw-r--r--regress/roff/sp/badargs-mdoc.out_ascii25
-rw-r--r--regress/roff/sp/negative.in8
-rw-r--r--regress/roff/sp/negative.out_ascii14
-rw-r--r--regress/roff/sp/scaling-man.in27
-rw-r--r--regress/roff/sp/scaling-man.out_ascii34
-rw-r--r--regress/roff/sp/scaling-mdoc.in30
-rw-r--r--regress/roff/sp/scaling-mdoc.out_ascii30
-rw-r--r--regress/roff/string/Makefile11
-rw-r--r--regress/roff/string/escape.in26
-rw-r--r--regress/roff/string/escape.out_ascii31
-rw-r--r--regress/roff/string/infinite.in8
-rw-r--r--regress/roff/string/infinite.out_ascii13
-rw-r--r--regress/roff/string/name.in35
-rw-r--r--regress/roff/string/name.out_ascii18
-rw-r--r--regress/roff/string/name.out_lint17
-rw-r--r--regress/roff/string/zerolength.in16
-rw-r--r--regress/roff/string/zerolength.out_ascii15
-rw-r--r--regress/roff/tr/Makefile6
-rw-r--r--regress/roff/tr/args.in16
-rw-r--r--regress/roff/tr/args.out_ascii14
-rw-r--r--regress/roff/tr/args.out_lint3
172 files changed, 3303 insertions, 0 deletions
diff --git a/regress/roff/Makefile b/regress/roff/Makefile
new file mode 100644
index 00000000..96474204
--- /dev/null
+++ b/regress/roff/Makefile
@@ -0,0 +1,7 @@
+# $OpenBSD: Makefile,v 1.20 2015/02/06 16:05:51 schwarze Exp $
+
+SUBDIR = args cond esc scale string
+SUBDIR += br cc de ds ft ig it ll na nr ps rm sp tr
+
+.include "../Makefile.sub"
+.include <bsd.subdir.mk>
diff --git a/regress/roff/Makefile.inc b/regress/roff/Makefile.inc
new file mode 100644
index 00000000..6b294ca9
--- /dev/null
+++ b/regress/roff/Makefile.inc
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile.inc,v 1.3 2015/02/03 19:37:25 schwarze Exp $
+
+SKIP_TMAN ?= ALL
+
+.include "../Makefile.inc"
diff --git a/regress/roff/args/Makefile b/regress/roff/args/Makefile
new file mode 100644
index 00000000..3d756c97
--- /dev/null
+++ b/regress/roff/args/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.4 2014/07/06 19:08:57 schwarze Exp $
+
+REGRESS_TARGETS = roff man mdoc
+LINT_TARGETS = roff man mdoc
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/args/man.in b/regress/roff/args/man.in
new file mode 100644
index 00000000..36ce992f
--- /dev/null
+++ b/regress/roff/args/man.in
@@ -0,0 +1,134 @@
+.TH ARGS-MAN 1 "November 19, 2014"
+.SH NAME
+args-man - arguments to man macros
+.SH DESCRIPTION
+standard unquoted:
+.IB one two
+text
+.br
+escaped blanks:
+.IB one\ one two\ two
+text
+.br
+escaped 'e' character:
+.IB one\eone two
+text
+.br
+.\"escaped backslash before blank:
+.\"IB one\\ two
+.\"text
+.\"br
+escaped backslash before 'e' character:
+.IB one\\e two
+text
+.br
+double inter-argument space:
+.IB one two
+text
+.br
+triple inter-argument space:
+.IB one two
+text
+.br
+single eol blank:
+.IB one two
+text
+.br
+double eol blank:
+.IB one two
+text
+.br
+triple eol blank:
+.IB one two
+text
+.br
+standard quoted:
+.IB "one" "two"
+text
+.br
+quoted quotes:
+.IB "one""one" """two"""
+text
+.br
+quoted whitespace:
+.IB "one one" "two two"
+text
+.br
+escaped 'e' characters:
+.IB "one \e one" "\e"
+text
+.br
+escaped backslash before blank:
+.IB "one\\ one" "\\ "
+text
+.br
+escaped backslash before 'e' character:
+.IB "one\\eone" "\\e"
+text
+.br
+double inter-argument space:
+.IB "one one" "two two"
+text
+.br
+triple inter-argument space:
+.IB "one one" "two two"
+text
+.br
+missing inter-argument space:
+.IB "one one"two\ two
+text
+.br
+single eol blank:
+.IB "one one" "two two"
+text
+.br
+double eol blank:
+.IB "one one" "two two"
+text
+.br
+triple eol blank:
+.IB "one one" "two two"
+text
+.br
+.\" Disabled for now because mandoc man(7) seems to
+.\" mishandle trailing blanks in arguments,
+.\" but that really isn't urgent to fix.
+.ig
+trailing blanks in arguments:
+.IB "one " "two "
+text
+.br
+..
+unterminated quotes:
+.IB "one
+text
+.br
+.IB one "two
+text
+.br
+.ig
+single trailing blank in unterminated quotes:
+.IB "one
+text
+.br
+.IB one "two
+text
+.br
+double trailing blank in unterminated quotes:
+.IB "one
+text
+.br
+.IB one "two
+text
+.br
+..
+tab after macro:
+.IB one two
+text
+.br
+escape sequence after macro:
+.IB\(lqone two
+text
+.br
+backslash at eol:
+.IB one two\
diff --git a/regress/roff/args/man.out_ascii b/regress/roff/args/man.out_ascii
new file mode 100644
index 00000000..b936b45f
--- /dev/null
+++ b/regress/roff/args/man.out_ascii
@@ -0,0 +1,38 @@
+ARGS-MAN(1) General Commands Manual ARGS-MAN(1)
+
+
+
+NNAAMMEE
+ args-man - arguments to man macros
+
+DDEESSCCRRIIPPTTIIOONN
+ standard unquoted: _o_n_ettwwoo text
+ escaped blanks: _o_n_e _o_n_ettwwoo ttwwoo text
+ escaped 'e' character: _o_n_e_\_o_n_ettwwoo text
+ escaped backslash before 'e' character: _o_n_e_\ttwwoo text
+ double inter-argument space: _o_n_ettwwoo text
+ triple inter-argument space: _o_n_ettwwoo text
+ single eol blank: _o_n_ettwwoo text
+ double eol blank: _o_n_ettwwoo text
+ triple eol blank: _o_n_ettwwoo text
+ standard quoted: _o_n_ettwwoo text
+ quoted quotes: _o_n_e_"_o_n_e""ttwwoo"" text
+ quoted whitespace: _o_n_e _o_n_ettwwoo ttwwoo text
+ escaped 'e' characters: _o_n_e _\ _o_n_e\\ text
+ escaped backslash before blank: _o_n_e _o_n_e text
+ escaped backslash before 'e' character: _o_n_e_\_o_n_e\\ text
+ double inter-argument space: _o_n_e _o_n_ettwwoo ttwwoo text
+ triple inter-argument space: _o_n_e _o_n_ettwwoo ttwwoo text
+ missing inter-argument space: _o_n_e _o_n_ettwwoo ttwwoo text
+ single eol blank: _o_n_e _o_n_ettwwoo ttwwoo text
+ double eol blank: _o_n_e _o_n_ettwwoo ttwwoo text
+ triple eol blank: _o_n_e _o_n_ettwwoo ttwwoo text
+ unterminated quotes: _o_n_e text
+ _o_n_ettwwoo text
+ tab after macro: _o_n_ettwwoo text
+ escape sequence after macro: _o_n_ettwwoo text
+ backslash at eol: _o_n_ettwwoo
+
+
+
+ November 19, 2014 ARGS-MAN(1)
diff --git a/regress/roff/args/man.out_lint b/regress/roff/args/man.out_lint
new file mode 100644
index 00000000..68b4ec9f
--- /dev/null
+++ b/regress/roff/args/man.out_lint
@@ -0,0 +1,9 @@
+mandoc: man.in:34:13: WARNING: whitespace at end of input line
+mandoc: man.in:38:14: WARNING: whitespace at end of input line
+mandoc: man.in:42:15: WARNING: whitespace at end of input line
+mandoc: man.in:82:25: WARNING: whitespace at end of input line
+mandoc: man.in:86:26: WARNING: whitespace at end of input line
+mandoc: man.in:90:27: WARNING: whitespace at end of input line
+mandoc: man.in:103:5: WARNING: unterminated quoted argument
+mandoc: man.in:106:9: WARNING: unterminated quoted argument
+mandoc: man.in:130:1: ERROR: escaped character not allowed in a name: IB\(
diff --git a/regress/roff/args/mdoc.in b/regress/roff/args/mdoc.in
new file mode 100644
index 00000000..0a134816
--- /dev/null
+++ b/regress/roff/args/mdoc.in
@@ -0,0 +1,124 @@
+.Dd November 19, 2014
+.Dt ARGS-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm args-mdoc
+.Nd arguments to mdoc macros
+.Sh DESCRIPTION
+standard unquoted:
+.Fl one two
+text
+.br
+escaped blanks:
+.Fl one\ one two\ two
+text
+.br
+escaped 'e' character:
+.Fl one\eone two
+text
+.br
+.\"escaped backslash before blank:
+.\"Fl one\\ two
+.\"text
+.\"br
+escaped backslash before 'e' character:
+.Fl one\\e two
+text
+.br
+double inter-argument space:
+.Fl one two
+text
+.br
+triple inter-argument space:
+.Fl one two
+text
+.br
+single eol blank:
+.Fl one two
+text
+.br
+double eol blank:
+.Fl one two
+text
+.br
+triple eol blank:
+.Fl one two
+text
+.br
+standard quoted:
+.Fl "one" "two"
+text
+.br
+quoted quotes:
+.Fl "one""one" """two"""
+text
+.br
+quoted whitespace:
+.Fl "one one" "two two"
+text
+.br
+escaped 'e' characters:
+.Fl "one \e one" "\e"
+text
+.br
+.\"escaped backslash before blank:
+.\"Fl "one\\ one" "\\ "
+.\"text
+.\"br
+.\"escaped backslash before 'e' character:
+.\"Fl "one\\eone" "\\e"
+.\"text
+.\"br
+double inter-argument space:
+.Fl "one one" "two two"
+text
+.br
+triple inter-argument space:
+.Fl "one one" "two two"
+text
+.br
+missing inter-argument space:
+.Fl "one one"two\ two
+text
+.br
+single eol blank:
+.Fl "one one" "two two"
+text
+.br
+double eol blank:
+.Fl "one one" "two two"
+text
+.br
+triple eol blank:
+.Fl "one one" "two two"
+text
+.br
+trailing blanks in arguments:
+.Fl "one " "two "
+text
+.br
+unterminated quotes:
+.Fl "one
+.Fl one "two
+text
+.br
+single trailing blank in unterminated quotes:
+.Fl "one
+.Fl one "two
+text
+.br
+double trailing blank in unterminated quotes:
+.Fl "one
+.Fl one "two
+text
+.br
+tab after macro:
+.Fl one two
+text
+.br
+escape sequence after macro:
+.Fl\(lqone two
+text
+.br
+backslash at eol:
+.Fl one two\
diff --git a/regress/roff/args/mdoc.out_ascii b/regress/roff/args/mdoc.out_ascii
new file mode 100644
index 00000000..94a12518
--- /dev/null
+++ b/regress/roff/args/mdoc.out_ascii
@@ -0,0 +1,34 @@
+ARGS-MDOC(1) General Commands Manual ARGS-MDOC(1)
+
+NNAAMMEE
+ aarrggss--mmddoocc - arguments to mdoc macros
+
+DDEESSCCRRIIPPTTIIOONN
+ standard unquoted: --oonnee --ttwwoo text
+ escaped blanks: --oonnee oonnee --ttwwoo ttwwoo text
+ escaped 'e' character: --oonnee\\oonnee --ttwwoo text
+ escaped backslash before 'e' character: --oonnee\\ --ttwwoo text
+ double inter-argument space: --oonnee --ttwwoo text
+ triple inter-argument space: --oonnee --ttwwoo text
+ single eol blank: --oonnee --ttwwoo text
+ double eol blank: --oonnee --ttwwoo text
+ triple eol blank: --oonnee --ttwwoo text
+ standard quoted: --oonnee --ttwwoo text
+ quoted quotes: --oonnee""oonnee --""ttwwoo"" text
+ quoted whitespace: --oonnee oonnee --ttwwoo ttwwoo text
+ escaped 'e' characters: --oonnee \\ oonnee --\\ text
+ double inter-argument space: --oonnee oonnee --ttwwoo ttwwoo text
+ triple inter-argument space: --oonnee oonnee --ttwwoo ttwwoo text
+ missing inter-argument space: --oonnee oonnee --ttwwoo ttwwoo text
+ single eol blank: --oonnee oonnee --ttwwoo ttwwoo text
+ double eol blank: --oonnee oonnee --ttwwoo ttwwoo text
+ triple eol blank: --oonnee oonnee --ttwwoo ttwwoo text
+ trailing blanks in arguments: --oonnee --ttwwoo text
+ unterminated quotes: --oonnee --oonnee --ttwwoo text
+ single trailing blank in unterminated quotes: --oonnee --oonnee --ttwwoo text
+ double trailing blank in unterminated quotes: --oonnee --oonnee --ttwwoo text
+ tab after macro: --oonnee --ttwwoo text
+ escape sequence after macro: --oonnee --ttwwoo text
+ backslash at eol: --oonnee --ttwwoo
+
+OpenBSD November 19, 2014 OpenBSD
diff --git a/regress/roff/args/mdoc.out_lint b/regress/roff/args/mdoc.out_lint
new file mode 100644
index 00000000..a622c6c7
--- /dev/null
+++ b/regress/roff/args/mdoc.out_lint
@@ -0,0 +1,13 @@
+mandoc: mdoc.in:37:13: WARNING: whitespace at end of input line
+mandoc: mdoc.in:41:14: WARNING: whitespace at end of input line
+mandoc: mdoc.in:45:15: WARNING: whitespace at end of input line
+mandoc: mdoc.in:85:25: WARNING: whitespace at end of input line
+mandoc: mdoc.in:89:26: WARNING: whitespace at end of input line
+mandoc: mdoc.in:93:27: WARNING: whitespace at end of input line
+mandoc: mdoc.in:101:9: WARNING: unterminated quoted argument
+mandoc: mdoc.in:102:13: WARNING: unterminated quoted argument
+mandoc: mdoc.in:106:10: WARNING: unterminated quoted argument
+mandoc: mdoc.in:107:14: WARNING: unterminated quoted argument
+mandoc: mdoc.in:111:11: WARNING: unterminated quoted argument
+mandoc: mdoc.in:112:15: WARNING: unterminated quoted argument
+mandoc: mdoc.in:120:1: ERROR: escaped character not allowed in a name: Fl\(
diff --git a/regress/roff/args/roff.in b/regress/roff/args/roff.in
new file mode 100644
index 00000000..0f4039dc
--- /dev/null
+++ b/regress/roff/args/roff.in
@@ -0,0 +1,71 @@
+.TH ARGS-ROFF 1 "February 21, 2015"
+.SH NAME
+args-roff - arguments to roff macros
+.SH DESCRIPTION
+.de test
+.BI (\\$1) "(\\$2)"
+.br
+..
+arguments containing quotes:
+.test a"b a"b
+.de test
+(\\$1) (\\$2)
+.br
+..
+standard unquoted:
+.test one two
+escaped blanks:
+.test one\ one two\ two
+escaped 'e' character:
+.test one\eone two
+escaped backslash before blank:
+.test one\\ two
+escaped backslash before 'e' character:
+.test one\\e two
+double inter-argument space:
+.test one two
+triple inter-argument space:
+.test one two
+single eol blank:
+.test one two
+double eol blank:
+.test one two
+triple eol blank:
+.test one two
+standard quoted:
+.test "one" "two"
+quoted quotes:
+.test "one""one" """two"""
+quoted whitespace:
+.test "one one" "two two"
+escaped 'e' characters:
+.test "one \e one" "\e"
+escaped backslash before blank:
+.test "one\\ one" "\\ "
+escaped backslash before 'e' character:
+.test "one\\eone" "\\e"
+double inter-argument space:
+.test "one one" "two two"
+triple inter-argument space:
+.test "one one" "two two"
+missing inter-argument space:
+.test "one one"two\ two
+single eol blank:
+.test "one one" "two two"
+double eol blank:
+.test "one one" "two two"
+triple eol blank:
+.test "one one" "two two"
+trailing blanks in arguments:
+.test "one " "two "
+unterminated quotes:
+.test "one
+.test one "two
+single trailing blank in unterminated quotes:
+.test "one
+.test one "two
+double trailing blank in unterminated quotes:
+.test "one
+.test one "two
+backslash at eol:
+.test one two\
diff --git a/regress/roff/args/roff.out_ascii b/regress/roff/args/roff.out_ascii
new file mode 100644
index 00000000..eb0b5323
--- /dev/null
+++ b/regress/roff/args/roff.out_ascii
@@ -0,0 +1,43 @@
+ARGS-ROFF(1) General Commands Manual ARGS-ROFF(1)
+
+
+
+NNAAMMEE
+ args-roff - arguments to roff macros
+
+DDEESSCCRRIIPPTTIIOONN
+ arguments containing quotes: ((aa""bb))_(_a_"_b_)
+ standard unquoted: (one) (two)
+ escaped blanks: (one one) (two two)
+ escaped 'e' character: (one\one) (two)
+ escaped backslash before blank: (one) (two)
+ escaped backslash before 'e' character: (one\) (two)
+ double inter-argument space: (one) (two)
+ triple inter-argument space: (one) (two)
+ single eol blank: (one) (two)
+ double eol blank: (one) (two)
+ triple eol blank: (one) (two)
+ standard quoted: (one) (two)
+ quoted quotes: (one"one) ("two")
+ quoted whitespace: (one one) (two two)
+ escaped 'e' characters: (one \ one) (\)
+ escaped backslash before blank: (one one) ( )
+ escaped backslash before 'e' character: (one\one) (\)
+ double inter-argument space: (one one) (two two)
+ triple inter-argument space: (one one) (two two)
+ missing inter-argument space: (one one) (two two)
+ single eol blank: (one one) (two two)
+ double eol blank: (one one) (two two)
+ triple eol blank: (one one) (two two)
+ trailing blanks in arguments: (one ) (two )
+ unterminated quotes: (one) ()
+ (one) (two)
+ single trailing blank in unterminated quotes: (one ) ()
+ (one) (two )
+ double trailing blank in unterminated quotes: (one ) ()
+ (one) (two )
+ backslash at eol: (one) (two)
+
+
+
+ February 21, 2015 ARGS-ROFF(1)
diff --git a/regress/roff/args/roff.out_lint b/regress/roff/args/roff.out_lint
new file mode 100644
index 00000000..df08f6f6
--- /dev/null
+++ b/regress/roff/args/roff.out_lint
@@ -0,0 +1,16 @@
+mandoc: roff.in:30:15: WARNING: whitespace at end of input line
+mandoc: roff.in:32:16: WARNING: whitespace at end of input line
+mandoc: roff.in:34:17: WARNING: whitespace at end of input line
+mandoc: roff.in:54:27: WARNING: whitespace at end of input line
+mandoc: roff.in:56:28: WARNING: whitespace at end of input line
+mandoc: roff.in:58:29: WARNING: whitespace at end of input line
+mandoc: roff.in:62:7: WARNING: unterminated quoted argument
+mandoc: roff.in:63:11: WARNING: unterminated quoted argument
+mandoc: roff.in:65:7: WARNING: unterminated quoted argument
+mandoc: roff.in:65:12: WARNING: whitespace at end of input line
+mandoc: roff.in:66:11: WARNING: unterminated quoted argument
+mandoc: roff.in:66:16: WARNING: whitespace at end of input line
+mandoc: roff.in:68:7: WARNING: unterminated quoted argument
+mandoc: roff.in:68:13: WARNING: whitespace at end of input line
+mandoc: roff.in:69:11: WARNING: unterminated quoted argument
+mandoc: roff.in:69:17: WARNING: whitespace at end of input line
diff --git a/regress/roff/br/Makefile b/regress/roff/br/Makefile
new file mode 100644
index 00000000..4d383bee
--- /dev/null
+++ b/regress/roff/br/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.3 2015/02/06 08:28:04 schwarze Exp $
+
+REGRESS_TARGETS = args
+LINT_TARGETS = args
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/br/args.in b/regress/roff/br/args.in
new file mode 100644
index 00000000..c2837971
--- /dev/null
+++ b/regress/roff/br/args.in
@@ -0,0 +1,9 @@
+.TH BR-ARGS 1 "January 17, 2011" OpenBSD
+.SH NAME
+br-args \- arguments to .br macros
+.SH DESCRIPTION
+some
+text
+.br arg1 arg2 arg3
+more
+text
diff --git a/regress/roff/br/args.out_ascii b/regress/roff/br/args.out_ascii
new file mode 100644
index 00000000..b4d7c40b
--- /dev/null
+++ b/regress/roff/br/args.out_ascii
@@ -0,0 +1,14 @@
+BR-ARGS(1) General Commands Manual BR-ARGS(1)
+
+
+
+NNAAMMEE
+ br-args - arguments to .br macros
+
+DDEESSCCRRIIPPTTIIOONN
+ some text
+ more text
+
+
+
+OpenBSD January 17, 2011 BR-ARGS(1)
diff --git a/regress/roff/br/args.out_lint b/regress/roff/br/args.out_lint
new file mode 100644
index 00000000..e9a03ad5
--- /dev/null
+++ b/regress/roff/br/args.out_lint
@@ -0,0 +1 @@
+mandoc: args.in:7:5: ERROR: skipping all arguments: br arg1 arg2 arg3
diff --git a/regress/roff/cc/Makefile b/regress/roff/cc/Makefile
new file mode 100644
index 00000000..33951ead
--- /dev/null
+++ b/regress/roff/cc/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.2 2015/02/06 16:05:51 schwarze Exp $
+
+REGRESS_TARGETS = basic
+LINT_TARGETS = basic
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/cc/basic.in b/regress/roff/cc/basic.in
new file mode 100644
index 00000000..ffd1c211
--- /dev/null
+++ b/regress/roff/cc/basic.in
@@ -0,0 +1,19 @@
+.TH CC-BASIC 1 "July 7, 2012" OpenBSD
+.SH NAME
+cc-basic \- basic usage of the cc request
+.SH DESCRIPTION
+first line
+.br
+second
+.cc :
+line
+:br
+third
+:cc ;bogus
+line
+;br
+fourth
+;cc
+line
+.br
+last line
diff --git a/regress/roff/cc/basic.out_ascii b/regress/roff/cc/basic.out_ascii
new file mode 100644
index 00000000..530f1ff2
--- /dev/null
+++ b/regress/roff/cc/basic.out_ascii
@@ -0,0 +1,17 @@
+CC-BASIC(1) General Commands Manual CC-BASIC(1)
+
+
+
+NNAAMMEE
+ cc-basic - basic usage of the cc request
+
+DDEESSCCRRIIPPTTIIOONN
+ first line
+ second line
+ third line
+ fourth line
+ last line
+
+
+
+OpenBSD July 7, 2012 CC-BASIC(1)
diff --git a/regress/roff/cc/basic.out_lint b/regress/roff/cc/basic.out_lint
new file mode 100644
index 00000000..f091c585
--- /dev/null
+++ b/regress/roff/cc/basic.out_lint
@@ -0,0 +1 @@
+mandoc: basic.in:12:6: ERROR: skipping excess arguments: cc ... bogus
diff --git a/regress/roff/cond/Makefile b/regress/roff/cond/Makefile
new file mode 100644
index 00000000..68a88694
--- /dev/null
+++ b/regress/roff/cond/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.8 2015/05/31 23:12:17 schwarze Exp $
+
+REGRESS_TARGETS = if ie close numeric register strcmp before-Dd
+LINT_TARGETS = if close
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/cond/before-Dd.in b/regress/roff/cond/before-Dd.in
new file mode 100644
index 00000000..6701403b
--- /dev/null
+++ b/regress/roff/cond/before-Dd.in
@@ -0,0 +1,30 @@
+.if n \{.ds mystring mytext
+.\}
+.Dd May 27, 2012
+.Dt IF-BEFORE-DD 1
+.Os OpenBSD
+.Sh NAME
+.Nm if-before-Dd
+.Nd end of if block on its own line before Dd
+.Sh DESCRIPTION
+In an old version of
+.Xr mandoc 1 ,
+.Xr mdoc 7
+file format autodetection failed when the end of an
+.Ic if
+block stood on its own line before the initial
+.Xr mdoc 7
+.Ic Dd
+macro.
+The file was mishandled as
+.Xr man 7
+and parsing failed with unknown macro errors.
+.Pp
+If the present document looks like a proper
+.Xr mdoc 7
+document and the following display reads
+.Dq mytext ,
+then the problem did not come back:
+.Bd -ragged -offset indent
+\*[mystring]
+.Ed
diff --git a/regress/roff/cond/before-Dd.out_ascii b/regress/roff/cond/before-Dd.out_ascii
new file mode 100644
index 00000000..f14a44fe
--- /dev/null
+++ b/regress/roff/cond/before-Dd.out_ascii
@@ -0,0 +1,17 @@
+IF-BEFORE-DD(1) General Commands Manual IF-BEFORE-DD(1)
+
+NNAAMMEE
+ iiff--bbeeffoorree--DDdd - end of if block on its own line before Dd
+
+DDEESSCCRRIIPPTTIIOONN
+ In an old version of mandoc(1), mdoc(7) file format autodetection failed
+ when the end of an iiff block stood on its own line before the initial
+ mdoc(7) DDdd macro. The file was mishandled as man(7) and parsing failed
+ with unknown macro errors.
+
+ If the present document looks like a proper mdoc(7) document and the
+ following display reads ``mytext'', then the problem did not come back:
+
+ mytext
+
+OpenBSD May 27, 2012 OpenBSD
diff --git a/regress/roff/cond/close.in b/regress/roff/cond/close.in
new file mode 100644
index 00000000..7fa91423
--- /dev/null
+++ b/regress/roff/cond/close.in
@@ -0,0 +1,15 @@
+.TH COND-CLOSE 1 2013-06-27 OpenBSD
+.SH NAME
+cond-close \- closing conditional macros
+.SH DESCRIPTION
+.if t \{.unknown \}
+closing after an unknown macro
+.PP
+.if t \{.ig \}
+closing after an ignored macro
+.PP
+.if t \{text \}
+closing after plain text
+.PP
+.if n \{
+still open at the end of the file
diff --git a/regress/roff/cond/close.out_ascii b/regress/roff/cond/close.out_ascii
new file mode 100644
index 00000000..244d4154
--- /dev/null
+++ b/regress/roff/cond/close.out_ascii
@@ -0,0 +1,19 @@
+COND-CLOSE(1) General Commands Manual COND-CLOSE(1)
+
+
+
+NNAAMMEE
+ cond-close - closing conditional macros
+
+DDEESSCCRRIIPPTTIIOONN
+ closing after an unknown macro
+
+ closing after an ignored macro
+
+ closing after plain text
+
+ still open at the end of the file
+
+
+
+OpenBSD 2013-06-27 COND-CLOSE(1)
diff --git a/regress/roff/cond/close.out_lint b/regress/roff/cond/close.out_lint
new file mode 100644
index 00000000..e3419dba
--- /dev/null
+++ b/regress/roff/cond/close.out_lint
@@ -0,0 +1 @@
+mandoc: close.in:14:1: ERROR: appending missing end of block: if
diff --git a/regress/roff/cond/ie.in b/regress/roff/cond/ie.in
new file mode 100644
index 00000000..f9ab8bc0
--- /dev/null
+++ b/regress/roff/cond/ie.in
@@ -0,0 +1,30 @@
+.TH IE 1 "December 16, 2014" OpenBSD
+.SH NAME
+if \- the roff conditional instruction with else-clause
+.SH DESCRIPTION
+.el Initially, else is ignored.
+.ie n One-line true condition.
+.br
+Text following the true condition.
+.el One-line else after true.
+.el Another else after true.
+.br
+.ie t One-line false condition.
+Text following the false condition.
+.br
+.el \{Two-line else
+after false.\}
+.br
+.el Another else after false.
+.br
+.ie
+Text following an empty condition.
+.el Else after empty condition.
+.br
+.ie !
+Text following negated empty condition.
+.el Else after negated empty condition.
+.br
+.ie n If \&.el\e{ works, nothing follows here:
+.el\{dummy
+BOOHOO\}
diff --git a/regress/roff/cond/ie.out_ascii b/regress/roff/cond/ie.out_ascii
new file mode 100644
index 00000000..73d3d97c
--- /dev/null
+++ b/regress/roff/cond/ie.out_ascii
@@ -0,0 +1,19 @@
+IE(1) General Commands Manual IE(1)
+
+
+
+NNAAMMEE
+ if - the roff conditional instruction with else-clause
+
+DDEESSCCRRIIPPTTIIOONN
+ One-line true condition.
+ Text following the true condition.
+ Text following the false condition.
+ Two-line else after false.
+ Else after empty condition.
+ Else after negated empty condition.
+ If .el\{ works, nothing follows here:
+
+
+
+OpenBSD December 16, 2014 IE(1)
diff --git a/regress/roff/cond/if.in b/regress/roff/cond/if.in
new file mode 100644
index 00000000..f243fbdf
--- /dev/null
+++ b/regress/roff/cond/if.in
@@ -0,0 +1,97 @@
+.TH IF 1 "June 27, 2015" OpenBSD
+.SH NAME
+if \- the roff conditional instruction
+.SH DESCRIPTION
+.if n One-line true condition.
+.if t One-line false condition.
+.if n
+Next-line empty true condition.
+.if t
+Next-line empty false condition.
+.br
+False condition with whitespace:
+.br
+.if t
+True condition with whitespace:
+.if n
+.if n \{One-line true cond\}ition with block.
+.if t \{One-line false cond\}ition with block.
+.br
+.if n \{ One-line true cond\}ition with block with leading blanks.
+.if t \{ One-line false cond\}ition with block with leading blanks.
+.br
+.if n \{Two-line true condition
+without cont\}inuation and macros.
+.if t \{Two-line false condition
+without cont\}inuation and macros.
+.br
+.if n \{Two-line true condition
+.B without cont\}inuation but with macros.
+.if t \{Two-line false condition
+.B without cont\}inuation but with macros.
+.br
+.if n \{\
+Two-line true condition
+with continuation and macros.
+.\}This will not be printed.
+.if t \{\
+Two-line false condition
+with continuation and macros.
+.\}This will not be printed.
+.br
+.if n \{
+Two-line true condition with blank line.\}
+.if t \{
+Two-line false condition with blank line.\}
+.br
+.if n \{Outer true condition.
+.br
+.if n Inner one-line true condition.
+.if t Inner one-line false condition.
+.br
+.if n \{Inner two-line true condition
+without continuation and macros.\}
+.if t \{Inner two-line false condition
+without continuation and macros.\}
+.br
+Back to the outer true condition.\}
+.br
+.if t \{Outer false condition.
+.br
+.if n Inner one-line true condition.
+.if t Inner one-line false condition.
+.br
+.if n \{Inner two-line true condition
+without continuation and macros.\}
+.if t \{Inner two-line false condition
+without continuation and macros.\}
+.br
+Back to the outer false condition.\}
+.br
+.if n \{Outer true condition.
+.if t \{Inner false condition.
+inner\}middle\}end
+After conditional.
+.br
+.if n \{Outer true condition.
+.if t \{Inner false condition.
+.\}middle\}end
+After conditional.
+.br
+.if n \{Outer true condition.
+.if n \{Inner true condition.
+.\}middle\}end
+After conditional.
+.br
+.if n \{Outer true condition.
+.if t \{Inner false condition.
+.B\}middle\}end
+After conditional.
+.br
+Backslash-backslash-brace in text:
+.if t \{This text is not printed.\\}
+This neither.\}
+On a macro line:
+.if t \{.B This text\\} is not printed.
+.B This\} neither.
+End.
diff --git a/regress/roff/cond/if.out_ascii b/regress/roff/cond/if.out_ascii
new file mode 100644
index 00000000..7fb9eecc
--- /dev/null
+++ b/regress/roff/cond/if.out_ascii
@@ -0,0 +1,34 @@
+IF(1) General Commands Manual IF(1)
+
+
+
+NNAAMMEE
+ if - the roff conditional instruction
+
+DDEESSCCRRIIPPTTIIOONN
+ One-line true condition.
+
+ Next-line empty true condition.
+ False condition with whitespace:
+ True condition with whitespace:
+
+ One-line true condition with block.
+ One-line true condition with block with leading blanks.
+ Two-line true condition without continuation and macros.
+ Two-line true condition wwiitthhoouutt ccoonnttiinnuuaattiioonn bbuutt wwiitthh mmaaccrrooss..
+ Two-line true condition with continuation and macros.
+
+ Two-line true condition with blank line.
+ Outer true condition.
+ Inner one-line true condition.
+ Inner two-line true condition without continuation and macros.
+ Back to the outer true condition.
+ Outer true condition. After conditional.
+ Outer true condition. After conditional.
+ Outer true condition. Inner true condition. After conditional.
+ Outer true condition. After conditional.
+ Backslash-backslash-brace in text: On a macro line: End.
+
+
+
+OpenBSD June 27, 2015 IF(1)
diff --git a/regress/roff/cond/if.out_lint b/regress/roff/cond/if.out_lint
new file mode 100644
index 00000000..bb8e2d3a
--- /dev/null
+++ b/regress/roff/cond/if.out_lint
@@ -0,0 +1,2 @@
+mandoc: if.in:14:1: WARNING: conditional request controls empty scope: if
+mandoc: if.in:16:1: WARNING: conditional request controls empty scope: if
diff --git a/regress/roff/cond/numeric.in b/regress/roff/cond/numeric.in
new file mode 100644
index 00000000..e96f3087
--- /dev/null
+++ b/regress/roff/cond/numeric.in
@@ -0,0 +1,152 @@
+.TH COND-NUMERIC 1 "December 16, 2014" OpenBSD
+.SH NAME
+cond-numeric \- roff conditions involving numbers
+.SH DESCRIPTION
+positive number:
+plain
+.ie 42 (t)
+.el (f)
+negated
+.ie !42 (t)
+.el (f)
+.PP
+negative number:
+plain
+.ie -42 (t)
+.el (f)
+negated
+.ie !-42 (t)
+.el (f)
+.PP
+second number missing:
+.ie 42=bad worse
+.el ok
+.PP
+operator "<":
+smaller
+.ie 1<2 (t)
+.el (f)
+equal
+.ie 1<1 (t)
+.el (f)
+greater
+.ie 2<1 (t)
+.el (f)
+.PP
+operator "<=":
+smaller
+.ie 1<=2 (t)
+.el (f)
+equal
+.ie 1<=1 (t)
+.el (f)
+greater
+.ie 2<=1 (t)
+.el (f)
+.PP
+operator "=":
+smaller
+.ie 1=2 (t)
+.el (f)
+equal
+.ie 1=1 (t)
+.el (f)
+greater
+.ie 2=1 (t)
+.el (f)
+.PP
+operator "==":
+smaller
+.ie 1==2 (t)
+.el (f)
+equal
+.ie 1==1 (t)
+.el (f)
+greater
+.ie 2==1 (t)
+.el (f)
+.PP
+operator ">=":
+smaller
+.ie 1>=2 (t)
+.el (f)
+equal
+.ie 1>=1 (t)
+.el (f)
+greater
+.ie 2>=1 (t)
+.el (f)
+.PP
+operator ">":
+smaller
+.ie 1>2 (t)
+.el (f)
+equal
+.ie 1>1 (t)
+.el (f)
+greater
+.ie 2>1 (t)
+.el (f)
+.PP
+with negative numbers:
+mm
+.ie -2<-1 (t)
+.el (f)
+mp
+.ie -2<1 (t)
+.el (f)
+pm
+.ie 1>-2 (t)
+.el (f)
+.PP
+operator "&":
+00
+.ie 0&0 (t)
+.el (f)
+01
+.ie 0&1 (t)
+.el (f)
+10
+.ie 1&0 (t)
+.el (f)
+11
+.ie 1&1 (t)
+.el (f)
+.PP
+operator ":":
+00
+.ie 0:0 (t)
+.el (f)
+01
+.ie 0:1 (t)
+.el (f)
+10
+.ie 1:0 (t)
+.el (f)
+11
+.ie 1:1 (t)
+.el (f)
+.PP
+with scaling units:
+1i>2c
+.ie 1i>2c (t)
+.el (f)
+1i-6P
+.ie 1i-6P (t)
+.el (f)
+.PP
+unmatched parenthesis:
+.ie (
+(t)
+.el (f)
+one
+.ie (1 (t)
+.el (f)
+.PP
+negated unmatched parenthesis:
+.ie !(
+(t)
+.el (f)
+zero
+.ie !(0 (t)
+.el (f)
diff --git a/regress/roff/cond/numeric.out_ascii b/regress/roff/cond/numeric.out_ascii
new file mode 100644
index 00000000..35973672
--- /dev/null
+++ b/regress/roff/cond/numeric.out_ascii
@@ -0,0 +1,41 @@
+COND-NUMERIC(1) General Commands Manual COND-NUMERIC(1)
+
+
+
+NNAAMMEE
+ cond-numeric - roff conditions involving numbers
+
+DDEESSCCRRIIPPTTIIOONN
+ positive number: plain (t) negated (f)
+
+ negative number: plain (f) negated (t)
+
+ second number missing: ok
+
+ operator "<": smaller (t) equal (f) greater (f)
+
+ operator "<=": smaller (t) equal (t) greater (f)
+
+ operator "=": smaller (f) equal (t) greater (f)
+
+ operator "==": smaller (f) equal (t) greater (f)
+
+ operator ">=": smaller (f) equal (t) greater (t)
+
+ operator ">": smaller (f) equal (f) greater (t)
+
+ with negative numbers: mm (t) mp (t) pm (t)
+
+ operator "&": 00 (f) 01 (f) 10 (f) 11 (t)
+
+ operator ":": 00 (f) 01 (t) 10 (t) 11 (t)
+
+ with scaling units: 1i>2c (t) 1i-6P (f)
+
+ unmatched parenthesis: (f) one (t)
+
+ negated unmatched parenthesis: (f) zero (t)
+
+
+
+OpenBSD December 16, 2014 COND-NUMERIC(1)
diff --git a/regress/roff/cond/register.in b/regress/roff/cond/register.in
new file mode 100644
index 00000000..d8c9629b
--- /dev/null
+++ b/regress/roff/cond/register.in
@@ -0,0 +1,11 @@
+.TH REGISTER 1 "May 31, 2015" OpenBSD
+.SH NAME
+register \- conditional testing whether a register is defined
+.SH DESCRIPTION
+.ie rmyreg OOPS
+.el not yet defined
+.br
+.nr myreg 0
+.ie rmyreg now defined
+.el OOPS
+.if !rmyreg OOPS
diff --git a/regress/roff/cond/register.out_ascii b/regress/roff/cond/register.out_ascii
new file mode 100644
index 00000000..acd0f724
--- /dev/null
+++ b/regress/roff/cond/register.out_ascii
@@ -0,0 +1,14 @@
+REGISTER(1) General Commands Manual REGISTER(1)
+
+
+
+NNAAMMEE
+ register - conditional testing whether a register is defined
+
+DDEESSCCRRIIPPTTIIOONN
+ not yet defined
+ now defined
+
+
+
+OpenBSD May 31, 2015 REGISTER(1)
diff --git a/regress/roff/cond/strcmp.in b/regress/roff/cond/strcmp.in
new file mode 100644
index 00000000..eabe80ff
--- /dev/null
+++ b/regress/roff/cond/strcmp.in
@@ -0,0 +1,37 @@
+.TH COND-STRCMP 1 "March 8, 2014" OpenBSD
+.SH NAME
+cond-strcmp \- roff conditions involving string comparison
+.SH DESCRIPTION
+empty:
+.ie """ (t)
+.el (f)
+one char:
+.ie xaxax (t)
+.el (f)
+three chars:
+.ie xabcxabcx (t)
+.el (f)
+.br
+mismatch:
+.ie xabcxabdx (t)
+.el (f)
+longer:
+.ie xabcxabcdx (t)
+.el (f)
+shorter:
+.ie xabcdxabcx (t)
+.el (f)
+.br
+no middle:
+.ie xabc (t)
+.el (f)
+no end:
+.ie xabcxabc
+.el (f)
+.SS Negation
+match:
+.ie !xabcxabcx (t)
+.el (f)
+mismatch:
+.ie !xaxbx (t)
+.el (f)
diff --git a/regress/roff/cond/strcmp.out_ascii b/regress/roff/cond/strcmp.out_ascii
new file mode 100644
index 00000000..9268dec8
--- /dev/null
+++ b/regress/roff/cond/strcmp.out_ascii
@@ -0,0 +1,18 @@
+COND-STRCMP(1) General Commands Manual COND-STRCMP(1)
+
+
+
+NNAAMMEE
+ cond-strcmp - roff conditions involving string comparison
+
+DDEESSCCRRIIPPTTIIOONN
+ empty: (t) one char: (t) three chars: (t)
+ mismatch: (f) longer: (f) shorter: (f)
+ no middle: (f) no end: (f)
+
+ NNeeggaattiioonn
+ match: (f) mismatch: (t)
+
+
+
+OpenBSD March 8, 2014 COND-STRCMP(1)
diff --git a/regress/roff/de/Dd.in b/regress/roff/de/Dd.in
new file mode 100644
index 00000000..4dcbdd2b
--- /dev/null
+++ b/regress/roff/de/Dd.in
@@ -0,0 +1,11 @@
+.de At
+BSD
+..
+.Dd June 3, 2012
+.Dt DE-DD 1
+.Os OpenBSD
+.Sh NAME
+.Nm de-Dd
+.Nd interaction of the Dd macro with de requests
+.Sh DESCRIPTION
+.At
diff --git a/regress/roff/de/Dd.out_ascii b/regress/roff/de/Dd.out_ascii
new file mode 100644
index 00000000..1b04eea9
--- /dev/null
+++ b/regress/roff/de/Dd.out_ascii
@@ -0,0 +1,9 @@
+DE-DD(1) General Commands Manual DE-DD(1)
+
+NNAAMMEE
+ ddee--DDdd - interaction of the Dd macro with de requests
+
+DDEESSCCRRIIPPTTIIOONN
+ AT&T UNIX
+
+OpenBSD June 3, 2012 OpenBSD
diff --git a/regress/roff/de/Makefile b/regress/roff/de/Makefile
new file mode 100644
index 00000000..9488ce05
--- /dev/null
+++ b/regress/roff/de/Makefile
@@ -0,0 +1,44 @@
+# $OpenBSD: Makefile,v 1.9 2015/02/03 19:37:25 schwarze Exp $
+
+REGRESS_TARGETS = append cond escname factorial indir startde TH Dd
+LINT_TARGETS = escname indir
+
+.include <bsd.regress.mk>
+
+
+# OpenBSD only: non-standard targets
+
+# --- additions to public targets ---
+
+all ascii: ascii-diff-opt
+
+ascii-clean: ascii-clean-opt
+
+groff: TH.out_ascii_opt Dd.out_ascii_opt
+
+groff-clean: groff-clean-opt
+
+
+# --- local rules ---
+
+ascii-diff-opt: TH.mandoc_ascii_opt Dd.mandoc_ascii_opt
+ @${DIFF} ${.CURDIR}/TH.out_ascii_opt TH.mandoc_ascii_opt
+ @${DIFF} ${.CURDIR}/Dd.out_ascii_opt Dd.mandoc_ascii_opt
+
+TH.mandoc_ascii_opt: TH.in
+ @${MANDOC} -Tascii -man ${.ALLSRC} > ${.TARGET}
+
+Dd.mandoc_ascii_opt: Dd.in
+ @${MANDOC} -Tascii -mdoc ${.ALLSRC} > ${.TARGET}
+
+ascii-clean-opt:
+ @rm -f TH.mandoc_ascii_opt Dd.mandoc_ascii_opt
+
+TH.out_ascii_opt: TH.in
+ /usr/local/bin/nroff -c -man -Tascii ${.ALLSRC} > ${.TARGET}
+
+Dd.out_ascii_opt: Dd.in
+ /usr/local/bin/nroff -c -mdoc -Tascii ${.ALLSRC} > ${.TARGET}
+
+groff-clean-opt:
+ rm -f TH.out_ascii_opt Dd.out_ascii_opt
diff --git a/regress/roff/de/TH.in b/regress/roff/de/TH.in
new file mode 100644
index 00000000..50b6401f
--- /dev/null
+++ b/regress/roff/de/TH.in
@@ -0,0 +1,8 @@
+.de BI
+.IB \\$1 \\$2 \\$3
+..
+.TH DE-TH 1 "June 3, 2012" OpenBSD
+.SH NAME
+de-TH - interaction of the TH macro with de requests
+.SH DESCRIPTION
+.BI bold italic bold
diff --git a/regress/roff/de/TH.out_ascii b/regress/roff/de/TH.out_ascii
new file mode 100644
index 00000000..35e1886a
--- /dev/null
+++ b/regress/roff/de/TH.out_ascii
@@ -0,0 +1,13 @@
+DE-TH(1) General Commands Manual DE-TH(1)
+
+
+
+NNAAMMEE
+ de-TH - interaction of the TH macro with de requests
+
+DDEESSCCRRIIPPTTIIOONN
+ bboolldd_i_t_a_l_i_cbboolldd
+
+
+
+OpenBSD June 3, 2012 DE-TH(1)
diff --git a/regress/roff/de/append.in b/regress/roff/de/append.in
new file mode 100644
index 00000000..cdc01bdd
--- /dev/null
+++ b/regress/roff/de/append.in
@@ -0,0 +1,25 @@
+.Dd July 7, 2014
+.Dt DE-APPEND 1
+.Os OpenBSD
+.Sh NAME
+.Nm de-append
+.Nd append to macro definitions
+.Sh DESCRIPTION
+de:
+.de mym
+.Ox
+..
+.mym
+am:
+.am mym
+.Nx
+..
+.mym
+ami:
+.ds myim mym
+.ds myie mye
+.ami myim myie
+.Fx
+.mye
+.mym
+end
diff --git a/regress/roff/de/append.out_ascii b/regress/roff/de/append.out_ascii
new file mode 100644
index 00000000..c5f4363c
--- /dev/null
+++ b/regress/roff/de/append.out_ascii
@@ -0,0 +1,9 @@
+DE-APPEND(1) General Commands Manual DE-APPEND(1)
+
+NNAAMMEE
+ ddee--aappppeenndd - append to macro definitions
+
+DDEESSCCRRIIPPTTIIOONN
+ de: OpenBSD am: OpenBSD NetBSD ami: OpenBSD NetBSD FreeBSD end
+
+OpenBSD July 7, 2014 OpenBSD
diff --git a/regress/roff/de/cond.in b/regress/roff/de/cond.in
new file mode 100644
index 00000000..057ad3a0
--- /dev/null
+++ b/regress/roff/de/cond.in
@@ -0,0 +1,13 @@
+.Dd January 7, 2015
+.Dt DE-COND 1
+.Os OpenBSD
+.Sh NAME
+.Nm de-cond
+.Nd conditional execution of a user-defined macro
+.Sh DESCRIPTION
+.de mym
+This is the text printed by the macro.
+..
+preceding text
+.if n .mym
+following text
diff --git a/regress/roff/de/cond.out_ascii b/regress/roff/de/cond.out_ascii
new file mode 100644
index 00000000..2f946407
--- /dev/null
+++ b/regress/roff/de/cond.out_ascii
@@ -0,0 +1,9 @@
+DE-COND(1) General Commands Manual DE-COND(1)
+
+NNAAMMEE
+ ddee--ccoonndd - conditional execution of a user-defined macro
+
+DDEESSCCRRIIPPTTIIOONN
+ preceding text This is the text printed by the macro. following text
+
+OpenBSD January 7, 2015 OpenBSD
diff --git a/regress/roff/de/escname.in b/regress/roff/de/escname.in
new file mode 100644
index 00000000..da6d885f
--- /dev/null
+++ b/regress/roff/de/escname.in
@@ -0,0 +1,43 @@
+.Dd June 29, 2014
+.Dt DE-ESCNAME 1
+.Os OpenBSD
+.Sh NAME
+.Nm de-escname
+.Nd escape sequences in macro names
+.Sh DESCRIPTION
+initial text
+.Pp
+define second = val2
+.de second
+val2
+..
+.Pp
+define first\esecond = val3
+.de first\\second end3
+val3
+.end3
+.Pp
+define first = val1
+.de first\esecond
+val1
+..
+.Pp
+Values (first, second, first\esecond):
+.first
+.second
+.first\\second
+.Pp
+Remove all but second:
+.rm first\\second first\esecond second
+.first
+.second
+.first\\second
+.Pp
+macro seperated from argument by an escape sequence:
+.de witharg end4 excess arguments
+.Dq \\$1
+.end4 tail argument
+.witharg\(enargument
+.Pp
+.de\e
+final text
diff --git a/regress/roff/de/escname.out_ascii b/regress/roff/de/escname.out_ascii
new file mode 100644
index 00000000..9a2d825a
--- /dev/null
+++ b/regress/roff/de/escname.out_ascii
@@ -0,0 +1,23 @@
+DE-ESCNAME(1) General Commands Manual DE-ESCNAME(1)
+
+NNAAMMEE
+ ddee--eessccnnaammee - escape sequences in macro names
+
+DDEESSCCRRIIPPTTIIOONN
+ initial text
+
+ define second = val2
+
+ define first\second = val3
+
+ define first = val1
+
+ Values (first, second, first\second): val1 val2 val3
+
+ Remove all but second: val2
+
+ macro seperated from argument by an escape sequence: ``argument''
+
+ final text
+
+OpenBSD June 29, 2014 OpenBSD
diff --git a/regress/roff/de/escname.out_lint b/regress/roff/de/escname.out_lint
new file mode 100644
index 00000000..b4dd49a0
--- /dev/null
+++ b/regress/roff/de/escname.out_lint
@@ -0,0 +1,8 @@
+mandoc: escname.in:21:1: ERROR: escaped character not allowed in a name: first\e
+mandoc: escname.in:31:19: ERROR: escaped character not allowed in a name: first\e
+mandoc: escname.in:32:2: ERROR: skipping unknown macro: .first
+mandoc: escname.in:34:2: ERROR: skipping unknown macro: .first\\second
+mandoc: escname.in:37:5: ERROR: skipping excess arguments: .de ... excess arguments
+mandoc: escname.in:40:1: ERROR: escaped character not allowed in a name: witharg\(
+mandoc: escname.in:42:1: ERROR: escaped character not allowed in a name: de\e
+mandoc: escname.in:42:1: WARNING: skipping empty request: de
diff --git a/regress/roff/de/factorial.in b/regress/roff/de/factorial.in
new file mode 100644
index 00000000..8d83714b
--- /dev/null
+++ b/regress/roff/de/factorial.in
@@ -0,0 +1,31 @@
+.Dd December 30, 2014
+.Dt FACTORIAL 1
+.Os OpenBSD
+.Sh NAME
+.Nm factorial
+.Nd factorial sequence
+.Sh DESCRIPTION
+.\" recursively calculate a single factorial
+.de rfac
+. ie \\$1>1 \{\
+. No \\$1 *
+. nr i \\$1-1
+. rfac \\ni
+. nr acc \\n[acc]*\\$1
+. \}
+. el .nr acc 1
+..
+.\" recursively print a sequence of factorials
+.de fac
+. No \\$1! =
+. rfac \\$1
+. if \\$1>1 1 =
+. No \\n[acc]
+. if \\$1 \{\
+. br
+. nr i \\$1-1
+. fac \\ni
+. \}
+..
+.\" main program
+.fac 9
diff --git a/regress/roff/de/factorial.out_ascii b/regress/roff/de/factorial.out_ascii
new file mode 100644
index 00000000..cdc019ed
--- /dev/null
+++ b/regress/roff/de/factorial.out_ascii
@@ -0,0 +1,18 @@
+FACTORIAL(1) General Commands Manual FACTORIAL(1)
+
+NNAAMMEE
+ ffaaccttoorriiaall - factorial sequence
+
+DDEESSCCRRIIPPTTIIOONN
+ 9! = 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
+ 8! = 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 40320
+ 7! = 7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
+ 6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
+ 5! = 5 * 4 * 3 * 2 * 1 = 120
+ 4! = 4 * 3 * 2 * 1 = 24
+ 3! = 3 * 2 * 1 = 6
+ 2! = 2 * 1 = 2
+ 1! = 1
+ 0! = 1
+
+OpenBSD December 30, 2014 OpenBSD
diff --git a/regress/roff/de/indir.in b/regress/roff/de/indir.in
new file mode 100644
index 00000000..13d10071
--- /dev/null
+++ b/regress/roff/de/indir.in
@@ -0,0 +1,30 @@
+.Dd July 7, 2014
+.Dt DE-INDIR 1
+.Os OpenBSD
+.Sh NAME
+.Nm de-indir
+.Nd indirect macro definitions
+.Sh DESCRIPTION
+full dei:
+.ds myim mym
+.ds myie mye
+.dei myim myie
+text1
+.mye
+.mym
+.br
+dei with undefined second argument:
+.rm myie mym
+.dei myim myie
+text2
+..
+.mym
+.br
+dei with undefined first argument:
+.rm myim mym
+.dei myim
+text3
+.br
+dei without arguments:
+.dei
+text4
diff --git a/regress/roff/de/indir.out_ascii b/regress/roff/de/indir.out_ascii
new file mode 100644
index 00000000..4cb592b1
--- /dev/null
+++ b/regress/roff/de/indir.out_ascii
@@ -0,0 +1,12 @@
+DE-INDIR(1) General Commands Manual DE-INDIR(1)
+
+NNAAMMEE
+ ddee--iinnddiirr - indirect macro definitions
+
+DDEESSCCRRIIPPTTIIOONN
+ full dei: text1
+ dei with undefined second argument: text2
+ dei with undefined first argument: text3
+ dei without arguments: text4
+
+OpenBSD July 7, 2014 OpenBSD
diff --git a/regress/roff/de/indir.out_lint b/regress/roff/de/indir.out_lint
new file mode 100644
index 00000000..43194fea
--- /dev/null
+++ b/regress/roff/de/indir.out_lint
@@ -0,0 +1,4 @@
+mandoc: indir.in:18:11: WARNING: undefined string, using "": myie
+mandoc: indir.in:25:6: WARNING: undefined string, using "": myim
+mandoc: indir.in:25:1: WARNING: skipping empty request: dei
+mandoc: indir.in:29:1: WARNING: skipping empty request: dei
diff --git a/regress/roff/de/startde.in b/regress/roff/de/startde.in
new file mode 100644
index 00000000..ca9cfac1
--- /dev/null
+++ b/regress/roff/de/startde.in
@@ -0,0 +1,24 @@
+.Dd December 30, 2014
+.Dt DE-STARTDE 1
+.Os OpenBSD
+.Sh NAME
+.Nm de-startde
+.Nd macro starting a macro definition, but not ending it
+.Sh DESCRIPTION
+define outer macro:
+.de outer
+outer macro called; define inner macro:
+.de inner
+inner macro called; end outer scope.
+..
+outer scope ended; outer macro now defined.
+.Pp
+call outer macro:
+.outer
+returned from call of outer macro; end inner scope.
+..
+inner scope ended; inner macro now defined.
+.Pp
+call inner macro:
+.inner
+returned from call of inner macro.
diff --git a/regress/roff/de/startde.out_ascii b/regress/roff/de/startde.out_ascii
new file mode 100644
index 00000000..05b58e8c
--- /dev/null
+++ b/regress/roff/de/startde.out_ascii
@@ -0,0 +1,15 @@
+DE-STARTDE(1) General Commands Manual DE-STARTDE(1)
+
+NNAAMMEE
+ ddee--ssttaarrttddee - macro starting a macro definition, but not ending it
+
+DDEESSCCRRIIPPTTIIOONN
+ define outer macro: outer scope ended; outer macro now defined.
+
+ call outer macro: outer macro called; define inner macro: inner scope
+ ended; inner macro now defined.
+
+ call inner macro: inner macro called; end outer scope. returned from
+ call of outer macro; end inner scope. returned from call of inner macro.
+
+OpenBSD December 30, 2014 OpenBSD
diff --git a/regress/roff/ds/Makefile b/regress/roff/ds/Makefile
new file mode 100644
index 00000000..98a93d75
--- /dev/null
+++ b/regress/roff/ds/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.5 2014/06/29 22:12:54 schwarze Exp $
+
+REGRESS_TARGETS = append escname nested quoting
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/ds/append.in b/regress/roff/ds/append.in
new file mode 100644
index 00000000..6efa46ba
--- /dev/null
+++ b/regress/roff/ds/append.in
@@ -0,0 +1,17 @@
+.Dd February 4, 2014
+.Dt DS-APPEND 1
+.Os OpenBSD
+.Sh NAME
+.Nm ds-append
+.Nd appending to user-defined strings
+.Sh DESCRIPTION
+.ds foo first part
+first part: \*[foo]
+.br
+.as foo " second part
+with second part: \*[foo]
+.br
+.as foo " third part
+with third part: \*[foo]
+.br
+end of test document
diff --git a/regress/roff/ds/append.out_ascii b/regress/roff/ds/append.out_ascii
new file mode 100644
index 00000000..47c68aa3
--- /dev/null
+++ b/regress/roff/ds/append.out_ascii
@@ -0,0 +1,12 @@
+DS-APPEND(1) General Commands Manual DS-APPEND(1)
+
+NNAAMMEE
+ ddss--aappppeenndd - appending to user-defined strings
+
+DDEESSCCRRIIPPTTIIOONN
+ first part: first part
+ with second part: first part second part
+ with third part: first part second part third part
+ end of test document
+
+OpenBSD February 4, 2014 OpenBSD
diff --git a/regress/roff/ds/escname.in b/regress/roff/ds/escname.in
new file mode 100644
index 00000000..6394144b
--- /dev/null
+++ b/regress/roff/ds/escname.in
@@ -0,0 +1,14 @@
+.Dd June 29, 2014
+.Dt DS-ESCNAME 1
+.Os OpenBSD
+.Sh NAME
+.Nm ds-escname
+.Nd escape sequences in string names
+.Sh DESCRIPTION
+.ds std\\esc stdval
+Now \e*[std\\esc] is
+.Sq \*[std\\esc] .
+.Pp
+.ds esc\eesc escval
+Now \e*[esc] is
+.Sq \*[esc] .
diff --git a/regress/roff/ds/escname.out_ascii b/regress/roff/ds/escname.out_ascii
new file mode 100644
index 00000000..3648b19b
--- /dev/null
+++ b/regress/roff/ds/escname.out_ascii
@@ -0,0 +1,11 @@
+DS-ESCNAME(1) General Commands Manual DS-ESCNAME(1)
+
+NNAAMMEE
+ ddss--eessccnnaammee - escape sequences in string names
+
+DDEESSCCRRIIPPTTIIOONN
+ Now \*[std\esc] is `stdval'.
+
+ Now \*[esc] is `'.
+
+OpenBSD June 29, 2014 OpenBSD
diff --git a/regress/roff/ds/nested.in b/regress/roff/ds/nested.in
new file mode 100644
index 00000000..a213b157
--- /dev/null
+++ b/regress/roff/ds/nested.in
@@ -0,0 +1,14 @@
+.Dd April 7, 2010
+.Dt DS-NESTED 1
+.Os OpenBSD
+.Sh NAME
+.Nm ds-nested
+.Nd nested string expansion
+.Sh DESCRIPTION
+.ds foo bar
+.ds bar output
+This is the \*[\*[foo]].
+.Pp
+.ds pi surprising
+This is \*[\*[Pi]].
+This is \*(\*(Pi.
diff --git a/regress/roff/ds/nested.out_ascii b/regress/roff/ds/nested.out_ascii
new file mode 100644
index 00000000..50d51619
--- /dev/null
+++ b/regress/roff/ds/nested.out_ascii
@@ -0,0 +1,11 @@
+DS-NESTED(1) General Commands Manual DS-NESTED(1)
+
+NNAAMMEE
+ ddss--nneesstteedd - nested string expansion
+
+DDEESSCCRRIIPPTTIIOONN
+ This is the output.
+
+ This is surprising. This is surprising.
+
+OpenBSD April 7, 2010 OpenBSD
diff --git a/regress/roff/ds/quoting.in b/regress/roff/ds/quoting.in
new file mode 100644
index 00000000..3e794d09
--- /dev/null
+++ b/regress/roff/ds/quoting.in
@@ -0,0 +1,32 @@
+.Dd August 3, 2010
+.Dt DS-QUOTING 1
+.Os OpenBSD
+.Sh NAME
+.Nm ds-quoting
+.Nd quote handling by the define string request
+.Sh DESCRIPTION
+.ds foo initial definition
+no quoting: \*[foo]
+.br
+.ds foo redefinition
+still no quoting: \*[foo]
+.br
+.ds foo "string value
+leading quotes: \*[foo]
+.br
+.ds foo "string value"
+leading and trailing quotes: \*[foo]
+.br
+.ds foo "string" value
+leading and middle quotes: \*[foo]
+.br
+.ds foo 'string value"
+leading apostrophe, trailing quotes: \*[foo]
+.br
+.ds foo string value"
+leading blank, trailing quotes: \*[foo]
+.br
+.ds foo
+empty string: x\*[foo]x
+.br
+end of test document
diff --git a/regress/roff/ds/quoting.out_ascii b/regress/roff/ds/quoting.out_ascii
new file mode 100644
index 00000000..636743db
--- /dev/null
+++ b/regress/roff/ds/quoting.out_ascii
@@ -0,0 +1,17 @@
+DS-QUOTING(1) General Commands Manual DS-QUOTING(1)
+
+NNAAMMEE
+ ddss--qquuoottiinngg - quote handling by the define string request
+
+DDEESSCCRRIIPPTTIIOONN
+ no quoting: initial definition
+ still no quoting: redefinition
+ leading quotes: string value
+ leading and trailing quotes: string value"
+ leading and middle quotes: string" value
+ leading apostrophe, trailing quotes: 'string value"
+ leading blank, trailing quotes: string value"
+ empty string: xx
+ end of test document
+
+OpenBSD August 3, 2010 OpenBSD
diff --git a/regress/roff/esc/B.in b/regress/roff/esc/B.in
new file mode 100644
index 00000000..97ac39c5
--- /dev/null
+++ b/regress/roff/esc/B.in
@@ -0,0 +1,36 @@
+.Dd July 6, 2014
+.Dt ESC-B 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-B
+.Nd the roff escape B sequence: validate numerical expression
+.Sh DESCRIPTION
+empty: \B''
+.br
+digit: \B'0'
+.br
+no number: \B'no number'
+.br
+trailing garbage: \B'1X'
+.br
+trailing operator: \B'1+'
+.br
+infix operator: \B'1+1'
+.br
+infix and trailing operator: \B'1+1+'
+.br
+chain of operations: \B'1+2+3+4'
+.br
+trailing para: \B'1+('
+.br
+unclosed para: \B'(1'
+.br
+empty pair of parentheses: \B'()'
+.br
+parentheses containing number: \B'(42)'
+.br
+complex expression: \B'3+(3*(5==5*2)*4)+(3*5)/2'
+.br
+other delimiter: \Bx1+1x
+.br
+no closing delimiter: \B'1+1
diff --git a/regress/roff/esc/B.out_ascii b/regress/roff/esc/B.out_ascii
new file mode 100644
index 00000000..c84490a2
--- /dev/null
+++ b/regress/roff/esc/B.out_ascii
@@ -0,0 +1,23 @@
+ESC-B(1) General Commands Manual ESC-B(1)
+
+NNAAMMEE
+ eesscc--BB - the roff escape B sequence: validate numerical expression
+
+DDEESSCCRRIIPPTTIIOONN
+ empty: 0
+ digit: 1
+ no number: 0
+ trailing garbage: 0
+ trailing operator: 0
+ infix operator: 1
+ infix and trailing operator: 0
+ chain of operations: 1
+ trailing para: 0
+ unclosed para: 0
+ empty pair of parentheses: 0
+ parentheses containing number: 1
+ complex expression: 1
+ other delimiter: 1
+ no closing delimiter: 0
+
+OpenBSD July 6, 2014 OpenBSD
diff --git a/regress/roff/esc/B.out_lint b/regress/roff/esc/B.out_lint
new file mode 100644
index 00000000..6159b1c5
--- /dev/null
+++ b/regress/roff/esc/B.out_lint
@@ -0,0 +1 @@
+mandoc: B.in:36:23: WARNING: invalid escape sequence: \B'1+1
diff --git a/regress/roff/esc/Makefile b/regress/roff/esc/Makefile
new file mode 100644
index 00000000..f0860368
--- /dev/null
+++ b/regress/roff/esc/Makefile
@@ -0,0 +1,6 @@
+# $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 o w z ignore
+LINT_TARGETS = B h w ignore
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/esc/c.in b/regress/roff/esc/c.in
new file mode 100644
index 00000000..c3b7a912
--- /dev/null
+++ b/regress/roff/esc/c.in
@@ -0,0 +1,17 @@
+.Dd December 2, 2014
+.Dt ESC-C 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-c
+.Nd the roff escape c sequence: remove trailing space
+.Sh DESCRIPTION
+No space between
+.Dq one
+and
+.Dq word :
+one\c
+word
+.Bd -literal
+one\c
+word
+.Ed
diff --git a/regress/roff/esc/c.out_ascii b/regress/roff/esc/c.out_ascii
new file mode 100644
index 00000000..5ddc8443
--- /dev/null
+++ b/regress/roff/esc/c.out_ascii
@@ -0,0 +1,11 @@
+ESC-C(1) General Commands Manual ESC-C(1)
+
+NNAAMMEE
+ eesscc--cc - the roff escape c sequence: remove trailing space
+
+DDEESSCCRRIIPPTTIIOONN
+ No space between ``one'' and ``word'': oneword
+
+ oneword
+
+OpenBSD December 2, 2014 OpenBSD
diff --git a/regress/roff/esc/c_man.in b/regress/roff/esc/c_man.in
new file mode 100644
index 00000000..c18fad10
--- /dev/null
+++ b/regress/roff/esc/c_man.in
@@ -0,0 +1,12 @@
+.TH ESC-C_MAN 1 "December 2, 2014" OpenBSD
+.SH NAME
+esc-c_man \- the roff escape c sequence: remove trailing space
+.SH DESCRIPTION
+No space between "one" and "word":
+one\c
+word
+.nf
+one\c
+word
+.fi
+final text
diff --git a/regress/roff/esc/c_man.out_ascii b/regress/roff/esc/c_man.out_ascii
new file mode 100644
index 00000000..d00b1b48
--- /dev/null
+++ b/regress/roff/esc/c_man.out_ascii
@@ -0,0 +1,15 @@
+ESC-C_MAN(1) General Commands Manual ESC-C_MAN(1)
+
+
+
+NNAAMMEE
+ esc-c_man - the roff escape c sequence: remove trailing space
+
+DDEESSCCRRIIPPTTIIOONN
+ No space between "one" and "word": oneword
+ oneword
+ final text
+
+
+
+OpenBSD December 2, 2014 ESC-C_MAN(1)
diff --git a/regress/roff/esc/e.in b/regress/roff/esc/e.in
new file mode 100644
index 00000000..c0f87692
--- /dev/null
+++ b/regress/roff/esc/e.in
@@ -0,0 +1,19 @@
+.Dd December 3, 2014
+.Dt ESC-E 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-e
+.Nd escaping backslashes
+.Sh DESCRIPTION
+In plain text: "\e" and "\\"
+.Pp
+On macro lines:
+.Qq \e(at
+and
+.Qq \\(at
+.Pp
+In a macro definition:
+.de mytest
+"\e$1" and "\\$2"
+..
+.mytest one two
diff --git a/regress/roff/esc/e.out_ascii b/regress/roff/esc/e.out_ascii
new file mode 100644
index 00000000..75665168
--- /dev/null
+++ b/regress/roff/esc/e.out_ascii
@@ -0,0 +1,13 @@
+ESC-E(1) General Commands Manual ESC-E(1)
+
+NNAAMMEE
+ eesscc--ee - escaping backslashes
+
+DDEESSCCRRIIPPTTIIOONN
+ In plain text: "\" and "\"
+
+ On macro lines: "\(at" and "@"
+
+ In a macro definition: "\$1" and "two"
+
+OpenBSD December 3, 2014 OpenBSD
diff --git a/regress/roff/esc/f.in b/regress/roff/esc/f.in
new file mode 100644
index 00000000..a909ac8a
--- /dev/null
+++ b/regress/roff/esc/f.in
@@ -0,0 +1,12 @@
+.Dd August 7, 2013
+.Dt ESC-F 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-f
+.Nd the roff escape f sequence: font changes
+.Sh DESCRIPTION
+numbers: \f3bold\f2italic\f1roman
+.br
+letters: \fBbold\fIitalic\fPback\f(BIbolditalic\fRroman
+.br
+multiletter: \f[B]bold\f[I]italic\f[P]back\f[BI]bolditalic\f[R]roman
diff --git a/regress/roff/esc/f.out_ascii b/regress/roff/esc/f.out_ascii
new file mode 100644
index 00000000..5ecd6993
--- /dev/null
+++ b/regress/roff/esc/f.out_ascii
@@ -0,0 +1,11 @@
+ESC-F(1) General Commands Manual ESC-F(1)
+
+NNAAMMEE
+ eesscc--ff - the roff escape f sequence: font changes
+
+DDEESSCCRRIIPPTTIIOONN
+ numbers: bboolldd_i_t_a_l_i_croman
+ letters: bboolldd_i_t_a_l_i_cbbaacckk_bb_oo_ll_dd_ii_tt_aa_ll_ii_ccroman
+ multiletter: bboolldd_i_t_a_l_i_cbbaacckk_bb_oo_ll_dd_ii_tt_aa_ll_ii_ccroman
+
+OpenBSD August 7, 2013 OpenBSD
diff --git a/regress/roff/esc/h.in b/regress/roff/esc/h.in
new file mode 100644
index 00000000..31fbb4e2
--- /dev/null
+++ b/regress/roff/esc/h.in
@@ -0,0 +1,18 @@
+.Dd May 28, 2012
+.Dt ESC-H 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-h
+.Nd the roff escape h sequence: horizontal movement
+.Sh DESCRIPTION
+simple: >\h'0'<
+.br
+escape only: >\h'\w'\&''<
+.br
+escape at the end: >\h'0+\w'\&''<
+.br
+escape at the beginning: >\h'\w'\&'+0'<
+.br
+escape in the middle: >\h'0+\w'\&'+0'<
+.br
+invalid delimiter: >\h-<
diff --git a/regress/roff/esc/h.out_ascii b/regress/roff/esc/h.out_ascii
new file mode 100644
index 00000000..858dcf32
--- /dev/null
+++ b/regress/roff/esc/h.out_ascii
@@ -0,0 +1,14 @@
+ESC-H(1) General Commands Manual ESC-H(1)
+
+NNAAMMEE
+ eesscc--hh - the roff escape h sequence: horizontal movement
+
+DDEESSCCRRIIPPTTIIOONN
+ simple: ><
+ escape only: ><
+ escape at the end: ><
+ escape at the beginning: ><
+ escape in the middle: ><
+ invalid delimiter: ><
+
+OpenBSD May 28, 2012 OpenBSD
diff --git a/regress/roff/esc/h.out_lint b/regress/roff/esc/h.out_lint
new file mode 100644
index 00000000..6d591e38
--- /dev/null
+++ b/regress/roff/esc/h.out_lint
@@ -0,0 +1 @@
+mandoc: h.in:18:21: WARNING: invalid escape sequence: \h-
diff --git a/regress/roff/esc/ignore.in b/regress/roff/esc/ignore.in
new file mode 100644
index 00000000..4be7fb6c
--- /dev/null
+++ b/regress/roff/esc/ignore.in
@@ -0,0 +1,14 @@
+.Dd January 1, 2015
+.Dt ESC-IGNORE 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-ignore
+.Nd ignored roff escape sequences
+.Sh DESCRIPTION
+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
new file mode 100644
index 00000000..5e41d49a
--- /dev/null
+++ b/regress/roff/esc/ignore.out_ascii
@@ -0,0 +1,12 @@
+ESC-IGNORE(1) General Commands Manual ESC-IGNORE(1)
+
+NNAAMMEE
+ eesscc--iiggnnoorree - ignored roff escape sequences
+
+DDEESSCCRRIIPPTTIIOONN
+ multiform: abcd
+ quoted: abc
+ sizes: abcdef
+ signed sizes: abcdef
+
+OpenBSD January 1, 2015 OpenBSD
diff --git a/regress/roff/esc/ignore.out_lint b/regress/roff/esc/ignore.out_lint
new file mode 100644
index 00000000..c163d60d
--- /dev/null
+++ b/regress/roff/esc/ignore.out_lint
@@ -0,0 +1 @@
+mandoc: ignore.in:14:60: WARNING: invalid escape sequence: \s-
diff --git a/regress/roff/esc/multi.in b/regress/roff/esc/multi.in
new file mode 100644
index 00000000..a2a76db1
--- /dev/null
+++ b/regress/roff/esc/multi.in
@@ -0,0 +1,10 @@
+.Dd May 28, 2012
+.Dt ESC-MULTI 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-multi
+.Nd roff multi-character escape sequences
+.Sh DESCRIPTION
+\[tno] \[t+-] \[tmu] \[tdi] \[12] \[14] \[34]
+.br
+\C'tno' \C't+-' \C'tmu' \C'tdi' \C'12' \C'14' \C'34'
diff --git a/regress/roff/esc/multi.out_ascii b/regress/roff/esc/multi.out_ascii
new file mode 100644
index 00000000..a7b64602
--- /dev/null
+++ b/regress/roff/esc/multi.out_ascii
@@ -0,0 +1,10 @@
+ESC-MULTI(1) General Commands Manual ESC-MULTI(1)
+
+NNAAMMEE
+ eesscc--mmuullttii - roff multi-character escape sequences
+
+DDEESSCCRRIIPPTTIIOONN
+ ~ +- x -:- 1/2 1/4 3/4
+ ~ +- x -:- 1/2 1/4 3/4
+
+OpenBSD May 28, 2012 OpenBSD
diff --git a/regress/roff/esc/o.in b/regress/roff/esc/o.in
new file mode 100644
index 00000000..2976a9d8
--- /dev/null
+++ b/regress/roff/esc/o.in
@@ -0,0 +1,18 @@
+.Dd January 21, 2015
+.Dt ESC-O 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-o
+.Nd the roff escape o sequence: overstrike
+.Sh DESCRIPTION
+empty: x\o''x
+.br
+one character: x\o'|'x
+.br
+wide/narrow: x\o'O|'x
+.br
+narrow/wide: x\o'|O'x
+.br
+wide/narrow/narrow: x\o'O-|'x
+.br
+narrow/narrow/wide: x\o'|-O'x
diff --git a/regress/roff/esc/o.out_ascii b/regress/roff/esc/o.out_ascii
new file mode 100644
index 00000000..39dc1b1c
--- /dev/null
+++ b/regress/roff/esc/o.out_ascii
@@ -0,0 +1,14 @@
+ESC-O(1) General Commands Manual ESC-O(1)
+
+NNAAMMEE
+ eesscc--oo - the roff escape o sequence: overstrike
+
+DDEESSCCRRIIPPTTIIOONN
+ empty: xx
+ one character: x|x
+ wide/narrow: xO|x
+ narrow/wide: x|Ox
+ wide/narrow/narrow: xO-|x
+ narrow/narrow/wide: x|-Ox
+
+OpenBSD January 21, 2015 OpenBSD
diff --git a/regress/roff/esc/one.in b/regress/roff/esc/one.in
new file mode 100644
index 00000000..4d416d2a
--- /dev/null
+++ b/regress/roff/esc/one.in
@@ -0,0 +1,16 @@
+.Dd October 27, 2014
+.Dt ESC-ONE 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-one
+.Nd roff one-character escape sequences
+.Sh DESCRIPTION
+backslash: >\e<
+.br
+minus: >\-<
+.br
+acute: >\'<
+.br
+grave: >\`<
+.br
+normal character: >\q<
diff --git a/regress/roff/esc/one.out_ascii b/regress/roff/esc/one.out_ascii
new file mode 100644
index 00000000..1324e038
--- /dev/null
+++ b/regress/roff/esc/one.out_ascii
@@ -0,0 +1,13 @@
+ESC-ONE(1) General Commands Manual ESC-ONE(1)
+
+NNAAMMEE
+ eesscc--oonnee - roff one-character escape sequences
+
+DDEESSCCRRIIPPTTIIOONN
+ backslash: >\<
+ minus: >-<
+ acute: >'<
+ grave: >`<
+ normal character: >q<
+
+OpenBSD October 27, 2014 OpenBSD
diff --git a/regress/roff/esc/two.in b/regress/roff/esc/two.in
new file mode 100644
index 00000000..c6ac3eee
--- /dev/null
+++ b/regress/roff/esc/two.in
@@ -0,0 +1,75 @@
+.Dd October 28, 2014
+.Dt ESC-TWO 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-two
+.Nd roff two-character escape sequences
+.Sh DESCRIPTION
+lines: \(ba \(br \(ul \(bb \(sl \(rs
+.\" groff doesn't know \(rl
+.br
+markers: \(bu \(lz \(sq \(lh \(rh \(at \(sh \(CR
+.\" the circle \(ci differs
+.\" the daggers \(dd and \(dg use backspace
+.\" \(ps and \(sc intentionally differ
+.\" groff doesn't know \(OK
+.br
+legal: \(co \(rg \(tm
+.br
+punctuation: \(em \(en \(hy
+.\" the inverted punctuation is intentionally different
+.br
+quotes: \(Bq \(bq \(oq \(cq \(aq \(dq \(Fo \(Fc \(fo \(fc
+.\" the double quotes \(lq and \(rq differ
+.br
+brackets: \(lB \(rB \(lC \(rC \(la \(ra \(bv \(lt \(lk \(rt \(rk \(rb
+.\" the left bottom \(lb differs
+.br
+arrows: \(<- \(-> \(lA \(rA \(hA
+.\" the left-right arrow \(<> differs
+.\" groff doesn't know \(va and \(vA
+.\" the vertical arrows \(da, \(ua, \(uA, \(dA use backspace
+.br
+logical: \(AN \(OR \(no \(te \(st \(tf \(3d \(or
+.\" the universal quantifier \(fa uses backspace
+.br
+mathematical: \(pl \(mi \(-+ \(+- \(pc \(mu \(di \(f/ \(**
+\(<= \(>= \(<< \(>> \(eq \(!= \(== \(ne \(=~ \(ap \(~~ \(~= \(pt
+\(es \(mo \(sb \(sp \(ca \(cu
+\(sr \(lc \(rc \(lf \(rf \(if \(Ah \(Im \(Re \(pd
+.\" groff doesn't know \(-~, \(nb, \(nc, \(-h
+.\" these differ: \(nm \(ib \(ip \(/_ \(pp \(gr
+.\" these use backspace: \(c* \(c+ \(is
+.br
+ligatures: \(ff \(fi \(fl \(Fi \(Fl \(AE \(ae \(OE \(oe \(IJ \(ij
+.\" the German eszett \(ss differs
+.br
+accents: \(a" \(a^ \(aa \(ga \(ab \(ac \(ad \(ah \(ao \(a~ \(ho \(ha \(ti
+.\" the macron \(a- differs
+.\" groff doesn't know \(a.
+.br
+accented and special letters:
+\('A \('E \('I \('O \('U \('a \('e \('i \('o \('u
+\(`A \(`E \(`I \(`O \(`U \(`a \(`e \(`i \(`o \(`u
+\(~A \(~N \(~O \(~a \(~n \(~o
+\(:A \(:E \(:I \(:O \(:U \(:a \(:e \(:i \(:o \(:u \(:y
+\(^A \(^E \(^I \(^O \(^U \(^a \(^e \(^i \(^o \(^u
+\(,C \(,c \(/L \(/l \(/O \(/o \(oA \(oa \(-D \(.i
+.\" these intentionally differ: \(Sd \(TP \(Tp
+.\" groff doesn't know \(.j
+.br
+currency: \(Do \(ct \(Eu \(eu \(Ye \(Fo
+.\" uses backspace: \(Cs
+.\" the GB pound \(Po is intentionally different
+.br
+units: \(fm \(mc
+.\" groff doesn't know \(%O
+.\" \(sd differs
+.\" \(de is intentionally different
+.br
+greek letters: \(*A \(*B \*D \(*E \(*Z \(*Y \*H \(*I \(*K \(*L
+\(*M \(*N \*C \(*O \(*P \(*R \(*T \(*U \*F \(*X \(*Q \(*W
+\(*a \(*b \(*g \(*d \(*e \(*z \(*y \(*h \(*i \(*k \(*l
+\(*m \(*n \(*c \(*o \(*p \(*r \(*s \(*t \(*u \(*f \(*x \(*q \(*w
+\(+h \(+f \+p \(+e \(ts
+.\" these differ: \(*G \(*S
diff --git a/regress/roff/esc/two.out_ascii b/regress/roff/esc/two.out_ascii
new file mode 100644
index 00000000..238adffa
--- /dev/null
+++ b/regress/roff/esc/two.out_ascii
@@ -0,0 +1,26 @@
+ESC-TWO(1) General Commands Manual ESC-TWO(1)
+
+NNAAMMEE
+ eesscc--ttwwoo - roff two-character escape sequences
+
+DDEESSCCRRIIPPTTIIOONN
+ lines: | | _ | / \
+ markers: +o <> [] <= => @ # _|
+ legal: (C) (R) tm
+ punctuation: -- - -
+ quotes: ,, , ` ' ' " << >> < >
+ brackets: [ ] { } < > | ,- { -. } -'
+ arrows: <- -> <= => <=>
+ logical: ^ v ~ 3 -) .:. .:. |
+ mathematical: + - -+ +- . x -:- / * <= >= << >> = != == !== =~ ~ ~~ ~= oc
+ {} E (= =) (^) U \/ |~ ~| |_ _| oo N I R a
+ ligatures: ff fi fl ffi ffl AE ae OE oe IJ ij
+ accents: " ^ ' ` '` , " v o ~ , ^ ~
+ accented and special letters: 'A 'E 'I 'O 'U 'a 'e 'i 'o 'u `A `E `I `O `U `a `e `i `o `u ~A ~N
+ ~O ~a ~n ~o "A "E "I "O "U "a "e "i "o "u "y ^A ^E ^I ^O ^U ^a ^e ^i ^o ^u ,C ,c /L /l /O /o oA oa -D i
+ currency: $ /c EUR EUR =Y <<
+ units: ' ,u
+ greek letters: A B E Z H I K /\ M N O TT P T Y X IY _O a B y d e ,C n -0
+ i k >\ ,u v ,E o -n p -o ~t u |o x |u w -0 |o +p e s
+
+OpenBSD October 28, 2014 OpenBSD
diff --git a/regress/roff/esc/w.in b/regress/roff/esc/w.in
new file mode 100644
index 00000000..4a9e79f8
--- /dev/null
+++ b/regress/roff/esc/w.in
@@ -0,0 +1,16 @@
+.Dd April 8, 2014
+.Dt ESC-W 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-w
+.Nd the roff escape w sequence: text width
+.Sh DESCRIPTION
+empty: \w''
+.br
+character: \w'n'
+.br
+blank: \w' '
+.br
+text: \w'text'
+.br
+unterminated: \w'foo
diff --git a/regress/roff/esc/w.out_ascii b/regress/roff/esc/w.out_ascii
new file mode 100644
index 00000000..1d44a2e0
--- /dev/null
+++ b/regress/roff/esc/w.out_ascii
@@ -0,0 +1,13 @@
+ESC-W(1) General Commands Manual ESC-W(1)
+
+NNAAMMEE
+ eesscc--ww - the roff escape w sequence: text width
+
+DDEESSCCRRIIPPTTIIOONN
+ empty: 0
+ character: 24
+ blank: 24
+ text: 96
+ unterminated: 72
+
+OpenBSD April 8, 2014 OpenBSD
diff --git a/regress/roff/esc/w.out_lint b/regress/roff/esc/w.out_lint
new file mode 100644
index 00000000..a1b91722
--- /dev/null
+++ b/regress/roff/esc/w.out_lint
@@ -0,0 +1 @@
+mandoc: w.in:16:15: WARNING: invalid escape sequence: \w'foo
diff --git a/regress/roff/esc/z.in b/regress/roff/esc/z.in
new file mode 100644
index 00000000..9d3ad1d5
--- /dev/null
+++ b/regress/roff/esc/z.in
@@ -0,0 +1,24 @@
+.Dd April 29, 2015
+.Dt ESC-Z 1
+.Os OpenBSD
+.Sh NAME
+.Nm esc-z
+.Nd the roff escape z sequence
+.Sh DESCRIPTION
+single z with ASCII char: >\zx<
+.br
+single z with escape char: >\z\(ci<
+.br
+.ds mystr mytext
+single z with defined string (\*[mystr]): >\z\*[mystr]<
+.br
+single z with font escape: >\z\fBxbold\fP<
+.br
+single z with nospace escape: >\z\c
+new line<
+.br
+single z with overstrike: >\z\o'ab'c<
+.br
+single z near the end of the line: >\z<
+.br
+double z: >\z\zx<
diff --git a/regress/roff/esc/z.out_ascii b/regress/roff/esc/z.out_ascii
new file mode 100644
index 00000000..233a4aa5
--- /dev/null
+++ b/regress/roff/esc/z.out_ascii
@@ -0,0 +1,16 @@
+ESC-Z(1) General Commands Manual ESC-Z(1)
+
+NNAAMMEE
+ eesscc--zz - the roff escape z sequence
+
+DDEESSCCRRIIPPTTIIOONN
+ single z with ASCII char: >x<
+ single z with escape char: >O<
+ single z with defined string (mytext): >mytext<
+ single z with font escape: >xxbboolldd<
+ single z with nospace escape: > new line<
+ single z with overstrike: >abc<
+ single z near the end of the line: ><
+ double z: >x<
+
+OpenBSD April 29, 2015 OpenBSD
diff --git a/regress/roff/ft/Makefile b/regress/roff/ft/Makefile
new file mode 100644
index 00000000..f57fe72b
--- /dev/null
+++ b/regress/roff/ft/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.1 2014/07/05 12:33:54 schwarze Exp $
+
+REGRESS_TARGETS = badargs
+LINT_TARGETS = badargs
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/ft/badargs.in b/regress/roff/ft/badargs.in
new file mode 100644
index 00000000..2cb01b20
--- /dev/null
+++ b/regress/roff/ft/badargs.in
@@ -0,0 +1,15 @@
+.TH "FT-BADARGS" 1 "July 5, 2014" OpenBSD
+.SH NAME
+ft-badargs \(en font request with bad arguments
+.SH DESCRIPTION
+default font
+.ft B
+bold
+.ft foo
+still bold
+.ft I bogus
+italic
+.ft P
+back to bold
+.ft
+back to italic
diff --git a/regress/roff/ft/badargs.out_ascii b/regress/roff/ft/badargs.out_ascii
new file mode 100644
index 00000000..30bfed3c
--- /dev/null
+++ b/regress/roff/ft/badargs.out_ascii
@@ -0,0 +1,13 @@
+FT-BADARGS(1) General Commands Manual FT-BADARGS(1)
+
+
+
+NNAAMMEE
+ ft-badargs - font request with bad arguments
+
+DDEESSCCRRIIPPTTIIOONN
+ default font bboolldd ssttiillll bboolldd _i_t_a_l_i_c bbaacckk ttoo bboolldd _b_a_c_k _t_o _i_t_a_l_i_c
+
+
+
+OpenBSD July 5, 2014 FT-BADARGS(1)
diff --git a/regress/roff/ft/badargs.out_lint b/regress/roff/ft/badargs.out_lint
new file mode 100644
index 00000000..f84d7ea9
--- /dev/null
+++ b/regress/roff/ft/badargs.out_lint
@@ -0,0 +1,2 @@
+mandoc: badargs.in:10:7: ERROR: skipping excess arguments: ft ... bogus
+mandoc: badargs.in:8:2: WARNING: unknown font, skipping request: ft foo
diff --git a/regress/roff/ig/Makefile b/regress/roff/ig/Makefile
new file mode 100644
index 00000000..93e5e41e
--- /dev/null
+++ b/regress/roff/ig/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.1 2014/07/07 11:34:41 schwarze Exp $
+
+REGRESS_TARGETS = basic
+LINT_TARGETS = basic
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/ig/basic.in b/regress/roff/ig/basic.in
new file mode 100644
index 00000000..7e898832
--- /dev/null
+++ b/regress/roff/ig/basic.in
@@ -0,0 +1,27 @@
+.Dd July 7, 2014
+.Dt IG-BASIC 1
+.Os OpenBSD
+.Sh NAME
+.Nm ig-basic
+.Nd ignored blocks
+.Sh DESCRIPTION
+no arguments
+.ig
+ignored text
+..
+.br
+with end marker
+.ig end1
+ignored text
+.end1
+.br
+with two arguments
+.ig end2 excess
+ignored text
+.end2
+.br
+Here is a stray .. block ending,
+..
+and then an .ig staying open until the end of the file:
+.ig
+ignored text
diff --git a/regress/roff/ig/basic.out_ascii b/regress/roff/ig/basic.out_ascii
new file mode 100644
index 00000000..d100617a
--- /dev/null
+++ b/regress/roff/ig/basic.out_ascii
@@ -0,0 +1,13 @@
+IG-BASIC(1) General Commands Manual IG-BASIC(1)
+
+NNAAMMEE
+ iigg--bbaassiicc - ignored blocks
+
+DDEESSCCRRIIPPTTIIOONN
+ no arguments
+ with end marker
+ with two arguments
+ Here is a stray .. block ending, and then an .ig staying open until the
+ end of the file:
+
+OpenBSD July 7, 2014 OpenBSD
diff --git a/regress/roff/ig/basic.out_lint b/regress/roff/ig/basic.out_lint
new file mode 100644
index 00000000..2b03b9cf
--- /dev/null
+++ b/regress/roff/ig/basic.out_lint
@@ -0,0 +1,3 @@
+mandoc: basic.in:19:5: ERROR: skipping excess arguments: .ig ... excess
+mandoc: basic.in:24:1: ERROR: skipping end of block that is not open: ..
+mandoc: basic.in:26:1: ERROR: appending missing end of block: ig
diff --git a/regress/roff/it/Makefile b/regress/roff/it/Makefile
new file mode 100644
index 00000000..ec03f94c
--- /dev/null
+++ b/regress/roff/it/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.2 2014/08/14 02:00:53 schwarze Exp $
+
+REGRESS_TARGETS = badarg double text
+LINT_TARGETS = badarg
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/it/badarg.in b/regress/roff/it/badarg.in
new file mode 100644
index 00000000..78c2893c
--- /dev/null
+++ b/regress/roff/it/badarg.in
@@ -0,0 +1,17 @@
+.Dd July 30, 2014
+.Dt IT-BADARG 1
+.Os OpenBSD
+.Sh NAME
+.Nm it-badarg
+.Nd input line traps without numeric arguments
+.Sh DESCRIPTION
+.de mytrap
+traptext
+..
+line 1
+.it mytrap
+line 2
+line 3
+.it
+line 4
+line 5
diff --git a/regress/roff/it/badarg.out_ascii b/regress/roff/it/badarg.out_ascii
new file mode 100644
index 00000000..d4d2bc63
--- /dev/null
+++ b/regress/roff/it/badarg.out_ascii
@@ -0,0 +1,9 @@
+IT-BADARG(1) General Commands Manual IT-BADARG(1)
+
+NNAAMMEE
+ iitt--bbaaddaarrgg - input line traps without numeric arguments
+
+DDEESSCCRRIIPPTTIIOONN
+ line 1 line 2 line 3 line 4 line 5
+
+OpenBSD July 30, 2014 OpenBSD
diff --git a/regress/roff/it/badarg.out_lint b/regress/roff/it/badarg.out_lint
new file mode 100644
index 00000000..d2d4edb3
--- /dev/null
+++ b/regress/roff/it/badarg.out_lint
@@ -0,0 +1,2 @@
+mandoc: badarg.in:12:1: ERROR: skipping request without numeric argument: it mytrap
+mandoc: badarg.in:15:1: ERROR: skipping request without numeric argument: it
diff --git a/regress/roff/it/double.in b/regress/roff/it/double.in
new file mode 100644
index 00000000..d0a93e1e
--- /dev/null
+++ b/regress/roff/it/double.in
@@ -0,0 +1,16 @@
+.TH IT-DOUBLE 1 2013-07-13 OpenBSD
+.SH NAME
+it-double \- double input line trap
+.SH DESCRIPTION
+.de firstmacro
+firstmacro
+..
+.de secondmacro
+secondmacro
+..
+initial text
+.it 1 firstmacro
+.it 2 secondmacro
+first line
+second line
+third line
diff --git a/regress/roff/it/double.out_ascii b/regress/roff/it/double.out_ascii
new file mode 100644
index 00000000..d4704b36
--- /dev/null
+++ b/regress/roff/it/double.out_ascii
@@ -0,0 +1,13 @@
+IT-DOUBLE(1) General Commands Manual IT-DOUBLE(1)
+
+
+
+NNAAMMEE
+ it-double - double input line trap
+
+DDEESSCCRRIIPPTTIIOONN
+ initial text first line second line secondmacro third line
+
+
+
+OpenBSD 2013-07-13 IT-DOUBLE(1)
diff --git a/regress/roff/it/text.in b/regress/roff/it/text.in
new file mode 100644
index 00000000..b3384180
--- /dev/null
+++ b/regress/roff/it/text.in
@@ -0,0 +1,27 @@
+.Dd February 17, 2015
+.Dt IT-TEXT 1
+.Os OpenBSD
+.Sh NAME
+.Nm it-text
+.Nd what an input line trap counts as text
+.Sh DESCRIPTION
+.de trap
+traptext
+..
+initial text
+.it 1trap
+first line after 1trap
+second line after 1trap
+.Pp
+.it 1vtrap
+first line after 1vtrap
+second line after 1vtrap
+.Pp
+.it ( + 1c + 1i)trap
+first line after ( + 1c + 1i)trap
+second line after ( + 1c + 1i)trap
+third line after ( + 1c + 1i)trap
+.it 1 trap
+.Pp
+first line after .Pp
+second line after .Pp
diff --git a/regress/roff/it/text.out_ascii b/regress/roff/it/text.out_ascii
new file mode 100644
index 00000000..bfc89842
--- /dev/null
+++ b/regress/roff/it/text.out_ascii
@@ -0,0 +1,16 @@
+IT-TEXT(1) General Commands Manual IT-TEXT(1)
+
+NNAAMMEE
+ iitt--tteexxtt - what an input line trap counts as text
+
+DDEESSCCRRIIPPTTIIOONN
+ initial text first line after 1trap traptext second line after 1trap
+
+ first line after 1vtrap traptext second line after 1vtrap
+
+ first line after ( + 1c + 1i)trap second line after ( + 1c + 1i)trap
+ traptext third line after ( + 1c + 1i)trap
+
+ first line after .Pp traptext second line after .Pp
+
+OpenBSD February 17, 2015 OpenBSD
diff --git a/regress/roff/ll/Makefile b/regress/roff/ll/Makefile
new file mode 100644
index 00000000..c8c99b9c
--- /dev/null
+++ b/regress/roff/ll/Makefile
@@ -0,0 +1,7 @@
+# $OpenBSD: Makefile,v 1.1 2014/03/30 19:47:32 schwarze Exp $
+
+REGRESS_TARGETS = basic
+
+SKIP_TMAN =
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/ll/basic.in b/regress/roff/ll/basic.in
new file mode 100644
index 00000000..9f03a517
--- /dev/null
+++ b/regress/roff/ll/basic.in
@@ -0,0 +1,25 @@
+.Dd February 5, 2014
+.Dt LL-BASIC 1
+.Os OpenBSD
+.Sh NAME
+.Nm ll-basic
+.Nd changing the line length
+.Sh DESCRIPTION
+This is a longer text to demonstrate the default line length.
+In ASCII mode, it is expected to break at column 78.
+.Pp
+.ll 38n
+This is another long text to demonstrate shorter lines.
+In ASCII mode, it is expected to break at column 38.
+.Pp
+.ll
+This is a longer text after switching back to the default line length.
+In ASCII mode, it is expected to break at column 78.
+.Pp
+.ll +100n
+This is another long text to demonstrate longer lines.
+In ASCII mode, it is not expected to break at all.
+.Pp
+.ll FOO
+This is a longer text after switching to an invalid line length.
+In ASCII mode, it is expected to break at column 78.
diff --git a/regress/roff/ll/basic.out_ascii b/regress/roff/ll/basic.out_ascii
new file mode 100644
index 00000000..b5448e24
--- /dev/null
+++ b/regress/roff/ll/basic.out_ascii
@@ -0,0 +1,23 @@
+LL-BASIC(1) General Commands Manual LL-BASIC(1)
+
+NNAAMMEE
+ llll--bbaassiicc - changing the line length
+
+DDEESSCCRRIIPPTTIIOONN
+ This is a longer text to demonstrate the default line length. In ASCII
+ mode, it is expected to break at column 78.
+
+ This is another long text to
+ demonstrate shorter lines. In
+ ASCII mode, it is expected to
+ break at column 38.
+
+ This is a longer text after switching back to the default line length.
+ In ASCII mode, it is expected to break at column 78.
+
+ This is another long text to demonstrate longer lines. In ASCII mode, it is not expected to break at all.
+
+ This is a longer text after switching to an invalid line length. In
+ ASCII mode, it is expected to break at column 78.
+
+OpenBSD February 5, 2014 OpenBSD
diff --git a/regress/roff/na/Makefile b/regress/roff/na/Makefile
new file mode 100644
index 00000000..1d2da255
--- /dev/null
+++ b/regress/roff/na/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.2 2011/11/17 16:28:46 schwarze Exp $
+
+REGRESS_TARGETS=args
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/na/args.in b/regress/roff/na/args.in
new file mode 100644
index 00000000..850c8dc7
--- /dev/null
+++ b/regress/roff/na/args.in
@@ -0,0 +1,9 @@
+.TH NA-ARGS 1 "January 17, 2011" OpenBSD
+.SH NAME
+na-args \- arguments to .na macros
+.SH DESCRIPTION
+some
+text
+.na arg1 arg2 arg3
+more
+text
diff --git a/regress/roff/na/args.out_ascii b/regress/roff/na/args.out_ascii
new file mode 100644
index 00000000..e10a3ae1
--- /dev/null
+++ b/regress/roff/na/args.out_ascii
@@ -0,0 +1,13 @@
+NA-ARGS(1) General Commands Manual NA-ARGS(1)
+
+
+
+NNAAMMEE
+ na-args - arguments to .na macros
+
+DDEESSCCRRIIPPTTIIOONN
+ some text more text
+
+
+
+OpenBSD January 17, 2011 NA-ARGS(1)
diff --git a/regress/roff/nr/Makefile b/regress/roff/nr/Makefile
new file mode 100644
index 00000000..8da68878
--- /dev/null
+++ b/regress/roff/nr/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.9 2015/01/23 00:38:43 schwarze Exp $
+
+REGRESS_TARGETS = argc divzero eval escname int predef rr scale
+LINT_TARGETS = divzero escname
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/nr/argc.in b/regress/roff/nr/argc.in
new file mode 100644
index 00000000..bf204a70
--- /dev/null
+++ b/regress/roff/nr/argc.in
@@ -0,0 +1,21 @@
+.Dd December 15, 2013
+.Dt NR-ARGC 1
+.Os OpenBSD
+.Sh NAME
+.Nm nr-argc
+.Nd varying number of arguments to the .nr macro
+.Sh DESCRIPTION
+.nr onearg
+one argument: \n[onearg]
+.Pp
+.nr twoargs 2
+two arguments: \n[twoargs]
+.Pp
+.nr withsuffix 2x
+with suffix: \n[withsuffix]
+.Pp
+.nr threeargs 2 3
+three arguments: \n[threeargs]
+.Pp
+.nr fourargs 2 3 4
+four arguments: \n[fourargs]
diff --git a/regress/roff/nr/argc.out_ascii b/regress/roff/nr/argc.out_ascii
new file mode 100644
index 00000000..80d3d0f1
--- /dev/null
+++ b/regress/roff/nr/argc.out_ascii
@@ -0,0 +1,17 @@
+NR-ARGC(1) General Commands Manual NR-ARGC(1)
+
+NNAAMMEE
+ nnrr--aarrggcc - varying number of arguments to the .nr macro
+
+DDEESSCCRRIIPPTTIIOONN
+ one argument: 0
+
+ two arguments: 2
+
+ with suffix: 2
+
+ three arguments: 2
+
+ four arguments: 2
+
+OpenBSD December 15, 2013 OpenBSD
diff --git a/regress/roff/nr/divzero.in b/regress/roff/nr/divzero.in
new file mode 100644
index 00000000..8f776bf3
--- /dev/null
+++ b/regress/roff/nr/divzero.in
@@ -0,0 +1,8 @@
+.TH NR-DIVZERO 1 "December 18, 2014" OpenBSD
+.SH NAME
+nr-divzero \- division by zero in numerical expression
+.SH DESCRIPTION
+initial text
+.nr divresult 1/0
+.nr modresult 1%0
+final \n[divresult] \n[modresult] text
diff --git a/regress/roff/nr/divzero.out_ascii b/regress/roff/nr/divzero.out_ascii
new file mode 100644
index 00000000..26d93c26
--- /dev/null
+++ b/regress/roff/nr/divzero.out_ascii
@@ -0,0 +1,13 @@
+NR-DIVZERO(1) General Commands Manual NR-DIVZERO(1)
+
+
+
+NNAAMMEE
+ nr-divzero - division by zero in numerical expression
+
+DDEESSCCRRIIPPTTIIOONN
+ initial text final 0 0 text
+
+
+
+OpenBSD December 18, 2014 NR-DIVZERO(1)
diff --git a/regress/roff/nr/divzero.out_lint b/regress/roff/nr/divzero.out_lint
new file mode 100644
index 00000000..8177c0b8
--- /dev/null
+++ b/regress/roff/nr/divzero.out_lint
@@ -0,0 +1,2 @@
+mandoc: divzero.in:6:4: ERROR: divide by zero: 1/0
+mandoc: divzero.in:7:4: ERROR: divide by zero: 1%0
diff --git a/regress/roff/nr/escname.in b/regress/roff/nr/escname.in
new file mode 100644
index 00000000..20454568
--- /dev/null
+++ b/regress/roff/nr/escname.in
@@ -0,0 +1,17 @@
+.TH NR-ESCNAME 1 "June 29, 2014" OpenBSD
+.SH NAME
+nr-escname \- escape sequences in register names
+.SH DESCRIPTION
+.nr first 1
+.nr second 2
+.nr first\\second 3
+.nr first\esecond 4
+\n[first] \n[second] \n[first\\second]
+.PP
+.rr first\esecond
+\n[first] \n[second] \n[first\\second]
+.PP
+.rr first\\second
+\n[first] \n[second] \n[first\\second]
+.PP
+incomplete: \n[second
diff --git a/regress/roff/nr/escname.out_ascii b/regress/roff/nr/escname.out_ascii
new file mode 100644
index 00000000..fd970a14
--- /dev/null
+++ b/regress/roff/nr/escname.out_ascii
@@ -0,0 +1,19 @@
+NR-ESCNAME(1) General Commands Manual NR-ESCNAME(1)
+
+
+
+NNAAMMEE
+ nr-escname - escape sequences in register names
+
+DDEESSCCRRIIPPTTIIOONN
+ 1 2 3
+
+ 0 2 3
+
+ 0 2 0
+
+ incomplete:
+
+
+
+OpenBSD June 29, 2014 NR-ESCNAME(1)
diff --git a/regress/roff/nr/escname.out_lint b/regress/roff/nr/escname.out_lint
new file mode 100644
index 00000000..66bfad35
--- /dev/null
+++ b/regress/roff/nr/escname.out_lint
@@ -0,0 +1,4 @@
+mandoc: escname.in:8:5: ERROR: escaped character not allowed in a name: first\e
+mandoc: escname.in:11:5: ERROR: escaped character not allowed in a name: first\e
+mandoc: escname.in:17:13: WARNING: invalid escape sequence: \n[second
+mandoc: escname.in:17:12: WARNING: whitespace at end of input line
diff --git a/regress/roff/nr/eval.in b/regress/roff/nr/eval.in
new file mode 100644
index 00000000..16bf24e3
--- /dev/null
+++ b/regress/roff/nr/eval.in
@@ -0,0 +1,67 @@
+.TH NR-EVAL 1 "April 7, 2014" OpenBSD
+.SH NAME
+nr-eval \- numeric expressions in assignments to number registers
+.SH DESCRIPTION
+.nr mr 1
+1: \n(mr
+.br
+.nr mr nonumber
+nonumber: \n(mr
+.br
+.nr mr 3X
+3X: \n(mr
+.br
+.nr mr 4+
+4+: \n(mr
+.br
+.nr mr 2+3
+2+3: \n(mr
+.br
+.nr mr 1+1:
+1+1:: \n(mr
+.br
+.nr mr 10-3
+10-3: \n(mr
+.br
+.nr mr 4*2
+4*2: \n(mr
+.br
+.nr mr 27/3
+27/3: \n(mr
+.br
+.nr mr 58%16
+58%16: \n(mr
+.br
+.nr mr 11<?20
+11<?20: \n(mr
+.br
+.nr mr 30<?12
+30<?12: \n(mr
+.br
+.nr mr 7>?13
+7>?13: \n(mr
+.br
+.nr mr 14>?6
+14>?6: \n(mr
+.br
+.nr mr 2+3*3
+2+3*3: \n(mr
+.br
+.nr mr 16+(
+para at eol: \n(mr
+.br
+.nr mr (17
+unclosed para: \n(mr
+.br
+.nr mr (18)
+(18): \n(mr
+.br
+.nr mr ( 25 - 6 )
+( 25 - 6 ): \n(mr
+.br
+.nr mr 11+( 3*3 )
+11+( 3*3 ): \n(mr
+.br
+.nr mr 3+(3*(5==5*2)*4)+(3*5)/2
+3+(3*(5==5*2)*4)+(3*5)/2: \n(mr
+.br
diff --git a/regress/roff/nr/eval.out_ascii b/regress/roff/nr/eval.out_ascii
new file mode 100644
index 00000000..5f4c767a
--- /dev/null
+++ b/regress/roff/nr/eval.out_ascii
@@ -0,0 +1,33 @@
+NR-EVAL(1) General Commands Manual NR-EVAL(1)
+
+
+
+NNAAMMEE
+ nr-eval - numeric expressions in assignments to number registers
+
+DDEESSCCRRIIPPTTIIOONN
+ 1: 1
+ nonumber: 1
+ 3X: 3
+ 4+: 3
+ 2+3: 5
+ 1+1:: 5
+ 10-3: 7
+ 4*2: 8
+ 27/3: 9
+ 58%16: 10
+ 11<?20: 11
+ 30<?12: 12
+ 7>?13: 13
+ 14>?6: 14
+ 2+3*3: 15
+ para at eol: 15
+ unclosed para: 17
+ (18): 18
+ ( 25 - 6 ): 19
+ 11+( 3*3 ): 20
+ 3+(3*(5==5*2)*4)+(3*5)/2: 21
+
+
+
+OpenBSD April 7, 2014 NR-EVAL(1)
diff --git a/regress/roff/nr/int.in b/regress/roff/nr/int.in
new file mode 100644
index 00000000..3f907697
--- /dev/null
+++ b/regress/roff/nr/int.in
@@ -0,0 +1,15 @@
+.TH NR-INT 1 "October 3, 2013" OpenBSD
+.SH NAME
+nr-int \- integer number registers
+.SH DESCRIPTION
+initial contents: \nY \n(YY \n[YYY]
+.br
+.nr Y 42
+.nr YY -1
+.nr YYY 2147483647
+intermediate contents: \nY \n(YY \n[YYY]
+.br
+.nr Y -19
+.nr YY +2
+.nr YYY +1
+final contents: \nY \n(YY \n[YYY]
diff --git a/regress/roff/nr/int.out_ascii b/regress/roff/nr/int.out_ascii
new file mode 100644
index 00000000..8471386f
--- /dev/null
+++ b/regress/roff/nr/int.out_ascii
@@ -0,0 +1,15 @@
+NR-INT(1) General Commands Manual NR-INT(1)
+
+
+
+NNAAMMEE
+ nr-int - integer number registers
+
+DDEESSCCRRIIPPTTIIOONN
+ initial contents: 0 0 0
+ intermediate contents: 42 -1 2147483647
+ final contents: 23 1 -2147483648
+
+
+
+OpenBSD October 3, 2013 NR-INT(1)
diff --git a/regress/roff/nr/predef.in b/regress/roff/nr/predef.in
new file mode 100644
index 00000000..3610340d
--- /dev/null
+++ b/regress/roff/nr/predef.in
@@ -0,0 +1,24 @@
+.TH NR-PREDEF 1 "August 29, 2015" OpenBSD
+.SH NAME
+nr-predef \- pre-defined read-only integer number registers
+.SH DESCRIPTION
+.de mym
+user defined macro with \\n(.$ arguments: \\$*
+..
+.nf
+.nr .A 111
+.nr .g 111
+.nr .H 111
+.nr .j 111
+.nr .T 111
+.nr .V 111
+.nr .$ 111
+ascii mode: \n(.A
+groff mode: \n(.g
+horizontal resolution: \n(.H
+adjustment mode: \n(.j
+output device defined: \n(.T
+vertical resolution: \n(.V
+.mym
+.mym one
+.mym one two
diff --git a/regress/roff/nr/predef.out_ascii b/regress/roff/nr/predef.out_ascii
new file mode 100644
index 00000000..6973d296
--- /dev/null
+++ b/regress/roff/nr/predef.out_ascii
@@ -0,0 +1,21 @@
+NR-PREDEF(1) General Commands Manual NR-PREDEF(1)
+
+
+
+NNAAMMEE
+ nr-predef - pre-defined read-only integer number registers
+
+DDEESSCCRRIIPPTTIIOONN
+ ascii mode: 0
+ groff mode: 1
+ horizontal resolution: 24
+ adjustment mode: 0
+ output device defined: 1
+ vertical resolution: 40
+ user defined macro with 0 arguments:
+ user defined macro with 1 arguments: one
+ user defined macro with 2 arguments: one two
+
+
+
+OpenBSD August 29, 2015 NR-PREDEF(1)
diff --git a/regress/roff/nr/rr.in b/regress/roff/nr/rr.in
new file mode 100644
index 00000000..06ccdf64
--- /dev/null
+++ b/regress/roff/nr/rr.in
@@ -0,0 +1,15 @@
+.TH NR-RR 1 "April 5, 2014" OpenBSD
+.SH NAME
+nr-rr \- defining and undefining number registers
+.SH DESCRIPTION
+.nr key1 1
+.nr key2 2
+.nr key3 3
+.nr key4 4
+.nr key5 5
+.rr key1
+.rr key3
+.rr key5
+non-null values: \n[key2] \n[key4]
+.br
+unset values: \n[key1] \n[key3] \n[key5]
diff --git a/regress/roff/nr/rr.out_ascii b/regress/roff/nr/rr.out_ascii
new file mode 100644
index 00000000..21b50ee2
--- /dev/null
+++ b/regress/roff/nr/rr.out_ascii
@@ -0,0 +1,14 @@
+NR-RR(1) General Commands Manual NR-RR(1)
+
+
+
+NNAAMMEE
+ nr-rr - defining and undefining number registers
+
+DDEESSCCRRIIPPTTIIOONN
+ non-null values: 2 4
+ unset values: 0 0 0
+
+
+
+OpenBSD April 5, 2014 NR-RR(1)
diff --git a/regress/roff/nr/scale.in b/regress/roff/nr/scale.in
new file mode 100644
index 00000000..6f63c589
--- /dev/null
+++ b/regress/roff/nr/scale.in
@@ -0,0 +1,26 @@
+.TH NR-INT 1 "January 23, 2015" OpenBSD
+.SH NAME
+nr-scale \- scaling units in numeric expressions
+.SH DESCRIPTION
+.nr Y 1f+1
+\nY
+.nr Y 1i+1
+\nY
+.nr Y 10c+1
+\nY
+.nr Y 1v+1
+\nY
+.nr Y 1P+1
+\nY
+.nr Y 1m+1
+\nY
+.nr Y 1n+1
+\nY
+.nr Y 10p+1
+\nY
+.nr Y 1u+1
+\nY
+.nr Y 100M+1
+\nY
+.nr Y 1X+2
+\nY
diff --git a/regress/roff/nr/scale.out_ascii b/regress/roff/nr/scale.out_ascii
new file mode 100644
index 00000000..c6f79b2a
--- /dev/null
+++ b/regress/roff/nr/scale.out_ascii
@@ -0,0 +1,13 @@
+NR-INT(1) General Commands Manual NR-INT(1)
+
+
+
+NNAAMMEE
+ nr-scale - scaling units in numeric expressions
+
+DDEESSCCRRIIPPTTIIOONN
+ 65537 241 945 41 41 25 25 34 2 25 1
+
+
+
+OpenBSD January 23, 2015 NR-INT(1)
diff --git a/regress/roff/ps/Makefile b/regress/roff/ps/Makefile
new file mode 100644
index 00000000..24e50bbd
--- /dev/null
+++ b/regress/roff/ps/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.2 2011/11/17 16:28:46 schwarze Exp $
+
+REGRESS_TARGETS=ignore
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/ps/ignore.in b/regress/roff/ps/ignore.in
new file mode 100644
index 00000000..439afda5
--- /dev/null
+++ b/regress/roff/ps/ignore.in
@@ -0,0 +1,9 @@
+.TH PS-IGNORE 1 "Febuary 5, 2011" OpenBSD
+.SH NAME
+ps-ignore \- ignoreing point size macros
+.SH DESCRIPTION
+normal text
+.ps -1
+small text
+.ps +1
+big text
diff --git a/regress/roff/ps/ignore.out_ascii b/regress/roff/ps/ignore.out_ascii
new file mode 100644
index 00000000..b1bfacac
--- /dev/null
+++ b/regress/roff/ps/ignore.out_ascii
@@ -0,0 +1,13 @@
+PS-IGNORE(1) General Commands Manual PS-IGNORE(1)
+
+
+
+NNAAMMEE
+ ps-ignore - ignoreing point size macros
+
+DDEESSCCRRIIPPTTIIOONN
+ normal text small text big text
+
+
+
+OpenBSD Febuary 5, 2011 PS-IGNORE(1)
diff --git a/regress/roff/rm/Makefile b/regress/roff/rm/Makefile
new file mode 100644
index 00000000..14c74a60
--- /dev/null
+++ b/regress/roff/rm/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.2 2011/11/17 16:28:46 schwarze Exp $
+
+REGRESS_TARGETS=basic
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/rm/basic.in b/regress/roff/rm/basic.in
new file mode 100644
index 00000000..4e3e2650
--- /dev/null
+++ b/regress/roff/rm/basic.in
@@ -0,0 +1,19 @@
+.Dd January 11, 2011
+.Dt RM-BASIC 1
+.Os OpenBSD
+.Sh NAME
+.Nm rm-basic
+.Nd the remove macro request
+.Sh DESCRIPTION
+.de mymacro
+Hello
+..
+.ds mystring world
+before rm:
+.mymacro
+\*[mystring]!
+.br
+.rm mymacro mystring
+after rm:
+.mymacro
+\*[mystring]!
diff --git a/regress/roff/rm/basic.out_ascii b/regress/roff/rm/basic.out_ascii
new file mode 100644
index 00000000..145b85d0
--- /dev/null
+++ b/regress/roff/rm/basic.out_ascii
@@ -0,0 +1,10 @@
+RM-BASIC(1) General Commands Manual RM-BASIC(1)
+
+NNAAMMEE
+ rrmm--bbaassiicc - the remove macro request
+
+DDEESSCCRRIIPPTTIIOONN
+ before rm: Hello world!
+ after rm: !
+
+OpenBSD January 11, 2011 OpenBSD
diff --git a/regress/roff/scale/Makefile b/regress/roff/scale/Makefile
new file mode 100644
index 00000000..822f7555
--- /dev/null
+++ b/regress/roff/scale/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.1 2014/08/14 02:00:53 schwarze Exp $
+
+REGRESS_TARGETS = horiz
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/scale/horiz.in b/regress/roff/scale/horiz.in
new file mode 100644
index 00000000..edba2f75
--- /dev/null
+++ b/regress/roff/scale/horiz.in
@@ -0,0 +1,31 @@
+.TH HORIZ 1 "December 23, 2014" OpenBSD
+.SH NAME
+horiz \- horizontal distances
+.SH DESCRIPTION
+initial text
+.in 240u
+240u
+.in 3.6c
+3.6c
+.in 0.003f
+0.003f
+.in 2i
+2i
+.in 500M
+500M
+.in 6P
+6P
+.in 36p
+36p
+.in 10n
+10n
+.in 5m
+5m
+.in 79n
+79n
+.in 1.5ix
+1.5ix
+.in -6n
+-6n
+.PP
+final text
diff --git a/regress/roff/scale/horiz.out_ascii b/regress/roff/scale/horiz.out_ascii
new file mode 100644
index 00000000..75e12a4f
--- /dev/null
+++ b/regress/roff/scale/horiz.out_ascii
@@ -0,0 +1,27 @@
+HORIZ(1) General Commands Manual HORIZ(1)
+
+
+
+NNAAMMEE
+ horiz - horizontal distances
+
+DDEESSCCRRIIPPTTIIOONN
+ initial text
+ 240u
+ 3.6c
+ 0.003f
+ 2i
+ 500M
+ 6P
+ 36p
+ 10n
+ 5m
+ 79n
+ 1.5ix
+ -6n
+
+ final text
+
+
+
+OpenBSD December 23, 2014 HORIZ(1)
diff --git a/regress/roff/sp/Makefile b/regress/roff/sp/Makefile
new file mode 100644
index 00000000..7a09afb1
--- /dev/null
+++ b/regress/roff/sp/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.5 2015/02/06 09:38:22 schwarze Exp $
+
+REGRESS_TARGETS = badargs-man badargs-mdoc negative scaling-man scaling-mdoc
+LINT_TARGETS = badargs-man
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/sp/badargs-man.in b/regress/roff/sp/badargs-man.in
new file mode 100644
index 00000000..0a7eb075
--- /dev/null
+++ b/regress/roff/sp/badargs-man.in
@@ -0,0 +1,17 @@
+.TH SP-BADARGS-MAN 1 "December 23, 2014" OpenBSD
+.SH NAME
+sp-badargs-man \- bad arguments to .sp macros in man(7)
+.SH DESCRIPTION
+no arguments:
+.sp
+one argument:
+.sp 2v
+two arguments:
+.sp 3v 2i
+no scaling unit specified:
+.sp 1
+trailing garbage:
+.sp 2vx
+garbage only:
+.sp xxx
+end of test document
diff --git a/regress/roff/sp/badargs-man.out_ascii b/regress/roff/sp/badargs-man.out_ascii
new file mode 100644
index 00000000..b0421916
--- /dev/null
+++ b/regress/roff/sp/badargs-man.out_ascii
@@ -0,0 +1,29 @@
+SP-BADARGS-MAN(1) General Commands Manual SP-BADARGS-MAN(1)
+
+
+
+NNAAMMEE
+ sp-badargs-man - bad arguments to .sp macros in man(7)
+
+DDEESSCCRRIIPPTTIIOONN
+ no arguments:
+
+ one argument:
+
+
+ two arguments:
+
+
+
+ no scaling unit specified:
+
+ trailing garbage:
+
+
+ garbage only:
+
+ end of test document
+
+
+
+OpenBSD December 23, 2014 SP-BADARGS-MAN(1)
diff --git a/regress/roff/sp/badargs-man.out_lint b/regress/roff/sp/badargs-man.out_lint
new file mode 100644
index 00000000..d38502dd
--- /dev/null
+++ b/regress/roff/sp/badargs-man.out_lint
@@ -0,0 +1 @@
+mandoc: badargs-man.in:10:8: ERROR: skipping excess arguments: sp ... 2i
diff --git a/regress/roff/sp/badargs-mdoc.in b/regress/roff/sp/badargs-mdoc.in
new file mode 100644
index 00000000..684ee7e3
--- /dev/null
+++ b/regress/roff/sp/badargs-mdoc.in
@@ -0,0 +1,20 @@
+.Dd December 23, 2014
+.Dt SP-BADARGS-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm sp-badargs-mdoc
+.Nd bad arguments to .sp macros in mdoc(7)
+.Sh DESCRIPTION
+no arguments:
+.sp
+one argument:
+.sp 2v
+two arguments:
+.sp 3v 2i
+no scaling unit specified:
+.sp 1
+trailing garbage:
+.sp 2vx
+garbage only:
+.sp xxx
+end of test document
diff --git a/regress/roff/sp/badargs-mdoc.out_ascii b/regress/roff/sp/badargs-mdoc.out_ascii
new file mode 100644
index 00000000..3e1f87ed
--- /dev/null
+++ b/regress/roff/sp/badargs-mdoc.out_ascii
@@ -0,0 +1,25 @@
+SP-BADARGS-MDOC(1) General Commands Manual SP-BADARGS-MDOC(1)
+
+NNAAMMEE
+ sspp--bbaaddaarrggss--mmddoocc - bad arguments to .sp macros in mdoc(7)
+
+DDEESSCCRRIIPPTTIIOONN
+ no arguments:
+
+ one argument:
+
+
+ two arguments:
+
+
+
+ no scaling unit specified:
+
+ trailing garbage:
+
+
+ garbage only:
+
+ end of test document
+
+OpenBSD December 23, 2014 OpenBSD
diff --git a/regress/roff/sp/negative.in b/regress/roff/sp/negative.in
new file mode 100644
index 00000000..10c6edc9
--- /dev/null
+++ b/regress/roff/sp/negative.in
@@ -0,0 +1,8 @@
+.TH SP-NEGATIVE 1 "July 12, 2012" OpenBSD
+.SH NAME
+sp-negative \- negative vertical spacing
+.SH DESCRIPTION
+first line
+.sp -1v
+.PP
+second line
diff --git a/regress/roff/sp/negative.out_ascii b/regress/roff/sp/negative.out_ascii
new file mode 100644
index 00000000..8a71aba6
--- /dev/null
+++ b/regress/roff/sp/negative.out_ascii
@@ -0,0 +1,14 @@
+SP-NEGATIVE(1) General Commands Manual SP-NEGATIVE(1)
+
+
+
+NNAAMMEE
+ sp-negative - negative vertical spacing
+
+DDEESSCCRRIIPPTTIIOONN
+ first line
+ second line
+
+
+
+OpenBSD July 12, 2012 SP-NEGATIVE(1)
diff --git a/regress/roff/sp/scaling-man.in b/regress/roff/sp/scaling-man.in
new file mode 100644
index 00000000..69318eca
--- /dev/null
+++ b/regress/roff/sp/scaling-man.in
@@ -0,0 +1,27 @@
+.TH SP-SCALING-MAN 1 "December 23, 2014" OpenBSD
+.SH NAME
+sp-scaling-man \- scaled arguments to .sp requests in man(7)
+.SH DESCRIPTION
+20 basic units:
+.sp 20u
+21 basic units:
+.sp 21u
+one centimeter:
+.sp 1c
+quarter of an inch:
+.sp 0.25i
+half a pica:
+.sp 0.5P
+one pica:
+.sp 1P
+6 points:
+.sp 6p
+7 points:
+.sp 7p
+one en:
+.sp 1n
+three en:
+.sp 3n
+two em:
+.sp 2m
+end of test document
diff --git a/regress/roff/sp/scaling-man.out_ascii b/regress/roff/sp/scaling-man.out_ascii
new file mode 100644
index 00000000..72a0b53b
--- /dev/null
+++ b/regress/roff/sp/scaling-man.out_ascii
@@ -0,0 +1,34 @@
+SP-SCALING-MAN(1) General Commands Manual SP-SCALING-MAN(1)
+
+
+
+NNAAMMEE
+ sp-scaling-man - scaled arguments to .sp requests in man(7)
+
+DDEESSCCRRIIPPTTIIOONN
+ 20 basic units:
+ 21 basic units:
+
+ one centimeter:
+
+
+ quarter of an inch:
+
+ half a pica:
+ one pica:
+
+ 6 points:
+ 7 points:
+
+ one en:
+
+ three en:
+
+
+ two em:
+
+ end of test document
+
+
+
+OpenBSD December 23, 2014 SP-SCALING-MAN(1)
diff --git a/regress/roff/sp/scaling-mdoc.in b/regress/roff/sp/scaling-mdoc.in
new file mode 100644
index 00000000..ff4d45c7
--- /dev/null
+++ b/regress/roff/sp/scaling-mdoc.in
@@ -0,0 +1,30 @@
+.Dd December 23, 2014
+.Dt SP-SCALING-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm sp-scaling-mdoc
+.Nd scaled arguments to .sp requests in mdoc(7)
+.Sh DESCRIPTION
+20 basic units:
+.sp 20u
+21 basic units:
+.sp 21u
+one centimeter:
+.sp 1c
+quarter of an inch:
+.sp 0.25i
+half a pica:
+.sp 0.5P
+one pica:
+.sp 1P
+6 points:
+.sp 6p
+7 points:
+.sp 7p
+one en:
+.sp 1n
+three en:
+.sp 3n
+two em:
+.sp 2m
+end of test document
diff --git a/regress/roff/sp/scaling-mdoc.out_ascii b/regress/roff/sp/scaling-mdoc.out_ascii
new file mode 100644
index 00000000..625ba7c4
--- /dev/null
+++ b/regress/roff/sp/scaling-mdoc.out_ascii
@@ -0,0 +1,30 @@
+SP-SCALING-MDOC(1) General Commands Manual SP-SCALING-MDOC(1)
+
+NNAAMMEE
+ sspp--ssccaalliinngg--mmddoocc - scaled arguments to .sp requests in mdoc(7)
+
+DDEESSCCRRIIPPTTIIOONN
+ 20 basic units:
+ 21 basic units:
+
+ one centimeter:
+
+
+ quarter of an inch:
+
+ half a pica:
+ one pica:
+
+ 6 points:
+ 7 points:
+
+ one en:
+
+ three en:
+
+
+ two em:
+
+ end of test document
+
+OpenBSD December 23, 2014 OpenBSD
diff --git a/regress/roff/string/Makefile b/regress/roff/string/Makefile
new file mode 100644
index 00000000..d2cd125b
--- /dev/null
+++ b/regress/roff/string/Makefile
@@ -0,0 +1,11 @@
+# $OpenBSD: Makefile,v 1.6 2014/07/06 19:08:57 schwarze Exp $
+
+REGRESS_TARGETS=escape infinite zerolength name
+LINT_TARGETS = name
+
+# The infinite test fails badly with groff-1.20.1:
+# It fails to print the following text.
+
+SKIP_GROFF ?= infinite
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/string/escape.in b/regress/roff/string/escape.in
new file mode 100644
index 00000000..05a271e8
--- /dev/null
+++ b/regress/roff/string/escape.in
@@ -0,0 +1,26 @@
+.TH STRING-ESCAPE 1 "December 3, 2010"
+.SH NAME
+string-escape - preventing string interpolation
+.SH DESCRIPTION
+.ds right wrong
+.ds inner *[right]
+.ds outer \\*[inner]
+.SS Normal interpolation
+result: \*[inner]
+.PP
+The above line must be "result: *[right]".
+.SS Intervening character
+result: \e*[right]
+.PP
+The above line must be "result: backslash*[right]",
+not "result: rong".
+.SS Escaped backslash
+result: \\*[right]
+.PP
+The above line must be "result: backslash*[right]",
+not "result: rong".
+.SS Delayed interpolation
+result: \*[outer]
+.PP
+The above line must be "result: *[right]",
+not "result: wrong".
diff --git a/regress/roff/string/escape.out_ascii b/regress/roff/string/escape.out_ascii
new file mode 100644
index 00000000..fc8021aa
--- /dev/null
+++ b/regress/roff/string/escape.out_ascii
@@ -0,0 +1,31 @@
+STRING-ESCAPE(1) General Commands Manual STRING-ESCAPE(1)
+
+
+
+NNAAMMEE
+ string-escape - preventing string interpolation
+
+DDEESSCCRRIIPPTTIIOONN
+ NNoorrmmaall iinntteerrppoollaattiioonn
+ result: *[right]
+
+ The above line must be "result: *[right]".
+
+ IInntteerrvveenniinngg cchhaarraacctteerr
+ result: \*[right]
+
+ The above line must be "result: backslash*[right]", not "result: rong".
+
+ EEssccaappeedd bbaacckkssllaasshh
+ result: \*[right]
+
+ The above line must be "result: backslash*[right]", not "result: rong".
+
+ DDeellaayyeedd iinntteerrppoollaattiioonn
+ result: *[right]
+
+ The above line must be "result: *[right]", not "result: wrong".
+
+
+
+ December 3, 2010 STRING-ESCAPE(1)
diff --git a/regress/roff/string/infinite.in b/regress/roff/string/infinite.in
new file mode 100644
index 00000000..e16c527d
--- /dev/null
+++ b/regress/roff/string/infinite.in
@@ -0,0 +1,8 @@
+.TH STRING-INFINITE 1 "December 3, 2010" OpenBSD
+.SH NAME
+string-infinite - endless recursion in string expansion
+.SH DESCRIPTION
+.ds recur \\*[recur]
+Blow up,
+(and do not \*[recur] print this)
+but still render following text correctly.
diff --git a/regress/roff/string/infinite.out_ascii b/regress/roff/string/infinite.out_ascii
new file mode 100644
index 00000000..1a9a5d6a
--- /dev/null
+++ b/regress/roff/string/infinite.out_ascii
@@ -0,0 +1,13 @@
+STRING-INFINITE(1) General Commands Manual STRING-INFINITE(1)
+
+
+
+NNAAMMEE
+ string-infinite - endless recursion in string expansion
+
+DDEESSCCRRIIPPTTIIOONN
+ Blow up, but still render following text correctly.
+
+
+
+OpenBSD December 3, 2010 STRING-INFINITE(1)
diff --git a/regress/roff/string/name.in b/regress/roff/string/name.in
new file mode 100644
index 00000000..a2a524a4
--- /dev/null
+++ b/regress/roff/string/name.in
@@ -0,0 +1,35 @@
+.Dd January 10, 2011
+.Dt STRING-NAME 1
+.Os OpenBSD
+.Sh NAME
+.Nm string-name
+.Nd torturing .ds with weird string names
+.Sh DESCRIPTION
+.ds norm value of norm
+.ds "quot" value of "quot"
+.ds bs\e value of bs\ee
+.ds bs\\e value of bs\e\ee
+.ds bl\ e value of bl\e e
+norm: \*[norm]
+.br
+norm without closing brace: \*[norm
+.br
+quot: \*[quot]
+.br
+"quot": \*["quot"]
+.br
+bs\e\ee: \*[bs\\e]
+.\".br
+.\"bs\ee: \*[bs\e]
+.br
+bse: \*[bse]
+.br
+bs: \*[bs]
+.\".br
+.\"bl\e e: \*[bl\ e]
+.br
+bl e: \*[bl e]
+.br
+ble: \*[ble]
+.br
+bl: \*[bl]
diff --git a/regress/roff/string/name.out_ascii b/regress/roff/string/name.out_ascii
new file mode 100644
index 00000000..45ebba19
--- /dev/null
+++ b/regress/roff/string/name.out_ascii
@@ -0,0 +1,18 @@
+STRING-NAME(1) General Commands Manual STRING-NAME(1)
+
+NNAAMMEE
+ ssttrriinngg--nnaammee - torturing .ds with weird string names
+
+DDEESSCCRRIIPPTTIIOONN
+ norm: value of norm
+ norm without closing brace:
+ quot:
+ "quot": value of "quot"
+ bs\\e: value of bs\\e
+ bse:
+ bs:
+ bl e:
+ ble:
+ bl:
+
+OpenBSD January 10, 2011 OpenBSD
diff --git a/regress/roff/string/name.out_lint b/regress/roff/string/name.out_lint
new file mode 100644
index 00000000..c4c757f5
--- /dev/null
+++ b/regress/roff/string/name.out_lint
@@ -0,0 +1,17 @@
+mandoc: name.in:10:5: ERROR: escaped character not allowed in a name: bs\e
+mandoc: name.in:12:5: ERROR: escaped character not allowed in a name: bl\
+mandoc: name.in:15:29: WARNING: invalid escape sequence: \*[norm
+mandoc: name.in:15:29: WARNING: undefined string, using "": norm
+mandoc: name.in:15:28: WARNING: whitespace at end of input line
+mandoc: name.in:17:7: WARNING: undefined string, using "": quot
+mandoc: name.in:17:6: WARNING: whitespace at end of input line
+mandoc: name.in:25:6: WARNING: undefined string, using "": bse
+mandoc: name.in:25:5: WARNING: whitespace at end of input line
+mandoc: name.in:27:5: WARNING: undefined string, using "": bs
+mandoc: name.in:27:4: WARNING: whitespace at end of input line
+mandoc: name.in:31:7: WARNING: undefined string, using "": bl e
+mandoc: name.in:31:6: WARNING: whitespace at end of input line
+mandoc: name.in:33:6: WARNING: undefined string, using "": ble
+mandoc: name.in:33:5: WARNING: whitespace at end of input line
+mandoc: name.in:35:5: WARNING: undefined string, using "": bl
+mandoc: name.in:35:4: WARNING: whitespace at end of input line
diff --git a/regress/roff/string/zerolength.in b/regress/roff/string/zerolength.in
new file mode 100644
index 00000000..0d4d9bac
--- /dev/null
+++ b/regress/roff/string/zerolength.in
@@ -0,0 +1,16 @@
+.TH STRING-ZEROLENGTH 1 "December 19, 2010"
+.SH NAME
+string-zerolength - handling of zero-length user-defined strings
+.SH DESCRIPTION
+.ds dszero "
+.de dezero
+..
+use zero-length string:
+x\*[dszero]x
+.dszero
+x
+.PP
+use zero-length macro:
+x\*[dezero]x
+.dezero
+x
diff --git a/regress/roff/string/zerolength.out_ascii b/regress/roff/string/zerolength.out_ascii
new file mode 100644
index 00000000..ff9d2473
--- /dev/null
+++ b/regress/roff/string/zerolength.out_ascii
@@ -0,0 +1,15 @@
+STRING-ZEROLENGTH(1) General Commands Manual STRING-ZEROLENGTH(1)
+
+
+
+NNAAMMEE
+ string-zerolength - handling of zero-length user-defined strings
+
+DDEESSCCRRIIPPTTIIOONN
+ use zero-length string: xx x
+
+ use zero-length macro: xx x
+
+
+
+ December 19, 2010 STRING-ZEROLENGTH(1)
diff --git a/regress/roff/tr/Makefile b/regress/roff/tr/Makefile
new file mode 100644
index 00000000..791c27ef
--- /dev/null
+++ b/regress/roff/tr/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.1 2015/02/06 16:05:51 schwarze Exp $
+
+REGRESS_TARGETS = args
+LINT_TARGETS = args
+
+.include <bsd.regress.mk>
diff --git a/regress/roff/tr/args.in b/regress/roff/tr/args.in
new file mode 100644
index 00000000..1ef074d6
--- /dev/null
+++ b/regress/roff/tr/args.in
@@ -0,0 +1,16 @@
+.TH TR-BASIC 1 "February 6, 2015" OpenBSD
+.SH NAME
+tr-args \- arguments of the tr request
+.SH DESCRIPTION
+no argument:
+.tr
+one character:
+.tr x
+>>x<<
+two characters:
+.tr xy
+>>x<<
+three characters:
+.tr xyz
+>>xz<<
+last line
diff --git a/regress/roff/tr/args.out_ascii b/regress/roff/tr/args.out_ascii
new file mode 100644
index 00000000..b199ed6b
--- /dev/null
+++ b/regress/roff/tr/args.out_ascii
@@ -0,0 +1,14 @@
+TR-BASIC(1) General Commands Manual TR-BASIC(1)
+
+
+
+NNAAMMEE
+ tr-args - arguments of the tr request
+
+DDEESSCCRRIIPPTTIIOONN
+ no argument: one character: >> << two characters: >>y<< three
+ characters: >>y << last line
+
+
+
+OpenBSD February 6, 2015 TR-BASIC(1)
diff --git a/regress/roff/tr/args.out_lint b/regress/roff/tr/args.out_lint
new file mode 100644
index 00000000..dec14b80
--- /dev/null
+++ b/regress/roff/tr/args.out_lint
@@ -0,0 +1,3 @@
+mandoc: args.in:6:1: WARNING: skipping empty request: tr
+mandoc: args.in:8:5: WARNING: odd number of characters in request: tr x
+mandoc: args.in:14:7: WARNING: odd number of characters in request: tr z