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

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

version 1.194, 2011/05/17 22:32:45 version 1.199, 2011/09/18 21:18:19
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 439  term_word(struct termp *p, const char *word)
Line 439  term_word(struct termp *p, const char *word)
                 if (ESCAPE_ERROR == esc)                  if (ESCAPE_ERROR == esc)
                         break;                          break;
   
                 switch (esc) {                  if (TERMENC_ASCII != p->enc)
                 case (ESCAPE_UNICODE):                          switch (esc) {
                         if (TERMENC_ASCII == p->enc) {                          case (ESCAPE_UNICODE):
                                 encode1(p, '?');                                  uc = mchars_num2uc(seq + 1, sz - 1);
                                   if ('\0' == uc)
                                           break;
                                   encode1(p, uc);
                                   continue;
                           case (ESCAPE_SPECIAL):
                                   uc = mchars_spec2cp(p->symtab, seq, sz);
                                   if (uc <= 0)
                                           break;
                                   encode1(p, uc);
                                   continue;
                           default:
                                 break;                                  break;
                         }                          }
                         uc = mchars_num2uc(seq + 1, sz - 1);  
                         if ('\0' != uc)                  switch (esc) {
                                 encode1(p, uc);                  case (ESCAPE_UNICODE):
                           encode1(p, '?');
                         break;                          break;
                 case (ESCAPE_NUMBERED):                  case (ESCAPE_NUMBERED):
                         if ('\0' != (c = mchars_num2char(seq, sz)))                          c = mchars_num2char(seq, sz);
                           if ('\0' != c)
                                 encode(p, &c, 1);                                  encode(p, &c, 1);
                         break;                          break;
                 case (ESCAPE_PREDEF):  
                         cp = mchars_res2str(p->symtab, seq, sz, &ssz);  
                         if (NULL != cp)  
                                 encode(p, cp, ssz);  
                         break;  
                 case (ESCAPE_SPECIAL):                  case (ESCAPE_SPECIAL):
                         cp = mchars_spec2str(p->symtab, seq, sz, &ssz);                          cp = mchars_spec2str(p->symtab, seq, sz, &ssz);
                         if (NULL != cp)                          if (NULL != cp)
Line 471  term_word(struct termp *p, const char *word)
Line 479  term_word(struct termp *p, const char *word)
                 case (ESCAPE_FONTITALIC):                  case (ESCAPE_FONTITALIC):
                         term_fontrepl(p, TERMFONT_UNDER);                          term_fontrepl(p, TERMFONT_UNDER);
                         break;                          break;
                   case (ESCAPE_FONT):
                           /* FALLTHROUGH */
                 case (ESCAPE_FONTROMAN):                  case (ESCAPE_FONTROMAN):
                         term_fontrepl(p, TERMFONT_NONE);                          term_fontrepl(p, TERMFONT_NONE);
                         break;                          break;
Line 566  encode(struct termp *p, const char *word, size_t sz)
Line 576  encode(struct termp *p, const char *word, size_t sz)
                 adjbuf(p, p->col + 1 + (len * 3));                  adjbuf(p, p->col + 1 + (len * 3));
   
         for (i = 0; i < len; i++) {          for (i = 0; i < len; i++) {
                 if ( ! isgraph((unsigned char)word[i])) {                  if (ASCII_HYPH != word[i] &&
                       ! isgraph((unsigned char)word[i])) {
                         p->buf[p->col++] = word[i];                          p->buf[p->col++] = word[i];
                         continue;                          continue;
                 }                  }
   
                 if (TERMFONT_UNDER == f)                  if (TERMFONT_UNDER == f)
                         p->buf[p->col++] = '_';                          p->buf[p->col++] = '_';
                   else if (ASCII_HYPH == word[i])
                           p->buf[p->col++] = '-';
                 else                  else
                         p->buf[p->col++] = word[i];                          p->buf[p->col++] = word[i];
   
Line 595  term_strlen(const struct termp *p, const char *cp)
Line 608  term_strlen(const struct termp *p, const char *cp)
         size_t           sz, rsz, i;          size_t           sz, rsz, i;
         int              ssz, c;          int              ssz, c;
         const char      *seq, *rhs;          const char      *seq, *rhs;
           enum mandoc_esc  esc;
         static const char rej[] = { '\\', ASCII_HYPH, ASCII_NBRSP, '\0' };          static const char rej[] = { '\\', ASCII_HYPH, ASCII_NBRSP, '\0' };
   
         /*          /*
Line 613  term_strlen(const struct termp *p, const char *cp)
Line 627  term_strlen(const struct termp *p, const char *cp)
                 switch (*cp) {                  switch (*cp) {
                 case ('\\'):                  case ('\\'):
                         cp++;                          cp++;
                         rhs = NULL;                          esc = mandoc_escape(&cp, &seq, &ssz);
                         switch (mandoc_escape(&cp, &seq, &ssz)) {                          if (ESCAPE_ERROR == esc)
                         case (ESCAPE_ERROR):  
                                 return(sz);                                  return(sz);
                         case (ESCAPE_UNICODE):  
                                 if (TERMENC_ASCII != p->enc) {                          if (TERMENC_ASCII != p->enc)
                                         sz += (*p->width)(p, '?');                                  switch (esc) {
                                   case (ESCAPE_UNICODE):
                                           c = mchars_num2uc
                                                   (seq + 1, ssz - 1);
                                           if ('\0' == c)
                                                   break;
                                           sz += (*p->width)(p, c);
                                           continue;
                                   case (ESCAPE_SPECIAL):
                                           c = mchars_spec2cp
                                                   (p->symtab, seq, ssz);
                                           if (c <= 0)
                                                   break;
                                           sz += (*p->width)(p, c);
                                           continue;
                                   default:
                                         break;                                          break;
                                 }                                  }
                                 c = mchars_num2uc(seq + 1, ssz - 1);  
                                 if ('\0' != c)                          rhs = NULL;
                                         sz += (*p->width)(p, c);  
                           switch (esc) {
                           case (ESCAPE_UNICODE):
                                   sz += (*p->width)(p, '?');
                                 break;                                  break;
                         case (ESCAPE_NUMBERED):                          case (ESCAPE_NUMBERED):
                                 c = mchars_num2char(seq, ssz);                                  c = mchars_num2char(seq, ssz);
                                 if ('\0' != c)                                  if ('\0' != c)
                                         sz += (*p->width)(p, c);                                          sz += (*p->width)(p, c);
                                 break;  
                         case (ESCAPE_PREDEF):  
                                 rhs = mchars_res2str  
                                         (p->symtab, seq, ssz, &rsz);  
                                 break;                                  break;
                         case (ESCAPE_SPECIAL):                          case (ESCAPE_SPECIAL):
                                 rhs = mchars_spec2str                                  rhs = mchars_spec2str

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

CVSweb