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

Diff for /mandoc/out.c between version 1.13 and 1.14

version 1.13, 2010/04/07 07:49:38 version 1.14, 2010/04/07 11:25:38
Line 198  a2roffdeco(enum roffdeco *d,
Line 198  a2roffdeco(enum roffdeco *d,
                 const char **word, size_t *sz)                  const char **word, size_t *sz)
 {  {
         int              j, offs, term, lim;          int              j, offs, term, lim;
           char             set;
         const char      *wp, *sp;          const char      *wp, *sp;
   
         *d = DECO_NONE;          *d = DECO_NONE;
         wp = *word;          wp = *word;
         offs = 0;          offs = 0;
   
         switch (*wp) {          switch ((set = *wp)) {
         case ('\0'):          case ('\0'):
                 return(0);                  return(0);
   
Line 219  a2roffdeco(enum roffdeco *d,
Line 220  a2roffdeco(enum roffdeco *d,
                 *word = wp;                  *word = wp;
                 return(3);                  return(3);
   
           case ('F'):
                   /* FALLTHROUGH */
           case ('f'):
                   /*
                    * FIXME: this needs work and consolidation (it should
                    * follow the sequence that special characters do, for
                    * one), but isn't a priority at the moment.  Note, for
                    * one, that in reality \fB != \FB, although here we let
                    * these slip by.
                    */
                   switch (*(++wp)) {
                   case ('\0'):
                           return(1);
                   case ('3'):
                           /* FALLTHROUGH */
                   case ('B'):
                           *d = DECO_BOLD;
                           return(2);
                   case ('2'):
                           /* FALLTHROUGH */
                   case ('I'):
                           *d = DECO_ITALIC;
                           return(2);
                   case ('P'):
                           *d = DECO_PREVIOUS;
                           return(2);
                   case ('1'):
                           /* FALLTHROUGH */
                   case ('R'):
                           *d = DECO_ROMAN;
                           return(2);
                   case ('('):
                           if ('\0' == *(++wp))
                                   return(2);
                           if ('\0' == *(wp + 1))
                                   return(3);
   
                           *d = 'F' == set ? DECO_FFONT : DECO_FONT;
                           *sz = 2;
                           *word = wp;
                           return(4);
                   case ('['):
                           *word = ++wp;
                           for (j = 0; *wp && ']' != *wp; wp++, j++)
                                   /* Loop... */ ;
   
                           if ('\0' == *wp)
                                   return(j + 2);
   
                           *d = 'F' == set ? DECO_FFONT : DECO_FONT;
                           *sz = (size_t)j;
                           return(j + 3);
                   default:
                           break;
                   }
   
                   *d = 'F' == set ? DECO_FFONT : DECO_FONT;
                   *sz = 1;
                   *word = wp;
                   return(2);
   
         case ('*'):          case ('*'):
                 switch (*(++wp)) {                  switch (*(++wp)) {
                 case ('\0'):                  case ('\0'):
Line 236  a2roffdeco(enum roffdeco *d,
Line 298  a2roffdeco(enum roffdeco *d,
                         return(4);                          return(4);
   
                 case ('['):                  case ('['):
                         offs = 1;                          *word = ++wp;
                         break;                          for (j = 0; *wp && ']' != *wp; wp++, j++)
                                   /* Loop... */ ;
   
                 default:                          if ('\0' == *wp)
                                   return(j + 2);
   
                         *d = DECO_RESERVED;                          *d = DECO_RESERVED;
                         *sz = 1;                          *sz = (size_t)j;
                         *word = wp;                          return(j + 3);
                         return(2);  
                   default:
                           break;
                 }                  }
                 break;  
   
                   *d = DECO_RESERVED;
                   *sz = 1;
                   *word = wp;
                   return(2);
   
         case ('s'):          case ('s'):
                 sp = wp;                  sp = wp;
                 if ('\0' == *(++wp))                  if ('\0' == *(++wp))
Line 300  a2roffdeco(enum roffdeco *d,
Line 371  a2roffdeco(enum roffdeco *d,
                 *d = DECO_SIZE;                  *d = DECO_SIZE;
                 return((int)(wp - sp));                  return((int)(wp - sp));
   
         case ('f'):          case ('['):
                 switch (*(++wp)) {                  *word = ++wp;
                 case ('\0'):  
                         return(1);  
                 case ('3'):  
                         /* FALLTHROUGH */  
                 case ('B'):  
                         *d = DECO_BOLD;  
                         break;  
                 case ('2'):  
                         /* FALLTHROUGH */  
                 case ('I'):  
                         *d = DECO_ITALIC;  
                         break;  
                 case ('P'):  
                         *d = DECO_PREVIOUS;  
                         break;  
                 case ('1'):  
                         /* FALLTHROUGH */  
                 case ('R'):  
                         *d = DECO_ROMAN;  
                         break;  
                 default:  
                         break;  
                 }  
   
                 return(2);                  for (j = 0; *wp && ']' != *wp; wp++, j++)
                           /* Loop... */ ;
   
         case ('['):                  if ('\0' == *wp)
                 break;                          return(j + 1);
   
                   *d = DECO_SPECIAL;
                   *sz = (size_t)j;
                   return(j + 2);
   
         case ('c'):          case ('c'):
                 *d = DECO_NOSPACE;                  *d = DECO_NOSPACE;
                 *sz = 1;                  *sz = 1;
                 return(1);                  return(1);
   
         default:          default:
                 *d = DECO_SPECIAL;                  break;
                 *word = wp;  
                 *sz = 1;  
                 return(1);  
         }          }
   
         *word = ++wp;          *d = DECO_SPECIAL;
           *word = wp;
         for (j = 0; *wp && ']' != *wp; wp++, j++)          *sz = 1;
                 /* Loop... */ ;          return(1);
   
         if ('\0' == *wp)  
                 return(j + 1 + offs);  
   
         *d = offs ? DECO_RESERVED : DECO_SPECIAL;  
         *sz = (size_t)j;  
   
         return (j + 2 + offs);  
 }  }

Legend:
Removed from v.1.13  
changed lines
  Added in v.1.14

CVSweb