summaryrefslogtreecommitdiffstats
path: root/man_html.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-03-22 14:03:03 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-03-22 14:03:03 +0000
commit58e63ca37d1f123e661e096529eb22e418ed5542 (patch)
tree13a8051a813351883fd089a84e04890a431e867c /man_html.c
parent32cbe85d8ce6eee87446621fa65138ae97b24bb8 (diff)
downloadmandoc-58e63ca37d1f123e661e096529eb22e418ed5542.tar.gz
Clarify -man -T[x]html handling of `br' within `B'.
Consolidated node unlinking in -man. Conclude nested next-line scope issues noted by Ingo Schwarze.
Diffstat (limited to 'man_html.c')
-rw-r--r--man_html.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/man_html.c b/man_html.c
index 974c37b5..1f190ffb 100644
--- a/man_html.c
+++ b/man_html.c
@@ -181,6 +181,12 @@ print_man_node(MAN_ARGS)
bufinit(h);
+ /*
+ * FIXME: embedded elements within next-line scopes (e.g., `br'
+ * within an empty `B') will cause formatting to be forgotten
+ * due to scope closing out.
+ */
+
switch (n->type) {
case (MAN_ROOT):
child = man_root_pre(m, n, h);
@@ -567,6 +573,8 @@ man_IP_pre(MAN_ARGS)
SCALE_HS_INIT(&su, INDENT);
width = 0;
+ /* Width is the last token. */
+
if (MAN_IP == n->tok && NULL != nn)
if (NULL != (nn = nn->next)) {
for ( ; nn->next; nn = nn->next)
@@ -574,11 +582,14 @@ man_IP_pre(MAN_ARGS)
width = a2width(nn, &su);
}
+ /* Width is the first token. */
+
if (MAN_TP == n->tok && NULL != nn) {
+ /* Skip past non-text children. */
while (nn && MAN_TEXT != nn->type)
nn = nn->next;
- /* FIXME: sync with pre_TP(), man_term.c */
- width = a2width(nn, &su);
+ if (nn)
+ width = a2width(nn, &su);
}
if (MAN_BLOCK == n->type) {
@@ -604,12 +615,19 @@ man_IP_pre(MAN_ARGS)
PAIR_STYLE_INIT(&tag, h);
print_otag(h, TAG_DIV, 1, &tag);
- /* With a length string, manually omit the last child. */
+ /*
+ * Without a length string, we can print all of our children.
+ */
if ( ! width)
return(1);
- /* FIXME: sync with pre_TP(), man_term.c */
+ /*
+ * 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).
+ */
if (MAN_IP == n->tok)
for (nn = n->child; nn->next; nn = nn->next)