tech@mandoc.bsd.lv
 help / color / mirror / Atom feed
* tbl center box should center whole table
@ 2019-01-29  9:38 Anthony J. Bentley
  2019-01-31 16:15 ` Ingo Schwarze
  0 siblings, 1 reply; 2+ messages in thread
From: Anthony J. Bentley @ 2019-01-29  9:38 UTC (permalink / raw)
  To: tech

Hi,

From fceux(6):

.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.
--
 To unsubscribe send an email to tech+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] 2+ messages in thread

* 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

end of thread, other threads:[~2019-01-31 16:15 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-29  9:38 tbl center box should center whole table Anthony J. Bentley
2019-01-31 16:15 ` 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).