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

Diff for /mandoc/term.c between version 1.76 and 1.80

version 1.76, 2009/06/11 07:26:35 version 1.80, 2009/06/22 10:40:04
Line 37  static void    term_pescape(struct termp *, 
Line 37  static void    term_pescape(struct termp *, 
 static  void              term_nescape(struct termp *,  static  void              term_nescape(struct termp *,
                                 const char *, size_t);                                  const char *, size_t);
 static  void              term_chara(struct termp *, char);  static  void              term_chara(struct termp *, char);
 static  void              term_stringa(struct termp *,  static  void              term_encodea(struct termp *, char);
                                 const char *, size_t);  
 static  int               term_isopendelim(const char *, int);  static  int               term_isopendelim(const char *, int);
 static  int               term_isclosedelim(const char *, int);  static  int               term_isclosedelim(const char *, int);
   
Line 106  term_alloc(enum termenc enc)
Line 105  term_alloc(enum termenc enc)
         if (NULL == (p = malloc(sizeof(struct termp))))          if (NULL == (p = malloc(sizeof(struct termp))))
                 err(1, "malloc");                  err(1, "malloc");
         bzero(p, sizeof(struct termp));          bzero(p, sizeof(struct termp));
         p->maxrmargin = 80;          p->maxrmargin = 78;
         p->enc = enc;          p->enc = enc;
         return(p);          return(p);
 }  }
Line 272  term_flushln(struct termp *p)
Line 271  term_flushln(struct termp *p)
                         vis = p->rmargin - p->offset;                          vis = p->rmargin - p->offset;
                 }                  }
   
                 /*                  /*
                  * Write out the word and a trailing space.  Omit the                   * Prepend a space if we're not already at the beginning
                  * space if we're the last word in the line or beyond                   * of the line, then the word.
                  * our breakpoint.  
                  */                   */
   
                   if (0 < vis++)
                           putchar(' ');
   
                 for ( ; i < (int)p->col; i++) {                  for ( ; i < (int)p->col; i++) {
                         if (' ' == p->buf[i])                          if (' ' == p->buf[i])
                                 break;                                  break;
                         putchar(p->buf[i]);                          putchar(p->buf[i]);
                 }                  }
                 vis += vsz;                  vis += vsz;
                 if (i < (int)p->col && vis <= bp) {  
                         putchar(' ');  
                         vis++;  
                 }  
         }          }
   
         /*          /*
Line 295  term_flushln(struct termp *p)
Line 292  term_flushln(struct termp *p)
          * cause a newline and offset at the right margin.           * cause a newline and offset at the right margin.
          */           */
   
         if ((TERMP_NOBREAK & p->flags) && vis >= maxvis) {          if ((TERMP_NOBREAK & p->flags) && vis > maxvis) {
                 if ( ! (TERMP_NONOBREAK & p->flags)) {                  if ( ! (TERMP_NONOBREAK & p->flags)) {
                         putchar('\n');                          putchar('\n');
                         for (i = 0; i < (int)p->rmargin; i++)                          for (i = 0; i < (int)p->rmargin; i++)
Line 312  term_flushln(struct termp *p)
Line 309  term_flushln(struct termp *p)
   
         if (p->flags & TERMP_NOBREAK) {          if (p->flags & TERMP_NOBREAK) {
                 if ( ! (TERMP_NONOBREAK & p->flags))                  if ( ! (TERMP_NONOBREAK & p->flags))
                         for ( ; vis < maxvis; vis++)                          for ( ; vis <= maxvis; vis++)
                                 putchar(' ');                                  putchar(' ');
         } else          } else
                 putchar('\n');                  putchar('\n');
Line 409  term_nescape(struct termp *p, const char *word, size_t
Line 406  term_nescape(struct termp *p, const char *word, size_t
 {  {
         const char      *rhs;          const char      *rhs;
         size_t           sz;          size_t           sz;
           int              i;
   
         if (NULL == (rhs = term_a2ascii(p->symtab, word, len, &sz)))          if ((rhs = term_a2ascii(p->symtab, word, len, &sz)))
                 return;                  for (i = 0; i < (int)sz; i++)
         term_stringa(p, rhs, sz);                          term_encodea(p, rhs[i]);
 }  }
   
   
Line 521  term_pword(struct termp *p, const char *word, int len)
Line 519  term_pword(struct termp *p, const char *word, int len)
          * before the word.           * before the word.
          */           */
   
         for (i = 0; i < len; i++) {          for (i = 0; i < len; i++)
                 if ('\\' == word[i]) {                  if ('\\' == word[i])
                         term_pescape(p, word, &i, len);                          term_pescape(p, word, &i, len);
                         continue;                  else
                 }                          term_encodea(p, word[i]);
   
                 if (TERMP_STYLE & p->flags) {  
                         if (TERMP_BOLD & p->flags) {  
                                 term_chara(p, word[i]);  
                                 term_chara(p, 8);  
                         }  
                         if (TERMP_UNDER & p->flags) {  
                                 term_chara(p, '_');  
                                 term_chara(p, 8);  
                         }  
                 }  
   
                 term_chara(p, word[i]);  
         }  
   
         if (term_isopendelim(word, len))          if (term_isopendelim(word, len))
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
 }  }
   
   
 /*  /*
  * Like term_chara() but for arbitrary-length buffers.  Resize the  
  * buffer by a factor of two (if the buffer is less than that) or the  
  * buffer's size.  
  */  
 static void  
 term_stringa(struct termp *p, const char *c, size_t sz)  
 {  
         size_t           s;  
   
         if (0 == sz)  
                 return;  
   
         assert(c);  
         if (p->col + sz >= p->maxcols) {  
                 if (0 == p->maxcols)  
                         p->maxcols = 256;  
                 s = sz > p->maxcols * 2 ? sz : p->maxcols * 2;  
                 p->buf = realloc(p->buf, s);  
                 if (NULL == p->buf)  
                         err(1, "realloc");  
                 p->maxcols = s;  
         }  
   
         (void)memcpy(&p->buf[(int)p->col], c, sz);  
         p->col += sz;  
 }  
   
   
 /*  
  * Insert a single character into the line-buffer.  If the buffer's   * Insert a single character into the line-buffer.  If the buffer's
  * space is exceeded, then allocate more space by doubling the buffer   * space is exceeded, then allocate more space by doubling the buffer
  * size.   * size.
Line 597  term_chara(struct termp *p, char c)
Line 552  term_chara(struct termp *p, char c)
         p->buf[(int)(p->col)++] = c;          p->buf[(int)(p->col)++] = c;
 }  }
   
   
   static void
   term_encodea(struct termp *p, char c)
   {
   
           if (TERMP_STYLE & p->flags) {
                   if (TERMP_BOLD & p->flags) {
                           term_chara(p, c);
                           term_chara(p, 8);
                   }
                   if (TERMP_UNDER & p->flags) {
                           term_chara(p, '_');
                           term_chara(p, 8);
                   }
           }
           term_chara(p, c);
   }

Legend:
Removed from v.1.76  
changed lines
  Added in v.1.80

CVSweb