From ee6f1de3309289a39aa90cae26282fb4774fb08a Mon Sep 17 00:00:00 2001 From: Ingo Schwarze Date: Fri, 11 Jan 2019 12:56:42 +0000 Subject: Remove the HTML title= attributes which harmed accessibility and violated the principle of separation of content and presentation. Instead, implement the tooltips purely in CSS. Thanks to John Gardner for suggesting most of the styling in the new ::before rules. --- html.c | 8 +--- man_html.c | 12 +++--- mandoc.css | 78 +++++++++++++++++++++++++++++++++- mandoc_html.3 | 9 +--- mdoc_html.c | 86 +++++++++++++++++++------------------- regress/man/IP/literal.out_html | 4 +- regress/man/SH/paragraph.out_html | 4 +- regress/man/SS/paragraph.out_html | 4 +- regress/man/SY/literal.out_html | 4 +- regress/mdoc/Rs/paragraph.out_html | 17 ++++---- regress/mdoc/Sh/paragraph.out_html | 4 +- 11 files changed, 146 insertions(+), 84 deletions(-) diff --git a/html.c b/html.c index 55d5c99f..cc1bc394 100644 --- a/html.c +++ b/html.c @@ -1,4 +1,4 @@ -/* $Id: html.c,v 1.250 2019/01/07 07:26:29 schwarze Exp $ */ +/* $Id: html.c,v 1.251 2019/01/11 12:56:42 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2011-2015, 2017-2019 Ingo Schwarze @@ -657,12 +657,6 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...) print_encode(h, arg1, NULL, 1); fmt++; break; - case 'T': - print_encode(h, arg1, NULL, 1); - print_word(h, "\" title=\""); - print_encode(h, arg1, NULL, 1); - fmt++; - break; default: print_encode(h, arg1, NULL, 1); break; diff --git a/man_html.c b/man_html.c index 8b4dd945..e11ed0e6 100644 --- a/man_html.c +++ b/man_html.c @@ -1,4 +1,4 @@ -/* $Id: man_html.c,v 1.167 2019/01/07 07:26:29 schwarze Exp $ */ +/* $Id: man_html.c,v 1.168 2019/01/11 12:56:43 schwarze Exp $ */ /* * Copyright (c) 2008-2012, 2014 Kristaps Dzonsons * Copyright (c) 2013-2015, 2017-2019 Ingo Schwarze @@ -299,9 +299,9 @@ man_SH_pre(MAN_ARGS) case ROFFT_HEAD: id = html_make_id(n, 1); if (n->tok == MAN_SH) - print_otag(h, TAG_H1, "cTi", "Sh", id); + print_otag(h, TAG_H1, "ci", "Sh", id); else - print_otag(h, TAG_H2, "cTi", "Ss", id); + print_otag(h, TAG_H2, "ci", "Ss", id); if (id != NULL) print_otag(h, TAG_A, "chR", "permalink", id); break; @@ -513,7 +513,7 @@ man_SY_pre(MAN_ARGS) break; case ROFFT_HEAD: print_otag(h, TAG_TD, ""); - print_otag(h, TAG_CODE, "cT", "Nm"); + print_otag(h, TAG_CODE, "c", "Nm"); break; case ROFFT_BODY: print_otag(h, TAG_TD, ""); @@ -535,10 +535,10 @@ man_UR_pre(MAN_ARGS) assert(n->child->type == ROFFT_TEXT); if (n->tok == MAN_MT) { mandoc_asprintf(&cp, "mailto:%s", n->child->string); - print_otag(h, TAG_A, "cTh", "Mt", cp); + print_otag(h, TAG_A, "ch", "Mt", cp); free(cp); } else - print_otag(h, TAG_A, "cTh", "Lk", n->child->string); + print_otag(h, TAG_A, "ch", "Lk", n->child->string); } assert(n->next->type == ROFFT_BODY); diff --git a/mandoc.css b/mandoc.css index db17e9de..9526c74b 100644 --- a/mandoc.css +++ b/mandoc.css @@ -1,4 +1,4 @@ -/* $Id: mandoc.css,v 1.43 2019/01/10 07:40:10 schwarze Exp $ */ +/* $Id: mandoc.css,v 1.44 2019/01/11 12:56:43 schwarze Exp $ */ /* * Standard style sheet for mandoc(1) -Thtml and man.cgi(8). * @@ -65,7 +65,7 @@ td.foot-os { text-align: right; } .manual-text { margin-left: 3.8em; } -.Nd { display: inline; } +.Nd { } .Sh { margin-top: 1.2em; margin-bottom: 0.6em; margin-left: -3.2em; @@ -254,6 +254,80 @@ a.In { } font-weight: normal; font-family: monospace; } +/* Tooltip support. */ + +.Sh, .Ss { position: relative; } +.An, .Ar, .Cd, .Cm, .Dv, .Em, .Er, .Ev, .Fa, .Fd, .Fl, .Fn, .Ft, +.Ic, code.In, .Lb, .Lk, .Ms, .Mt, .Nd, code.Nm, .Pa, .Rs, +.St, .Sx, .Sy, .Va, .Vt, .Xr { + display: inline-block; + position: relative; } + +.An::before { content: "An"; } +.Ar::before { content: "Ar"; } +.Cd::before { content: "Cd"; } +.Cm::before { content: "Cm"; } +.Dv::before { content: "Dv"; } +.Em::before { content: "Em"; } +.Er::before { content: "Er"; } +.Ev::before { content: "Ev"; } +.Fa::before { content: "Fa"; } +.Fd::before { content: "Fd"; } +.Fl::before { content: "Fl"; } +.Fn::before { content: "Fn"; } +.Ft::before { content: "Ft"; } +.Ic::before { content: "Ic"; } +code.In::before { content: "In"; } +.Lb::before { content: "Lb"; } +.Lk::before { content: "Lk"; } +.Ms::before { content: "Ms"; } +.Mt::before { content: "Mt"; } +.Nd::before { content: "Nd"; } +code.Nm::before { content: "Nm"; } +.Pa::before { content: "Pa"; } +.Rs::before { content: "Rs"; } +.Sh::before { content: "Sh"; } +.Ss::before { content: "Ss"; } +.St::before { content: "St"; } +.Sx::before { content: "Sx"; } +.Sy::before { content: "Sy"; } +.Va::before { content: "Va"; } +.Vt::before { content: "Vt"; } +.Xr::before { content: "Xr"; } + +.An::before, .Ar::before, .Cd::before, .Cm::before, +.Dv::before, .Em::before, .Er::before, .Ev::before, +.Fa::before, .Fd::before, .Fl::before, .Fn::before, .Ft::before, +.Ic::before, code.In::before, .Lb::before, .Lk::before, +.Ms::before, .Mt::before, .Nd::before, code.Nm::before, +.Pa::before, .Rs::before, +.Sh::before, .Ss::before, .St::before, .Sx::before, .Sy::before, +.Va::before, .Vt::before, .Xr::before { + opacity: 0; + transition: .15s ease opacity; + pointer-events: none; + position: absolute; + bottom: 100%; + box-shadow: 0 0 .35em #000; + padding: .15em .25em; + white-space: nowrap; + font-family: Helvetica,Arial,sans-serif; + font-style: normal; + font-weight: bold; + color: black; + background: #fff; } +.An:hover::before, .Ar:hover::before, .Cd:hover::before, .Cm:hover::before, +.Dv:hover::before, .Em:hover::before, .Er:hover::before, .Ev:hover::before, +.Fa:hover::before, .Fd:hover::before, .Fl:hover::before, .Fn:hover::before, +.Ft:hover::before, .Ic:hover::before, code.In:hover::before, +.Lb:hover::before, .Lk:hover::before, .Ms:hover::before, .Mt:hover::before, +.Nd:hover::before, code.Nm:hover::before, .Pa:hover::before, +.Rs:hover::before, .Sh:hover::before, .Ss:hover::before, .St:hover::before, +.Sx:hover::before, .Sy:hover::before, .Va:hover::before, .Vt:hover::before, +.Xr:hover::before { + opacity: 1; + pointer-events: inherit; } + /* Overrides to avoid excessive margins on small devices. */ @media (max-width: 37.5em) { diff --git a/mandoc_html.3 b/mandoc_html.3 index 9e922915..32407574 100644 --- a/mandoc_html.3 +++ b/mandoc_html.3 @@ -1,4 +1,4 @@ -.\" $Id: mandoc_html.3,v 1.18 2018/11/26 01:38:23 schwarze Exp $ +.\" $Id: mandoc_html.3,v 1.19 2019/01/11 12:56:43 schwarze Exp $ .\" .\" Copyright (c) 2014, 2017, 2018 Ingo Schwarze .\" @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: November 26 2018 $ +.Dd $Mdocdate: January 11 2019 $ .Dt MANDOC_HTML 3 .Os .Sh NAME @@ -167,11 +167,6 @@ the respective attribute is not written. Print a .Cm class attribute. -This attribute letter can optionally be followed by the modifier letter -.Cm T . -In that case, a -.Cm title -attribute with the same value is also printed. .It Cm h Print a .Cm href diff --git a/mdoc_html.c b/mdoc_html.c index 08a2dc82..fe62b80a 100644 --- a/mdoc_html.c +++ b/mdoc_html.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.324 2019/01/10 07:40:10 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.325 2019/01/11 12:56:43 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze @@ -573,7 +573,7 @@ mdoc_sh_pre(MDOC_ARGS) break; case ROFFT_HEAD: id = html_make_id(n, 1); - print_otag(h, TAG_H1, "cTi", "Sh", id); + print_otag(h, TAG_H1, "ci", "Sh", id); if (id != NULL) print_otag(h, TAG_A, "chR", "permalink", id); break; @@ -605,7 +605,7 @@ mdoc_ss_pre(MDOC_ARGS) } id = html_make_id(n, 1); - print_otag(h, TAG_H2, "cTi", "Ss", id); + print_otag(h, TAG_H2, "ci", "Ss", id); if (id != NULL) print_otag(h, TAG_A, "chR", "permalink", id); return 1; @@ -618,7 +618,7 @@ mdoc_fl_pre(MDOC_ARGS) if ((id = cond_id(n)) != NULL) print_otag(h, TAG_A, "chR", "permalink", id); - print_otag(h, TAG_CODE, "cTi", "Fl", id); + print_otag(h, TAG_CODE, "ci", "Fl", id); print_text(h, "\\-"); if (!(n->child == NULL && @@ -637,7 +637,7 @@ mdoc_cm_pre(MDOC_ARGS) if ((id = cond_id(n)) != NULL) print_otag(h, TAG_A, "chR", "permalink", id); - print_otag(h, TAG_CODE, "cTi", "Cm", id); + print_otag(h, TAG_CODE, "ci", "Cm", id); return 1; } @@ -657,7 +657,7 @@ mdoc_nd_pre(MDOC_ARGS) } print_text(h, "\\(em"); /* Cannot use TAG_SPAN because it may contain blocks. */ - print_otag(h, TAG_DIV, "cT", "Nd"); + print_otag(h, TAG_DIV, "c", "Nd"); return 1; } @@ -671,7 +671,7 @@ mdoc_nm_pre(MDOC_ARGS) print_otag(h, TAG_TD, ""); /* FALLTHROUGH */ case ROFFT_ELEM: - print_otag(h, TAG_CODE, "cT", "Nm"); + print_otag(h, TAG_CODE, "c", "Nm"); return 1; case ROFFT_BODY: print_otag(h, TAG_TD, ""); @@ -693,11 +693,11 @@ mdoc_xr_pre(MDOC_ARGS) return 0; if (h->base_man1) - print_otag(h, TAG_A, "cThM", "Xr", + print_otag(h, TAG_A, "chM", "Xr", n->child->string, n->child->next == NULL ? NULL : n->child->next->string); else - print_otag(h, TAG_A, "cT", "Xr"); + print_otag(h, TAG_A, "c", "Xr"); n = n->child; print_text(h, n->string); @@ -726,7 +726,7 @@ mdoc_ns_pre(MDOC_ARGS) static int mdoc_ar_pre(MDOC_ARGS) { - print_otag(h, TAG_VAR, "cT", "Ar"); + print_otag(h, TAG_VAR, "c", "Ar"); return 1; } @@ -898,14 +898,14 @@ mdoc_ex_pre(MDOC_ARGS) static int mdoc_st_pre(MDOC_ARGS) { - print_otag(h, TAG_SPAN, "cT", "St"); + print_otag(h, TAG_SPAN, "c", "St"); return 1; } static int mdoc_em_pre(MDOC_ARGS) { - print_otag(h, TAG_I, "cT", "Em"); + print_otag(h, TAG_I, "c", "Em"); return 1; } @@ -935,7 +935,7 @@ mdoc_sx_pre(MDOC_ARGS) char *id; id = html_make_id(n, 0); - print_otag(h, TAG_A, "cThR", "Sx", id); + print_otag(h, TAG_A, "chR", "Sx", id); free(id); return 1; } @@ -987,7 +987,7 @@ mdoc_bd_pre(MDOC_ARGS) static int mdoc_pa_pre(MDOC_ARGS) { - print_otag(h, TAG_SPAN, "cT", "Pa"); + print_otag(h, TAG_SPAN, "c", "Pa"); return 1; } @@ -1018,7 +1018,7 @@ mdoc_an_pre(MDOC_ARGS) if (n->sec == SEC_AUTHORS && ! (h->flags & HTML_NOSPLIT)) h->flags |= HTML_SPLIT; - print_otag(h, TAG_SPAN, "cT", "An"); + print_otag(h, TAG_SPAN, "c", "An"); return 1; } @@ -1026,7 +1026,7 @@ static int mdoc_cd_pre(MDOC_ARGS) { synopsis_pre(h, n); - print_otag(h, TAG_CODE, "cT", "Cd"); + print_otag(h, TAG_CODE, "c", "Cd"); return 1; } @@ -1037,7 +1037,7 @@ mdoc_dv_pre(MDOC_ARGS) if ((id = cond_id(n)) != NULL) print_otag(h, TAG_A, "chR", "permalink", id); - print_otag(h, TAG_CODE, "cTi", "Dv", id); + print_otag(h, TAG_CODE, "ci", "Dv", id); return 1; } @@ -1048,7 +1048,7 @@ mdoc_ev_pre(MDOC_ARGS) if ((id = cond_id(n)) != NULL) print_otag(h, TAG_A, "chR", "permalink", id); - print_otag(h, TAG_CODE, "cTi", "Ev", id); + print_otag(h, TAG_CODE, "ci", "Ev", id); return 1; } @@ -1065,7 +1065,7 @@ mdoc_er_pre(MDOC_ARGS) if (id != NULL) print_otag(h, TAG_A, "chR", "permalink", id); - print_otag(h, TAG_CODE, "cTi", "Er", id); + print_otag(h, TAG_CODE, "ci", "Er", id); return 1; } @@ -1076,12 +1076,12 @@ mdoc_fa_pre(MDOC_ARGS) struct tag *t; if (n->parent->tok != MDOC_Fo) { - print_otag(h, TAG_VAR, "cT", "Fa"); + print_otag(h, TAG_VAR, "c", "Fa"); return 1; } for (nn = n->child; nn; nn = nn->next) { - t = print_otag(h, TAG_VAR, "cT", "Fa"); + t = print_otag(h, TAG_VAR, "c", "Fa"); print_text(h, nn->string); print_tagq(h, t); if (nn->next) { @@ -1112,11 +1112,11 @@ mdoc_fd_pre(MDOC_ARGS) assert(n->type == ROFFT_TEXT); if (strcmp(n->string, "#include")) { - print_otag(h, TAG_CODE, "cT", "Fd"); + print_otag(h, TAG_CODE, "c", "Fd"); return 1; } - print_otag(h, TAG_CODE, "cT", "In"); + print_otag(h, TAG_CODE, "c", "In"); print_text(h, n->string); if (NULL != (n = n->next)) { @@ -1130,10 +1130,10 @@ mdoc_fd_pre(MDOC_ARGS) cp = strchr(buf, '\0') - 1; if (cp >= buf && (*cp == '>' || *cp == '"')) *cp = '\0'; - t = print_otag(h, TAG_A, "cThI", "In", buf); + t = print_otag(h, TAG_A, "chI", "In", buf); free(buf); } else - t = print_otag(h, TAG_A, "cT", "In"); + t = print_otag(h, TAG_A, "c", "In"); print_text(h, n->string); print_tagq(h, t); @@ -1160,7 +1160,7 @@ mdoc_vt_pre(MDOC_ARGS) } else if (n->type == ROFFT_HEAD) return 0; - print_otag(h, TAG_VAR, "cT", "Vt"); + print_otag(h, TAG_VAR, "c", "Vt"); return 1; } @@ -1168,7 +1168,7 @@ static int mdoc_ft_pre(MDOC_ARGS) { synopsis_pre(h, n); - print_otag(h, TAG_VAR, "cT", "Ft"); + print_otag(h, TAG_VAR, "c", "Ft"); return 1; } @@ -1189,7 +1189,7 @@ mdoc_fn_pre(MDOC_ARGS) ep = strchr(sp, ' '); if (NULL != ep) { - t = print_otag(h, TAG_VAR, "cT", "Ft"); + t = print_otag(h, TAG_VAR, "c", "Ft"); while (ep) { sz = MIN((int)(ep - sp), BUFSIZ - 1); @@ -1202,7 +1202,7 @@ mdoc_fn_pre(MDOC_ARGS) print_tagq(h, t); } - t = print_otag(h, TAG_CODE, "cT", "Fn"); + t = print_otag(h, TAG_CODE, "c", "Fn"); if (sp) print_text(h, sp); @@ -1215,10 +1215,10 @@ mdoc_fn_pre(MDOC_ARGS) for (n = n->child->next; n; n = n->next) { if (NODE_SYNPRETTY & n->flags) - t = print_otag(h, TAG_VAR, "cTs", "Fa", + t = print_otag(h, TAG_VAR, "cs", "Fa", "white-space", "nowrap"); else - t = print_otag(h, TAG_VAR, "cT", "Fa"); + t = print_otag(h, TAG_VAR, "c", "Fa"); print_text(h, n->string); print_tagq(h, t); if (n->next) { @@ -1291,7 +1291,7 @@ mdoc_lk_pre(MDOC_ARGS) descr = link->next; if (descr == punct) descr = link; /* no text */ - t = print_otag(h, TAG_A, "cTh", "Lk", link->string); + t = print_otag(h, TAG_A, "ch", "Lk", link->string); do { if (descr->flags & (NODE_DELIMC | NODE_DELIMO)) h->flags |= HTML_NOSPACE; @@ -1319,7 +1319,7 @@ mdoc_mt_pre(MDOC_ARGS) assert(n->type == ROFFT_TEXT); mandoc_asprintf(&cp, "mailto:%s", n->string); - t = print_otag(h, TAG_A, "cTh", "Mt", cp); + t = print_otag(h, TAG_A, "ch", "Mt", cp); print_text(h, n->string); print_tagq(h, t); free(cp); @@ -1347,7 +1347,7 @@ mdoc_fo_pre(MDOC_ARGS) return 0; assert(n->child->string); - t = print_otag(h, TAG_CODE, "cT", "Fn"); + t = print_otag(h, TAG_CODE, "c", "Fn"); print_text(h, n->child->string); print_tagq(h, t); return 0; @@ -1371,7 +1371,7 @@ mdoc_in_pre(MDOC_ARGS) struct tag *t; synopsis_pre(h, n); - print_otag(h, TAG_CODE, "cT", "In"); + print_otag(h, TAG_CODE, "c", "In"); /* * The first argument of the `In' gets special treatment as @@ -1390,9 +1390,9 @@ mdoc_in_pre(MDOC_ARGS) assert(n->type == ROFFT_TEXT); if (h->base_includes) - t = print_otag(h, TAG_A, "cThI", "In", n->string); + t = print_otag(h, TAG_A, "chI", "In", n->string); else - t = print_otag(h, TAG_A, "cT", "In"); + t = print_otag(h, TAG_A, "c", "In"); print_text(h, n->string); print_tagq(h, t); @@ -1417,14 +1417,14 @@ mdoc_ic_pre(MDOC_ARGS) if ((id = cond_id(n)) != NULL) print_otag(h, TAG_A, "chR", "permalink", id); - print_otag(h, TAG_CODE, "cTi", "Ic", id); + print_otag(h, TAG_CODE, "ci", "Ic", id); return 1; } static int mdoc_va_pre(MDOC_ARGS) { - print_otag(h, TAG_VAR, "cT", "Va"); + print_otag(h, TAG_VAR, "c", "Va"); return 1; } @@ -1476,7 +1476,7 @@ mdoc_ms_pre(MDOC_ARGS) if ((id = cond_id(n)) != NULL) print_otag(h, TAG_A, "chR", "permalink", id); - print_otag(h, TAG_SPAN, "cTi", "Ms", id); + print_otag(h, TAG_SPAN, "ci", "Ms", id); return 1; } @@ -1509,7 +1509,7 @@ mdoc_rs_pre(MDOC_ARGS) case ROFFT_BODY: if (n->sec == SEC_SEE_ALSO) print_otag(h, TAG_P, "c", "Pp"); - print_otag(h, TAG_CITE, "cT", "Rs"); + print_otag(h, TAG_CITE, "c", "Rs"); break; default: abort(); @@ -1542,7 +1542,7 @@ mdoc_li_pre(MDOC_ARGS) static int mdoc_sy_pre(MDOC_ARGS) { - print_otag(h, TAG_B, "cT", "Sy"); + print_otag(h, TAG_B, "c", "Sy"); return 1; } @@ -1552,7 +1552,7 @@ mdoc_lb_pre(MDOC_ARGS) if (SEC_LIBRARY == n->sec && NODE_LINE & n->flags && n->prev) print_otag(h, TAG_BR, ""); - print_otag(h, TAG_SPAN, "cT", "Lb"); + print_otag(h, TAG_SPAN, "c", "Lb"); return 1; } diff --git a/regress/man/IP/literal.out_html b/regress/man/IP/literal.out_html index ae90758b..844eb1dd 100644 --- a/regress/man/IP/literal.out_html +++ b/regress/man/IP/literal.out_html @@ -24,7 +24,7 @@ literal paragraph regular text -

regular text
@@ -42,7 +42,7 @@ text
     indented regular text
 
 

new regular paragraph

-

regular text
diff --git a/regress/man/SH/paragraph.out_html b/regress/man/SH/paragraph.out_html index 5aef80e2..49627f19 100644 --- a/regress/man/SH/paragraph.out_html +++ b/regress/man/SH/paragraph.out_html @@ -1,6 +1,6 @@ BEGINTEST -

+

This text immediately follows a section header.

This is a paragraph.

-

+

ENDTEST diff --git a/regress/man/SS/paragraph.out_html b/regress/man/SS/paragraph.out_html index e36f2a06..bc803f86 100644 --- a/regress/man/SS/paragraph.out_html +++ b/regress/man/SS/paragraph.out_html @@ -1,8 +1,8 @@ BEGINTEST -

This text immediately follows a subsection header.

This is a paragraph.

-

ENDTEST diff --git a/regress/man/SY/literal.out_html b/regress/man/SY/literal.out_html index b1f378cf..5daf74ef 100644 --- a/regress/man/SY/literal.out_html +++ b/regress/man/SY/literal.out_html @@ -3,7 +3,7 @@ BEGINTEST initial regular text - +
commandcommand arguments
@@ -14,7 +14,7 @@ before display

- +
commandcommand
 arguments
diff --git a/regress/mdoc/Rs/paragraph.out_html b/regress/mdoc/Rs/paragraph.out_html
index 19e9362c..ab2575e5 100644
--- a/regress/mdoc/Rs/paragraph.out_html
+++ b/regress/mdoc/Rs/paragraph.out_html
@@ -1,17 +1,16 @@
 BEGINTEST
 
-initial reference: author - name, book title. -

in a paragraph: - another author, - another book.

-

initial reference: -

author name, +

author name, book title.

in a paragraph:

-

another - author, another book.

+

another author, + another book.

 ENDTEST
diff --git a/regress/mdoc/Sh/paragraph.out_html b/regress/mdoc/Sh/paragraph.out_html
index 3eeb9fe8..7d4f0d40 100644
--- a/regress/mdoc/Sh/paragraph.out_html
+++ b/regress/mdoc/Sh/paragraph.out_html
@@ -1,7 +1,7 @@
 BEGINTEST
 

descriptive text

-

+

initial subsection text

subsection paragraph

-

+

ENDTEST -- cgit v1.2.3