[BACK]Return to man_argv.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/Attic/man_argv.c between version 1.4 and 1.5

version 1.4, 2010/06/19 20:46:28 version 1.5, 2011/01/03 22:42:37
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2011 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * 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 21 
Line 21 
 #include <sys/types.h>  #include <sys/types.h>
   
 #include <assert.h>  #include <assert.h>
 #include <stdlib.h>  
 #include <string.h>  
   
 #include "mandoc.h"  #include "mandoc.h"
 #include "libman.h"  #include "libman.h"
   #include "libmandoc.h"
   
   
 int  int
 man_args(struct man *m, int line, int *pos, char *buf, char **v)  man_args(struct man *m, int line, int *pos, char *buf, char **v)
 {  {
           char     *start;
   
         assert(*pos);          assert(*pos);
         assert(' ' != buf[*pos]);          *v = start = buf + *pos;
           assert(' ' != *start);
   
         if (0 == buf[*pos])          if ('\0' == *start)
                 return(ARGS_EOLN);                  return(ARGS_EOLN);
   
         *v = &buf[*pos];          *v = mandoc_getarg(v, m->msg, m->data, line, pos);
           return('"' == *start ? ARGS_QWORD : ARGS_WORD);
         /*  
          * Process a quoted literal.  A quote begins with a double-quote  
          * and ends with a double-quote NOT preceded by a double-quote.  
          * Whitespace is NOT involved in literal termination.  
          */  
   
         if ('\"' == buf[*pos]) {  
                 *v = &buf[++(*pos)];  
   
                 for ( ; buf[*pos]; (*pos)++) {  
                         if ('\"' != buf[*pos])  
                                 continue;  
                         if ('\"' != buf[*pos + 1])  
                                 break;  
                         (*pos)++;  
                 }  
   
                 if (0 == buf[*pos]) {  
                         if ( ! man_pmsg(m, line, *pos, MANDOCERR_BADQUOTE))  
                                 return(ARGS_ERROR);  
                         return(ARGS_QWORD);  
                 }  
   
                 buf[(*pos)++] = 0;  
   
                 if (0 == buf[*pos])  
                         return(ARGS_QWORD);  
   
                 while (' ' == buf[*pos])  
                         (*pos)++;  
   
                 if (0 == buf[*pos])  
                         if ( ! man_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))  
                                 return(ARGS_ERROR);  
   
                 return(ARGS_QWORD);  
         }  
   
         /*  
          * A non-quoted term progresses until either the end of line or  
          * a non-escaped whitespace.  
          */  
   
         for ( ; buf[*pos]; (*pos)++)  
                 if (' ' == buf[*pos] && '\\' != buf[*pos - 1])  
                         break;  
   
         if (0 == buf[*pos])  
                 return(ARGS_WORD);  
   
         buf[(*pos)++] = 0;  
   
         while (' ' == buf[*pos])  
                 (*pos)++;  
   
         if (0 == buf[*pos])  
                 if ( ! man_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE))  
                         return(ARGS_ERROR);  
   
         return(ARGS_WORD);  
 }  }
   

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

CVSweb