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

Diff for /mandoc/term.c between version 1.247 and 1.248

version 1.247, 2015/04/04 17:47:18 version 1.248, 2015/04/29 18:35:00
Line 265  term_flushln(struct termp *p)
Line 265  term_flushln(struct termp *p)
   
         p->col = 0;          p->col = 0;
         p->overstep = 0;          p->overstep = 0;
           p->flags &= ~(TERMP_BACKAFTER | TERMP_BACKBEFORE);
   
         if ( ! (TERMP_NOBREAK & p->flags)) {          if ( ! (TERMP_NOBREAK & p->flags)) {
                 p->viscol = 0;                  p->viscol = 0;
Line 417  term_word(struct termp *p, const char *word)
Line 418  term_word(struct termp *p, const char *word)
   
         while ('\0' != *word) {          while ('\0' != *word) {
                 if ('\\' != *word) {                  if ('\\' != *word) {
                         if (TERMP_SKIPCHAR & p->flags) {  
                                 p->flags &= ~TERMP_SKIPCHAR;  
                                 word++;  
                                 continue;  
                         }  
                         if (TERMP_NBRWORD & p->flags) {                          if (TERMP_NBRWORD & p->flags) {
                                 if (' ' == *word) {                                  if (' ' == *word) {
                                         encode(p, nbrsp, 1);                                          encode(p, nbrsp, 1);
Line 480  term_word(struct termp *p, const char *word)
Line 476  term_word(struct termp *p, const char *word)
                         term_fontlast(p);                          term_fontlast(p);
                         continue;                          continue;
                 case ESCAPE_NOSPACE:                  case ESCAPE_NOSPACE:
                         if (TERMP_SKIPCHAR & p->flags)                          if (p->flags & TERMP_BACKAFTER)
                                 p->flags &= ~TERMP_SKIPCHAR;                                  p->flags &= ~TERMP_BACKAFTER;
                         else if ('\0' == *word)                          else if (*word == '\0')
                                 p->flags |= (TERMP_NOSPACE | TERMP_NONEWLINE);                                  p->flags |= (TERMP_NOSPACE | TERMP_NONEWLINE);
                         continue;                          continue;
                 case ESCAPE_SKIPCHAR:                  case ESCAPE_SKIPCHAR:
                         p->flags |= TERMP_SKIPCHAR;                          p->flags |= TERMP_BACKAFTER;
                         continue;                          continue;
                 case ESCAPE_OVERSTRIKE:                  case ESCAPE_OVERSTRIKE:
                         cp = seq + sz;                          cp = seq + sz;
Line 496  term_word(struct termp *p, const char *word)
Line 492  term_word(struct termp *p, const char *word)
                                         continue;                                          continue;
                                 }                                  }
                                 encode1(p, *seq++);                                  encode1(p, *seq++);
                                 if (seq < cp)                                  if (seq < cp) {
                                         encode(p, "\b", 1);                                          if (p->flags & TERMP_BACKBEFORE)
                                                   p->flags |= TERMP_BACKAFTER;
                                           else
                                                   p->flags |= TERMP_BACKBEFORE;
                                   }
                         }                          }
                           continue;
                 default:                  default:
                         continue;                          continue;
                 }                  }
Line 553  encode1(struct termp *p, int c)
Line 554  encode1(struct termp *p, int c)
 {  {
         enum termfont     f;          enum termfont     f;
   
         if (TERMP_SKIPCHAR & p->flags) {          if (p->col + 7 >= p->maxcols)
                 p->flags &= ~TERMP_SKIPCHAR;                  adjbuf(p, p->col + 7);
                 return;  
         }  
   
         if (p->col + 6 >= p->maxcols)          f = (c == ASCII_HYPH || isgraph(c)) ?
                 adjbuf(p, p->col + 6);              p->fontq[p->fonti] : TERMFONT_NONE;
   
         f = p->fontq[p->fonti];          if (p->flags & TERMP_BACKBEFORE) {
                   p->buf[p->col++] = 8;
                   p->flags &= ~TERMP_BACKBEFORE;
           }
         if (TERMFONT_UNDER == f || TERMFONT_BI == f) {          if (TERMFONT_UNDER == f || TERMFONT_BI == f) {
                 p->buf[p->col++] = '_';                  p->buf[p->col++] = '_';
                 p->buf[p->col++] = 8;                  p->buf[p->col++] = 8;
Line 575  encode1(struct termp *p, int c)
Line 576  encode1(struct termp *p, int c)
                 p->buf[p->col++] = 8;                  p->buf[p->col++] = 8;
         }          }
         p->buf[p->col++] = c;          p->buf[p->col++] = c;
           if (p->flags & TERMP_BACKAFTER) {
                   p->flags |= TERMP_BACKBEFORE;
                   p->flags &= ~TERMP_BACKAFTER;
           }
 }  }
   
 static void  static void
Line 582  encode(struct termp *p, const char *word, size_t sz)
Line 587  encode(struct termp *p, const char *word, size_t sz)
 {  {
         size_t            i;          size_t            i;
   
         if (TERMP_SKIPCHAR & p->flags) {          if (p->col + 2 + (sz * 5) >= p->maxcols)
                 p->flags &= ~TERMP_SKIPCHAR;                  adjbuf(p, p->col + 2 + (sz * 5));
                 return;  
         }  
   
         /*  
          * Encode and buffer a string of characters.  If the current  
          * font mode is unset, buffer directly, else encode then buffer  
          * character by character.  
          */  
   
         if (p->fontq[p->fonti] == TERMFONT_NONE) {  
                 if (p->col + sz >= p->maxcols)  
                         adjbuf(p, p->col + sz);  
                 for (i = 0; i < sz; i++)  
                         p->buf[p->col++] = word[i];  
                 return;  
         }  
   
         /* Pre-buffer, assuming worst-case. */  
   
         if (p->col + 1 + (sz * 5) >= p->maxcols)  
                 adjbuf(p, p->col + 1 + (sz * 5));  
   
         for (i = 0; i < sz; i++) {          for (i = 0; i < sz; i++) {
                 if (ASCII_HYPH == word[i] ||                  if (ASCII_HYPH == word[i] ||

Legend:
Removed from v.1.247  
changed lines
  Added in v.1.248

CVSweb