[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.22 and 1.26

version 1.22, 2009/08/19 14:44:35 version 1.26, 2009/09/24 13:03:32
Line 32 
Line 32 
  * There's no limit to the number or arguments that may be allocated.   * There's no limit to the number or arguments that may be allocated.
  */   */
   
 #define ARGS_DELIM      (1 << 1)  
 #define ARGS_TABSEP     (1 << 2)  
   
 #define ARGV_NONE       (1 << 0)  #define ARGV_NONE       (1 << 0)
 #define ARGV_SINGLE     (1 << 1)  #define ARGV_SINGLE     (1 << 1)
 #define ARGV_MULTI      (1 << 2)  #define ARGV_MULTI      (1 << 2)
Line 63  static int mdoc_argvflags[MDOC_ARG_MAX] = {
Line 60  static int mdoc_argvflags[MDOC_ARG_MAX] = {
         ARGV_NONE,      /* MDOC_Unfilled */          ARGV_NONE,      /* MDOC_Unfilled */
         ARGV_NONE,      /* MDOC_Literal */          ARGV_NONE,      /* MDOC_Literal */
         ARGV_NONE,      /* MDOC_File */          ARGV_NONE,      /* MDOC_File */
         ARGV_SINGLE,    /* MDOC_Offset */          ARGV_OPT_SINGLE, /* MDOC_Offset */
         ARGV_NONE,      /* MDOC_Bullet */          ARGV_NONE,      /* MDOC_Bullet */
         ARGV_NONE,      /* MDOC_Dash */          ARGV_NONE,      /* MDOC_Dash */
         ARGV_NONE,      /* MDOC_Hyphen */          ARGV_NONE,      /* MDOC_Hyphen */
Line 77  static int mdoc_argvflags[MDOC_ARG_MAX] = {
Line 74  static int mdoc_argvflags[MDOC_ARG_MAX] = {
         ARGV_MULTI,     /* MDOC_Column */          ARGV_MULTI,     /* MDOC_Column */
         ARGV_SINGLE,    /* MDOC_Width */          ARGV_SINGLE,    /* MDOC_Width */
         ARGV_NONE,      /* MDOC_Compact */          ARGV_NONE,      /* MDOC_Compact */
         ARGV_OPT_SINGLE, /* MDOC_Std */          ARGV_NONE,      /* MDOC_Std */
         ARGV_NONE,      /* MDOC_Filled */          ARGV_NONE,      /* MDOC_Filled */
         ARGV_NONE,      /* MDOC_Words */          ARGV_NONE,      /* MDOC_Words */
         ARGV_NONE,      /* MDOC_Emphasis */          ARGV_NONE,      /* MDOC_Emphasis */
Line 312  mdoc_argv_free(struct mdoc_arg *p)
Line 309  mdoc_argv_free(struct mdoc_arg *p)
         for (i = 0; i < (int)p->argc; i++) {          for (i = 0; i < (int)p->argc; i++) {
                 if (0 == p->argv[i].sz)                  if (0 == p->argv[i].sz)
                         continue;                          continue;
                   if (NULL == p->argv[i].value)
                           continue;
   
                 /* LINTED */                  /* LINTED */
                 for (j = 0; j < (int)p->argv[i].sz; j++)                  for (j = 0; j < (int)p->argv[i].sz; j++)
                         free(p->argv[i].value[j]);                          if (p->argv[i].value[j])
                                   free(p->argv[i].value[j]);
   
                 free(p->argv[i].value);                  free(p->argv[i].value);
         }          }
Line 325  mdoc_argv_free(struct mdoc_arg *p)
Line 326  mdoc_argv_free(struct mdoc_arg *p)
   
   
 int  int
 mdoc_zargs(struct mdoc *m, int line, int *pos, char *buf, char **v)  mdoc_zargs(struct mdoc *m, int line, int *pos,
                   char *buf, int flags, char **v)
 {  {
   
         return(args(m, line, pos, buf, 0, v));          return(args(m, line, pos, buf, flags, v));
 }  }
   
   
Line 377  args(struct mdoc *m, int line, int *pos, 
Line 379  args(struct mdoc *m, int line, int *pos, 
         int               i;          int               i;
         char             *p, *pp;          char             *p, *pp;
   
           /*
            * Parse out the terms (like `val' in `.Xx -arg val' or simply
            * `.Xx val'), which can have all sorts of properties:
            *
            *   ARGS_DELIM: use special handling if encountering trailing
            *   delimiters in the form of [[::delim::][ ]+]+.
            *
            *   ARGS_NOWARN: don't post warnings.  This is only used when
            *   re-parsing delimiters, as the warnings have already been
            *   posted.
            *
            *   ARGS_TABSEP: use special handling for tab/`Ta' separated
            *   phrases like in `Bl -column'.
            */
   
         assert(*pos);          assert(*pos);
         assert(' ' != buf[*pos]);          assert(' ' != buf[*pos]);
   
Line 401  args(struct mdoc *m, int line, int *pos, 
Line 418  args(struct mdoc *m, int line, int *pos, 
                                 i++;                                  i++;
                 }                  }
   
                 /* FIXME: warn about trailing whitespace. */  
   
                 if (0 == buf[i]) {                  if (0 == buf[i]) {
                         *v = &buf[*pos];                          *v = &buf[*pos];
                           if (' ' != buf[i - 1])
                                   return(ARGS_PUNCT);
                           if (ARGS_NOWARN & fl)
                                   return(ARGS_PUNCT);
                           if ( ! mdoc_pwarn(m, line, *pos, ETAILWS))
                                   return(ARGS_ERROR);
                         return(ARGS_PUNCT);                          return(ARGS_PUNCT);
                 }                  }
         }          }
Line 448  args(struct mdoc *m, int line, int *pos, 
Line 469  args(struct mdoc *m, int line, int *pos, 
                         p = strchr(*v, 0);                          p = strchr(*v, 0);
   
                 /* Whitespace check for eoln case... */                  /* Whitespace check for eoln case... */
                 if (0 == *p && ' ' == *(p - 1))                  if (0 == *p && ' ' == *(p - 1) && ! (ARGS_NOWARN & fl))
                         if ( ! mdoc_pwarn(m, line, *pos, ETAILWS))                          if ( ! mdoc_pwarn(m, line, *pos, ETAILWS))
                                 return(ARGS_ERROR);                                  return(ARGS_ERROR);
   
Line 488  args(struct mdoc *m, int line, int *pos, 
Line 509  args(struct mdoc *m, int line, int *pos, 
                 }                  }
   
                 if (0 == buf[*pos]) {                  if (0 == buf[*pos]) {
                           if (ARGS_NOWARN & fl)
                                   return(ARGS_QWORD);
                         if ( ! mdoc_pwarn(m, line, *pos, EQUOTTERM))                          if ( ! mdoc_pwarn(m, line, *pos, EQUOTTERM))
                                 return(ARGS_ERROR);                                  return(ARGS_ERROR);
                         return(ARGS_QWORD);                          return(ARGS_QWORD);
Line 501  args(struct mdoc *m, int line, int *pos, 
Line 524  args(struct mdoc *m, int line, int *pos, 
                 while (' ' == buf[*pos])                  while (' ' == buf[*pos])
                         (*pos)++;                          (*pos)++;
   
                 if (0 == buf[*pos])                  if (0 == buf[*pos] && ! (ARGS_NOWARN & fl))
                         if ( ! mdoc_pwarn(m, line, *pos, ETAILWS))                          if ( ! mdoc_pwarn(m, line, *pos, ETAILWS))
                                 return(ARGS_ERROR);                                  return(ARGS_ERROR);
   
Line 525  args(struct mdoc *m, int line, int *pos, 
Line 548  args(struct mdoc *m, int line, int *pos, 
         while (' ' == buf[*pos])          while (' ' == buf[*pos])
                 (*pos)++;                  (*pos)++;
   
         if (0 == buf[*pos])          if (0 == buf[*pos] && ! (ARGS_NOWARN & fl))
                 if ( ! mdoc_pwarn(m, line, *pos, ETAILWS))                  if ( ! mdoc_pwarn(m, line, *pos, ETAILWS))
                         return(ARGS_ERROR);                          return(ARGS_ERROR);
   

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.26

CVSweb