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

Diff for /mandoc/Attic/argv.c between version 1.24 and 1.25

version 1.24, 2009/01/21 17:56:32 version 1.25, 2009/01/22 12:21:03
Line 46  static int   parse_multi(struct mdoc *, int, 
Line 46  static int   parse_multi(struct mdoc *, int, 
 static  int              postparse(struct mdoc *, int,  static  int              postparse(struct mdoc *, int,
                                 const struct mdoc_arg *, int);                                  const struct mdoc_arg *, int);
 static  int              pwarn(struct mdoc *, int, int, int);  static  int              pwarn(struct mdoc *, int, int, int);
   static  int              perr(struct mdoc *, int, int, int);
   
 #define WQUOTPARM       (0)  #define WQUOTPARM       (0)
 #define WARGVPARM       (1)  #define WARGVPARM       (1)
   #define WCOLEMPTY       (2)
   #define WTAILWS         (3)
   
   #define EQUOTTERM       (0)
   #define EOFFSET         (1)
   #define EARGVAL         (2)
   #define EARGMANY        (3)
   
 static  int mdoc_argflags[MDOC_MAX] = {  static  int mdoc_argflags[MDOC_MAX] = {
         0, /* \" */          0, /* \" */
         0, /* Dd */          0, /* Dd */
Line 161  static int mdoc_argflags[MDOC_MAX] = {
Line 169  static int mdoc_argflags[MDOC_MAX] = {
   
   
 static int  static int
   perr(struct mdoc *mdoc, int line, int pos, int code)
   {
           int              c;
   
           switch (code) {
           case (EQUOTTERM):
                   c = mdoc_perr(mdoc, line, pos,
                                   "unterminated quoted parameter");
                   break;
           case (EOFFSET):
                   c = mdoc_perr(mdoc, line, pos,
                                   "invalid value for offset argument");
                   break;
           case (EARGVAL):
                   c = mdoc_perr(mdoc, line, pos,
                                   "argument requires a value");
                   break;
           case (EARGMANY):
                   c = mdoc_perr(mdoc, line, pos,
                                   "too many values for argument");
                   break;
           default:
                   abort();
                   /* NOTREACHED */
           }
           return(c);
   }
   
   
   static int
 pwarn(struct mdoc *mdoc, int line, int pos, int code)  pwarn(struct mdoc *mdoc, int line, int pos, int code)
 {  {
         int              c;          int              c;
Line 174  pwarn(struct mdoc *mdoc, int line, int pos, int code)
Line 212  pwarn(struct mdoc *mdoc, int line, int pos, int code)
                 c = mdoc_pwarn(mdoc, line, pos, WARN_SYNTAX,                  c = mdoc_pwarn(mdoc, line, pos, WARN_SYNTAX,
                                 "argument-like parameter");                                  "argument-like parameter");
                 break;                  break;
           case (WCOLEMPTY):
                   c = mdoc_pwarn(mdoc, line, pos, WARN_SYNTAX,
                                   "last list column is empty");
                   break;
           case (WTAILWS):
                   c = mdoc_pwarn(mdoc, line, pos, WARN_COMPAT,
                                   "trailing whitespace");
                   break;
         default:          default:
                 abort();                  abort();
                 /* NOTREACHED */                  /* NOTREACHED */
Line 318  mdoc_args(struct mdoc *mdoc, int line, 
Line 364  mdoc_args(struct mdoc *mdoc, int line, 
                                         p++;                                          p++;
                                 if (0 != *p)                                  if (0 != *p)
                                         *(p - 1) = 0;                                          *(p - 1) = 0;
                                 else if (0 == *p)  
                                         if ( ! mdoc_pwarn(mdoc, line, *pos, WARN_SYNTAX, "empty final token")) /* FIXME: verbiage */  
                                                 return(0);  
                                 *pos += p - *v;                                  *pos += p - *v;
                         }                          }
   
                           if (p && 0 == *p)
                                   if ( ! pwarn(mdoc, line, *pos, WCOLEMPTY))
                                           return(0);
                           if (p && 0 == *p && p > *v && ' ' == *(p - 1))
                                   if ( ! pwarn(mdoc, line, *pos, WTAILWS))
                                           return(0);
   
                         /* Configure the eoln case, too. */                          /* Configure the eoln case, too. */
   
                         if (NULL == p) {                          if (NULL == p) {
                                 p = strchr(*v, 0);                                  p = strchr(*v, 0);
                                 assert(p);                                  assert(p);
   
                                 /*if (p > *v && ' ' == *(p - 1))                                  if (p > *v && ' ' == *(p - 1))
                                         Warn about whitespace. */                                          if ( ! pwarn(mdoc, line, *pos, WTAILWS))
                                                   return(0);
                                 *pos += p - *v;                                  *pos += p - *v;
                         }                          }
   
Line 364  mdoc_args(struct mdoc *mdoc, int line, 
Line 414  mdoc_args(struct mdoc *mdoc, int line, 
                 if (buf[*pos])                  if (buf[*pos])
                         return(ARGS_WORD);                          return(ARGS_WORD);
   
                 if ( ! mdoc_pwarn(mdoc, line, *pos, WARN_COMPAT, "whitespace at end-of-line"))                  if ( ! pwarn(mdoc, line, *pos, WTAILWS))
                         return(ARGS_ERROR);                          return(ARGS_ERROR);
   
                 return(ARGS_WORD);                  return(ARGS_WORD);
Line 382  mdoc_args(struct mdoc *mdoc, int line, 
Line 432  mdoc_args(struct mdoc *mdoc, int line, 
                 (*pos)++;                  (*pos)++;
   
         if (0 == buf[*pos]) {          if (0 == buf[*pos]) {
                 (void)mdoc_perr(mdoc, line, *pos, "unterminated quoted parameter");                  (void)perr(mdoc, line, *pos, EQUOTTERM);
                 return(ARGS_ERROR);                  return(ARGS_ERROR);
         }          }
   
Line 396  mdoc_args(struct mdoc *mdoc, int line, 
Line 446  mdoc_args(struct mdoc *mdoc, int line, 
         if (buf[*pos])          if (buf[*pos])
                 return(ARGS_QWORD);                  return(ARGS_QWORD);
   
         if ( ! mdoc_pwarn(mdoc, line, *pos, WARN_COMPAT, "whitespace at end-of-line"))          if ( ! pwarn(mdoc, line, *pos, WTAILWS))
                 return(ARGS_ERROR);                  return(ARGS_ERROR);
   
         return(ARGS_QWORD);          return(ARGS_QWORD);
Line 585  postparse(struct mdoc *mdoc, int line, const struct md
Line 635  postparse(struct mdoc *mdoc, int line, const struct md
                         break;                          break;
                 if (xstrcmp(v->value[0], "indent-two"))                  if (xstrcmp(v->value[0], "indent-two"))
                         break;                          break;
                 return(mdoc_perr(mdoc, line, pos, "invalid offset value"));                  return(perr(mdoc, line, pos, EOFFSET));
         default:          default:
                 break;                  break;
         }          }
Line 622  parse_multi(struct mdoc *mdoc, int line, 
Line 672  parse_multi(struct mdoc *mdoc, int line, 
                 return(1);                  return(1);
   
         free(v->value);          free(v->value);
         return(mdoc_perr(mdoc, line, ppos, 0 == v->sz ?          if (0 == v->sz)
                                 "argument requires a value" :                  return(perr(mdoc, line, ppos, EARGVAL));
                                 "too many values to argument"));  
           return(perr(mdoc, line, ppos, EARGMANY));
 }  }
   
   
Line 641  parse_single(struct mdoc *mdoc, int line, 
Line 692  parse_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(mdoc_perr(mdoc, line, ppos,  "argument requires a value"));                  return(perr(mdoc, line, ppos,  EARGVAL));
   
         v->sz = 1;          v->sz = 1;
         v->value = xcalloc(1, sizeof(char *));          v->value = xcalloc(1, sizeof(char *));
Line 710  mdoc_argv(struct mdoc *mdoc, int line, int tok,
Line 761  mdoc_argv(struct mdoc *mdoc, int line, int tok,
                 buf[(*pos)++] = 0;                  buf[(*pos)++] = 0;
   
         if (MDOC_ARG_MAX == (v->arg = lookup(tok, argv))) {          if (MDOC_ARG_MAX == (v->arg = lookup(tok, argv))) {
                 if ( ! mdoc_pwarn(mdoc, line, i, WARN_SYNTAX, "argument-like parameter"))                  if ( ! pwarn(mdoc, line, i, WARGVPARM))
                         return(ARGV_ERROR);                          return(ARGV_ERROR);
                 return(ARGV_WORD);                  return(ARGV_WORD);
         }          }

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.25

CVSweb