=================================================================== RCS file: /cvs/mandoc/mdoc_argv.c,v retrieving revision 1.39 retrieving revision 1.42 diff -u -p -r1.39 -r1.42 --- mandoc/mdoc_argv.c 2010/05/07 05:48:29 1.39 +++ mandoc/mdoc_argv.c 2010/05/07 15:49:36 1.42 @@ -1,4 +1,4 @@ -/* $Id: mdoc_argv.c,v 1.39 2010/05/07 05:48:29 kristaps Exp $ */ +/* $Id: mdoc_argv.c,v 1.42 2010/05/07 15:49:36 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -217,7 +217,7 @@ static int mdoc_argflags[MDOC_MAX] = { * [value0...], which may either have a single mandatory value, at least * one mandatory value, an optional single value, or no value. */ -int +enum margverr mdoc_argv(struct mdoc *m, int line, enum mdoct tok, struct mdoc_arg **v, int *pos, char *buf) { @@ -378,6 +378,7 @@ args(struct mdoc *m, int line, int *pos, { int i; char *p, *pp; + enum margserr rc; /* * Parse out the terms (like `val' in `.Xx -arg val' or simply @@ -397,7 +398,7 @@ args(struct mdoc *m, int line, int *pos, assert(*pos); assert(' ' != buf[*pos]); - if (0 == buf[*pos]) + if ('\0' == buf[*pos]) return(ARGS_EOLN); /* @@ -453,14 +454,19 @@ args(struct mdoc *m, int line, int *pos, break; } + /* By default, assume a phrase. */ + rc = ARGS_PHRASE; + /* * Adjust new-buffer position to be beyond delimiter * mark (e.g., Ta -> end + 2). */ if (p && pp) { *pos += pp < p ? 2 : 1; + rc = pp < p ? ARGS_PHRASE : ARGS_PPHRASE; p = pp < p ? pp : p; } else if (p && ! pp) { + rc = ARGS_PPHRASE; *pos += 1; } else if (pp && ! p) { p = pp; @@ -488,7 +494,7 @@ args(struct mdoc *m, int line, int *pos, for (pp = &buf[*pos]; ' ' == *pp; pp++, (*pos)++) /* Skip ahead. */ ; - return(ARGS_PHRASE); + return(rc); } /*