* Rendering bottom of tables
@ 2019-03-15 23:27 Anthony J. Bentley
2019-03-18 12:01 ` Ingo Schwarze
0 siblings, 1 reply; 2+ messages in thread
From: Anthony J. Bentley @ 2019-03-15 23:27 UTC (permalink / raw)
To: tech
Hi,
mpv(1) has a number of tables like the following:
.TS
center;
|l|l|.
_
T{
left\-click
T} T{
toggle play/pause
T}
_
.TE
In a UTF-8 locale, groff renders this correctly. But mandoc displays
U+253C in the bottom row when it should display U+2534.
--
Anthony J. Bentley
--
To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Rendering bottom of tables
2019-03-15 23:27 Rendering bottom of tables Anthony J. Bentley
@ 2019-03-18 12:01 ` Ingo Schwarze
0 siblings, 0 replies; 2+ messages in thread
From: Ingo Schwarze @ 2019-03-18 12:01 UTC (permalink / raw)
To: Anthony J. Bentley; +Cc: tech
Hi,
Anthony J. Bentley wrote on Fri, Mar 15, 2019 at 05:27:21PM -0600:
> mpv(1) has a number of tables like the following:
>
> .TS
> center;
> |l|l|.
> _
> T{
> left\-click
> T} T{
> toggle play/pause
> T}
> _
> .TE
>
> In a UTF-8 locale, groff renders this correctly. But mandoc displays
> U+253C in the bottom row when it should display U+2534.
I almost forgot to mention on tech@ that this is fixed now,
see the commit below.
Thanks for reporting,
Ingo
Log Message:
-----------
When drawing a horizontal line in tbl(7) UTF-8 output, it is not
sufficient to look at two data rows, but up to three are needed:
the one above to identify vertical lines branching off upward, the
row itself (in case the line is in a data row rather than a layout
line) to figure out the horizontal line style, and the row below
to identify vertical lines branching off downward.
As an example, bentley@ reported from the mpv(1) manual page that
in a tbl(7) having a vertical line in the middle and a horizontal
line in the bottom data row, the vertical line extended below the
bottom horizontal line.
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.68
retrieving revision 1.69
diff -Ltbl_term.c -Ltbl_term.c -u -p -r1.68 -r1.69
--- tbl_term.c
+++ tbl_term.c
@@ -46,7 +46,8 @@ static void tbl_fill_border(struct termp
static void tbl_fill_char(struct termp *, char, size_t);
static void tbl_fill_string(struct termp *, const char *, size_t);
static void tbl_hrule(struct termp *, const struct tbl_span *,
- const struct tbl_span *, int);
+ const struct tbl_span *, const struct tbl_span *,
+ int);
static void tbl_literal(struct termp *, const struct tbl_dat *,
const struct roffcol *);
static void tbl_number(struct termp *, const struct tbl_opts *,
@@ -222,9 +223,9 @@ term_tbl(struct termp *tp, const struct
if (tp->enc == TERMENC_ASCII &&
sp->opts->opts & TBL_OPT_DBOX)
- tbl_hrule(tp, NULL, sp, TBL_OPT_DBOX);
+ tbl_hrule(tp, NULL, sp, sp, TBL_OPT_DBOX);
if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX))
- tbl_hrule(tp, NULL, sp, TBL_OPT_BOX);
+ tbl_hrule(tp, NULL, sp, sp, TBL_OPT_BOX);
}
/* Set up the columns. */
@@ -342,7 +343,7 @@ term_tbl(struct termp *tp, const struct
more = 0;
if (horiz)
- tbl_hrule(tp, sp->prev, sp, 0);
+ tbl_hrule(tp, sp->prev, sp, sp->next, 0);
else {
cp = sp->layout->first;
cpn = sp->next == NULL ? NULL :
@@ -557,12 +558,12 @@ term_tbl(struct termp *tp, const struct
tp->tcol->rmargin = tp->maxrmargin;
if (sp->next == NULL) {
if (sp->opts->opts & (TBL_OPT_DBOX | TBL_OPT_BOX)) {
- tbl_hrule(tp, sp, NULL, 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) {
- tbl_hrule(tp, sp, NULL, TBL_OPT_DBOX);
+ tbl_hrule(tp, sp, sp, NULL, TBL_OPT_DBOX);
tp->skipvsp = 2;
}
assert(tp->tbl.cols);
@@ -571,7 +572,7 @@ term_tbl(struct termp *tp, const struct
} else if (horiz == 0 && sp->opts->opts & TBL_OPT_ALLBOX &&
(sp->next == NULL || sp->next->pos == TBL_SPAN_DATA ||
sp->next->next != NULL))
- tbl_hrule(tp, sp, sp->next, TBL_OPT_ALLBOX);
+ tbl_hrule(tp, sp, sp, sp->next, TBL_OPT_ALLBOX);
tp->tcol->offset = save_offset;
tp->flags &= ~TERMP_NONOSPACE;
@@ -579,9 +580,10 @@ term_tbl(struct termp *tp, const struct
static void
tbl_hrule(struct termp *tp, const struct tbl_span *spp,
- const struct tbl_span *spn, int flags)
+ const struct tbl_span *sp, const struct tbl_span *spn, int flags)
{
const struct tbl_cell *cpp; /* Layout cell above this line. */
+ const struct tbl_cell *cp; /* Layout cell in this line. */
const struct tbl_cell *cpn; /* Layout cell below this line. */
const struct tbl_dat *dpn; /* Data cell below this line. */
const struct roffcol *col; /* Contains width and spacing. */
@@ -592,6 +594,7 @@ tbl_hrule(struct termp *tp, const struct
int uw, dw; /* Vertical line widths. */
cpp = spp == NULL ? NULL : spp->layout->first;
+ cp = sp == NULL ? NULL : sp->layout->first;
cpn = spn == NULL ? NULL : spn->layout->first;
dpn = NULL;
if (spn != NULL) {
@@ -600,11 +603,11 @@ tbl_hrule(struct termp *tp, const struct
else if (spn->next != NULL)
dpn = spn->next->first;
}
- opts = spn == NULL ? spp->opts->opts : spn->opts->opts;
+ opts = sp->opts->opts;
bw = opts & TBL_OPT_DBOX ? (tp->enc == TERMENC_UTF8 ? 2 : 1) :
opts & (TBL_OPT_BOX | TBL_OPT_ALLBOX) ? 1 : 0;
hw = flags == TBL_OPT_DBOX || flags == TBL_OPT_BOX ? bw :
- spn->pos == TBL_SPAN_DHORIZ ? 2 : 1;
+ sp->pos == TBL_SPAN_DHORIZ ? 2 : 1;
/* Print the left end of the line. */
@@ -620,7 +623,7 @@ tbl_hrule(struct termp *tp, const struct
cpn->pos != TBL_CELL_DOWN ? BRIGHT * hw : 0), 1);
for (;;) {
- col = tp->tbl.cols + (cpn == NULL ? cpp->col : cpn->col);
+ col = tp->tbl.cols + cp->col;
/* Print the horizontal line inside this column. */
@@ -646,6 +649,8 @@ tbl_hrule(struct termp *tp, const struct
}
cpp = cpp->next;
}
+ if (cp != NULL)
+ cp = cp->next;
if (cpn != NULL) {
if (flags != TBL_OPT_DBOX) {
dw = cpn->vert;
@@ -656,7 +661,7 @@ tbl_hrule(struct termp *tp, const struct
while (dpn != NULL && dpn->layout != cpn)
dpn = dpn->next;
}
- if (cpp == NULL && cpn == NULL)
+ if (cpp == NULL && cp == NULL && cpn == NULL)
break;
/* Vertical lines do not cross spanned cells. */
--
To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-03-18 12:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-15 23:27 Rendering bottom of tables Anthony J. Bentley
2019-03-18 12:01 ` Ingo Schwarze
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).