summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--example.style.css7
-rw-r--r--html.c50
-rw-r--r--html.h8
-rw-r--r--man_html.c51
4 files changed, 54 insertions, 62 deletions
diff --git a/example.style.css b/example.style.css
index e1e86a29..7c6374d9 100644
--- a/example.style.css
+++ b/example.style.css
@@ -35,12 +35,11 @@ td { vertical-align: top; }
/* General font modes. */
-.italic { font-style: italic; font-weight: normal; } /* Italic: BI, IB, I, (implicit). */
+i { } /* Italic: BI, IB, I, (implicit). */
.emph { font-style: italic; font-weight: normal; } /* Emphasis: Em, Bl -emphasis. */
-.bold { font-style: normal; font-weight: bold; } /* Bold: SB, BI, IB, BR, RB, B, (implicit). */
+b { } /* Bold: SB, BI, IB, BR, RB, B, (implicit). */
.symb { font-style: normal; font-weight: bold; } /* Symbolic: Sy, Ms, Bf -symbolic. */
-.roman { font-style: normal; font-weight: normal; } /* Roman: (implicit). */
-.small { font-style: normal; font-weight: normal; font-size: smaller; } /* Small: SB, SM. */
+small { } /* Small: SB, SM. */
/* Block modes. */
diff --git a/html.c b/html.c
index d8fddc81..75b66f4c 100644
--- a/html.c
+++ b/html.c
@@ -74,12 +74,7 @@ static const struct htmldata htmltags[TAG_MAX] = {
{"i", 0 }, /* TAG_I */
{"u", 0 }, /* TAG_U */
{"code", 0 }, /* TAG_CODE */
-};
-
-static const char *const htmlfonts[HTMLFONT_MAX] = {
- "roman",
- "bold",
- "italic"
+ {"small", 0 }, /* TAG_SMALL */
};
static const char *const htmlattrs[ATTR_MAX] = {
@@ -257,25 +252,6 @@ print_res(struct html *h, const char *p, size_t len)
}
-struct tag *
-print_ofont(struct html *h, enum htmlfont font)
-{
- struct htmlpair tag;
-
- h->metal = h->metac;
- h->metac = font;
-
- /* FIXME: DECO_ROMAN should just close out preexisting. */
-
- if (h->metaf && h->tags.head == h->metaf)
- print_tagq(h, h->metaf);
-
- PAIR_CLASS_INIT(&tag, htmlfonts[font]);
- h->metaf = print_otag(h, TAG_SPAN, 1, &tag);
- return(h->metaf);
-}
-
-
static void
print_metaf(struct html *h, enum roffdeco deco)
{
@@ -299,7 +275,18 @@ print_metaf(struct html *h, enum roffdeco deco)
/* NOTREACHED */
}
- (void)print_ofont(h, font);
+ if (h->metaf) {
+ print_tagq(h, h->metaf);
+ h->metaf = NULL;
+ }
+
+ h->metal = h->metac;
+ h->metac = font;
+
+ if (HTMLFONT_NONE != font)
+ h->metaf = HTMLFONT_BOLD == font ?
+ print_otag(h, TAG_B, 0, NULL) :
+ print_otag(h, TAG_I, 0, NULL);
}
@@ -554,11 +541,22 @@ print_text(struct html *h, const char *word)
printf(" ");
}
+ assert(NULL == h->metaf);
+ if (HTMLFONT_NONE != h->metac)
+ h->metaf = HTMLFONT_BOLD == h->metac ?
+ print_otag(h, TAG_B, 0, NULL) :
+ print_otag(h, TAG_I, 0, NULL);
+
assert(word);
if ( ! print_encode(h, word, 0))
if ( ! (h->flags & HTML_NONOSPACE))
h->flags &= ~HTML_NOSPACE;
+ if (h->metaf) {
+ print_tagq(h, h->metaf);
+ h->metaf = NULL;
+ }
+
h->flags &= ~HTML_IGNDELIM;
/*
diff --git a/html.h b/html.h
index 1cc98caf..5072c8b3 100644
--- a/html.h
+++ b/html.h
@@ -50,6 +50,7 @@ enum htmltag {
TAG_I,
TAG_U,
TAG_CODE,
+ TAG_SMALL,
TAG_MAX
};
@@ -123,9 +124,9 @@ struct html {
char *style;
char buf[BUFSIZ];
size_t buflen;
- struct tag *metaf;
- enum htmlfont metal;
- enum htmlfont metac;
+ struct tag *metaf; /* current open font scope */
+ enum htmlfont metal; /* last used font */
+ enum htmlfont metac; /* current font mode */
enum htmltype type;
};
@@ -133,7 +134,6 @@ struct roffsu;
void print_gen_decls(struct html *);
void print_gen_head(struct html *);
-struct tag *print_ofont(struct html *, enum htmlfont);
struct tag *print_otag(struct html *, enum htmltag,
int, const struct htmlpair *);
void print_tagq(struct html *, const struct tag *);
diff --git a/man_html.c b/man_html.c
index 3294be85..0f6d2376 100644
--- a/man_html.c
+++ b/man_html.c
@@ -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);
}