-/* $Id: tbl_term.c,v 1.38 2015/01/31 00:12:41 schwarze Exp $ */
+/* $Id: tbl_term.c,v 1.45 2017/06/07 17:38:26 schwarze Exp $ */
/*
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011, 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011,2012,2014,2015,2017 Ingo Schwarze <schwarze@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
term_tbl_strlen(const char *p, void *arg)
{
- return(term_strlen((const struct termp *)arg, p));
+ return term_strlen((const struct termp *)arg, p);
}
static size_t
term_tbl_len(size_t sz, void *arg)
{
- return(term_len((const struct termp *)arg, sz));
+ return term_len((const struct termp *)arg, sz);
}
void
const struct tbl_cell *cp;
const struct tbl_dat *dp;
static size_t offset;
- size_t rmargin, maxrmargin, tsz;
+ size_t tsz;
int ic, horiz, spans, vert;
- rmargin = tp->rmargin;
- maxrmargin = tp->maxrmargin;
-
- tp->rmargin = tp->maxrmargin = TERM_MAXMARGIN;
-
/* Inhibit printing of spaces: we do padding ourselves. */
- tp->flags |= TERMP_NONOSPACE;
- tp->flags |= TERMP_NOSPACE;
+ tp->flags |= TERMP_NOSPACE | TERMP_NONOSPACE | TERMP_BRNEVER;
/*
* The first time we're invoked for a given table block,
*/
if (tp->tbl.cols == NULL) {
- term_flushln(tp);
-
tp->tbl.len = term_tbl_len;
tp->tbl.slen = term_tbl_strlen;
tp->tbl.arg = tp;
- tblcalc(&tp->tbl, sp, rmargin - tp->offset);
+ tblcalc(&tp->tbl, sp, tp->tcol->rmargin - tp->tcol->offset);
/* Center the table as a whole. */
- offset = tp->offset;
+ offset = tp->tcol->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 (ic = 0; ic < sp->opts->cols; ic++)
tsz += tp->tbl.cols[ic].width + 3;
tsz -= 3;
- if (offset + tsz > rmargin)
+ if (offset + tsz > tp->tcol->rmargin)
tsz -= 1;
- tp->offset = (offset + rmargin > tsz) ?
- (offset + rmargin - tsz) / 2 : 0;
+ tp->tcol->offset = offset + tp->tcol->rmargin > tsz ?
+ (offset + tp->tcol->rmargin - tsz) / 2 : 0;
}
/* Horizontal frame at the start of boxed tables. */
assert(tp->tbl.cols);
free(tp->tbl.cols);
tp->tbl.cols = NULL;
- tp->offset = offset;
+ tp->tcol->offset = offset;
}
-
- tp->flags &= ~TERMP_NONOSPACE;
- tp->rmargin = rmargin;
- tp->maxrmargin = maxrmargin;
+ tp->flags &= ~(TERMP_NONOSPACE | TERMP_BRNEVER);
}
/*
tbl_char(tp, ASCII_NBRSP, col->width);
return;
case TBL_DATA_HORIZ:
- /* FALLTHROUGH */
case TBL_DATA_NHORIZ:
tbl_char(tp, '-', col->width);
return;
case TBL_DATA_NDHORIZ:
- /* FALLTHROUGH */
case TBL_DATA_DHORIZ:
tbl_char(tp, '=', col->width);
return;
tbl_char(tp, '=', col->width);
break;
case TBL_CELL_LONG:
- /* FALLTHROUGH */
case TBL_CELL_CENTRE:
- /* FALLTHROUGH */
case TBL_CELL_LEFT:
- /* FALLTHROUGH */
case TBL_CELL_RIGHT:
tbl_literal(tp, dp, col);
break;
break;
default:
abort();
- /* NOTREACHED */
}
}