]> git.cameronkatri.com Git - mandoc.git/blobdiff - out.c
The wcwidth(3) of Plane 15 and Plane 16 Private Use Characters
[mandoc.git] / out.c
diff --git a/out.c b/out.c
index 9ab256270586a4a1d91c08896fd7851a3ad1cc51..4529d5b1d358125eda0acd26d22c9ee09a9c568a 100644 (file)
--- a/out.c
+++ b/out.c
@@ -1,4 +1,4 @@
-/*     $Id: out.c,v 1.76 2018/12/12 21:54:35 schwarze Exp $ */
+/*     $Id: out.c,v 1.79 2019/12/31 22:58:41 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011,2014,2015,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -27,7 +27,6 @@
 #include <time.h>
 
 #include "mandoc_aux.h"
-#include "mandoc.h"
 #include "tbl.h"
 #include "out.h"
 
@@ -150,7 +149,7 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp_first,
                gp = &first_group;
                for (dp = sp->first; dp != NULL; dp = dp->next) {
                        icol = dp->layout->col;
-                       while (icol > maxcol)
+                       while (maxcol < icol + dp->hspans)
                                tbl->cols[++maxcol].spacing = SIZE_MAX;
                        col = tbl->cols + icol;
                        col->flags |= dp->layout->flags;
@@ -210,13 +209,25 @@ tblcalc(struct rofftbl *tbl, const struct tbl_span *sp_first,
        }
 
        /*
-        * Column spacings are needed for span width calculations,
-        * so set the default values now.
+        * The minimum width of columns explicitly specified
+        * in the layout is 1n.
         */
 
-       for (icol = 0; icol <= maxcol; icol++)
-               if (tbl->cols[icol].spacing == SIZE_MAX || icol == maxcol)
-                       tbl->cols[icol].spacing = 3;
+       if (maxcol < sp_first->opts->cols - 1)
+               maxcol = sp_first->opts->cols - 1;
+       for (icol = 0; icol <= maxcol; icol++) {
+               col = tbl->cols + icol;
+               if (col->width < 1)
+                       col->width = 1;
+
+               /*
+                * Column spacings are needed for span width
+                * calculations, so set the default values now.
+                */
+
+               if (col->spacing == SIZE_MAX || icol == maxcol)
+                       col->spacing = 3;
+       }
 
        /*
         * Replace the minimum widths with the missing widths,