[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.33 and 1.36

version 1.33, 2015/01/27 05:21:45 version 1.36, 2015/01/30 04:11:50
Line 60  term_tbl_len(size_t sz, void *arg)
Line 60  term_tbl_len(size_t sz, void *arg)
 void  void
 term_tbl(struct termp *tp, const struct tbl_span *sp)  term_tbl(struct termp *tp, const struct tbl_span *sp)
 {  {
         const struct tbl_head   *hp;  
         const struct tbl_cell   *cp;          const struct tbl_cell   *cp;
         const struct tbl_dat    *dp;          const struct tbl_dat    *dp;
         int                      horiz, spans, vert;          static size_t            offset;
         size_t                   rmargin, maxrmargin;          size_t                   rmargin, maxrmargin, tsz;
           int                      ic, horiz, spans, vert;
   
         rmargin = tp->rmargin;          rmargin = tp->rmargin;
         maxrmargin = tp->maxrmargin;          maxrmargin = tp->maxrmargin;
Line 90  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 90  term_tbl(struct termp *tp, const struct tbl_span *sp)
   
                 tblcalc(&tp->tbl, sp, rmargin - tp->offset);                  tblcalc(&tp->tbl, sp, rmargin - tp->offset);
   
                   /* Center the table as a whole. */
   
                   offset = tp->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)
                                   tsz -= 1;
                           tp->offset = (offset + rmargin > tsz) ?
                               (offset + rmargin - tsz) / 2 : 0;
                   }
   
                 /* Horizontal frame at the start of boxed tables. */                  /* Horizontal frame at the start of boxed tables. */
   
                 if (sp->opts->opts & TBL_OPT_DBOX)                  if (sp->opts->opts & TBL_OPT_DBOX)
Line 111  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 126  term_tbl(struct termp *tp, const struct tbl_span *sp)
   
         /*          /*
          * Now print the actual data itself depending on the span type.           * Now print the actual data itself depending on the span type.
          * Spanner spans get a horizontal rule; data spanners have their           * Match data cells to column numbers.
          * data printed by matching data to header.  
          */           */
   
         if (sp->pos == TBL_SPAN_DATA) {          if (sp->pos == TBL_SPAN_DATA) {
                 /* Iterate over template headers. */  
                 cp = sp->layout->first;                  cp = sp->layout->first;
                 dp = sp->first;                  dp = sp->first;
                 spans = 0;                  spans = 0;
                 for (hp = sp->head; hp != NULL; hp = hp->next) {                  for (ic = 0; ic < sp->opts->cols; ic++) {
   
                         /*                          /*
                          * Remeber whether we need a vertical bar                           * Remeber whether we need a vertical bar
Line 134  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 147  term_tbl(struct termp *tp, const struct tbl_span *sp)
                          */                           */
   
                         if (spans == 0) {                          if (spans == 0) {
                                 tbl_data(tp, sp->opts, dp,                                  tbl_data(tp, sp->opts, dp, tp->tbl.cols + ic);
                                     tp->tbl.cols + hp->ident);  
                                 if (dp != NULL) {                                  if (dp != NULL) {
                                         spans = dp->spans;                                          spans = dp->spans;
                                         dp = dp->next;                                          dp = dp->next;
Line 150  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 162  term_tbl(struct termp *tp, const struct tbl_span *sp)
                          * of spans and after the last cell.                           * of spans and after the last cell.
                          */                           */
   
                         if (hp->next == NULL || spans)                          if (ic + 1 == sp->opts->cols || spans)
                                 continue;                                  continue;
   
                         tbl_char(tp, ASCII_NBRSP, 1);                          tbl_char(tp, ASCII_NBRSP, 1);
                         if (vert > 0)                          if (vert > 0)
                                 tbl_char(tp, '|', vert);                                  tbl_char(tp, '|', vert);
                         if (vert < 2 && hp->next != NULL)                          if (vert < 2)
                                 tbl_char(tp, ASCII_NBRSP, 2 - vert);                                  tbl_char(tp, ASCII_NBRSP, 2 - vert);
                 }                  }
         } else if (horiz)          } else if (horiz)
Line 189  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 201  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->flags &= ~TERMP_NONOSPACE;          tp->flags &= ~TERMP_NONOSPACE;
         tp->rmargin = rmargin;          tp->rmargin = rmargin;
         tp->maxrmargin = maxrmargin;          tp->maxrmargin = maxrmargin;
   
 }  }
   
 /*  /*
Line 220  tbl_hrule(struct termp *tp, const struct tbl_span *sp,
Line 232  tbl_hrule(struct termp *tp, const struct tbl_span *sp,
         if (c2 == c1)          if (c2 == c1)
                 c2 = NULL;                  c2 = NULL;
         for (;;) {          for (;;) {
                 tbl_char(tp, line, tp->tbl.cols[c1->head->ident].width + 1);                  tbl_char(tp, line, tp->tbl.cols[c1->col].width + 1);
                 vert = c1->vert;                  vert = c1->vert;
                 if ((c1 = c1->next) == NULL)                  if ((c1 = c1->next) == NULL)
                          break;                           break;
Line 246  tbl_data(struct termp *tp, const struct tbl_opts *opts
Line 258  tbl_data(struct termp *tp, const struct tbl_opts *opts
         const struct roffcol *col)          const struct roffcol *col)
 {  {
   
         if (NULL == dp) {          if (dp == NULL) {
                 tbl_char(tp, ASCII_NBRSP, col->width);                  tbl_char(tp, ASCII_NBRSP, col->width);
                 return;                  return;
         }          }
         assert(dp->layout);  
   
         switch (dp->pos) {          switch (dp->pos) {
         case TBL_DATA_NONE:          case TBL_DATA_NONE:
Line 317  static void
Line 328  static void
 tbl_literal(struct termp *tp, const struct tbl_dat *dp,  tbl_literal(struct termp *tp, const struct tbl_dat *dp,
                 const struct roffcol *col)                  const struct roffcol *col)
 {  {
         struct tbl_head         *hp;          size_t           len, padl, padr, width;
         size_t                   width, len, padl, padr;          int              ic, spans;
         int                      spans;  
   
         assert(dp->string);          assert(dp->string);
         len = term_strlen(tp, dp->string);          len = term_strlen(tp, dp->string);
   
         hp = dp->layout->head->next;  
         width = col->width;          width = col->width;
         for (spans = dp->spans; spans--; hp = hp->next)          ic = dp->layout->col;
                 width += tp->tbl.cols[hp->ident].width + 3;          spans = dp->spans;
           while (spans--)
                   width += tp->tbl.cols[++ic].width + 3;
   
         padr = width > len ? width - len : 0;          padr = width > len ? width - len : 0;
         padl = 0;          padl = 0;
Line 380  tbl_number(struct termp *tp, const struct tbl_opts *op
Line 390  tbl_number(struct termp *tp, const struct tbl_opts *op
   
         psz = term_strlen(tp, buf);          psz = term_strlen(tp, buf);
   
         if (NULL != (cp = strrchr(dp->string, opts->decimal))) {          if ((cp = strrchr(dp->string, opts->decimal)) != NULL) {
                 buf[1] = '\0';  
                 for (ssz = 0, i = 0; cp != &dp->string[i]; i++) {                  for (ssz = 0, i = 0; cp != &dp->string[i]; i++) {
                         buf[0] = dp->string[i];                          buf[0] = dp->string[i];
                         ssz += term_strlen(tp, buf);                          ssz += term_strlen(tp, buf);

Legend:
Removed from v.1.33  
changed lines
  Added in v.1.36

CVSweb