=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/html.c,v retrieving revision 1.3 retrieving revision 1.4 diff -c -r1.3 -r1.4 *** src/usr.bin/mandoc/html.c 2009/12/22 23:58:00 1.3 --- src/usr.bin/mandoc/html.c 2009/12/23 22:30:17 1.4 *************** *** 1,4 **** ! /* $Id: html.c,v 1.3 2009/12/22 23:58:00 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * --- 1,4 ---- ! /* $Id: html.c,v 1.4 2009/12/23 22:30:17 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * *************** *** 18,25 **** #include #include - #include #include #include #include #include --- 18,25 ---- #include #include #include + #include #include #include #include *************** *** 185,199 **** print_spec(struct html *h, const char *p, int len) { const char *rhs; - int i; size_t sz; rhs = chars_a2ascii(h->symtab, p, (size_t)len, &sz); if (NULL == rhs) return; ! for (i = 0; i < (int)sz; i++) ! putchar(rhs[i]); } --- 185,197 ---- print_spec(struct html *h, const char *p, int len) { const char *rhs; size_t sz; rhs = chars_a2ascii(h->symtab, p, (size_t)len, &sz); if (NULL == rhs) return; ! fwrite(rhs, 1, sz, stdout); } *************** *** 201,215 **** print_res(struct html *h, const char *p, int len) { const char *rhs; - int i; size_t sz; rhs = chars_a2res(h->symtab, p, (size_t)len, &sz); if (NULL == rhs) return; ! for (i = 0; i < (int)sz; i++) ! putchar(rhs[i]); } --- 199,211 ---- print_res(struct html *h, const char *p, int len) { const char *rhs; size_t sz; rhs = chars_a2res(h->symtab, p, (size_t)len, &sz); if (NULL == rhs) return; ! fwrite(rhs, 1, sz, stdout); } *************** *** 316,341 **** static void print_encode(struct html *h, const char *p) { for (; *p; p++) { if ('\\' == *p) { print_escape(h, &p); continue; ! } ! switch (*p) { ! case ('<'): ! printf("<"); break; ! case ('>'): printf(">"); ! break; ! case ('&'): printf("&"); - break; - default: - putchar(*p); - break; - } } } --- 312,338 ---- static void print_encode(struct html *h, const char *p) { + size_t sz; for (; *p; p++) { + sz = strcspn(p, "\\<>&"); + + fwrite(p, 1, sz, stdout); + p += /* LINTED */ + sz; + if ('\\' == *p) { print_escape(h, &p); continue; ! } else if ('\0' == *p) break; ! ! if ('<' == *p) ! printf("<"); ! else if ('>' == *p) printf(">"); ! else if ('&' == *p) printf("&"); } } *************** *** 361,376 **** if ( ! (HTML_NOSPACE & h->flags)) if ( ! (HTML_CLRLINE & htmltags[tag].flags)) ! printf(" "); printf("<%s", htmltags[tag].name); for (i = 0; i < sz; i++) { printf(" %s=\"", htmlattrs[p[i].key]); assert(p->val); print_encode(h, p[i].val); ! printf("\""); } ! printf(">"); h->flags |= HTML_NOSPACE; if (HTML_CLRLINE & htmltags[tag].flags) --- 358,373 ---- if ( ! (HTML_NOSPACE & h->flags)) if ( ! (HTML_CLRLINE & htmltags[tag].flags)) ! putchar(' '); printf("<%s", htmltags[tag].name); for (i = 0; i < sz; i++) { printf(" %s=\"", htmlattrs[p[i].key]); assert(p->val); print_encode(h, p[i].val); ! putchar('\"'); } ! putchar('>'); h->flags |= HTML_NOSPACE; if (HTML_CLRLINE & htmltags[tag].flags) *************** *** 391,397 **** if (HTML_CLRLINE & htmltags[tag].flags) { h->flags |= HTML_NOSPACE; h->flags |= HTML_NEWLINE; ! printf("\n"); } else h->flags &= ~HTML_NEWLINE; } --- 388,394 ---- if (HTML_CLRLINE & htmltags[tag].flags) { h->flags |= HTML_NOSPACE; h->flags |= HTML_NEWLINE; ! putchar('\n'); } else h->flags &= ~HTML_NEWLINE; } *************** *** 437,443 **** } if ( ! (h->flags & HTML_NOSPACE)) ! printf(" "); h->flags &= ~HTML_NOSPACE; h->flags &= ~HTML_NEWLINE; --- 434,440 ---- } if ( ! (h->flags & HTML_NOSPACE)) ! putchar(' '); h->flags &= ~HTML_NOSPACE; h->flags &= ~HTML_NEWLINE;