[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.50 and 1.56

version 1.50, 2010/05/30 23:59:59 version 1.56, 2010/07/13 23:53:20
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 210  static int mdoc_argflags[MDOC_MAX] = {
Line 210  static int mdoc_argflags[MDOC_MAX] = {
         0, /* br */          0, /* br */
         0, /* sp */          0, /* sp */
         0, /* %U */          0, /* %U */
           0, /* Ta */
 };  };
   
   
Line 226  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 247  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 347  mdoc_args(struct mdoc *m, int line, int *pos, 
Line 348  mdoc_args(struct mdoc *m, int line, int *pos, 
         if (MDOC_It != tok)          if (MDOC_It != tok)
                 return(args(m, line, pos, buf, fl, v));                  return(args(m, line, pos, buf, fl, v));
   
           /*
            * We know that we're in an `It', so it's reasonable to expect
            * us to be sitting in a `Bl'.  Someday this may not be the case
            * (if we allow random `It's sitting out there), so provide a
            * safe fall-back into the default behaviour.
            */
   
         for (n = m->last; n; n = n->parent)          for (n = m->last; n; n = n->parent)
                 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 364  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 383  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 411  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 424  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 455  args(struct mdoc *m, int line, int *pos, 
Line 464  args(struct mdoc *m, int line, int *pos, 
                                         break;                                          break;
                                 if (pp > *v && ' ' != *(pp - 1))                                  if (pp > *v && ' ' != *(pp - 1))
                                         continue;                                          continue;
                                 if (' ' == *(pp + 2) || 0 == *(pp + 2))                                  if (' ' == *(pp + 2) || '\0' == *(pp + 2))
                                         break;                                          break;
                         }                          }
   
Line 482  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 555  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])

Legend:
Removed from v.1.50  
changed lines
  Added in v.1.56

CVSweb