]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_html.c
Removed need for superfluous `os' value in overstep calculation (thanks Ingo Schwarze).
[mandoc.git] / mdoc_html.c
index 0bb3ea57b3bef5fe65a7e4b09ed61361a895b51d..5dbad7c2ee97805c42522b6f93209fe3b312b777 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_html.c,v 1.27 2009/10/08 23:00:15 kristaps Exp $ */
+/*     $Id: mdoc_html.c,v 1.37 2009/10/24 05:52:13 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -29,6 +29,7 @@
 #include "out.h"
 #include "html.h"
 #include "mdoc.h"
+#include "main.h"
 
 #define        INDENT           5
 #define        HALFINDENT       3
@@ -253,6 +254,7 @@ static      const struct htmlmdoc mdocs[MDOC_MAX] = {
        {mdoc__x_pre, mdoc__x_post}, /* %Q */ 
        {mdoc_sp_pre, NULL}, /* br */
        {mdoc_sp_pre, NULL}, /* sp */ 
+       {mdoc__x_pre, mdoc__x_post}, /* %U */ 
 };
 
 
@@ -326,10 +328,10 @@ static void
 a2width(const char *p, struct roffsu *su)
 {
 
-       if (a2roffsu(p, su))
-               return;
-       su->unit = SCALE_EM;
-       su->scale = (int)strlen(p);
+       if ( ! a2roffsu(p, su, SCALE_MAX)) {
+               su->unit = SCALE_EM;
+               su->scale = (int)strlen(p);
+       }
 }
 
 
@@ -342,13 +344,15 @@ static void
 a2offs(const char *p, struct roffsu *su)
 {
 
+       /* FIXME: "right"? */
+
        if (0 == strcmp(p, "left"))
                SCALE_HS_INIT(su, 0);
        else if (0 == strcmp(p, "indent"))
                SCALE_HS_INIT(su, INDENT);
        else if (0 == strcmp(p, "indent-two"))
                SCALE_HS_INIT(su, INDENT * 2);
-       else if ( ! a2roffsu(p, su)) {
+       else if ( ! a2roffsu(p, su, SCALE_MAX)) {
                su->unit = SCALE_EM;
                su->scale = (int)strlen(p);
        }
@@ -453,10 +457,11 @@ print_mdoc_node(MDOC_ARGS)
 static void
 mdoc_root_post(MDOC_ARGS)
 {
-       struct tm        tm;
        struct htmlpair  tag[2];
        struct tag      *t, *tt;
-       char             b[BUFSIZ];
+       char             b[DATESIZ];
+
+       time2a(m->date, b, DATESIZ);
 
        /*
         * XXX: this should use divs, but in Firefox, divs with nested
@@ -464,11 +469,6 @@ mdoc_root_post(MDOC_ARGS)
         * below.  So I use tables, instead.
         */
 
-       (void)localtime_r(&m->date, &tm);
-
-       if (0 == strftime(b, BUFSIZ - 1, "%B %e, %Y", &tm))
-               err(EXIT_FAILURE, "strftime");
-
        PAIR_CLASS_INIT(&tag[0], "footer");
        bufcat_style(h, "width", "100%");
        PAIR_STYLE_INIT(&tag[1], h);
@@ -1065,6 +1065,8 @@ mdoc_it_pre(MDOC_ARGS)
        /* Override width in some cases. */
 
        switch (type) {
+       case (MDOC_Item):
+               /* FALLTHROUGH */
        case (MDOC_Inset):
                /* FALLTHROUGH */
        case (MDOC_Diag):
@@ -1269,6 +1271,8 @@ mdoc_d1_pre(MDOC_ARGS)
        if (MDOC_BLOCK != n->type)
                return(1);
 
+       /* FIXME: D1 shouldn't be literal. */
+
        SCALE_VS_INIT(&su, INDENT - 2);
        bufcat_su(h, "margin-left", &su);
        PAIR_CLASS_INIT(&tag[0], "lit");
@@ -1284,20 +1288,20 @@ mdoc_sx_pre(MDOC_ARGS)
 {
        struct htmlpair          tag[2];
        const struct mdoc_node  *nn;
-       char                     lbuf[BUFSIZ];
+       char                     buf[BUFSIZ];
 
        /* FIXME: duplicates? */
 
-       (void)strlcpy(lbuf, "#", BUFSIZ);
+       (void)strlcpy(buf, "#", BUFSIZ);
        for (nn = n->child; nn; nn = nn->next) {
-               (void)strlcat(lbuf, nn->string, BUFSIZ);
+               (void)strlcat(buf, nn->string, BUFSIZ);
                if (nn->next)
-                       (void)strlcat(lbuf, "_", BUFSIZ);
+                       (void)strlcat(buf, "_", BUFSIZ);
        }
 
        PAIR_CLASS_INIT(&tag[0], "link-sec");
        tag[1].key = ATTR_HREF;
-       tag[1].val = lbuf;
+       tag[1].val = buf;
 
        print_otag(h, TAG_A, 2, tag);
        return(1);
@@ -1356,6 +1360,8 @@ mdoc_bd_pre(MDOC_ARGS)
                case (MDOC_Compact):
                        comp = 1;
                        break;
+               case (MDOC_Centred):
+                       /* FALLTHROUGH */
                case (MDOC_Ragged):
                        /* FALLTHROUGH */
                case (MDOC_Filled):
@@ -1365,8 +1371,12 @@ mdoc_bd_pre(MDOC_ARGS)
                case (MDOC_Literal):
                        type = bl->args->argv[i].arg;
                        break;
+               default:
+                       break;
                }
 
+       /* FIXME: -centered, etc. formatting. */
+
        if (MDOC_BLOCK == n->type) {
                bufcat_su(h, "margin-left", &su);
                for (nn = n; nn && ! comp; nn = nn->parent) {
@@ -1455,6 +1465,7 @@ mdoc_cd_pre(MDOC_ARGS)
 {
        struct htmlpair tag;
 
+       print_otag(h, TAG_DIV, 0, NULL);
        PAIR_CLASS_INIT(&tag, "config");
        print_otag(h, TAG_SPAN, 1, &tag);
        return(1);
@@ -1830,6 +1841,8 @@ mdoc_in_pre(MDOC_ARGS)
                        print_otag(h, TAG_DIV, 0, NULL);
        }
 
+       /* FIXME: there's a buffer bug in here somewhere. */
+
        PAIR_CLASS_INIT(&tag[0], "includes");
        print_otag(h, TAG_SPAN, 1, tag);
 
@@ -2136,6 +2149,8 @@ mdoc__x_pre(MDOC_ARGS)
 {
        struct htmlpair tag;
 
+       /* TODO: %U. */
+
        switch (n->tok) {
        case(MDOC__A):
                PAIR_CLASS_INIT(&tag, "ref-auth");