summaryrefslogtreecommitdiff
path: root/usr.bin/mandoc/out.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2011-09-20 23:05:47 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2011-09-20 23:05:47 +0000
commitf0096eca2477efcc369002084560ccacbd349bd3 (patch)
treed48e7a473feb24ea1bb675b87ecf0a4e83b36c33 /usr.bin/mandoc/out.c
parent338efc2547693e64cc762da07c0cd877897d3b97 (diff)
Major rewrite of the horizontal spacing of tables
to work both with and without frames and rulers. Started during BSDCan 2011 in Ottawa, finished during s2k11 in Ljubljana. ok kristaps@
Diffstat (limited to 'usr.bin/mandoc/out.c')
-rw-r--r--usr.bin/mandoc/out.c53
1 files changed, 11 insertions, 42 deletions
diff --git a/usr.bin/mandoc/out.c b/usr.bin/mandoc/out.c
index 33b19d466b4..d267a9b8041 100644
--- a/usr.bin/mandoc/out.c
+++ b/usr.bin/mandoc/out.c
@@ -1,4 +1,4 @@
-/* $Id: out.c,v 1.15 2011/09/18 15:54:48 schwarze Exp $ */
+/* $Id: out.c,v 1.16 2011/09/20 23:05:46 schwarze Exp $ */
/*
* Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
@@ -140,6 +140,7 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp)
const struct tbl_dat *dp;
const struct tbl_head *hp;
struct roffcol *col;
+ int spans;
/*
* Allocate the master column specifiers. These will hold the
@@ -156,11 +157,18 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp)
for ( ; sp; sp = sp->next) {
if (TBL_SPAN_DATA != sp->pos)
continue;
+ spans = 1;
/*
* Account for the data cells in the layout, matching it
* to data cells in the data section.
*/
for (dp = sp->first; dp; dp = dp->next) {
+ /* Do not used spanned cells in the calculation. */
+ if (0 < --spans)
+ continue;
+ spans = dp->spans;
+ if (1 < spans)
+ continue;
assert(dp->layout);
col = &tbl->cols[dp->layout->head->ident];
tblcalc_data(tbl, col, sp->tbl, dp);
@@ -227,39 +235,12 @@ static void
tblcalc_literal(struct rofftbl *tbl, struct roffcol *col,
const struct tbl_dat *dp)
{
- size_t sz, bufsz, spsz;
+ size_t sz;
const char *str;
- /*
- * Calculate our width and use the spacing, with a minimum
- * spacing dictated by position (centre, e.g,. gets a space on
- * either side, while right/left get a single adjacent space).
- */
-
- bufsz = spsz = 0;
str = dp->string ? dp->string : "";
sz = (*tbl->slen)(str, tbl->arg);
- /* FIXME: TBL_DATA_HORIZ et al.? */
-
- assert(dp->layout);
- switch (dp->layout->pos) {
- case (TBL_CELL_LONG):
- /* FALLTHROUGH */
- case (TBL_CELL_CENTRE):
- bufsz = (*tbl->len)(1, tbl->arg);
- break;
- default:
- bufsz = (*tbl->len)(1, tbl->arg);
- break;
- }
-
- if (dp->layout->spacing) {
- spsz = (*tbl->len)(dp->layout->spacing, tbl->arg);
- bufsz = bufsz > spsz ? bufsz : spsz;
- }
-
- sz += bufsz;
if (col->width < sz)
col->width = sz;
}
@@ -276,7 +257,7 @@ tblcalc_number(struct rofftbl *tbl, struct roffcol *col,
/*
* First calculate number width and decimal place (last + 1 for
- * no-decimal numbers). If the stored decimal is subsequent
+ * non-decimal numbers). If the stored decimal is subsequent to
* ours, make our size longer by that difference
* (right-"shifting"); similarly, if ours is subsequent the
* stored, then extend the stored size by the difference.
@@ -303,11 +284,6 @@ tblcalc_number(struct rofftbl *tbl, struct roffcol *col,
} else
d = sz + psz;
- /* Padding. */
-
- sz += (*tbl->len)(2, tbl->arg);
- d += (*tbl->len)(1, tbl->arg);
-
/* Adjust the settings for this column. */
if (col->decimal > d) {
@@ -320,11 +296,4 @@ tblcalc_number(struct rofftbl *tbl, struct roffcol *col,
col->width = sz;
if (d > col->decimal)
col->decimal = d;
-
- /* Adjust for stipulated width. */
-
- if (col->width < dp->layout->spacing)
- col->width = dp->layout->spacing;
}
-
-