aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2019-01-07 07:26:29 +0000
committerIngo Schwarze <schwarze@openbsd.org>2019-01-07 07:26:29 +0000
commit81110a42d3e8acf54bd059afb29098770437d398 (patch)
tree80d9ed9a7d5b4f7cf2ef77c2240111757459966e /html.c
parent9b3bcfda2071ff49dd238b2315b1cc49c09a1552 (diff)
downloadmandoc-81110a42d3e8acf54bd059afb29098770437d398.tar.gz
mandoc-81110a42d3e8acf54bd059afb29098770437d398.tar.zst
mandoc-81110a42d3e8acf54bd059afb29098770437d398.zip
Represent mdoc(7) .Pp (and .sp, and some SYNOPSIS and .Rs features)
by the <p> HTML element and use the html_fillmode() mechanism for .Bd -unfilled, just like it was done for man(7) earlier, finally getting rid both of the horrible <div class="Pp"></div> hack and of the worst HTML syntax violations caused by nested displays. Care is needed because in some situations, paragraphs have to remain open across several subsequent macros, whereas in other situations, they must get closed together with a block containing them. Some implementation details include: * Always close paragraphs before emitting HTML flow content. * Let html_close_paragraph() also close <pre> for extra safety. * Drop the old, now unused function print_paragraph(). * Minor adjustments in the top-level man(7) node formatter for symmetry. * Bugfix: .Ss heads suspend no-fill mode, even though .Ss doesn't end it. * Bugfix: give up on .Op semantic markup for now, see the comment.
Diffstat (limited to 'html.c')
-rw-r--r--html.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/html.c b/html.c
index 71070769..55d5c99f 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.249 2019/01/06 04:55:09 schwarze Exp $ */
+/* $Id: html.c,v 1.250 2019/01/07 07:26:29 schwarze Exp $ */
/*
* Copyright (c) 2008-2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2015, 2017-2019 Ingo Schwarze <schwarze@openbsd.org>
@@ -272,7 +272,7 @@ html_close_paragraph(struct html *h)
struct tag *t;
for (t = h->tag; t != NULL; t = t->next) {
- if (t->tag == TAG_P) {
+ if (t->tag == TAG_P || t->tag == TAG_PRE) {
print_tagq(h, t);
break;
}
@@ -834,32 +834,30 @@ print_tagq(struct html *h, const struct tag *until)
while ((tag = h->tag) != NULL) {
print_ctag(h, tag);
- if (until && tag == until)
+ if (tag == until)
return;
}
}
+/*
+ * Close out all open elements up to but excluding suntil.
+ * Note that a paragraph just inside stays open together with it
+ * because paragraphs include subsequent phrasing content.
+ */
void
print_stagq(struct html *h, const struct tag *suntil)
{
struct tag *tag;
while ((tag = h->tag) != NULL) {
- if (suntil && tag == suntil)
+ if (tag == suntil ||
+ (tag->next == suntil &&
+ (tag->tag == TAG_P || tag->tag == TAG_PRE)))
return;
print_ctag(h, tag);
}
}
-void
-print_paragraph(struct html *h)
-{
- struct tag *t;
-
- t = print_otag(h, TAG_DIV, "c", "Pp");
- print_tagq(h, t);
-}
-
/***********************************************************************
* Low level output functions.