summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorschwarze <schwarze@openbsd.org>2017-01-18 19:22:18 +0000
committerschwarze <schwarze@openbsd.org>2017-01-18 19:22:18 +0000
commitb1eea027fda2960a3a09a9f7763d2d99f4759c41 (patch)
tree6b52e204dec16fc99af1c480b32c4ae8b096e6c2
parentUse LIST_FOREACH to traverse icmp6_mtudisc_callbacks. Fix whitespaces. (diff)
downloadwireguard-openbsd-b1eea027fda2960a3a09a9f7763d2d99f4759c41.tar.xz
wireguard-openbsd-b1eea027fda2960a3a09a9f7763d2d99f4759c41.zip
Make HTML output more human readable by overhauling line break logic
around tags and by introducing some simple indentation. No change of HTML semantics intended.
-rw-r--r--regress/usr.bin/mandoc/char/space/zerowidth.out_html17
-rw-r--r--regress/usr.bin/mandoc/char/unicode/ascii.out_html65
-rw-r--r--regress/usr.bin/mandoc/char/unicode/invalid.out_html2
-rw-r--r--regress/usr.bin/mandoc/char/unicode/latin1.out_html257
-rw-r--r--regress/usr.bin/mandoc/char/unicode/latin1diff.out_html38
-rw-r--r--regress/usr.bin/mandoc/char/unicode/named.out_html446
-rw-r--r--regress/usr.bin/mandoc/char/unicode/namediff.out_html110
-rw-r--r--regress/usr.bin/mandoc/char/unicode/nogroff.out_html110
-rwxr-xr-xregress/usr.bin/mandoc/eqn/extract.pl1
-rw-r--r--usr.bin/mandoc/html.c221
-rw-r--r--usr.bin/mandoc/html.h5
-rw-r--r--usr.bin/mandoc/man_html.c3
-rw-r--r--usr.bin/mandoc/mdoc_html.c3
13 files changed, 845 insertions, 433 deletions
diff --git a/regress/usr.bin/mandoc/char/space/zerowidth.out_html b/regress/usr.bin/mandoc/char/space/zerowidth.out_html
index ac2ecf05af5..2ff8ab0d5b3 100644
--- a/regress/usr.bin/mandoc/char/space/zerowidth.out_html
+++ b/regress/usr.bin/mandoc/char/space/zerowidth.out_html
@@ -1,6 +1,11 @@
-BEGINTEST<br/>
-zero width space \&amp; between A and B: AB<br/>
-hyphenation allowed \% between A and B: AB<br/>
-half-narrow (1/12) space \^ between A and B: AB<br/>
-narrow space (1/6) \| between A and B: AB<br/>
-ENDTEST<br/>
+BEGINTEST
+<br/>
+zero width space \&amp; between A and B: AB
+<br/>
+hyphenation allowed \% between A and B: AB
+<br/>
+half-narrow (1/12) space \^ between A and B: AB
+<br/>
+narrow space (1/6) \| between A and B: AB
+<br/>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/char/unicode/ascii.out_html b/regress/usr.bin/mandoc/char/unicode/ascii.out_html
index 7812f417350..1f9453e17c2 100644
--- a/regress/usr.bin/mandoc/char/unicode/ascii.out_html
+++ b/regress/usr.bin/mandoc/char/unicode/ascii.out_html
@@ -1,22 +1,43 @@
-BEGINTEST<br/>
-&quot;&quot;&quot; QUOTATION MARK<br/>
-### NUMBER SIGN<br/>
-$$$ DOLLAR SIGN<br/>
-''' APOSTROPHE<br/>
-+++ PLUS SIGN<br/>
--- HYPHEN-MINUS<br/>
-.. FULL STOP<br/>
-/// SOLIDUS<br/>
-=== EQUALS SIGN<br/>
-@@@ COMMERCIAL AT<br/>
-[[[ LEFT SQUARE BRACKET<br/>
-\\\\ REVERSE SOLIDUS<br/>
-]]] RIGHT SQUARE BRACKET<br/>
-^^^^ CIRCUMFLEX ACCENT<br/>
-___ LOW LINE<br/>
-```` GRAVE ACCENT<br/>
-{{{ LEFT CURLY BRACKET<br/>
-|||| VERTICAL LINE<br/>
-}}} RIGHT CURLY BRACKET<br/>
-~~~~ TILDE<br/>
-ENDTEST<br/>
+BEGINTEST
+<br/>
+&quot;&quot;&quot; QUOTATION MARK
+<br/>
+### NUMBER SIGN
+<br/>
+$$$ DOLLAR SIGN
+<br/>
+''' APOSTROPHE
+<br/>
++++ PLUS SIGN
+<br/>
+-- HYPHEN-MINUS
+<br/>
+.. FULL STOP
+<br/>
+/// SOLIDUS
+<br/>
+=== EQUALS SIGN
+<br/>
+@@@ COMMERCIAL AT
+<br/>
+[[[ LEFT SQUARE BRACKET
+<br/>
+\\\\ REVERSE SOLIDUS
+<br/>
+]]] RIGHT SQUARE BRACKET
+<br/>
+^^^^ CIRCUMFLEX ACCENT
+<br/>
+___ LOW LINE
+<br/>
+```` GRAVE ACCENT
+<br/>
+{{{ LEFT CURLY BRACKET
+<br/>
+|||| VERTICAL LINE
+<br/>
+}}} RIGHT CURLY BRACKET
+<br/>
+~~~~ TILDE
+<br/>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/char/unicode/invalid.out_html b/regress/usr.bin/mandoc/char/unicode/invalid.out_html
index e7e1cf956c6..6456d7283ca 100644
--- a/regress/usr.bin/mandoc/char/unicode/invalid.out_html
+++ b/regress/usr.bin/mandoc/char/unicode/invalid.out_html
@@ -5,4 +5,4 @@ too long: &gt;..&lt;
too large: &gt;..&lt;
trailing garbage: &gt;&lt;
not unicode: &gt;_.&#8593;.&#8657;&lt;
-ENDTEST</pre>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/char/unicode/latin1.out_html b/regress/usr.bin/mandoc/char/unicode/latin1.out_html
index 428a00d08af..45cc7578845 100644
--- a/regress/usr.bin/mandoc/char/unicode/latin1.out_html
+++ b/regress/usr.bin/mandoc/char/unicode/latin1.out_html
@@ -1,86 +1,171 @@
-BEGINTEST<br/>
-&#162;&#162; CENT SIGN<br/>
-&#164;&#164; CURRENCY SIGN<br/>
-&#165;&#165; YEN SIGN<br/>
-&#166;&#166; BROKEN BAR<br/>
-&#168;&#168; DIAERESIS<br/>
-&#169;&#169; COPYRIGHT SIGN<br/>
-&#170; FEMININE ORDINAL INDICATOR<br/>
-&#171;&#171; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK<br/>
-&#172;&#172;&#172; NOT SIGN<br/>
-&#173; SOFT HYPHEN<br/>
-&#174;&#174; REGISTERED SIGN<br/>
-&#177;&#177;&#177; PLUS-MINUS SIGN<br/>
-&#178; SUPERSCRIPT TWO<br/>
-&#179; SUPERSCRIPT THREE<br/>
-&#180;&#180;&#180; ACUTE ACCENT<br/>
-&#181;&#181; MICRO SIGN<br/>
-&#183;&#183; MIDDLE DOT<br/>
-&#184;&#184; CEDILLA<br/>
-&#185; SUPERSCRIPT ONE<br/>
-&#186; MASCULINE ORDINAL INDICATOR<br/>
-&#187;&#187; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK<br/>
-&#188;&#188; VULGAR FRACTION ONE QUARTER<br/>
-&#189;&#189; VULGAR FRACTION ONE HALF<br/>
-&#190;&#190; VULGAR FRACTION THREE QUARTERS<br/>
-&#192;&#192; LATIN CAPITAL LETTER A WITH GRAVE<br/>
-&#193;&#193; LATIN CAPITAL LETTER A WITH ACUTE<br/>
-&#194;&#194; LATIN CAPITAL LETTER A WITH CIRCUMFLEX<br/>
-&#195;&#195; LATIN CAPITAL LETTER A WITH TILDE<br/>
-&#196;&#196; LATIN CAPITAL LETTER A WITH DIAERESIS<br/>
-&#197;&#197; LATIN CAPITAL LETTER A WITH RING ABOVE<br/>
-&#198;&#198; LATIN CAPITAL LETTER AE<br/>
-&#199;&#199; LATIN CAPITAL LETTER C WITH CEDILLA<br/>
-&#200;&#200; LATIN CAPITAL LETTER E WITH GRAVE<br/>
-&#201;&#201; LATIN CAPITAL LETTER E WITH ACUTE<br/>
-&#202;&#202; LATIN CAPITAL LETTER E WITH CIRCUMFLEX<br/>
-&#203;&#203; LATIN CAPITAL LETTER E WITH DIAERESIS<br/>
-&#204;&#204; LATIN CAPITAL LETTER I WITH GRAVE<br/>
-&#205;&#205; LATIN CAPITAL LETTER I WITH ACUTE<br/>
-&#206;&#206; LATIN CAPITAL LETTER I WITH CIRCUMFLEX<br/>
-&#207;&#207; LATIN CAPITAL LETTER I WITH DIAERESIS<br/>
-&#208;&#208; LATIN CAPITAL LETTER ETH<br/>
-&#209;&#209; LATIN CAPITAL LETTER N WITH TILDE<br/>
-&#210;&#210; LATIN CAPITAL LETTER O WITH GRAVE<br/>
-&#211;&#211; LATIN CAPITAL LETTER O WITH ACUTE<br/>
-&#212;&#212; LATIN CAPITAL LETTER O WITH CIRCUMFLEX<br/>
-&#213;&#213; LATIN CAPITAL LETTER O WITH TILDE<br/>
-&#214;&#214; LATIN CAPITAL LETTER O WITH DIAERESIS<br/>
-&#215;&#215;&#215; MULTIPLICATION SIGN<br/>
-&#216;&#216; LATIN CAPITAL LETTER O WITH STROKE<br/>
-&#217;&#217; LATIN CAPITAL LETTER U WITH GRAVE<br/>
-&#218;&#218; LATIN CAPITAL LETTER U WITH ACUTE<br/>
-&#219;&#219; LATIN CAPITAL LETTER U WITH CIRCUMFLEX<br/>
-&#220;&#220; LATIN CAPITAL LETTER U WITH DIAERESIS<br/>
-&#221; LATIN CAPITAL LETTER Y WITH ACUTE<br/>
-&#224;&#224; LATIN SMALL LETTER A WITH GRAVE<br/>
-&#225;&#225; LATIN SMALL LETTER A WITH ACUTE<br/>
-&#226;&#226; LATIN SMALL LETTER A WITH CIRCUMFLEX<br/>
-&#227;&#227; LATIN SMALL LETTER A WITH TILDE<br/>
-&#228;&#228; LATIN SMALL LETTER A WITH DIAERESIS<br/>
-&#229;&#229; LATIN SMALL LETTER A WITH RING ABOVE<br/>
-&#230;&#230; LATIN SMALL LETTER AE<br/>
-&#231;&#231; LATIN SMALL LETTER C WITH CEDILLA<br/>
-&#232;&#232; LATIN SMALL LETTER E WITH GRAVE<br/>
-&#233;&#233; LATIN SMALL LETTER E WITH ACUTE<br/>
-&#234;&#234; LATIN SMALL LETTER E WITH CIRCUMFLEX<br/>
-&#235;&#235; LATIN SMALL LETTER E WITH DIAERESIS<br/>
-&#236;&#236; LATIN SMALL LETTER I WITH GRAVE<br/>
-&#237;&#237; LATIN SMALL LETTER I WITH ACUTE<br/>
-&#238;&#238; LATIN SMALL LETTER I WITH CIRCUMFLEX<br/>
-&#239;&#239; LATIN SMALL LETTER I WITH DIAERESIS<br/>
-&#241;&#241; LATIN SMALL LETTER N WITH TILDE<br/>
-&#242;&#242; LATIN SMALL LETTER O WITH GRAVE<br/>
-&#243;&#243; LATIN SMALL LETTER O WITH ACUTE<br/>
-&#244;&#244; LATIN SMALL LETTER O WITH CIRCUMFLEX<br/>
-&#245;&#245; LATIN SMALL LETTER O WITH TILDE<br/>
-&#246;&#246; LATIN SMALL LETTER O WITH DIAERESIS<br/>
-&#247;&#247;&#247; DIVISION SIGN<br/>
-&#248;&#248; LATIN SMALL LETTER O WITH STROKE<br/>
-&#249;&#249; LATIN SMALL LETTER U WITH GRAVE<br/>
-&#250;&#250; LATIN SMALL LETTER U WITH ACUTE<br/>
-&#251;&#251; LATIN SMALL LETTER U WITH CIRCUMFLEX<br/>
-&#252;&#252; LATIN SMALL LETTER U WITH DIAERESIS<br/>
-&#253; LATIN SMALL LETTER Y WITH ACUTE<br/>
-&#255;&#255; LATIN SMALL LETTER Y WITH DIAERESIS<br/>
-ENDTEST<br/>
+BEGINTEST
+<br/>
+&#162;&#162; CENT SIGN
+<br/>
+&#164;&#164; CURRENCY SIGN
+<br/>
+&#165;&#165; YEN SIGN
+<br/>
+&#166;&#166; BROKEN BAR
+<br/>
+&#168;&#168; DIAERESIS
+<br/>
+&#169;&#169; COPYRIGHT SIGN
+<br/>
+&#170; FEMININE ORDINAL INDICATOR
+<br/>
+&#171;&#171; LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+<br/>
+&#172;&#172;&#172; NOT SIGN
+<br/>
+&#173; SOFT HYPHEN
+<br/>
+&#174;&#174; REGISTERED SIGN
+<br/>
+&#177;&#177;&#177; PLUS-MINUS SIGN
+<br/>
+&#178; SUPERSCRIPT TWO
+<br/>
+&#179; SUPERSCRIPT THREE
+<br/>
+&#180;&#180;&#180; ACUTE ACCENT
+<br/>
+&#181;&#181; MICRO SIGN
+<br/>
+&#183;&#183; MIDDLE DOT
+<br/>
+&#184;&#184; CEDILLA
+<br/>
+&#185; SUPERSCRIPT ONE
+<br/>
+&#186; MASCULINE ORDINAL INDICATOR
+<br/>
+&#187;&#187; RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+<br/>
+&#188;&#188; VULGAR FRACTION ONE QUARTER
+<br/>
+&#189;&#189; VULGAR FRACTION ONE HALF
+<br/>
+&#190;&#190; VULGAR FRACTION THREE QUARTERS
+<br/>
+&#192;&#192; LATIN CAPITAL LETTER A WITH GRAVE
+<br/>
+&#193;&#193; LATIN CAPITAL LETTER A WITH ACUTE
+<br/>
+&#194;&#194; LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<br/>
+&#195;&#195; LATIN CAPITAL LETTER A WITH TILDE
+<br/>
+&#196;&#196; LATIN CAPITAL LETTER A WITH DIAERESIS
+<br/>
+&#197;&#197; LATIN CAPITAL LETTER A WITH RING ABOVE
+<br/>
+&#198;&#198; LATIN CAPITAL LETTER AE
+<br/>
+&#199;&#199; LATIN CAPITAL LETTER C WITH CEDILLA
+<br/>
+&#200;&#200; LATIN CAPITAL LETTER E WITH GRAVE
+<br/>
+&#201;&#201; LATIN CAPITAL LETTER E WITH ACUTE
+<br/>
+&#202;&#202; LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<br/>
+&#203;&#203; LATIN CAPITAL LETTER E WITH DIAERESIS
+<br/>
+&#204;&#204; LATIN CAPITAL LETTER I WITH GRAVE
+<br/>
+&#205;&#205; LATIN CAPITAL LETTER I WITH ACUTE
+<br/>
+&#206;&#206; LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<br/>
+&#207;&#207; LATIN CAPITAL LETTER I WITH DIAERESIS
+<br/>
+&#208;&#208; LATIN CAPITAL LETTER ETH
+<br/>
+&#209;&#209; LATIN CAPITAL LETTER N WITH TILDE
+<br/>
+&#210;&#210; LATIN CAPITAL LETTER O WITH GRAVE
+<br/>
+&#211;&#211; LATIN CAPITAL LETTER O WITH ACUTE
+<br/>
+&#212;&#212; LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<br/>
+&#213;&#213; LATIN CAPITAL LETTER O WITH TILDE
+<br/>
+&#214;&#214; LATIN CAPITAL LETTER O WITH DIAERESIS
+<br/>
+&#215;&#215;&#215; MULTIPLICATION SIGN
+<br/>
+&#216;&#216; LATIN CAPITAL LETTER O WITH STROKE
+<br/>
+&#217;&#217; LATIN CAPITAL LETTER U WITH GRAVE
+<br/>
+&#218;&#218; LATIN CAPITAL LETTER U WITH ACUTE
+<br/>
+&#219;&#219; LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<br/>
+&#220;&#220; LATIN CAPITAL LETTER U WITH DIAERESIS
+<br/>
+&#221; LATIN CAPITAL LETTER Y WITH ACUTE
+<br/>
+&#224;&#224; LATIN SMALL LETTER A WITH GRAVE
+<br/>
+&#225;&#225; LATIN SMALL LETTER A WITH ACUTE
+<br/>
+&#226;&#226; LATIN SMALL LETTER A WITH CIRCUMFLEX
+<br/>
+&#227;&#227; LATIN SMALL LETTER A WITH TILDE
+<br/>
+&#228;&#228; LATIN SMALL LETTER A WITH DIAERESIS
+<br/>
+&#229;&#229; LATIN SMALL LETTER A WITH RING ABOVE
+<br/>
+&#230;&#230; LATIN SMALL LETTER AE
+<br/>
+&#231;&#231; LATIN SMALL LETTER C WITH CEDILLA
+<br/>
+&#232;&#232; LATIN SMALL LETTER E WITH GRAVE
+<br/>
+&#233;&#233; LATIN SMALL LETTER E WITH ACUTE
+<br/>
+&#234;&#234; LATIN SMALL LETTER E WITH CIRCUMFLEX
+<br/>
+&#235;&#235; LATIN SMALL LETTER E WITH DIAERESIS
+<br/>
+&#236;&#236; LATIN SMALL LETTER I WITH GRAVE
+<br/>
+&#237;&#237; LATIN SMALL LETTER I WITH ACUTE
+<br/>
+&#238;&#238; LATIN SMALL LETTER I WITH CIRCUMFLEX
+<br/>
+&#239;&#239; LATIN SMALL LETTER I WITH DIAERESIS
+<br/>
+&#241;&#241; LATIN SMALL LETTER N WITH TILDE
+<br/>
+&#242;&#242; LATIN SMALL LETTER O WITH GRAVE
+<br/>
+&#243;&#243; LATIN SMALL LETTER O WITH ACUTE
+<br/>
+&#244;&#244; LATIN SMALL LETTER O WITH CIRCUMFLEX
+<br/>
+&#245;&#245; LATIN SMALL LETTER O WITH TILDE
+<br/>
+&#246;&#246; LATIN SMALL LETTER O WITH DIAERESIS
+<br/>
+&#247;&#247;&#247; DIVISION SIGN
+<br/>
+&#248;&#248; LATIN SMALL LETTER O WITH STROKE
+<br/>
+&#249;&#249; LATIN SMALL LETTER U WITH GRAVE
+<br/>
+&#250;&#250; LATIN SMALL LETTER U WITH ACUTE
+<br/>
+&#251;&#251; LATIN SMALL LETTER U WITH CIRCUMFLEX
+<br/>
+&#252;&#252; LATIN SMALL LETTER U WITH DIAERESIS
+<br/>
+&#253; LATIN SMALL LETTER Y WITH ACUTE
+<br/>
+&#255;&#255; LATIN SMALL LETTER Y WITH DIAERESIS
+<br/>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/char/unicode/latin1diff.out_html b/regress/usr.bin/mandoc/char/unicode/latin1diff.out_html
index cf064d60261..fa1a48657da 100644
--- a/regress/usr.bin/mandoc/char/unicode/latin1diff.out_html
+++ b/regress/usr.bin/mandoc/char/unicode/latin1diff.out_html
@@ -1,13 +1,25 @@
-BEGINTEST<br/>
-&#161;&#161; INVERTED EXCLAMATION MARK<br/>
-&#163;&#163; POUND SIGN<br/>
-&#167;&#167; SECTION SIGN<br/>
-&#175;&#175; MACRON<br/>
-&#176;&#176; DEGREE SIGN<br/>
-&#182;&#182; PILCROW SIGN<br/>
-&#191;&#191; INVERTED QUESTION MARK<br/>
-&#222;&#222; LATIN CAPITAL LETTER THORN<br/>
-&#223;&#223; LATIN SMALL LETTER SHARP S<br/>
-&#240;&#240; LATIN SMALL LETTER ETH<br/>
-&#254;&#254; LATIN SMALL LETTER THORN<br/>
-ENDTEST<br/>
+BEGINTEST
+<br/>
+&#161;&#161; INVERTED EXCLAMATION MARK
+<br/>
+&#163;&#163; POUND SIGN
+<br/>
+&#167;&#167; SECTION SIGN
+<br/>
+&#175;&#175; MACRON
+<br/>
+&#176;&#176; DEGREE SIGN
+<br/>
+&#182;&#182; PILCROW SIGN
+<br/>
+&#191;&#191; INVERTED QUESTION MARK
+<br/>
+&#222;&#222; LATIN CAPITAL LETTER THORN
+<br/>
+&#223;&#223; LATIN SMALL LETTER SHARP S
+<br/>
+&#240;&#240; LATIN SMALL LETTER ETH
+<br/>
+&#254;&#254; LATIN SMALL LETTER THORN
+<br/>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/char/unicode/named.out_html b/regress/usr.bin/mandoc/char/unicode/named.out_html
index 00531947464..8ee47dbf77b 100644
--- a/regress/usr.bin/mandoc/char/unicode/named.out_html
+++ b/regress/usr.bin/mandoc/char/unicode/named.out_html
@@ -1,149 +1,297 @@
-BEGINTEST<br/>
-&#305;&#305; LATIN SMALL LETTER DOTLESS I<br/>
-&#306;&#306; LATIN CAPITAL LIGATURE IJ<br/>
-&#307;&#307; LATIN SMALL LIGATURE IJ<br/>
-&#321;&#321; LATIN CAPITAL LETTER L WITH STROKE<br/>
-&#322;&#322; LATIN SMALL LETTER L WITH STROKE<br/>
-&#338;&#338; LATIN CAPITAL LIGATURE OE<br/>
-&#339;&#339; LATIN SMALL LIGATURE OE<br/>
-&#402;&#402; LATIN SMALL LETTER F WITH HOOK<br/>
-&#711;&#711; CARON<br/>
-&#728;&#728; BREVE<br/>
-&#730;&#730; RING ABOVE<br/>
-&#731;&#731; OGONEK<br/>
-&#733;&#733; DOUBLE ACUTE ACCENT<br/>
-&#913;&#913; GREEK CAPITAL LETTER ALPHA<br/>
-&#914;&#914; GREEK CAPITAL LETTER BETA<br/>
-&#916;&#916; GREEK CAPITAL LETTER DELTA<br/>
-&#917;&#917; GREEK CAPITAL LETTER EPSILON<br/>
-&#918;&#918; GREEK CAPITAL LETTER ZETA<br/>
-&#919;&#919; GREEK CAPITAL LETTER ETA<br/>
-&#920;&#920; GREEK CAPITAL LETTER THETA<br/>
-&#921;&#921; GREEK CAPITAL LETTER IOTA<br/>
-&#922;&#922; GREEK CAPITAL LETTER KAPPA<br/>
-&#923;&#923; GREEK CAPITAL LETTER LAMDA<br/>
-&#924;&#924; GREEK CAPITAL LETTER MU<br/>
-&#925;&#925; GREEK CAPITAL LETTER NU<br/>
-&#926;&#926; GREEK CAPITAL LETTER XI<br/>
-&#927;&#927; GREEK CAPITAL LETTER OMICRON<br/>
-&#928;&#928; GREEK CAPITAL LETTER PI<br/>
-&#929;&#929; GREEK CAPITAL LETTER RHO<br/>
-&#932;&#932; GREEK CAPITAL LETTER TAU<br/>
-&#933;&#933; GREEK CAPITAL LETTER UPSILON<br/>
-&#934;&#934; GREEK CAPITAL LETTER PHI<br/>
-&#935;&#935; GREEK CAPITAL LETTER CHI<br/>
-&#936;&#936; GREEK CAPITAL LETTER PSI<br/>
-&#937;&#937; GREEK CAPITAL LETTER OMEGA<br/>
-&#945;&#945; GREEK SMALL LETTER ALPHA<br/>
-&#946;&#946; GREEK SMALL LETTER BETA<br/>
-&#947;&#947; GREEK SMALL LETTER GAMMA<br/>
-&#948;&#948; GREEK SMALL LETTER DELTA<br/>
-&#949;&#949; GREEK SMALL LETTER EPSILON<br/>
-&#950;&#950; GREEK SMALL LETTER ZETA<br/>
-&#951;&#951; GREEK SMALL LETTER ETA<br/>
-&#952;&#952; GREEK SMALL LETTER THETA<br/>
-&#953;&#953; GREEK SMALL LETTER IOTA<br/>
-&#954;&#954; GREEK SMALL LETTER KAPPA<br/>
-&#955;&#955; GREEK SMALL LETTER LAMDA<br/>
-&#956;&#956; GREEK SMALL LETTER MU<br/>
-&#957;&#957; GREEK SMALL LETTER NU<br/>
-&#958;&#958; GREEK SMALL LETTER XI<br/>
-&#959;&#959; GREEK SMALL LETTER OMICRON<br/>
-&#960;&#960; GREEK SMALL LETTER PI<br/>
-&#961;&#961; GREEK SMALL LETTER RHO<br/>
-&#962;&#962; GREEK SMALL LETTER FINAL SIGMA<br/>
-&#963;&#963; GREEK SMALL LETTER SIGMA<br/>
-&#964;&#964; GREEK SMALL LETTER TAU<br/>
-&#965;&#965; GREEK SMALL LETTER UPSILON<br/>
-&#966;&#966; GREEK SMALL LETTER PHI<br/>
-&#967;&#967; GREEK SMALL LETTER CHI<br/>
-&#968;&#968; GREEK SMALL LETTER PSI<br/>
-&#969;&#969; GREEK SMALL LETTER OMEGA<br/>
-&#977;&#977; GREEK THETA SYMBOL<br/>
-&#981;&#981; GREEK PHI SYMBOL<br/>
-&#982;&#982; GREEK PI SYMBOL<br/>
-&#1013;&#1013; GREEK LUNATE EPSILON SYMBOL<br/>
-&#8208;&#8208; HYPHEN<br/>
-&#8211;&#8211; EN DASH<br/>
-&#8212;&#8212; EM DASH<br/>
-&#8216;&#8216; LEFT SINGLE QUOTATION MARK<br/>
-&#8217;&#8217; RIGHT SINGLE QUOTATION MARK<br/>
-&#8218;&#8218; SINGLE LOW-9 QUOTATION MARK<br/>
-&#8220;&#8220; LEFT DOUBLE QUOTATION MARK<br/>
-&#8221;&#8221; RIGHT DOUBLE QUOTATION MARK<br/>
-&#8222;&#8222; DOUBLE LOW-9 QUOTATION MARK<br/>
-&#8224;&#8224; DAGGER<br/>
-&#8225;&#8225; DOUBLE DAGGER<br/>
-&#8226;&#8226; BULLET<br/>
-&#8240;&#8240; PER MILLE SIGN<br/>
-&#8242;&#8242; PRIME<br/>
-&#8243;&#8243; DOUBLE PRIME<br/>
-&#8249;&#8249; SINGLE LEFT-POINTING ANGLE QUOTATION MARK<br/>
-&#8250;&#8250; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK<br/>
-&#8260;&#8260; FRACTION SLASH<br/>
-&#8364;&#8364;&#8364; EURO SIGN<br/>
-&#8465;&#8465; BLACK-LETTER CAPITAL I<br/>
-&#8476;&#8476; BLACK-LETTER CAPITAL R<br/>
-&#8482;&#8482; TRADE MARK SIGN<br/>
-&#8501;&#8501; ALEF SYMBOL<br/>
-&#8592;&#8592; LEFTWARDS ARROW<br/>
-&#8593;&#8593; UPWARDS ARROW<br/>
-&#8594;&#8594; RIGHTWARDS ARROW<br/>
-&#8595;&#8595; DOWNWARDS ARROW<br/>
-&#8596;&#8596; LEFT RIGHT ARROW<br/>
-&#8629;&#8629; DOWNWARDS ARROW WITH CORNER LEFTWARDS<br/>
-&#8656;&#8656; LEFTWARDS DOUBLE ARROW<br/>
-&#8657;&#8657; UPWARDS DOUBLE ARROW<br/>
-&#8658;&#8658; RIGHTWARDS DOUBLE ARROW<br/>
-&#8659;&#8659; DOWNWARDS DOUBLE ARROW<br/>
-&#8660;&#8660; LEFT RIGHT DOUBLE ARROW<br/>
-&#8704;&#8704; FOR ALL<br/>
-&#8706;&#8706; PARTIAL DIFFERENTIAL<br/>
-&#8707;&#8707; THERE EXISTS<br/>
-&#8709;&#8709; EMPTY SET<br/>
-&#8712;&#8712; ELEMENT OF<br/>
-&#8715;&#8715; CONTAINS AS MEMBER<br/>
-&#8722;&#8722; MINUS SIGN<br/>
-&#8723;&#8723; MINUS-OR-PLUS SIGN<br/>
-&#8727;&#8727; ASTERISK OPERATOR<br/>
-&#8730;&#8730; SQUARE ROOT<br/>
-&#8733;&#8733; PROPORTIONAL TO<br/>
-&#8734;&#8734; INFINITY<br/>
-&#8736;&#8736; ANGLE<br/>
-&#8743;&#8743; LOGICAL AND<br/>
-&#8744;&#8744; LOGICAL OR<br/>
-&#8745;&#8745; INTERSECTION<br/>
-&#8746;&#8746; UNION<br/>
-&#8747;&#8747; INTEGRAL<br/>
-&#8756;&#8756;&#8756; THEREFORE<br/>
-&#8764;&#8764; TILDE OPERATOR<br/>
-&#8771;&#8771; ASYMPTOTICALLY EQUAL TO<br/>
-&#8773;&#8773; APPROXIMATELY EQUAL TO<br/>
-&#8776;&#8776;&#8776; ALMOST EQUAL TO<br/>
-&#8800;&#8800; NOT EQUAL TO<br/>
-&#8801;&#8801; IDENTICAL TO<br/>
-&#8802;&#8802; NOT IDENTICAL TO<br/>
-&#8804;&#8804; LESS-THAN OR EQUAL TO<br/>
-&#8805;&#8805; GREATER-THAN OR EQUAL TO<br/>
-&#8834;&#8834; SUBSET OF<br/>
-&#8835;&#8835; SUPERSET OF<br/>
-&#8838;&#8838; SUBSET OF OR EQUAL TO<br/>
-&#8839;&#8839; SUPERSET OF OR EQUAL TO<br/>
-&#8853;&#8853; CIRCLED PLUS<br/>
-&#8855;&#8855; CIRCLED TIMES<br/>
-&#8869;&#8869; UP TACK<br/>
-&#8901;&#8901; DOT OPERATOR<br/>
-&#8968;&#8968; LEFT CEILING<br/>
-&#8969;&#8969; RIGHT CEILING<br/>
-&#8970;&#8970; LEFT FLOOR<br/>
-&#8971;&#8971; RIGHT FLOOR<br/>
-&#9130;&#9130; CURLY BRACKET EXTENSION<br/>
-&#9474;&#9474; BOX DRAWINGS LIGHT VERTICAL<br/>
-&#9633;&#9633; WHITE SQUARE<br/>
-&#9674;&#9674; LOZENGE<br/>
-&#9675;&#9675; WHITE CIRCLE<br/>
-&#9756;&#9756; WHITE LEFT POINTING INDEX<br/>
-&#9758;&#9758; WHITE RIGHT POINTING INDEX<br/>
-&#10216;&#10216; MATHEMATICAL LEFT ANGLE BRACKET<br/>
-&#10217;&#10217; MATHEMATICAL RIGHT ANGLE BRACKET<br/>
-ENDTEST<br/>
+BEGINTEST
+<br/>
+&#305;&#305; LATIN SMALL LETTER DOTLESS I
+<br/>
+&#306;&#306; LATIN CAPITAL LIGATURE IJ
+<br/>
+&#307;&#307; LATIN SMALL LIGATURE IJ
+<br/>
+&#321;&#321; LATIN CAPITAL LETTER L WITH STROKE
+<br/>
+&#322;&#322; LATIN SMALL LETTER L WITH STROKE
+<br/>
+&#338;&#338; LATIN CAPITAL LIGATURE OE
+<br/>
+&#339;&#339; LATIN SMALL LIGATURE OE
+<br/>
+&#402;&#402; LATIN SMALL LETTER F WITH HOOK
+<br/>
+&#711;&#711; CARON
+<br/>
+&#728;&#728; BREVE
+<br/>
+&#730;&#730; RING ABOVE
+<br/>
+&#731;&#731; OGONEK
+<br/>
+&#733;&#733; DOUBLE ACUTE ACCENT
+<br/>
+&#913;&#913; GREEK CAPITAL LETTER ALPHA
+<br/>
+&#914;&#914; GREEK CAPITAL LETTER BETA
+<br/>
+&#916;&#916; GREEK CAPITAL LETTER DELTA
+<br/>
+&#917;&#917; GREEK CAPITAL LETTER EPSILON
+<br/>
+&#918;&#918; GREEK CAPITAL LETTER ZETA
+<br/>
+&#919;&#919; GREEK CAPITAL LETTER ETA
+<br/>
+&#920;&#920; GREEK CAPITAL LETTER THETA
+<br/>
+&#921;&#921; GREEK CAPITAL LETTER IOTA
+<br/>
+&#922;&#922; GREEK CAPITAL LETTER KAPPA
+<br/>
+&#923;&#923; GREEK CAPITAL LETTER LAMDA
+<br/>
+&#924;&#924; GREEK CAPITAL LETTER MU
+<br/>
+&#925;&#925; GREEK CAPITAL LETTER NU
+<br/>
+&#926;&#926; GREEK CAPITAL LETTER XI
+<br/>
+&#927;&#927; GREEK CAPITAL LETTER OMICRON
+<br/>
+&#928;&#928; GREEK CAPITAL LETTER PI
+<br/>
+&#929;&#929; GREEK CAPITAL LETTER RHO
+<br/>
+&#932;&#932; GREEK CAPITAL LETTER TAU
+<br/>
+&#933;&#933; GREEK CAPITAL LETTER UPSILON
+<br/>
+&#934;&#934; GREEK CAPITAL LETTER PHI
+<br/>
+&#935;&#935; GREEK CAPITAL LETTER CHI
+<br/>
+&#936;&#936; GREEK CAPITAL LETTER PSI
+<br/>
+&#937;&#937; GREEK CAPITAL LETTER OMEGA
+<br/>
+&#945;&#945; GREEK SMALL LETTER ALPHA
+<br/>
+&#946;&#946; GREEK SMALL LETTER BETA
+<br/>
+&#947;&#947; GREEK SMALL LETTER GAMMA
+<br/>
+&#948;&#948; GREEK SMALL LETTER DELTA
+<br/>
+&#949;&#949; GREEK SMALL LETTER EPSILON
+<br/>
+&#950;&#950; GREEK SMALL LETTER ZETA
+<br/>
+&#951;&#951; GREEK SMALL LETTER ETA
+<br/>
+&#952;&#952; GREEK SMALL LETTER THETA
+<br/>
+&#953;&#953; GREEK SMALL LETTER IOTA
+<br/>
+&#954;&#954; GREEK SMALL LETTER KAPPA
+<br/>
+&#955;&#955; GREEK SMALL LETTER LAMDA
+<br/>
+&#956;&#956; GREEK SMALL LETTER MU
+<br/>
+&#957;&#957; GREEK SMALL LETTER NU
+<br/>
+&#958;&#958; GREEK SMALL LETTER XI
+<br/>
+&#959;&#959; GREEK SMALL LETTER OMICRON
+<br/>
+&#960;&#960; GREEK SMALL LETTER PI
+<br/>
+&#961;&#961; GREEK SMALL LETTER RHO
+<br/>
+&#962;&#962; GREEK SMALL LETTER FINAL SIGMA
+<br/>
+&#963;&#963; GREEK SMALL LETTER SIGMA
+<br/>
+&#964;&#964; GREEK SMALL LETTER TAU
+<br/>
+&#965;&#965; GREEK SMALL LETTER UPSILON
+<br/>
+&#966;&#966; GREEK SMALL LETTER PHI
+<br/>
+&#967;&#967; GREEK SMALL LETTER CHI
+<br/>
+&#968;&#968; GREEK SMALL LETTER PSI
+<br/>
+&#969;&#969; GREEK SMALL LETTER OMEGA
+<br/>
+&#977;&#977; GREEK THETA SYMBOL
+<br/>
+&#981;&#981; GREEK PHI SYMBOL
+<br/>
+&#982;&#982; GREEK PI SYMBOL
+<br/>
+&#1013;&#1013; GREEK LUNATE EPSILON SYMBOL
+<br/>
+&#8208;&#8208; HYPHEN
+<br/>
+&#8211;&#8211; EN DASH
+<br/>
+&#8212;&#8212; EM DASH
+<br/>
+&#8216;&#8216; LEFT SINGLE QUOTATION MARK
+<br/>
+&#8217;&#8217; RIGHT SINGLE QUOTATION MARK
+<br/>
+&#8218;&#8218; SINGLE LOW-9 QUOTATION MARK
+<br/>
+&#8220;&#8220; LEFT DOUBLE QUOTATION MARK
+<br/>
+&#8221;&#8221; RIGHT DOUBLE QUOTATION MARK
+<br/>
+&#8222;&#8222; DOUBLE LOW-9 QUOTATION MARK
+<br/>
+&#8224;&#8224; DAGGER
+<br/>
+&#8225;&#8225; DOUBLE DAGGER
+<br/>
+&#8226;&#8226; BULLET
+<br/>
+&#8240;&#8240; PER MILLE SIGN
+<br/>
+&#8242;&#8242; PRIME
+<br/>
+&#8243;&#8243; DOUBLE PRIME
+<br/>
+&#8249;&#8249; SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+<br/>
+&#8250;&#8250; SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+<br/>
+&#8260;&#8260; FRACTION SLASH
+<br/>
+&#8364;&#8364;&#8364; EURO SIGN
+<br/>
+&#8465;&#8465; BLACK-LETTER CAPITAL I
+<br/>
+&#8476;&#8476; BLACK-LETTER CAPITAL R
+<br/>
+&#8482;&#8482; TRADE MARK SIGN
+<br/>
+&#8501;&#8501; ALEF SYMBOL
+<br/>
+&#8592;&#8592; LEFTWARDS ARROW
+<br/>
+&#8593;&#8593; UPWARDS ARROW
+<br/>
+&#8594;&#8594; RIGHTWARDS ARROW
+<br/>
+&#8595;&#8595; DOWNWARDS ARROW
+<br/>
+&#8596;&#8596; LEFT RIGHT ARROW
+<br/>
+&#8629;&#8629; DOWNWARDS ARROW WITH CORNER LEFTWARDS
+<br/>
+&#8656;&#8656; LEFTWARDS DOUBLE ARROW
+<br/>
+&#8657;&#8657; UPWARDS DOUBLE ARROW
+<br/>
+&#8658;&#8658; RIGHTWARDS DOUBLE ARROW
+<br/>
+&#8659;&#8659; DOWNWARDS DOUBLE ARROW
+<br/>
+&#8660;&#8660; LEFT RIGHT DOUBLE ARROW
+<br/>
+&#8704;&#8704; FOR ALL
+<br/>
+&#8706;&#8706; PARTIAL DIFFERENTIAL
+<br/>
+&#8707;&#8707; THERE EXISTS
+<br/>
+&#8709;&#8709; EMPTY SET
+<br/>
+&#8712;&#8712; ELEMENT OF
+<br/>
+&#8715;&#8715; CONTAINS AS MEMBER
+<br/>
+&#8722;&#8722; MINUS SIGN
+<br/>
+&#8723;&#8723; MINUS-OR-PLUS SIGN
+<br/>
+&#8727;&#8727; ASTERISK OPERATOR
+<br/>
+&#8730;&#8730; SQUARE ROOT
+<br/>
+&#8733;&#8733; PROPORTIONAL TO
+<br/>
+&#8734;&#8734; INFINITY
+<br/>
+&#8736;&#8736; ANGLE
+<br/>
+&#8743;&#8743; LOGICAL AND
+<br/>
+&#8744;&#8744; LOGICAL OR
+<br/>
+&#8745;&#8745; INTERSECTION
+<br/>
+&#8746;&#8746; UNION
+<br/>
+&#8747;&#8747; INTEGRAL
+<br/>
+&#8756;&#8756;&#8756; THEREFORE
+<br/>
+&#8764;&#8764; TILDE OPERATOR
+<br/>
+&#8771;&#8771; ASYMPTOTICALLY EQUAL TO
+<br/>
+&#8773;&#8773; APPROXIMATELY EQUAL TO
+<br/>
+&#8776;&#8776;&#8776; ALMOST EQUAL TO
+<br/>
+&#8800;&#8800; NOT EQUAL TO
+<br/>
+&#8801;&#8801; IDENTICAL TO
+<br/>
+&#8802;&#8802; NOT IDENTICAL TO
+<br/>
+&#8804;&#8804; LESS-THAN OR EQUAL TO
+<br/>
+&#8805;&#8805; GREATER-THAN OR EQUAL TO
+<br/>
+&#8834;&#8834; SUBSET OF
+<br/>
+&#8835;&#8835; SUPERSET OF
+<br/>
+&#8838;&#8838; SUBSET OF OR EQUAL TO
+<br/>
+&#8839;&#8839; SUPERSET OF OR EQUAL TO
+<br/>
+&#8853;&#8853; CIRCLED PLUS
+<br/>
+&#8855;&#8855; CIRCLED TIMES
+<br/>
+&#8869;&#8869; UP TACK
+<br/>
+&#8901;&#8901; DOT OPERATOR
+<br/>
+&#8968;&#8968; LEFT CEILING
+<br/>
+&#8969;&#8969; RIGHT CEILING
+<br/>
+&#8970;&#8970; LEFT FLOOR
+<br/>
+&#8971;&#8971; RIGHT FLOOR
+<br/>
+&#9130;&#9130; CURLY BRACKET EXTENSION
+<br/>
+&#9474;&#9474; BOX DRAWINGS LIGHT VERTICAL
+<br/>
+&#9633;&#9633; WHITE SQUARE
+<br/>
+&#9674;&#9674; LOZENGE
+<br/>
+&#9675;&#9675; WHITE CIRCLE
+<br/>
+&#9756;&#9756; WHITE LEFT POINTING INDEX
+<br/>
+&#9758;&#9758; WHITE RIGHT POINTING INDEX
+<br/>
+&#10216;&#10216; MATHEMATICAL LEFT ANGLE BRACKET
+<br/>
+&#10217;&#10217; MATHEMATICAL RIGHT ANGLE BRACKET
+<br/>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/char/unicode/namediff.out_html b/regress/usr.bin/mandoc/char/unicode/namediff.out_html
index 17fb5c8ef94..6c4946295ba 100644
--- a/regress/usr.bin/mandoc/char/unicode/namediff.out_html
+++ b/regress/usr.bin/mandoc/char/unicode/namediff.out_html
@@ -1,37 +1,73 @@
-BEGINTEST<br/>
-&#567;&#567; LATIN SMALL LETTER DOTLESS J<br/>
-&#729;&#729; DOT ABOVE<br/>
-&#915;&#915; GREEK CAPITAL LETTER GAMMA<br/>
-&#931;&#931; GREEK CAPITAL LETTER SIGMA<br/>
-&#8254;&#8254; OVERLINE<br/>
-&#8463;&#8463; PLANCK CONSTANT OVER TWO PI<br/>
-&#8597;&#8597; UP DOWN ARROW<br/>
-&#8661;&#8661; UP DOWN DOUBLE ARROW<br/>
-&#8711;&#8711; NABLA<br/>
-&#8713;&#8713; NOT AN ELEMENT OF<br/>
-&#8719;&#8719; N-ARY PRODUCT<br/>
-&#8720;&#8720; N-ARY COPRODUCT<br/>
-&#8721;&#8721; N-ARY SUMMATION<br/>
-&#8836;&#8836; NOT A SUBSET OF<br/>
-&#8837;&#8837; NOT A SUPERSET OF<br/>
-&#9115;&#9115; LEFT PARENTHESIS UPPER HOOK<br/>
-&#9116;&#9116; LEFT PARENTHESIS EXTENSION<br/>
-&#9117;&#9117; LEFT PARENTHESIS LOWER HOOK<br/>
-&#9118;&#9118; RIGHT PARENTHESIS UPPER HOOK<br/>
-&#9119;&#9119; RIGHT PARENTHESIS EXTENSION<br/>
-&#9120;&#9120; RIGHT PARENTHESIS LOWER HOOK<br/>
-&#9121;&#9121; LEFT SQUARE BRACKET UPPER CORNER<br/>
-&#9122;&#9122; LEFT SQUARE BRACKET EXTENSION<br/>
-&#9123;&#9123; LEFT SQUARE BRACKET LOWER CORNER<br/>
-&#9124;&#9124; RIGHT SQUARE BRACKET UPPER CORNER<br/>
-&#9125;&#9125; RIGHT SQUARE BRACKET EXTENSION<br/>
-&#9126;&#9126; RIGHT SQUARE BRACKET LOWER CORNER<br/>
-&#9127;&#9127; LEFT CURLY BRACKET UPPER HOOK<br/>
-&#9128;&#9128; LEFT CURLY BRACKET MIDDLE PIECE<br/>
-&#9129;&#9129; LEFT CURLY BRACKET LOWER HOOK<br/>
-&#9130;&#9130;&#9130;&#9130; CURLY BRACKET EXTENSION<br/>
-&#9131;&#9131; RIGHT CURLY BRACKET UPPER HOOK<br/>
-&#9132;&#9132; RIGHT CURLY BRACKET MIDDLE PIECE<br/>
-&#9133;&#9133; RIGHT CURLY BRACKET LOWER HOOK<br/>
-&#10003;&#10003; CHECK MARK<br/>
-ENDTEST<br/>
+BEGINTEST
+<br/>
+&#567;&#567; LATIN SMALL LETTER DOTLESS J
+<br/>
+&#729;&#729; DOT ABOVE
+<br/>
+&#915;&#915; GREEK CAPITAL LETTER GAMMA
+<br/>
+&#931;&#931; GREEK CAPITAL LETTER SIGMA
+<br/>
+&#8254;&#8254; OVERLINE
+<br/>
+&#8463;&#8463; PLANCK CONSTANT OVER TWO PI
+<br/>
+&#8597;&#8597; UP DOWN ARROW
+<br/>
+&#8661;&#8661; UP DOWN DOUBLE ARROW
+<br/>
+&#8711;&#8711; NABLA
+<br/>
+&#8713;&#8713; NOT AN ELEMENT OF
+<br/>
+&#8719;&#8719; N-ARY PRODUCT
+<br/>
+&#8720;&#8720; N-ARY COPRODUCT
+<br/>
+&#8721;&#8721; N-ARY SUMMATION
+<br/>
+&#8836;&#8836; NOT A SUBSET OF
+<br/>
+&#8837;&#8837; NOT A SUPERSET OF
+<br/>
+&#9115;&#9115; LEFT PARENTHESIS UPPER HOOK
+<br/>
+&#9116;&#9116; LEFT PARENTHESIS EXTENSION
+<br/>
+&#9117;&#9117; LEFT PARENTHESIS LOWER HOOK
+<br/>
+&#9118;&#9118; RIGHT PARENTHESIS UPPER HOOK
+<br/>
+&#9119;&#9119; RIGHT PARENTHESIS EXTENSION
+<br/>
+&#9120;&#9120; RIGHT PARENTHESIS LOWER HOOK
+<br/>
+&#9121;&#9121; LEFT SQUARE BRACKET UPPER CORNER
+<br/>
+&#9122;&#9122; LEFT SQUARE BRACKET EXTENSION
+<br/>
+&#9123;&#9123; LEFT SQUARE BRACKET LOWER CORNER
+<br/>
+&#9124;&#9124; RIGHT SQUARE BRACKET UPPER CORNER
+<br/>
+&#9125;&#9125; RIGHT SQUARE BRACKET EXTENSION
+<br/>
+&#9126;&#9126; RIGHT SQUARE BRACKET LOWER CORNER
+<br/>
+&#9127;&#9127; LEFT CURLY BRACKET UPPER HOOK
+<br/>
+&#9128;&#9128; LEFT CURLY BRACKET MIDDLE PIECE
+<br/>
+&#9129;&#9129; LEFT CURLY BRACKET LOWER HOOK
+<br/>
+&#9130;&#9130;&#9130;&#9130; CURLY BRACKET EXTENSION
+<br/>
+&#9131;&#9131; RIGHT CURLY BRACKET UPPER HOOK
+<br/>
+&#9132;&#9132; RIGHT CURLY BRACKET MIDDLE PIECE
+<br/>
+&#9133;&#9133; RIGHT CURLY BRACKET LOWER HOOK
+<br/>
+&#10003;&#10003; CHECK MARK
+<br/>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/char/unicode/nogroff.out_html b/regress/usr.bin/mandoc/char/unicode/nogroff.out_html
index 440da23e1e5..849f8b07aef 100644
--- a/regress/usr.bin/mandoc/char/unicode/nogroff.out_html
+++ b/regress/usr.bin/mandoc/char/unicode/nogroff.out_html
@@ -1,37 +1,73 @@
-BEGINTEST<br/>
-&#65533;&#65533; &lt;control&gt; NULL<br/>
-&#65533;&#65533; &lt;control&gt; START OF HEADING<br/>
-&#65533;&#65533; &lt;control&gt; BELL<br/>
-&#65533;&#65533; &lt;control&gt; BACKSPACE<br/>
- &lt;control&gt; CHARACTER TABULATION<br/>
-&#65533;&#65533; &lt;control&gt; LINE FEED<br/>
-&#65533;&#65533; &lt;control&gt; LINE TABULATION<br/>
-&#65533;&#65533; &lt;control&gt; FORM FEED<br/>
-&#65533;&#65533; &lt;control&gt; CARRIAGE RETURN<br/>
-&#65533;&#65533; &lt;control&gt; ESCAPE<br/>
-&#65533;&#65533; &lt;control&gt; DELETE<br/>
-&#65533;&#65533; &lt;control&gt; 0x80<br/>
-&#65533;&#65533; &lt;control&gt; 0x81<br/>
-&#65533;&#65533; &lt;control&gt; BREAK PERMITTED HERE<br/>
-&#65533;&#65533; &lt;control&gt; NO BREAK HERE<br/>
-&#65533;&#65533; &lt;control&gt; PRIVACY MESSAGE<br/>
-&#65533;&#65533; &lt;control&gt; APPLICATION PROGRAM COMMAND<br/>
-&#8810;&#8810; MUCH LESS-THAN<br/>
-&#8811;&#8811; MUCH GREATER-THAN<br/>
-&#64256;&#64256; LATIN SMALL LIGATURE FF<br/>
-&#64257;&#64257; LATIN SMALL LIGATURE FI<br/>
-&#64258;&#64258; LATIN SMALL LIGATURE FL<br/>
-&#64259;&#64259; LATIN SMALL LIGATURE FFI<br/>
-&#64260;&#64260; LATIN SMALL LIGATURE FFL<br/>
-&#65533; REPLACEMENT CHARACTER<br/>
-&#65534; &lt;undefined&gt;<br/>
-&#65535; &lt;undefined&gt;<br/>
-&#65536; LINEAR B SYLLABLE B008 A<br/>
-&#1048573; &lt;Plane 15 Private Use, Last&gt;<br/>
-&#1048574; &lt;undefined&gt;<br/>
-&#1048575; &lt;undefined&gt;<br/>
-&#1048576; &lt;Plane 16 Private Use, First&gt;<br/>
-&#1114109; &lt;Plane 16 Private Use, Last&gt;<br/>
-&#1114110; &lt;undefined&gt;<br/>
-&#1114111; &lt;undefined&gt;<br/>
-ENDTEST<br/>
+BEGINTEST
+<br/>
+&#65533;&#65533; &lt;control&gt; NULL
+<br/>
+&#65533;&#65533; &lt;control&gt; START OF HEADING
+<br/>
+&#65533;&#65533; &lt;control&gt; BELL
+<br/>
+&#65533;&#65533; &lt;control&gt; BACKSPACE
+<br/>
+ &lt;control&gt; CHARACTER TABULATION
+<br/>
+&#65533;&#65533; &lt;control&gt; LINE FEED
+<br/>
+&#65533;&#65533; &lt;control&gt; LINE TABULATION
+<br/>
+&#65533;&#65533; &lt;control&gt; FORM FEED
+<br/>
+&#65533;&#65533; &lt;control&gt; CARRIAGE RETURN
+<br/>
+&#65533;&#65533; &lt;control&gt; ESCAPE
+<br/>
+&#65533;&#65533; &lt;control&gt; DELETE
+<br/>
+&#65533;&#65533; &lt;control&gt; 0x80
+<br/>
+&#65533;&#65533; &lt;control&gt; 0x81
+<br/>
+&#65533;&#65533; &lt;control&gt; BREAK PERMITTED HERE
+<br/>
+&#65533;&#65533; &lt;control&gt; NO BREAK HERE
+<br/>
+&#65533;&#65533; &lt;control&gt; PRIVACY MESSAGE
+<br/>
+&#65533;&#65533; &lt;control&gt; APPLICATION PROGRAM COMMAND
+<br/>
+&#8810;&#8810; MUCH LESS-THAN
+<br/>
+&#8811;&#8811; MUCH GREATER-THAN
+<br/>
+&#64256;&#64256; LATIN SMALL LIGATURE FF
+<br/>
+&#64257;&#64257; LATIN SMALL LIGATURE FI
+<br/>
+&#64258;&#64258; LATIN SMALL LIGATURE FL
+<br/>
+&#64259;&#64259; LATIN SMALL LIGATURE FFI
+<br/>
+&#64260;&#64260; LATIN SMALL LIGATURE FFL
+<br/>
+&#65533; REPLACEMENT CHARACTER
+<br/>
+&#65534; &lt;undefined&gt;
+<br/>
+&#65535; &lt;undefined&gt;
+<br/>
+&#65536; LINEAR B SYLLABLE B008 A
+<br/>
+&#1048573; &lt;Plane 15 Private Use, Last&gt;
+<br/>
+&#1048574; &lt;undefined&gt;
+<br/>
+&#1048575; &lt;undefined&gt;
+<br/>
+&#1048576; &lt;Plane 16 Private Use, First&gt;
+<br/>
+&#1114109; &lt;Plane 16 Private Use, Last&gt;
+<br/>
+&#1114110; &lt;undefined&gt;
+<br/>
+&#1114111; &lt;undefined&gt;
+<br/>
+ENDTEST
diff --git a/regress/usr.bin/mandoc/eqn/extract.pl b/regress/usr.bin/mandoc/eqn/extract.pl
index 60e9d643839..e785f986e62 100755
--- a/regress/usr.bin/mandoc/eqn/extract.pl
+++ b/regress/usr.bin/mandoc/eqn/extract.pl
@@ -12,6 +12,7 @@ while (<>) {
next unless length;
}
s/<\/math>.*// and $ended = 1;
+ s/^ *//;
print "$_\n" if length;
exit 0 if $ended;
}
diff --git a/usr.bin/mandoc/html.c b/usr.bin/mandoc/html.c
index 6b5443e8b04..f42a354c3ad 100644
--- a/usr.bin/mandoc/html.c
+++ b/usr.bin/mandoc/html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: html.c,v 1.65 2017/01/17 15:32:39 schwarze Exp $ */
+/* $OpenBSD: html.c,v 1.66 2017/01/18 19:22:18 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -36,58 +36,66 @@
struct htmldata {
const char *name;
int flags;
-#define HTML_CLRLINE (1 << 0)
-#define HTML_NOSTACK (1 << 1)
-#define HTML_AUTOCLOSE (1 << 2) /* Tag has auto-closure. */
+#define HTML_NOSTACK (1 << 0)
+#define HTML_AUTOCLOSE (1 << 1)
+#define HTML_NLBEFORE (1 << 2)
+#define HTML_NLBEGIN (1 << 3)
+#define HTML_NLEND (1 << 4)
+#define HTML_NLAFTER (1 << 5)
+#define HTML_NLAROUND (HTML_NLBEFORE | HTML_NLAFTER)
+#define HTML_NLINSIDE (HTML_NLBEGIN | HTML_NLEND)
+#define HTML_NLALL (HTML_NLAROUND | HTML_NLINSIDE)
+#define HTML_INDENT (1 << 6)
+#define HTML_NOINDENT (1 << 7)
};
static const struct htmldata htmltags[TAG_MAX] = {
- {"html", HTML_CLRLINE}, /* TAG_HTML */
- {"head", HTML_CLRLINE}, /* TAG_HEAD */
- {"body", HTML_CLRLINE}, /* TAG_BODY */
- {"meta", HTML_CLRLINE | HTML_NOSTACK | HTML_AUTOCLOSE}, /* TAG_META */
- {"title", HTML_CLRLINE}, /* TAG_TITLE */
- {"div", HTML_CLRLINE}, /* TAG_DIV */
- {"h1", 0}, /* TAG_H1 */
- {"h2", 0}, /* TAG_H2 */
- {"span", 0}, /* TAG_SPAN */
- {"link", HTML_CLRLINE | HTML_NOSTACK | HTML_AUTOCLOSE}, /* TAG_LINK */
- {"br", HTML_CLRLINE | HTML_NOSTACK | HTML_AUTOCLOSE}, /* TAG_BR */
- {"a", 0}, /* TAG_A */
- {"table", HTML_CLRLINE}, /* TAG_TABLE */
- {"tbody", HTML_CLRLINE}, /* TAG_TBODY */
- {"col", HTML_CLRLINE | HTML_NOSTACK | HTML_AUTOCLOSE}, /* TAG_COL */
- {"tr", HTML_CLRLINE}, /* TAG_TR */
- {"td", HTML_CLRLINE}, /* TAG_TD */
- {"li", HTML_CLRLINE}, /* TAG_LI */
- {"ul", HTML_CLRLINE}, /* TAG_UL */
- {"ol", HTML_CLRLINE}, /* TAG_OL */
- {"dl", HTML_CLRLINE}, /* TAG_DL */
- {"dt", HTML_CLRLINE}, /* TAG_DT */
- {"dd", HTML_CLRLINE}, /* TAG_DD */
- {"blockquote", HTML_CLRLINE}, /* TAG_BLOCKQUOTE */
- {"pre", HTML_CLRLINE }, /* TAG_PRE */
- {"b", 0 }, /* TAG_B */
- {"i", 0 }, /* TAG_I */
- {"code", 0 }, /* TAG_CODE */
- {"small", 0 }, /* TAG_SMALL */
- {"style", HTML_CLRLINE}, /* TAG_STYLE */
- {"math", HTML_CLRLINE}, /* TAG_MATH */
- {"mrow", 0}, /* TAG_MROW */
- {"mi", 0}, /* TAG_MI */
- {"mo", 0}, /* TAG_MO */
- {"msup", 0}, /* TAG_MSUP */
- {"msub", 0}, /* TAG_MSUB */
- {"msubsup", 0}, /* TAG_MSUBSUP */
- {"mfrac", 0}, /* TAG_MFRAC */
- {"msqrt", 0}, /* TAG_MSQRT */
- {"mfenced", 0}, /* TAG_MFENCED */
- {"mtable", 0}, /* TAG_MTABLE */
- {"mtr", 0}, /* TAG_MTR */
- {"mtd", 0}, /* TAG_MTD */
- {"munderover", 0}, /* TAG_MUNDEROVER */
- {"munder", 0}, /* TAG_MUNDER*/
- {"mover", 0}, /* TAG_MOVER*/
+ {"html", HTML_NLALL},
+ {"head", HTML_NLALL | HTML_INDENT},
+ {"body", HTML_NLALL},
+ {"meta", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
+ {"title", HTML_NLAROUND},
+ {"div", HTML_NLAROUND},
+ {"h1", HTML_NLAROUND},
+ {"h2", HTML_NLAROUND},
+ {"span", 0},
+ {"link", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
+ {"br", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
+ {"a", 0},
+ {"table", HTML_NLALL | HTML_INDENT},
+ {"tbody", HTML_NLALL | HTML_INDENT},
+ {"col", HTML_NOSTACK | HTML_AUTOCLOSE | HTML_NLALL},
+ {"tr", HTML_NLALL | HTML_INDENT},
+ {"td", HTML_NLAROUND},
+ {"li", HTML_NLAROUND | HTML_INDENT},
+ {"ul", HTML_NLALL | HTML_INDENT},
+ {"ol", HTML_NLALL | HTML_INDENT},
+ {"dl", HTML_NLALL | HTML_INDENT},
+ {"dt", HTML_NLAROUND},
+ {"dd", HTML_NLAROUND | HTML_INDENT},
+ {"blockquote", HTML_NLALL | HTML_INDENT},
+ {"pre", HTML_NLALL | HTML_NOINDENT},
+ {"b", 0},
+ {"i", 0},
+ {"code", 0},
+ {"small", 0},
+ {"style", HTML_NLALL | HTML_INDENT},
+ {"math", HTML_NLALL | HTML_INDENT},
+ {"mrow", 0},
+ {"mi", 0},
+ {"mo", 0},
+ {"msup", 0},
+ {"msub", 0},
+ {"msubsup", 0},
+ {"mfrac", 0},
+ {"msqrt", 0},
+ {"mfenced", 0},
+ {"mtable", 0},
+ {"mtr", 0},
+ {"mtd", 0},
+ {"munderover", 0},
+ {"munder", 0},
+ {"mover", 0},
};
static const char *const roffscales[SCALE_MAX] = {
@@ -104,6 +112,8 @@ static const char *const roffscales[SCALE_MAX] = {
};
static void a2width(const char *, struct roffsu *);
+static void html_endline(struct html *);
+static void html_indent(struct html *);
static void print_ctag(struct html *, struct tag *);
static int print_escape(char);
static int print_encode(struct html *, const char *, const char *, int);
@@ -154,13 +164,19 @@ print_gen_head(struct html *h)
/*
* Print a default style-sheet.
*/
+
t = print_otag(h, TAG_STYLE, "");
- print_text(h, "table.head, table.foot { width: 100%; }\n"
- "td.head-rtitle, td.foot-os { text-align: right; }\n"
- "td.head-vol { text-align: center; }\n"
- "table.foot td { width: 50%; }\n"
- "table.head td { width: 33%; }\n"
- "div.spacer { margin: 1em 0; }\n");
+ print_text(h, "table.head, table.foot { width: 100%; }");
+ html_endline(h);
+ print_text(h, "td.head-rtitle, td.foot-os { text-align: right; }");
+ html_endline(h);
+ print_text(h, "td.head-vol { text-align: center; }");
+ html_endline(h);
+ print_text(h, "table.foot td { width: 50%; }");
+ html_endline(h);
+ print_text(h, "table.head td { width: 33%; }");
+ html_endline(h);
+ print_text(h, "div.spacer { margin: 1em 0; }");
print_tagq(h, t);
if (h->style)
@@ -433,11 +449,13 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
const char *attr;
char *s;
double v;
- int i, have_style;
+ int i, have_style, tflags;
+
+ tflags = htmltags[tag].flags;
/* Push this tags onto the stack of open scopes. */
- if ( ! (HTML_NOSTACK & htmltags[tag].flags)) {
+ if ((tflags & HTML_NOSTACK) == 0) {
t = mandoc_malloc(sizeof(struct tag));
t->tag = tag;
t->next = h->tags.head;
@@ -445,16 +463,19 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
} else
t = NULL;
- if ( ! (HTML_NOSPACE & h->flags))
- if ( ! (HTML_CLRLINE & htmltags[tag].flags)) {
- /* Manage keeps! */
- if ( ! (HTML_KEEP & h->flags)) {
- if (HTML_PREKEEP & h->flags)
- h->flags |= HTML_KEEP;
- putchar(' ');
- } else
- printf("&#160;");
+ if (tflags & HTML_NLBEFORE)
+ html_endline(h);
+ if (h->flags & HTML_NLDONE)
+ html_indent(h);
+ else if ((h->flags & HTML_NOSPACE) == 0) {
+ if (h->flags & HTML_KEEP)
+ printf("&#160;");
+ else {
+ if (h->flags & HTML_PREKEEP)
+ h->flags |= HTML_KEEP;
+ putchar(' ');
}
+ }
if ( ! (h->flags & HTML_NONOSPACE))
h->flags &= ~HTML_NOSPACE;
@@ -594,10 +615,15 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
putchar('>');
- h->flags |= HTML_NOSPACE;
+ if (tflags & HTML_NLBEGIN)
+ html_endline(h);
+ else
+ h->flags |= HTML_NOSPACE;
- if ((HTML_AUTOCLOSE | HTML_CLRLINE) & htmltags[tag].flags)
- putchar('\n');
+ if (tflags & HTML_INDENT)
+ h->indent++;
+ if (tflags & HTML_NOINDENT)
+ h->noindent++;
return t;
}
@@ -605,6 +631,7 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
static void
print_ctag(struct html *h, struct tag *tag)
{
+ int tflags;
/*
* Remember to close out and nullify the current
@@ -615,11 +642,18 @@ print_ctag(struct html *h, struct tag *tag)
if (tag == h->tblt)
h->tblt = NULL;
+ tflags = htmltags[tag->tag].flags;
+
+ if (tflags & HTML_INDENT)
+ h->indent--;
+ if (tflags & HTML_NOINDENT)
+ h->noindent--;
+ if (tflags & HTML_NLEND)
+ html_endline(h);
+ html_indent(h);
printf("</%s>", htmltags[tag->tag].name);
- if (HTML_CLRLINE & htmltags[tag->tag].flags) {
- h->flags |= HTML_NOSPACE;
- putchar('\n');
- }
+ if (tflags & HTML_NLAFTER)
+ html_endline(h);
h->tags.head = tag->next;
free(tag);
@@ -630,14 +664,13 @@ print_gen_decls(struct html *h)
{
puts("<!DOCTYPE html>");
+ h->flags |= HTML_NLDONE;
}
void
print_text(struct html *h, const char *word)
{
-
- if ( ! (HTML_NOSPACE & h->flags)) {
- /* Manage keeps! */
+ if ((h->flags & (HTML_NLDONE | HTML_NOSPACE)) == 0) {
if ( ! (HTML_KEEP & h->flags)) {
if (HTML_PREKEEP & h->flags)
h->flags |= HTML_KEEP;
@@ -659,6 +692,7 @@ print_text(struct html *h, const char *word)
print_otag(h, TAG_I, "");
break;
default:
+ html_indent(h);
break;
}
@@ -711,6 +745,39 @@ print_paragraph(struct html *h)
print_tagq(h, t);
}
+/*
+ * If something was printed on the current output line, end it.
+ * Not to be called right after html_indent().
+ */
+static void
+html_endline(struct html *h)
+{
+ if (h->flags & HTML_NLDONE)
+ return;
+
+ putchar('\n');
+ h->flags |= HTML_NLDONE | HTML_NOSPACE;
+}
+
+/*
+ * If at the beginning of a new output line,
+ * perform indentation and mark the line as containing output.
+ * Make sure to really produce some output right afterwards,
+ * but do not use print_otag() for producing it.
+ */
+static void
+html_indent(struct html *h)
+{
+ int i;
+
+ if ((h->flags & HTML_NLDONE) == 0)
+ return;
+
+ if (h->noindent == 0)
+ for (i = 0; i < h->indent * 2; i++)
+ putchar(' ');
+ h->flags &= ~(HTML_NLDONE | HTML_NOSPACE);
+}
/*
* Calculate the scaling unit passed in a `-width' argument. This uses
diff --git a/usr.bin/mandoc/html.h b/usr.bin/mandoc/html.h
index e47fe83f5f8..8dbeab6dcc0 100644
--- a/usr.bin/mandoc/html.h
+++ b/usr.bin/mandoc/html.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: html.h,v 1.37 2017/01/17 15:32:39 schwarze Exp $ */
+/* $OpenBSD: html.h,v 1.38 2017/01/18 19:22:18 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -95,6 +95,9 @@ struct html {
#define HTML_NOSPLIT (1 << 7) /* do not break line before .An */
#define HTML_SPLIT (1 << 8) /* break line before .An */
#define HTML_NONEWLINE (1 << 9) /* No line break in nofill mode. */
+#define HTML_NLDONE (1 << 10) /* Just started a new line of HTML. */
+ int indent; /* current output indentation level */
+ int noindent; /* indent disabled by <pre> */
struct tagq tags; /* stack of open tags */
struct rofftbl tbl; /* current table */
struct tag *tblt; /* current open table scope */
diff --git a/usr.bin/mandoc/man_html.c b/usr.bin/mandoc/man_html.c
index e2b7950f7d3..99b2dcaa99e 100644
--- a/usr.bin/mandoc/man_html.c
+++ b/usr.bin/mandoc/man_html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: man_html.c,v 1.76 2017/01/17 15:32:39 schwarze Exp $ */
+/* $OpenBSD: man_html.c,v 1.77 2017/01/18 19:22:18 schwarze Exp $ */
/*
* Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -164,7 +164,6 @@ html_man(void *arg, const struct roff_man *man)
print_man_nodelist(&man->meta, man->first, &mh, h);
print_tagq(h, t);
- putchar('\n');
}
static void
diff --git a/usr.bin/mandoc/mdoc_html.c b/usr.bin/mandoc/mdoc_html.c
index 2d68129a014..2a1f06c4552 100644
--- a/usr.bin/mandoc/mdoc_html.c
+++ b/usr.bin/mandoc/mdoc_html.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mdoc_html.c,v 1.124 2017/01/17 15:32:39 schwarze Exp $ */
+/* $OpenBSD: mdoc_html.c,v 1.125 2017/01/18 19:22:18 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -316,7 +316,6 @@ html_mdoc(void *arg, const struct roff_man *mdoc)
print_mdoc_nodelist(&mdoc->meta, mdoc->first->child, h);
mdoc_root_post(&mdoc->meta, mdoc->first->child, h);
print_tagq(h, t);
- putchar('\n');
}
static void