diff options
-rw-r--r-- | tbl.7 | 5 | ||||
-rw-r--r-- | tbl_term.c | 22 |
2 files changed, 21 insertions, 6 deletions
@@ -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 @@ -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; - } /* |