aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-09-03 18:08:02 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-09-03 18:08:02 +0000
commita9524ea55fa21a87e61e362ccc35d0e376eabec2 (patch)
tree402ad40b09a833209e248c63df23332fbdd45510 /html.c
parent90615d7afb2eae6a20abf4af79a4b09ac55ec284 (diff)
downloadmandoc-a9524ea55fa21a87e61e362ccc35d0e376eabec2.tar.gz
mandoc-a9524ea55fa21a87e61e362ccc35d0e376eabec2.tar.zst
mandoc-a9524ea55fa21a87e61e362ccc35d0e376eabec2.zip
Wrap text and phrasing elements in paragraphs unless already
contained in flow containers; never put them directly into sections. This helps to format paragraphs with the CSS class selector .Pp. Suggested by bentley@ and also by Colin Watson <cjwatson at debian> via Michael Stapelberg <stapelberg at debian>, see https://github.com/Debian/debiman/issues/116
Diffstat (limited to 'html.c')
-rw-r--r--html.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/html.c b/html.c
index b7db8fdd..c9e5c2b4 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.259 2019/09/03 12:31:05 schwarze Exp $ */
+/* $Id: html.c,v 1.260 2019/09/03 18:08:02 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017-2019 Ingo Schwarze <schwarze@openbsd.org>
@@ -590,7 +590,15 @@ print_otag(struct html *h, enum htmltag tag, const char *fmt, ...)
assert((htmltags[t->tag].flags & HTML_TOPHRASE) == 0);
break;
}
- }
+
+ /*
+ * Always wrap phrasing elements in a paragraph
+ * unless already contained in some flow container;
+ * never put them directly into a section.
+ */
+
+ } else if (tflags & HTML_TOPHRASE && h->tag->tag == TAG_SECTION)
+ print_otag(h, TAG_P, "c", "Pp");
/* Push this tag onto the stack of open scopes. */
@@ -796,6 +804,16 @@ print_gen_comment(struct html *h, struct roff_node *n)
void
print_text(struct html *h, const char *word)
{
+ /*
+ * Always wrap text in a paragraph unless already contained in
+ * some flow container; never put it directly into a section.
+ */
+
+ if (h->tag->tag == TAG_SECTION)
+ print_otag(h, TAG_P, "c", "Pp");
+
+ /* Output whitespace before this text? */
+
if (h->col && (h->flags & HTML_NOSPACE) == 0) {
if ( ! (HTML_KEEP & h->flags)) {
if (HTML_PREKEEP & h->flags)
@@ -805,6 +823,11 @@ print_text(struct html *h, const char *word)
print_word(h, "&#x00A0;");
}
+ /*
+ * Print the text, optionally surrounded by HTML whitespace,
+ * optionally manually switching fonts before and after.
+ */
+
assert(h->metaf == NULL);
print_metaf(h);
print_indent(h);