[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.63 and 1.64

version 1.63, 2011/03/16 17:55:39 version 1.64, 2011/03/17 00:58:14
Line 48 
Line 48 
 static  enum mdocargt    argv_a2arg(enum mdoct, const char *);  static  enum mdocargt    argv_a2arg(enum mdoct, const char *);
 static  enum margserr    args(struct mdoc *, int, int *,  static  enum margserr    args(struct mdoc *, int, int *,
                                 char *, int, char **);                                  char *, int, char **);
   static  int              args_checkpunct(const char *);
 static  int              argv(struct mdoc *, int,  static  int              argv(struct mdoc *, int,
                                 struct mdoc_argv *, int *, char *);                                  struct mdoc_argv *, int *, char *);
 static  int              argv_single(struct mdoc *, int,  static  int              argv_single(struct mdoc *, int,
Line 377  args(struct mdoc *m, int line, int *pos, 
Line 378  args(struct mdoc *m, int line, int *pos, 
         int              i;          int              i;
         char            *p, *pp;          char            *p, *pp;
         enum margserr    rc;          enum margserr    rc;
         enum mdelim      d;  
   
         /*          /*
          * Parse out the terms (like `val' in `.Xx -arg val' or simply           * Parse out the terms (like `val' in `.Xx -arg val' or simply
Line 419  args(struct mdoc *m, int line, int *pos, 
Line 419  args(struct mdoc *m, int line, int *pos, 
          * we ONLY care about closing delimiters.           * we ONLY care about closing delimiters.
          */           */
   
         if ((fl & ARGS_DELIM) && DELIM_CLOSE == mdoc_iscdelim(buf[*pos])) {          *v = &buf[*pos];
                 for (i = *pos; buf[i]; ) {  
                         d = mdoc_iscdelim(buf[i]);  
                         if (DELIM_NONE == d || DELIM_OPEN == d)  
                                 break;  
                         i++;  
                         if ('\0' == buf[i] || ' ' != buf[i])  
                                 break;  
                         i++;  
                         while (buf[i] && ' ' == buf[i])  
                                 i++;  
                 }  
   
                 if ('\0' == buf[i]) {          if (ARGS_DELIM & fl && args_checkpunct(&buf[*pos])) {
                         *v = &buf[*pos];                  i = strlen(&buf[*pos]) + *pos;
                         if (i && ' ' != buf[i - 1])                  if (i && ' ' != buf[i - 1])
                                 return(ARGS_PUNCT);  
                         if (ARGS_NOWARN & fl)  
                                 return(ARGS_PUNCT);  
                         if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))  
                                 return(ARGS_ERROR);  
                         return(ARGS_PUNCT);                          return(ARGS_PUNCT);
                 }                  if (ARGS_NOWARN & fl)
                           return(ARGS_PUNCT);
                   /* FIXME: remove conditional messages... */
                   if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))
                           return(ARGS_ERROR);
                   return(ARGS_PUNCT);
         }          }
   
         *v = &buf[*pos];  
   
         /*          /*
          * First handle TABSEP items, restricted to `Bl -column'.  This           * First handle TABSEP items, restricted to `Bl -column'.  This
          * ignores conventional token parsing and instead uses tabs or           * ignores conventional token parsing and instead uses tabs or
Line 581  args(struct mdoc *m, int line, int *pos, 
Line 568  args(struct mdoc *m, int line, int *pos, 
                         return(ARGS_ERROR);                          return(ARGS_ERROR);
   
         return(ARGS_WORD);          return(ARGS_WORD);
   }
   
   /*
    * Check if the string consists only of space-separated closing
    * delimiters.
    */
   static int
   args_checkpunct(const char *p)
   {
           int              i;
           enum mdelim      d;
   
           i = 0;
   
           if (DELIM_CLOSE != mdoc_iscdelim(p[i]))
                   return(0);
   
           while ('\0' != p[i]) {
                   d = mdoc_iscdelim(p[i]);
                   if (DELIM_NONE == d || DELIM_OPEN == d)
                           break;
                   i++;
                   if ('\0' == p[i] || ' ' != p[i])
                           break;
                   i++;
                   while (p[i] && ' ' == p[i])
                           i++;
           }
   
           return('\0' == p[i]);
 }  }
   
 /*  /*

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.64

CVSweb