summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--html.c72
-rw-r--r--html.h15
-rw-r--r--man_html.c4
-rw-r--r--regress/roff/ft/badargs.out_html9
-rw-r--r--roff_html.c2
5 files changed, 35 insertions, 67 deletions
diff --git a/html.c b/html.c
index ea05c953..98f8b31e 100644
--- a/html.c
+++ b/html.c
@@ -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;
}
diff --git a/html.h b/html.h
index 7ac4e177..c39893f3 100644
--- a/html.h
+++ b/html.h
@@ -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);
diff --git a/man_html.c b/man_html.c
index 6c5ffba0..a6ad3b43 100644
--- a/man_html.c
+++ b/man_html.c
@@ -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