=================================================================== RCS file: /cvs/mandoc/html.c,v retrieving revision 1.59 retrieving revision 1.66 diff -u -p -r1.59 -r1.66 --- mandoc/html.c 2009/10/07 14:39:00 1.59 +++ mandoc/html.c 2009/10/26 08:18:15 1.66 @@ -1,4 +1,4 @@ -/* $Id: html.c,v 1.59 2009/10/07 14:39:00 kristaps Exp $ */ +/* $Id: html.c,v 1.66 2009/10/26 08:18:15 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -15,12 +15,12 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include -#include #include #include #include #include +#include #include #include #include @@ -28,12 +28,15 @@ #include "out.h" #include "chars.h" #include "html.h" +#include "main.h" +#define UNCONST(a) ((void *)(uintptr_t)(const void *)(a)) + #define DOCTYPE "-//W3C//DTD HTML 4.01//EN" #define DTD "http://www.w3.org/TR/html4/strict.dtd" struct htmldata { - char *name; + const char *name; int flags; #define HTML_CLRLINE (1 << 0) #define HTML_NOSTACK (1 << 1) @@ -87,7 +90,8 @@ void * html_alloc(char *outopts) { struct html *h; - char *toks[4], *v; + const char *toks[4]; + char *v; toks[0] = "style"; toks[1] = "man"; @@ -97,8 +101,8 @@ html_alloc(char *outopts) if (NULL == (h = calloc(1, sizeof(struct html)))) return(NULL); - SLIST_INIT(&h->tags); - SLIST_INIT(&h->ords); + h->tags.head = NULL; + h->ords.head = NULL; if (NULL == (h->symtab = chars_init(CHARS_HTML))) { free(h); @@ -106,7 +110,7 @@ html_alloc(char *outopts) } while (outopts && *outopts) - switch (getsubopt(&outopts, toks, &v)) { + switch (getsubopt(&outopts, UNCONST(toks), &v)) { case (0): h->style = v; break; @@ -133,15 +137,13 @@ html_free(void *p) h = (struct html *)p; - while ( ! SLIST_EMPTY(&h->ords)) { - ord = SLIST_FIRST(&h->ords); - SLIST_REMOVE_HEAD(&h->ords, entry); + while ((ord = h->ords.head) != NULL) { + h->ords.head = ord->next; free(ord); } - while ( ! SLIST_EMPTY(&h->tags)) { - tag = SLIST_FIRST(&h->tags); - SLIST_REMOVE_HEAD(&h->tags, entry); + while ((tag = h->tags.head) != NULL) { + h->tags.head = tag->next; free(tag); } @@ -353,7 +355,8 @@ print_otag(struct html *h, enum htmltag tag, if (NULL == (t = malloc(sizeof(struct tag)))) err(EXIT_FAILURE, "malloc"); t->tag = tag; - SLIST_INSERT_HEAD(&h->tags, t, entry); + t->next = h->tags.head; + h->tags.head = t; } else t = NULL; @@ -463,10 +466,9 @@ print_tagq(struct html *h, const struct tag *until) { struct tag *tag; - while ( ! SLIST_EMPTY(&h->tags)) { - tag = SLIST_FIRST(&h->tags); + while ((tag = h->tags.head) != NULL) { print_ctag(h, tag->tag); - SLIST_REMOVE_HEAD(&h->tags, entry); + h->tags.head = tag->next; free(tag); if (until && tag == until) return; @@ -479,12 +481,11 @@ print_stagq(struct html *h, const struct tag *suntil) { struct tag *tag; - while ( ! SLIST_EMPTY(&h->tags)) { - tag = SLIST_FIRST(&h->tags); + while ((tag = h->tags.head) != NULL) { if (suntil && tag == suntil) return; print_ctag(h, tag->tag); - SLIST_REMOVE_HEAD(&h->tags, entry); + h->tags.head = tag->next; free(tag); } } @@ -549,7 +550,8 @@ buffmt_includes(struct html *h, const char *name) const char *p, *pp; pp = h->base_includes; - while ((p = strchr(pp, '%'))) { + + while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { case('I'): @@ -573,7 +575,9 @@ buffmt_man(struct html *h, const char *p, *pp; pp = h->base_man; - while ((p = strchr(pp, '%'))) { + + /* LINTED */ + while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { case('S'): @@ -596,8 +600,8 @@ buffmt_man(struct html *h, void bufcat_su(struct html *h, const char *p, const struct roffsu *su) { - int v; - char *u; + double v; + const char *u; v = su->scale; @@ -636,5 +640,10 @@ bufcat_su(struct html *h, const char *p, const struct break; } - buffmt(h, "%s: %d%s;", p, v, u); + if (su->pt) + buffmt(h, "%s: %f%s;", p, v, u); + else + /* LINTED */ + buffmt(h, "%s: %d%s;", p, (int)v, u); } +