]> git.cameronkatri.com Git - mandoc.git/commitdiff
Do not draw horizontal lines through vertical spans
authorIngo Schwarze <schwarze@openbsd.org>
Thu, 29 Nov 2018 23:08:13 +0000 (23:08 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Thu, 29 Nov 2018 23:08:13 +0000 (23:08 +0000)
which are requested in the data section rather than in the layout.
Mini-feature found in misc/pfm(1).

tbl_term.c

index 9957ed8bfb1a74f9e7c8391082ed5c37c57a9844..3bf48933ff2b4ffbdcf4a41354e54ad6d4f440b8 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: tbl_term.c,v 1.64 2018/11/29 21:40:53 schwarze Exp $ */
+/*     $Id: tbl_term.c,v 1.65 2018/11/29 23:08:13 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2018 Ingo Schwarze <schwarze@openbsd.org>
 /*
  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2018 Ingo Schwarze <schwarze@openbsd.org>
@@ -579,8 +579,9 @@ static void
 tbl_hrule(struct termp *tp, const struct tbl_span *spp,
     const struct tbl_span *spn, int flags)
 {
 tbl_hrule(struct termp *tp, const struct tbl_span *spp,
     const struct tbl_span *spn, int flags)
 {
-       const struct tbl_cell   *cpp;    /* Cell above this line. */
-       const struct tbl_cell   *cpn;    /* Cell below this line. */
+       const struct tbl_cell   *cpp;    /* Layout cell above this line. */
+       const struct tbl_cell   *cpn;    /* Layout cell below this line. */
+       const struct tbl_dat    *dpn;    /* Data cell below this line. */
        const struct roffcol    *col;    /* Contains width and spacing. */
        int                      opts;   /* For the table as a whole. */
        int                      bw;     /* Box line width. */
        const struct roffcol    *col;    /* Contains width and spacing. */
        int                      opts;   /* For the table as a whole. */
        int                      bw;     /* Box line width. */
@@ -590,6 +591,13 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
 
        cpp = spp == NULL ? NULL : spp->layout->first;
        cpn = spn == NULL ? NULL : spn->layout->first;
 
        cpp = spp == NULL ? NULL : spp->layout->first;
        cpn = spn == NULL ? NULL : spn->layout->first;
+       dpn = NULL;
+       if (spn != NULL) {
+               if (spn->pos == TBL_SPAN_DATA)
+                       dpn = spn->first;
+               else if (spn->next != NULL)
+                       dpn = spn->next->first;
+       }
        opts = spn == NULL ? spp->opts->opts : spn->opts->opts;
        bw = opts & TBL_OPT_DBOX ? (tp->enc == TERMENC_UTF8 ? 2 : 1) :
            opts & (TBL_OPT_BOX | TBL_OPT_ALLBOX) ? 1 : 0;
        opts = spn == NULL ? spp->opts->opts : spn->opts->opts;
        bw = opts & TBL_OPT_DBOX ? (tp->enc == TERMENC_UTF8 ? 2 : 1) :
            opts & (TBL_OPT_BOX | TBL_OPT_ALLBOX) ? 1 : 0;
@@ -615,7 +623,9 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
                /* Print the horizontal line inside this column. */
 
                lw = cpp == NULL || cpn == NULL ||
                /* Print the horizontal line inside this column. */
 
                lw = cpp == NULL || cpn == NULL ||
-                   cpn->pos != TBL_CELL_DOWN ? hw : 0;
+                   (cpn->pos != TBL_CELL_DOWN &&
+                    (dpn == NULL || strcmp(dpn->string, "\\^") != 0))
+                   ? hw : 0;
                tbl_direct_border(tp, BHORIZ * lw,
                    col->width + col->spacing / 2);
 
                tbl_direct_border(tp, BHORIZ * lw,
                    col->width + col->spacing / 2);
 
@@ -641,6 +651,8 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
                                        dw = 1;
                        }
                        cpn = cpn->next;
                                        dw = 1;
                        }
                        cpn = cpn->next;
+                       while (dpn != NULL && dpn->layout != cpn)
+                               dpn = dpn->next;
                }
                if (cpp == NULL && cpn == NULL)
                        break;
                }
                if (cpp == NULL && cpn == NULL)
                        break;
@@ -655,7 +667,9 @@ tbl_hrule(struct termp *tp, const struct tbl_span *spp,
                /* The horizontal line inside the next column. */
 
                rw = cpp == NULL || cpn == NULL ||
                /* The horizontal line inside the next column. */
 
                rw = cpp == NULL || cpn == NULL ||
-                   cpn->pos != TBL_CELL_DOWN ? hw : 0;
+                   (cpn->pos != TBL_CELL_DOWN &&
+                    (dpn == NULL || strcmp(dpn->string, "\\^") != 0))
+                   ? hw : 0;
 
                /* The line crossing at the end of this column. */
 
 
                /* The line crossing at the end of this column. */