From: Ingo Schwarze <schwarze@usta.de> To: "Anthony J. Bentley" <anthony@anjbe.name> Cc: tech@mandoc.bsd.lv Subject: Re: table borders don't span entire width Date: Sat, 9 Feb 2019 22:06:55 +0100 [thread overview] Message-ID: <20190209210655.GI37934@athene.usta.de> (raw) In-Reply-To: <20190208220221.GF20044@athene.usta.de> Hi, Ingo Schwarze wrote on Fri, Feb 08, 2019 at 11:02:21PM +0100: > Anthony J. Bentley wrote on Fri, Feb 08, 2019 at 02:43:45PM -0700: >> I tried out an example from The Awk Programming Language. >> The tbl(7) source it generates looks in part like this: >> >> .TS >> center; >> n n n n. >> _ _ _ _ >> 2173 77.1 13765 53.6 >> = = = = >> .TE >> >> groff creates solid lines as in the book: >> >> --------------------------- >> 2173 77.1 13765 53.6 >> --------------------------- >> >> But mandoc breaks the lines between cells: >> >> ---- ---- ----- ---- >> 2173 77.1 13765 53.6 >> ==== ==== ===== ==== > That looks like a bug. > Here is what the tbl(7) manual page says: > > If a data cell contains only the single character '_' or '=', > a single or double horizontal line is drawn across the cell, > joining its neighbours. If a data cells contains only the two > character sequence '\_' or '\=', a single or double horizontal > line is drawn inside the cell, not joining its neighbours. Fixed with the commit below. More testing is welcome. Yours, Ingo Log Message: ----------- The horizontal line in a data cell containing only "_" or "=" connects to the horizontally adjacent vertical line or cell; fixing a bug reported by bentley@. Modified Files: -------------- mandoc: tbl_term.c Revision Data ------------- Index: tbl_term.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/tbl_term.c,v retrieving revision 1.67 retrieving revision 1.68 diff -Ltbl_term.c -Ltbl_term.c -u -p -r1.67 -r1.68 --- tbl_term.c +++ tbl_term.c @@ -166,7 +166,7 @@ term_tbl(struct termp *tp, const struct size_t save_offset; size_t coloff, tsz; int hspans, ic, more; - int dvert, fc, horiz, line, uvert; + int dvert, fc, horiz, lhori, rhori, uvert; /* Inhibit printing of spaces: we do padding ourselves. */ @@ -325,11 +325,13 @@ term_tbl(struct termp *tp, const struct (horiz || (IS_HORIZ(sp->layout->first) && !IS_HORIZ(sp->prev->layout->first)))) uvert = sp->prev->layout->vert; - line = sp->pos == TBL_SPAN_DHORIZ || + rhori = sp->pos == TBL_SPAN_DHORIZ || + (sp->first != NULL && sp->first->pos == TBL_DATA_DHORIZ) || sp->layout->first->pos == TBL_CELL_DHORIZ ? 2 : sp->pos == TBL_SPAN_HORIZ || + (sp->first != NULL && sp->first->pos == TBL_DATA_HORIZ) || sp->layout->first->pos == TBL_CELL_HORIZ ? 1 : 0; - fc = BUP * uvert + BDOWN * dvert + BRIGHT * line; + fc = BUP * uvert + BDOWN * dvert + BRIGHT * rhori; if (uvert > 0 || dvert > 0 || (horiz && sp->opts->lvert)) { (*tp->advance)(tp, tp->tcols->offset); tp->viscol = tp->tcol->offset; @@ -402,6 +404,15 @@ term_tbl(struct termp *tp, const struct cpn = cpn->next; } + lhori = (cp != NULL && + cp->pos == TBL_CELL_DHORIZ) || + (dp != NULL && + dp->pos == TBL_DATA_DHORIZ) ? 2 : + (cp != NULL && + cp->pos == TBL_CELL_HORIZ) || + (dp != NULL && + dp->pos == TBL_DATA_HORIZ) ? 1 : 0; + /* * Skip later cells in a span, * figure out whether to start a span, @@ -454,57 +465,36 @@ term_tbl(struct termp *tp, const struct } while (tp->viscol < tp->tcol->rmargin + tp->tbl.cols[ic].spacing / 2) - tbl_direct_border(tp, fc, 1); + tbl_direct_border(tp, + BHORIZ * lhori, 1); if (tp->tcol + 1 == tp->tcols + tp->lasttcol) continue; - if (cp != NULL) { - switch (cp->pos) { - case TBL_CELL_HORIZ: - fc = BLEFT; - break; - case TBL_CELL_DHORIZ: - fc = BLEFT * 2; - break; - default: - fc = 0; - break; - } + if (cp != NULL) cp = cp->next; - } - if (cp != NULL) { - switch (cp->pos) { - case TBL_CELL_HORIZ: - fc += BRIGHT; - break; - case TBL_CELL_DHORIZ: - fc += BRIGHT * 2; - break; - default: - break; - } - } + + rhori = (cp != NULL && + cp->pos == TBL_CELL_DHORIZ) || + (dp != NULL && + dp->pos == TBL_DATA_DHORIZ) ? 2 : + (cp != NULL && + cp->pos == TBL_CELL_HORIZ) || + (dp != NULL && + dp->pos == TBL_DATA_HORIZ) ? 1 : 0; + if (tp->tbl.cols[ic].spacing) - tbl_direct_border(tp, fc + + tbl_direct_border(tp, + BLEFT * lhori + BRIGHT * rhori + BUP * uvert + BDOWN * dvert, 1); if (tp->enc == TERMENC_UTF8) uvert = dvert = 0; - if (fc != 0) { - if (cp != NULL && - cp->pos == TBL_CELL_HORIZ) - fc = BHORIZ; - else if (cp != NULL && - cp->pos == TBL_CELL_DHORIZ) - fc = BHORIZ * 2; - else - fc = 0; - } if (tp->tbl.cols[ic].spacing > 2 && - (uvert > 1 || dvert > 1 || fc != 0)) - tbl_direct_border(tp, fc + + (uvert > 1 || dvert > 1 || rhori)) + tbl_direct_border(tp, + BHORIZ * rhori + BUP * (uvert > 1) + BDOWN * (dvert > 1), 1); } @@ -528,20 +518,27 @@ term_tbl(struct termp *tp, const struct (horiz || (IS_HORIZ(sp->layout->last) && !IS_HORIZ(sp->prev->layout->last)))) uvert = sp->prev->layout->last->vert; - line = sp->pos == TBL_SPAN_DHORIZ || + lhori = sp->pos == TBL_SPAN_DHORIZ || + (sp->last != NULL && + sp->last->pos == TBL_DATA_DHORIZ && + sp->last->layout->col + 1 == sp->opts->cols) || (sp->layout->last->pos == TBL_CELL_DHORIZ && sp->layout->last->col + 1 == sp->opts->cols) ? 2 : sp->pos == TBL_SPAN_HORIZ || + (sp->last != NULL && + sp->last->pos == TBL_DATA_HORIZ && + sp->last->layout->col + 1 == sp->opts->cols) || (sp->layout->last->pos == TBL_CELL_HORIZ && sp->layout->last->col + 1 == sp->opts->cols) ? 1 : 0; - fc = BUP * uvert + BDOWN * dvert + BLEFT * line; + fc = BUP * uvert + BDOWN * dvert + BLEFT * lhori; if (uvert > 0 || dvert > 0 || (horiz && sp->opts->rvert)) { if (horiz == 0 && (IS_HORIZ(sp->layout->last) == 0 || sp->layout->last->col + 1 < sp->opts->cols)) { tp->tcol++; - (*tp->advance)(tp, - tp->tcol->offset > tp->viscol ? - tp->tcol->offset - tp->viscol : 1); + do { + tbl_direct_border(tp, + BHORIZ * lhori, 1); + } while (tp->viscol < tp->tcol->offset); } tbl_direct_border(tp, fc, 1); } -- To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv
prev parent reply other threads:[~2019-02-09 21:06 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-08 21:43 Anthony J. Bentley 2019-02-08 22:02 ` Ingo Schwarze 2019-02-08 22:39 ` Ingo Schwarze 2019-02-08 23:18 ` Anthony J. Bentley 2019-02-09 16:55 ` Ingo Schwarze 2019-02-09 21:06 ` Ingo Schwarze [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190209210655.GI37934@athene.usta.de \ --to=schwarze@usta.de \ --cc=anthony@anjbe.name \ --cc=tech@mandoc.bsd.lv \ --subject='Re: table borders don'\''t span entire width' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).