]> git.cameronkatri.com Git - mandoc.git/blobdiff - tbl_term.c
warning about unknown .Lb arguments; inspired by mdoclint(1)
[mandoc.git] / tbl_term.c
index a6354b51c4ea73e1397063839c5017d7ab3b6ce1..98afde3d8880074f206950c8fd0829325e9fe8c7 100644 (file)
@@ -1,7 +1,7 @@
-/*     $Id: tbl_term.c,v 1.38 2015/01/31 00:12:41 schwarze Exp $ */
+/*     $Id: tbl_term.c,v 1.45 2017/06/07 17:38:26 schwarze Exp $ */
 /*
  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2011, 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
+ * Copyright (c) 2011,2012,2014,2015,2017 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
@@ -47,14 +47,14 @@ static size_t
 term_tbl_strlen(const char *p, void *arg)
 {
 
-       return(term_strlen((const struct termp *)arg, p));
+       return term_strlen((const struct termp *)arg, p);
 }
 
 static size_t
 term_tbl_len(size_t sz, void *arg)
 {
 
-       return(term_len((const struct termp *)arg, sz));
+       return term_len((const struct termp *)arg, sz);
 }
 
 void
@@ -63,18 +63,12 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
        const struct tbl_cell   *cp;
        const struct tbl_dat    *dp;
        static size_t            offset;
-       size_t                   rmargin, maxrmargin, tsz;
+       size_t                   tsz;
        int                      ic, horiz, spans, vert;
 
-       rmargin = tp->rmargin;
-       maxrmargin = tp->maxrmargin;
-
-       tp->rmargin = tp->maxrmargin = TERM_MAXMARGIN;
-
        /* Inhibit printing of spaces: we do padding ourselves. */
 
-       tp->flags |= TERMP_NONOSPACE;
-       tp->flags |= TERMP_NOSPACE;
+       tp->flags |= TERMP_NOSPACE | TERMP_NONOSPACE | TERMP_BRNEVER;
 
        /*
         * The first time we're invoked for a given table block,
@@ -82,27 +76,25 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
         */
 
        if (tp->tbl.cols == NULL) {
-               term_flushln(tp);
-
                tp->tbl.len = term_tbl_len;
                tp->tbl.slen = term_tbl_strlen;
                tp->tbl.arg = tp;
 
-               tblcalc(&tp->tbl, sp, rmargin - tp->offset);
+               tblcalc(&tp->tbl, sp, tp->tcol->rmargin - tp->tcol->offset);
 
                /* Center the table as a whole. */
 
-               offset = tp->offset;
+               offset = tp->tcol->offset;
                if (sp->opts->opts & TBL_OPT_CENTRE) {
                        tsz = sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX)
                            ? 2 : !!sp->opts->lvert + !!sp->opts->rvert;
                        for (ic = 0; ic < sp->opts->cols; ic++)
                                tsz += tp->tbl.cols[ic].width + 3;
                        tsz -= 3;
-                       if (offset + tsz > rmargin)
+                       if (offset + tsz > tp->tcol->rmargin)
                                tsz -= 1;
-                       tp->offset = (offset + rmargin > tsz) ?
-                           (offset + rmargin - tsz) / 2 : 0;
+                       tp->tcol->offset = offset + tp->tcol->rmargin > tsz ?
+                           (offset + tp->tcol->rmargin - tsz) / 2 : 0;
                }
 
                /* Horizontal frame at the start of boxed tables. */
@@ -201,12 +193,9 @@ term_tbl(struct termp *tp, const struct tbl_span *sp)
                assert(tp->tbl.cols);
                free(tp->tbl.cols);
                tp->tbl.cols = NULL;
-               tp->offset = offset;
+               tp->tcol->offset = offset;
        }
-
-       tp->flags &= ~TERMP_NONOSPACE;
-       tp->rmargin = rmargin;
-       tp->maxrmargin = maxrmargin;
+       tp->flags &= ~(TERMP_NONOSPACE | TERMP_BRNEVER);
 }
 
 /*
@@ -268,12 +257,10 @@ tbl_data(struct termp *tp, const struct tbl_opts *opts,
                tbl_char(tp, ASCII_NBRSP, col->width);
                return;
        case TBL_DATA_HORIZ:
-               /* FALLTHROUGH */
        case TBL_DATA_NHORIZ:
                tbl_char(tp, '-', col->width);
                return;
        case TBL_DATA_NDHORIZ:
-               /* FALLTHROUGH */
        case TBL_DATA_DHORIZ:
                tbl_char(tp, '=', col->width);
                return;
@@ -289,11 +276,8 @@ tbl_data(struct termp *tp, const struct tbl_opts *opts,
                tbl_char(tp, '=', col->width);
                break;
        case TBL_CELL_LONG:
-               /* FALLTHROUGH */
        case TBL_CELL_CENTRE:
-               /* FALLTHROUGH */
        case TBL_CELL_LEFT:
-               /* FALLTHROUGH */
        case TBL_CELL_RIGHT:
                tbl_literal(tp, dp, col);
                break;
@@ -305,7 +289,6 @@ tbl_data(struct termp *tp, const struct tbl_opts *opts,
                break;
        default:
                abort();
-               /* NOTREACHED */
        }
 }