-/* $Id: example.style.css,v 1.38 2010/12/22 11:15:16 kristaps Exp $ */
+/* $Id: example.style.css,v 1.39 2010/12/24 00:46:49 kristaps Exp $ */
/*
* This default style-sheet mimics the appearance of the traditional
/* 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. */
-/* $Id: html.c,v 1.121 2010/12/22 11:15:16 kristaps Exp $ */
+/* $Id: html.c,v 1.122 2010/12/24 00:46:49 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
{"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] = {
}
-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)
{
/* 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);
}
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;
/*
-/* $Id: html.h,v 1.34 2010/12/22 11:15:16 kristaps Exp $ */
+/* $Id: html.h,v 1.35 2010/12/24 00:46:49 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
TAG_I,
TAG_U,
TAG_CODE,
+ TAG_SMALL,
TAG_MAX
};
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;
};
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 *);
-/* $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>
*
* 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);
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();
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);
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);
}
man_B_pre(MAN_ARGS)
{
- print_ofont(h, HTMLFONT_BOLD);
+ print_otag(h, TAG_B, 0, NULL);
return(1);
}
man_I_pre(MAN_ARGS)
{
- print_ofont(h, HTMLFONT_ITALIC);
+ print_otag(h, TAG_I, 0, NULL);
return(1);
}