source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mandoc: Fix tbl(7) centering in mdoc(7) documents.
@ 2019-01-31 16:06 schwarze
  0 siblings, 0 replies; only message in thread
From: schwarze @ 2019-01-31 16:06 UTC (permalink / raw)
  To: source

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 source+unsubscribe@mandoc.bsd.lv

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-01-31 16:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-31 16:06 mandoc: Fix tbl(7) centering in mdoc(7) documents 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).