aboutsummaryrefslogtreecommitdiffstatshomepage
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
commitd8af0bd95a40f030963ca03609cd8394fc074df6 (patch)
tree39e79a8d70173a383b4238a80f4fbcad81341895 /man_html.c
parentac50f42d0c7369c7f5b0af47a29dc79ab5a960df (diff)
downloadmandoc-d8af0bd95a40f030963ca03609cd8394fc074df6.tar.gz
mandoc-d8af0bd95a40f030963ca03609cd8394fc074df6.tar.zst
mandoc-d8af0bd95a40f030963ca03609cd8394fc074df6.zip
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.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/man_html.c b/man_html.c
index 2c79a8f0..2dfb3e16 100644
--- a/man_html.c
+++ b/man_html.c
@@ -1,4 +1,4 @@
-/* $Id: man_html.c,v 1.77 2011/07/07 13:26:25 kristaps Exp $ */
+/* $Id: man_html.c,v 1.78 2011/07/07 13:54:36 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -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);
}