aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/tbl_term.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2018-08-19 19:32:21 +0000
committerIngo Schwarze <schwarze@openbsd.org>2018-08-19 19:32:21 +0000
commita57333df2a2739b9ad427724c7d2178219cdd0b4 (patch)
tree37ad52c01d4b92e119a50d24e276accb4bc1fb4e /tbl_term.c
parentef62f27d014f39ece5e16500f0a58cdf13c32030 (diff)
downloadmandoc-a57333df2a2739b9ad427724c7d2178219cdd0b4.tar.gz
mandoc-a57333df2a2739b9ad427724c7d2178219cdd0b4.tar.zst
mandoc-a57333df2a2739b9ad427724c7d2178219cdd0b4.zip
do not print horizontal lines inside vertical spans
Diffstat (limited to 'tbl_term.c')
-rw-r--r--tbl_term.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/tbl_term.c b/tbl_term.c
index 3dda00d1..31eccd68 100644
--- a/tbl_term.c
+++ b/tbl_term.c
@@ -1,4 +1,4 @@
-/* $Id: tbl_term.c,v 1.58 2018/08/18 16:44:55 schwarze Exp $ */
+/* $Id: tbl_term.c,v 1.59 2018/08/19 19:32:21 schwarze Exp $ */
/*
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2011-2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -460,13 +460,11 @@ tbl_hrule(struct termp *tp, const struct tbl_span *sp, int kind)
const struct tbl_cell *cp, *cpn, *cpp;
const struct roffcol *col;
int vert;
- char line, cross;
+ char cross, line, stdcross, stdline;
- line = (kind < 2 && TBL_SPAN_DHORIZ == sp->pos) ? '=' : '-';
- cross = (kind < 3) ? '+' : '-';
+ stdline = (kind < 2 && TBL_SPAN_DHORIZ == sp->pos) ? '=' : '-';
+ stdcross = (kind < 3) ? '+' : '-';
- if (kind)
- term_word(tp, "+");
cp = sp->layout->first;
cpp = kind || sp->prev == NULL ? NULL : sp->prev->layout->first;
if (cpp == cp)
@@ -474,8 +472,18 @@ tbl_hrule(struct termp *tp, const struct tbl_span *sp, int kind)
cpn = kind > 1 || sp->next == NULL ? NULL : sp->next->layout->first;
if (cpn == cp)
cpn = NULL;
+ if (kind)
+ term_word(tp,
+ cpn == NULL || cpn->pos != TBL_CELL_DOWN ? "+" : "|");
for (;;) {
col = tp->tbl.cols + cp->col;
+ if (cpn == NULL || cpn->pos != TBL_CELL_DOWN) {
+ line = stdline;
+ cross = stdcross;
+ } else {
+ line = ' ';
+ cross = (kind < 3) ? '|' : ' ';
+ }
tbl_char(tp, line, col->width + col->spacing / 2);
vert = cp->vert;
if ((cp = cp->next) == NULL)
@@ -490,6 +498,11 @@ tbl_hrule(struct termp *tp, const struct tbl_span *sp, int kind)
vert = cpn->vert;
cpn = cpn->next;
}
+ if (cpn == NULL || cpn->pos != TBL_CELL_DOWN) {
+ line = stdline;
+ cross = stdcross;
+ } else
+ line = ' ';
if (sp->opts->opts & TBL_OPT_ALLBOX && !vert)
vert = 1;
if (col->spacing)
@@ -500,7 +513,8 @@ tbl_hrule(struct termp *tp, const struct tbl_span *sp, int kind)
tbl_char(tp, line, (col->spacing - 3) / 2);
}
if (kind) {
- term_word(tp, "+");
+ term_word(tp,
+ cpn == NULL || cpn->pos != TBL_CELL_DOWN ? "+" : "|");
term_flushln(tp);
}
}