aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--tbl.75
-rw-r--r--tbl_term.c22
2 files changed, 21 insertions, 6 deletions
diff --git a/tbl.7 b/tbl.7
index 20f3e7f3..eb5e51f0 100644
--- a/tbl.7
+++ b/tbl.7
@@ -1,4 +1,4 @@
-.\" $Id: tbl.7,v 1.24 2015/01/26 18:42:30 schwarze Exp $
+.\" $Id: tbl.7,v 1.25 2015/01/28 04:19:35 schwarze Exp $
.\"
.\" Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -15,7 +15,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\"
-.Dd $Mdocdate: January 26 2015 $
+.Dd $Mdocdate: January 28 2015 $
.Dt TBL 7
.Os
.Sh NAME
@@ -152,7 +152,6 @@ For GNU compatibility, this may also be invoked with
.Cm frame .
.It Cm center
Center the table instead of left-adjusting it.
-Currently ignored.
For GNU compatibility, this may also be invoked with
.Cm centre .
.It Cm decimalpoint
diff --git a/tbl_term.c b/tbl_term.c
index e9497dd2..9b6aea36 100644
--- a/tbl_term.c
+++ b/tbl_term.c
@@ -1,4 +1,4 @@
-/* $Id: tbl_term.c,v 1.33 2015/01/27 05:21:45 schwarze Exp $ */
+/* $Id: tbl_term.c,v 1.34 2015/01/28 04:19:35 schwarze Exp $ */
/*
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011, 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -63,8 +63,9 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
const struct tbl_head *hp;
const struct tbl_cell *cp;
const struct tbl_dat *dp;
+ static size_t offset;
+ size_t rmargin, maxrmargin, tsz;
int horiz, spans, vert;
- size_t rmargin, maxrmargin;
rmargin = tp->rmargin;
maxrmargin = tp->maxrmargin;
@@ -90,6 +91,21 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
tblcalc(&tp->tbl, sp, rmargin - tp->offset);
+ /* Center the table as a whole. */
+
+ offset = tp->offset;
+ if (sp->opts->opts & TBL_OPT_CENTRE) {
+ tsz = sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX)
+ ? 2 : !!sp->opts->lvert + !!sp->opts->rvert;
+ for (hp = sp->head; hp != NULL; hp = hp->next)
+ tsz += tp->tbl.cols[hp->ident].width + 3;
+ tsz -= 3;
+ if (offset + tsz > rmargin)
+ tsz -= 1;
+ tp->offset = (offset + rmargin > tsz) ?
+ (offset + rmargin - tsz) / 2 : 0;
+ }
+
/* Horizontal frame at the start of boxed tables. */
if (sp->opts->opts & TBL_OPT_DBOX)
@@ -189,12 +205,12 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
assert(tp->tbl.cols);
free(tp->tbl.cols);
tp->tbl.cols = NULL;
+ tp->offset = offset;
}
tp->flags &= ~TERMP_NONOSPACE;
tp->rmargin = rmargin;
tp->maxrmargin = maxrmargin;
-
}
/*