]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_html.c
Note version 1.11.4 bits. Here we go!
[mandoc.git] / mdoc_html.c
index c3b3f68b469146f18c9b2cc4447e512ee8570968..33cebdacc11d42d56aef1ced4b5f6c946116d280 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_html.c,v 1.163 2011/04/04 22:38:26 kristaps Exp $ */
+/*     $Id: mdoc_html.c,v 1.172 2011/07/04 09:42:38 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -288,7 +288,7 @@ a2width(const char *p, struct roffsu *su)
 
        if ( ! a2roffsu(p, su, SCALE_MAX)) {
                su->unit = SCALE_BU;
-               su->scale = (int)strlen(p);
+               su->scale = html_strlen(p);
        }
 }
 
@@ -355,7 +355,7 @@ a2offs(const char *p, struct roffsu *su)
                SCALE_HS_INIT(su, INDENT * 2);
        else if ( ! a2roffsu(p, su, SCALE_MAX)) {
                su->unit = SCALE_BU;
-               su->scale = (int)strlen(p);
+               su->scale = html_strlen(p);
        }
 }
 
@@ -382,13 +382,10 @@ print_mdoc_head(MDOC_ARGS)
 
        print_gen_head(h);
        bufinit(h);
-       buffmt(h, "%s(%s)", m->title, m->msec);
+       bufcat_fmt(h, "%s(%s)", m->title, m->msec);
 
-       if (m->arch) {
-               bufcat(h, " (");
-               bufcat(h, m->arch);
-               bufcat(h, ")");
-       }
+       if (m->arch)
+               bufcat_fmt(h, " (%s)", m->arch);
 
        print_otag(h, TAG_TITLE, 0, NULL);
        print_text(h, h->buf);
@@ -415,7 +412,6 @@ print_mdoc_node(MDOC_ARGS)
        child = 1;
        t = h->tags.head;
 
-       bufinit(h);
        switch (n->type) {
        case (MDOC_ROOT):
                child = mdoc_root_pre(m, n, h);
@@ -484,7 +480,6 @@ print_mdoc_node(MDOC_ARGS)
 
        print_stagq(h, t);
 
-       bufinit(h);
        switch (n->type) {
        case (MDOC_ROOT):
                mdoc_root_post(m, n, h);
@@ -606,7 +601,6 @@ static int
 mdoc_sh_pre(MDOC_ARGS)
 {
        struct htmlpair  tag;
-       char             buf[BUFSIZ];
 
        if (MDOC_BLOCK == n->type) {
                PAIR_CLASS_INIT(&tag, "section");
@@ -615,14 +609,15 @@ mdoc_sh_pre(MDOC_ARGS)
        } else if (MDOC_BODY == n->type)
                return(1);
 
-       buf[0] = '\0';
+       bufinit(h);
+       bufcat(h, "x");
        for (n = n->child; n; n = n->next) {
-               html_idcat(buf, n->string, BUFSIZ);
+               bufcat_id(h, n->string);
                if (n->next)
-                       html_idcat(buf, " ", BUFSIZ);
+                       bufcat_id(h, " ");
        }
 
-       PAIR_ID_INIT(&tag, buf);
+       PAIR_ID_INIT(&tag, h->buf);
        print_otag(h, TAG_H1, 1, &tag);
        return(1);
 }
@@ -633,7 +628,6 @@ static int
 mdoc_ss_pre(MDOC_ARGS)
 {
        struct htmlpair  tag;
-       char             buf[BUFSIZ];
 
        if (MDOC_BLOCK == n->type) {
                PAIR_CLASS_INIT(&tag, "subsection");
@@ -642,14 +636,15 @@ mdoc_ss_pre(MDOC_ARGS)
        } else if (MDOC_BODY == n->type)
                return(1);
 
-       buf[0] = '\0';
+       bufinit(h);
+       bufcat(h, "x");
        for (n = n->child; n; n = n->next) {
-               html_idcat(buf, n->string, BUFSIZ);
+               bufcat_id(h, n->string);
                if (n->next)
-                       html_idcat(buf, " ", BUFSIZ);
+                       bufcat_id(h, " ");
        }
 
-       PAIR_ID_INIT(&tag, buf);
+       PAIR_ID_INIT(&tag, h->buf);
        print_otag(h, TAG_H2, 1, &tag);
        return(1);
 }
@@ -703,7 +698,7 @@ mdoc_nm_pre(MDOC_ARGS)
 {
        struct htmlpair  tag;
        struct roffsu    su;
-       size_t           len;
+       int              len;
 
        switch (n->type) {
        case (MDOC_ELEM):
@@ -731,12 +726,13 @@ mdoc_nm_pre(MDOC_ARGS)
 
        for (len = 0, n = n->child; n; n = n->next)
                if (MDOC_TEXT == n->type)
-                       len += strlen(n->string);
+                       len += html_strlen(n->string);
 
        if (0 == len && m->name)
-               len = strlen(m->name);
+               len = html_strlen(m->name);
 
        SCALE_HS_INIT(&su, (double)len);
+       bufinit(h);
        bufcat_su(h, "width", &su);
        PAIR_STYLE_INIT(&tag, h);
        print_otag(h, TAG_COL, 1, &tag);
@@ -899,6 +895,8 @@ mdoc_it_pre(MDOC_ARGS)
        assert(lists[type]);
        PAIR_CLASS_INIT(&tag[0], lists[type]);
 
+       bufinit(h);
+
        if (MDOC_HEAD == n->type) {
                switch (type) {
                case(LIST_bullet):
@@ -999,6 +997,8 @@ mdoc_bl_pre(MDOC_ARGS)
        struct roffsu    su;
        char             buf[BUFSIZ];
 
+       bufinit(h);
+
        if (MDOC_BODY == n->type) {
                if (LIST_column == n->norm->Bl.type)
                        print_otag(h, TAG_TBODY, 0, NULL);
@@ -1018,7 +1018,6 @@ mdoc_bl_pre(MDOC_ARGS)
 
                for (i = 0; i < (int)n->norm->Bl.ncols; i++) {
                        a2width(n->norm->Bl.cols[i], &su);
-                       bufinit(h);
                        if (i < (int)n->norm->Bl.ncols - 1)
                                bufcat_su(h, "width", &su);
                        else
@@ -1147,6 +1146,7 @@ mdoc_d1_pre(MDOC_ARGS)
                return(1);
 
        SCALE_VS_INIT(&su, 0);
+       bufinit(h);
        bufcat_su(h, "margin-top", &su);
        bufcat_su(h, "margin-bottom", &su);
        PAIR_STYLE_INIT(&tag[0], h);
@@ -1171,17 +1171,17 @@ static int
 mdoc_sx_pre(MDOC_ARGS)
 {
        struct htmlpair  tag[2];
-       char             buf[BUFSIZ];
 
-       strlcpy(buf, "#", BUFSIZ);
+       bufinit(h);
+       bufcat(h, "#x");
        for (n = n->child; n; n = n->next) {
-               html_idcat(buf, n->string, BUFSIZ);
+               bufcat_id(h, n->string);
                if (n->next)
-                       html_idcat(buf, " ", BUFSIZ);
+                       bufcat_id(h, " ");
        }
 
        PAIR_CLASS_INIT(&tag[0], "link-sec");
-       PAIR_HREF_INIT(&tag[1], buf);
+       PAIR_HREF_INIT(&tag[1], h->buf);
 
        print_otag(h, TAG_I, 1, tag);
        print_otag(h, TAG_A, 2, tag);
@@ -1219,7 +1219,8 @@ mdoc_bd_pre(MDOC_ARGS)
        SCALE_HS_INIT(&su, 0);
        if (n->norm->Bd.offs)
                a2offs(n->norm->Bd.offs, &su);
-
+       
+       bufinit(h);
        bufcat_su(h, "margin-left", &su);
        PAIR_STYLE_INIT(&tag[0], h);
 
@@ -1438,7 +1439,6 @@ mdoc_fd_pre(MDOC_ARGS)
                        buf[sz - 1] = '\0';
 
                PAIR_CLASS_INIT(&tag[0], "link-includes");
-               bufinit(h);
                
                i = 1;
                if (h->base_includes) {
@@ -1560,8 +1560,8 @@ mdoc_fn_pre(MDOC_ARGS)
        print_text(h, "(");
        h->flags |= HTML_NOSPACE;
 
-       bufinit(h);
        PAIR_CLASS_INIT(&tag[0], "farg");
+       bufinit(h);
        bufcat_style(h, "white-space", "nowrap");
        PAIR_STYLE_INIT(&tag[1], h);
 
@@ -1635,11 +1635,13 @@ mdoc_sp_pre(MDOC_ARGS)
        SCALE_VS_INIT(&su, 1);
 
        if (MDOC_sp == n->tok) {
-               if (n->child)
-                       a2roffsu(n->child->string, &su, SCALE_VS);
+               if (NULL != (n = n->child))
+                       if ( ! a2roffsu(n->string, &su, SCALE_VS))
+                               SCALE_VS_INIT(&su, atoi(n->string));
        } else
                su.scale = 0;
 
+       bufinit(h);
        bufcat_su(h, "height", &su);
        PAIR_STYLE_INIT(&tag, h);
        print_otag(h, TAG_DIV, 1, &tag);
@@ -1667,10 +1669,11 @@ mdoc_lk_pre(MDOC_ARGS)
 
        print_otag(h, TAG_A, 2, tag);
 
-       for (n = n->next; n; n = n->next) {
-               assert(MDOC_TEXT == n->type);
+       if (NULL == n->next)
+               print_text(h, n->string);
+
+       for (n = n->next; n; n = n->next)
                print_text(h, n->string);
-       }
 
        return(0);
 }
@@ -1776,10 +1779,8 @@ mdoc_in_pre(MDOC_ARGS)
                assert(MDOC_TEXT == n->type);
 
                PAIR_CLASS_INIT(&tag[0], "link-includes");
-               bufinit(h);
 
                i = 1;
-
                if (h->base_includes) {
                        buffmt_includes(h, n->string);
                        PAIR_HREF_INIT(&tag[i], h->buf);
@@ -1918,6 +1919,7 @@ mdoc_bf_pre(MDOC_ARGS)
         * We want this to be inline-formatted, but needs to be div to
         * accept block children. 
         */
+       bufinit(h);
        bufcat_style(h, "display", "inline");
        SCALE_HS_INIT(&su, 1);
        /* Needs a left-margin for spacing. */