aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tbl_html.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-01-06 11:55:39 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-01-06 11:55:39 +0000
commit40384b46245ed46f132d087f7569bf00117bbf9a (patch)
tree257435af9bfcb77f0453397efa2a53191d51ae14 /tbl_html.c
parentd31e4231b7891f0a8d9a18da109c2e9246900b45 (diff)
downloadmandoc-40384b46245ed46f132d087f7569bf00117bbf9a.tar.gz
mandoc-40384b46245ed46f132d087f7569bf00117bbf9a.tar.zst
mandoc-40384b46245ed46f132d087f7569bf00117bbf9a.zip
Make -T[x]html for tables structure cells with a width. I don't
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.
Diffstat (limited to 'tbl_html.c')
-rw-r--r--tbl_html.c51
1 files changed, 49 insertions, 2 deletions
diff --git a/tbl_html.c b/tbl_html.c
index cda22b0c..47db6f60 100644
--- a/tbl_html.c
+++ b/tbl_html.c
@@ -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>
*
@@ -27,6 +27,25 @@
#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;
+ }
}