* Re: tbl center box should center whole table
2019-01-29 9:38 tbl center box should center whole table Anthony J. Bentley
@ 2019-01-31 16:15 ` Ingo Schwarze
0 siblings, 0 replies; 2+ messages in thread
From: Ingo Schwarze @ 2019-01-31 16:15 UTC (permalink / raw)
To: Anthony J. Bentley; +Cc: tech
Hi Anthony,
Anthony J. Bentley wrote on Tue, Jan 29, 2019 at 02:38:57AM -0700:
> From fceux(6):
... which is an mdoc(7) document.
> .TS
> center box;
> cb | cb, cb | c.
> NES Gamepad Keyboard
> =
> \(ua Keypad Up
> \(da Keypad Down
> \(<- Keypad Left
> \(-> Keypad Right
> A F
> B D
> Select S
> Start Enter
> .TE
>
> +------------+--------------+
> |NES Gamepad | Keyboard |
> +============+==============+
> | ^ | Keypad Up |
> | v | Keypad Down |
> | <- | Keypad Left |
> | -> | Keypad Right |
> | A | F |
> | B | D |
> | Select | S |
> | Start | Enter |
> +------------+--------------+
>
> groff(1) centers the whole table, and tbl(7)'s description seems to
> apply to the whole table:
>
> center Center the table instead of left-adjusting it. For GNU
> compatibility, this may also be invoked with centre.
Absolutely, thanks for reporting the bug, which i fixed with the
following commit.
Yours,
Ingo
Log Message:
-----------
Fix tbl(7) centering in mdoc(7) documents.
Since resetting of offsets works quite differently in the mdoc(7)
and man(7) formatters, the tbl(7) formatter needs to save the global
offset on entry and restore it on exit. The additional indentation
needed for table centering has to be added to its own offset variable
and applied to each line of the table, rather than only to the first.
Bug found by bentley@ in emulators/fceux(6).
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.66
retrieving revision 1.67
diff -Ltbl_term.c -Ltbl_term.c -u -p -r1.66 -r1.67
--- tbl_term.c
+++ tbl_term.c
@@ -1,7 +1,7 @@
/* $Id$ */
/*
* Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011-2018 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011-2019 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
@@ -163,6 +163,7 @@ term_tbl(struct termp *tp, const struct
const struct tbl_cell *cp, *cpn, *cpp, *cps;
const struct tbl_dat *dp;
static size_t offset;
+ size_t save_offset;
size_t coloff, tsz;
int hspans, ic, more;
int dvert, fc, horiz, line, uvert;
@@ -170,6 +171,7 @@ term_tbl(struct termp *tp, const struct
/* Inhibit printing of spaces: we do padding ourselves. */
tp->flags |= TERMP_NOSPACE | TERMP_NONOSPACE;
+ save_offset = tp->tcol->offset;
/*
* The first time we're invoked for a given table block,
@@ -211,8 +213,9 @@ term_tbl(struct termp *tp, const struct
tsz += tp->tbl.cols[sp->opts->cols - 1].width;
if (offset + tsz > tp->tcol->rmargin)
tsz -= 1;
- tp->tcol->offset = offset + tp->tcol->rmargin > tsz ?
+ offset = offset + tp->tcol->rmargin > tsz ?
(offset + tp->tcol->rmargin - tsz) / 2 : 0;
+ tp->tcol->offset = offset;
}
/* Horizontal frame at the start of boxed tables. */
@@ -227,6 +230,7 @@ term_tbl(struct termp *tp, const struct
/* Set up the columns. */
tp->flags |= TERMP_MULTICOL;
+ tp->tcol->offset = offset;
horiz = 0;
switch (sp->pos) {
case TBL_SPAN_HORIZ:
@@ -567,12 +571,12 @@ term_tbl(struct termp *tp, const struct
assert(tp->tbl.cols);
free(tp->tbl.cols);
tp->tbl.cols = NULL;
- tp->tcol->offset = offset;
} 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);
+ tp->tcol->offset = save_offset;
tp->flags &= ~TERMP_NONOSPACE;
}
--
To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv
^ permalink raw reply [flat|nested] 2+ messages in thread