summaryrefslogtreecommitdiffstats
path: root/man_html.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2011-01-04 01:23:18 +0000
committerIngo Schwarze <schwarze@openbsd.org>2011-01-04 01:23:18 +0000
commit41394e59b698fac5412e3a0f5405a777debd033f (patch)
treef4266a1c2184edd0496d69e5244905874dda4e58 /man_html.c
parent5b840cdde94e169a11d49e62d17d79650e968693 (diff)
downloadmandoc-41394e59b698fac5412e3a0f5405a777debd033f.tar.gz
Multiple man(7) .IP and .TP fixes started during p2k10:
Affecting both -Tascii and -Thtml: * The .IP HEAD uses the second argument as the width, not the last one. * Only print the first .IP HEAD argument, not all but the last. Affecting only -Tascii: * The .IP and .TP HEADs must be printed without literal mode, but literal mode must be restored afterwards. * After the .IP and .TP bodies, we only want term_newln(), not term_flushln(), or we would get two blank lines in literal mode. * The .TP HEAD does not use TWOSPACE, just like .IP doesn't either. * In literal mode, clear NOLPAD after each line, or subsequent lines would get no indentation whatsoever. Affecting only -Thtml: * Only print next-line .TP children, instead of all but the first. OK kristaps@ on the -Tascii part; and: "Can you work this into man_html.c, too?"
Diffstat (limited to 'man_html.c')
-rw-r--r--man_html.c30
1 files changed, 9 insertions, 21 deletions
diff --git a/man_html.c b/man_html.c
index eabbde06..fa21a402 100644
--- a/man_html.c
+++ b/man_html.c
@@ -517,14 +517,11 @@ man_IP_pre(MAN_ARGS)
SCALE_HS_INIT(&su, INDENT);
width = 0;
- /* Width is the last token. */
+ /* Width is the second token. */
if (MAN_IP == n->tok && NULL != nn)
- if (NULL != (nn = nn->next)) {
- for ( ; nn->next; nn = nn->next)
- /* Do nothing. */ ;
+ if (NULL != (nn = nn->next))
width = a2width(nn, &su);
- }
/* Width is the first token. */
@@ -550,26 +547,17 @@ man_IP_pre(MAN_ARGS)
print_otag(h, TAG_TD, 0, NULL);
- /*
- * Without a length string, we can print all of our children.
- */
+ /* For IP, only print the first header element. */
- if ( ! width)
- return(1);
+ if (MAN_IP == n->tok && n->child)
+ print_man_node(m, n->child, mh, h);
- /*
- * When a length has been specified, we need to carefully print
- * our child context: IP gets all children printed but the last
- * (the width), while TP gets all children printed but the first
- * (the width).
- */
+ /* For TP, only print next-line header elements. */
- if (MAN_IP == n->tok)
- for (nn = n->child; nn->next; nn = nn->next)
- print_man_node(m, nn, mh, h);
if (MAN_TP == n->tok)
- for (nn = n->child->next; nn; nn = nn->next)
- print_man_node(m, nn, mh, h);
+ for (nn = n->child; nn; nn = nn->next)
+ if (nn->line > n->line)
+ print_man_node(m, nn, mh, h);
return(0);
}