Correctly calculate required column widths for tables containing
authorschwarze <schwarze@openbsd.org>
Tue, 7 Sep 2021 14:50:56 +0000 (14:50 +0000)
committerschwarze <schwarze@openbsd.org>
Tue, 7 Sep 2021 14:50:56 +0000 (14:50 +0000)
cells that horizontally span columns which contains "n" (number)
formatted cells on other rows.  This requires updating total column
widths from "n" formatted cells before starting width distribution
from the spanning cells to their constituent columns.

regress/usr.bin/mandoc/tbl/layout/span.in
regress/usr.bin/mandoc/tbl/layout/span.out_ascii
usr.bin/mandoc/out.c

index 84a71f8..d02d236 100644 (file)
@@ -1,5 +1,5 @@
-.\" $OpenBSD: span.in,v 1.5 2017/07/04 14:53:27 schwarze Exp $
-.TH TBL-LAYOUT-SPAN 1 "June 17, 2017"
+.\" $OpenBSD: span.in,v 1.6 2021/09/07 14:50:56 schwarze Exp $
+.TH TBL-LAYOUT-SPAN 1 "September 7, 2021"
 .SH NAME
 tbl-layout-span \- alignment of spanned cells
 .SH DESCRIPTION
@@ -50,6 +50,15 @@ s1:s2
 a:b:c:d:e
 .TE
 .sp
+.TS
+allbox tab(:);
+L S
+L N.
+x***nnnnn
+a:0.01
+b:10.0
+.TE
+.sp
 leaked tab settings:
 .br
 a      b       c       d       e       f
index 2372e60..adc57cf 100644 (file)
@@ -34,7 +34,15 @@ D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        +--+---+---+---+---+
        |a | b | c | d | e |
        +--+---+---+---+---+
+
+       +----------+
+       |x***nnnnn |
+       +--+-------+
+       |a |  0.01 |
+       +--+-------+
+       |b | 10.0  |
+       +--+-------+
        leaked tab settings:
        a    b    c    d    e    f
 
-OpenBSD                          June 17, 2017              TBL-LAYOUT-SPAN(1)
+OpenBSD                        September 7, 2021            TBL-LAYOUT-SPAN(1)
index b82200d..9a476b4 100644 (file)
@@ -1,7 +1,8 @@
-/*     $OpenBSD: out.c,v 1.52 2021/08/10 12:36:42 schwarze Exp $ */
+/*     $OpenBSD: out.c,v 1.53 2021/09/07 14:50:56 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011, 2014, 2015, 2017, 2018, 2019, 2021
+ *               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
@@ -352,8 +353,6 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp_first,
                col = tbl->cols + icol;
                if (col->width > col->nwidth)
                        col->decimal += (col->width - col->nwidth) / 2;
-               else
-                       col->width = col->nwidth;
                if (col->flags & TBL_CELL_EQUAL) {
                        necol++;
                        if (ewidth < col->width)
@@ -561,5 +560,7 @@ tblcalc_number(struct rofftbl *tbl, struct roffcol *col,
 
        if (totsz > col->nwidth)
                col->nwidth = totsz;
+       if (col->nwidth > col->width)
+               col->width = col->nwidth;
        return totsz;
 }