summaryrefslogtreecommitdiffstats
path: root/man_html.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-07-07 13:54:36 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-07-07 13:54:36 +0000
commit86154fdc77eb329c3d008b6bb93b78f644557c2d (patch)
treec35a8189fabfa08db4597ac6dfc25746592c15a7 /man_html.c
parentd456b6468fe0b165050b448b1fc7be4191ee6581 (diff)
downloadmandoc-86154fdc77eb329c3d008b6bb93b78f644557c2d.tar.gz
Considerably fix up -man -T[x]html's handling of verbatim spaces (`nf'),
which before were being handled erratically.
Diffstat (limited to 'man_html.c')
-rw-r--r--man_html.c36
1 files changed, 19 insertions, 17 deletions
diff --git a/man_html.c b/man_html.c
index defeb492..4305d926 100644
--- a/man_html.c
+++ b/man_html.c
@@ -219,22 +219,14 @@ print_man_node(MAN_ARGS)
if ('\0' == *n->string) {
print_otag(h, TAG_P, 0, NULL);
return;
- } else if (' ' == *n->string && MAN_LINE & n->flags)
+ }
+
+ if (' ' == *n->string && MAN_LINE & n->flags)
+ print_otag(h, TAG_BR, 0, NULL);
+ else if (MANH_LITERAL & mh->fl && n->prev)
print_otag(h, TAG_BR, 0, NULL);
print_text(h, n->string);
-
- /*
- * If we're in a literal context, make sure that words
- * togehter on the same line stay together. This is a
- * POST-printing call, so we check the NEXT word. Since
- * -man doesn't have nested macros, we don't need to be
- * more specific than this.
- */
- if (MANH_LITERAL & mh->fl &&
- (NULL == n->next ||
- n->next->line > n->line))
- print_otag(h, TAG_BR, 0, NULL);
return;
case (MAN_EQN):
PAIR_CLASS_INIT(&tag, "eqn");
@@ -453,10 +445,15 @@ static int
man_alt_pre(MAN_ARGS)
{
const struct man_node *nn;
- int i;
+ int i, savelit;
enum htmltag fp;
struct tag *t;
+ if ((savelit = mh->fl & MANH_LITERAL))
+ print_otag(h, TAG_BR, 0, NULL);
+
+ mh->fl &= ~MANH_LITERAL;
+
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
t = NULL;
switch (n->tok) {
@@ -495,6 +492,9 @@ man_alt_pre(MAN_ARGS)
print_tagq(h, t);
}
+ if (savelit)
+ mh->fl |= MANH_LITERAL;
+
return(0);
}
@@ -554,6 +554,8 @@ man_IP_pre(MAN_ARGS)
return(1);
}
+ /* FIXME: width specification. */
+
print_otag(h, TAG_DT, 0, NULL);
/* For IP, only print the first header element. */
@@ -623,11 +625,11 @@ static int
man_literal_pre(MAN_ARGS)
{
- if (MAN_nf == n->tok) {
+ if (MAN_nf != n->tok) {
print_otag(h, TAG_BR, 0, NULL);
- mh->fl |= MANH_LITERAL;
- } else
mh->fl &= ~MANH_LITERAL;
+ } else
+ mh->fl |= MANH_LITERAL;
return(0);
}