version 1.11, 2009/07/06 13:04:52 |
version 1.15, 2009/07/17 12:27:49 |
|
|
*/ |
*/ |
|
|
/* FIXME .Bf Li raises "macro-like parameter". */ |
/* FIXME .Bf Li raises "macro-like parameter". */ |
/* FIXME .Bl -column should deprecate old-groff syntax. */ |
|
|
|
#define ARGS_QUOTED (1 << 0) |
#define ARGS_QUOTED (1 << 0) |
#define ARGS_DELIM (1 << 1) |
#define ARGS_DELIM (1 << 1) |
#define ARGS_TABSEP (1 << 2) |
#define ARGS_TABSEP (1 << 2) |
#define ARGS_ARGVLIKE (1 << 3) |
|
|
|
#define ARGV_NONE (1 << 0) |
#define ARGV_NONE (1 << 0) |
#define ARGV_SINGLE (1 << 1) |
#define ARGV_SINGLE (1 << 1) |
Line 128 static int mdoc_argflags[MDOC_MAX] = { |
|
Line 126 static int mdoc_argflags[MDOC_MAX] = { |
|
0, /* Ot */ |
0, /* Ot */ |
ARGS_DELIM, /* Pa */ |
ARGS_DELIM, /* Pa */ |
0, /* Rv */ |
0, /* Rv */ |
ARGS_DELIM | ARGS_ARGVLIKE, /* St */ |
ARGS_DELIM, /* St */ |
ARGS_DELIM, /* Va */ |
ARGS_DELIM, /* Va */ |
ARGS_DELIM, /* Vt */ |
ARGS_DELIM, /* Vt */ |
ARGS_DELIM, /* Xr */ |
ARGS_DELIM, /* Xr */ |
Line 209 static int mdoc_argflags[MDOC_MAX] = { |
|
Line 207 static int mdoc_argflags[MDOC_MAX] = { |
|
0, /* En */ |
0, /* En */ |
0, /* Dx */ |
0, /* Dx */ |
ARGS_QUOTED, /* %Q */ |
ARGS_QUOTED, /* %Q */ |
|
0, /* br */ |
|
0, /* sp */ |
}; |
}; |
|
|
|
|
Line 231 mdoc_argv(struct mdoc *m, int line, int tok, |
|
Line 231 mdoc_argv(struct mdoc *m, int line, int tok, |
|
|
|
assert(' ' != buf[*pos]); |
assert(' ' != buf[*pos]); |
|
|
if ('-' != buf[*pos] || ARGS_ARGVLIKE & mdoc_argflags[tok]) |
|
return(ARGV_WORD); |
|
|
|
/* Parse through to the first unescaped space. */ |
/* Parse through to the first unescaped space. */ |
|
|
i = *pos; |
i = *pos; |
Line 267 mdoc_argv(struct mdoc *m, int line, int tok, |
|
Line 264 mdoc_argv(struct mdoc *m, int line, int tok, |
|
/* XXX - restore saved zeroed byte. */ |
/* XXX - restore saved zeroed byte. */ |
if (sv) |
if (sv) |
buf[*pos - 1] = sv; |
buf[*pos - 1] = sv; |
if ( ! mdoc_pwarn(m, line, i, EARGVPARM)) |
|
return(ARGV_ERROR); |
|
return(ARGV_WORD); |
return(ARGV_WORD); |
} |
} |
|
|
Line 391 mdoc_args(struct mdoc *m, int line, |
|
Line 386 mdoc_args(struct mdoc *m, int line, |
|
|
|
|
|
static int |
static int |
args(struct mdoc *m, int line, |
args(struct mdoc *m, int line, int *pos, |
int *pos, char *buf, int fl, char **v) |
char *buf, int fl, char **v) |
{ |
{ |
int i; |
int i; |
char *p, *pp; |
char *p, *pp; |
Line 406 args(struct mdoc *m, int line, |
|
Line 401 args(struct mdoc *m, int line, |
|
if ( ! mdoc_pwarn(m, line, *pos, EQUOTPARM)) |
if ( ! mdoc_pwarn(m, line, *pos, EQUOTPARM)) |
return(ARGS_ERROR); |
return(ARGS_ERROR); |
|
|
if ( ! (fl & ARGS_ARGVLIKE) && '-' == buf[*pos]) |
|
if ( ! mdoc_pwarn(m, line, *pos, EARGVPARM)) |
|
return(ARGS_ERROR); |
|
|
|
/* |
/* |
* If the first character is a delimiter and we're to look for |
* If the first character is a delimiter and we're to look for |
* delimited strings, then pass down the buffer seeing if it |
* delimited strings, then pass down the buffer seeing if it |
Line 500 args(struct mdoc *m, int line, |
|
Line 491 args(struct mdoc *m, int line, |
|
|
|
if (p && 0 == *p) |
if (p && 0 == *p) |
if ( ! mdoc_pwarn(m, line, *pos, ECOLEMPTY)) |
if ( ! mdoc_pwarn(m, line, *pos, ECOLEMPTY)) |
return(0); |
return(ARGS_ERROR); |
if (p && 0 == *p && p > *v && ' ' == *(p - 1)) |
if (p && 0 == *p && p > *v && ' ' == *(p - 1)) |
if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) |
if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) |
return(0); |
return(ARGS_ERROR); |
|
|
if (p) |
if (p) |
return(ARGS_PHRASE); |
return(ARGS_PHRASE); |
Line 515 args(struct mdoc *m, int line, |
|
Line 506 args(struct mdoc *m, int line, |
|
|
|
if (p > *v && ' ' == *(p - 1)) |
if (p > *v && ' ' == *(p - 1)) |
if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) |
if ( ! mdoc_pwarn(m, line, *pos, ETAILWS)) |
return(0); |
return(ARGS_ERROR); |
*pos += (int)(p - *v); |
*pos += (int)(p - *v); |
|
|
return(ARGS_PHRASE); |
return(ARGS_PHRASE); |