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

Diff for /mandoc/term.c between version 1.263 and 1.264

version 1.263, 2017/06/04 18:50:35 version 1.264, 2017/06/04 22:44:15
Line 36  static void   adjbuf(struct termp *p, size_t);
Line 36  static void   adjbuf(struct termp *p, size_t);
 static  void             bufferc(struct termp *, char);  static  void             bufferc(struct termp *, char);
 static  void             encode(struct termp *, const char *, size_t);  static  void             encode(struct termp *, const char *, size_t);
 static  void             encode1(struct termp *, int);  static  void             encode1(struct termp *, int);
   static  void             endline(struct termp *);
   
   
 void  void
Line 169  term_flushln(struct termp *p)
Line 170  term_flushln(struct termp *p)
                  * Find out whether we would exceed the right margin.                   * Find out whether we would exceed the right margin.
                  * If so, break to the next line.                   * If so, break to the next line.
                  */                   */
                 if (vend > bp && 0 == jhy && vis > 0) {                  if (vend > bp && 0 == jhy && vis > 0 &&
                       (p->flags & TERMP_BRNEVER) == 0) {
                         vend -= vis;                          vend -= vis;
                         (*p->endline)(p);                          endline(p);
                         p->viscol = 0;  
   
                         /* Use pending tabs on the new line. */                          /* Use pending tabs on the new line. */
   
Line 243  term_flushln(struct termp *p)
Line 244  term_flushln(struct termp *p)
                 vis = 0;                  vis = 0;
   
         p->col = 0;          p->col = 0;
           p->minbl = p->trailspace;
         p->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE | TERMP_NOPAD);          p->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE | TERMP_NOPAD);
   
         if ( ! (TERMP_NOBREAK & p->flags)) {  
                 p->viscol = 0;  
                 p->minbl = 0;  
                 (*p->endline)(p);  
                 return;  
         }  
   
         if (TERMP_HANG & p->flags) {  
                 p->minbl = p->trailspace;  
                 return;  
         }  
   
         /* Trailing whitespace is significant in some columns. */          /* Trailing whitespace is significant in some columns. */
         if (vis && vbl && (TERMP_BRTRSP & p->flags))          if (vis && vbl && (TERMP_BRTRSP & p->flags))
                 vis += vbl;                  vis += vbl;
   
         /* If the column was overrun, break the line. */          /* If the column was overrun, break the line. */
         if (maxvis < vis + p->trailspace * (*p->width)(p, ' ')) {          if ((p->flags & TERMP_NOBREAK) == 0 ||
                 (*p->endline)(p);              ((p->flags & TERMP_HANG) == 0 &&
                 p->viscol = 0;               vis + p->trailspace * (*p->width)(p, ' ') > maxvis))
                 p->minbl = 0;                  endline(p);
         } else  
                 p->minbl = p->trailspace;  
 }  }
   
   static void
   endline(struct termp *p)
   {
           if ((p->flags & (TERMP_NEWMC | TERMP_ENDMC)) == TERMP_ENDMC) {
                   p->mc = NULL;
                   p->flags &= ~TERMP_ENDMC;
           }
           if (p->mc != NULL) {
                   if (p->viscol && p->maxrmargin >= p->viscol)
                           (*p->advance)(p, p->maxrmargin - p->viscol + 1);
                   p->flags |= TERMP_NOBUF | TERMP_NOSPACE;
                   term_word(p, p->mc);
                   p->flags &= ~(TERMP_NOBUF | TERMP_NEWMC);
           }
           p->viscol = 0;
           p->minbl = 0;
           (*p->endline)(p);
   }
   
 /*  /*
  * A newline only breaks an existing line; it won't assert vertical   * A newline only breaks an existing line; it won't assert vertical
  * space.  All data in the output buffer is flushed prior to the newline   * space.  All data in the output buffer is flushed prior to the newline
Line 296  term_vspace(struct termp *p)
Line 303  term_vspace(struct termp *p)
   
         term_newln(p);          term_newln(p);
         p->viscol = 0;          p->viscol = 0;
           p->minbl = 0;
         if (0 < p->skipvsp)          if (0 < p->skipvsp)
                 p->skipvsp--;                  p->skipvsp--;
         else          else
Line 370  term_word(struct termp *p, const char *word)
Line 378  term_word(struct termp *p, const char *word)
         size_t           csz, lsz, ssz;          size_t           csz, lsz, ssz;
         enum mandoc_esc  esc;          enum mandoc_esc  esc;
   
         if ( ! (TERMP_NOSPACE & p->flags)) {          if ((p->flags & TERMP_NOBUF) == 0) {
                 if ( ! (TERMP_KEEP & p->flags)) {                  if ((p->flags & TERMP_NOSPACE) == 0) {
                         bufferc(p, ' ');                          if ((p->flags & TERMP_KEEP) == 0) {
                         if (TERMP_SENTENCE & p->flags)  
                                 bufferc(p, ' ');                                  bufferc(p, ' ');
                 } else                                  if (p->flags & TERMP_SENTENCE)
                         bufferc(p, ASCII_NBRSP);                                          bufferc(p, ' ');
                           } else
                                   bufferc(p, ASCII_NBRSP);
                   }
                   if (p->flags & TERMP_PREKEEP)
                           p->flags |= TERMP_KEEP;
                   if (p->flags & TERMP_NONOSPACE)
                           p->flags |= TERMP_NOSPACE;
                   else
                           p->flags &= ~TERMP_NOSPACE;
                   p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);
                   p->skipvsp = 0;
         }          }
         if (TERMP_PREKEEP & p->flags)  
                 p->flags |= TERMP_KEEP;  
   
         if ( ! (p->flags & TERMP_NONOSPACE))  
                 p->flags &= ~TERMP_NOSPACE;  
         else  
                 p->flags |= TERMP_NOSPACE;  
   
         p->flags &= ~(TERMP_SENTENCE | TERMP_NONEWLINE);  
         p->skipvsp = 0;  
   
         while ('\0' != *word) {          while ('\0' != *word) {
                 if ('\\' != *word) {                  if ('\\' != *word) {
                         if (TERMP_NBRWORD & p->flags) {                          if (TERMP_NBRWORD & p->flags) {
Line 590  adjbuf(struct termp *p, size_t sz)
Line 598  adjbuf(struct termp *p, size_t sz)
 static void  static void
 bufferc(struct termp *p, char c)  bufferc(struct termp *p, char c)
 {  {
           if (p->flags & TERMP_NOBUF) {
                   (*p->letter)(p, c);
                   return;
           }
         if (p->col + 1 >= p->maxcols)          if (p->col + 1 >= p->maxcols)
                 adjbuf(p, p->col + 1);                  adjbuf(p, p->col + 1);
   
         p->buf[p->col++] = c;          p->buf[p->col++] = c;
 }  }
   
Line 607  encode1(struct termp *p, int c)
Line 617  encode1(struct termp *p, int c)
 {  {
         enum termfont     f;          enum termfont     f;
   
           if (p->flags & TERMP_NOBUF) {
                   (*p->letter)(p, c);
                   return;
           }
   
         if (p->col + 7 >= p->maxcols)          if (p->col + 7 >= p->maxcols)
                 adjbuf(p, p->col + 7);                  adjbuf(p, p->col + 7);
   
Line 642  static void
Line 657  static void
 encode(struct termp *p, const char *word, size_t sz)  encode(struct termp *p, const char *word, size_t sz)
 {  {
         size_t            i;          size_t            i;
   
           if (p->flags & TERMP_NOBUF) {
                   for (i = 0; i < sz; i++)
                           (*p->letter)(p, word[i]);
                   return;
           }
   
         if (p->col + 2 + (sz * 5) >= p->maxcols)          if (p->col + 2 + (sz * 5) >= p->maxcols)
                 adjbuf(p, p->col + 2 + (sz * 5));                  adjbuf(p, p->col + 2 + (sz * 5));

Legend:
Removed from v.1.263  
changed lines
  Added in v.1.264

CVSweb