summaryrefslogtreecommitdiffstatshomepage
path: root/html.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-11-16 06:07:49 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-11-16 06:07:49 +0000
commit22c7cae08d6738c1f72bb810050cc88010d6d7b3 (patch)
tree848002b5d6bad8b9dfc6c6b385ec605f1da06942 /html.c
parent900b3f023f909b89d561c169c175f140bb304bdf (diff)
downloadmandoc-22c7cae08d6738c1f72bb810050cc88010d6d7b3.tar.gz
mandoc-22c7cae08d6738c1f72bb810050cc88010d6d7b3.tar.zst
mandoc-22c7cae08d6738c1f72bb810050cc88010d6d7b3.zip
Abstraction of -Thtml -man font setting (still experimental).
Diffstat (limited to 'html.c')
-rw-r--r--html.c53
1 files changed, 37 insertions, 16 deletions
diff --git a/html.c b/html.c
index ddc8c5a4..e8b44730 100644
--- a/html.c
+++ b/html.c
@@ -1,4 +1,4 @@
-/* $Id: html.c,v 1.89 2009/11/15 06:45:31 kristaps Exp $ */
+/* $Id: html.c,v 1.90 2009/11/16 06:07:49 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -66,6 +66,12 @@ static const struct htmldata htmltags[TAG_MAX] = {
{"base", HTML_CLRLINE | HTML_NOSTACK}, /* TAG_BASE */
};
+static const char *const htmlfonts[HTMLFONT_MAX] = {
+ "roman",
+ "bold",
+ "italic"
+};
+
static const char *const htmlattrs[ATTR_MAX] = {
"http-equiv",
"content",
@@ -221,35 +227,49 @@ 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)
+ 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)
{
- const char *class;
- struct htmlpair tag;
+ enum htmlfont font;
switch (deco) {
- case (DECO_BOLD):
- class = "bold";
+ case (DECO_PREVIOUS):
+ font = h->metal;
break;
case (DECO_ITALIC):
- class = "italic";
+ font = HTMLFONT_ITALIC;
+ break;
+ case (DECO_BOLD):
+ font = HTMLFONT_BOLD;
break;
case (DECO_ROMAN):
- class = "roman";
+ font = HTMLFONT_NONE;
break;
default:
abort();
/* NOTREACHED */
}
- if (h->metaf) {
- assert(h->tags.head);
- assert(h->metaf == h->tags.head);
- print_tagq(h, h->metaf);
- }
-
- PAIR_CLASS_INIT(&tag, class);
- h->metaf = print_otag(h, TAG_SPAN, 1, &tag);
+ (void)print_ofont(h, font);
}
@@ -292,6 +312,8 @@ print_encode(struct html *h, const char *p, int norecurse)
case (DECO_SPECIAL):
print_spec(h, seq, sz);
break;
+ case (DECO_PREVIOUS):
+ /* FALLTHROUGH */
case (DECO_BOLD):
/* FALLTHROUGH */
case (DECO_ITALIC):
@@ -352,7 +374,6 @@ print_otag(struct html *h, enum htmltag tag,
}
-/* ARGSUSED */
static void
print_ctag(struct html *h, enum htmltag tag)
{