=================================================================== RCS file: /cvs/mandoc/tbl_term.c,v retrieving revision 1.72 retrieving revision 1.79 diff -u -p -r1.72 -r1.79 --- mandoc/tbl_term.c 2019/07/01 22:56:24 1.72 +++ mandoc/tbl_term.c 2022/08/28 10:58:31 1.79 @@ -1,7 +1,7 @@ -/* $Id: tbl_term.c,v 1.72 2019/07/01 22:56:24 schwarze Exp $ */ +/* $Id: tbl_term.c,v 1.79 2022/08/28 10:58:31 schwarze Exp $ */ /* + * Copyright (c) 2011-2022 Ingo Schwarze * Copyright (c) 2009, 2011 Kristaps Dzonsons - * Copyright (c) 2011-2019 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -25,6 +25,9 @@ #include #include +#if DEBUG_MEMORY +#include "mandoc_dbg.h" +#endif #include "mandoc.h" #include "tbl.h" #include "out.h" @@ -190,17 +193,6 @@ term_tbl(struct termp *tp, const struct tbl_span *sp) tblcalc(&tp->tbl, sp, tp->tcol->offset, tp->tcol->rmargin); - /* Tables leak .ta settings to subsequent text. */ - - term_tab_set(tp, NULL); - coloff = sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX) || - sp->opts->lvert; - for (ic = 0; ic < sp->opts->cols; ic++) { - coloff += tp->tbl.cols[ic].width; - term_tab_iset(coloff); - coloff += tp->tbl.cols[ic].spacing; - } - /* Center the table as a whole. */ offset = tp->tcol->offset; @@ -267,11 +259,11 @@ term_tbl(struct termp *tp, const struct tbl_span *sp) hspans--; continue; } - if (dp == NULL) - continue; - hspans = dp->hspans; - if (ic || sp->layout->first->pos != TBL_CELL_SPAN) + if (dp != NULL && + (ic || sp->layout->first->pos != TBL_CELL_SPAN)) { + hspans = dp->hspans; dp = dp->next; + } } /* Set up a column for a right vertical frame. */ @@ -301,12 +293,13 @@ term_tbl(struct termp *tp, const struct tbl_span *sp) } tp->tcol++; tp->col = 0; + tp->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE); tbl_data(tp, sp->opts, cp, dp, tp->tbl.cols + ic); - if (dp == NULL) - continue; - hspans = dp->hspans; - if (cp->pos != TBL_CELL_SPAN) + if (dp != NULL && + (ic || sp->layout->first->pos != TBL_CELL_SPAN)) { + hspans = dp->hspans; dp = dp->next; + } } break; } @@ -425,11 +418,10 @@ term_tbl(struct termp *tp, const struct tbl_span *sp) cp = cp->next; continue; } - if (dp != NULL) { + if (dp != NULL && (ic || + sp->layout->first->pos != TBL_CELL_SPAN)) { hspans = dp->hspans; - if (ic || sp->layout->first->pos - != TBL_CELL_SPAN) - dp = dp->next; + dp = dp->next; } /* @@ -557,15 +549,11 @@ term_tbl(struct termp *tp, const struct tbl_span *sp) tp->flags &= ~TERMP_MULTICOL; tp->tcol->rmargin = tp->maxrmargin; if (sp->next == NULL) { - if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX)) { + if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX)) tbl_hrule(tp, sp, sp, NULL, TBL_OPT_BOX); - tp->skipvsp = 1; - } if (tp->enc == TERMENC_ASCII && - sp->opts->opts & TBL_OPT_DBOX) { + sp->opts->opts & TBL_OPT_DBOX) tbl_hrule(tp, sp, sp, NULL, TBL_OPT_DBOX); - tp->skipvsp = 2; - } assert(tp->tbl.cols); free(tp->tbl.cols); tp->tbl.cols = NULL; @@ -832,8 +820,11 @@ tbl_literal(struct termp *tp, const struct tbl_dat *dp width = col->width; ic = dp->layout->col; hspans = dp->hspans; - while (hspans--) - width += tp->tbl.cols[++ic].width + 3; + while (hspans--) { + width += tp->tbl.cols[ic].spacing; + ic++; + width += tp->tbl.cols[ic].width; + } padr = width > len ? width - len : 0; padl = 0; @@ -935,10 +926,24 @@ tbl_word(struct termp *tp, const struct tbl_dat *dp) int prev_font; prev_font = tp->fonti; - if (dp->layout->flags & TBL_CELL_BOLD) - term_fontpush(tp, TERMFONT_BOLD); - else if (dp->layout->flags & TBL_CELL_ITALIC) - term_fontpush(tp, TERMFONT_UNDER); + switch (dp->layout->font) { + case ESCAPE_FONTBI: + term_fontpush(tp, TERMFONT_BI); + break; + case ESCAPE_FONTBOLD: + case ESCAPE_FONTCB: + term_fontpush(tp, TERMFONT_BOLD); + break; + case ESCAPE_FONTITALIC: + case ESCAPE_FONTCI: + term_fontpush(tp, TERMFONT_UNDER); + break; + case ESCAPE_FONTROMAN: + case ESCAPE_FONTCR: + break; + default: + abort(); + } term_word(tp, dp->string);