version 1.63, 2011/03/16 17:55:39 |
version 1.64, 2011/03/17 00:58:14 |
|
|
static enum mdocargt 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 args_checkpunct(const char *); |
static int argv(struct mdoc *, int, |
static int argv(struct mdoc *, int, |
struct mdoc_argv *, int *, char *); |
struct mdoc_argv *, int *, char *); |
static int argv_single(struct mdoc *, int, |
static int argv_single(struct mdoc *, int, |
Line 377 args(struct mdoc *m, int line, int *pos, |
|
Line 378 args(struct mdoc *m, int line, int *pos, |
|
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 419 args(struct mdoc *m, int line, int *pos, |
|
Line 419 args(struct mdoc *m, int line, int *pos, |
|
* we ONLY care about closing delimiters. |
* we ONLY care about closing delimiters. |
*/ |
*/ |
|
|
if ((fl & ARGS_DELIM) && DELIM_CLOSE == mdoc_iscdelim(buf[*pos])) { |
*v = &buf[*pos]; |
for (i = *pos; buf[i]; ) { |
|
d = mdoc_iscdelim(buf[i]); |
|
if (DELIM_NONE == d || DELIM_OPEN == d) |
|
break; |
|
i++; |
|
if ('\0' == buf[i] || ' ' != buf[i]) |
|
break; |
|
i++; |
|
while (buf[i] && ' ' == buf[i]) |
|
i++; |
|
} |
|
|
|
if ('\0' == buf[i]) { |
if (ARGS_DELIM & fl && args_checkpunct(&buf[*pos])) { |
*v = &buf[*pos]; |
i = strlen(&buf[*pos]) + *pos; |
if (i && ' ' != buf[i - 1]) |
if (i && ' ' != buf[i - 1]) |
return(ARGS_PUNCT); |
|
if (ARGS_NOWARN & fl) |
|
return(ARGS_PUNCT); |
|
if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) |
|
return(ARGS_ERROR); |
|
return(ARGS_PUNCT); |
return(ARGS_PUNCT); |
} |
if (ARGS_NOWARN & fl) |
|
return(ARGS_PUNCT); |
|
/* FIXME: remove conditional messages... */ |
|
if ( ! mdoc_pmsg(m, line, *pos, MANDOCERR_EOLNSPACE)) |
|
return(ARGS_ERROR); |
|
return(ARGS_PUNCT); |
} |
} |
|
|
*v = &buf[*pos]; |
|
|
|
/* |
/* |
* First handle TABSEP items, restricted to `Bl -column'. This |
* First handle TABSEP items, restricted to `Bl -column'. This |
* ignores conventional token parsing and instead uses tabs or |
* ignores conventional token parsing and instead uses tabs or |
Line 581 args(struct mdoc *m, int line, int *pos, |
|
Line 568 args(struct mdoc *m, int line, int *pos, |
|
return(ARGS_ERROR); |
return(ARGS_ERROR); |
|
|
return(ARGS_WORD); |
return(ARGS_WORD); |
|
} |
|
|
|
/* |
|
* Check if the string consists only of space-separated closing |
|
* delimiters. |
|
*/ |
|
static int |
|
args_checkpunct(const char *p) |
|
{ |
|
int i; |
|
enum mdelim d; |
|
|
|
i = 0; |
|
|
|
if (DELIM_CLOSE != mdoc_iscdelim(p[i])) |
|
return(0); |
|
|
|
while ('\0' != p[i]) { |
|
d = mdoc_iscdelim(p[i]); |
|
if (DELIM_NONE == d || DELIM_OPEN == d) |
|
break; |
|
i++; |
|
if ('\0' == p[i] || ' ' != p[i]) |
|
break; |
|
i++; |
|
while (p[i] && ' ' == p[i]) |
|
i++; |
|
} |
|
|
|
return('\0' == p[i]); |
} |
} |
|
|
/* |
/* |