summaryrefslogtreecommitdiffstatshomepage
path: root/man_html.c
diff options
context:
space:
mode:
Diffstat (limited to 'man_html.c')
-rw-r--r--man_html.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/man_html.c b/man_html.c
index b5e69343..495a5fca 100644
--- a/man_html.c
+++ b/man_html.c
@@ -1,4 +1,4 @@
-/* $Id: man_html.c,v 1.27 2010/03/22 05:59:32 kristaps Exp $ */
+/* $Id: man_html.c,v 1.28 2010/03/22 14:03:03 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -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)