version 1.250, 2019/01/07 07:26:29 |
version 1.254, 2019/03/03 13:02:11 |
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 144 html_alloc(const struct manoutput *outopts) |
|
Line 146 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 166 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 271 html_close_paragraph(struct html *h) |
|
Line 283 html_close_paragraph(struct html *h) |
|
{ |
{ |
struct tag *t; |
struct tag *t; |
|
|
for (t = h->tag; t != NULL; t = t->next) { |
for (t = h->tag; t != NULL && t->closed == 0; t = t->next) { |
if (t->tag == TAG_P || t->tag == TAG_PRE) { |
switch(t->tag) { |
|
case TAG_P: |
|
case TAG_PRE: |
print_tagq(h, t); |
print_tagq(h, t); |
break; |
break; |
|
case TAG_A: |
|
print_tagq(h, t); |
|
continue; |
|
default: |
|
continue; |
} |
} |
|
break; |
} |
} |
} |
} |
|
|
Line 579 print_otag(struct html *h, enum htmltag tag, const cha |
|
Line 599 print_otag(struct html *h, enum htmltag tag, const cha |
|
t = mandoc_malloc(sizeof(struct tag)); |
t = mandoc_malloc(sizeof(struct tag)); |
t->tag = tag; |
t->tag = tag; |
t->next = h->tag; |
t->next = h->tag; |
|
t->refcnt = 0; |
|
t->closed = 0; |
h->tag = t; |
h->tag = t; |
} else |
} else |
t = NULL; |
t = NULL; |
Line 657 print_otag(struct html *h, enum htmltag tag, const cha |
|
Line 679 print_otag(struct html *h, enum htmltag tag, const cha |
|
print_encode(h, arg1, NULL, 1); |
print_encode(h, arg1, NULL, 1); |
fmt++; |
fmt++; |
break; |
break; |
case 'T': |
|
print_encode(h, arg1, NULL, 1); |
|
print_word(h, "\" title=\""); |
|
print_encode(h, arg1, NULL, 1); |
|
fmt++; |
|
break; |
|
default: |
default: |
print_encode(h, arg1, NULL, 1); |
print_encode(h, arg1, NULL, 1); |
break; |
break; |
Line 717 print_ctag(struct html *h, struct tag *tag) |
|
Line 733 print_ctag(struct html *h, struct tag *tag) |
|
{ |
{ |
int tflags; |
int tflags; |
|
|
/* |
if (tag->closed == 0) { |
* Remember to close out and nullify the current |
tag->closed = 1; |
* meta-font and table, if applicable. |
if (tag == h->metaf) |
*/ |
h->metaf = NULL; |
if (tag == h->metaf) |
if (tag == h->tblt) |
h->metaf = NULL; |
h->tblt = NULL; |
if (tag == h->tblt) |
|
h->tblt = NULL; |
|
|
|
tflags = htmltags[tag->tag].flags; |
tflags = htmltags[tag->tag].flags; |
|
if (tflags & HTML_INDENT) |
if (tflags & HTML_INDENT) |
h->indent--; |
h->indent--; |
if (tflags & HTML_NOINDENT) |
if (tflags & HTML_NOINDENT) |
h->noindent--; |
h->noindent--; |
if (tflags & HTML_NLEND) |
if (tflags & HTML_NLEND) |
print_endline(h); |
print_endline(h); |
print_indent(h); |
print_indent(h); |
print_byte(h, '<'); |
print_byte(h, '<'); |
print_byte(h, '/'); |
print_byte(h, '/'); |
print_word(h, htmltags[tag->tag].name); |
print_word(h, htmltags[tag->tag].name); |
print_byte(h, '>'); |
print_byte(h, '>'); |
if (tflags & HTML_NLAFTER) |
if (tflags & HTML_NLAFTER) |
print_endline(h); |
print_endline(h); |
} |
|
if (tag->refcnt == 0) { |
h->tag = tag->next; |
h->tag = tag->next; |
free(tag); |
free(tag); |
|
} |
} |
} |
|
|
void |
void |
Line 830 print_text(struct html *h, const char *word) |
|
Line 845 print_text(struct html *h, const char *word) |
|
void |
void |
print_tagq(struct html *h, const struct tag *until) |
print_tagq(struct html *h, const struct tag *until) |
{ |
{ |
struct tag *tag; |
struct tag *this, *next; |
|
|
while ((tag = h->tag) != NULL) { |
for (this = h->tag; this != NULL; this = next) { |
print_ctag(h, tag); |
next = this == until ? NULL : this->next; |
if (tag == until) |
print_ctag(h, this); |
return; |
|
} |
} |
} |
} |
|
|
Line 847 print_tagq(struct html *h, const struct tag *until) |
|
Line 861 print_tagq(struct html *h, const struct tag *until) |
|
void |
void |
print_stagq(struct html *h, const struct tag *suntil) |
print_stagq(struct html *h, const struct tag *suntil) |
{ |
{ |
struct tag *tag; |
struct tag *this, *next; |
|
|
while ((tag = h->tag) != NULL) { |
for (this = h->tag; this != NULL; this = next) { |
if (tag == suntil || |
next = this->next; |
(tag->next == suntil && |
if (this == suntil || (next == suntil && |
(tag->tag == TAG_P || tag->tag == TAG_PRE))) |
(this->tag == TAG_P || this->tag == TAG_PRE))) |
return; |
break; |
print_ctag(h, tag); |
print_ctag(h, this); |
} |
} |
} |
} |
|
|