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

version 1.35, 2015/01/30 02:09:04 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;
         static size_t            offset;          static size_t            offset;
         size_t                   rmargin, maxrmargin, tsz;          size_t                   rmargin, maxrmargin, tsz;
         int                      horiz, spans, vert;          int                      ic, horiz, spans, vert;
   
         rmargin = tp->rmargin;          rmargin = tp->rmargin;
         maxrmargin = tp->maxrmargin;          maxrmargin = tp->maxrmargin;
Line 97  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 96  term_tbl(struct termp *tp, const struct tbl_span *sp)
                 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 (hp = sp->head; hp != NULL; hp = hp->next)                          for (ic = 0; ic < sp->opts->cols; ic++)
                                 tsz += tp->tbl.cols[hp->ident].width + 3;                                  tsz += tp->tbl.cols[ic].width + 3;
                         tsz -= 3;                          tsz -= 3;
                         if (offset + tsz > rmargin)                          if (offset + tsz > rmargin)
                                 tsz -= 1;                                  tsz -= 1;
Line 127  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 150  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 166  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 236  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 332  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;

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

CVSweb