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

Diff for /mandoc/tbl_data.c between version 1.43 and 1.44

version 1.43, 2017/06/16 20:01:06 version 1.44, 2017/07/04 21:08:29
Line 196  tbl_data(struct tbl_node *tbl, int ln, const char *p, 
Line 196  tbl_data(struct tbl_node *tbl, int ln, const char *p, 
 {  {
         struct tbl_row  *rp;          struct tbl_row  *rp;
         struct tbl_cell *cp;          struct tbl_cell *cp;
         struct tbl_span *sp, *spi;          struct tbl_span *sp;
         struct tbl_dat  *dp;  
         int              have_data, spans;  
   
         rp = (sp = tbl->last_span) == NULL ? tbl->first_row :          rp = (sp = tbl->last_span) == NULL ? tbl->first_row :
             sp->pos == TBL_SPAN_DATA && sp->layout->next != NULL ?              sp->pos == TBL_SPAN_DATA && sp->layout->next != NULL ?
Line 206  tbl_data(struct tbl_node *tbl, int ln, const char *p, 
Line 204  tbl_data(struct tbl_node *tbl, int ln, const char *p, 
   
         assert(rp != NULL);          assert(rp != NULL);
   
         sp = newspan(tbl, ln, rp);  
   
         if ( ! strcmp(p, "_")) {          if ( ! strcmp(p, "_")) {
                   sp = newspan(tbl, ln, rp);
                 sp->pos = TBL_SPAN_HORIZ;                  sp->pos = TBL_SPAN_HORIZ;
                 return;                  return;
         } else if ( ! strcmp(p, "=")) {          } else if ( ! strcmp(p, "=")) {
                   sp = newspan(tbl, ln, rp);
                 sp->pos = TBL_SPAN_DHORIZ;                  sp->pos = TBL_SPAN_DHORIZ;
                 return;                  return;
         }          }
         sp->pos = TBL_SPAN_DATA;  
   
         while (p[pos] != '\0')  
                 getdata(tbl, sp, ln, p, &pos);  
   
         /*          /*
          * If this span contains some data,           * If the layout row contains nothing but horizontal lines,
          * make sure at least part of it gets printed.           * allocate an empty span for it and assign the current span
            * to the next layout row accepting data.
          */           */
   
         have_data = 0;          while (rp->next != NULL) {
         cp = rp->first;                  if (rp->last->col + 1 < tbl->opts.cols)
         for (dp = sp->first; dp != NULL; dp = dp->next) {                          break;
                 if (dp->pos == TBL_DATA_DATA && *dp->string != '\0') {                  for (cp = rp->first; cp != NULL; cp = cp->next)
                         if (cp == NULL ||                          if (cp->pos != TBL_CELL_HORIZ &&
                             (cp->pos != TBL_CELL_HORIZ &&                              cp->pos != TBL_CELL_DHORIZ)
                              cp->pos != TBL_CELL_DHORIZ))                                  break;
                                 return;                  if (cp != NULL)
                         have_data = 1;                          break;
                 }                  sp = newspan(tbl, ln, rp);
                 spans = dp->spans;                  sp->pos = TBL_SPAN_DATA;
                 while (spans-- >= 0) {                  rp = rp->next;
                         if (cp != NULL)  
                                 cp = cp->next;  
                 }  
         }          }
         if (have_data == 0 || rp->next == NULL)  
                 return;  
   
         /*          /* Process a real data row. */
          * There is some data, but it would all get lost  
          * due to horizontal lines in the layout.  
          * Insert an empty span to consume the layout row.  
          */  
   
         tbl->last_span = sp->prev;          sp = newspan(tbl, ln, rp);
         spi = newspan(tbl, ln, rp);          sp->pos = TBL_SPAN_DATA;
         spi->pos = TBL_SPAN_DATA;          while (p[pos] != '\0')
         spi->next = sp;                  getdata(tbl, sp, ln, p, &pos);
         tbl->last_span = sp;  
         sp->prev = spi;  
         sp->layout = rp->next;  
         cp = sp->layout->first;  
         for (dp = sp->first; dp != NULL; dp = dp->next) {  
                 dp->layout = cp;  
                 dp->spans = 0;  
                 if (cp != NULL)  
                         cp = cp->next;  
                 while (cp != NULL && cp->pos == TBL_CELL_SPAN) {  
                         dp->spans++;  
                         cp = cp->next;  
                 }  
         }  
 }  }

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.44

CVSweb