From e968d739d2abeed37e3afbdf96f15c5e25c6f98b Mon Sep 17 00:00:00 2001 From: schwarze Date: Tue, 7 Sep 2021 14:50:56 +0000 Subject: [PATCH] Correctly calculate required column widths for tables containing 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 | 13 +++++++++++-- regress/usr.bin/mandoc/tbl/layout/span.out_ascii | 10 +++++++++- usr.bin/mandoc/out.c | 9 +++++---- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/regress/usr.bin/mandoc/tbl/layout/span.in b/regress/usr.bin/mandoc/tbl/layout/span.in index 84a71f8a115..d02d2361714 100644 --- a/regress/usr.bin/mandoc/tbl/layout/span.in +++ b/regress/usr.bin/mandoc/tbl/layout/span.in @@ -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 diff --git a/regress/usr.bin/mandoc/tbl/layout/span.out_ascii b/regress/usr.bin/mandoc/tbl/layout/span.out_ascii index 2372e6028d0..adc57cf2e8a 100644 --- a/regress/usr.bin/mandoc/tbl/layout/span.out_ascii +++ b/regress/usr.bin/mandoc/tbl/layout/span.out_ascii @@ -34,7 +34,15 @@ DDEESSCCRRIIPPTTIIOONN +--+---+---+---+---+ |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) diff --git a/usr.bin/mandoc/out.c b/usr.bin/mandoc/out.c index b82200d1e6f..9a476b4d9f4 100644 --- a/usr.bin/mandoc/out.c +++ b/usr.bin/mandoc/out.c @@ -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 - * Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze + * Copyright (c) 2011, 2014, 2015, 2017, 2018, 2019, 2021 + * Ingo Schwarze * * 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; } -- 2.20.1