[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.41 and 1.45

version 1.41, 2015/09/26 00:54:04 version 1.45, 2017/06/07 17:38:26
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, 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   * 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 47  static size_t
Line 47  static size_t
 term_tbl_strlen(const char *p, void *arg)  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  static size_t
 term_tbl_len(size_t sz, void *arg)  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  void
Line 63  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 63  term_tbl(struct termp *tp, const struct tbl_span *sp)
         const struct tbl_cell   *cp;          const struct tbl_cell   *cp;
         const struct tbl_dat    *dp;          const struct tbl_dat    *dp;
         static size_t            offset;          static size_t            offset;
         size_t                   rmargin, maxrmargin, tsz;          size_t                   tsz;
         int                      ic, horiz, spans, vert;          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. */          /* Inhibit printing of spaces: we do padding ourselves. */
   
         tp->flags |= TERMP_NONOSPACE;          tp->flags |= TERMP_NOSPACE | TERMP_NONOSPACE | TERMP_BRNEVER;
         tp->flags |= TERMP_NOSPACE;  
   
         /*          /*
          * The first time we're invoked for a given table block,           * The first time we're invoked for a given table block,
Line 86  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 80  term_tbl(struct termp *tp, const struct tbl_span *sp)
                 tp->tbl.slen = term_tbl_strlen;                  tp->tbl.slen = term_tbl_strlen;
                 tp->tbl.arg = tp;                  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. */                  /* Center the table as a whole. */
   
                 offset = tp->offset;                  offset = tp->tcol->offset;
                 if (sp->opts->opts & TBL_OPT_CENTRE) {                  if (sp->opts->opts & TBL_OPT_CENTRE) {
                         tsz = sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX)                          tsz = sp->opts->opts & (TBL_OPT_BOX | TBL_OPT_DBOX)
                             ? 2 : !!sp->opts->lvert + !!sp->opts->rvert;                              ? 2 : !!sp->opts->lvert + !!sp->opts->rvert;
                         for (ic = 0; ic < sp->opts->cols; ic++)                          for (ic = 0; ic < sp->opts->cols; ic++)
                                 tsz += tp->tbl.cols[ic].width + 3;                                  tsz += tp->tbl.cols[ic].width + 3;
                         tsz -= 3;                          tsz -= 3;
                         if (offset + tsz > rmargin)                          if (offset + tsz > tp->tcol->rmargin)
                                 tsz -= 1;                                  tsz -= 1;
                         tp->offset = (offset + rmargin > tsz) ?                          tp->tcol->offset = offset + tp->tcol->rmargin > tsz ?
                             (offset + rmargin - tsz) / 2 : 0;                              (offset + tp->tcol->rmargin - tsz) / 2 : 0;
                 }                  }
   
                 /* Horizontal frame at the start of boxed tables. */                  /* Horizontal frame at the start of boxed tables. */
Line 199  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 193  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->offset = offset;                  tp->tcol->offset = offset;
         }          }
           tp->flags &= ~(TERMP_NONOSPACE | TERMP_BRNEVER);
         tp->flags &= ~TERMP_NONOSPACE;  
         tp->rmargin = rmargin;  
         tp->maxrmargin = maxrmargin;  
 }  }
   
 /*  /*
Line 266  tbl_data(struct termp *tp, const struct tbl_opts *opts
Line 257  tbl_data(struct termp *tp, const struct tbl_opts *opts
                 tbl_char(tp, ASCII_NBRSP, col->width);                  tbl_char(tp, ASCII_NBRSP, col->width);
                 return;                  return;
         case TBL_DATA_HORIZ:          case TBL_DATA_HORIZ:
                 /* FALLTHROUGH */  
         case TBL_DATA_NHORIZ:          case TBL_DATA_NHORIZ:
                 tbl_char(tp, '-', col->width);                  tbl_char(tp, '-', col->width);
                 return;                  return;
         case TBL_DATA_NDHORIZ:          case TBL_DATA_NDHORIZ:
                 /* FALLTHROUGH */  
         case TBL_DATA_DHORIZ:          case TBL_DATA_DHORIZ:
                 tbl_char(tp, '=', col->width);                  tbl_char(tp, '=', col->width);
                 return;                  return;
Line 287  tbl_data(struct termp *tp, const struct tbl_opts *opts
Line 276  tbl_data(struct termp *tp, const struct tbl_opts *opts
                 tbl_char(tp, '=', col->width);                  tbl_char(tp, '=', col->width);
                 break;                  break;
         case TBL_CELL_LONG:          case TBL_CELL_LONG:
                 /* FALLTHROUGH */  
         case TBL_CELL_CENTRE:          case TBL_CELL_CENTRE:
                 /* FALLTHROUGH */  
         case TBL_CELL_LEFT:          case TBL_CELL_LEFT:
                 /* FALLTHROUGH */  
         case TBL_CELL_RIGHT:          case TBL_CELL_RIGHT:
                 tbl_literal(tp, dp, col);                  tbl_literal(tp, dp, col);
                 break;                  break;

Legend:
Removed from v.1.41  
changed lines
  Added in v.1.45

CVSweb