]> git.cameronkatri.com Git - mandoc.git/commitdiff
Make -T[x]html for tables structure cells with a width. I don't
authorKristaps Dzonsons <kristaps@bsd.lv>
Thu, 6 Jan 2011 11:55:39 +0000 (11:55 +0000)
committerKristaps Dzonsons <kristaps@bsd.lv>
Thu, 6 Jan 2011 11:55:39 +0000 (11:55 +0000)
anticipate doing much more than this for the coming release.

Also, remove "base" part of struct html (not used anywhere) and put some
comments in struct html.h.

html.h
tbl_html.c

diff --git a/html.h b/html.h
index c39658bb2693677d94fa2c5fd31cebebd78dcec8..8d9db8909574bd4ff105fd4a2471312de172ed98 100644 (file)
--- a/html.h
+++ b/html.h
@@ -1,4 +1,4 @@
-/*     $Id: html.h,v 1.37 2011/01/04 10:29:41 kristaps Exp $ */
+/*     $Id: html.h,v 1.38 2011/01/06 11:55:39 kristaps Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -115,13 +115,13 @@ struct    html {
 #define        HTML_KEEP        (1 << 2)
 #define        HTML_PREKEEP     (1 << 3)
 #define        HTML_NONOSPACE   (1 << 4)
-       struct tagq       tags;
-       void             *symtab;
-       char             *base;
-       char             *base_man;
-       char             *base_includes;
-       char             *style;
-       char              buf[BUFSIZ];
+       struct tagq       tags; /* stack of open tags */
+       struct rofftbl    tbl; /* current table */
+       void             *symtab; /* character-escapes */
+       char             *base_man; /* base for manpage href */
+       char             *base_includes; /* base for include href */
+       char             *style; /* style-sheet URI */
+       char              buf[BUFSIZ]; /* see bufcat and friends */
        size_t            buflen;
        struct tag       *metaf; /* current open font scope */
        enum htmlfont     metal; /* last used font */
@@ -129,8 +129,6 @@ struct      html {
        enum htmltype     type;
 };
 
-struct roffsu;
-
 void             print_gen_decls(struct html *);
 void             print_gen_head(struct html *);
 struct tag      *print_otag(struct html *, enum htmltag, 
index cda22b0cba4477b8516c54ef830cd795bda6149a..47db6f6052ea7f4442ef4d73562049e2063bbbf3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: tbl_html.c,v 1.3 2011/01/05 13:00:11 kristaps Exp $ */
+/*     $Id: tbl_html.c,v 1.4 2011/01/06 11:55:39 kristaps Exp $ */
 /*
  * Copyright (c) 2009 Kristaps Dzonsons <kristaps@kth.se>
  *
 #include "out.h"
 #include "html.h"
 
+static size_t   html_tbl_len(size_t, void *);
+static size_t   html_tbl_strlen(const char *, void *);
+
+/* ARGSUSED */
+static size_t
+html_tbl_len(size_t sz, void *arg)
+{
+       
+       return(sz);
+}
+
+/* ARGSUSED */
+static size_t
+html_tbl_strlen(const char *p, void *arg)
+{
+
+       return(strlen(p));
+}
+
 void
 print_tbl(struct html *h, const struct tbl_span *sp)
 {
@@ -34,6 +53,8 @@ print_tbl(struct html *h, const struct tbl_span *sp)
        const struct tbl_dat *dp;
        struct tag      *tt;
        struct htmlpair  tag;
+       struct roffsu    su;
+       struct roffcol  *col;
 
        switch (sp->pos) {
        case (TBL_SPAN_HORIZ):
@@ -49,6 +70,14 @@ print_tbl(struct html *h, const struct tbl_span *sp)
        h->flags |= HTML_NONOSPACE;
        h->flags |= HTML_NOSPACE;
 
+       /* First pass: calculate widths. */
+
+       if (TBL_SPAN_FIRST & sp->flags) {
+               h->tbl.len = html_tbl_len;
+               h->tbl.slen = html_tbl_strlen;
+               tblcalc(&h->tbl, sp);
+       }
+
        PAIR_CLASS_INIT(&tag, "tbl");
 
        print_otag(h, TAG_TABLE, 1, &tag);
@@ -64,7 +93,17 @@ print_tbl(struct html *h, const struct tbl_span *sp)
                case (TBL_HEAD_DATA):
                        break;
                }
-               tt = print_otag(h, TAG_TD, 0, NULL);
+
+               /*
+                * For the time being, use the simplest possible table
+                * styling: setting the widths of data columns.
+                */
+
+               col = &h->tbl.cols[hp->ident];
+               SCALE_HS_INIT(&su, col->width);
+               bufcat_su(h, "width", &su);
+               PAIR_STYLE_INIT(&tag, h);
+               tt = print_otag(h, TAG_TD, 1, &tag);
                if (dp) {
                        if (dp->string)
                                print_text(h, dp->string);
@@ -73,4 +112,12 @@ print_tbl(struct html *h, const struct tbl_span *sp)
                print_tagq(h, tt);
        }
        h->flags &= ~HTML_NONOSPACE;
+
+       /* Close out column specifiers on the last span. */
+
+       if (TBL_SPAN_LAST & sp->flags) {
+               assert(h->tbl.cols);
+               free(h->tbl.cols);
+               h->tbl.cols = NULL;
+       }
 }