aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/man_html.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-12-24 00:46:49 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-12-24 00:46:49 +0000
commitd1f1f8d600d26e5bb01736ad53269bed555043d5 (patch)
tree4d80d982f1229b979fa15a355b785ba7fb5aac8b /man_html.c
parent188534b2a99bf10e95000577793cb759e21d5a78 (diff)
downloadmandoc-d1f1f8d600d26e5bb01736ad53269bed555043d5.tar.gz
mandoc-d1f1f8d600d26e5bb01736ad53269bed555043d5.tar.zst
mandoc-d1f1f8d600d26e5bb01736ad53269bed555043d5.zip
Drastically fix -T[x]html's handling of font-escape mode changes (i.e.,
using \fI or \fP). Now, using these modes will cause a font to be rendered for each word; furthermore, setting mode within a word will do the correct thing. Second, make -man use real font tags (B, I, SMALL) to set its font instead of using font modes and fix up the pre-macro unsetting of the current mode. This fixes how roff.7 wasn't validating (<P> closing out a font mode) and has been checked against gcc.1 (more will come). I considered failure to validate OUR manual to be a show-stopper for the up-coming release.
Diffstat (limited to 'man_html.c')
-rw-r--r--man_html.c53
1 files changed, 24 insertions, 29 deletions
diff --git a/man_html.c b/man_html.c
index 39fdf89b..4bcdf3dc 100644
--- a/man_html.c
+++ b/man_html.c
@@ -1,4 +1,4 @@
-/* $Id: man_html.c,v 1.56 2010/12/22 09:51:27 kristaps Exp $ */
+/* $Id: man_html.c,v 1.57 2010/12/24 00:46:49 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -209,11 +209,9 @@ print_man_node(MAN_ARGS)
* scope. Assert that the metafont is on the top of the
* stack (it's never nested).
*/
- if (h->metaf) {
- assert(h->metaf == t);
- print_tagq(h, h->metaf);
- assert(NULL == h->metaf);
- t = h->tags.head;
+ if (HTMLFONT_NONE != h->metac) {
+ h->metal = h->metac;
+ h->metac = HTMLFONT_NONE;
}
if (mans[n->tok].pre)
child = (*mans[n->tok].pre)(m, n, mh, h);
@@ -409,29 +407,30 @@ static int
man_alt_pre(MAN_ARGS)
{
const struct man_node *nn;
- struct tag *t;
- int i;
- enum htmlfont fp;
+ int i;
+ enum htmltag fp;
+ struct tag *t;
for (i = 0, nn = n->child; nn; nn = nn->next, i++) {
+ t = NULL;
switch (n->tok) {
case (MAN_BI):
- fp = i % 2 ? HTMLFONT_ITALIC : HTMLFONT_BOLD;
+ fp = i % 2 ? TAG_I : TAG_B;
break;
case (MAN_IB):
- fp = i % 2 ? HTMLFONT_BOLD : HTMLFONT_ITALIC;
+ fp = i % 2 ? TAG_B : TAG_I;
break;
case (MAN_RI):
- fp = i % 2 ? HTMLFONT_ITALIC : HTMLFONT_NONE;
+ fp = i % 2 ? TAG_I : TAG_MAX;
break;
case (MAN_IR):
- fp = i % 2 ? HTMLFONT_NONE : HTMLFONT_ITALIC;
+ fp = i % 2 ? TAG_MAX : TAG_I;
break;
case (MAN_BR):
- fp = i % 2 ? HTMLFONT_NONE : HTMLFONT_BOLD;
+ fp = i % 2 ? TAG_MAX : TAG_B;
break;
case (MAN_RB):
- fp = i % 2 ? HTMLFONT_BOLD : HTMLFONT_NONE;
+ fp = i % 2 ? TAG_B : TAG_MAX;
break;
default:
abort();
@@ -441,14 +440,13 @@ man_alt_pre(MAN_ARGS)
if (i)
h->flags |= HTML_NOSPACE;
- /*
- * Open and close the scope with each argument, so that
- * internal \f escapes, which are common, are also
- * closed out with the scope.
- */
- t = print_ofont(h, fp);
+ if (TAG_MAX != fp)
+ t = print_otag(h, fp, 0, NULL);
+
print_man_node(m, nn, mh, h);
- print_tagq(h, t);
+
+ if (t)
+ print_tagq(h, t);
}
return(0);
@@ -459,13 +457,10 @@ man_alt_pre(MAN_ARGS)
static int
man_SM_pre(MAN_ARGS)
{
- struct htmlpair tag;
- /* FIXME: print_ofont(). */
- PAIR_CLASS_INIT(&tag, "small");
- print_otag(h, TAG_SPAN, 1, &tag);
+ print_otag(h, TAG_SMALL, 0, NULL);
if (MAN_SB == n->tok)
- print_ofont(h, HTMLFONT_BOLD);
+ print_otag(h, TAG_B, 0, NULL);
return(1);
}
@@ -630,7 +625,7 @@ static int
man_B_pre(MAN_ARGS)
{
- print_ofont(h, HTMLFONT_BOLD);
+ print_otag(h, TAG_B, 0, NULL);
return(1);
}
@@ -640,7 +635,7 @@ static int
man_I_pre(MAN_ARGS)
{
- print_ofont(h, HTMLFONT_ITALIC);
+ print_otag(h, TAG_I, 0, NULL);
return(1);
}