=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/html.c,v retrieving revision 1.34 retrieving revision 1.35 diff -c -r1.34 -r1.35 *** src/usr.bin/mandoc/html.c 2014/03/21 22:17:01 1.34 --- src/usr.bin/mandoc/html.c 2014/04/20 16:44:44 1.35 *************** *** 1,4 **** ! /* $Id: html.c,v 1.34 2014/03/21 22:17:01 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze --- 1,4 ---- ! /* $Id: html.c,v 1.35 2014/04/20 16:44:44 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2011, 2012, 2013, 2014 Ingo Schwarze *************** *** 111,116 **** --- 111,117 ---- static void print_attr(struct html *, const char *, const char *); static void *ml_alloc(char *, enum htmltype); + static void * ml_alloc(char *outopts, enum htmltype type) { *************** *** 132,147 **** while (outopts && *outopts) switch (getsubopt(&outopts, UNCONST(toks), &v)) { ! case (0): h->style = v; break; ! case (1): h->base_man = v; break; ! case (2): h->base_includes = v; break; ! case (3): h->oflags |= HTML_FRAGMENT; break; default: --- 133,148 ---- while (outopts && *outopts) switch (getsubopt(&outopts, UNCONST(toks), &v)) { ! case 0: h->style = v; break; ! case 1: h->base_man = v; break; ! case 2: h->base_includes = v; break; ! case 3: h->oflags |= HTML_FRAGMENT; break; default: *************** *** 158,164 **** return(ml_alloc(outopts, HTML_HTML_4_01_STRICT)); } - void * xhtml_alloc(char *outopts) { --- 159,164 ---- *************** *** 166,172 **** return(ml_alloc(outopts, HTML_XHTML_1_0_STRICT)); } - void html_free(void *p) { --- 166,171 ---- *************** *** 176,192 **** h = (struct html *)p; while ((tag = h->tags.head) != NULL) { ! h->tags.head = tag->next; free(tag); } ! if (h->symtab) mchars_free(h->symtab); free(h); } - void print_gen_head(struct html *h) { --- 175,190 ---- h = (struct html *)p; while ((tag = h->tags.head) != NULL) { ! h->tags.head = tag->next; free(tag); } ! if (h->symtab) mchars_free(h->symtab); free(h); } void print_gen_head(struct html *h) { *************** *** 223,243 **** enum htmlfont font; switch (deco) { ! 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_FONT): /* FALLTHROUGH */ ! case (ESCAPE_FONTROMAN): font = HTMLFONT_NONE; break; default: --- 221,241 ---- enum htmlfont font; switch (deco) { ! 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_FONT: /* FALLTHROUGH */ ! case ESCAPE_FONTROMAN: font = HTMLFONT_NONE; break; default: *************** *** 254,266 **** h->metac = font; switch (font) { ! case (HTMLFONT_ITALIC): h->metaf = print_otag(h, TAG_I, 0, NULL); break; ! case (HTMLFONT_BOLD): h->metaf = print_otag(h, TAG_B, 0, NULL); break; ! case (HTMLFONT_BI): h->metaf = print_otag(h, TAG_B, 0, NULL); print_otag(h, TAG_I, 0, NULL); break; --- 252,264 ---- h->metac = font; switch (font) { ! case HTMLFONT_ITALIC: h->metaf = print_otag(h, TAG_I, 0, NULL); break; ! case HTMLFONT_BOLD: h->metaf = print_otag(h, TAG_B, 0, NULL); break; ! case HTMLFONT_BI: h->metaf = print_otag(h, TAG_B, 0, NULL); print_otag(h, TAG_I, 0, NULL); break; *************** *** 299,317 **** break; cp++; switch (mandoc_escape(&cp, NULL, NULL)) { ! case (ESCAPE_ERROR): return(sz); ! case (ESCAPE_UNICODE): /* FALLTHROUGH */ ! case (ESCAPE_NUMBERED): /* FALLTHROUGH */ ! case (ESCAPE_SPECIAL): if (skip) skip = 0; else sz++; break; ! case (ESCAPE_SKIPCHAR): skip = 1; break; default: --- 297,315 ---- break; cp++; switch (mandoc_escape(&cp, NULL, NULL)) { ! case ESCAPE_ERROR: return(sz); ! case ESCAPE_UNICODE: /* FALLTHROUGH */ ! case ESCAPE_NUMBERED: /* FALLTHROUGH */ ! case ESCAPE_SPECIAL: if (skip) skip = 0; else sz++; break; ! case ESCAPE_SKIPCHAR: skip = 1; break; default: *************** *** 349,370 **** break; switch (*p++) { ! case ('<'): printf("<"); continue; ! case ('>'): printf(">"); continue; ! case ('&'): printf("&"); continue; ! case (ASCII_NBRSP): putchar('-'); continue; ! case (ASCII_HYPH): putchar('-'); /* FALLTHROUGH */ ! case (ASCII_BREAK): continue; default: break; --- 347,368 ---- break; switch (*p++) { ! case '<': printf("<"); continue; ! case '>': printf(">"); continue; ! case '&': printf("&"); continue; ! case ASCII_NBRSP: putchar('-'); continue; ! case ASCII_HYPH: putchar('-'); /* FALLTHROUGH */ ! case ASCII_BREAK: continue; default: break; *************** *** 375,395 **** break; switch (esc) { ! case (ESCAPE_FONT): /* FALLTHROUGH */ ! case (ESCAPE_FONTPREV): /* FALLTHROUGH */ ! case (ESCAPE_FONTBOLD): /* FALLTHROUGH */ ! case (ESCAPE_FONTITALIC): /* FALLTHROUGH */ ! case (ESCAPE_FONTBI): /* FALLTHROUGH */ ! case (ESCAPE_FONTROMAN): if (0 == norecurse) print_metaf(h, esc); continue; ! case (ESCAPE_SKIPCHAR): h->flags |= HTML_SKIPCHAR; continue; default: --- 373,393 ---- break; switch (esc) { ! case ESCAPE_FONT: /* FALLTHROUGH */ ! case ESCAPE_FONTPREV: /* FALLTHROUGH */ ! case ESCAPE_FONTBOLD: /* FALLTHROUGH */ ! case ESCAPE_FONTITALIC: /* FALLTHROUGH */ ! case ESCAPE_FONTBI: /* FALLTHROUGH */ ! case ESCAPE_FONTROMAN: if (0 == norecurse) print_metaf(h, esc); continue; ! case ESCAPE_SKIPCHAR: h->flags |= HTML_SKIPCHAR; continue; default: *************** *** 402,426 **** } switch (esc) { ! case (ESCAPE_UNICODE): /* Skip passed "u" header. */ c = mchars_num2uc(seq + 1, len - 1); if ('\0' != c) printf("&#x%x;", c); break; ! case (ESCAPE_NUMBERED): c = mchars_num2char(seq, len); if ('\0' != c) putchar(c); break; ! case (ESCAPE_SPECIAL): c = mchars_spec2cp(h->symtab, seq, len); if (c > 0) printf("&#%d;", c); else if (-1 == c && 1 == len) putchar((int)*seq); break; ! case (ESCAPE_NOSPACE): if ('\0' == *p) nospace = 1; break; --- 400,424 ---- } switch (esc) { ! case ESCAPE_UNICODE: /* Skip passed "u" header. */ c = mchars_num2uc(seq + 1, len - 1); if ('\0' != c) printf("&#x%x;", c); break; ! case ESCAPE_NUMBERED: c = mchars_num2char(seq, len); if ('\0' != c) putchar(c); break; ! case ESCAPE_SPECIAL: c = mchars_spec2cp(h->symtab, seq, len); if (c > 0) printf("&#%d;", c); else if (-1 == c && 1 == len) putchar((int)*seq); break; ! case ESCAPE_NOSPACE: if ('\0' == *p) nospace = 1; break; *************** *** 432,438 **** return(nospace); } - static void print_attr(struct html *h, const char *key, const char *val) { --- 430,435 ---- *************** *** 441,449 **** putchar('\"'); } - struct tag * ! print_otag(struct html *h, enum htmltag tag, int sz, const struct htmlpair *p) { int i; --- 438,445 ---- putchar('\"'); } struct tag * ! print_otag(struct html *h, enum htmltag tag, int sz, const struct htmlpair *p) { int i; *************** *** 493,499 **** if (HTML_AUTOCLOSE & htmltags[tag].flags) switch (h->type) { ! case (HTML_XHTML_1_0_STRICT): putchar('/'); break; default: --- 489,495 ---- if (HTML_AUTOCLOSE & htmltags[tag].flags) switch (h->type) { ! case HTML_XHTML_1_0_STRICT: putchar('/'); break; default: *************** *** 510,525 **** return(t); } - static void print_ctag(struct html *h, enum htmltag tag) { ! printf("", htmltags[tag].name); if (HTML_CLRLINE & htmltags[tag].flags) { h->flags |= HTML_NOSPACE; putchar('\n'); ! } } void --- 506,520 ---- return(t); } static void print_ctag(struct html *h, enum htmltag tag) { ! printf("", htmltags[tag].name); if (HTML_CLRLINE & htmltags[tag].flags) { h->flags |= HTML_NOSPACE; putchar('\n'); ! } } void *************** *** 530,536 **** const char *name; switch (h->type) { ! case (HTML_HTML_4_01_STRICT): name = "HTML"; doctype = "-//W3C//DTD HTML 4.01//EN"; dtd = "http://www.w3.org/TR/html4/strict.dtd"; --- 525,531 ---- const char *name; switch (h->type) { ! case HTML_HTML_4_01_STRICT: name = "HTML"; doctype = "-//W3C//DTD HTML 4.01//EN"; dtd = "http://www.w3.org/TR/html4/strict.dtd"; *************** *** 543,550 **** break; } ! printf("\n", ! name, doctype, dtd); } void --- 538,545 ---- break; } ! printf("\n", ! name, doctype, dtd); } void *************** *** 563,575 **** assert(NULL == h->metaf); switch (h->metac) { ! case (HTMLFONT_ITALIC): h->metaf = print_otag(h, TAG_I, 0, NULL); break; ! case (HTMLFONT_BOLD): h->metaf = print_otag(h, TAG_B, 0, NULL); break; ! case (HTMLFONT_BI): h->metaf = print_otag(h, TAG_B, 0, NULL); print_otag(h, TAG_I, 0, NULL); break; --- 558,570 ---- assert(NULL == h->metaf); switch (h->metac) { ! case HTMLFONT_ITALIC: h->metaf = print_otag(h, TAG_I, 0, NULL); break; ! case HTMLFONT_BOLD: h->metaf = print_otag(h, TAG_B, 0, NULL); break; ! case HTMLFONT_BI: h->metaf = print_otag(h, TAG_B, 0, NULL); print_otag(h, TAG_I, 0, NULL); break; *************** *** 592,605 **** h->flags &= ~HTML_IGNDELIM; } - void print_tagq(struct html *h, const struct tag *until) { struct tag *tag; while ((tag = h->tags.head) != NULL) { ! /* * Remember to close out and nullify the current * meta-font and table, if applicable. */ --- 587,599 ---- h->flags &= ~HTML_IGNDELIM; } void print_tagq(struct html *h, const struct tag *until) { struct tag *tag; while ((tag = h->tags.head) != NULL) { ! /* * Remember to close out and nullify the current * meta-font and table, if applicable. */ *************** *** 615,621 **** } } - void print_stagq(struct html *h, const struct tag *suntil) { --- 609,614 ---- *************** *** 624,630 **** while ((tag = h->tags.head) != NULL) { if (suntil && tag == suntil) return; ! /* * Remember to close out and nullify the current * meta-font and table, if applicable. */ --- 617,623 ---- while ((tag = h->tags.head) != NULL) { if (suntil && tag == suntil) return; ! /* * Remember to close out and nullify the current * meta-font and table, if applicable. */ *************** *** 670,677 **** va_list ap; va_start(ap, fmt); ! (void)vsnprintf(h->buf + (int)h->buflen, ! BUFSIZ - h->buflen - 1, fmt, ap); va_end(ap); h->buflen = strlen(h->buf); } --- 663,670 ---- va_list ap; va_start(ap, fmt); ! (void)vsnprintf(h->buf + (int)h->buflen, ! BUFSIZ - h->buflen - 1, fmt, ap); va_end(ap); h->buflen = strlen(h->buf); } *************** *** 691,702 **** const char *p, *pp; pp = h->base_includes; ! bufinit(h); while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { ! case('I'): bufcat(h, name); break; default: --- 684,695 ---- const char *p, *pp; pp = h->base_includes; ! bufinit(h); while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { ! case'I': bufcat(h, name); break; default: *************** *** 710,730 **** } void ! buffmt_man(struct html *h, ! const char *name, const char *sec) { const char *p, *pp; pp = h->base_man; ! bufinit(h); while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { ! case('S'): bufcat(h, sec ? sec : "1"); break; ! case('N'): bufcat_fmt(h, "%s", name); break; default: --- 703,722 ---- } void ! buffmt_man(struct html *h, const char *name, const char *sec) { const char *p, *pp; pp = h->base_man; ! bufinit(h); while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { ! case 'S': bufcat(h, sec ? sec : "1"); break; ! case 'N': bufcat_fmt(h, "%s", name); break; default: