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

Diff for /mandoc/mdoc_argv.c between version 1.9 and 1.10

version 1.9, 2009/07/06 09:21:24 version 1.10, 2009/07/06 11:21:34
Line 47 
Line 47 
   
 #define MULTI_STEP       5  #define MULTI_STEP       5
   
 enum    mwarn {  
         WQUOTPARM,  
         WARGVPARM,  
         WCOLEMPTY,  
         WTAILWS  
 };  
   
 enum    merr {  enum    merr {
           ETAILWS,
           ECOLEMPTY,
           EARGVPARM,
           EQUOTPARM,
         EQUOTTERM,          EQUOTTERM,
         EMALLOC,          EMALLOC,
         EARGVAL          EARGVAL
Line 71  static int   argv_opt_single(struct mdoc *, int, 
Line 68  static int   argv_opt_single(struct mdoc *, int, 
                                 struct mdoc_argv *, int *, char *);                                  struct mdoc_argv *, int *, char *);
 static  int              argv_multi(struct mdoc *, int,  static  int              argv_multi(struct mdoc *, int,
                                 struct mdoc_argv *, int *, char *);                                  struct mdoc_argv *, int *, char *);
 static  int              pwarn(struct mdoc *, int, int, enum mwarn);  static  int              perr(struct mdoc *, int, int, enum merr, int);
 static  int              perr(struct mdoc *, int, int, enum merr);  
   
 #define verr(m, t) perr((m), (m)->last->line, (m)->last->pos, (t))  #define pwarn(m, l, p, t) perr((m), (l), (p), (t), 0)
   #define verr(m, t) perr((m), (m)->last->line, (m)->last->pos, (t), 1)
   
 /* Per-argument flags. */  /* Per-argument flags. */
   
Line 284  mdoc_argv(struct mdoc *mdoc, int line, int tok,
Line 281  mdoc_argv(struct mdoc *mdoc, int line, int tok,
                 /* XXX - restore saved zeroed byte. */                  /* XXX - restore saved zeroed byte. */
                 if (sv)                  if (sv)
                         buf[*pos - 1] = sv;                          buf[*pos - 1] = sv;
                 if ( ! pwarn(mdoc, line, i, WARGVPARM))                  if ( ! pwarn(mdoc, line, i, EARGVPARM))
                         return(ARGV_ERROR);                          return(ARGV_ERROR);
                 return(ARGV_WORD);                  return(ARGV_WORD);
         }          }
Line 353  mdoc_argv_free(struct mdoc_arg *p)
Line 350  mdoc_argv_free(struct mdoc_arg *p)
   
   
 static int  static int
 perr(struct mdoc *mdoc, int line, int pos, enum merr code)  perr(struct mdoc *mdoc, int line, int pos, enum merr code, int iserr)
 {  {
         char            *p;          char            *p;
   
         p = NULL;          p = NULL;
   
         switch (code) {          switch (code) {
         case (EMALLOC):          case (EMALLOC):
                 p = "memory exhausted";                  p = "memory exhausted";
Line 368  perr(struct mdoc *mdoc, int line, int pos, enum merr c
Line 366  perr(struct mdoc *mdoc, int line, int pos, enum merr c
         case (EARGVAL):          case (EARGVAL):
                 p = "argument requires a value";                  p = "argument requires a value";
                 break;                  break;
         }          case (EQUOTPARM):
   
         assert(p);  
         return(mdoc_perr(mdoc, line, pos, p));  
 }  
   
   
 static int  
 pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn code)  
 {  
         char            *p;  
   
         p = NULL;  
   
         switch (code) {  
         case (WQUOTPARM):  
                 p = "unexpected quoted parameter";                  p = "unexpected quoted parameter";
                 break;                  break;
         case (WARGVPARM):          case (EARGVPARM):
                 p = "argument-like parameter";                  p = "argument-like parameter";
                 break;                  break;
         case (WCOLEMPTY):          case (ECOLEMPTY):
                 p = "last list column is empty";                  p = "last list column is empty";
                 break;                  break;
         case (WTAILWS):          case (ETAILWS):
                 p = "trailing whitespace";                  p = "trailing whitespace";
                 break;                  break;
         }          }
   
         assert(p);          assert(p);
           if (iserr)
                   return(mdoc_perr(mdoc, line, pos, p));
   
         return(mdoc_pwarn(mdoc, line, pos, p));          return(mdoc_pwarn(mdoc, line, pos, p));
 }  }
   
Line 471  args(struct mdoc *mdoc, int line, 
Line 457  args(struct mdoc *mdoc, int line, 
                 return(ARGS_EOLN);                  return(ARGS_EOLN);
   
         if ('\"' == buf[*pos] && ! (fl & ARGS_QUOTED))          if ('\"' == buf[*pos] && ! (fl & ARGS_QUOTED))
                 if ( ! pwarn(mdoc, line, *pos, WQUOTPARM))                  if ( ! pwarn(mdoc, line, *pos, EQUOTPARM))
                         return(ARGS_ERROR);                          return(ARGS_ERROR);
   
         if ( ! (fl & ARGS_ARGVLIKE) && '-' == buf[*pos])          if ( ! (fl & ARGS_ARGVLIKE) && '-' == buf[*pos])
                 if ( ! pwarn(mdoc, line, *pos, WARGVPARM))                  if ( ! pwarn(mdoc, line, *pos, EARGVPARM))
                         return(ARGS_ERROR);                          return(ARGS_ERROR);
   
         /*          /*
Line 567  args(struct mdoc *mdoc, int line, 
Line 553  args(struct mdoc *mdoc, int line, 
                         }                          }
   
                         if (p && 0 == *p)                          if (p && 0 == *p)
                                 if ( ! pwarn(mdoc, line, *pos, WCOLEMPTY))                                  if ( ! pwarn(mdoc, line, *pos, ECOLEMPTY))
                                         return(0);                                          return(0);
                         if (p && 0 == *p && p > *v && ' ' == *(p - 1))                          if (p && 0 == *p && p > *v && ' ' == *(p - 1))
                                 if ( ! pwarn(mdoc, line, *pos, WTAILWS))                                  if ( ! pwarn(mdoc, line, *pos, ETAILWS))
                                         return(0);                                          return(0);
   
                         if (p)                          if (p)
Line 582  args(struct mdoc *mdoc, int line, 
Line 568  args(struct mdoc *mdoc, int line, 
                         assert(p);                          assert(p);
   
                         if (p > *v && ' ' == *(p - 1))                          if (p > *v && ' ' == *(p - 1))
                                 if ( ! pwarn(mdoc, line, *pos, WTAILWS))                                  if ( ! pwarn(mdoc, line, *pos, ETAILWS))
                                         return(0);                                          return(0);
                         *pos += (int)(p - *v);                          *pos += (int)(p - *v);
   
Line 614  args(struct mdoc *mdoc, int line, 
Line 600  args(struct mdoc *mdoc, int line, 
                 if (buf[*pos])                  if (buf[*pos])
                         return(ARGS_WORD);                          return(ARGS_WORD);
   
                 if ( ! pwarn(mdoc, line, *pos, WTAILWS))                  if ( ! pwarn(mdoc, line, *pos, ETAILWS))
                         return(ARGS_ERROR);                          return(ARGS_ERROR);
   
                 return(ARGS_WORD);                  return(ARGS_WORD);
Line 632  args(struct mdoc *mdoc, int line, 
Line 618  args(struct mdoc *mdoc, int line, 
                 (*pos)++;                  (*pos)++;
   
         if (0 == buf[*pos]) {          if (0 == buf[*pos]) {
                 (void)perr(mdoc, line, *pos, EQUOTTERM);                  (void)perr(mdoc, line, *pos, EQUOTTERM, 1);
                 return(ARGS_ERROR);                  return(ARGS_ERROR);
         }          }
   
Line 646  args(struct mdoc *mdoc, int line, 
Line 632  args(struct mdoc *mdoc, int line, 
         if (buf[*pos])          if (buf[*pos])
                 return(ARGS_QWORD);                  return(ARGS_QWORD);
   
         if ( ! pwarn(mdoc, line, *pos, WTAILWS))          if ( ! pwarn(mdoc, line, *pos, ETAILWS))
                 return(ARGS_ERROR);                  return(ARGS_ERROR);
   
         return(ARGS_QWORD);          return(ARGS_QWORD);
Line 825  argv_single(struct mdoc *mdoc, int line, 
Line 811  argv_single(struct mdoc *mdoc, int line, 
         if (ARGS_ERROR == c)          if (ARGS_ERROR == c)
                 return(0);                  return(0);
         if (ARGS_EOLN == c)          if (ARGS_EOLN == c)
                 return(perr(mdoc, line, ppos, EARGVAL));                  return(perr(mdoc, line, ppos, EARGVAL, 1));
   
         v->sz = 1;          v->sz = 1;
         if (NULL == (v->value = calloc(1, sizeof(char *))))          if (NULL == (v->value = calloc(1, sizeof(char *))))

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

CVSweb