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

Diff for /mandoc/out.c between version 1.81 and 1.82

version 1.81, 2021/09/07 14:56:35 version 1.82, 2021/09/07 17:07:58
Line 123  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
Line 123  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
         const struct tbl_dat    *dp;          const struct tbl_dat    *dp;
         struct roffcol          *col;          struct roffcol          *col;
         struct tbl_colgroup     *first_group, **gp, *g;          struct tbl_colgroup     *first_group, **gp, *g;
         size_t                  *colwidth;  
         size_t                   ewidth, min1, min2, wanted, width, xwidth;          size_t                   ewidth, min1, min2, wanted, width, xwidth;
         int                      done, icol, maxcol, necol, nxcol, quirkcol;          int                      done, icol, maxcol, necol, nxcol, quirkcol;
   
Line 257  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
Line 256  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
                         gp = &(*gp)->next;                          gp = &(*gp)->next;
         }          }
   
         colwidth = mandoc_reallocarray(NULL, maxcol + 1, sizeof(*colwidth));  
         while (first_group != NULL) {          while (first_group != NULL) {
   
                 /*                  /*
                  * Rebuild the array of the widths of all columns  
                  * participating in spans that require expansion.  
                  */  
   
                 for (icol = 0; icol <= maxcol; icol++)  
                         colwidth[icol] = SIZE_MAX;  
                 for (g = first_group; g != NULL; g = g->next)  
                         for (icol = g->startcol; icol <= g->endcol; icol++)  
                                 colwidth[icol] = tbl->cols[icol].width;  
   
                 /*  
                  * Find the smallest and second smallest column width                   * Find the smallest and second smallest column width
                  * among the columns which may need expamsion.                   * among the columns which may need expamsion.
                  */                   */
   
                 min1 = min2 = SIZE_MAX;                  min1 = min2 = SIZE_MAX;
                 for (icol = 0; icol <= maxcol; icol++) {                  for (icol = 0; icol <= maxcol; icol++) {
                         if (min1 > colwidth[icol]) {                          width = tbl->cols[icol].width;
                           if (min1 > width) {
                                 min2 = min1;                                  min2 = min1;
                                 min1 = colwidth[icol];                                  min1 = width;
                         } else if (min1 < colwidth[icol] &&                          } else if (min1 < width && min2 > width)
                             min2 > colwidth[icol])                                  min2 = width;
                                 min2 = colwidth[icol];  
                 }                  }
   
                 /*                  /*
Line 305  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
Line 292  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
                                 width = min2;                                  width = min2;
                         if (wanted > width)                          if (wanted > width)
                                 wanted = width;                                  wanted = width;
                         for (icol = g->startcol; icol <= g->endcol; icol++)  
                                 if (colwidth[icol] == min1 ||  
                                     (colwidth[icol] < min2 &&  
                                      colwidth[icol] > width))  
                                         colwidth[icol] = width;  
                 }                  }
   
                 /* Record the effect of the widening on the group list. */                  /* Record the effect of the widening. */
   
                 gp = &first_group;                  gp = &first_group;
                 while ((g = *gp) != NULL) {                  while ((g = *gp) != NULL) {
                         done = 0;                          done = 0;
                         for (icol = g->startcol; icol <= g->endcol; icol++) {                          for (icol = g->startcol; icol <= g->endcol; icol++) {
                                 if (colwidth[icol] != wanted ||                                  if (tbl->cols[icol].width != min1)
                                     tbl->cols[icol].width == wanted)  
                                         continue;                                          continue;
                                 if (g->wanted <= wanted - min1) {                                  if (g->wanted <= wanted - min1) {
                                           tbl->cols[icol].width += g->wanted;
                                         done = 1;                                          done = 1;
                                         break;                                          break;
                                 }                                  }
                                   tbl->cols[icol].width = wanted;
                                 g->wanted -= wanted - min1;                                  g->wanted -= wanted - min1;
                         }                          }
                         if (done) {                          if (done) {
Line 333  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
Line 316  tblcalc(struct rofftbl *tbl, const struct tbl_span *sp
                         } else                          } else
                                 gp = &(*gp)->next;                                  gp = &(*gp)->next;
                 }                  }
   
                 /* Record the effect of the widening on the columns. */  
   
                 for (icol = 0; icol <= maxcol; icol++)  
                         if (colwidth[icol] == wanted)  
                                 tbl->cols[icol].width = wanted;  
         }          }
         free(colwidth);  
   
         /*          /*
          * Align numbers with text.           * Align numbers with text.

Legend:
Removed from v.1.81  
changed lines
  Added in v.1.82

CVSweb