version 1.252, 2019/01/18 14:36:21 |
version 1.255, 2019/04/30 15:53:00 |
Line 63 static const struct htmldata htmltags[TAG_MAX] = { |
|
Line 63 static const struct htmldata htmltags[TAG_MAX] = { |
|
{"title", HTML_NLAROUND}, |
{"title", HTML_NLAROUND}, |
{"div", HTML_NLAROUND}, |
{"div", HTML_NLAROUND}, |
{"div", 0}, |
{"div", 0}, |
|
{"section", HTML_NLALL}, |
{"h1", HTML_NLAROUND}, |
{"h1", HTML_NLAROUND}, |
{"h2", HTML_NLAROUND}, |
{"h2", HTML_NLAROUND}, |
{"span", 0}, |
{"span", 0}, |
Line 109 static const struct htmldata htmltags[TAG_MAX] = { |
|
Line 110 static const struct htmldata htmltags[TAG_MAX] = { |
|
/* Avoid duplicate HTML id= attributes. */ |
/* Avoid duplicate HTML id= attributes. */ |
static struct ohash id_unique; |
static struct ohash id_unique; |
|
|
|
static void html_reset_internal(struct html *); |
static void print_byte(struct html *, char); |
static void print_byte(struct html *, char); |
static void print_endword(struct html *); |
static void print_endword(struct html *); |
static void print_indent(struct html *); |
static void print_indent(struct html *); |
Line 118 static void print_ctag(struct html *, struct tag *); |
|
Line 120 static void print_ctag(struct html *, struct tag *); |
|
static int print_escape(struct html *, char); |
static int print_escape(struct html *, char); |
static int print_encode(struct html *, const char *, const char *, int); |
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_href(struct html *, const char *, const char *, int); |
|
static void print_metaf(struct html *); |
|
|
|
|
void * |
void * |
Line 144 html_alloc(const struct manoutput *outopts) |
|
Line 147 html_alloc(const struct manoutput *outopts) |
|
return h; |
return h; |
} |
} |
|
|
void |
static void |
html_free(void *p) |
html_reset_internal(struct html *h) |
{ |
{ |
struct tag *tag; |
struct tag *tag; |
struct html *h; |
|
char *cp; |
char *cp; |
unsigned int slot; |
unsigned int slot; |
|
|
h = (struct html *)p; |
|
while ((tag = h->tag) != NULL) { |
while ((tag = h->tag) != NULL) { |
h->tag = tag->next; |
h->tag = tag->next; |
free(tag); |
free(tag); |
} |
} |
free(h); |
|
|
|
cp = ohash_first(&id_unique, &slot); |
cp = ohash_first(&id_unique, &slot); |
while (cp != NULL) { |
while (cp != NULL) { |
free(cp); |
free(cp); |
Line 168 html_free(void *p) |
|
Line 167 html_free(void *p) |
|
} |
} |
|
|
void |
void |
|
html_reset(void *p) |
|
{ |
|
html_reset_internal(p); |
|
mandoc_ohash_init(&id_unique, 4, 0); |
|
} |
|
|
|
void |
|
html_free(void *p) |
|
{ |
|
html_reset_internal(p); |
|
free(p); |
|
} |
|
|
|
void |
print_gen_head(struct html *h) |
print_gen_head(struct html *h) |
{ |
{ |
struct tag *t; |
struct tag *t; |
Line 210 print_gen_head(struct html *h) |
|
Line 223 print_gen_head(struct html *h) |
|
print_tagq(h, t); |
print_tagq(h, t); |
} |
} |
|
|
void |
int |
print_metaf(struct html *h, enum mandoc_esc deco) |
html_setfont(struct html *h, enum mandoc_esc font) |
{ |
{ |
enum htmlfont font; |
switch (font) { |
|
|
switch (deco) { |
|
case ESCAPE_FONTPREV: |
case ESCAPE_FONTPREV: |
font = h->metal; |
font = h->metal; |
break; |
break; |
case ESCAPE_FONTITALIC: |
case ESCAPE_FONTITALIC: |
font = HTMLFONT_ITALIC; |
|
break; |
|
case ESCAPE_FONTBOLD: |
case ESCAPE_FONTBOLD: |
font = HTMLFONT_BOLD; |
|
break; |
|
case ESCAPE_FONTBI: |
case ESCAPE_FONTBI: |
font = HTMLFONT_BI; |
|
break; |
|
case ESCAPE_FONTCW: |
case ESCAPE_FONTCW: |
font = HTMLFONT_CW; |
case ESCAPE_FONTROMAN: |
break; |
break; |
case ESCAPE_FONT: |
case ESCAPE_FONT: |
case ESCAPE_FONTROMAN: |
font = ESCAPE_FONTROMAN; |
font = HTMLFONT_NONE; |
|
break; |
break; |
default: |
default: |
return; |
return 0; |
} |
} |
|
h->metal = h->metac; |
|
h->metac = font; |
|
return 1; |
|
} |
|
|
|
static void |
|
print_metaf(struct html *h) |
|
{ |
if (h->metaf) { |
if (h->metaf) { |
print_tagq(h, h->metaf); |
print_tagq(h, h->metaf); |
h->metaf = NULL; |
h->metaf = NULL; |
} |
} |
|
switch (h->metac) { |
h->metal = h->metac; |
case ESCAPE_FONTITALIC: |
h->metac = font; |
|
|
|
switch (font) { |
|
case HTMLFONT_ITALIC: |
|
h->metaf = print_otag(h, TAG_I, ""); |
h->metaf = print_otag(h, TAG_I, ""); |
break; |
break; |
case HTMLFONT_BOLD: |
case ESCAPE_FONTBOLD: |
h->metaf = print_otag(h, TAG_B, ""); |
h->metaf = print_otag(h, TAG_B, ""); |
break; |
break; |
case HTMLFONT_BI: |
case ESCAPE_FONTBI: |
h->metaf = print_otag(h, TAG_B, ""); |
h->metaf = print_otag(h, TAG_B, ""); |
print_otag(h, TAG_I, ""); |
print_otag(h, TAG_I, ""); |
break; |
break; |
case HTMLFONT_CW: |
case ESCAPE_FONTCW: |
h->metaf = print_otag(h, TAG_SPAN, "c", "Li"); |
h->metaf = print_otag(h, TAG_SPAN, "c", "Li"); |
break; |
break; |
default: |
default: |
Line 467 print_encode(struct html *h, const char *p, const char |
|
Line 474 print_encode(struct html *h, const char *p, const char |
|
case ESCAPE_FONTROMAN: |
case ESCAPE_FONTROMAN: |
if (0 == norecurse) { |
if (0 == norecurse) { |
h->flags |= HTML_NOSPACE; |
h->flags |= HTML_NOSPACE; |
print_metaf(h, esc); |
if (html_setfont(h, esc)) |
|
print_metaf(h); |
h->flags &= ~HTML_NOSPACE; |
h->flags &= ~HTML_NOSPACE; |
} |
} |
continue; |
continue; |
Line 794 print_text(struct html *h, const char *word) |
|
Line 802 print_text(struct html *h, const char *word) |
|
print_word(h, " "); |
print_word(h, " "); |
} |
} |
|
|
assert(NULL == h->metaf); |
assert(h->metaf == NULL); |
switch (h->metac) { |
print_metaf(h); |
case HTMLFONT_ITALIC: |
print_indent(h); |
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); |
|
if ( ! print_encode(h, word, NULL, 0)) { |
if ( ! print_encode(h, word, NULL, 0)) { |
if ( ! (h->flags & HTML_NONOSPACE)) |
if ( ! (h->flags & HTML_NONOSPACE)) |
h->flags &= ~HTML_NOSPACE; |
h->flags &= ~HTML_NOSPACE; |
Line 822 print_text(struct html *h, const char *word) |
|
Line 812 print_text(struct html *h, const char *word) |
|
} else |
} else |
h->flags |= HTML_NOSPACE | HTML_NONEWLINE; |
h->flags |= HTML_NOSPACE | HTML_NONEWLINE; |
|
|
if (h->metaf) { |
if (h->metaf != NULL) { |
print_tagq(h, h->metaf); |
print_tagq(h, h->metaf); |
h->metaf = NULL; |
h->metaf = NULL; |
} |
} |