[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.64 and 1.67

version 1.64, 2011/03/17 00:58:14 version 1.67, 2011/03/17 10:41:18
Line 405  args(struct mdoc *m, int line, int *pos, 
Line 405  args(struct mdoc *m, int line, int *pos, 
                  * is unterminated.                   * is unterminated.
                  */                   */
                 if (MDOC_PHRASELIT & m->flags)                  if (MDOC_PHRASELIT & m->flags)
                         if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_BADQUOTE))                          mdoc_pmsg(m, line, *pos, MANDOCERR_BADQUOTE);
                                 return(ARGS_ERROR);  
   
                 m->flags &= ~MDOC_PHRASELIT;                  m->flags &= ~MDOC_PHRASELIT;
                 return(ARGS_EOLN);                  return(ARGS_EOLN);
         }          }
   
         /*  
          * If the first character is a closing delimiter and we're to  
          * look for delimited strings, then pass down the buffer seeing  
          * if it follows the pattern of [[::delim::][ ]+]+.  Note that  
          * we ONLY care about closing delimiters.  
          */  
   
         *v = &buf[*pos];          *v = &buf[*pos];
   
         if (ARGS_DELIM & fl && args_checkpunct(&buf[*pos])) {          if (ARGS_DELIM & fl && args_checkpunct(&buf[*pos])) {
Line 427  args(struct mdoc *m, int line, int *pos, 
Line 419  args(struct mdoc *m, int line, int *pos, 
                         return(ARGS_PUNCT);                          return(ARGS_PUNCT);
                 if (ARGS_NOWARN & fl)                  if (ARGS_NOWARN & fl)
                         return(ARGS_PUNCT);                          return(ARGS_PUNCT);
                 /* FIXME: remove conditional messages... */                  mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE);
                 if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))  
                         return(ARGS_ERROR);  
                 return(ARGS_PUNCT);                  return(ARGS_PUNCT);
         }          }
   
Line 480  args(struct mdoc *m, int line, int *pos, 
Line 470  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))                          mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE);
                                 return(ARGS_ERROR);  
   
                 *pos += (int)(p - *v);                  *pos += (int)(p - *v);
   
Line 525  args(struct mdoc *m, int line, int *pos, 
Line 514  args(struct mdoc *m, int line, int *pos, 
                 if ('\0' == buf[*pos]) {                  if ('\0' == buf[*pos]) {
                         if (ARGS_NOWARN & fl || MDOC_PPHRASE & m->flags)                          if (ARGS_NOWARN & fl || MDOC_PPHRASE & m->flags)
                                 return(ARGS_QWORD);                                  return(ARGS_QWORD);
                         if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_BADQUOTE))                          mdoc_pmsg(m, line, *pos, MANDOCERR_BADQUOTE);
                                 return(ARGS_ERROR);  
                         return(ARGS_QWORD);                          return(ARGS_QWORD);
                 }                  }
   
Line 540  args(struct mdoc *m, int line, int *pos, 
Line 528  args(struct mdoc *m, int line, int *pos, 
                         (*pos)++;                          (*pos)++;
   
                 if (0 == buf[*pos] && ! (ARGS_NOWARN & fl))                  if (0 == buf[*pos] && ! (ARGS_NOWARN & fl))
                         if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))                          mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE);
                                 return(ARGS_ERROR);  
   
                 return(ARGS_QWORD);                  return(ARGS_QWORD);
         }          }
Line 564  args(struct mdoc *m, int line, int *pos, 
Line 551  args(struct mdoc *m, int line, int *pos, 
                 (*pos)++;                  (*pos)++;
   
         if ('\0' == buf[*pos] && ! (ARGS_NOWARN & fl))          if ('\0' == buf[*pos] && ! (ARGS_NOWARN & fl))
                 if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))                  mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE);
                         return(ARGS_ERROR);  
   
         return(ARGS_WORD);          return(ARGS_WORD);
 }  }
   
 /*  /*
  * Check if the string consists only of space-separated closing   * Check if the string consists only of space-separated closing
  * delimiters.   * delimiters.  This is a bit of a dance: the first must be a close
    * delimiter, but it may be followed by middle delimiters.  Arbitrary
    * whitespace may separate these tokens.
  */   */
 static int  static int
 args_checkpunct(const char *p)  args_checkpunct(const char *p)
 {  {
         int              i;          int              i, j;
           char             buf[DELIMSZ];
         enum mdelim      d;          enum mdelim      d;
   
         i = 0;          i = 0;
   
         if (DELIM_CLOSE != mdoc_iscdelim(p[i]))          /* First token must be a close-delimiter. */
   
           for (j = 0; p[i] && ' ' != p[i] && j < DELIMSZ; j++, i++)
                   buf[j] = p[i];
   
           if (DELIMSZ == j)
                 return(0);                  return(0);
   
         while ('\0' != p[i]) {          buf[j] = '\0';
                 d = mdoc_iscdelim(p[i]);          if (DELIM_CLOSE != mandoc_isdelim(buf))
                 if (DELIM_NONE == d || DELIM_OPEN == d)                  return(0);
                         break;  
           while (' ' == p[i])
                 i++;                  i++;
                 if ('\0' == p[i] || ' ' != p[i])  
                         break;          /* Remaining must NOT be open/none. */
                 i++;  
                 while (p[i] && ' ' == p[i])          while (p[i]) {
                   j = 0;
                   while (p[i] && ' ' != p[i] && j < DELIMSZ)
                           buf[j++] = p[i++];
   
                   if (DELIMSZ == j)
                           return(0);
   
                   buf[j] = '\0';
                   d = mandoc_isdelim(buf);
                   if (DELIM_NONE == d || DELIM_OPEN == d)
                           return(0);
   
                   while (' ' == p[i])
                         i++;                          i++;
         }          }
   

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

CVSweb