[BACK]Return to tbl_term.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/tbl_term.c between version 1.64 and 1.67

version 1.64, 2018/11/29 21:40:53 version 1.67, 2019/01/31 16:06:22
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2009, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2011-2018 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2011-2019 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 26 
Line 26 
 #include <string.h>  #include <string.h>
   
 #include "mandoc.h"  #include "mandoc.h"
   #include "tbl.h"
 #include "out.h"  #include "out.h"
 #include "term.h"  #include "term.h"
   
Line 162  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 163  term_tbl(struct termp *tp, const struct tbl_span *sp)
         const struct tbl_cell   *cp, *cpn, *cpp, *cps;          const struct tbl_cell   *cp, *cpn, *cpp, *cps;
         const struct tbl_dat    *dp;          const struct tbl_dat    *dp;
         static size_t            offset;          static size_t            offset;
           size_t                   save_offset;
         size_t                   coloff, tsz;          size_t                   coloff, tsz;
         int                      hspans, ic, more;          int                      hspans, ic, more;
         int                      dvert, fc, horiz, line, uvert;          int                      dvert, fc, horiz, line, uvert;
Line 169  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 171  term_tbl(struct termp *tp, const struct tbl_span *sp)
         /* Inhibit printing of spaces: we do padding ourselves. */          /* Inhibit printing of spaces: we do padding ourselves. */
   
         tp->flags |= TERMP_NOSPACE | TERMP_NONOSPACE;          tp->flags |= TERMP_NOSPACE | TERMP_NONOSPACE;
           save_offset = tp->tcol->offset;
   
         /*          /*
          * The first time we're invoked for a given table block,           * The first time we're invoked for a given table block,
Line 210  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 213  term_tbl(struct termp *tp, const struct tbl_span *sp)
                                 tsz += tp->tbl.cols[sp->opts->cols - 1].width;                                  tsz += tp->tbl.cols[sp->opts->cols - 1].width;
                         if (offset + tsz > tp->tcol->rmargin)                          if (offset + tsz > tp->tcol->rmargin)
                                 tsz -= 1;                                  tsz -= 1;
                         tp->tcol->offset = offset + tp->tcol->rmargin > tsz ?                          offset = offset + tp->tcol->rmargin > tsz ?
                             (offset + tp->tcol->rmargin - tsz) / 2 : 0;                              (offset + tp->tcol->rmargin - tsz) / 2 : 0;
                           tp->tcol->offset = offset;
                 }                  }
   
                 /* Horizontal frame at the start of boxed tables. */                  /* Horizontal frame at the start of boxed tables. */
Line 226  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 230  term_tbl(struct termp *tp, const struct tbl_span *sp)
         /* Set up the columns. */          /* Set up the columns. */
   
         tp->flags |= TERMP_MULTICOL;          tp->flags |= TERMP_MULTICOL;
           tp->tcol->offset = offset;
         horiz = 0;          horiz = 0;
         switch (sp->pos) {          switch (sp->pos) {
         case TBL_SPAN_HORIZ:          case TBL_SPAN_HORIZ:
Line 566  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 571  term_tbl(struct termp *tp, const struct tbl_span *sp)
                 assert(tp->tbl.cols);                  assert(tp->tbl.cols);
                 free(tp->tbl.cols);                  free(tp->tbl.cols);
                 tp->tbl.cols = NULL;                  tp->tbl.cols = NULL;
                 tp->tcol->offset = offset;  
         } else if (horiz == 0 && sp->opts->opts & TBL_OPT_ALLBOX &&          } else if (horiz == 0 && sp->opts->opts & TBL_OPT_ALLBOX &&
             (sp->next == NULL || sp->next->pos == TBL_SPAN_DATA ||              (sp->next == NULL || sp->next->pos == TBL_SPAN_DATA ||
              sp->next->next != NULL))               sp->next->next != NULL))
                 tbl_hrule(tp, sp, sp->next, TBL_OPT_ALLBOX);                  tbl_hrule(tp, sp, sp->next, TBL_OPT_ALLBOX);
   
           tp->tcol->offset = save_offset;
         tp->flags &= ~TERMP_NONOSPACE;          tp->flags &= ~TERMP_NONOSPACE;
 }  }
   
Line 579  static void
Line 584  static void
 tbl_hrule(struct termp *tp, const struct tbl_span *spp,  tbl_hrule(struct termp *tp, const struct tbl_span *spp,
     const struct tbl_span *spn, int flags)      const struct tbl_span *spn, int flags)
 {  {
         const struct tbl_cell   *cpp;    /* Cell above this line. */          const struct tbl_cell   *cpp;    /* Layout cell above this line. */
         const struct tbl_cell   *cpn;    /* Cell below 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. */          const struct roffcol    *col;    /* Contains width and spacing. */
         int                      opts;   /* For the table as a whole. */          int                      opts;   /* For the table as a whole. */
         int                      bw;     /* Box line width. */          int                      bw;     /* Box line width. */
Line 590  tbl_hrule(struct termp *tp, const struct tbl_span *spp
Line 596  tbl_hrule(struct termp *tp, const struct tbl_span *spp
   
         cpp = spp == NULL ? NULL : spp->layout->first;          cpp = spp == NULL ? NULL : spp->layout->first;
         cpn = spn == NULL ? NULL : spn->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;          opts = spn == NULL ? spp->opts->opts : spn->opts->opts;
         bw = opts & TBL_OPT_DBOX ? (tp->enc == TERMENC_UTF8 ? 2 : 1) :          bw = opts & TBL_OPT_DBOX ? (tp->enc == TERMENC_UTF8 ? 2 : 1) :
             opts & (TBL_OPT_BOX | TBL_OPT_ALLBOX) ? 1 : 0;              opts & (TBL_OPT_BOX | TBL_OPT_ALLBOX) ? 1 : 0;
Line 615  tbl_hrule(struct termp *tp, const struct tbl_span *spp
Line 628  tbl_hrule(struct termp *tp, const struct tbl_span *spp
                 /* Print the horizontal line inside this column. */                  /* Print the horizontal line inside this column. */
   
                 lw = cpp == NULL || cpn == NULL ||                  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,                  tbl_direct_border(tp, BHORIZ * lw,
                     col->width + col->spacing / 2);                      col->width + col->spacing / 2);
   
Line 641  tbl_hrule(struct termp *tp, const struct tbl_span *spp
Line 656  tbl_hrule(struct termp *tp, const struct tbl_span *spp
                                         dw = 1;                                          dw = 1;
                         }                          }
                         cpn = cpn->next;                          cpn = cpn->next;
                           while (dpn != NULL && dpn->layout != cpn)
                                   dpn = dpn->next;
                 }                  }
                 if (cpp == NULL && cpn == NULL)                  if (cpp == NULL && cpn == NULL)
                         break;                          break;
Line 655  tbl_hrule(struct termp *tp, const struct tbl_span *spp
Line 672  tbl_hrule(struct termp *tp, const struct tbl_span *spp
                 /* The horizontal line inside the next column. */                  /* The horizontal line inside the next column. */
   
                 rw = cpp == NULL || cpn == NULL ||                  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. */
   

Legend:
Removed from v.1.64  
changed lines
  Added in v.1.67

CVSweb