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

Diff for /mandoc/term.c between version 1.193 and 1.194

version 1.193, 2011/05/17 14:38:34 version 1.194, 2011/05/17 22:32:45
Line 36 
Line 36 
 static  void             adjbuf(struct termp *p, int);  static  void             adjbuf(struct termp *p, int);
 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);
   
 void  void
 term_free(struct termp *p)  term_free(struct termp *p)
Line 403  term_word(struct termp *p, const char *word)
Line 404  term_word(struct termp *p, const char *word)
 {  {
         const char      *seq, *cp;          const char      *seq, *cp;
         char             c;          char             c;
         int              sz;          int              sz, uc;
         size_t           ssz;          size_t           ssz;
         enum mandoc_esc  esc;          enum mandoc_esc  esc;
   
Line 440  term_word(struct termp *p, const char *word)
Line 441  term_word(struct termp *p, const char *word)
   
                 switch (esc) {                  switch (esc) {
                 case (ESCAPE_UNICODE):                  case (ESCAPE_UNICODE):
                         encode(p, "?", 1);                          if (TERMENC_ASCII == p->enc) {
                                   encode1(p, '?');
                                   break;
                           }
                           uc = mchars_num2uc(seq + 1, sz - 1);
                           if ('\0' != uc)
                                   encode1(p, uc);
                         break;                          break;
                 case (ESCAPE_NUMBERED):                  case (ESCAPE_NUMBERED):
                         if ('\0' != (c = mchars_num2char(seq, sz)))                          if ('\0' != (c = mchars_num2char(seq, sz)))
Line 503  bufferc(struct termp *p, char c)
Line 510  bufferc(struct termp *p, char c)
         p->buf[p->col++] = c;          p->buf[p->col++] = c;
 }  }
   
   /*
    * See encode().
    * Do this for a single (probably unicode) value.
    * Does not check for non-decorated glyphs.
    */
 static void  static void
   encode1(struct termp *p, int c)
   {
           enum termfont     f;
   
           if (p->col + 4 >= p->maxcols)
                   adjbuf(p, p->col + 4);
   
           f = term_fonttop(p);
   
           if (TERMFONT_NONE == f) {
                   p->buf[p->col++] = c;
                   return;
           } else if (TERMFONT_UNDER == f) {
                   p->buf[p->col++] = '_';
           } else
                   p->buf[p->col++] = c;
   
           p->buf[p->col++] = 8;
           p->buf[p->col++] = c;
   }
   
   static void
 encode(struct termp *p, const char *word, size_t sz)  encode(struct termp *p, const char *word, size_t sz)
 {  {
         enum termfont     f;          enum termfont     f;
Line 584  term_strlen(const struct termp *p, const char *cp)
Line 618  term_strlen(const struct termp *p, const char *cp)
                         case (ESCAPE_ERROR):                          case (ESCAPE_ERROR):
                                 return(sz);                                  return(sz);
                         case (ESCAPE_UNICODE):                          case (ESCAPE_UNICODE):
                                 c = '?';                                  if (TERMENC_ASCII != p->enc) {
                                 /* FALLTHROUGH */                                          sz += (*p->width)(p, '?');
                         case (ESCAPE_NUMBERED):                                          break;
                                   }
                                   c = mchars_num2uc(seq + 1, ssz - 1);
                                 if ('\0' != c)                                  if ('\0' != c)
                                         c = mchars_num2char(seq, ssz);                                          sz += (*p->width)(p, c);
                                   break;
                           case (ESCAPE_NUMBERED):
                                   c = mchars_num2char(seq, ssz);
                                 if ('\0' != c)                                  if ('\0' != c)
                                         sz += (*p->width)(p, c);                                          sz += (*p->width)(p, c);
                                 break;                                  break;

Legend:
Removed from v.1.193  
changed lines
  Added in v.1.194

CVSweb