diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2018-05-09 00:46:10 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2018-05-09 00:46:10 +0000 |
commit | 8146f18c9d4d17026c0a4ae5ed85ea5907bf38fc (patch) | |
tree | 5b53a53e71f76bae69a7632586ac545c8d80b651 /mdoc_html.c | |
parent | 35d4aaed89e7337b61f0213b253b9bee370ad2c3 (diff) | |
download | mandoc-8146f18c9d4d17026c0a4ae5ed85ea5907bf38fc.tar.gz mandoc-8146f18c9d4d17026c0a4ae5ed85ea5907bf38fc.tar.zst mandoc-8146f18c9d4d17026c0a4ae5ed85ea5907bf38fc.zip |
Fix a long-standing issue:
Some macros (Nd, Oo) can contain blocks but rendered as elements that
can only contain phrasing content, resulting in invalid HTML nesting.
Switch them to <div>.
Also move the related "display: inline" style from the HTML to the CSS.
Reminded during a conversation with John Gardner.
Diffstat (limited to 'mdoc_html.c')
-rw-r--r-- | mdoc_html.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/mdoc_html.c b/mdoc_html.c index 9930cb55..c871181d 100644 --- a/mdoc_html.c +++ b/mdoc_html.c @@ -1,4 +1,4 @@ -/* $Id: mdoc_html.c,v 1.299 2018/05/08 21:42:34 schwarze Exp $ */ +/* $Id: mdoc_html.c,v 1.300 2018/05/09 00:46:10 schwarze Exp $ */ /* * Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze <schwarze@openbsd.org> @@ -583,10 +583,9 @@ mdoc_nd_pre(MDOC_ARGS) if (n->type != ROFFT_BODY) return 1; - /* XXX: this tag in theory can contain block elements. */ - print_text(h, "\\(em"); - print_otag(h, TAG_SPAN, "cT", "Nd"); + /* Cannot use TAG_SPAN because it may contain blocks. */ + print_otag(h, TAG_DIV, "cT", "Nd"); return 1; } @@ -1444,20 +1443,16 @@ mdoc_bf_pre(MDOC_ARGS) return 1; if (FONT_Em == n->norm->Bf.font) - cattr = "Em"; + cattr = "Bf Em"; else if (FONT_Sy == n->norm->Bf.font) - cattr = "Sy"; + cattr = "Bf Sy"; else if (FONT_Li == n->norm->Bf.font) - cattr = "Li"; + cattr = "Bf Li"; else - cattr = "No"; - - /* - * We want this to be inline-formatted, but needs to be div to - * accept block children. - */ + cattr = "Bf No"; - print_otag(h, TAG_DIV, "css?hl", cattr, "display", "inline", 1); + /* Cannot use TAG_SPAN because it may contain blocks. */ + print_otag(h, TAG_DIV, "cshl", cattr, 1); return 1; } @@ -1678,7 +1673,8 @@ mdoc_quote_pre(MDOC_ARGS) case MDOC_Op: print_text(h, "\\(lB"); h->flags |= HTML_NOSPACE; - print_otag(h, TAG_SPAN, "c", "Op"); + /* Cannot use TAG_SPAN because it may contain blocks. */ + print_otag(h, TAG_IDIV, "c", "Op"); break; case MDOC_En: if (NULL == n->norm->Es || |