diff options
-rw-r--r-- | html.c | 72 | ||||
-rw-r--r-- | html.h | 15 | ||||
-rw-r--r-- | man_html.c | 4 | ||||
-rw-r--r-- | regress/roff/ft/badargs.out_html | 9 | ||||
-rw-r--r-- | roff_html.c | 2 |
5 files changed, 35 insertions, 67 deletions
@@ -120,6 +120,7 @@ static void print_ctag(struct html *, struct tag *); static int print_escape(struct html *, char); static int print_encode(struct html *, const char *, const char *, int); static void print_href(struct html *, const char *, const char *, int); +static void print_metaf(struct html *); void * @@ -222,55 +223,49 @@ print_gen_head(struct html *h) print_tagq(h, t); } -void -print_metaf(struct html *h, enum mandoc_esc deco) +int +html_setfont(struct html *h, enum mandoc_esc font) { - enum htmlfont font; - - switch (deco) { + switch (font) { case ESCAPE_FONTPREV: font = h->metal; break; case ESCAPE_FONTITALIC: - font = HTMLFONT_ITALIC; - break; case ESCAPE_FONTBOLD: - font = HTMLFONT_BOLD; - break; case ESCAPE_FONTBI: - font = HTMLFONT_BI; - break; case ESCAPE_FONTCW: - font = HTMLFONT_CW; + case ESCAPE_FONTROMAN: break; case ESCAPE_FONT: - case ESCAPE_FONTROMAN: - font = HTMLFONT_NONE; + font = ESCAPE_FONTROMAN; break; default: - return; + return 0; } + h->metal = h->metac; + h->metac = font; + return 1; +} +static void +print_metaf(struct html *h) +{ if (h->metaf) { print_tagq(h, h->metaf); h->metaf = NULL; } - - h->metal = h->metac; - h->metac = font; - - switch (font) { - case HTMLFONT_ITALIC: + switch (h->metac) { + case ESCAPE_FONTITALIC: h->metaf = print_otag(h, TAG_I, ""); break; - case HTMLFONT_BOLD: + case ESCAPE_FONTBOLD: h->metaf = print_otag(h, TAG_B, ""); break; - case HTMLFONT_BI: + case ESCAPE_FONTBI: h->metaf = print_otag(h, TAG_B, ""); print_otag(h, TAG_I, ""); break; - case HTMLFONT_CW: + case ESCAPE_FONTCW: h->metaf = print_otag(h, TAG_SPAN, "c", "Li"); break; default: @@ -479,7 +474,8 @@ print_encode(struct html *h, const char *p, const char *pend, int norecurse) case ESCAPE_FONTROMAN: if (0 == norecurse) { h->flags |= HTML_NOSPACE; - print_metaf(h, esc); + if (html_setfont(h, esc)) + print_metaf(h); h->flags &= ~HTML_NOSPACE; } continue; @@ -806,27 +802,9 @@ print_text(struct html *h, const char *word) print_word(h, " "); } - assert(NULL == h->metaf); - switch (h->metac) { - case HTMLFONT_ITALIC: - h->metaf = print_otag(h, TAG_I, ""); - break; - case HTMLFONT_BOLD: - h->metaf = print_otag(h, TAG_B, ""); - break; - case HTMLFONT_BI: - h->metaf = print_otag(h, TAG_B, ""); - print_otag(h, TAG_I, ""); - break; - case HTMLFONT_CW: - h->metaf = print_otag(h, TAG_SPAN, "c", "Li"); - break; - default: - print_indent(h); - break; - } - - assert(word); + assert(h->metaf == NULL); + print_metaf(h); + print_indent(h); if ( ! print_encode(h, word, NULL, 0)) { if ( ! (h->flags & HTML_NONOSPACE)) h->flags &= ~HTML_NOSPACE; @@ -834,7 +812,7 @@ print_text(struct html *h, const char *word) } else h->flags |= HTML_NOSPACE | HTML_NONEWLINE; - if (h->metaf) { + if (h->metaf != NULL) { print_tagq(h, h->metaf); h->metaf = NULL; } @@ -69,15 +69,6 @@ enum htmltag { TAG_MAX }; -enum htmlfont { - HTMLFONT_NONE = 0, - HTMLFONT_BOLD, - HTMLFONT_ITALIC, - HTMLFONT_BI, - HTMLFONT_CW, - HTMLFONT_MAX -}; - struct tag { struct tag *next; int refcnt; @@ -111,8 +102,8 @@ struct html { char *base_includes; /* base for include href */ char *style; /* style-sheet URI */ struct tag *metaf; /* current open font scope */ - enum htmlfont metal; /* last used font */ - enum htmlfont metac; /* current font mode */ + enum mandoc_esc metal; /* last used font */ + enum mandoc_esc metac; /* current font mode */ int oflags; /* output options */ #define HTML_FRAGMENT (1 << 0) /* don't emit HTML/HEAD/BODY */ #define HTML_TOC (1 << 1) /* emit a table of contents */ @@ -128,7 +119,6 @@ void roff_html_pre(struct html *, const struct roff_node *); void print_gen_comment(struct html *, struct roff_node *); void print_gen_decls(struct html *); void print_gen_head(struct html *); -void print_metaf(struct html *, enum mandoc_esc); struct tag *print_otag(struct html *, enum htmltag, const char *, ...); void print_tagq(struct html *, const struct tag *); void print_stagq(struct html *, const struct tag *); @@ -141,3 +131,4 @@ void print_endline(struct html *); void html_close_paragraph(struct html *); enum roff_tok html_fillmode(struct html *, enum roff_tok); char *html_make_id(const struct roff_node *, int); +int html_setfont(struct html *, enum mandoc_esc); @@ -203,9 +203,9 @@ print_man_node(MAN_ARGS) * Close out scope of font prior to opening a macro * scope. */ - if (HTMLFONT_NONE != h->metac) { + if (h->metac != ESCAPE_FONTROMAN) { h->metal = h->metac; - h->metac = HTMLFONT_NONE; + h->metac = ESCAPE_FONTROMAN; } /* diff --git a/regress/roff/ft/badargs.out_html b/regress/roff/ft/badargs.out_html index 5d98e988..0fa4a816 100644 --- a/regress/roff/ft/badargs.out_html +++ b/regress/roff/ft/badargs.out_html @@ -1,9 +1,8 @@ BEGINTEST <br/> -default font <i></i><i>italic</i> <b><i></i></b><b><i>bold italic</i></b> - <span class="Li"></span><span class="Li">typeqriter</span> - <span class="Li"></span> <span class="Li">roman</span> <b></b><b>bold</b> - <i></i> <i>italic</i> <b></b><b>bold</b> <b>still bold</b> - <i></i><i>italic</i> <i></i><i>back to bold</i> <i></i><i>back to italic</i> +default font <i>italic</i> <b><i>bold italic</i></b> + <span class="Li">typeqriter</span> <span class="Li">roman</span> <b>bold</b> + <i>italic</i> <b>bold</b> <b>still bold</b> <i>italic</i> <i>back to bold</i> + <i>back to italic</i> <br/> ENDTEST diff --git a/roff_html.c b/roff_html.c index 76fd19be..5855f592 100644 --- a/roff_html.c +++ b/roff_html.c @@ -94,7 +94,7 @@ roff_html_pre_ft(ROFF_HTML_ARGS) const char *cp; cp = n->child->string; - print_metaf(h, mandoc_font(cp, (int)strlen(cp))); + html_setfont(h, mandoc_font(cp, (int)strlen(cp))); } static void |