[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.51 and 1.57

version 1.51, 2010/05/31 10:28:04 version 1.57, 2010/07/21 09:08:26
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>   * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 45 
Line 45 
   
 #define MULTI_STEP       5  #define MULTI_STEP       5
   
 static  int              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              argv(struct mdoc *, int,  static  int              argv(struct mdoc *, int,
Line 227  mdoc_argv(struct mdoc *m, int line, enum mdoct tok,
Line 227  mdoc_argv(struct mdoc *m, int line, enum mdoct tok,
         struct mdoc_argv tmp;          struct mdoc_argv tmp;
         struct mdoc_arg  *arg;          struct mdoc_arg  *arg;
   
         if (0 == buf[*pos])          if ('\0' == buf[*pos])
                 return(ARGV_EOLN);                  return(ARGV_EOLN);
   
         assert(' ' != buf[*pos]);          assert(' ' != buf[*pos]);
Line 248  mdoc_argv(struct mdoc *m, int line, enum mdoct tok,
Line 248  mdoc_argv(struct mdoc *m, int line, enum mdoct tok,
   
         /* XXX - save zeroed byte, if not an argument. */          /* XXX - save zeroed byte, if not an argument. */
   
         sv = 0;          sv = '\0';
         if (buf[*pos]) {          if (buf[*pos]) {
                 sv = buf[*pos];                  sv = buf[*pos];
                 buf[(*pos)++] = 0;                  buf[(*pos)++] = '\0';
         }          }
   
         (void)memset(&tmp, 0, sizeof(struct mdoc_argv));          (void)memset(&tmp, 0, sizeof(struct mdoc_argv));
Line 313  mdoc_argv_free(struct mdoc_arg *p)
Line 313  mdoc_argv_free(struct mdoc_arg *p)
 void  void
 mdoc_argn_free(struct mdoc_arg *p, int iarg)  mdoc_argn_free(struct mdoc_arg *p, int iarg)
 {  {
         struct mdoc_argv *arg = &p->argv[iarg];          struct mdoc_argv *arg = &p->argv[iarg]; /* FIXME: decl/assign */
         int               j;          int               j;
   
         if (arg->sz && arg->value) {          if (arg->sz && arg->value) {
Line 359  mdoc_args(struct mdoc *m, int line, int *pos, 
Line 359  mdoc_args(struct mdoc *m, int line, int *pos, 
                 if (MDOC_Bl == n->tok)                  if (MDOC_Bl == n->tok)
                         break;                          break;
   
         if (n && LIST_column == n->data.list) {          assert(n->data.Bl);
           if (n && LIST_column == n->data.Bl->type) {
                 fl |= ARGS_TABSEP;                  fl |= ARGS_TABSEP;
                 fl &= ~ARGS_DELIM;                  fl &= ~ARGS_DELIM;
         }          }
Line 372  static enum margserr
Line 373  static enum margserr
 args(struct mdoc *m, int line, int *pos,  args(struct mdoc *m, int line, int *pos,
                 char *buf, int fl, char **v)                  char *buf, int fl, char **v)
 {  {
         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 391  args(struct mdoc *m, int line, int *pos, 
Line 393  args(struct mdoc *m, int line, int *pos, 
          *   phrases like in `Bl -column'.           *   phrases like in `Bl -column'.
          */           */
   
         assert(*pos);  
         assert(' ' != buf[*pos]);          assert(' ' != buf[*pos]);
   
         if ('\0' == buf[*pos]) {          if ('\0' == buf[*pos]) {
Line 419  args(struct mdoc *m, int line, int *pos, 
Line 420  args(struct mdoc *m, int line, int *pos, 
   
         if ((fl & ARGS_DELIM) && DELIM_CLOSE == mdoc_iscdelim(buf[*pos])) {          if ((fl & ARGS_DELIM) && DELIM_CLOSE == mdoc_iscdelim(buf[*pos])) {
                 for (i = *pos; buf[i]; ) {                  for (i = *pos; buf[i]; ) {
                         enum mdelim d = mdoc_iscdelim(buf[i]);                          d = mdoc_iscdelim(buf[i]);
                         if (DELIM_NONE == d || DELIM_OPEN == d)                          if (DELIM_NONE == d || DELIM_OPEN == d)
                                 break;                                  break;
                         i++;                          i++;
Line 432  args(struct mdoc *m, int line, int *pos, 
Line 433  args(struct mdoc *m, int line, int *pos, 
   
                 if ('\0' == buf[i]) {                  if ('\0' == buf[i]) {
                         *v = &buf[*pos];                          *v = &buf[*pos];
                         if (' ' != buf[i - 1])                          if (i && ' ' != buf[i - 1])
                                 return(ARGS_PUNCT);                                  return(ARGS_PUNCT);
                         if (ARGS_NOWARN & fl)                          if (ARGS_NOWARN & fl)
                                 return(ARGS_PUNCT);                                  return(ARGS_PUNCT);
Line 490  args(struct mdoc *m, int line, int *pos, 
Line 491  args(struct mdoc *m, int line, int *pos, 
                 }                  }
   
                 /* Whitespace check for eoln case... */                  /* Whitespace check for eoln case... */
                 if (0 == *p && ' ' == *(p - 1) && ! (ARGS_NOWARN & fl))                  if ('\0' == *p && ' ' == *(p - 1) && ! (ARGS_NOWARN & fl))
                         if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))                          if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))
                                 return(ARGS_ERROR);                                  return(ARGS_ERROR);
   
Line 563  args(struct mdoc *m, int line, int *pos, 
Line 564  args(struct mdoc *m, int line, int *pos, 
          */           */
   
         for ( ; buf[*pos]; (*pos)++)          for ( ; buf[*pos]; (*pos)++)
                 if (' ' == buf[*pos] && '\\' != buf[*pos - 1])                  if (*pos && ' ' == buf[*pos] && '\\' != buf[*pos - 1])
                         break;                          break;
   
         if ('\0' == buf[*pos])          if ('\0' == buf[*pos])
Line 582  args(struct mdoc *m, int line, int *pos, 
Line 583  args(struct mdoc *m, int line, int *pos, 
 }  }
   
   
 static int  static enum mdocargt
 argv_a2arg(enum mdoct tok, const char *p)  argv_a2arg(enum mdoct tok, const char *p)
 {  {
   

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.57

CVSweb