aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/regress/char
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-02-08 03:02:13 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-02-08 03:02:13 +0000
commitd9f0f81c846a8405c29870e4a8379e5e79d1cad3 (patch)
treec07efd74ac58650949dc67576001a720e688319f /regress/char
parentcdbb1fca07752eb230e5219c22e9e65075c85b82 (diff)
downloadmandoc-d9f0f81c846a8405c29870e4a8379e5e79d1cad3.tar.gz
mandoc-d9f0f81c846a8405c29870e4a8379e5e79d1cad3.tar.zst
mandoc-d9f0f81c846a8405c29870e4a8379e5e79d1cad3.zip
Finally port the OpenBSD regression suite.
Both kristaps@ and wiz@ repeated asked for this, literally for years.
Diffstat (limited to 'regress/char')
-rw-r--r--regress/char/Makefile6
-rw-r--r--regress/char/Makefile.inc5
-rw-r--r--regress/char/N/Makefile5
-rw-r--r--regress/char/N/basic.in26
-rw-r--r--regress/char/N/basic.out_ascii21
-rw-r--r--regress/char/accent/Makefile7
-rw-r--r--regress/char/accent/combine.in23
-rw-r--r--regress/char/accent/combine.out_utf817
-rw-r--r--regress/char/accent/nocombine.in45
-rw-r--r--regress/char/accent/nocombine.out_ascii28
-rw-r--r--regress/char/accent/nocombine.out_utf828
-rw-r--r--regress/char/accent/utf8only.in9
-rw-r--r--regress/char/accent/utf8only.out_utf815
-rw-r--r--regress/char/bar/Makefile5
-rw-r--r--regress/char/bar/man.in12
-rw-r--r--regress/char/bar/man.out_ascii21
-rw-r--r--regress/char/bar/mdoc.in37
-rw-r--r--regress/char/bar/mdoc.out_ascii31
-rw-r--r--regress/char/hyphen/Makefile5
-rw-r--r--regress/char/hyphen/man.in11
-rw-r--r--regress/char/hyphen/man.out_ascii20
-rw-r--r--regress/char/hyphen/mdoc.in17
-rw-r--r--regress/char/hyphen/mdoc.out_ascii19
-rw-r--r--regress/char/space/Makefile13
-rw-r--r--regress/char/space/break.in11
-rw-r--r--regress/char/space/break.out_ascii12
-rw-r--r--regress/char/space/eos-man.in22
-rw-r--r--regress/char/space/eos-man.out_ascii26
-rw-r--r--regress/char/space/eos.in27
-rw-r--r--regress/char/space/eos.out_ascii21
-rw-r--r--regress/char/space/esct-man.in34
-rw-r--r--regress/char/space/esct-man.out_ascii36
-rw-r--r--regress/char/space/esct-man.out_lint6
-rw-r--r--regress/char/space/esct-mdoc.in35
-rw-r--r--regress/char/space/esct-mdoc.out_ascii34
-rw-r--r--regress/char/space/esct-mdoc.out_lint3
-rw-r--r--regress/char/space/leading-man.in11
-rw-r--r--regress/char/space/leading-man.out_ascii15
-rw-r--r--regress/char/space/leading-mdoc.in24
-rw-r--r--regress/char/space/leading-mdoc.out_ascii18
-rw-r--r--regress/char/space/multiple.in18
-rw-r--r--regress/char/space/multiple.out_ascii19
-rw-r--r--regress/char/space/nobreak.in30
-rw-r--r--regress/char/space/nobreak.out_ascii34
-rw-r--r--regress/char/space/tab-man.in66
-rw-r--r--regress/char/space/tab-man.out_ascii52
-rw-r--r--regress/char/space/tab-man.out_lint22
-rw-r--r--regress/char/space/tab.in128
-rw-r--r--regress/char/space/tab.out_ascii89
-rw-r--r--regress/char/space/tab.out_lint42
-rw-r--r--regress/char/space/trailing-mdoc.in11
-rw-r--r--regress/char/space/trailing-mdoc.out_ascii9
-rw-r--r--regress/char/space/trailing-mdoc.out_lint3
-rw-r--r--regress/char/space/zerowidth.in12
-rw-r--r--regress/char/space/zerowidth.out_ascii18
-rw-r--r--regress/char/space/zerowidth.out_html6
-rw-r--r--regress/char/space/zerowidth.out_utf818
-rw-r--r--regress/char/unicode/Makefile13
-rw-r--r--regress/char/unicode/ascii.in28
-rw-r--r--regress/char/unicode/ascii.out_ascii34
-rw-r--r--regress/char/unicode/ascii.out_html22
-rw-r--r--regress/char/unicode/ascii.out_utf834
-rw-r--r--regress/char/unicode/input.inbin0 -> 2371 bytes
-rw-r--r--regress/char/unicode/input.out_ascii67
-rw-r--r--regress/char/unicode/input.out_lint81
-rw-r--r--regress/char/unicode/input.out_utf867
-rw-r--r--regress/char/unicode/invalid.in17
-rw-r--r--regress/char/unicode/invalid.out_ascii16
-rw-r--r--regress/char/unicode/invalid.out_html8
-rw-r--r--regress/char/unicode/invalid.out_lint9
-rw-r--r--regress/char/unicode/invalid.out_utf816
-rw-r--r--regress/char/unicode/latin1.in92
-rw-r--r--regress/char/unicode/latin1.out_ascii98
-rw-r--r--regress/char/unicode/latin1.out_html86
-rw-r--r--regress/char/unicode/latin1.out_utf898
-rw-r--r--regress/char/unicode/latin1diff.in19
-rw-r--r--regress/char/unicode/latin1diff.out_ascii25
-rw-r--r--regress/char/unicode/latin1diff.out_html13
-rw-r--r--regress/char/unicode/latin1diff.out_utf825
-rw-r--r--regress/char/unicode/man.in12
-rw-r--r--regress/char/unicode/man.out_utf819
-rw-r--r--regress/char/unicode/mdoc.in15
-rw-r--r--regress/char/unicode/mdoc.out_utf815
-rw-r--r--regress/char/unicode/named.in155
-rw-r--r--regress/char/unicode/named.out_ascii161
-rw-r--r--regress/char/unicode/named.out_html149
-rw-r--r--regress/char/unicode/named.out_utf8161
-rw-r--r--regress/char/unicode/namediff.in43
-rw-r--r--regress/char/unicode/namediff.out_ascii49
-rw-r--r--regress/char/unicode/namediff.out_html37
-rw-r--r--regress/char/unicode/namediff.out_utf849
-rw-r--r--regress/char/unicode/nogroff.in43
-rw-r--r--regress/char/unicode/nogroff.out_ascii49
-rw-r--r--regress/char/unicode/nogroff.out_html37
-rw-r--r--regress/char/unicode/nogroff.out_utf849
95 files changed, 3249 insertions, 0 deletions
diff --git a/regress/char/Makefile b/regress/char/Makefile
new file mode 100644
index 00000000..dbd922e0
--- /dev/null
+++ b/regress/char/Makefile
@@ -0,0 +1,6 @@
+# $OpenBSD: Makefile,v 1.9 2014/06/20 18:27:51 schwarze Exp $
+
+SUBDIR = accent bar hyphen space unicode N
+
+.include "../Makefile.sub"
+.include <bsd.subdir.mk>
diff --git a/regress/char/Makefile.inc b/regress/char/Makefile.inc
new file mode 100644
index 00000000..6b294ca9
--- /dev/null
+++ b/regress/char/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/char/N/Makefile b/regress/char/N/Makefile
new file mode 100644
index 00000000..3630b154
--- /dev/null
+++ b/regress/char/N/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.2 2011/11/17 16:28:45 schwarze Exp $
+
+REGRESS_TARGETS=basic
+
+.include <bsd.regress.mk>
diff --git a/regress/char/N/basic.in b/regress/char/N/basic.in
new file mode 100644
index 00000000..f915c8b7
--- /dev/null
+++ b/regress/char/N/basic.in
@@ -0,0 +1,26 @@
+.TH N-BASIC 1 "January 29, 2011" OpenBSD
+.SH NAME
+N-basic \- basic handling of character number escapes
+.SH DESCRIPTION
+basic usage: x\N'65'x
+.br
+too large: x\N'259'x
+.br
+much too large: x\N'2259'x
+.br
+.\" XXX mandoc ignores non-printable characters, while groff does not
+.\" too small: x\N'1'x
+.\" .br
+.\" null: x\N'0'x
+.\" .br
+non-numerical content: x\N'XX'x
+.br
+mixed content: x\N'65XX'x
+.br
+empty: x\N''x
+.br
+no quoting: x\N665x
+.br
+non-matching quoting characters: x\NX65Yx
+.br
+end of test document
diff --git a/regress/char/N/basic.out_ascii b/regress/char/N/basic.out_ascii
new file mode 100644
index 00000000..87c53449
--- /dev/null
+++ b/regress/char/N/basic.out_ascii
@@ -0,0 +1,21 @@
+N-BASIC(1) General Commands Manual N-BASIC(1)
+
+
+
+NNAAMMEE
+ N-basic - basic handling of character number escapes
+
+DDEESSCCRRIIPPTTIIOONN
+ basic usage: xAx
+ too large: xx
+ much too large: xx
+ non-numerical content: xX'x
+ mixed content: xAX'x
+ empty: xx
+ no quoting: x65x
+ non-matching quoting characters: xAx
+ end of test document
+
+
+
+OpenBSD January 29, 2011 N-BASIC(1)
diff --git a/regress/char/accent/Makefile b/regress/char/accent/Makefile
new file mode 100644
index 00000000..4bc149a7
--- /dev/null
+++ b/regress/char/accent/Makefile
@@ -0,0 +1,7 @@
+# $OpenBSD: Makefile,v 1.1 2014/03/08 18:00:59 schwarze Exp $
+
+REGRESS_TARGETS = nocombine utf8only combine
+SKIP_ASCII = utf8only combine
+UTF8_TARGETS = nocombine utf8only combine
+
+.include <bsd.regress.mk>
diff --git a/regress/char/accent/combine.in b/regress/char/accent/combine.in
new file mode 100644
index 00000000..124d82d5
--- /dev/null
+++ b/regress/char/accent/combine.in
@@ -0,0 +1,23 @@
+.TH CHAR-ACCENT-COMBINE 1 "February 28, 2014" OpenBSD
+.SH NAME
+\fBchar-accent-combine\fR - combining accents
+.SH DESCRIPTION
+char + combine char U: e\U'0301'
+.br
+char + combine char C: e\C'u0301'
+.br
+char + combine char named: e\[u0301]
+.\" XXX not implemented in mandoc
+.\" .br
+.\" combined chars named numeric: \[u0065_0301]
+.\" .br
+.\" combined chars named: \[e aa]
+.br
+combined char pre N: \['e]
+.br
+combined char pre 2: \('e
+.\" XXX Plan 9 roff only
+.\" .br
+.\" combined char post N: \[e']
+.\" .br
+.\" combined char post 2: \(e'
diff --git a/regress/char/accent/combine.out_utf8 b/regress/char/accent/combine.out_utf8
new file mode 100644
index 00000000..f5c0c2e7
--- /dev/null
+++ b/regress/char/accent/combine.out_utf8
@@ -0,0 +1,17 @@
+CHAR-ACCENT-COMBINE(1) General Commands Manual CHAR-ACCENT-COMBINE(1)
+
+
+
+NNAAMMEE
+ cchhaarr--aacccceenntt--ccoommbbiinnee - combining accents
+
+DDEESSCCRRIIPPTTIIOONN
+ char + combine char U: eU'0301'
+ char + combine char C: é
+ char + combine char named: é
+ combined char pre N: é
+ combined char pre 2: é
+
+
+
+OpenBSD February 28, 2014 CHAR-ACCENT-COMBINE(1)
diff --git a/regress/char/accent/nocombine.in b/regress/char/accent/nocombine.in
new file mode 100644
index 00000000..39428f76
--- /dev/null
+++ b/regress/char/accent/nocombine.in
@@ -0,0 +1,45 @@
+.TH CHAR-ACCENT-NOCOMBINE 1 "March 8, 2014" OpenBSD
+.SH NAME
+\fBchar-accent-nocombine\fR - non-combining accents
+.SH DESCRIPTION
+bare acute accent: e'e
+.br
+escaped acute accent: e\'e
+.br
+acute accent sequence: e\(aae
+.br
+bare grave accent: e`e
+.br
+escaped grave accent: e\`e
+.br
+acute grave sequence: e\(gae
+.br
+hungarian umlaut: e\(a"e
+.br
+.\" XXX This is ridiculous.
+.\" XXX groff prints the macron as an underscore in the previous line.
+.\" macron: e\(a-e
+.br
+.\" XXX groff doesn't have a dot in ASCII mode, only in UTF-8 mode.
+.\" dotted: e\(a.e
+.br
+circumflex: e\(a^e
+.br
+.\" XXX groff uses a backspace for this one in ASCII mode.
+.\" breve: e\(abe
+.br
+cedilla: e\(ace
+.br
+dieresis: e\(ade
+.br
+caron: e\(ahe
+.br
+ring: e\(aoe
+.br
+tilde: e\(a~e
+.br
+ogonek: e\(hoe
+.br
+text hat: e\(hae
+.br
+text tilde: e\(tie
diff --git a/regress/char/accent/nocombine.out_ascii b/regress/char/accent/nocombine.out_ascii
new file mode 100644
index 00000000..bc1cce15
--- /dev/null
+++ b/regress/char/accent/nocombine.out_ascii
@@ -0,0 +1,28 @@
+CHAR-ACCENT-NOCOMBINE(1) General Commands Manual CHAR-ACCENT-NOCOMBINE(1)
+
+
+
+NNAAMMEE
+ cchhaarr--aacccceenntt--nnooccoommbbiinnee - non-combining accents
+
+DDEESSCCRRIIPPTTIIOONN
+ bare acute accent: e'e
+ escaped acute accent: e'e
+ acute accent sequence: e'e
+ bare grave accent: e`e
+ escaped grave accent: e`e
+ acute grave sequence: e`e
+ hungarian umlaut: e"e
+ circumflex: e^e
+ cedilla: e,e
+ dieresis: e"e
+ caron: eve
+ ring: eoe
+ tilde: e~e
+ ogonek: e,e
+ text hat: e^e
+ text tilde: e~e
+
+
+
+OpenBSD March 8, 2014 CHAR-ACCENT-NOCOMBINE(1)
diff --git a/regress/char/accent/nocombine.out_utf8 b/regress/char/accent/nocombine.out_utf8
new file mode 100644
index 00000000..3aa441a2
--- /dev/null
+++ b/regress/char/accent/nocombine.out_utf8
@@ -0,0 +1,28 @@
+CHAR-ACCENT-NOCOMBINE(1) General Commands Manual CHAR-ACCENT-NOCOMBINE(1)
+
+
+
+NNAAMMEE
+ cchhaarr--aacccceenntt--nnooccoommbbiinnee - non-combining accents
+
+DDEESSCCRRIIPPTTIIOONN
+ bare acute accent: e'e
+ escaped acute accent: e´e
+ acute accent sequence: e´e
+ bare grave accent: e`e
+ escaped grave accent: e`e
+ acute grave sequence: e`e
+ hungarian umlaut: e˝e
+ circumflex: e^e
+ cedilla: e¸e
+ dieresis: e¨e
+ caron: eˇe
+ ring: e˚e
+ tilde: e~e
+ ogonek: e˛e
+ text hat: e^e
+ text tilde: e~e
+
+
+
+OpenBSD March 8, 2014 CHAR-ACCENT-NOCOMBINE(1)
diff --git a/regress/char/accent/utf8only.in b/regress/char/accent/utf8only.in
new file mode 100644
index 00000000..8c7d2ca0
--- /dev/null
+++ b/regress/char/accent/utf8only.in
@@ -0,0 +1,9 @@
+.TH CHAR-ACCENT-UTF8ONLY 1 "March 8, 2014" OpenBSD
+.SH NAME
+\fBchar-accent-utf8only\fR - accents available in UTF-8 only
+.SH DESCRIPTION
+macron: e\(a-e
+.br
+dotted: e\(a.e
+.br
+breve: e\(abe
diff --git a/regress/char/accent/utf8only.out_utf8 b/regress/char/accent/utf8only.out_utf8
new file mode 100644
index 00000000..7488f7e1
--- /dev/null
+++ b/regress/char/accent/utf8only.out_utf8
@@ -0,0 +1,15 @@
+CHAR-ACCENT-UTF8ONLY(1) General Commands Manual CHAR-ACCENT-UTF8ONLY(1)
+
+
+
+NNAAMMEE
+ cchhaarr--aacccceenntt--uuttff88oonnllyy - accents available in UTF-8 only
+
+DDEESSCCRRIIPPTTIIOONN
+ macron: e¯e
+ dotted: e˙e
+ breve: e˘e
+
+
+
+OpenBSD March 8, 2014 CHAR-ACCENT-UTF8ONLY(1)
diff --git a/regress/char/bar/Makefile b/regress/char/bar/Makefile
new file mode 100644
index 00000000..0245631c
--- /dev/null
+++ b/regress/char/bar/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.1 2012/07/18 10:36:20 schwarze Exp $
+
+REGRESS_TARGETS = man mdoc
+
+.include <bsd.regress.mk>
diff --git a/regress/char/bar/man.in b/regress/char/bar/man.in
new file mode 100644
index 00000000..acabf501
--- /dev/null
+++ b/regress/char/bar/man.in
@@ -0,0 +1,12 @@
+.TH bar-man 1 "July 17, 2012" OpenBSD
+.SH NAME
+\fBbar-man\fR - formatting the vertical bar symbol
+.SH DESCRIPTION
+.SS normal bar
+Manually switching fonts: \fIitalic\fRroman|roman\fPitalic
+.PP
+.B prefix | suffix
+.SS special character
+Manually switching fonts: \fIitalic\fRroman\(baroman\fPitalic
+.PP
+.B prefix \(ba suffix
diff --git a/regress/char/bar/man.out_ascii b/regress/char/bar/man.out_ascii
new file mode 100644
index 00000000..b18c089e
--- /dev/null
+++ b/regress/char/bar/man.out_ascii
@@ -0,0 +1,21 @@
+bar-man(1) General Commands Manual bar-man(1)
+
+
+
+NNAAMMEE
+ bbaarr--mmaann - formatting the vertical bar symbol
+
+DDEESSCCRRIIPPTTIIOONN
+ nnoorrmmaall bbaarr
+ Manually switching fonts: _i_t_a_l_i_croman|roman_i_t_a_l_i_c
+
+ pprreeffiixx || ssuuffffiixx
+
+ ssppeecciiaall cchhaarraacctteerr
+ Manually switching fonts: _i_t_a_l_i_croman|roman_i_t_a_l_i_c
+
+ pprreeffiixx || ssuuffffiixx
+
+
+
+OpenBSD July 17, 2012 bar-man(1)
diff --git a/regress/char/bar/mdoc.in b/regress/char/bar/mdoc.in
new file mode 100644
index 00000000..5e9afa0a
--- /dev/null
+++ b/regress/char/bar/mdoc.in
@@ -0,0 +1,37 @@
+.Dd July 17, 2012
+.Dt BAR-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm bar-mdoc
+.Nd formatting the vertical bar symbol
+.Sh DESCRIPTION
+.Ss normal bar
+Manually switching fonts: \fIitalic\fRroman|roman\fPitalic\fR
+.Pp
+.Fl isolated | em|bedded \fR|\fP formatted
+.br
+.Sy isolated | em|bedded \fR|\fP formatted
+.br
+.Ar isolated | em|bedded \fR|\fP formatted
+.br
+.Em isolated | em|bedded \fR|\fP formatted
+.Ss special character
+Manually switching fonts: \fIitalic\fRroman\(baroman\fPitalic\fR
+.Pp
+.Fl isolated \(ba em\(babedded \fR\(ba\fP formatted \fB\(ba\fP bold
+.br
+.Sy isolated \(ba em\(babedded \fR\(ba\fP formatted \fB\(ba\fP bold
+.br
+.Ar isolated \(ba em\(babedded \fR\(ba\fP formatted \fB\(ba\fP bold
+.br
+.Em isolated \(ba em\(babedded \fR\(ba\fP formatted \fB\(ba\fP bold
+.Ss predefined string
+Manually switching fonts: \fIitalic\fRroman\*(Baroman\fPbroken\fR
+.Pp
+.Fl isolated \*(Ba em\*(Babedded
+.br
+.Sy isolated \*(Ba em\*(Babedded
+.br
+.Ar isolated \*(Ba em\*(Babedded
+.br
+.Em isolated \*(Ba em\*(Babedded
diff --git a/regress/char/bar/mdoc.out_ascii b/regress/char/bar/mdoc.out_ascii
new file mode 100644
index 00000000..8d98160a
--- /dev/null
+++ b/regress/char/bar/mdoc.out_ascii
@@ -0,0 +1,31 @@
+BAR-MDOC(1) General Commands Manual BAR-MDOC(1)
+
+NNAAMMEE
+ bbaarr--mmddoocc - formatting the vertical bar symbol
+
+DDEESSCCRRIIPPTTIIOONN
+ nnoorrmmaall bbaarr
+ Manually switching fonts: _i_t_a_l_i_croman|roman_i_t_a_l_i_c
+
+ --iissoollaatteedd | --eemm||bbeeddddeedd | --ffoorrmmaatttteedd
+ iissoollaatteedd | eemm||bbeeddddeedd | ffoorrmmaatttteedd
+ _i_s_o_l_a_t_e_d | _e_m_|_b_e_d_d_e_d | _f_o_r_m_a_t_t_e_d
+ _i_s_o_l_a_t_e_d | _e_m_|_b_e_d_d_e_d | _f_o_r_m_a_t_t_e_d
+
+ ssppeecciiaall cchhaarraacctteerr
+ Manually switching fonts: _i_t_a_l_i_croman|roman_i_t_a_l_i_c
+
+ --iissoollaatteedd --|| --eemm||bbeeddddeedd --| --ffoorrmmaatttteedd --|| --bboolldd
+ iissoollaatteedd || eemm||bbeeddddeedd | ffoorrmmaatttteedd || bboolldd
+ _i_s_o_l_a_t_e_d _| _e_m_|_b_e_d_d_e_d | _f_o_r_m_a_t_t_e_d || _b_o_l_d
+ _i_s_o_l_a_t_e_d _| _e_m_|_b_e_d_d_e_d | _f_o_r_m_a_t_t_e_d || _b_o_l_d
+
+ pprreeddeeffiinneedd ssttrriinngg
+ Manually switching fonts: _i_t_a_l_i_croman|romanbroken
+
+ --iissoollaatteedd | --eemm|bbeeddddeedd
+ iissoollaatteedd | eemm|bbeeddddeedd
+ _i_s_o_l_a_t_e_d | _e_m|_b_e_d_d_e_d
+ _i_s_o_l_a_t_e_d | _e_m|_b_e_d_d_e_d
+
+OpenBSD July 17, 2012 OpenBSD
diff --git a/regress/char/hyphen/Makefile b/regress/char/hyphen/Makefile
new file mode 100644
index 00000000..6f9638a3
--- /dev/null
+++ b/regress/char/hyphen/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.2 2011/11/17 16:28:45 schwarze Exp $
+
+REGRESS_TARGETS=man mdoc
+
+.include <bsd.regress.mk>
diff --git a/regress/char/hyphen/man.in b/regress/char/hyphen/man.in
new file mode 100644
index 00000000..546c7c56
--- /dev/null
+++ b/regress/char/hyphen/man.in
@@ -0,0 +1,11 @@
+.TH hyphen-man 1 "September 18, 2011" OpenBSD
+.SH NAME
+\fBhyphen-man\fR - formatting hyphens and breaking lines
+.SH DESCRIPTION
+This is a long line of text, such that the last word won't fit: break-here
+.PP
+Try the same thing once same again, but now in italic font mode:
+\fIbreak-here\fP
+.PP
+Finally, try it a third time, but this time in bold font mode:
+\fBbreak-here\fP
diff --git a/regress/char/hyphen/man.out_ascii b/regress/char/hyphen/man.out_ascii
new file mode 100644
index 00000000..368edbb5
--- /dev/null
+++ b/regress/char/hyphen/man.out_ascii
@@ -0,0 +1,20 @@
+hyphen-man(1) General Commands Manual hyphen-man(1)
+
+
+
+NNAAMMEE
+ hhyypphheenn--mmaann - formatting hyphens and breaking lines
+
+DDEESSCCRRIIPPTTIIOONN
+ This is a long line of text, such that the last word won't fit: break-
+ here
+
+ Try the same thing once same again, but now in italic font mode: _b_r_e_a_k_-
+ _h_e_r_e
+
+ Finally, try it a third time, but this time in bold font mode: bbrreeaakk--
+ hheerree
+
+
+
+OpenBSD September 18, 2011 hyphen-man(1)
diff --git a/regress/char/hyphen/mdoc.in b/regress/char/hyphen/mdoc.in
new file mode 100644
index 00000000..76cfd0d3
--- /dev/null
+++ b/regress/char/hyphen/mdoc.in
@@ -0,0 +1,17 @@
+.Dd February 22, 2014
+.Dt HYPHEN-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm hyphen-mdoc
+.Nd formatting hyphens and breaking lines
+.Sh DESCRIPTION
+This is a long line of text, such that the last word won't fit: break-here
+.Pp
+But do not break the line at hyphens inside macro arguments: no
+.No break-here
+.Pp
+Try the same thing once same again, but now in italic font mode:
+\fIbreak-here\fP
+.Pp
+And finally, try it a third time, but this time in bold font mode:
+\fBbreak-here\fP
diff --git a/regress/char/hyphen/mdoc.out_ascii b/regress/char/hyphen/mdoc.out_ascii
new file mode 100644
index 00000000..d1171156
--- /dev/null
+++ b/regress/char/hyphen/mdoc.out_ascii
@@ -0,0 +1,19 @@
+HYPHEN-MDOC(1) General Commands Manual HYPHEN-MDOC(1)
+
+NNAAMMEE
+ hhyypphheenn--mmddoocc - formatting hyphens and breaking lines
+
+DDEESSCCRRIIPPTTIIOONN
+ This is a long line of text, such that the last word won't fit: break-
+ here
+
+ But do not break the line at hyphens inside macro arguments: no
+ break-here
+
+ Try the same thing once same again, but now in italic font mode: _b_r_e_a_k_-
+ _h_e_r_e
+
+ And finally, try it a third time, but this time in bold font mode: bbrreeaakk--
+ hheerree
+
+OpenBSD February 22, 2014 OpenBSD
diff --git a/regress/char/space/Makefile b/regress/char/space/Makefile
new file mode 100644
index 00000000..b6095de3
--- /dev/null
+++ b/regress/char/space/Makefile
@@ -0,0 +1,13 @@
+# $OpenBSD: Makefile,v 1.12 2016/12/07 23:27:42 schwarze Exp $
+
+REGRESS_TARGETS = leading-mdoc leading-man multiple trailing-mdoc zerowidth
+REGRESS_TARGETS += eos eos-man break nobreak
+REGRESS_TARGETS += tab tab-man esct-mdoc esct-man
+
+UTF8_TARGETS = zerowidth
+
+HTML_TARGETS = zerowidth
+
+LINT_TARGETS = trailing-mdoc tab tab-man esct-mdoc esct-man
+
+.include <bsd.regress.mk>
diff --git a/regress/char/space/break.in b/regress/char/space/break.in
new file mode 100644
index 00000000..f82fd01b
--- /dev/null
+++ b/regress/char/space/break.in
@@ -0,0 +1,11 @@
+.Dd January 8, 2014
+.Dt CHAR-BREAK 1
+.Os OpenBSD
+.Sh NAME
+.Nm char-break
+.Nd optional line-break
+.Sh DESCRIPTION
+.Dl cons25,linux,rxvt,rxvt-unicode,\:sun,\:vt100,\:vt220,\:\
+wsvt25,\:xterm,\:xterm-color
+.Pp
+end of text
diff --git a/regress/char/space/break.out_ascii b/regress/char/space/break.out_ascii
new file mode 100644
index 00000000..f03c7eec
--- /dev/null
+++ b/regress/char/space/break.out_ascii
@@ -0,0 +1,12 @@
+CHAR-BREAK(1) General Commands Manual CHAR-BREAK(1)
+
+NNAAMMEE
+ cchhaarr--bbrreeaakk - optional line-break
+
+DDEESSCCRRIIPPTTIIOONN
+ cons25,linux,rxvt,rxvt-unicode,sun,vt100,vt220,wsvt25,xterm,
+ xterm-color
+
+ end of text
+
+OpenBSD January 8, 2014 OpenBSD
diff --git a/regress/char/space/eos-man.in b/regress/char/space/eos-man.in
new file mode 100644
index 00000000..48f8a984
--- /dev/null
+++ b/regress/char/space/eos-man.in
@@ -0,0 +1,22 @@
+.TH SPACE-EOS-MAN 1 "December 22, 2013" OpenBSD
+.SH NAME
+SPACE-EOS-MAN \- end-of-sentence spacing in man(7) documents
+.SH DESCRIPTION
+This is a sentence.
+There is a double space before the next one.
+.PP
+Here is a full stop
+.B at the end of a macro.
+It causes a double space, too.
+.PP
+She said: "Here is another sentence."
+And it was detected even with quotation marks.
+(Really.)
+And within parantheses.
+.PP
+A dot in parantheses (.) is not a full stop.
+.PP
+A dot in the middle of an input line . is not a full stop.
+.PP
+At the end of an input line, even an escaped dot \&.
+is regarded as a full stop.
diff --git a/regress/char/space/eos-man.out_ascii b/regress/char/space/eos-man.out_ascii
new file mode 100644
index 00000000..3f4a652c
--- /dev/null
+++ b/regress/char/space/eos-man.out_ascii
@@ -0,0 +1,26 @@
+SPACE-EOS-MAN(1) General Commands Manual SPACE-EOS-MAN(1)
+
+
+
+NNAAMMEE
+ SPACE-EOS-MAN - end-of-sentence spacing in man(7) documents
+
+DDEESSCCRRIIPPTTIIOONN
+ This is a sentence. There is a double space before the next one.
+
+ Here is a full stop aatt tthhee eenndd ooff aa mmaaccrroo.. It causes a double space,
+ too.
+
+ She said: "Here is another sentence." And it was detected even with
+ quotation marks. (Really.) And within parantheses.
+
+ A dot in parantheses (.) is not a full stop.
+
+ A dot in the middle of an input line . is not a full stop.
+
+ At the end of an input line, even an escaped dot . is regarded as a
+ full stop.
+
+
+
+OpenBSD December 22, 2013 SPACE-EOS-MAN(1)
diff --git a/regress/char/space/eos.in b/regress/char/space/eos.in
new file mode 100644
index 00000000..2b5ae698
--- /dev/null
+++ b/regress/char/space/eos.in
@@ -0,0 +1,27 @@
+.Dd December 30, 2013
+.Dt SPACE-EOS 1
+.Os OpenBSD
+.Sh NAME
+.Nm space-eos
+.Nd end-of-sentence spacing
+.Sh DESCRIPTION
+This is a sentence.
+There is a double space before the next one.
+.Pp
+Here is a full stop
+.Pq quite lonely .
+It causes a double space, too.
+.Pp
+A dot in parantheses (.) is not a full stop.
+Not even
+.Pq Like in this case.
+when preceded by a letter.
+.Pp
+A lonely dot in an enclosure
+.Pq \&.
+is not a full stop.
+.Pp
+A dot in the middle of an input line . is not a full stop.
+.Pp
+At the end of an input line, even an escaped dot \&.
+is regarded as a full stop.
diff --git a/regress/char/space/eos.out_ascii b/regress/char/space/eos.out_ascii
new file mode 100644
index 00000000..1a5bd493
--- /dev/null
+++ b/regress/char/space/eos.out_ascii
@@ -0,0 +1,21 @@
+SPACE-EOS(1) General Commands Manual SPACE-EOS(1)
+
+NNAAMMEE
+ ssppaaccee--eeooss - end-of-sentence spacing
+
+DDEESSCCRRIIPPTTIIOONN
+ This is a sentence. There is a double space before the next one.
+
+ Here is a full stop (quite lonely). It causes a double space, too.
+
+ A dot in parantheses (.) is not a full stop. Not even (Like in this
+ case.) when preceded by a letter.
+
+ A lonely dot in an enclosure (.) is not a full stop.
+
+ A dot in the middle of an input line . is not a full stop.
+
+ At the end of an input line, even an escaped dot . is regarded as a full
+ stop.
+
+OpenBSD December 30, 2013 OpenBSD
diff --git a/regress/char/space/esct-man.in b/regress/char/space/esct-man.in
new file mode 100644
index 00000000..90aed2c7
--- /dev/null
+++ b/regress/char/space/esct-man.in
@@ -0,0 +1,34 @@
+.TH SPACE-ESCT-MAN 1 2013-06-20 OpenBSD
+.SH NAME
+SPACE-T-MAN \- the t escape sequence in pages with man macros
+.SH DESCRIPTION
+In plain text:
+.br
+single tab
+.br
+single\tescape-t
+.br
+double tab
+.br
+double\t\tescape-t
+.br
+\tThis line starts with escape-t and comes close to the right margin.
+\tThe next line starts with escape-t as well.
+.sp
+In a literal display:
+.nf
+single tab
+single\tescape-t
+double tab
+double\t\tescape-t
+.fi
+.sp
+After the IP macro:
+.IP single tab 3n
+text
+.IP single\tescape-t 3n
+text
+.PP
+After font macros:
+.br
+.B single\ttab
diff --git a/regress/char/space/esct-man.out_ascii b/regress/char/space/esct-man.out_ascii
new file mode 100644
index 00000000..29fbabea
--- /dev/null
+++ b/regress/char/space/esct-man.out_ascii
@@ -0,0 +1,36 @@
+SPACE-ESCT-MAN(1) General Commands Manual SPACE-ESCT-MAN(1)
+
+
+
+NNAAMMEE
+ SPACE-T-MAN - the t escape sequence in pages with man macros
+
+DDEESSCCRRIIPPTTIIOONN
+ In plain text:
+ single tab
+ singleescape-t
+ double tab
+ doubleescape-t
+ This line starts with escape-t and comes close to the right margin.
+ The next line starts with escape-t as well.
+
+ In a literal display:
+ single tab
+ singleescape-t
+ double tab
+ doubleescape-t
+
+ After the IP macro:
+
+ single tab
+ text
+
+ single escape-t
+ text
+
+ After font macros:
+ ssiinnggllee ttaabb
+
+
+
+OpenBSD 2013-06-20 SPACE-ESCT-MAN(1)
diff --git a/regress/char/space/esct-man.out_lint b/regress/char/space/esct-man.out_lint
new file mode 100644
index 00000000..815b68fb
--- /dev/null
+++ b/regress/char/space/esct-man.out_lint
@@ -0,0 +1,6 @@
+mandoc: esct-man.in:7:7: WARNING: tab in filled text
+mandoc: esct-man.in:11:7: WARNING: tab in filled text
+mandoc: esct-man.in:11:8: WARNING: tab in filled text
+mandoc: esct-man.in:27:11: WARNING: tab in filled text
+mandoc: esct-man.in:29:11: WARNING: tab in filled text
+mandoc: esct-man.in:34:10: WARNING: tab in filled text
diff --git a/regress/char/space/esct-mdoc.in b/regress/char/space/esct-mdoc.in
new file mode 100644
index 00000000..9d6b385d
--- /dev/null
+++ b/regress/char/space/esct-mdoc.in
@@ -0,0 +1,35 @@
+.Dd $Mdocdate: February 8 2017 $
+.Dt SPACE-ESCT-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm space-esct-mdoc
+.Nd the t escape sequence in pages with mdoc macros
+.Sh DESCRIPTION
+In plain text:
+.Pp
+single tab
+.Pp
+single\tescape-t
+.Pp
+double tab
+.Pp
+double\t\tescape-t
+.Pp
+\tThis line starts with escape-t and comes close to the right margin.
+\tThe next line starts with escape-t as well.
+.Pp
+In an unfilled display:
+.Bd -unfilled -offset 3n
+single tab
+single\tescape-t
+double tab
+double\t\tescape-t
+.Ed
+.Pp
+In a literal display:
+.Bd -literal -offset 3n
+single tab
+single\tescape-t
+double tab
+double\t\tescape-t
+.Ed
diff --git a/regress/char/space/esct-mdoc.out_ascii b/regress/char/space/esct-mdoc.out_ascii
new file mode 100644
index 00000000..9b09325e
--- /dev/null
+++ b/regress/char/space/esct-mdoc.out_ascii
@@ -0,0 +1,34 @@
+SPACE-ESCT-MDOC(1) General Commands Manual SPACE-ESCT-MDOC(1)
+
+NNAAMMEE
+ ssppaaccee--eesscctt--mmddoocc - the t escape sequence in pages with mdoc macros
+
+DDEESSCCRRIIPPTTIIOONN
+ In plain text:
+
+ single tab
+
+ singleescape-t
+
+ double tab
+
+ doubleescape-t
+
+ This line starts with escape-t and comes close to the right margin. The
+ next line starts with escape-t as well.
+
+ In an unfilled display:
+
+ single tab
+ singleescape-t
+ double tab
+ doubleescape-t
+
+ In a literal display:
+
+ single tab
+ singleescape-t
+ double tab
+ doubleescape-t
+
+OpenBSD June 20, 2013 OpenBSD
diff --git a/regress/char/space/esct-mdoc.out_lint b/regress/char/space/esct-mdoc.out_lint
new file mode 100644
index 00000000..85b9799f
--- /dev/null
+++ b/regress/char/space/esct-mdoc.out_lint
@@ -0,0 +1,3 @@
+mandoc: esct-mdoc.in:10:7: WARNING: tab in filled text
+mandoc: esct-mdoc.in:14:7: WARNING: tab in filled text
+mandoc: esct-mdoc.in:14:8: WARNING: tab in filled text
diff --git a/regress/char/space/leading-man.in b/regress/char/space/leading-man.in
new file mode 100644
index 00000000..6d48f3be
--- /dev/null
+++ b/regress/char/space/leading-man.in
@@ -0,0 +1,11 @@
+.TH SPACE-LEADING-MAN 1 "January 15, 2011" OpenBSD
+.SH NAME
+space-leading-man \- leading spaces on text lines in man documents
+.SH DESCRIPTION
+normal line of text
+second normal line
+ leading space
+.BI bold italic
+normal after macro
+.BI bold italic
+ leading space after a macro line
diff --git a/regress/char/space/leading-man.out_ascii b/regress/char/space/leading-man.out_ascii
new file mode 100644
index 00000000..fa75ea2f
--- /dev/null
+++ b/regress/char/space/leading-man.out_ascii
@@ -0,0 +1,15 @@
+SPACE-LEADING-MAN(1) General Commands Manual SPACE-LEADING-MAN(1)
+
+
+
+NNAAMMEE
+ space-leading-man - leading spaces on text lines in man documents
+
+DDEESSCCRRIIPPTTIIOONN
+ normal line of text second normal line
+ leading space bboolldd_i_t_a_l_i_c normal after macro bboolldd_i_t_a_l_i_c
+ leading space after a macro line
+
+
+
+OpenBSD January 15, 2011 SPACE-LEADING-MAN(1)
diff --git a/regress/char/space/leading-mdoc.in b/regress/char/space/leading-mdoc.in
new file mode 100644
index 00000000..912b9000
--- /dev/null
+++ b/regress/char/space/leading-mdoc.in
@@ -0,0 +1,24 @@
+.Dd January 15, 2011
+.Dt SPACE-LEADING_MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm space-leading-mdoc
+.Nd leading spaces on text lines in mdoc documents
+.Sh DESCRIPTION
+normal line of text
+second normal line
+ line with a leading space
+.Ux
+normal line after a macro line
+.Ux
+ leading space after a macro line
+.Bd -literal
+normal line in a literal display
+ leading space in a literal display
+another normal line
+.Ed
+.Bd -filled
+normal line in a filled display
+ leading space in a filled display
+another normal line
+.Ed
diff --git a/regress/char/space/leading-mdoc.out_ascii b/regress/char/space/leading-mdoc.out_ascii
new file mode 100644
index 00000000..91ef3f36
--- /dev/null
+++ b/regress/char/space/leading-mdoc.out_ascii
@@ -0,0 +1,18 @@
+SPACE-LEADING_MDOC(1) General Commands Manual SPACE-LEADING_MDOC(1)
+
+NNAAMMEE
+ ssppaaccee--lleeaaddiinngg--mmddoocc - leading spaces on text lines in mdoc documents
+
+DDEESSCCRRIIPPTTIIOONN
+ normal line of text second normal line
+ line with a leading space UNIX normal line after a macro line UNIX
+ leading space after a macro line
+
+ normal line in a literal display
+ leading space in a literal display
+ another normal line
+
+ normal line in a filled display
+ leading space in a filled display another normal line
+
+OpenBSD January 15, 2011 OpenBSD
diff --git a/regress/char/space/multiple.in b/regress/char/space/multiple.in
new file mode 100644
index 00000000..47037269
--- /dev/null
+++ b/regress/char/space/multiple.in
@@ -0,0 +1,18 @@
+.Dd April 23, 2010
+.Dt SPACE-MULTIPLE 1
+.Os OpenBSD
+.Sh NAME
+.Nm space-multiple
+.Nd handling of multiple adjacent space characters
+.Sh DESCRIPTION
+one space here
+.Pp
+two spaces here
+.Pp
+three spaces here
+.Pp
+one non-collapsing space here
+.Pp
+two non-collapsing spaces\ \ here
+.Pp
+three non-collapsing spaces\ \ \ here
diff --git a/regress/char/space/multiple.out_ascii b/regress/char/space/multiple.out_ascii
new file mode 100644
index 00000000..945cd260
--- /dev/null
+++ b/regress/char/space/multiple.out_ascii
@@ -0,0 +1,19 @@
+SPACE-MULTIPLE(1) General Commands Manual SPACE-MULTIPLE(1)
+
+NNAAMMEE
+ ssppaaccee--mmuullttiippllee - handling of multiple adjacent space characters
+
+DDEESSCCRRIIPPTTIIOONN
+ one space here
+
+ two spaces here
+
+ three spaces here
+
+ one non-collapsing space here
+
+ two non-collapsing spaces here
+
+ three non-collapsing spaces here
+
+OpenBSD April 23, 2010 OpenBSD
diff --git a/regress/char/space/nobreak.in b/regress/char/space/nobreak.in
new file mode 100644
index 00000000..20bd19bd
--- /dev/null
+++ b/regress/char/space/nobreak.in
@@ -0,0 +1,30 @@
+.Dd July 29, 2012
+.Dt SPACE-NOBREAK 1
+.Os OpenBSD
+.Sh NAME
+.Nm space-nobreak
+.Nd non-breaking, non-collapsing space
+.Sh DESCRIPTION
+The following line has 78 characters and fits:
+.Pp
+78 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x x
+.Pp
+The following line has 79 characters and breaks:
+.Pp
+79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x x
+.Pp
+With a non-breaking space, it breaks earlier:
+.Pp
+79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x\~x
+.Pp
+The same with backslash-space:
+.Pp
+79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x\ x
+.Pp
+Only non-breaking spaces:
+.Pp
+79\~xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\~x\~x
+.Pp
+The same with backslash-space:
+.Pp
+79\ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\ x\ x
diff --git a/regress/char/space/nobreak.out_ascii b/regress/char/space/nobreak.out_ascii
new file mode 100644
index 00000000..5544c77e
--- /dev/null
+++ b/regress/char/space/nobreak.out_ascii
@@ -0,0 +1,34 @@
+SPACE-NOBREAK(1) General Commands Manual SPACE-NOBREAK(1)
+
+NNAAMMEE
+ ssppaaccee--nnoobbrreeaakk - non-breaking, non-collapsing space
+
+DDEESSCCRRIIPPTTIIOONN
+ The following line has 78 characters and fits:
+
+ 78 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x x
+
+ The following line has 79 characters and breaks:
+
+ 79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x
+ x
+
+ With a non-breaking space, it breaks earlier:
+
+ 79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ x x
+
+ The same with backslash-space:
+
+ 79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ x x
+
+ Only non-breaking spaces:
+
+ 79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x x
+
+ The same with backslash-space:
+
+ 79 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x x
+
+OpenBSD July 29, 2012 OpenBSD
diff --git a/regress/char/space/tab-man.in b/regress/char/space/tab-man.in
new file mode 100644
index 00000000..a3645fd2
--- /dev/null
+++ b/regress/char/space/tab-man.in
@@ -0,0 +1,66 @@
+.TH SPACE-TAB-MAN 1 "May 24, 2010" OpenBSD
+.SH NAME
+SPACE-TAB-MAN \- handling of literal tab characters
+.SH DESCRIPTION
+In plain text:
+.br
+1 x
+.br
+22 x
+.br
+333 x
+.br
+4444 x
+.br
+55555 x
+.br
+666666 x
+.br
+7777777 x
+.br
+88888888 x
+.br
+999999999 x
+.br
+aaaaaaaaaa x
+.br
+bbbbbbbbbbb x
+.br
+cccccccccccc x
+.br
+ddddddddddddd x
+.br
+tab space
+.br
+tab tab
+.br
+space tab
+.br
+ tab
+.br
+ tab
+.br
+ This line starts with a tab and comes close to the right margin.
+ The next line starts with a tab as well.
+.br
+In a literal display:
+.nf
+1 x
+22 x
+333 x
+4444 x
+55555 x
+666666 x
+7777777 x
+88888888 x
+999999999 x
+aaaaaaaaaa x
+bbbbbbbbbbb x
+cccccccccccc x
+ddddddddddddd x
+tab space
+tab tab
+space tab
+ tab
+ tab
+.fi
diff --git a/regress/char/space/tab-man.out_ascii b/regress/char/space/tab-man.out_ascii
new file mode 100644
index 00000000..9e5309af
--- /dev/null
+++ b/regress/char/space/tab-man.out_ascii
@@ -0,0 +1,52 @@
+SPACE-TAB-MAN(1) General Commands Manual SPACE-TAB-MAN(1)
+
+
+
+NNAAMMEE
+ SPACE-TAB-MAN - handling of literal tab characters
+
+DDEESSCCRRIIPPTTIIOONN
+ In plain text:
+ 1 x
+ 22 x
+ 333 x
+ 4444 x
+ 55555 x
+ 666666 x
+ 7777777 x
+ 88888888 x
+ 999999999 x
+ aaaaaaaaaa x
+ bbbbbbbbbbb x
+ cccccccccccc x
+ ddddddddddddd x
+ tab space
+ tab tab
+ space tab
+ tab
+ tab
+ This line starts with a tab and comes close to the right margin.
+ The next line starts with a tab as well.
+ In a literal display:
+ 1 x
+ 22 x
+ 333 x
+ 4444 x
+ 55555 x
+ 666666 x
+ 7777777 x
+ 88888888 x
+ 999999999 x
+ aaaaaaaaaa x
+ bbbbbbbbbbb x
+ cccccccccccc x
+ ddddddddddddd x
+ tab space
+ tab tab
+ space tab
+ tab
+ tab
+
+
+
+OpenBSD May 24, 2010 SPACE-TAB-MAN(1)
diff --git a/regress/char/space/tab-man.out_lint b/regress/char/space/tab-man.out_lint
new file mode 100644
index 00000000..a5796e1b
--- /dev/null
+++ b/regress/char/space/tab-man.out_lint
@@ -0,0 +1,22 @@
+mandoc: tab-man.in:7:2: WARNING: tab in filled text
+mandoc: tab-man.in:9:3: WARNING: tab in filled text
+mandoc: tab-man.in:11:4: WARNING: tab in filled text
+mandoc: tab-man.in:13:5: WARNING: tab in filled text
+mandoc: tab-man.in:15:6: WARNING: tab in filled text
+mandoc: tab-man.in:17:7: WARNING: tab in filled text
+mandoc: tab-man.in:19:8: WARNING: tab in filled text
+mandoc: tab-man.in:21:9: WARNING: tab in filled text
+mandoc: tab-man.in:23:10: WARNING: tab in filled text
+mandoc: tab-man.in:25:11: WARNING: tab in filled text
+mandoc: tab-man.in:27:12: WARNING: tab in filled text
+mandoc: tab-man.in:29:13: WARNING: tab in filled text
+mandoc: tab-man.in:31:14: WARNING: tab in filled text
+mandoc: tab-man.in:33:4: WARNING: tab in filled text
+mandoc: tab-man.in:35:4: WARNING: tab in filled text
+mandoc: tab-man.in:35:5: WARNING: tab in filled text
+mandoc: tab-man.in:37:7: WARNING: tab in filled text
+mandoc: tab-man.in:39:1: WARNING: tab in filled text
+mandoc: tab-man.in:41:1: WARNING: tab in filled text
+mandoc: tab-man.in:41:2: WARNING: tab in filled text
+mandoc: tab-man.in:43:1: WARNING: tab in filled text
+mandoc: tab-man.in:44:1: WARNING: tab in filled text
diff --git a/regress/char/space/tab.in b/regress/char/space/tab.in
new file mode 100644
index 00000000..e801cbd9
--- /dev/null
+++ b/regress/char/space/tab.in
@@ -0,0 +1,128 @@
+.Dd April 23, 2010
+.Dt SPACE-TAB 1
+.Os OpenBSD
+.Sh NAME
+.Nm space-tab
+.Nd handling of literal space characters
+.Sh DESCRIPTION
+plain text
+.br
+1 x
+.br
+22 x
+.br
+333 x
+.br
+4444 x
+.br
+55555 x
+.br
+666666 x
+.br
+7777777 x
+.br
+88888888 x
+.br
+999999999 x
+.br
+aaaaaaaaaa x
+.br
+bbbbbbbbbbb x
+.br
+cccccccccccc x
+.br
+ddddddddddddd x
+.br
+tab space
+.br
+tab tab
+.br
+space tab
+.br
+ tab
+.br
+ tab
+.br
+ This line starts with a tab and comes close to the right margin.
+ The next line starts with a tab as well.
+.br
+ragged display
+.Bd -ragged -offset 2n
+1 x
+.br
+22 x
+.br
+333 x
+.br
+4444 x
+.br
+55555 x
+.br
+666666 x
+.br
+7777777 x
+.br
+88888888 x
+.br
+999999999 x
+.br
+aaaaaaaaaa x
+.br
+bbbbbbbbbbb x
+.br
+cccccccccccc x
+.br
+ddddddddddddd x
+.br
+tab space
+.br
+tab tab
+.br
+space tab
+.br
+ tab
+.br
+ tab
+.Ed
+unfilled display
+.Bd -unfilled -offset 2n
+1 x
+22 x
+333 x
+4444 x
+55555 x
+666666 x
+7777777 x
+88888888 x
+999999999 x
+aaaaaaaaaa x
+bbbbbbbbbbb x
+cccccccccccc x
+ddddddddddddd x
+tab space
+tab tab
+space tab
+ tab
+ tab
+.Ed
+literal display
+.Bd -literal -offset 2n
+1 x
+22 x
+333 x
+4444 x
+55555 x
+666666 x
+7777777 x
+88888888 x
+999999999 x
+aaaaaaaaaa x
+bbbbbbbbbbb x
+cccccccccccc x
+ddddddddddddd x
+tab space
+tab tab
+space tab
+ tab
+ tab
+.Ed
diff --git a/regress/char/space/tab.out_ascii b/regress/char/space/tab.out_ascii
new file mode 100644
index 00000000..64d32af1
--- /dev/null
+++ b/regress/char/space/tab.out_ascii
@@ -0,0 +1,89 @@
+SPACE-TAB(1) General Commands Manual SPACE-TAB(1)
+
+NNAAMMEE
+ ssppaaccee--ttaabb - handling of literal space characters
+
+DDEESSCCRRIIPPTTIIOONN
+ plain text
+ 1 x
+ 22 x
+ 333 x
+ 4444 x
+ 55555 x
+ 666666 x
+ 7777777 x
+ 88888888 x
+ 999999999 x
+ aaaaaaaaaa x
+ bbbbbbbbbbb x
+ cccccccccccc x
+ ddddddddddddd x
+ tab space
+ tab tab
+ space tab
+ tab
+ tab
+ This line starts with a tab and comes close to the right margin.
+ The next line starts with a tab as well.
+ ragged display
+
+ 1 x
+ 22 x
+ 333 x
+ 4444 x
+ 55555 x
+ 666666 x
+ 7777777 x
+ 88888888 x
+ 999999999 x
+ aaaaaaaaaa x
+ bbbbbbbbbbb x
+ cccccccccccc x
+ ddddddddddddd x
+ tab space
+ tab tab
+ space tab
+ tab
+ tab
+ unfilled display
+
+ 1 x
+ 22 x
+ 333 x
+ 4444 x
+ 55555 x
+ 666666 x
+ 7777777 x
+ 88888888 x
+ 999999999 x
+ aaaaaaaaaa x
+ bbbbbbbbbbb x
+ cccccccccccc x
+ ddddddddddddd x
+ tab space
+ tab tab
+ space tab
+ tab
+ tab
+ literal display
+
+ 1 x
+ 22 x
+ 333 x
+ 4444 x
+ 55555 x
+ 666666 x
+ 7777777 x
+ 88888888 x
+ 999999999 x
+ aaaaaaaaaa x
+ bbbbbbbbbbb x
+ cccccccccccc x
+ ddddddddddddd x
+ tab space
+ tab tab
+ space tab
+ tab
+ tab
+
+OpenBSD April 23, 2010 OpenBSD
diff --git a/regress/char/space/tab.out_lint b/regress/char/space/tab.out_lint
new file mode 100644
index 00000000..6495de7f
--- /dev/null
+++ b/regress/char/space/tab.out_lint
@@ -0,0 +1,42 @@
+mandoc: tab.in:10:2: WARNING: tab in filled text
+mandoc: tab.in:12:3: WARNING: tab in filled text
+mandoc: tab.in:14:4: WARNING: tab in filled text
+mandoc: tab.in:16:5: WARNING: tab in filled text
+mandoc: tab.in:18:6: WARNING: tab in filled text
+mandoc: tab.in:20:7: WARNING: tab in filled text
+mandoc: tab.in:22:8: WARNING: tab in filled text
+mandoc: tab.in:24:9: WARNING: tab in filled text
+mandoc: tab.in:26:10: WARNING: tab in filled text
+mandoc: tab.in:28:11: WARNING: tab in filled text
+mandoc: tab.in:30:12: WARNING: tab in filled text
+mandoc: tab.in:32:13: WARNING: tab in filled text
+mandoc: tab.in:34:14: WARNING: tab in filled text
+mandoc: tab.in:36:4: WARNING: tab in filled text
+mandoc: tab.in:38:4: WARNING: tab in filled text
+mandoc: tab.in:38:5: WARNING: tab in filled text
+mandoc: tab.in:40:7: WARNING: tab in filled text
+mandoc: tab.in:42:1: WARNING: tab in filled text
+mandoc: tab.in:44:1: WARNING: tab in filled text
+mandoc: tab.in:44:2: WARNING: tab in filled text
+mandoc: tab.in:46:1: WARNING: tab in filled text
+mandoc: tab.in:47:1: WARNING: tab in filled text
+mandoc: tab.in:51:2: WARNING: tab in filled text
+mandoc: tab.in:53:3: WARNING: tab in filled text
+mandoc: tab.in:55:4: WARNING: tab in filled text
+mandoc: tab.in:57:5: WARNING: tab in filled text
+mandoc: tab.in:59:6: WARNING: tab in filled text
+mandoc: tab.in:61:7: WARNING: tab in filled text
+mandoc: tab.in:63:8: WARNING: tab in filled text
+mandoc: tab.in:65:9: WARNING: tab in filled text
+mandoc: tab.in:67:10: WARNING: tab in filled text
+mandoc: tab.in:69:11: WARNING: tab in filled text
+mandoc: tab.in:71:12: WARNING: tab in filled text
+mandoc: tab.in:73:13: WARNING: tab in filled text
+mandoc: tab.in:75:14: WARNING: tab in filled text
+mandoc: tab.in:77:4: WARNING: tab in filled text
+mandoc: tab.in:79:4: WARNING: tab in filled text
+mandoc: tab.in:79:5: WARNING: tab in filled text
+mandoc: tab.in:81:7: WARNING: tab in filled text
+mandoc: tab.in:83:1: WARNING: tab in filled text
+mandoc: tab.in:85:1: WARNING: tab in filled text
+mandoc: tab.in:85:2: WARNING: tab in filled text
diff --git a/regress/char/space/trailing-mdoc.in b/regress/char/space/trailing-mdoc.in
new file mode 100644
index 00000000..3cc8dc08
--- /dev/null
+++ b/regress/char/space/trailing-mdoc.in
@@ -0,0 +1,11 @@
+.Dd December 8, 2016
+.Dt SPACE-TRAILING-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm space-trailing-mdoc
+.Nd trailing spaces on input lines
+.Sh DESCRIPTION
+on a text line,
+on a
+.Em macro
+line, after a comment \"
diff --git a/regress/char/space/trailing-mdoc.out_ascii b/regress/char/space/trailing-mdoc.out_ascii
new file mode 100644
index 00000000..28c32ed8
--- /dev/null
+++ b/regress/char/space/trailing-mdoc.out_ascii
@@ -0,0 +1,9 @@
+SPACE-TRAILING-MDOC(1) General Commands Manual SPACE-TRAILING-MDOC(1)
+
+NNAAMMEE
+ ssppaaccee--ttrraaiilliinngg--mmddoocc - trailing spaces on input lines
+
+DDEESSCCRRIIPPTTIIOONN
+ on a text line, on a _m_a_c_r_o line, after a comment
+
+OpenBSD December 8, 2016 OpenBSD
diff --git a/regress/char/space/trailing-mdoc.out_lint b/regress/char/space/trailing-mdoc.out_lint
new file mode 100644
index 00000000..a64141ea
--- /dev/null
+++ b/regress/char/space/trailing-mdoc.out_lint
@@ -0,0 +1,3 @@
+mandoc: trailing-mdoc.in:8:16: WARNING: whitespace at end of input line
+mandoc: trailing-mdoc.in:10:12: WARNING: whitespace at end of input line
+mandoc: trailing-mdoc.in:11:27: WARNING: whitespace at end of input line
diff --git a/regress/char/space/zerowidth.in b/regress/char/space/zerowidth.in
new file mode 100644
index 00000000..9d2f3ff2
--- /dev/null
+++ b/regress/char/space/zerowidth.in
@@ -0,0 +1,12 @@
+.TH SPACE-ZEROWIDTH 1 "October 27, 2014" OpenBSD
+.SH NAME
+space-zerowidth \- zero width and narrow space characters
+.SH DESCRIPTION
+.nf
+BEGINTEST
+zero width space \e& between A and B: A\&B
+hyphenation allowed \e% between A and B: A\%B
+half-narrow (1/12) space \e^ between A and B: A\^B
+narrow space (1/6) \e| between A and B: A\|B
+ENDTEST
+.fi
diff --git a/regress/char/space/zerowidth.out_ascii b/regress/char/space/zerowidth.out_ascii
new file mode 100644
index 00000000..e6509886
--- /dev/null
+++ b/regress/char/space/zerowidth.out_ascii
@@ -0,0 +1,18 @@
+SPACE-ZEROWIDTH(1) General Commands Manual SPACE-ZEROWIDTH(1)
+
+
+
+NNAAMMEE
+ space-zerowidth - zero width and narrow space characters
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ zero width space \& between A and B: AB
+ hyphenation allowed \% between A and B: AB
+ half-narrow (1/12) space \^ between A and B: AB
+ narrow space (1/6) \| between A and B: AB
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 SPACE-ZEROWIDTH(1)
diff --git a/regress/char/space/zerowidth.out_html b/regress/char/space/zerowidth.out_html
new file mode 100644
index 00000000..f317aafd
--- /dev/null
+++ b/regress/char/space/zerowidth.out_html
@@ -0,0 +1,6 @@
+BEGINTEST
+zero width space \&amp; between A and B: AB
+hyphenation allowed \% between A and B: AB
+half-narrow (1/12) space \^ between A and B: AB
+narrow space (1/6) \| between A and B: AB
+ENDTEST
diff --git a/regress/char/space/zerowidth.out_utf8 b/regress/char/space/zerowidth.out_utf8
new file mode 100644
index 00000000..e6509886
--- /dev/null
+++ b/regress/char/space/zerowidth.out_utf8
@@ -0,0 +1,18 @@
+SPACE-ZEROWIDTH(1) General Commands Manual SPACE-ZEROWIDTH(1)
+
+
+
+NNAAMMEE
+ space-zerowidth - zero width and narrow space characters
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ zero width space \& between A and B: AB
+ hyphenation allowed \% between A and B: AB
+ half-narrow (1/12) space \^ between A and B: AB
+ narrow space (1/6) \| between A and B: AB
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 SPACE-ZEROWIDTH(1)
diff --git a/regress/char/unicode/Makefile b/regress/char/unicode/Makefile
new file mode 100644
index 00000000..b75ba6db
--- /dev/null
+++ b/regress/char/unicode/Makefile
@@ -0,0 +1,13 @@
+# $OpenBSD: Makefile,v 1.4 2014/12/19 04:57:11 schwarze Exp $
+
+REGRESS_TARGETS = ascii input invalid latin1 latin1diff
+REGRESS_TARGETS += man mdoc named namediff nogroff
+SKIP_ASCII = man mdoc
+UTF8_TARGETS = ${REGRESS_TARGETS}
+HTML_TARGETS = ascii invalid latin1 latin1diff named namediff nogroff
+LINT_TARGETS = input invalid
+
+SKIP_GROFF = input nogroff
+SKIP_GROFF_ASCII = latin1diff namediff
+
+.include <bsd.regress.mk>
diff --git a/regress/char/unicode/ascii.in b/regress/char/unicode/ascii.in
new file mode 100644
index 00000000..c75da2c0
--- /dev/null
+++ b/regress/char/unicode/ascii.in
@@ -0,0 +1,28 @@
+.TH CHAR-UNICODE-ASCII 1 "October 27, 2014" OpenBSD
+.SH NAME
+char-unicode-ascii \- Unicode characters in the ASCII range
+.SH DESCRIPTION
+.nf
+BEGINTEST
+\[u0022]\N'34'\(dq QUOTATION MARK
+\[u0023]\N'35'\(sh NUMBER SIGN
+\[u0024]\N'36'\(Do DOLLAR SIGN
+\[u0027]\N'39'\(aq APOSTROPHE
+\[u002B]\N'43'\(pl PLUS SIGN
+\N'45'\- HYPHEN-MINUS
+\N'46'\. FULL STOP
+\[u002F]\N'47'\(sl SOLIDUS
+\[u003D]\N'61'\(eq EQUALS SIGN
+\[u0040]\N'64'\(at COMMERCIAL AT
+\[u005B]\N'91'\(lB LEFT SQUARE BRACKET
+\[u005C]\N'92'\e\(rs REVERSE SOLIDUS
+\[u005D]\N'93'\(rB RIGHT SQUARE BRACKET
+\[u005E]\N'94'\(a^\(ha CIRCUMFLEX ACCENT
+\[u005F]\N'95'\(ul LOW LINE
+\[u0060]\N'96'\`\(ga GRAVE ACCENT
+\[u007B]\N'123'\(lC LEFT CURLY BRACKET
+\[u007C]\N'124'\(ba\(or VERTICAL LINE
+\[u007D]\N'125'\(rC RIGHT CURLY BRACKET
+\[u007E]\N'126'\(a~\(ti TILDE
+ENDTEST
+.fi
diff --git a/regress/char/unicode/ascii.out_ascii b/regress/char/unicode/ascii.out_ascii
new file mode 100644
index 00000000..74b5d286
--- /dev/null
+++ b/regress/char/unicode/ascii.out_ascii
@@ -0,0 +1,34 @@
+CHAR-UNICODE-ASCII(1) General Commands Manual CHAR-UNICODE-ASCII(1)
+
+
+
+NNAAMMEE
+ char-unicode-ascii - Unicode characters in the ASCII range
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ """ QUOTATION MARK
+ ### NUMBER SIGN
+ $$$ DOLLAR SIGN
+ ''' APOSTROPHE
+ +++ PLUS SIGN
+ -- HYPHEN-MINUS
+ .. FULL STOP
+ /// SOLIDUS
+ === EQUALS SIGN
+ @@@ COMMERCIAL AT
+ [[[ LEFT SQUARE BRACKET
+ \\\\ REVERSE SOLIDUS
+ ]]] RIGHT SQUARE BRACKET
+ ^^^^ CIRCUMFLEX ACCENT
+ ___ LOW LINE
+ ```` GRAVE ACCENT
+ {{{ LEFT CURLY BRACKET
+ |||| VERTICAL LINE
+ }}} RIGHT CURLY BRACKET
+ ~~~~ TILDE
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-ASCII(1)
diff --git a/regress/char/unicode/ascii.out_html b/regress/char/unicode/ascii.out_html
new file mode 100644
index 00000000..deef5bcb
--- /dev/null
+++ b/regress/char/unicode/ascii.out_html
@@ -0,0 +1,22 @@
+BEGINTEST
+&quot;&quot;&quot; QUOTATION MARK
+### NUMBER SIGN
+$$$ DOLLAR SIGN
+''' APOSTROPHE
++++ PLUS SIGN
+-- HYPHEN-MINUS
+.. FULL STOP
+/// SOLIDUS
+=== EQUALS SIGN
+@@@ COMMERCIAL AT
+[[[ LEFT SQUARE BRACKET
+\\\\ REVERSE SOLIDUS
+]]] RIGHT SQUARE BRACKET
+^^^^ CIRCUMFLEX ACCENT
+___ LOW LINE
+```` GRAVE ACCENT
+{{{ LEFT CURLY BRACKET
+|||| VERTICAL LINE
+}}} RIGHT CURLY BRACKET
+~~~~ TILDE
+ENDTEST
diff --git a/regress/char/unicode/ascii.out_utf8 b/regress/char/unicode/ascii.out_utf8
new file mode 100644
index 00000000..74b5d286
--- /dev/null
+++ b/regress/char/unicode/ascii.out_utf8
@@ -0,0 +1,34 @@
+CHAR-UNICODE-ASCII(1) General Commands Manual CHAR-UNICODE-ASCII(1)
+
+
+
+NNAAMMEE
+ char-unicode-ascii - Unicode characters in the ASCII range
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ """ QUOTATION MARK
+ ### NUMBER SIGN
+ $$$ DOLLAR SIGN
+ ''' APOSTROPHE
+ +++ PLUS SIGN
+ -- HYPHEN-MINUS
+ .. FULL STOP
+ /// SOLIDUS
+ === EQUALS SIGN
+ @@@ COMMERCIAL AT
+ [[[ LEFT SQUARE BRACKET
+ \\\\ REVERSE SOLIDUS
+ ]]] RIGHT SQUARE BRACKET
+ ^^^^ CIRCUMFLEX ACCENT
+ ___ LOW LINE
+ ```` GRAVE ACCENT
+ {{{ LEFT CURLY BRACKET
+ |||| VERTICAL LINE
+ }}} RIGHT CURLY BRACKET
+ ~~~~ TILDE
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-ASCII(1)
diff --git a/regress/char/unicode/input.in b/regress/char/unicode/input.in
new file mode 100644
index 00000000..15a59f5b
--- /dev/null
+++ b/regress/char/unicode/input.in
Binary files differ
diff --git a/regress/char/unicode/input.out_ascii b/regress/char/unicode/input.out_ascii
new file mode 100644
index 00000000..7711574c
--- /dev/null
+++ b/regress/char/unicode/input.out_ascii
@@ -0,0 +1,67 @@
+CHAR-UNICODE-INPUT(1) General Commands Manual CHAR-UNICODE-INPUT(1)
+
+
+
+NNAAMMEE
+ char-unicode-input - Unicode characters in the input file
+
+DDEESSCCRRIIPPTTIIOONN
+ lowest valid: <80>
+
+ OOnnee--bbyyttee rraannggee
+
+ U+0000 0x00 <NUL>? lowest ASCII
+ U+001f 0x1f <US>? highest ASCII control character
+ U+007f 0x7f <DEL>? highest ASCII
+ 0x80 ? leading lowest continuation
+ 0xbf ? leading highest continuation
+
+ TTwwoo--bbyyttee rraannggee
+
+ U+0000 0xc080 ?? lowest obfuscated ASCII
+ U+007f 0xc1bf ?? highest obfuscated ASCII
+ 0xc278 ?x ASCII continuation
+ U+0080 0xc280 <80><80> lowest two-byte
+ 0xc2c380 ?`A high continuation
+ U+07FF 0xdfbf <?><?> highest two-byte
+
+ TThhrreeee--bbyyttee rraannggee
+
+ U+0000 0xe08080 ??? lowest obfuscated ASCII
+ U+007f 0xe081bf ??? highest obfuscated ASCII
+ U+0080 0xe08280 ??? lowest obfuscated two-byte
+ U+07FF 0xe09fbf ??? highest obfuscated two-byte
+ U+0800 0xe0a080 <?><?> lowest three-byte
+ U+0FFF 0xe0bfbf <?><?> end of first middle byte
+ U+1000 0xe18080 <?><?> begin of second middle byte
+ U+CFFF 0xecbfbf <?><?> end of last normal middle byte
+ U+D000 0xed8080 <?><?> begin of strange middle byte
+ U+D7FF 0xed9fbf <?><?> highest public three-byte
+ U+D800 0xeda080 ??? lowest surrogate
+ U+DFFF 0xedbfbf ??? highest surrogate
+ U+E000 0xee8080 <?><?> lowest private use
+ U+FFFF 0xefbfbf <?><?> highest three-byte
+
+ FFoouurr--bbyyttee rraannggee
+
+ U+0000 0xf0808080 ???? lowest obfuscated ASCII
+ U+007f 0xf08081bf ???? highest obfuscated ASCII
+ U+0080 0xf0808280 ???? lowest obfuscated two-byte
+ U+07FF 0xf0809fbf ???? highest obfuscated two-byte
+ U+0800 0xf080a080 ???? lowest obfuscated three-byte
+ U+FFFF 0xf08fbfbf ???? highest obfuscated three-byte
+ U+10000 0xf0908080 <?><?> lowest four-byte
+ U+3FFFF 0xf0bfbfbf <?><?> end of first middle byte
+ U+40000 0xf1808080 <?><?> second middle byte
+ U+FFFFF 0xf3bfbfbf <?><?> last normal middle byte
+ U+100000 0xf4808080 <?><?> strange middle byte
+ U+10FFFF 0xf48fbfbf <?><?> last valid four-byte
+ U+110000 0xf4908080 ???? lowest beyond Unicode
+ U+13FFFF 0xf4bfbfbf ???? end of strange middle byte
+ U+140000 0xf5808080 ???? lowest invalid middle byte
+ U+1FFFFF 0xf7bfbfbf ???? highest four-byte
+ U+200000 0xf888808080 ????? lowest five-byte
+
+
+
+OpenBSD December 19, 2014 CHAR-UNICODE-INPUT(1)
diff --git a/regress/char/unicode/input.out_lint b/regress/char/unicode/input.out_lint
new file mode 100644
index 00000000..8ac05edc
--- /dev/null
+++ b/regress/char/unicode/input.out_lint
@@ -0,0 +1,81 @@
+mandoc: input.in:10:21: ERROR: skipping bad character: 0x0
+mandoc: input.in:11:21: ERROR: skipping bad character: 0x1f
+mandoc: input.in:12:21: ERROR: skipping bad character: 0x7f
+mandoc: input.in:13:7: ERROR: skipping bad character: 0x80
+mandoc: input.in:14:7: ERROR: skipping bad character: 0xbf
+mandoc: input.in:20:15: ERROR: skipping bad character: 0xc0
+mandoc: input.in:20:16: ERROR: skipping bad character: 0x80
+mandoc: input.in:21:15: ERROR: skipping bad character: 0xc1
+mandoc: input.in:21:16: ERROR: skipping bad character: 0xbf
+mandoc: input.in:22:9: ERROR: skipping bad character: 0xc2
+mandoc: input.in:24:11: ERROR: skipping bad character: 0xc2
+mandoc: input.in:31:17: ERROR: skipping bad character: 0xc0
+mandoc: input.in:31:18: ERROR: skipping bad character: 0x80
+mandoc: input.in:31:19: ERROR: skipping bad character: 0x80
+mandoc: input.in:32:17: ERROR: skipping bad character: 0xe0
+mandoc: input.in:32:18: ERROR: skipping bad character: 0x81
+mandoc: input.in:32:19: ERROR: skipping bad character: 0xbf
+mandoc: input.in:33:17: ERROR: skipping bad character: 0xe0
+mandoc: input.in:33:18: ERROR: skipping bad character: 0x82
+mandoc: input.in:33:19: ERROR: skipping bad character: 0x80
+mandoc: input.in:34:17: ERROR: skipping bad character: 0xe0
+mandoc: input.in:34:18: ERROR: skipping bad character: 0x9f
+mandoc: input.in:34:19: ERROR: skipping bad character: 0xbf
+mandoc: input.in:41:25: ERROR: skipping bad character: 0xed
+mandoc: input.in:41:26: ERROR: skipping bad character: 0xa0
+mandoc: input.in:41:27: ERROR: skipping bad character: 0x80
+mandoc: input.in:41:17: WARNING: invalid escape sequence: \[uD800]
+mandoc: input.in:42:25: ERROR: skipping bad character: 0xed
+mandoc: input.in:42:26: ERROR: skipping bad character: 0xbf
+mandoc: input.in:42:27: ERROR: skipping bad character: 0xbf
+mandoc: input.in:42:17: WARNING: invalid escape sequence: \[uDFFF]
+mandoc: input.in:50:19: ERROR: skipping bad character: 0xf0
+mandoc: input.in:50:20: ERROR: skipping bad character: 0x80
+mandoc: input.in:50:21: ERROR: skipping bad character: 0x80
+mandoc: input.in:50:22: ERROR: skipping bad character: 0x80
+mandoc: input.in:51:19: ERROR: skipping bad character: 0xf0
+mandoc: input.in:51:20: ERROR: skipping bad character: 0x80
+mandoc: input.in:51:21: ERROR: skipping bad character: 0x81
+mandoc: input.in:51:22: ERROR: skipping bad character: 0xbf
+mandoc: input.in:52:19: ERROR: skipping bad character: 0xf0
+mandoc: input.in:52:20: ERROR: skipping bad character: 0x80
+mandoc: input.in:52:21: ERROR: skipping bad character: 0x82
+mandoc: input.in:52:22: ERROR: skipping bad character: 0x80
+mandoc: input.in:53:19: ERROR: skipping bad character: 0xf0
+mandoc: input.in:53:20: ERROR: skipping bad character: 0x80
+mandoc: input.in:53:21: ERROR: skipping bad character: 0x9f
+mandoc: input.in:53:22: ERROR: skipping bad character: 0xbf
+mandoc: input.in:54:19: ERROR: skipping bad character: 0xf0
+mandoc: input.in:54:20: ERROR: skipping bad character: 0x80
+mandoc: input.in:54:21: ERROR: skipping bad character: 0xa0
+mandoc: input.in:54:22: ERROR: skipping bad character: 0x80
+mandoc: input.in:55:19: ERROR: skipping bad character: 0xf0
+mandoc: input.in:55:20: ERROR: skipping bad character: 0x8f
+mandoc: input.in:55:21: ERROR: skipping bad character: 0xbf
+mandoc: input.in:55:22: ERROR: skipping bad character: 0xbf
+mandoc: input.in:62:31: ERROR: skipping bad character: 0xf4
+mandoc: input.in:62:32: ERROR: skipping bad character: 0x90
+mandoc: input.in:62:33: ERROR: skipping bad character: 0x80
+mandoc: input.in:62:34: ERROR: skipping bad character: 0x80
+mandoc: input.in:62:21: WARNING: invalid escape sequence: \[u110000]
+mandoc: input.in:63:31: ERROR: skipping bad character: 0xf4
+mandoc: input.in:63:32: ERROR: skipping bad character: 0xbf
+mandoc: input.in:63:33: ERROR: skipping bad character: 0xbf
+mandoc: input.in:63:34: ERROR: skipping bad character: 0xbf
+mandoc: input.in:63:21: WARNING: invalid escape sequence: \[u13FFFF]
+mandoc: input.in:64:31: ERROR: skipping bad character: 0xf5
+mandoc: input.in:64:32: ERROR: skipping bad character: 0x80
+mandoc: input.in:64:33: ERROR: skipping bad character: 0x80
+mandoc: input.in:64:34: ERROR: skipping bad character: 0x80
+mandoc: input.in:64:21: WARNING: invalid escape sequence: \[u140000]
+mandoc: input.in:65:31: ERROR: skipping bad character: 0xf7
+mandoc: input.in:65:32: ERROR: skipping bad character: 0xbf
+mandoc: input.in:65:33: ERROR: skipping bad character: 0xbf
+mandoc: input.in:65:34: ERROR: skipping bad character: 0xbf
+mandoc: input.in:65:21: WARNING: invalid escape sequence: \[u1FFFFF]
+mandoc: input.in:66:33: ERROR: skipping bad character: 0xf8
+mandoc: input.in:66:34: ERROR: skipping bad character: 0x88
+mandoc: input.in:66:35: ERROR: skipping bad character: 0x80
+mandoc: input.in:66:36: ERROR: skipping bad character: 0x80
+mandoc: input.in:66:37: ERROR: skipping bad character: 0x80
+mandoc: input.in:66:23: WARNING: invalid escape sequence: \[u200000]
diff --git a/regress/char/unicode/input.out_utf8 b/regress/char/unicode/input.out_utf8
new file mode 100644
index 00000000..890835d3
--- /dev/null
+++ b/regress/char/unicode/input.out_utf8
@@ -0,0 +1,67 @@
+CHAR-UNICODE-INPUT(1) General Commands Manual CHAR-UNICODE-INPUT(1)
+
+
+
+NNAAMMEE
+ char-unicode-input - Unicode characters in the input file
+
+DDEESSCCRRIIPPTTIIOONN
+ lowest valid: �
+
+ OOnnee--bbyyttee rraannggee
+
+ U+0000 0x00 �? lowest ASCII
+ U+001f 0x1f �? highest ASCII control character
+ U+007f 0x7f �? highest ASCII
+ 0x80 ? leading lowest continuation
+ 0xbf ? leading highest continuation
+
+ TTwwoo--bbyyttee rraannggee
+
+ U+0000 0xc080 ?? lowest obfuscated ASCII
+ U+007f 0xc1bf ?? highest obfuscated ASCII
+ 0xc278 ?x ASCII continuation
+ U+0080 0xc280 �� lowest two-byte
+ 0xc2c380 ?À high continuation
+ U+07FF 0xdfbf ߿߿ highest two-byte
+
+ TThhrreeee--bbyyttee rraannggee
+
+ U+0000 0xe08080 ??? lowest obfuscated ASCII
+ U+007f 0xe081bf ??? highest obfuscated ASCII
+ U+0080 0xe08280 ??? lowest obfuscated two-byte
+ U+07FF 0xe09fbf ??? highest obfuscated two-byte
+ U+0800 0xe0a080 ࠀࠀ lowest three-byte
+ U+0FFF 0xe0bfbf ࿿࿿ end of first middle byte
+ U+1000 0xe18080 ကက begin of second middle byte
+ U+CFFF 0xecbfbf 쿿쿿 end of last normal middle byte
+ U+D000 0xed8080 퀀퀀 begin of strange middle byte
+ U+D7FF 0xed9fbf ퟿퟿ highest public three-byte
+ U+D800 0xeda080 ??? lowest surrogate
+ U+DFFF 0xedbfbf ??? highest surrogate
+ U+E000 0xee8080  lowest private use
+ U+FFFF 0xefbfbf ￿￿ highest three-byte
+
+ FFoouurr--bbyyttee rraannggee
+
+ U+0000 0xf0808080 ???? lowest obfuscated ASCII
+ U+007f 0xf08081bf ???? highest obfuscated ASCII
+ U+0080 0xf0808280 ???? lowest obfuscated two-byte
+ U+07FF 0xf0809fbf ???? highest obfuscated two-byte
+ U+0800 0xf080a080 ???? lowest obfuscated three-byte
+ U+FFFF 0xf08fbfbf ???? highest obfuscated three-byte
+ U+10000 0xf0908080 𐀀𐀀 lowest four-byte
+ U+3FFFF 0xf0bfbfbf 𿿿𿿿 end of first middle byte
+ U+40000 0xf1808080 񀀀񀀀 second middle byte
+ U+FFFFF 0xf3bfbfbf 󿿿󿿿 last normal middle byte
+ U+100000 0xf4808080 􀀀􀀀 strange middle byte
+ U+10FFFF 0xf48fbfbf 􏿿􏿿 last valid four-byte
+ U+110000 0xf4908080 ???? lowest beyond Unicode
+ U+13FFFF 0xf4bfbfbf ???? end of strange middle byte
+ U+140000 0xf5808080 ???? lowest invalid middle byte
+ U+1FFFFF 0xf7bfbfbf ???? highest four-byte
+ U+200000 0xf888808080 ????? lowest five-byte
+
+
+
+OpenBSD December 19, 2014 CHAR-UNICODE-INPUT(1)
diff --git a/regress/char/unicode/invalid.in b/regress/char/unicode/invalid.in
new file mode 100644
index 00000000..4c0432bc
--- /dev/null
+++ b/regress/char/unicode/invalid.in
@@ -0,0 +1,17 @@
+.Dd October 28, 2014
+.Dt CHAR-UNICODE-INVALID 1
+.Os OpenBSD
+.Sh NAME
+.Nm char-unicode-invalid
+.Nd invalid unicode characters
+.Sh DESCRIPTION
+.Bd -unfilled
+BEGINTEST
+too short: >\[u2B].\[u02B]<
+just right: >\[u002B]<
+too long: >\[u0002B].\[u00002B].\[u000002B]<
+too large: >\[u110000].\[u200000].\[u1000000]<
+trailing garbage: >\[u1234g]<
+not unicode: >\[ul].\[ua].\[uA]<
+ENDTEST
+.Ed
diff --git a/regress/char/unicode/invalid.out_ascii b/regress/char/unicode/invalid.out_ascii
new file mode 100644
index 00000000..c30a7617
--- /dev/null
+++ b/regress/char/unicode/invalid.out_ascii
@@ -0,0 +1,16 @@
+CHAR-UNICODE-INVALID(1) General Commands Manual CHAR-UNICODE-INVALID(1)
+
+NNAAMMEE
+ cchhaarr--uunniiccooddee--iinnvvaalliidd - invalid unicode characters
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ too short: >.<
+ just right: >+<
+ too long: >..<
+ too large: >..<
+ trailing garbage: ><
+ not unicode: >_.|^.=^<
+ ENDTEST
+
+OpenBSD October 28, 2014 OpenBSD
diff --git a/regress/char/unicode/invalid.out_html b/regress/char/unicode/invalid.out_html
new file mode 100644
index 00000000..6456d728
--- /dev/null
+++ b/regress/char/unicode/invalid.out_html
@@ -0,0 +1,8 @@
+BEGINTEST
+too short: &gt;.&lt;
+just right: &gt;+&lt;
+too long: &gt;..&lt;
+too large: &gt;..&lt;
+trailing garbage: &gt;&lt;
+not unicode: &gt;_.&#8593;.&#8657;&lt;
+ENDTEST
diff --git a/regress/char/unicode/invalid.out_lint b/regress/char/unicode/invalid.out_lint
new file mode 100644
index 00000000..c200a620
--- /dev/null
+++ b/regress/char/unicode/invalid.out_lint
@@ -0,0 +1,9 @@
+mandoc: invalid.in:10:20: WARNING: invalid escape sequence: \[u02B]
+mandoc: invalid.in:10:13: WARNING: invalid escape sequence: \[u2B]
+mandoc: invalid.in:12:33: WARNING: invalid escape sequence: \[u000002B]
+mandoc: invalid.in:12:22: WARNING: invalid escape sequence: \[u00002B]
+mandoc: invalid.in:12:12: WARNING: invalid escape sequence: \[u0002B]
+mandoc: invalid.in:13:35: WARNING: invalid escape sequence: \[u1000000]
+mandoc: invalid.in:13:24: WARNING: invalid escape sequence: \[u200000]
+mandoc: invalid.in:13:13: WARNING: invalid escape sequence: \[u110000]
+mandoc: invalid.in:14:20: WARNING: invalid escape sequence: \[u1234g]
diff --git a/regress/char/unicode/invalid.out_utf8 b/regress/char/unicode/invalid.out_utf8
new file mode 100644
index 00000000..ed91d82a
--- /dev/null
+++ b/regress/char/unicode/invalid.out_utf8
@@ -0,0 +1,16 @@
+CHAR-UNICODE-INVALID(1) General Commands Manual CHAR-UNICODE-INVALID(1)
+
+NNAAMMEE
+ cchhaarr--uunniiccooddee--iinnvvaalliidd – invalid unicode characters
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ too short: >.<
+ just right: >+<
+ too long: >..<
+ too large: >..<
+ trailing garbage: ><
+ not unicode: >_.↑.⇑<
+ ENDTEST
+
+OpenBSD October 28, 2014 OpenBSD
diff --git a/regress/char/unicode/latin1.in b/regress/char/unicode/latin1.in
new file mode 100644
index 00000000..4c99e986
--- /dev/null
+++ b/regress/char/unicode/latin1.in
@@ -0,0 +1,92 @@
+.TH CHAR-UNICODE-LATIN1 1 "October 27, 2014" OpenBSD
+.SH NAME
+char-unicode-latin1 \- Unicode characters in the ISO-8859-1 range
+.SH DESCRIPTION
+.nf
+BEGINTEST
+\[u00A2]\(ct CENT SIGN
+\[u00A4]\(Cs CURRENCY SIGN
+\[u00A5]\(Ye YEN SIGN
+\[u00A6]\(bb BROKEN BAR
+\[u00A8]\(ad DIAERESIS
+\[u00A9]\(co COPYRIGHT SIGN
+\[u00AA] FEMININE ORDINAL INDICATOR
+\[u00AB]\(Fo LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+\[u00AC]\(no\[tno] NOT SIGN
+\[u00AD] SOFT HYPHEN
+\[u00AE]\(rg REGISTERED SIGN
+\[u00B1]\(+-\[t+-] PLUS-MINUS SIGN
+\[u00B2] SUPERSCRIPT TWO
+\[u00B3] SUPERSCRIPT THREE
+\[u00B4]\'\(aa ACUTE ACCENT
+\[u00B5]\(mc MICRO SIGN
+\[u00B7]\(pc MIDDLE DOT
+\[u00B8]\(ac CEDILLA
+\[u00B9] SUPERSCRIPT ONE
+\[u00BA] MASCULINE ORDINAL INDICATOR
+\[u00BB]\(Fc RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+\[u00BC]\(14 VULGAR FRACTION ONE QUARTER
+\[u00BD]\(12 VULGAR FRACTION ONE HALF
+\[u00BE]\(34 VULGAR FRACTION THREE QUARTERS
+\[u00C0]\(`A LATIN CAPITAL LETTER A WITH GRAVE
+\[u00C1]\('A LATIN CAPITAL LETTER A WITH ACUTE
+\[u00C2]\(^A LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+\[u00C3]\(~A LATIN CAPITAL LETTER A WITH TILDE
+\[u00C4]\(:A LATIN CAPITAL LETTER A WITH DIAERESIS
+\[u00C5]\(oA LATIN CAPITAL LETTER A WITH RING ABOVE
+\[u00C6]\(AE LATIN CAPITAL LETTER AE
+\[u00C7]\(,C LATIN CAPITAL LETTER C WITH CEDILLA
+\[u00C8]\(`E LATIN CAPITAL LETTER E WITH GRAVE
+\[u00C9]\('E LATIN CAPITAL LETTER E WITH ACUTE
+\[u00CA]\(^E LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+\[u00CB]\(:E LATIN CAPITAL LETTER E WITH DIAERESIS
+\[u00CC]\(`I LATIN CAPITAL LETTER I WITH GRAVE
+\[u00CD]\('I LATIN CAPITAL LETTER I WITH ACUTE
+\[u00CE]\(^I LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+\[u00CF]\(:I LATIN CAPITAL LETTER I WITH DIAERESIS
+\[u00D0]\(-D LATIN CAPITAL LETTER ETH
+\[u00D1]\(~N LATIN CAPITAL LETTER N WITH TILDE
+\[u00D2]\(`O LATIN CAPITAL LETTER O WITH GRAVE
+\[u00D3]\('O LATIN CAPITAL LETTER O WITH ACUTE
+\[u00D4]\(^O LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+\[u00D5]\(~O LATIN CAPITAL LETTER O WITH TILDE
+\[u00D6]\(:O LATIN CAPITAL LETTER O WITH DIAERESIS
+\[u00D7]\(mu\[tmu] MULTIPLICATION SIGN
+\[u00D8]\(/O LATIN CAPITAL LETTER O WITH STROKE
+\[u00D9]\(`U LATIN CAPITAL LETTER U WITH GRAVE
+\[u00DA]\('U LATIN CAPITAL LETTER U WITH ACUTE
+\[u00DB]\(^U LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+\[u00DC]\(:U LATIN CAPITAL LETTER U WITH DIAERESIS
+\[u00DD] LATIN CAPITAL LETTER Y WITH ACUTE
+\[u00E0]\(`a LATIN SMALL LETTER A WITH GRAVE
+\[u00E1]\('a LATIN SMALL LETTER A WITH ACUTE
+\[u00E2]\(^a LATIN SMALL LETTER A WITH CIRCUMFLEX
+\[u00E3]\(~a LATIN SMALL LETTER A WITH TILDE
+\[u00E4]\(:a LATIN SMALL LETTER A WITH DIAERESIS
+\[u00E5]\(oa LATIN SMALL LETTER A WITH RING ABOVE
+\[u00E6]\(ae LATIN SMALL LETTER AE
+\[u00E7]\(,c LATIN SMALL LETTER C WITH CEDILLA
+\[u00E8]\(`e LATIN SMALL LETTER E WITH GRAVE
+\[u00E9]\('e LATIN SMALL LETTER E WITH ACUTE
+\[u00EA]\(^e LATIN SMALL LETTER E WITH CIRCUMFLEX
+\[u00EB]\(:e LATIN SMALL LETTER E WITH DIAERESIS
+\[u00EC]\(`i LATIN SMALL LETTER I WITH GRAVE
+\[u00ED]\('i LATIN SMALL LETTER I WITH ACUTE
+\[u00EE]\(^i LATIN SMALL LETTER I WITH CIRCUMFLEX
+\[u00EF]\(:i LATIN SMALL LETTER I WITH DIAERESIS
+\[u00F1]\(~n LATIN SMALL LETTER N WITH TILDE
+\[u00F2]\(`o LATIN SMALL LETTER O WITH GRAVE
+\[u00F3]\('o LATIN SMALL LETTER O WITH ACUTE
+\[u00F4]\(^o LATIN SMALL LETTER O WITH CIRCUMFLEX
+\[u00F5]\(~o LATIN SMALL LETTER O WITH TILDE
+\[u00F6]\(:o LATIN SMALL LETTER O WITH DIAERESIS
+\[u00F7]\(di\[tdi] DIVISION SIGN
+\[u00F8]\(/o LATIN SMALL LETTER O WITH STROKE
+\[u00F9]\(`u LATIN SMALL LETTER U WITH GRAVE
+\[u00FA]\('u LATIN SMALL LETTER U WITH ACUTE
+\[u00FB]\(^u LATIN SMALL LETTER U WITH CIRCUMFLEX
+\[u00FC]\(:u LATIN SMALL LETTER U WITH DIAERESIS
+\[u00FD] LATIN SMALL LETTER Y WITH ACUTE
+\[u00FF]\(:y LATIN SMALL LETTER Y WITH DIAERESIS
+ENDTEST
+.fi
diff --git a/regress/char/unicode/latin1.out_ascii b/regress/char/unicode/latin1.out_ascii
new file mode 100644
index 00000000..1eb8436d
--- /dev/null
+++ b/regress/char/unicode/latin1.out_ascii
@@ -0,0 +1,98 @@
+CHAR-UNICODE-LATIN1(1) General Commands Manual CHAR-UNICODE-LATIN1(1)
+
+
+
+NNAAMMEE
+ char-unicode-latin1 - Unicode characters in the ISO-8859-1 range
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ /c/c CENT SIGN
+ oxox CURRENCY SIGN
+ =Y=Y YEN SIGN
+ || BROKEN BAR
+ "" DIAERESIS
+ (C)(C) COPYRIGHT SIGN
+ _a FEMININE ORDINAL INDICATOR
+ <<<< LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ~~~ NOT SIGN
+ SOFT HYPHEN
+ (R)(R) REGISTERED SIGN
+ +-+-+- PLUS-MINUS SIGN
+ 2 SUPERSCRIPT TWO
+ 3 SUPERSCRIPT THREE
+ ''' ACUTE ACCENT
+ ,u,u MICRO SIGN
+ .. MIDDLE DOT
+ ,, CEDILLA
+ 1 SUPERSCRIPT ONE
+ _o MASCULINE ORDINAL INDICATOR
+ >>>> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ 1/41/4 VULGAR FRACTION ONE QUARTER
+ 1/21/2 VULGAR FRACTION ONE HALF
+ 3/43/4 VULGAR FRACTION THREE QUARTERS
+ `A`A LATIN CAPITAL LETTER A WITH GRAVE
+ 'A'A LATIN CAPITAL LETTER A WITH ACUTE
+ ^A^A LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ ~A~A LATIN CAPITAL LETTER A WITH TILDE
+ "A"A LATIN CAPITAL LETTER A WITH DIAERESIS
+ oAoA LATIN CAPITAL LETTER A WITH RING ABOVE
+ AEAE LATIN CAPITAL LETTER AE
+ ,C,C LATIN CAPITAL LETTER C WITH CEDILLA
+ `E`E LATIN CAPITAL LETTER E WITH GRAVE
+ 'E'E LATIN CAPITAL LETTER E WITH ACUTE
+ ^E^E LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ "E"E LATIN CAPITAL LETTER E WITH DIAERESIS
+ `I`I LATIN CAPITAL LETTER I WITH GRAVE
+ 'I'I LATIN CAPITAL LETTER I WITH ACUTE
+ ^I^I LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ "I"I LATIN CAPITAL LETTER I WITH DIAERESIS
+ -D-D LATIN CAPITAL LETTER ETH
+ ~N~N LATIN CAPITAL LETTER N WITH TILDE
+ `O`O LATIN CAPITAL LETTER O WITH GRAVE
+ 'O'O LATIN CAPITAL LETTER O WITH ACUTE
+ ^O^O LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ ~O~O LATIN CAPITAL LETTER O WITH TILDE
+ "O"O LATIN CAPITAL LETTER O WITH DIAERESIS
+ xxx MULTIPLICATION SIGN
+ /O/O LATIN CAPITAL LETTER O WITH STROKE
+ `U`U LATIN CAPITAL LETTER U WITH GRAVE
+ 'U'U LATIN CAPITAL LETTER U WITH ACUTE
+ ^U^U LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ "U"U LATIN CAPITAL LETTER U WITH DIAERESIS
+ 'Y LATIN CAPITAL LETTER Y WITH ACUTE
+ `a`a LATIN SMALL LETTER A WITH GRAVE
+ 'a'a LATIN SMALL LETTER A WITH ACUTE
+ ^a^a LATIN SMALL LETTER A WITH CIRCUMFLEX
+ ~a~a LATIN SMALL LETTER A WITH TILDE
+ "a"a LATIN SMALL LETTER A WITH DIAERESIS
+ oaoa LATIN SMALL LETTER A WITH RING ABOVE
+ aeae LATIN SMALL LETTER AE
+ ,c,c LATIN SMALL LETTER C WITH CEDILLA
+ `e`e LATIN SMALL LETTER E WITH GRAVE
+ 'e'e LATIN SMALL LETTER E WITH ACUTE
+ ^e^e LATIN SMALL LETTER E WITH CIRCUMFLEX
+ "e"e LATIN SMALL LETTER E WITH DIAERESIS
+ `i`i LATIN SMALL LETTER I WITH GRAVE
+ 'i'i LATIN SMALL LETTER I WITH ACUTE
+ ^i^i LATIN SMALL LETTER I WITH CIRCUMFLEX
+ "i"i LATIN SMALL LETTER I WITH DIAERESIS
+ ~n~n LATIN SMALL LETTER N WITH TILDE
+ `o`o LATIN SMALL LETTER O WITH GRAVE
+ 'o'o LATIN SMALL LETTER O WITH ACUTE
+ ^o^o LATIN SMALL LETTER O WITH CIRCUMFLEX
+ ~o~o LATIN SMALL LETTER O WITH TILDE
+ "o"o LATIN SMALL LETTER O WITH DIAERESIS
+ -:--:--:- DIVISION SIGN
+ /o/o LATIN SMALL LETTER O WITH STROKE
+ `u`u LATIN SMALL LETTER U WITH GRAVE
+ 'u'u LATIN SMALL LETTER U WITH ACUTE
+ ^u^u LATIN SMALL LETTER U WITH CIRCUMFLEX
+ "u"u LATIN SMALL LETTER U WITH DIAERESIS
+ 'y LATIN SMALL LETTER Y WITH ACUTE
+ "y"y LATIN SMALL LETTER Y WITH DIAERESIS
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-LATIN1(1)
diff --git a/regress/char/unicode/latin1.out_html b/regress/char/unicode/latin1.out_html
new file mode 100644
index 00000000..d8fbf958
--- /dev/null
+++ b/regress/char/unicode/latin1.out_html
@@ -0,0 +1,86 @@
+BEGINTEST
+&#162;&#162; CENT SIGN
+&#164;&#164; CURRENCY SIGN
+&#165;&#165; YEN SIGN
+&#166;&#166; BROKEN BAR
+&#168;&#168; DIAERESIS
+&#169;&#169; COPYRIGHT SIGN
+&#170; FEMININE ORDINAL INDICATOR
+&#171;&#171; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+&#172;&#172;&#172; NOT SIGN
+&#173; SOFT HYPHEN
+&#174;&#174; REGISTERED SIGN
+&#177;&#177;&#177; PLUS-MINUS SIGN
+&#178; SUPERSCRIPT TWO
+&#179; SUPERSCRIPT THREE
+&#180;&#180;&#180; ACUTE ACCENT
+&#181;&#181; MICRO SIGN
+&#183;&#183; MIDDLE DOT
+&#184;&#184; CEDILLA
+&#185; SUPERSCRIPT ONE
+&#186; MASCULINE ORDINAL INDICATOR
+&#187;&#187; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+&#188;&#188; VULGAR FRACTION ONE QUARTER
+&#189;&#189; VULGAR FRACTION ONE HALF
+&#190;&#190; VULGAR FRACTION THREE QUARTERS
+&#192;&#192; LATIN CAPITAL LETTER A WITH GRAVE
+&#193;&#193; LATIN CAPITAL LETTER A WITH ACUTE
+&#194;&#194; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+&#195;&#195; LATIN CAPITAL LETTER A WITH TILDE
+&#196;&#196; LATIN CAPITAL LETTER A WITH DIAERESIS
+&#197;&#197; LATIN CAPITAL LETTER A WITH RING ABOVE
+&#198;&#198; LATIN CAPITAL LETTER AE
+&#199;&#199; LATIN CAPITAL LETTER C WITH CEDILLA
+&#200;&#200; LATIN CAPITAL LETTER E WITH GRAVE
+&#201;&#201; LATIN CAPITAL LETTER E WITH ACUTE
+&#202;&#202; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+&#203;&#203; LATIN CAPITAL LETTER E WITH DIAERESIS
+&#204;&#204; LATIN CAPITAL LETTER I WITH GRAVE
+&#205;&#205; LATIN CAPITAL LETTER I WITH ACUTE
+&#206;&#206; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+&#207;&#207; LATIN CAPITAL LETTER I WITH DIAERESIS
+&#208;&#208; LATIN CAPITAL LETTER ETH
+&#209;&#209; LATIN CAPITAL LETTER N WITH TILDE
+&#210;&#210; LATIN CAPITAL LETTER O WITH GRAVE
+&#211;&#211; LATIN CAPITAL LETTER O WITH ACUTE
+&#212;&#212; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+&#213;&#213; LATIN CAPITAL LETTER O WITH TILDE
+&#214;&#214; LATIN CAPITAL LETTER O WITH DIAERESIS
+&#215;&#215;&#215; MULTIPLICATION SIGN
+&#216;&#216; LATIN CAPITAL LETTER O WITH STROKE
+&#217;&#217; LATIN CAPITAL LETTER U WITH GRAVE
+&#218;&#218; LATIN CAPITAL LETTER U WITH ACUTE
+&#219;&#219; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+&#220;&#220; LATIN CAPITAL LETTER U WITH DIAERESIS
+&#221; LATIN CAPITAL LETTER Y WITH ACUTE
+&#224;&#224; LATIN SMALL LETTER A WITH GRAVE
+&#225;&#225; LATIN SMALL LETTER A WITH ACUTE
+&#226;&#226; LATIN SMALL LETTER A WITH CIRCUMFLEX
+&#227;&#227; LATIN SMALL LETTER A WITH TILDE
+&#228;&#228; LATIN SMALL LETTER A WITH DIAERESIS
+&#229;&#229; LATIN SMALL LETTER A WITH RING ABOVE
+&#230;&#230; LATIN SMALL LETTER AE
+&#231;&#231; LATIN SMALL LETTER C WITH CEDILLA
+&#232;&#232; LATIN SMALL LETTER E WITH GRAVE
+&#233;&#233; LATIN SMALL LETTER E WITH ACUTE
+&#234;&#234; LATIN SMALL LETTER E WITH CIRCUMFLEX
+&#235;&#235; LATIN SMALL LETTER E WITH DIAERESIS
+&#236;&#236; LATIN SMALL LETTER I WITH GRAVE
+&#237;&#237; LATIN SMALL LETTER I WITH ACUTE
+&#238;&#238; LATIN SMALL LETTER I WITH CIRCUMFLEX
+&#239;&#239; LATIN SMALL LETTER I WITH DIAERESIS
+&#241;&#241; LATIN SMALL LETTER N WITH TILDE
+&#242;&#242; LATIN SMALL LETTER O WITH GRAVE
+&#243;&#243; LATIN SMALL LETTER O WITH ACUTE
+&#244;&#244; LATIN SMALL LETTER O WITH CIRCUMFLEX
+&#245;&#245; LATIN SMALL LETTER O WITH TILDE
+&#246;&#246; LATIN SMALL LETTER O WITH DIAERESIS
+&#247;&#247;&#247; DIVISION SIGN
+&#248;&#248; LATIN SMALL LETTER O WITH STROKE
+&#249;&#249; LATIN SMALL LETTER U WITH GRAVE
+&#250;&#250; LATIN SMALL LETTER U WITH ACUTE
+&#251;&#251; LATIN SMALL LETTER U WITH CIRCUMFLEX
+&#252;&#252; LATIN SMALL LETTER U WITH DIAERESIS
+&#253; LATIN SMALL LETTER Y WITH ACUTE
+&#255;&#255; LATIN SMALL LETTER Y WITH DIAERESIS
+ENDTEST
diff --git a/regress/char/unicode/latin1.out_utf8 b/regress/char/unicode/latin1.out_utf8
new file mode 100644
index 00000000..5fcc6dda
--- /dev/null
+++ b/regress/char/unicode/latin1.out_utf8
@@ -0,0 +1,98 @@
+CHAR-UNICODE-LATIN1(1) General Commands Manual CHAR-UNICODE-LATIN1(1)
+
+
+
+NNAAMMEE
+ char-unicode-latin1 - Unicode characters in the ISO-8859-1 range
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ ¢¢ CENT SIGN
+ ¤¤ CURRENCY SIGN
+ ¥¥ YEN SIGN
+ ¦¦ BROKEN BAR
+ ¨¨ DIAERESIS
+ ©© COPYRIGHT SIGN
+ ª FEMININE ORDINAL INDICATOR
+ «« LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ¬¬¬ NOT SIGN
+ ­ SOFT HYPHEN
+ ®® REGISTERED SIGN
+ ±±± PLUS-MINUS SIGN
+ ² SUPERSCRIPT TWO
+ ³ SUPERSCRIPT THREE
+ ´´´ ACUTE ACCENT
+ µµ MICRO SIGN
+ ·· MIDDLE DOT
+ ¸¸ CEDILLA
+ ¹ SUPERSCRIPT ONE
+ º MASCULINE ORDINAL INDICATOR
+ »» RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ ¼¼ VULGAR FRACTION ONE QUARTER
+ ½½ VULGAR FRACTION ONE HALF
+ ¾¾ VULGAR FRACTION THREE QUARTERS
+ ÀÀ LATIN CAPITAL LETTER A WITH GRAVE
+ ÁÁ LATIN CAPITAL LETTER A WITH ACUTE
+ ÂÂ LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ ÃÃ LATIN CAPITAL LETTER A WITH TILDE
+ ÄÄ LATIN CAPITAL LETTER A WITH DIAERESIS
+ ÅÅ LATIN CAPITAL LETTER A WITH RING ABOVE
+ ÆÆ LATIN CAPITAL LETTER AE
+ ÇÇ LATIN CAPITAL LETTER C WITH CEDILLA
+ ÈÈ LATIN CAPITAL LETTER E WITH GRAVE
+ ÉÉ LATIN CAPITAL LETTER E WITH ACUTE
+ ÊÊ LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ ËË LATIN CAPITAL LETTER E WITH DIAERESIS
+ ÌÌ LATIN CAPITAL LETTER I WITH GRAVE
+ ÍÍ LATIN CAPITAL LETTER I WITH ACUTE
+ ÎÎ LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ ÏÏ LATIN CAPITAL LETTER I WITH DIAERESIS
+ ÐÐ LATIN CAPITAL LETTER ETH
+ ÑÑ LATIN CAPITAL LETTER N WITH TILDE
+ ÒÒ LATIN CAPITAL LETTER O WITH GRAVE
+ ÓÓ LATIN CAPITAL LETTER O WITH ACUTE
+ ÔÔ LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+ ÕÕ LATIN CAPITAL LETTER O WITH TILDE
+ ÖÖ LATIN CAPITAL LETTER O WITH DIAERESIS
+ ××× MULTIPLICATION SIGN
+ ØØ LATIN CAPITAL LETTER O WITH STROKE
+ ÙÙ LATIN CAPITAL LETTER U WITH GRAVE
+ ÚÚ LATIN CAPITAL LETTER U WITH ACUTE
+ ÛÛ LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+ ÜÜ LATIN CAPITAL LETTER U WITH DIAERESIS
+ Ý LATIN CAPITAL LETTER Y WITH ACUTE
+ àà LATIN SMALL LETTER A WITH GRAVE
+ áá LATIN SMALL LETTER A WITH ACUTE
+ ââ LATIN SMALL LETTER A WITH CIRCUMFLEX
+ ãã LATIN SMALL LETTER A WITH TILDE
+ ää LATIN SMALL LETTER A WITH DIAERESIS
+ åå LATIN SMALL LETTER A WITH RING ABOVE
+ ææ LATIN SMALL LETTER AE
+ çç LATIN SMALL LETTER C WITH CEDILLA
+ èè LATIN SMALL LETTER E WITH GRAVE
+ éé LATIN SMALL LETTER E WITH ACUTE
+ êê LATIN SMALL LETTER E WITH CIRCUMFLEX
+ ëë LATIN SMALL LETTER E WITH DIAERESIS
+ ìì LATIN SMALL LETTER I WITH GRAVE
+ íí LATIN SMALL LETTER I WITH ACUTE
+ îî LATIN SMALL LETTER I WITH CIRCUMFLEX
+ ïï LATIN SMALL LETTER I WITH DIAERESIS
+ ññ LATIN SMALL LETTER N WITH TILDE
+ òò LATIN SMALL LETTER O WITH GRAVE
+ óó LATIN SMALL LETTER O WITH ACUTE
+ ôô LATIN SMALL LETTER O WITH CIRCUMFLEX
+ õõ LATIN SMALL LETTER O WITH TILDE
+ öö LATIN SMALL LETTER O WITH DIAERESIS
+ ÷÷÷ DIVISION SIGN
+ øø LATIN SMALL LETTER O WITH STROKE
+ ùù LATIN SMALL LETTER U WITH GRAVE
+ úú LATIN SMALL LETTER U WITH ACUTE
+ ûû LATIN SMALL LETTER U WITH CIRCUMFLEX
+ üü LATIN SMALL LETTER U WITH DIAERESIS
+ ý LATIN SMALL LETTER Y WITH ACUTE
+ ÿÿ LATIN SMALL LETTER Y WITH DIAERESIS
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-LATIN1(1)
diff --git a/regress/char/unicode/latin1diff.in b/regress/char/unicode/latin1diff.in
new file mode 100644
index 00000000..f0e255b5
--- /dev/null
+++ b/regress/char/unicode/latin1diff.in
@@ -0,0 +1,19 @@
+.TH CHAR-UNICODE-LATIN1DIFF 1 "October 27, 2014" OpenBSD
+.SH NAME
+char-unicode-latin1diff \- Unicode characters in the ISO-8859-1 range
+.SH DESCRIPTION
+.nf
+BEGINTEST
+\[u00A1]\(r! INVERTED EXCLAMATION MARK
+\[u00A3]\(Po POUND SIGN
+\[u00A7]\(sc SECTION SIGN
+\[u00AF]\(a- MACRON
+\[u00B0]\(de DEGREE SIGN
+\[u00B6]\(ps PILCROW SIGN
+\[u00BF]\(r? INVERTED QUESTION MARK
+\[u00DE]\(TP LATIN CAPITAL LETTER THORN
+\[u00DF]\(ss LATIN SMALL LETTER SHARP S
+\[u00F0]\(Sd LATIN SMALL LETTER ETH
+\[u00FE]\(Tp LATIN SMALL LETTER THORN
+ENDTEST
+.fi
diff --git a/regress/char/unicode/latin1diff.out_ascii b/regress/char/unicode/latin1diff.out_ascii
new file mode 100644
index 00000000..94095dd9
--- /dev/null
+++ b/regress/char/unicode/latin1diff.out_ascii
@@ -0,0 +1,25 @@
+CHAR-UNICODE-LATIN1DIFF(1) General Commands Manual CHAR-UNICODE-LATIN1DIFF(1)
+
+
+
+NNAAMMEE
+ char-unicode-latin1diff - Unicode characters in the ISO-8859-1 range
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ !! INVERTED EXCLAMATION MARK
+ GBPGBP POUND SIGN
+ <sec><sec> SECTION SIGN
+ -- MACRON
+ <deg><deg> DEGREE SIGN
+ <par><par> PILCROW SIGN
+ ?? INVERTED QUESTION MARK
+ ThTh LATIN CAPITAL LETTER THORN
+ ssss LATIN SMALL LETTER SHARP S
+ dd LATIN SMALL LETTER ETH
+ thth LATIN SMALL LETTER THORN
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-LATIN1DIFF(1)
diff --git a/regress/char/unicode/latin1diff.out_html b/regress/char/unicode/latin1diff.out_html
new file mode 100644
index 00000000..8d3265c7
--- /dev/null
+++ b/regress/char/unicode/latin1diff.out_html
@@ -0,0 +1,13 @@
+BEGINTEST
+&#161;&#161; INVERTED EXCLAMATION MARK
+&#163;&#163; POUND SIGN
+&#167;&#167; SECTION SIGN
+&#175;&#175; MACRON
+&#176;&#176; DEGREE SIGN
+&#182;&#182; PILCROW SIGN
+&#191;&#191; INVERTED QUESTION MARK
+&#222;&#222; LATIN CAPITAL LETTER THORN
+&#223;&#223; LATIN SMALL LETTER SHARP S
+&#240;&#240; LATIN SMALL LETTER ETH
+&#254;&#254; LATIN SMALL LETTER THORN
+ENDTEST
diff --git a/regress/char/unicode/latin1diff.out_utf8 b/regress/char/unicode/latin1diff.out_utf8
new file mode 100644
index 00000000..58bb0c08
--- /dev/null
+++ b/regress/char/unicode/latin1diff.out_utf8
@@ -0,0 +1,25 @@
+CHAR-UNICODE-LATIN1DIFF(1) General Commands Manual CHAR-UNICODE-LATIN1DIFF(1)
+
+
+
+NNAAMMEE
+ char-unicode-latin1diff - Unicode characters in the ISO-8859-1 range
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ ¡¡ INVERTED EXCLAMATION MARK
+ ££ POUND SIGN
+ §§ SECTION SIGN
+ ¯¯ MACRON
+ °° DEGREE SIGN
+ ¶¶ PILCROW SIGN
+ ¿¿ INVERTED QUESTION MARK
+ ÞÞ LATIN CAPITAL LETTER THORN
+ ßß LATIN SMALL LETTER SHARP S
+ ðð LATIN SMALL LETTER ETH
+ þþ LATIN SMALL LETTER THORN
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-LATIN1DIFF(1)
diff --git a/regress/char/unicode/man.in b/regress/char/unicode/man.in
new file mode 100644
index 00000000..56148b72
--- /dev/null
+++ b/regress/char/unicode/man.in
@@ -0,0 +1,12 @@
+.TH CHAR-UNICODE-MAN 1 "October 13, 2014" OpenBSD
+.SH NAME
+char-unicode-mdoc \- unicode characters in man code
+.SH DESCRIPTION
+Copyright symbol: \[u00A9] = \C'u00A9'
+.PP
+m-dash: \[u2014] = \C'u2014'
+.PP
+nabla: \[u1D6C1] = \C'u1D6C1'
+.PP
+not really Unicode:
+up arrows: \(ua\(uA = \[ua]\[uA] = \C'ua'\C'uA'
diff --git a/regress/char/unicode/man.out_utf8 b/regress/char/unicode/man.out_utf8
new file mode 100644
index 00000000..8ed9d2ee
--- /dev/null
+++ b/regress/char/unicode/man.out_utf8
@@ -0,0 +1,19 @@
+CHAR-UNICODE-MAN(1) General Commands Manual CHAR-UNICODE-MAN(1)
+
+
+
+NNAAMMEE
+ char-unicode-mdoc - unicode characters in man code
+
+DDEESSCCRRIIPPTTIIOONN
+ Copyright symbol: © = ©
+
+ m-dash: — = —
+
+ nabla: 𝛁 = 𝛁
+
+ not really Unicode: up arrows: ↑⇑ = ↑⇑ = ↑⇑
+
+
+
+OpenBSD October 13, 2014 CHAR-UNICODE-MAN(1)
diff --git a/regress/char/unicode/mdoc.in b/regress/char/unicode/mdoc.in
new file mode 100644
index 00000000..2a7af346
--- /dev/null
+++ b/regress/char/unicode/mdoc.in
@@ -0,0 +1,15 @@
+.Dd October 13, 2014
+.Dt CHAR-UNICODE-MDOC 1
+.Os OpenBSD
+.Sh NAME
+.Nm char-unicode-mdoc
+.Nd unicode characters in mdoc code
+.Sh DESCRIPTION
+Copyright symbol: \[u00A9] = \C'u00A9'
+.Pp
+m-dash: \[u2014] = \C'u2014'
+.Pp
+nabla: \[u1D6C1] = \C'u1D6C1'
+.Pp
+not really Unicode:
+up arrows: \(ua\(uA = \[ua]\[uA] = \C'ua'\C'uA'
diff --git a/regress/char/unicode/mdoc.out_utf8 b/regress/char/unicode/mdoc.out_utf8
new file mode 100644
index 00000000..7b0d13aa
--- /dev/null
+++ b/regress/char/unicode/mdoc.out_utf8
@@ -0,0 +1,15 @@
+CHAR-UNICODE-MDOC(1) General Commands Manual CHAR-UNICODE-MDOC(1)
+
+NNAAMMEE
+ cchhaarr--uunniiccooddee--mmddoocc – unicode characters in mdoc code
+
+DDEESSCCRRIIPPTTIIOONN
+ Copyright symbol: © = ©
+
+ m-dash: — = —
+
+ nabla: 𝛁 = 𝛁
+
+ not really Unicode: up arrows: ↑⇑ = ↑⇑ = ↑⇑
+
+OpenBSD October 13, 2014 OpenBSD
diff --git a/regress/char/unicode/named.in b/regress/char/unicode/named.in
new file mode 100644
index 00000000..5644d325
--- /dev/null
+++ b/regress/char/unicode/named.in
@@ -0,0 +1,155 @@
+.TH CHAR-UNICODE-NAMED 1 "October 27, 2014" OpenBSD
+.SH NAME
+char-unicode-named \- Unicode characters having named escapes
+.SH DESCRIPTION
+.nf
+BEGINTEST
+\[u0131]\(.i LATIN SMALL LETTER DOTLESS I
+\[u0132]\(IJ LATIN CAPITAL LIGATURE IJ
+\[u0133]\(ij LATIN SMALL LIGATURE IJ
+\[u0141]\(/L LATIN CAPITAL LETTER L WITH STROKE
+\[u0142]\(/l LATIN SMALL LETTER L WITH STROKE
+\[u0152]\(OE LATIN CAPITAL LIGATURE OE
+\[u0153]\(oe LATIN SMALL LIGATURE OE
+\[u0192]\(Fn LATIN SMALL LETTER F WITH HOOK
+\[u02C7]\(ah CARON
+\[u02D8]\(ab BREVE
+\[u02DA]\(ao RING ABOVE
+\[u02DB]\(ho OGONEK
+\[u02DD]\(a" DOUBLE ACUTE ACCENT
+\[u0391]\(*A GREEK CAPITAL LETTER ALPHA
+\[u0392]\(*B GREEK CAPITAL LETTER BETA
+\[u0394]\(*D GREEK CAPITAL LETTER DELTA
+\[u0395]\(*E GREEK CAPITAL LETTER EPSILON
+\[u0396]\(*Z GREEK CAPITAL LETTER ZETA
+\[u0397]\(*Y GREEK CAPITAL LETTER ETA
+\[u0398]\(*H GREEK CAPITAL LETTER THETA
+\[u0399]\(*I GREEK CAPITAL LETTER IOTA
+\[u039A]\(*K GREEK CAPITAL LETTER KAPPA
+\[u039B]\(*L GREEK CAPITAL LETTER LAMDA
+\[u039C]\(*M GREEK CAPITAL LETTER MU
+\[u039D]\(*N GREEK CAPITAL LETTER NU
+\[u039E]\(*C GREEK CAPITAL LETTER XI
+\[u039F]\(*O GREEK CAPITAL LETTER OMICRON
+\[u03A0]\(*P GREEK CAPITAL LETTER PI
+\[u03A1]\(*R GREEK CAPITAL LETTER RHO
+\[u03A4]\(*T GREEK CAPITAL LETTER TAU
+\[u03A5]\(*U GREEK CAPITAL LETTER UPSILON
+\[u03A6]\(*F GREEK CAPITAL LETTER PHI
+\[u03A7]\(*X GREEK CAPITAL LETTER CHI
+\[u03A8]\(*Q GREEK CAPITAL LETTER PSI
+\[u03A9]\(*W GREEK CAPITAL LETTER OMEGA
+\[u03B1]\(*a GREEK SMALL LETTER ALPHA
+\[u03B2]\(*b GREEK SMALL LETTER BETA
+\[u03B3]\(*g GREEK SMALL LETTER GAMMA
+\[u03B4]\(*d GREEK SMALL LETTER DELTA
+\[u03B5]\(*e GREEK SMALL LETTER EPSILON
+\[u03B6]\(*z GREEK SMALL LETTER ZETA
+\[u03B7]\(*y GREEK SMALL LETTER ETA
+\[u03B8]\(*h GREEK SMALL LETTER THETA
+\[u03B9]\(*i GREEK SMALL LETTER IOTA
+\[u03BA]\(*k GREEK SMALL LETTER KAPPA
+\[u03BB]\(*l GREEK SMALL LETTER LAMDA
+\[u03BC]\(*m GREEK SMALL LETTER MU
+\[u03BD]\(*n GREEK SMALL LETTER NU
+\[u03BE]\(*c GREEK SMALL LETTER XI
+\[u03BF]\(*o GREEK SMALL LETTER OMICRON
+\[u03C0]\(*p GREEK SMALL LETTER PI
+\[u03C1]\(*r GREEK SMALL LETTER RHO
+\[u03C2]\(ts GREEK SMALL LETTER FINAL SIGMA
+\[u03C3]\(*s GREEK SMALL LETTER SIGMA
+\[u03C4]\(*t GREEK SMALL LETTER TAU
+\[u03C5]\(*u GREEK SMALL LETTER UPSILON
+\[u03C6]\(+f GREEK SMALL LETTER PHI
+\[u03C7]\(*x GREEK SMALL LETTER CHI
+\[u03C8]\(*q GREEK SMALL LETTER PSI
+\[u03C9]\(*w GREEK SMALL LETTER OMEGA
+\[u03D1]\(+h GREEK THETA SYMBOL
+\[u03D5]\(*f GREEK PHI SYMBOL
+\[u03D6]\(+p GREEK PI SYMBOL
+\[u03F5]\(+e GREEK LUNATE EPSILON SYMBOL
+\[u2010]\(hy HYPHEN
+\[u2013]\(en EN DASH
+\[u2014]\(em EM DASH
+\[u2018]\(oq LEFT SINGLE QUOTATION MARK
+\[u2019]\(cq RIGHT SINGLE QUOTATION MARK
+\[u201A]\(bq SINGLE LOW-9 QUOTATION MARK
+\[u201C]\(lq LEFT DOUBLE QUOTATION MARK
+\[u201D]\(rq RIGHT DOUBLE QUOTATION MARK
+\[u201E]\(Bq DOUBLE LOW-9 QUOTATION MARK
+\[u2020]\(dg DAGGER
+\[u2021]\(dd DOUBLE DAGGER
+\[u2022]\(bu BULLET
+\[u2030]\(%0 PER MILLE SIGN
+\[u2032]\(fm PRIME
+\[u2033]\(sd DOUBLE PRIME
+\[u2039]\(fo SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+\[u203A]\(fc SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+\[u2044]\(f/ FRACTION SLASH
+\[u20AC]\(Eu\(eu EURO SIGN
+\[u2111]\(Im BLACK-LETTER CAPITAL I
+\[u211C]\(Re BLACK-LETTER CAPITAL R
+\[u2122]\(tm TRADE MARK SIGN
+\[u2135]\(Ah ALEF SYMBOL
+\[u2190]\(<- LEFTWARDS ARROW
+\[u2191]\(ua UPWARDS ARROW
+\[u2192]\(-> RIGHTWARDS ARROW
+\[u2193]\(da DOWNWARDS ARROW
+\[u2194]\(<> LEFT RIGHT ARROW
+\[u21B5]\(CR DOWNWARDS ARROW WITH CORNER LEFTWARDS
+\[u21D0]\(lA LEFTWARDS DOUBLE ARROW
+\[u21D1]\(uA UPWARDS DOUBLE ARROW
+\[u21D2]\(rA RIGHTWARDS DOUBLE ARROW
+\[u21D3]\(dA DOWNWARDS DOUBLE ARROW
+\[u21D4]\(hA LEFT RIGHT DOUBLE ARROW
+\[u2200]\(fa FOR ALL
+\[u2202]\(pd PARTIAL DIFFERENTIAL
+\[u2203]\(te THERE EXISTS
+\[u2205]\(es EMPTY SET
+\[u2208]\(mo ELEMENT OF
+\[u220B]\(st CONTAINS AS MEMBER
+\[u2212]\(mi MINUS SIGN
+\[u2213]\(-+ MINUS-OR-PLUS SIGN
+\[u2217]\(** ASTERISK OPERATOR
+\[u221A]\(sr SQUARE ROOT
+\[u221D]\(pt PROPORTIONAL TO
+\[u221E]\(if INFINITY
+\[u2220]\(/_ ANGLE
+\[u2227]\(AN LOGICAL AND
+\[u2228]\(OR LOGICAL OR
+\[u2229]\(ca INTERSECTION
+\[u222A]\(cu UNION
+\[u222B]\(is INTEGRAL
+\[u2234]\(tf\(3d THEREFORE
+\[u223C]\(ap TILDE OPERATOR
+\[u2243]\(|= ASYMPTOTICALLY EQUAL TO
+\[u2245]\(=~ APPROXIMATELY EQUAL TO
+\[u2248]\(~~\(~= ALMOST EQUAL TO
+\[u2260]\(!= NOT EQUAL TO
+\[u2261]\(== IDENTICAL TO
+\[u2262]\(ne NOT IDENTICAL TO
+\[u2264]\(<= LESS-THAN OR EQUAL TO
+\[u2265]\(>= GREATER-THAN OR EQUAL TO
+\[u2282]\(sb SUBSET OF
+\[u2283]\(sp SUPERSET OF
+\[u2286]\(ib SUBSET OF OR EQUAL TO
+\[u2287]\(ip SUPERSET OF OR EQUAL TO
+\[u2295]\(c+ CIRCLED PLUS
+\[u2297]\(c* CIRCLED TIMES
+\[u22A5]\(pp UP TACK
+\[u22C5]\(md DOT OPERATOR
+\[u2308]\(lc LEFT CEILING
+\[u2309]\(rc RIGHT CEILING
+\[u230A]\(lf LEFT FLOOR
+\[u230B]\(rf RIGHT FLOOR
+\[u23AA]\(bv CURLY BRACKET EXTENSION
+\[u2502]\(br BOX DRAWINGS LIGHT VERTICAL
+\[u25A1]\(sq WHITE SQUARE
+\[u25CA]\(lz LOZENGE
+\[u25CB]\(ci WHITE CIRCLE
+\[u261C]\(lh WHITE LEFT POINTING INDEX
+\[u261E]\(rh WHITE RIGHT POINTING INDEX
+\[u27E8]\(la MATHEMATICAL LEFT ANGLE BRACKET
+\[u27E9]\(ra MATHEMATICAL RIGHT ANGLE BRACKET
+ENDTEST
+.fi
diff --git a/regress/char/unicode/named.out_ascii b/regress/char/unicode/named.out_ascii
new file mode 100644
index 00000000..3f92caf1
--- /dev/null
+++ b/regress/char/unicode/named.out_ascii
@@ -0,0 +1,161 @@
+CHAR-UNICODE-NAMED(1) General Commands Manual CHAR-UNICODE-NAMED(1)
+
+
+
+NNAAMMEE
+ char-unicode-named - Unicode characters having named escapes
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ ii LATIN SMALL LETTER DOTLESS I
+ IJIJ LATIN CAPITAL LIGATURE IJ
+ ijij LATIN SMALL LIGATURE IJ
+ /L/L LATIN CAPITAL LETTER L WITH STROKE
+ /l/l LATIN SMALL LETTER L WITH STROKE
+ OEOE LATIN CAPITAL LIGATURE OE
+ oeoe LATIN SMALL LIGATURE OE
+ ,f,f LATIN SMALL LETTER F WITH HOOK
+ vv CARON
+ '`'` BREVE
+ oo RING ABOVE
+ ,, OGONEK
+ "" DOUBLE ACUTE ACCENT
+ AA GREEK CAPITAL LETTER ALPHA
+ BB GREEK CAPITAL LETTER BETA
+ _/_\_/_\ GREEK CAPITAL LETTER DELTA
+ EE GREEK CAPITAL LETTER EPSILON
+ ZZ GREEK CAPITAL LETTER ZETA
+ HH GREEK CAPITAL LETTER ETA
+ -O-O GREEK CAPITAL LETTER THETA
+ II GREEK CAPITAL LETTER IOTA
+ KK GREEK CAPITAL LETTER KAPPA
+ /\/\ GREEK CAPITAL LETTER LAMDA
+ MM GREEK CAPITAL LETTER MU
+ NN GREEK CAPITAL LETTER NU
+ _H_H GREEK CAPITAL LETTER XI
+ OO GREEK CAPITAL LETTER OMICRON
+ TTTT GREEK CAPITAL LETTER PI
+ PP GREEK CAPITAL LETTER RHO
+ TT GREEK CAPITAL LETTER TAU
+ YY GREEK CAPITAL LETTER UPSILON
+ IOIO GREEK CAPITAL LETTER PHI
+ XX GREEK CAPITAL LETTER CHI
+ IYIY GREEK CAPITAL LETTER PSI
+ _O_O GREEK CAPITAL LETTER OMEGA
+ aa GREEK SMALL LETTER ALPHA
+ BB GREEK SMALL LETTER BETA
+ yy GREEK SMALL LETTER GAMMA
+ dd GREEK SMALL LETTER DELTA
+ ee GREEK SMALL LETTER EPSILON
+ ,C,C GREEK SMALL LETTER ZETA
+ nn GREEK SMALL LETTER ETA
+ -0-0 GREEK SMALL LETTER THETA
+ ii GREEK SMALL LETTER IOTA
+ kk GREEK SMALL LETTER KAPPA
+ >\>\ GREEK SMALL LETTER LAMDA
+ ,u,u GREEK SMALL LETTER MU
+ vv GREEK SMALL LETTER NU
+ ,E,E GREEK SMALL LETTER XI
+ oo GREEK SMALL LETTER OMICRON
+ -n-n GREEK SMALL LETTER PI
+ pp GREEK SMALL LETTER RHO
+ ss GREEK SMALL LETTER FINAL SIGMA
+ -o-o GREEK SMALL LETTER SIGMA
+ ~t~t GREEK SMALL LETTER TAU
+ uu GREEK SMALL LETTER UPSILON
+ |o|o GREEK SMALL LETTER PHI
+ xx GREEK SMALL LETTER CHI
+ |u|u GREEK SMALL LETTER PSI
+ ww GREEK SMALL LETTER OMEGA
+ -0-0 GREEK THETA SYMBOL
+ |o|o GREEK PHI SYMBOL
+ -w-w GREEK PI SYMBOL
+ ee GREEK LUNATE EPSILON SYMBOL
+ -- HYPHEN
+ -- EN DASH
+ ---- EM DASH
+ `` LEFT SINGLE QUOTATION MARK
+ '' RIGHT SINGLE QUOTATION MARK
+ ,, SINGLE LOW-9 QUOTATION MARK
+ "" LEFT DOUBLE QUOTATION MARK
+ "" RIGHT DOUBLE QUOTATION MARK
+ ,,,, DOUBLE LOW-9 QUOTATION MARK
+ |-|- DAGGER
+ |=|= DOUBLE DAGGER
+ +o+o BULLET
+ %o%o PER MILLE SIGN
+ '' PRIME
+ '''' DOUBLE PRIME
+ << SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ >> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ // FRACTION SLASH
+ EUREUREUR EURO SIGN
+ II BLACK-LETTER CAPITAL I
+ RR BLACK-LETTER CAPITAL R
+ tmtm TRADE MARK SIGN
+ NN ALEF SYMBOL
+ <-<- LEFTWARDS ARROW
+ |^|^ UPWARDS ARROW
+ ->-> RIGHTWARDS ARROW
+ |v|v DOWNWARDS ARROW
+ <-><-> LEFT RIGHT ARROW
+ _|_| DOWNWARDS ARROW WITH CORNER LEFTWARDS
+ <=<= LEFTWARDS DOUBLE ARROW
+ =^=^ UPWARDS DOUBLE ARROW
+ =>=> RIGHTWARDS DOUBLE ARROW
+ =v=v DOWNWARDS DOUBLE ARROW
+ <=><=> LEFT RIGHT DOUBLE ARROW
+ -V-V FOR ALL
+ aa PARTIAL DIFFERENTIAL
+ 33 THERE EXISTS
+ {}{} EMPTY SET
+ EE ELEMENT OF
+ -)-) CONTAINS AS MEMBER
+ -- MINUS SIGN
+ -+-+ MINUS-OR-PLUS SIGN
+ ** ASTERISK OPERATOR
+ \/\/ SQUARE ROOT
+ ococ PROPORTIONAL TO
+ oooo INFINITY
+ _/_/ ANGLE
+ ^^ LOGICAL AND
+ vv LOGICAL OR
+ (^)(^) INTERSECTION
+ UU UNION
+ ',I',I INTEGRAL
+ .:..:..:. THEREFORE
+ ~~ TILDE OPERATOR
+ -~-~ ASYMPTOTICALLY EQUAL TO
+ =~=~ APPROXIMATELY EQUAL TO
+ ~~~~~= ALMOST EQUAL TO
+ !=!= NOT EQUAL TO
+ ==== IDENTICAL TO
+ !==!== NOT IDENTICAL TO
+ <=<= LESS-THAN OR EQUAL TO
+ >=>= GREATER-THAN OR EQUAL TO
+ (=(= SUBSET OF
+ =)=) SUPERSET OF
+ (=_(=_ SUBSET OF OR EQUAL TO
+ =_)=_) SUPERSET OF OR EQUAL TO
+ O+O+ CIRCLED PLUS
+ OxOx CIRCLED TIMES
+ _|_| UP TACK
+ .. DOT OPERATOR
+ |~|~ LEFT CEILING
+ ~|~| RIGHT CEILING
+ |_|_ LEFT FLOOR
+ _|_| RIGHT FLOOR
+ || CURLY BRACKET EXTENSION
+ || BOX DRAWINGS LIGHT VERTICAL
+ [][] WHITE SQUARE
+ <><> LOZENGE
+ OO WHITE CIRCLE
+ <=<= WHITE LEFT POINTING INDEX
+ =>=> WHITE RIGHT POINTING INDEX
+ << MATHEMATICAL LEFT ANGLE BRACKET
+ >> MATHEMATICAL RIGHT ANGLE BRACKET
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-NAMED(1)
diff --git a/regress/char/unicode/named.out_html b/regress/char/unicode/named.out_html
new file mode 100644
index 00000000..c4de9a5b
--- /dev/null
+++ b/regress/char/unicode/named.out_html
@@ -0,0 +1,149 @@
+BEGINTEST
+&#305;&#305; LATIN SMALL LETTER DOTLESS I
+&#306;&#306; LATIN CAPITAL LIGATURE IJ
+&#307;&#307; LATIN SMALL LIGATURE IJ
+&#321;&#321; LATIN CAPITAL LETTER L WITH STROKE
+&#322;&#322; LATIN SMALL LETTER L WITH STROKE
+&#338;&#338; LATIN CAPITAL LIGATURE OE
+&#339;&#339; LATIN SMALL LIGATURE OE
+&#402;&#402; LATIN SMALL LETTER F WITH HOOK
+&#711;&#711; CARON
+&#728;&#728; BREVE
+&#730;&#730; RING ABOVE
+&#731;&#731; OGONEK
+&#733;&#733; DOUBLE ACUTE ACCENT
+&#913;&#913; GREEK CAPITAL LETTER ALPHA
+&#914;&#914; GREEK CAPITAL LETTER BETA
+&#916;&#916; GREEK CAPITAL LETTER DELTA
+&#917;&#917; GREEK CAPITAL LETTER EPSILON
+&#918;&#918; GREEK CAPITAL LETTER ZETA
+&#919;&#919; GREEK CAPITAL LETTER ETA
+&#920;&#920; GREEK CAPITAL LETTER THETA
+&#921;&#921; GREEK CAPITAL LETTER IOTA
+&#922;&#922; GREEK CAPITAL LETTER KAPPA
+&#923;&#923; GREEK CAPITAL LETTER LAMDA
+&#924;&#924; GREEK CAPITAL LETTER MU
+&#925;&#925; GREEK CAPITAL LETTER NU
+&#926;&#926; GREEK CAPITAL LETTER XI
+&#927;&#927; GREEK CAPITAL LETTER OMICRON
+&#928;&#928; GREEK CAPITAL LETTER PI
+&#929;&#929; GREEK CAPITAL LETTER RHO
+&#932;&#932; GREEK CAPITAL LETTER TAU
+&#933;&#933; GREEK CAPITAL LETTER UPSILON
+&#934;&#934; GREEK CAPITAL LETTER PHI
+&#935;&#935; GREEK CAPITAL LETTER CHI
+&#936;&#936; GREEK CAPITAL LETTER PSI
+&#937;&#937; GREEK CAPITAL LETTER OMEGA
+&#945;&#945; GREEK SMALL LETTER ALPHA
+&#946;&#946; GREEK SMALL LETTER BETA
+&#947;&#947; GREEK SMALL LETTER GAMMA
+&#948;&#948; GREEK SMALL LETTER DELTA
+&#949;&#949; GREEK SMALL LETTER EPSILON
+&#950;&#950; GREEK SMALL LETTER ZETA
+&#951;&#951; GREEK SMALL LETTER ETA
+&#952;&#952; GREEK SMALL LETTER THETA
+&#953;&#953; GREEK SMALL LETTER IOTA
+&#954;&#954; GREEK SMALL LETTER KAPPA
+&#955;&#955; GREEK SMALL LETTER LAMDA
+&#956;&#956; GREEK SMALL LETTER MU
+&#957;&#957; GREEK SMALL LETTER NU
+&#958;&#958; GREEK SMALL LETTER XI
+&#959;&#959; GREEK SMALL LETTER OMICRON
+&#960;&#960; GREEK SMALL LETTER PI
+&#961;&#961; GREEK SMALL LETTER RHO
+&#962;&#962; GREEK SMALL LETTER FINAL SIGMA
+&#963;&#963; GREEK SMALL LETTER SIGMA
+&#964;&#964; GREEK SMALL LETTER TAU
+&#965;&#965; GREEK SMALL LETTER UPSILON
+&#966;&#966; GREEK SMALL LETTER PHI
+&#967;&#967; GREEK SMALL LETTER CHI
+&#968;&#968; GREEK SMALL LETTER PSI
+&#969;&#969; GREEK SMALL LETTER OMEGA
+&#977;&#977; GREEK THETA SYMBOL
+&#981;&#981; GREEK PHI SYMBOL
+&#982;&#982; GREEK PI SYMBOL
+&#1013;&#1013; GREEK LUNATE EPSILON SYMBOL
+&#8208;&#8208; HYPHEN
+&#8211;&#8211; EN DASH
+&#8212;&#8212; EM DASH
+&#8216;&#8216; LEFT SINGLE QUOTATION MARK
+&#8217;&#8217; RIGHT SINGLE QUOTATION MARK
+&#8218;&#8218; SINGLE LOW-9 QUOTATION MARK
+&#8220;&#8220; LEFT DOUBLE QUOTATION MARK
+&#8221;&#8221; RIGHT DOUBLE QUOTATION MARK
+&#8222;&#8222; DOUBLE LOW-9 QUOTATION MARK
+&#8224;&#8224; DAGGER
+&#8225;&#8225; DOUBLE DAGGER
+&#8226;&#8226; BULLET
+&#8240;&#8240; PER MILLE SIGN
+&#8242;&#8242; PRIME
+&#8243;&#8243; DOUBLE PRIME
+&#8249;&#8249; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+&#8250;&#8250; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+&#8260;&#8260; FRACTION SLASH
+&#8364;&#8364;&#8364; EURO SIGN
+&#8465;&#8465; BLACK-LETTER CAPITAL I
+&#8476;&#8476; BLACK-LETTER CAPITAL R
+&#8482;&#8482; TRADE MARK SIGN
+&#8501;&#8501; ALEF SYMBOL
+&#8592;&#8592; LEFTWARDS ARROW
+&#8593;&#8593; UPWARDS ARROW
+&#8594;&#8594; RIGHTWARDS ARROW
+&#8595;&#8595; DOWNWARDS ARROW
+&#8596;&#8596; LEFT RIGHT ARROW
+&#8629;&#8629; DOWNWARDS ARROW WITH CORNER LEFTWARDS
+&#8656;&#8656; LEFTWARDS DOUBLE ARROW
+&#8657;&#8657; UPWARDS DOUBLE ARROW
+&#8658;&#8658; RIGHTWARDS DOUBLE ARROW
+&#8659;&#8659; DOWNWARDS DOUBLE ARROW
+&#8660;&#8660; LEFT RIGHT DOUBLE ARROW
+&#8704;&#8704; FOR ALL
+&#8706;&#8706; PARTIAL DIFFERENTIAL
+&#8707;&#8707; THERE EXISTS
+&#8709;&#8709; EMPTY SET
+&#8712;&#8712; ELEMENT OF
+&#8715;&#8715; CONTAINS AS MEMBER
+&#8722;&#8722; MINUS SIGN
+&#8723;&#8723; MINUS-OR-PLUS SIGN
+&#8727;&#8727; ASTERISK OPERATOR
+&#8730;&#8730; SQUARE ROOT
+&#8733;&#8733; PROPORTIONAL TO
+&#8734;&#8734; INFINITY
+&#8736;&#8736; ANGLE
+&#8743;&#8743; LOGICAL AND
+&#8744;&#8744; LOGICAL OR
+&#8745;&#8745; INTERSECTION
+&#8746;&#8746; UNION
+&#8747;&#8747; INTEGRAL
+&#8756;&#8756;&#8756; THEREFORE
+&#8764;&#8764; TILDE OPERATOR
+&#8771;&#8771; ASYMPTOTICALLY EQUAL TO
+&#8773;&#8773; APPROXIMATELY EQUAL TO
+&#8776;&#8776;&#8776; ALMOST EQUAL TO
+&#8800;&#8800; NOT EQUAL TO
+&#8801;&#8801; IDENTICAL TO
+&#8802;&#8802; NOT IDENTICAL TO
+&#8804;&#8804; LESS-THAN OR EQUAL TO
+&#8805;&#8805; GREATER-THAN OR EQUAL TO
+&#8834;&#8834; SUBSET OF
+&#8835;&#8835; SUPERSET OF
+&#8838;&#8838; SUBSET OF OR EQUAL TO
+&#8839;&#8839; SUPERSET OF OR EQUAL TO
+&#8853;&#8853; CIRCLED PLUS
+&#8855;&#8855; CIRCLED TIMES
+&#8869;&#8869; UP TACK
+&#8901;&#8901; DOT OPERATOR
+&#8968;&#8968; LEFT CEILING
+&#8969;&#8969; RIGHT CEILING
+&#8970;&#8970; LEFT FLOOR
+&#8971;&#8971; RIGHT FLOOR
+&#9130;&#9130; CURLY BRACKET EXTENSION
+&#9474;&#9474; BOX DRAWINGS LIGHT VERTICAL
+&#9633;&#9633; WHITE SQUARE
+&#9674;&#9674; LOZENGE
+&#9675;&#9675; WHITE CIRCLE
+&#9756;&#9756; WHITE LEFT POINTING INDEX
+&#9758;&#9758; WHITE RIGHT POINTING INDEX
+&#10216;&#10216; MATHEMATICAL LEFT ANGLE BRACKET
+&#10217;&#10217; MATHEMATICAL RIGHT ANGLE BRACKET
+ENDTEST
diff --git a/regress/char/unicode/named.out_utf8 b/regress/char/unicode/named.out_utf8
new file mode 100644
index 00000000..3900ceb5
--- /dev/null
+++ b/regress/char/unicode/named.out_utf8
@@ -0,0 +1,161 @@
+CHAR-UNICODE-NAMED(1) General Commands Manual CHAR-UNICODE-NAMED(1)
+
+
+
+NNAAMMEE
+ char-unicode-named - Unicode characters having named escapes
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ ıı LATIN SMALL LETTER DOTLESS I
+ IJIJ LATIN CAPITAL LIGATURE IJ
+ ijij LATIN SMALL LIGATURE IJ
+ ŁŁ LATIN CAPITAL LETTER L WITH STROKE
+ łł LATIN SMALL LETTER L WITH STROKE
+ ŒŒ LATIN CAPITAL LIGATURE OE
+ œœ LATIN SMALL LIGATURE OE
+ ƒƒ LATIN SMALL LETTER F WITH HOOK
+ ˇˇ CARON
+ ˘˘ BREVE
+ ˚˚ RING ABOVE
+ ˛˛ OGONEK
+ ˝˝ DOUBLE ACUTE ACCENT
+ ΑΑ GREEK CAPITAL LETTER ALPHA
+ ΒΒ GREEK CAPITAL LETTER BETA
+ ΔΔ GREEK CAPITAL LETTER DELTA
+ ΕΕ GREEK CAPITAL LETTER EPSILON
+ ΖΖ GREEK CAPITAL LETTER ZETA
+ ΗΗ GREEK CAPITAL LETTER ETA
+ ΘΘ GREEK CAPITAL LETTER THETA
+ ΙΙ GREEK CAPITAL LETTER IOTA
+ ΚΚ GREEK CAPITAL LETTER KAPPA
+ ΛΛ GREEK CAPITAL LETTER LAMDA
+ ΜΜ GREEK CAPITAL LETTER MU
+ ΝΝ GREEK CAPITAL LETTER NU
+ ΞΞ GREEK CAPITAL LETTER XI
+ ΟΟ GREEK CAPITAL LETTER OMICRON
+ ΠΠ GREEK CAPITAL LETTER PI
+ ΡΡ GREEK CAPITAL LETTER RHO
+ ΤΤ GREEK CAPITAL LETTER TAU
+ ΥΥ GREEK CAPITAL LETTER UPSILON
+ ΦΦ GREEK CAPITAL LETTER PHI
+ ΧΧ GREEK CAPITAL LETTER CHI
+ ΨΨ GREEK CAPITAL LETTER PSI
+ ΩΩ GREEK CAPITAL LETTER OMEGA
+ αα GREEK SMALL LETTER ALPHA
+ ββ GREEK SMALL LETTER BETA
+ γγ GREEK SMALL LETTER GAMMA
+ δδ GREEK SMALL LETTER DELTA
+ εε GREEK SMALL LETTER EPSILON
+ ζζ GREEK SMALL LETTER ZETA
+ ηη GREEK SMALL LETTER ETA
+ θθ GREEK SMALL LETTER THETA
+ ιι GREEK SMALL LETTER IOTA
+ κκ GREEK SMALL LETTER KAPPA
+ λλ GREEK SMALL LETTER LAMDA
+ μμ GREEK SMALL LETTER MU
+ νν GREEK SMALL LETTER NU
+ ξξ GREEK SMALL LETTER XI
+ οο GREEK SMALL LETTER OMICRON
+ ππ GREEK SMALL LETTER PI
+ ρρ GREEK SMALL LETTER RHO
+ ςς GREEK SMALL LETTER FINAL SIGMA
+ σσ GREEK SMALL LETTER SIGMA
+ ττ GREEK SMALL LETTER TAU
+ υυ GREEK SMALL LETTER UPSILON
+ φφ GREEK SMALL LETTER PHI
+ χχ GREEK SMALL LETTER CHI
+ ψψ GREEK SMALL LETTER PSI
+ ωω GREEK SMALL LETTER OMEGA
+ ϑϑ GREEK THETA SYMBOL
+ ϕϕ GREEK PHI SYMBOL
+ ϖϖ GREEK PI SYMBOL
+ ϵϵ GREEK LUNATE EPSILON SYMBOL
+ ‐‐ HYPHEN
+ –– EN DASH
+ —— EM DASH
+ ‘‘ LEFT SINGLE QUOTATION MARK
+ ’’ RIGHT SINGLE QUOTATION MARK
+ ‚‚ SINGLE LOW-9 QUOTATION MARK
+ ““ LEFT DOUBLE QUOTATION MARK
+ ”” RIGHT DOUBLE QUOTATION MARK
+ „„ DOUBLE LOW-9 QUOTATION MARK
+ †† DAGGER
+ ‡‡ DOUBLE DAGGER
+ •• BULLET
+ ‰‰ PER MILLE SIGN
+ ′′ PRIME
+ ″″ DOUBLE PRIME
+ ‹‹ SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ ›› SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ ⁄⁄ FRACTION SLASH
+ €€€ EURO SIGN
+ ℑℑ BLACK-LETTER CAPITAL I
+ ℜℜ BLACK-LETTER CAPITAL R
+ ™™ TRADE MARK SIGN
+ ℵℵ ALEF SYMBOL
+ ←← LEFTWARDS ARROW
+ ↑↑ UPWARDS ARROW
+ →→ RIGHTWARDS ARROW
+ ↓↓ DOWNWARDS ARROW
+ ↔↔ LEFT RIGHT ARROW
+ ↵↵ DOWNWARDS ARROW WITH CORNER LEFTWARDS
+ ⇐⇐ LEFTWARDS DOUBLE ARROW
+ ⇑⇑ UPWARDS DOUBLE ARROW
+ ⇒⇒ RIGHTWARDS DOUBLE ARROW
+ ⇓⇓ DOWNWARDS DOUBLE ARROW
+ ⇔⇔ LEFT RIGHT DOUBLE ARROW
+ ∀∀ FOR ALL
+ ∂∂ PARTIAL DIFFERENTIAL
+ ∃∃ THERE EXISTS
+ ∅∅ EMPTY SET
+ ∈∈ ELEMENT OF
+ ∋∋ CONTAINS AS MEMBER
+ −− MINUS SIGN
+ ∓∓ MINUS-OR-PLUS SIGN
+ ∗∗ ASTERISK OPERATOR
+ √√ SQUARE ROOT
+ ∝∝ PROPORTIONAL TO
+ ∞∞ INFINITY
+ ∠∠ ANGLE
+ ∧∧ LOGICAL AND
+ ∨∨ LOGICAL OR
+ ∩∩ INTERSECTION
+ ∪∪ UNION
+ ∫∫ INTEGRAL
+ ∴∴∴ THEREFORE
+ ∼∼ TILDE OPERATOR
+ ≃≃ ASYMPTOTICALLY EQUAL TO
+ ≅≅ APPROXIMATELY EQUAL TO
+ ≈≈≈ ALMOST EQUAL TO
+ ≠≠ NOT EQUAL TO
+ ≡≡ IDENTICAL TO
+ ≢≢ NOT IDENTICAL TO
+ ≤≤ LESS-THAN OR EQUAL TO
+ ≥≥ GREATER-THAN OR EQUAL TO
+ ⊂⊂ SUBSET OF
+ ⊃⊃ SUPERSET OF
+ ⊆⊆ SUBSET OF OR EQUAL TO
+ ⊇⊇ SUPERSET OF OR EQUAL TO
+ ⊕⊕ CIRCLED PLUS
+ ⊗⊗ CIRCLED TIMES
+ ⊥⊥ UP TACK
+ ⋅⋅ DOT OPERATOR
+ ⌈⌈ LEFT CEILING
+ ⌉⌉ RIGHT CEILING
+ ⌊⌊ LEFT FLOOR
+ ⌋⌋ RIGHT FLOOR
+ ⎪⎪ CURLY BRACKET EXTENSION
+ ││ BOX DRAWINGS LIGHT VERTICAL
+ □□ WHITE SQUARE
+ ◊◊ LOZENGE
+ ○○ WHITE CIRCLE
+ ☜☜ WHITE LEFT POINTING INDEX
+ ☞☞ WHITE RIGHT POINTING INDEX
+ ⟨⟨ MATHEMATICAL LEFT ANGLE BRACKET
+ ⟩⟩ MATHEMATICAL RIGHT ANGLE BRACKET
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-NAMED(1)
diff --git a/regress/char/unicode/namediff.in b/regress/char/unicode/namediff.in
new file mode 100644
index 00000000..672478e4
--- /dev/null
+++ b/regress/char/unicode/namediff.in
@@ -0,0 +1,43 @@
+.TH CHAR-UNICODE-NAMEDIFF 1 "October 27, 2014" OpenBSD
+.SH NAME
+char-unicode-namediff \- Unicode characters having named escapes
+.SH DESCRIPTION
+.nf
+BEGINTEST
+\[u0237]\(.j LATIN SMALL LETTER DOTLESS J
+\[u02D9]\(a. DOT ABOVE
+\[u0393]\(*G GREEK CAPITAL LETTER GAMMA
+\[u03A3]\(*S GREEK CAPITAL LETTER SIGMA
+\[u203E]\(rn OVERLINE
+\[u210F]\(-h PLANCK CONSTANT OVER TWO PI
+\[u2195]\(va UP DOWN ARROW
+\[u21D5]\(vA UP DOWN DOUBLE ARROW
+\[u2207]\(gr NABLA
+\[u2209]\(nm NOT AN ELEMENT OF
+\[u220F]\[product] N-ARY PRODUCT
+\[u2210]\[coproduct] N-ARY COPRODUCT
+\[u2211]\[sum] N-ARY SUMMATION
+\[u2284]\(nb NOT A SUBSET OF
+\[u2285]\(nc NOT A SUPERSET OF
+\[u239B]\[parenlefttp] LEFT PARENTHESIS UPPER HOOK
+\[u239C]\[parenleftex] LEFT PARENTHESIS EXTENSION
+\[u239D]\[parenleftbt] LEFT PARENTHESIS LOWER HOOK
+\[u239E]\[parenrighttp] RIGHT PARENTHESIS UPPER HOOK
+\[u239F]\[parenrightex] RIGHT PARENTHESIS EXTENSION
+\[u23A0]\[parenrightbt] RIGHT PARENTHESIS LOWER HOOK
+\[u23A1]\[bracketlefttp] LEFT SQUARE BRACKET UPPER CORNER
+\[u23A2]\[bracketleftex] LEFT SQUARE BRACKET EXTENSION
+\[u23A3]\[bracketleftbt] LEFT SQUARE BRACKET LOWER CORNER
+\[u23A4]\[bracketrighttp] RIGHT SQUARE BRACKET UPPER CORNER
+\[u23A5]\[bracketrightex] RIGHT SQUARE BRACKET EXTENSION
+\[u23A6]\[bracketrightbt] RIGHT SQUARE BRACKET LOWER CORNER
+\[u23A7]\[bracelefttp] LEFT CURLY BRACKET UPPER HOOK
+\[u23A8]\[braceleftmid] LEFT CURLY BRACKET MIDDLE PIECE
+\[u23A9]\[braceleftbt] LEFT CURLY BRACKET LOWER HOOK
+\[u23AA]\[braceex]\[braceleftex]\[bracerightex] CURLY BRACKET EXTENSION
+\[u23AB]\[bracerighttp] RIGHT CURLY BRACKET UPPER HOOK
+\[u23AC]\[bracerightmid] RIGHT CURLY BRACKET MIDDLE PIECE
+\[u23AD]\[bracerightbt] RIGHT CURLY BRACKET LOWER HOOK
+\[u2713]\(OK CHECK MARK
+ENDTEST
+.fi
diff --git a/regress/char/unicode/namediff.out_ascii b/regress/char/unicode/namediff.out_ascii
new file mode 100644
index 00000000..cd8313a3
--- /dev/null
+++ b/regress/char/unicode/namediff.out_ascii
@@ -0,0 +1,49 @@
+CHAR-UNICODE-NAMEDIFF(1) General Commands Manual CHAR-UNICODE-NAMEDIFF(1)
+
+
+
+NNAAMMEE
+ char-unicode-namediff - Unicode characters having named escapes
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ jj LATIN SMALL LETTER DOTLESS J
+ .. DOT ABOVE
+ GG GREEK CAPITAL LETTER GAMMA
+ SS GREEK CAPITAL LETTER SIGMA
+ -- OVERLINE
+ /h/h PLANCK CONSTANT OVER TWO PI
+ ^v^v UP DOWN ARROW
+ ^=v^=v UP DOWN DOUBLE ARROW
+ VV NABLA
+ !E!E NOT AN ELEMENT OF
+ TTTT N-ARY PRODUCT
+ UU N-ARY COPRODUCT
+ EE N-ARY SUMMATION
+ (!=(!= NOT A SUBSET OF
+ !=)!=) NOT A SUPERSET OF
+ // LEFT PARENTHESIS UPPER HOOK
+ || LEFT PARENTHESIS EXTENSION
+ \\ LEFT PARENTHESIS LOWER HOOK
+ \\ RIGHT PARENTHESIS UPPER HOOK
+ || RIGHT PARENTHESIS EXTENSION
+ // RIGHT PARENTHESIS LOWER HOOK
+ || LEFT SQUARE BRACKET UPPER CORNER
+ || LEFT SQUARE BRACKET EXTENSION
+ || LEFT SQUARE BRACKET LOWER CORNER
+ || RIGHT SQUARE BRACKET UPPER CORNER
+ || RIGHT SQUARE BRACKET EXTENSION
+ || RIGHT SQUARE BRACKET LOWER CORNER
+ ,-,- LEFT CURLY BRACKET UPPER HOOK
+ {{ LEFT CURLY BRACKET MIDDLE PIECE
+ `-`- LEFT CURLY BRACKET LOWER HOOK
+ |||| CURLY BRACKET EXTENSION
+ -.-. RIGHT CURLY BRACKET UPPER HOOK
+ }} RIGHT CURLY BRACKET MIDDLE PIECE
+ -'-' RIGHT CURLY BRACKET LOWER HOOK
+ \/\/ CHECK MARK
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-NAMEDIFF(1)
diff --git a/regress/char/unicode/namediff.out_html b/regress/char/unicode/namediff.out_html
new file mode 100644
index 00000000..d682ffbe
--- /dev/null
+++ b/regress/char/unicode/namediff.out_html
@@ -0,0 +1,37 @@
+BEGINTEST
+&#567;&#567; LATIN SMALL LETTER DOTLESS J
+&#729;&#729; DOT ABOVE
+&#915;&#915; GREEK CAPITAL LETTER GAMMA
+&#931;&#931; GREEK CAPITAL LETTER SIGMA
+&#8254;&#8254; OVERLINE
+&#8463;&#8463; PLANCK CONSTANT OVER TWO PI
+&#8597;&#8597; UP DOWN ARROW
+&#8661;&#8661; UP DOWN DOUBLE ARROW
+&#8711;&#8711; NABLA
+&#8713;&#8713; NOT AN ELEMENT OF
+&#8719;&#8719; N-ARY PRODUCT
+&#8720;&#8720; N-ARY COPRODUCT
+&#8721;&#8721; N-ARY SUMMATION
+&#8836;&#8836; NOT A SUBSET OF
+&#8837;&#8837; NOT A SUPERSET OF
+&#9115;&#9115; LEFT PARENTHESIS UPPER HOOK
+&#9116;&#9116; LEFT PARENTHESIS EXTENSION
+&#9117;&#9117; LEFT PARENTHESIS LOWER HOOK
+&#9118;&#9118; RIGHT PARENTHESIS UPPER HOOK
+&#9119;&#9119; RIGHT PARENTHESIS EXTENSION
+&#9120;&#9120; RIGHT PARENTHESIS LOWER HOOK
+&#9121;&#9121; LEFT SQUARE BRACKET UPPER CORNER
+&#9122;&#9122; LEFT SQUARE BRACKET EXTENSION
+&#9123;&#9123; LEFT SQUARE BRACKET LOWER CORNER
+&#9124;&#9124; RIGHT SQUARE BRACKET UPPER CORNER
+&#9125;&#9125; RIGHT SQUARE BRACKET EXTENSION
+&#9126;&#9126; RIGHT SQUARE BRACKET LOWER CORNER
+&#9127;&#9127; LEFT CURLY BRACKET UPPER HOOK
+&#9128;&#9128; LEFT CURLY BRACKET MIDDLE PIECE
+&#9129;&#9129; LEFT CURLY BRACKET LOWER HOOK
+&#9130;&#9130;&#9130;&#9130; CURLY BRACKET EXTENSION
+&#9131;&#9131; RIGHT CURLY BRACKET UPPER HOOK
+&#9132;&#9132; RIGHT CURLY BRACKET MIDDLE PIECE
+&#9133;&#9133; RIGHT CURLY BRACKET LOWER HOOK
+&#10003;&#10003; CHECK MARK
+ENDTEST
diff --git a/regress/char/unicode/namediff.out_utf8 b/regress/char/unicode/namediff.out_utf8
new file mode 100644
index 00000000..9ac104bf
--- /dev/null
+++ b/regress/char/unicode/namediff.out_utf8
@@ -0,0 +1,49 @@
+CHAR-UNICODE-NAMEDIFF(1) General Commands Manual CHAR-UNICODE-NAMEDIFF(1)
+
+
+
+NNAAMMEE
+ char-unicode-namediff - Unicode characters having named escapes
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ ȷȷ LATIN SMALL LETTER DOTLESS J
+ ˙˙ DOT ABOVE
+ ΓΓ GREEK CAPITAL LETTER GAMMA
+ ΣΣ GREEK CAPITAL LETTER SIGMA
+ ‾‾ OVERLINE
+ ℏℏ PLANCK CONSTANT OVER TWO PI
+ ↕↕ UP DOWN ARROW
+ ⇕⇕ UP DOWN DOUBLE ARROW
+ ∇∇ NABLA
+ ∉∉ NOT AN ELEMENT OF
+ ∏∏ N-ARY PRODUCT
+ ∐∐ N-ARY COPRODUCT
+ ∑∑ N-ARY SUMMATION
+ ⊄⊄ NOT A SUBSET OF
+ ⊅⊅ NOT A SUPERSET OF
+ ⎛⎛ LEFT PARENTHESIS UPPER HOOK
+ ⎜⎜ LEFT PARENTHESIS EXTENSION
+ ⎝⎝ LEFT PARENTHESIS LOWER HOOK
+ ⎞⎞ RIGHT PARENTHESIS UPPER HOOK
+ ⎟⎟ RIGHT PARENTHESIS EXTENSION
+ ⎠⎠ RIGHT PARENTHESIS LOWER HOOK
+ ⎡⎡ LEFT SQUARE BRACKET UPPER CORNER
+ ⎢⎢ LEFT SQUARE BRACKET EXTENSION
+ ⎣⎣ LEFT SQUARE BRACKET LOWER CORNER
+ ⎤⎤ RIGHT SQUARE BRACKET UPPER CORNER
+ ⎥⎥ RIGHT SQUARE BRACKET EXTENSION
+ ⎦⎦ RIGHT SQUARE BRACKET LOWER CORNER
+ ⎧⎧ LEFT CURLY BRACKET UPPER HOOK
+ ⎨⎨ LEFT CURLY BRACKET MIDDLE PIECE
+ ⎩⎩ LEFT CURLY BRACKET LOWER HOOK
+ ⎪⎪⎪⎪ CURLY BRACKET EXTENSION
+ ⎫⎫ RIGHT CURLY BRACKET UPPER HOOK
+ ⎬⎬ RIGHT CURLY BRACKET MIDDLE PIECE
+ ⎭⎭ RIGHT CURLY BRACKET LOWER HOOK
+ ✓✓ CHECK MARK
+ ENDTEST
+
+
+
+OpenBSD October 27, 2014 CHAR-UNICODE-NAMEDIFF(1)
diff --git a/regress/char/unicode/nogroff.in b/regress/char/unicode/nogroff.in
new file mode 100644
index 00000000..10e5f516
--- /dev/null
+++ b/regress/char/unicode/nogroff.in
@@ -0,0 +1,43 @@
+.TH CHAR-UNICODE-NOGROFF 1 "October 28, 2014" OpenBSD
+.SH NAME
+char-unicode-nogroff \- characters handled differently by groff
+.SH DESCRIPTION
+.nf
+BEGINTEST
+\[u0000]\N'0' <control> NULL
+\[u0001]\N'1' <control> START OF HEADING
+\[u0007]\N'7' <control> BELL
+\[u0008]\N'8' <control> BACKSPACE
+\[u0009]\N'9' <control> CHARACTER TABULATION
+\[u000A]\N'10' <control> LINE FEED
+\[u000B]\N'11' <control> LINE TABULATION
+\[u000C]\N'12' <control> FORM FEED
+\[u000D]\N'13' <control> CARRIAGE RETURN
+\[u001B]\N'27' <control> ESCAPE
+\[u007F]\N'127' <control> DELETE
+\[u0080]\N'128' <control> 0x80
+\[u0081]\N'129' <control> 0x81
+\[u0082]\N'130' <control> BREAK PERMITTED HERE
+\[u0083]\N'131' <control> NO BREAK HERE
+\[u009E]\N'158' <control> PRIVACY MESSAGE
+\[u009F]\N'159' <control> APPLICATION PROGRAM COMMAND
+\[u226A]\(<< MUCH LESS-THAN
+\[u226B]\(>> MUCH GREATER-THAN
+\[uFB00]\(ff LATIN SMALL LIGATURE FF
+\[uFB01]\(fi LATIN SMALL LIGATURE FI
+\[uFB02]\(fl LATIN SMALL LIGATURE FL
+\[uFB03]\(Fi LATIN SMALL LIGATURE FFI
+\[uFB04]\(Fl LATIN SMALL LIGATURE FFL
+\[uFFFD] REPLACEMENT CHARACTER
+\[uFFFE] <undefined>
+\[uFFFF] <undefined>
+\[u10000] LINEAR B SYLLABLE B008 A
+\[uFFFFD] <Plane 15 Private Use, Last>
+\[uFFFFE] <undefined>
+\[uFFFFF] <undefined>
+\[u100000] <Plane 16 Private Use, First>
+\[u10FFFD] <Plane 16 Private Use, Last>
+\[u10FFFE] <undefined>
+\[u10FFFF] <undefined>
+ENDTEST
+.fi
diff --git a/regress/char/unicode/nogroff.out_ascii b/regress/char/unicode/nogroff.out_ascii
new file mode 100644
index 00000000..d03b87e8
--- /dev/null
+++ b/regress/char/unicode/nogroff.out_ascii
@@ -0,0 +1,49 @@
+CHAR-UNICODE-NOGROFF(1) General Commands Manual CHAR-UNICODE-NOGROFF(1)
+
+
+
+NNAAMMEE
+ char-unicode-nogroff - characters handled differently by groff
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ <NUL><NUL> <control> NULL
+ <SOH><SOH> <control> START OF HEADING
+ <BEL><BEL> <control> BELL
+ <BS><BS> <control> BACKSPACE
+ <control> CHARACTER TABULATION
+ <LF><LF> <control> LINE FEED
+ <VT><VT> <control> LINE TABULATION
+ <FF><FF> <control> FORM FEED
+ <CR><CR> <control> CARRIAGE RETURN
+ <ESC><ESC> <control> ESCAPE
+ <DEL><DEL> <control> DELETE
+ <80><80> <control> 0x80
+ <81><81> <control> 0x81
+ <82><82> <control> BREAK PERMITTED HERE
+ <83><83> <control> NO BREAK HERE
+ <9E><9E> <control> PRIVACY MESSAGE
+ <9F><9F> <control> APPLICATION PROGRAM COMMAND
+ <<<< MUCH LESS-THAN
+ >>>> MUCH GREATER-THAN
+ ffff LATIN SMALL LIGATURE FF
+ fifi LATIN SMALL LIGATURE FI
+ flfl LATIN SMALL LIGATURE FL
+ ffiffi LATIN SMALL LIGATURE FFI
+ fflffl LATIN SMALL LIGATURE FFL
+ <?> REPLACEMENT CHARACTER
+ <?> <undefined>
+ <?> <undefined>
+ <?> LINEAR B SYLLABLE B008 A
+ <?> <Plane 15 Private Use, Last>
+ <?> <undefined>
+ <?> <undefined>
+ <?> <Plane 16 Private Use, First>
+ <?> <Plane 16 Private Use, Last>
+ <?> <undefined>
+ <?> <undefined>
+ ENDTEST
+
+
+
+OpenBSD October 28, 2014 CHAR-UNICODE-NOGROFF(1)
diff --git a/regress/char/unicode/nogroff.out_html b/regress/char/unicode/nogroff.out_html
new file mode 100644
index 00000000..56e1fe7e
--- /dev/null
+++ b/regress/char/unicode/nogroff.out_html
@@ -0,0 +1,37 @@
+BEGINTEST
+&#65533;&#65533; &lt;control&gt; NULL
+&#65533;&#65533; &lt;control&gt; START OF HEADING
+&#65533;&#65533; &lt;control&gt; BELL
+&#65533;&#65533; &lt;control&gt; BACKSPACE
+ &lt;control&gt; CHARACTER TABULATION
+&#65533;&#65533; &lt;control&gt; LINE FEED
+&#65533;&#65533; &lt;control&gt; LINE TABULATION
+&#65533;&#65533; &lt;control&gt; FORM FEED
+&#65533;&#65533; &lt;control&gt; CARRIAGE RETURN
+&#65533;&#65533; &lt;control&gt; ESCAPE
+&#65533;&#65533; &lt;control&gt; DELETE
+&#65533;&#65533; &lt;control&gt; 0x80
+&#65533;&#65533; &lt;control&gt; 0x81
+&#65533;&#65533; &lt;control&gt; BREAK PERMITTED HERE
+&#65533;&#65533; &lt;control&gt; NO BREAK HERE
+&#65533;&#65533; &lt;control&gt; PRIVACY MESSAGE
+&#65533;&#65533; &lt;control&gt; APPLICATION PROGRAM COMMAND
+&#8810;&#8810; MUCH LESS-THAN
+&#8811;&#8811; MUCH GREATER-THAN
+&#64256;&#64256; LATIN SMALL LIGATURE FF
+&#64257;&#64257; LATIN SMALL LIGATURE FI
+&#64258;&#64258; LATIN SMALL LIGATURE FL
+&#64259;&#64259; LATIN SMALL LIGATURE FFI
+&#64260;&#64260; LATIN SMALL LIGATURE FFL
+&#65533; REPLACEMENT CHARACTER
+&#65534; &lt;undefined&gt;
+&#65535; &lt;undefined&gt;
+&#65536; LINEAR B SYLLABLE B008 A
+&#1048573; &lt;Plane 15 Private Use, Last&gt;
+&#1048574; &lt;undefined&gt;
+&#1048575; &lt;undefined&gt;
+&#1048576; &lt;Plane 16 Private Use, First&gt;
+&#1114109; &lt;Plane 16 Private Use, Last&gt;
+&#1114110; &lt;undefined&gt;
+&#1114111; &lt;undefined&gt;
+ENDTEST
diff --git a/regress/char/unicode/nogroff.out_utf8 b/regress/char/unicode/nogroff.out_utf8
new file mode 100644
index 00000000..c6169b9c
--- /dev/null
+++ b/regress/char/unicode/nogroff.out_utf8
@@ -0,0 +1,49 @@
+CHAR-UNICODE-NOGROFF(1) General Commands Manual CHAR-UNICODE-NOGROFF(1)
+
+
+
+NNAAMMEE
+ char-unicode-nogroff - characters handled differently by groff
+
+DDEESSCCRRIIPPTTIIOONN
+ BEGINTEST
+ �� <control> NULL
+ �� <control> START OF HEADING
+ �� <control> BELL
+ �� <control> BACKSPACE
+ <control> CHARACTER TABULATION
+ �� <control> LINE FEED
+ �� <control> LINE TABULATION
+ �� <control> FORM FEED
+ �� <control> CARRIAGE RETURN
+ �� <control> ESCAPE
+ �� <control> DELETE
+ �� <control> 0x80
+ �� <control> 0x81
+ �� <control> BREAK PERMITTED HERE
+ �� <control> NO BREAK HERE
+ �� <control> PRIVACY MESSAGE
+ �� <control> APPLICATION PROGRAM COMMAND
+ ≪≪ MUCH LESS-THAN
+ ≫≫ MUCH GREATER-THAN
+ ffff LATIN SMALL LIGATURE FF
+ fifi LATIN SMALL LIGATURE FI
+ flfl LATIN SMALL LIGATURE FL
+ ffiffi LATIN SMALL LIGATURE FFI
+ fflffl LATIN SMALL LIGATURE FFL
+ � REPLACEMENT CHARACTER
+ ￾ <undefined>
+ ￿ <undefined>
+ 𐀀 LINEAR B SYLLABLE B008 A
+ 󿿽 <Plane 15 Private Use, Last>
+ 󿿾 <undefined>
+ 󿿿 <undefined>
+ 􀀀 <Plane 16 Private Use, First>
+ 􏿽 <Plane 16 Private Use, Last>
+ 􏿾 <undefined>
+ 􏿿 <undefined>
+ ENDTEST
+
+
+
+OpenBSD October 28, 2014 CHAR-UNICODE-NOGROFF(1)