[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.3 and 1.4

version 1.3, 2011/01/03 14:45:59 version 1.4, 2011/01/03 14:57:04
Line 72  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 72  term_tbl(struct termp *tp, const struct tbl_span *sp)
         const struct tbl_head *hp;          const struct tbl_head *hp;
         const struct tbl_dat *dp;          const struct tbl_dat *dp;
   
           /* Inhibit printing of spaces: we do padding ourselves. */
   
           tp->flags |= TERMP_NONOSPACE;
           tp->flags |= TERMP_NOSPACE;
   
           /*
            * The first time we're invoked for a given table block, create
            * the termp_tbl structure.  This contains the column
            * configuration for the entire table, e.g., table-wide column
            * width, decimal point, etc.
            */
   
         if (TBL_SPAN_FIRST & sp->flags) {          if (TBL_SPAN_FIRST & sp->flags) {
                 assert(NULL == tp->tbl);                  assert(NULL == tp->tbl);
                 tp->tbl = calloc                  tp->tbl = calloc
Line 81  term_tbl(struct termp *tp, const struct tbl_span *sp)
Line 93  term_tbl(struct termp *tp, const struct tbl_span *sp)
                         exit(EXIT_FAILURE);                          exit(EXIT_FAILURE);
                 }                  }
                 tbl_calc(tp, sp);                  tbl_calc(tp, sp);
   
                   /* Flush out any preceding data. */
                 term_flushln(tp);                  term_flushln(tp);
         }          }
   
           /* Horizontal frame at the start of boxed tables. */
   
         if (TBL_SPAN_FIRST & sp->flags)          if (TBL_SPAN_FIRST & sp->flags)
                 tbl_hframe(tp, sp);                  tbl_hframe(tp, sp);
   
         tp->flags |= TERMP_NONOSPACE;          /* Vertical frame at the start of each row. */
         tp->flags |= TERMP_NOSPACE;  
   
         tbl_vframe(tp, sp->tbl);          tbl_vframe(tp, sp->tbl);
   
           /*
            * Now print the actual data itself depending on the span type.
            * Spanner spans get a horizontal rule; data spanners have their
            * data printed by matching data to header.
            */
   
         switch (sp->pos) {          switch (sp->pos) {
         case (TBL_SPAN_HORIZ):          case (TBL_SPAN_HORIZ):
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (TBL_SPAN_DHORIZ):          case (TBL_SPAN_DHORIZ):
                 tbl_hrule(tp, sp);                  tbl_hrule(tp, sp);
                 tbl_vframe(tp, sp->tbl);  
                 term_newln(tp);  
                 goto end;  
         default:  
                 break;                  break;
         }          case (TBL_SPAN_DATA):
                   /* Iterate over template headers. */
                   dp = sp->first;
                   for (hp = sp->head; hp; hp = hp->next) {
                           switch (hp->pos) {
                           case (TBL_HEAD_VERT):
                                   /* FALLTHROUGH */
                           case (TBL_HEAD_DVERT):
                                   tbl_spanner(tp, hp);
                                   continue;
                           case (TBL_HEAD_DATA):
                                   break;
                           }
                           tbl_data(tp, sp->tbl, dp,
                                   &tp->tbl[hp->ident]);
   
         dp = sp->first;                          /* Go to the next data cell. */
         for (hp = sp->head; hp; hp = hp->next) {  
                 switch (hp->pos) {  
                 case (TBL_HEAD_VERT):  
                         /* FALLTHROUGH */  
                 case (TBL_HEAD_DVERT):  
                         tbl_spanner(tp, hp);  
                         break;  
                 case (TBL_HEAD_DATA):  
                         tbl_data(tp, sp->tbl, dp, &tp->tbl[hp->ident]);  
                         if (dp)                          if (dp)
                                 dp = dp->next;                                  dp = dp->next;
                         break;  
                 default:  
                         abort();  
                         /* NOTREACHED */  
                 }                  }
                   break;
         }          }
   
         tbl_vframe(tp, sp->tbl);          tbl_vframe(tp, sp->tbl);
         term_flushln(tp);          term_flushln(tp);
   
 end:          /*
            * If we're the last row, clean up after ourselves: clear the
            * existing table configuration and set it to NULL.
            */
   
         if (TBL_SPAN_LAST & sp->flags) {          if (TBL_SPAN_LAST & sp->flags) {
                 tbl_hframe(tp, sp);                  tbl_hframe(tp, sp);
                 assert(tp->tbl);                  assert(tp->tbl);

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

CVSweb