diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2019-01-07 07:26:29 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2019-01-07 07:26:29 +0000 |
commit | da0aa06476cbc1023f263447977a576ef15a6090 (patch) | |
tree | 8c1cfb19afb2df4bd018faed7a2700e77bfecba4 /mdoc_macro.c | |
parent | 9586714e823ea16c316ae14d0dcd2a88613c265e (diff) | |
download | mandoc-da0aa06476cbc1023f263447977a576ef15a6090.tar.gz |
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 'mdoc_macro.c')
-rw-r--r-- | mdoc_macro.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/mdoc_macro.c b/mdoc_macro.c index 48a1bc85..2e3772dc 100644 --- a/mdoc_macro.c +++ b/mdoc_macro.c @@ -295,6 +295,8 @@ rew_pending(struct roff_man *mdoc, const struct roff_node *n) case ROFFT_HEAD: roff_body_alloc(mdoc, n->line, n->pos, n->tok); + if (n->tok == MDOC_Ss) + mdoc->flags &= ~ROFF_NONOFILL; break; case ROFFT_BLOCK: break; @@ -1053,9 +1055,16 @@ blk_full(MACRO_PROT_ARGS) * regular child nodes. */ - if (tok == MDOC_Sh) + switch (tok) { + case MDOC_Sh: mdoc->flags &= ~ROFF_NOFILL; - + break; + case MDOC_Ss: + mdoc->flags |= ROFF_NONOFILL; + break; + default: + break; + } mdoc_argv(mdoc, line, tok, &arg, pos, buf); blk = mdoc_block_alloc(mdoc, line, ppos, tok, arg); head = body = NULL; @@ -1197,6 +1206,8 @@ blk_full(MACRO_PROT_ARGS) rew_last(mdoc, head); body = roff_body_alloc(mdoc, line, ppos, tok); + if (tok == MDOC_Ss) + mdoc->flags &= ~ROFF_NONOFILL; /* * Set up fill mode for display blocks. |