version 1.6, 2009/07/12 21:08:29 |
version 1.7, 2009/07/12 21:45:44 |
|
|
static int argv_multi(struct mdoc *, int, |
static int argv_multi(struct mdoc *, int, |
struct mdoc_argv *, int *, char *); |
struct mdoc_argv *, int *, char *); |
static int pwarn(struct mdoc *, int, int, enum mwarn); |
static int pwarn(struct mdoc *, int, int, enum mwarn); |
static int perr(struct mdoc *, int, int, enum merr); |
|
|
|
#define verr(m, t) perr((m), (m)->last->line, (m)->last->pos, (t)) |
|
|
|
/* Per-argument flags. */ |
/* Per-argument flags. */ |
|
|
static int mdoc_argvflags[MDOC_ARG_MAX] = { |
static int mdoc_argvflags[MDOC_ARG_MAX] = { |
|
|
} |
} |
|
|
|
|
|
|
static int |
static int |
perr(struct mdoc *mdoc, int line, int pos, enum merr code) |
|
{ |
|
char *p; |
|
|
|
p = NULL; |
|
switch (code) { |
|
case (EMALLOC): |
|
p = "memory exhausted"; |
|
break; |
|
case (EQUOTTERM): |
|
p = "unterminated quoted parameter"; |
|
break; |
|
case (EARGVAL): |
|
p = "argument requires a value"; |
|
break; |
|
} |
|
assert(p); |
|
return(mdoc_perr(mdoc, line, pos, p)); |
|
} |
|
|
|
|
|
static int |
|
pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn code) |
pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn code) |
{ |
{ |
char *p; |
char *p; |
|
|
(*pos)++; |
(*pos)++; |
|
|
if (0 == buf[*pos]) { |
if (0 == buf[*pos]) { |
(void)perr(mdoc, line, *pos, EQUOTTERM); |
(void)mdoc_perr(mdoc, line, *pos, EQUOTTERM); |
return(ARGS_ERROR); |
return(ARGS_ERROR); |
} |
} |
|
|
|
|
if (ARGS_ERROR == c) |
if (ARGS_ERROR == c) |
return(0); |
return(0); |
if (ARGS_EOLN == c) |
if (ARGS_EOLN == c) |
return(perr(m, line, ppos, EARGVAL)); |
return(mdoc_perr(m, line, ppos, EARGVAL)); |
|
|
v->sz = 1; |
v->sz = 1; |
if (NULL == (v->value = calloc(1, sizeof(char *)))) |
if (NULL == (v->value = calloc(1, sizeof(char *)))) |