diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-11-14 19:23:58 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2009-11-14 19:23:58 +0000 |
commit | 4e79e898c4b9d864a069a79b6221f95ba6189c5d (patch) | |
tree | de3a06f849ee086066e8abc067e789b2dee0c398 /html.c | |
parent | dfbca2422907323ba2f121dca984ffcfd5a15e19 (diff) | |
download | mandoc-4e79e898c4b9d864a069a79b6221f95ba6189c5d.tar.gz |
Initial check-in of -man -Thtml \f support (needs testing).
Diffstat (limited to 'html.c')
-rw-r--r-- | html.c | 50 |
1 files changed, 46 insertions, 4 deletions
@@ -91,7 +91,8 @@ extern int getsubopt(char **, char * const *, char **); static void print_spec(struct html *, const char *, size_t); static void print_res(struct html *, const char *, size_t); static void print_ctag(struct html *, enum htmltag); -static int print_encode(struct html *, const char *); +static int print_encode(struct html *, const char *, int); +static void print_metaf(struct html *, enum roffdeco); void * @@ -220,8 +221,40 @@ print_res(struct html *h, const char *p, size_t len) } +static void +print_metaf(struct html *h, enum roffdeco deco) +{ + const char *class; + struct htmlpair tag; + + switch (deco) { + case (DECO_BOLD): + class = "bold"; + break; + case (DECO_ITALIC): + class = "italic"; + break; + case (DECO_ROMAN): + class = "roman"; + 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); +} + + static int -print_encode(struct html *h, const char *p) +print_encode(struct html *h, const char *p, int norecurse) { size_t sz; int len, nospace; @@ -259,6 +292,15 @@ print_encode(struct html *h, const char *p) case (DECO_SPECIAL): print_spec(h, seq, sz); break; + case (DECO_BOLD): + /* FALLTHROUGH */ + case (DECO_ITALIC): + /* FALLTHROUGH */ + case (DECO_ROMAN): + if (norecurse) + break; + print_metaf(h, deco); + break; default: break; } @@ -300,7 +342,7 @@ print_otag(struct html *h, enum htmltag tag, for (i = 0; i < sz; i++) { printf(" %s=\"", htmlattrs[p[i].key]); assert(p->val); - (void)print_encode(h, p[i].val); + (void)print_encode(h, p[i].val, 1); putchar('\"'); } putchar('>'); @@ -366,7 +408,7 @@ print_text(struct html *h, const char *p) putchar(' '); assert(p); - if ( ! print_encode(h, p)) + if ( ! print_encode(h, p, 0)) h->flags &= ~HTML_NOSPACE; if (*p && 0 == *(p + 1)) |