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

Diff for /mandoc/term.c between version 1.199 and 1.200

version 1.199, 2011/09/18 21:18:19 version 1.200, 2011/09/19 22:36:16
Line 79  term_end(struct termp *p)
Line 79  term_end(struct termp *p)
  *   *
  * The following flags may be specified:   * The following flags may be specified:
  *   *
  *  - TERMP_NOLPAD: when beginning to write the line, don't left-pad the  
  *    offset value.  This is useful when doing columnar lists where the  
  *    prior column has right-padded.  
  *  
  *  - TERMP_NOBREAK: this is the most important and is used when making   *  - TERMP_NOBREAK: this is the most important and is used when making
  *    columns.  In short: don't print a newline and instead pad to the   *    columns.  In short: don't print a newline and instead expect the
  *    right margin.  Used in conjunction with TERMP_NOLPAD.   *    next call to do the padding up to the start of the next column.
  *   *
  *  - TERMP_TWOSPACE: when padding, make sure there are at least two   *  - TERMP_TWOSPACE: make sure there is room for at least two space
  *    space characters of padding.  Otherwise, rather break the line.   *    characters of padding.  Otherwise, rather break the line.
  *   *
  *  - TERMP_DANGLE: don't newline when TERMP_NOBREAK is specified and   *  - TERMP_DANGLE: don't newline when TERMP_NOBREAK is specified and
  *    the line is overrun, and don't pad-right if it's underrun.   *    the line is overrun, and don't pad-right if it's underrun.
  *   *
  *  - TERMP_HANG: like TERMP_DANGLE, but doesn't newline when   *  - TERMP_HANG: like TERMP_DANGLE, but doesn't newline when
  *    overruning, instead save the position and continue at that point   *    overrunning, instead save the position and continue at that point
  *    when the next invocation.   *    when the next invocation.
  *   *
  *  In-line line breaking:   *  In-line line breaking:
Line 134  term_flushln(struct termp *p)
Line 130  term_flushln(struct termp *p)
         bp = TERMP_NOBREAK & p->flags ? mmax : maxvis;          bp = TERMP_NOBREAK & p->flags ? mmax : maxvis;
   
         /*          /*
          * Indent the first line of a paragraph.           * Calculate the required amount of padding.
          */           */
         vbl = p->flags & TERMP_NOLPAD ? (size_t)0 : p->offset;          vbl = p->offset + p->overstep > p->viscol ?
                 p->offset + p->overstep - p->viscol : 0;
   
         vis = vend = 0;          vis = vend = 0;
         i = 0;          i = 0;
Line 236  term_flushln(struct termp *p)
Line 233  term_flushln(struct termp *p)
                         if (ASCII_HYPH == p->buf[i]) {                          if (ASCII_HYPH == p->buf[i]) {
                                 (*p->letter)(p, '-');                                  (*p->letter)(p, '-');
                                 p->viscol += (*p->width)(p, '-');                                  p->viscol += (*p->width)(p, '-');
                         } else {                                  continue;
                                 (*p->letter)(p, p->buf[i]);  
                                 p->viscol += (*p->width)(p, p->buf[i]);  
                         }                          }
   
                           (*p->letter)(p, p->buf[i]);
                           if (8 == p->buf[i])
                                   p->viscol -= (*p->width)(p, p->buf[i-1]);
                           else
                                   p->viscol += (*p->width)(p, p->buf[i]);
                 }                  }
                 vis = vend;                  vis = vend;
         }          }
Line 248  term_flushln(struct termp *p)
Line 249  term_flushln(struct termp *p)
          * If there was trailing white space, it was not printed;           * If there was trailing white space, it was not printed;
          * so reset the cursor position accordingly.           * so reset the cursor position accordingly.
          */           */
         vis -= vbl;          if (vis)
                   vis -= vbl;
   
         p->col = 0;          p->col = 0;
         p->overstep = 0;          p->overstep = 0;
Line 273  term_flushln(struct termp *p)
Line 275  term_flushln(struct termp *p)
                  * move it one step LEFT and flag the rest of the line                   * move it one step LEFT and flag the rest of the line
                  * to be longer.                   * to be longer.
                  */                   */
                 if (p->overstep >= -1) {                  if (p->overstep < -1)
                         assert((int)maxvis + p->overstep >= 0);  
                         maxvis += (size_t)p->overstep;  
                 } else  
                         p->overstep = 0;                          p->overstep = 0;
                   return;
   
         } else if (TERMP_DANGLE & p->flags)          } else if (TERMP_DANGLE & p->flags)
                 return;                  return;
   
         /* Right-pad. */          /* If the column was overrun, break the line. */
         if (maxvis > vis +          if (maxvis <= vis +
             ((TERMP_TWOSPACE & p->flags) ? (*p->width)(p, ' ') : 0)) {              ((TERMP_TWOSPACE & p->flags) ? (*p->width)(p, ' ') : 0)) {
                 p->viscol += maxvis - vis;  
                 (*p->advance)(p, maxvis - vis);  
                 vis += (maxvis - vis);  
         } else {        /* ...or newline break. */  
                 (*p->endline)(p);                  (*p->endline)(p);
                 p->viscol = p->rmargin;                  p->viscol = 0;
                 (*p->advance)(p, p->rmargin);  
         }          }
 }  }
   
Line 306  term_newln(struct termp *p)
Line 301  term_newln(struct termp *p)
 {  {
   
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;
         if (0 == p->col && 0 == p->viscol) {          if (p->col || p->viscol)
                 p->flags &= ~TERMP_NOLPAD;                  term_flushln(p);
                 return;  
         }  
         term_flushln(p);  
         p->flags &= ~TERMP_NOLPAD;  
 }  }
   
   

Legend:
Removed from v.1.199  
changed lines
  Added in v.1.200

CVSweb