version 1.36, 2009/03/05 12:08:53 |
version 1.38, 2009/03/06 14:13:47 |
|
|
#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) |
|
|
static int argv_a2arg(int, const char *); |
static int argv_a2arg(int, const char *); |
static int args(struct mdoc *, int, int *, |
static int args(struct mdoc *, int, int *, |
char *, int, char **); |
char *, int, char **); |
static int argv(struct mdoc *, int, |
static int argv(struct mdoc *, int, int, |
struct mdoc_arg *, int *, char *); |
struct mdoc_arg *, int *, char *); |
static int argv_single(struct mdoc *, int, |
static int argv_single(struct mdoc *, int, |
struct mdoc_arg *, int *, char *); |
struct mdoc_arg *, int *, char *); |
Line 90 static int mdoc_argvflags[MDOC_ARG_MAX] = { |
|
Line 91 static int mdoc_argvflags[MDOC_ARG_MAX] = { |
|
ARGV_MULTI, /* MDOC_Column */ |
ARGV_MULTI, /* MDOC_Column */ |
ARGV_SINGLE, /* MDOC_Width */ |
ARGV_SINGLE, /* MDOC_Width */ |
ARGV_NONE, /* MDOC_Compact */ |
ARGV_NONE, /* MDOC_Compact */ |
ARGV_OPT_SINGLE, /* MDOC_Std */ |
ARGV_SINGLE, /* MDOC_Std */ |
ARGV_NONE, /* MDOC_p1003_1_88 */ |
|
ARGV_NONE, /* MDOC_p1003_1_90 */ |
|
ARGV_NONE, /* MDOC_p1003_1_96 */ |
|
ARGV_NONE, /* MDOC_p1003_1_2001 */ |
|
ARGV_NONE, /* MDOC_p1003_1_2004 */ |
|
ARGV_NONE, /* MDOC_p1003_1 */ |
|
ARGV_NONE, /* MDOC_p1003_1b */ |
|
ARGV_NONE, /* MDOC_p1003_1b_93 */ |
|
ARGV_NONE, /* MDOC_p1003_1c_95 */ |
|
ARGV_NONE, /* MDOC_p1003_1g_2000 */ |
|
ARGV_NONE, /* MDOC_p1003_2_92 */ |
|
ARGV_NONE, /* MDOC_p1387_2_95 */ |
|
ARGV_NONE, /* MDOC_p1003_2 */ |
|
ARGV_NONE, /* MDOC_p1387_2 */ |
|
ARGV_NONE, /* MDOC_isoC_90 */ |
|
ARGV_NONE, /* MDOC_isoC_amd1 */ |
|
ARGV_NONE, /* MDOC_isoC_tcor1 */ |
|
ARGV_NONE, /* MDOC_isoC_tcor2 */ |
|
ARGV_NONE, /* MDOC_isoC_99 */ |
|
ARGV_NONE, /* MDOC_ansiC */ |
|
ARGV_NONE, /* MDOC_ansiC_89 */ |
|
ARGV_NONE, /* MDOC_ansiC_99 */ |
|
ARGV_NONE, /* MDOC_ieee754 */ |
|
ARGV_NONE, /* MDOC_iso8802_3 */ |
|
ARGV_NONE, /* MDOC_xpg3 */ |
|
ARGV_NONE, /* MDOC_xpg4 */ |
|
ARGV_NONE, /* MDOC_xpg4_2 */ |
|
ARGV_NONE, /* MDOC_xpg4_3 */ |
|
ARGV_NONE, /* MDOC_xbd5 */ |
|
ARGV_NONE, /* MDOC_xcu5 */ |
|
ARGV_NONE, /* MDOC_xsh5 */ |
|
ARGV_NONE, /* MDOC_xns5 */ |
|
ARGV_NONE, /* MDOC_xns5_2d2_0 */ |
|
ARGV_NONE, /* MDOC_xcurses4_2 */ |
|
ARGV_NONE, /* MDOC_susv2 */ |
|
ARGV_NONE, /* MDOC_susv3 */ |
|
ARGV_NONE, /* MDOC_svid4 */ |
|
ARGV_NONE, /* MDOC_Filled */ |
ARGV_NONE, /* MDOC_Filled */ |
ARGV_NONE, /* MDOC_Words */ |
ARGV_NONE, /* MDOC_Words */ |
ARGV_NONE, /* MDOC_Emphasis */ |
ARGV_NONE, /* MDOC_Emphasis */ |
Line 172 static int mdoc_argflags[MDOC_MAX] = { |
|
Line 136 static int mdoc_argflags[MDOC_MAX] = { |
|
0, /* Ot */ |
0, /* Ot */ |
ARGS_DELIM, /* Pa */ |
ARGS_DELIM, /* Pa */ |
0, /* Rv */ |
0, /* Rv */ |
ARGS_DELIM, /* St */ |
ARGS_DELIM | ARGS_ARGVLIKE, /* St */ |
ARGS_DELIM, /* Va */ |
ARGS_DELIM, /* Va */ |
ARGS_DELIM, /* Vt */ |
ARGS_DELIM, /* Vt */ |
ARGS_DELIM, /* Xr */ |
ARGS_DELIM, /* Xr */ |
Line 241 static int mdoc_argflags[MDOC_MAX] = { |
|
Line 205 static int mdoc_argflags[MDOC_MAX] = { |
|
0, /* Hf */ |
0, /* Hf */ |
0, /* Fr */ |
0, /* Fr */ |
0, /* Ud */ |
0, /* Ud */ |
|
0, /* Lb */ |
}; |
}; |
|
|
|
|
Line 373 args(struct mdoc *mdoc, int line, |
|
Line 338 args(struct mdoc *mdoc, int line, |
|
if ( ! pwarn(mdoc, line, *pos, WQUOTPARM)) |
if ( ! pwarn(mdoc, line, *pos, WQUOTPARM)) |
return(ARGS_ERROR); |
return(ARGS_ERROR); |
|
|
if ('-' == buf[*pos]) |
if ( ! (fl & ARGS_ARGVLIKE) && '-' == buf[*pos]) |
if ( ! pwarn(mdoc, line, *pos, WARGVPARM)) |
if ( ! pwarn(mdoc, line, *pos, WARGVPARM)) |
return(ARGS_ERROR); |
return(ARGS_ERROR); |
|
|
Line 389 args(struct mdoc *mdoc, int line, |
|
Line 354 args(struct mdoc *mdoc, int line, |
|
break; |
break; |
i++; |
i++; |
/* There must be at least one space... */ |
/* There must be at least one space... */ |
if (0 == buf[i] || ! isspace((int)buf[i])) |
if (0 == buf[i] || ! isspace((u_char)buf[i])) |
break; |
break; |
i++; |
i++; |
while (buf[i] && isspace((int)buf[i])) |
while (buf[i] && isspace((u_char)buf[i])) |
i++; |
i++; |
} |
} |
if (0 == buf[i]) { |
if (0 == buf[i]) { |
Line 500 args(struct mdoc *mdoc, int line, |
|
Line 465 args(struct mdoc *mdoc, int line, |
|
|
|
if ( ! (ARGS_TABSEP & fl)) |
if ( ! (ARGS_TABSEP & fl)) |
while (buf[*pos]) { |
while (buf[*pos]) { |
if (isspace((int)buf[*pos])) |
if (isspace((u_char)buf[*pos])) |
if ('\\' != buf[*pos - 1]) |
if ('\\' != buf[*pos - 1]) |
break; |
break; |
(*pos)++; |
(*pos)++; |
Line 515 args(struct mdoc *mdoc, int line, |
|
Line 480 args(struct mdoc *mdoc, int line, |
|
return(ARGS_WORD); |
return(ARGS_WORD); |
|
|
if ( ! (ARGS_TABSEP & fl)) |
if ( ! (ARGS_TABSEP & fl)) |
while (buf[*pos] && isspace((int)buf[*pos])) |
while (buf[*pos] && isspace((u_char)buf[*pos])) |
(*pos)++; |
(*pos)++; |
|
|
if (buf[*pos]) |
if (buf[*pos]) |
Line 547 args(struct mdoc *mdoc, int line, |
|
Line 512 args(struct mdoc *mdoc, int line, |
|
if (0 == buf[*pos]) |
if (0 == buf[*pos]) |
return(ARGS_QWORD); |
return(ARGS_QWORD); |
|
|
while (buf[*pos] && isspace((int)buf[*pos])) |
while (buf[*pos] && isspace((u_char)buf[*pos])) |
(*pos)++; |
(*pos)++; |
|
|
if (buf[*pos]) |
if (buf[*pos]) |
Line 646 argv_a2arg(int tok, const char *argv) |
|
Line 611 argv_a2arg(int tok, const char *argv) |
|
if (xstrcmp(argv, "std")) |
if (xstrcmp(argv, "std")) |
return(MDOC_Std); |
return(MDOC_Std); |
break; |
break; |
|
|
case (MDOC_St): |
|
if (xstrcmp(argv, "p1003.1-88")) |
|
return(MDOC_p1003_1_88); |
|
else if (xstrcmp(argv, "p1003.1-90")) |
|
return(MDOC_p1003_1_90); |
|
else if (xstrcmp(argv, "p1003.1-96")) |
|
return(MDOC_p1003_1_96); |
|
else if (xstrcmp(argv, "p1003.1-2001")) |
|
return(MDOC_p1003_1_2001); |
|
else if (xstrcmp(argv, "p1003.1-2004")) |
|
return(MDOC_p1003_1_2004); |
|
else if (xstrcmp(argv, "p1003.1")) |
|
return(MDOC_p1003_1); |
|
else if (xstrcmp(argv, "p1003.1b")) |
|
return(MDOC_p1003_1b); |
|
else if (xstrcmp(argv, "p1003.1b-93")) |
|
return(MDOC_p1003_1b_93); |
|
else if (xstrcmp(argv, "p1003.1c-95")) |
|
return(MDOC_p1003_1c_95); |
|
else if (xstrcmp(argv, "p1003.1g-2000")) |
|
return(MDOC_p1003_1g_2000); |
|
else if (xstrcmp(argv, "p1003.2-92")) |
|
return(MDOC_p1003_2_92); |
|
else if (xstrcmp(argv, "p1003.2-95")) |
|
return(MDOC_p1387_2_95); |
|
else if (xstrcmp(argv, "p1003.2")) |
|
return(MDOC_p1003_2); |
|
else if (xstrcmp(argv, "p1387.2-95")) |
|
return(MDOC_p1387_2); |
|
else if (xstrcmp(argv, "isoC-90")) |
|
return(MDOC_isoC_90); |
|
else if (xstrcmp(argv, "isoC-amd1")) |
|
return(MDOC_isoC_amd1); |
|
else if (xstrcmp(argv, "isoC-tcor1")) |
|
return(MDOC_isoC_tcor1); |
|
else if (xstrcmp(argv, "isoC-tcor2")) |
|
return(MDOC_isoC_tcor2); |
|
else if (xstrcmp(argv, "isoC-99")) |
|
return(MDOC_isoC_99); |
|
else if (xstrcmp(argv, "ansiC")) |
|
return(MDOC_ansiC); |
|
else if (xstrcmp(argv, "ansiC-89")) |
|
return(MDOC_ansiC_89); |
|
else if (xstrcmp(argv, "ansiC-99")) |
|
return(MDOC_ansiC_99); |
|
else if (xstrcmp(argv, "ieee754")) |
|
return(MDOC_ieee754); |
|
else if (xstrcmp(argv, "iso8802-3")) |
|
return(MDOC_iso8802_3); |
|
else if (xstrcmp(argv, "xpg3")) |
|
return(MDOC_xpg3); |
|
else if (xstrcmp(argv, "xpg4")) |
|
return(MDOC_xpg4); |
|
else if (xstrcmp(argv, "xpg4.2")) |
|
return(MDOC_xpg4_2); |
|
else if (xstrcmp(argv, "xpg4.3")) |
|
return(MDOC_xpg4_3); |
|
else if (xstrcmp(argv, "xbd5")) |
|
return(MDOC_xbd5); |
|
else if (xstrcmp(argv, "xcu5")) |
|
return(MDOC_xcu5); |
|
else if (xstrcmp(argv, "xsh5")) |
|
return(MDOC_xsh5); |
|
else if (xstrcmp(argv, "xns5")) |
|
return(MDOC_xns5); |
|
else if (xstrcmp(argv, "xns5.2d2.0")) |
|
return(MDOC_xns5_2d2_0); |
|
else if (xstrcmp(argv, "xcurses4.2")) |
|
return(MDOC_xcurses4_2); |
|
else if (xstrcmp(argv, "susv2")) |
|
return(MDOC_susv2); |
|
else if (xstrcmp(argv, "susv3")) |
|
return(MDOC_susv3); |
|
else if (xstrcmp(argv, "svid4")) |
|
return(MDOC_svid4); |
|
break; |
|
|
|
default: |
default: |
break; |
break; |
} |
} |
Line 823 argv_single(struct mdoc *mdoc, int line, |
|
Line 710 argv_single(struct mdoc *mdoc, int line, |
|
* multiple parameters. |
* multiple parameters. |
*/ |
*/ |
static int |
static int |
argv(struct mdoc *mdoc, int line, |
argv(struct mdoc *mdoc, int tok, int line, |
struct mdoc_arg *v, int *pos, char *buf) |
struct mdoc_arg *v, int *pos, char *buf) |
{ |
{ |
|
int fl; |
|
|
v->sz = 0; |
v->sz = 0; |
v->value = NULL; |
v->value = NULL; |
|
fl = mdoc_argvflags[v->arg]; |
|
|
switch (mdoc_argvflags[v->arg]) { |
/* |
|
* Override the default per-argument value. |
|
*/ |
|
|
|
switch (tok) { |
|
case (MDOC_Ex): |
|
fl = ARGV_OPT_SINGLE; |
|
break; |
|
default: |
|
break; |
|
} |
|
|
|
switch (fl) { |
case (ARGV_SINGLE): |
case (ARGV_SINGLE): |
return(argv_single(mdoc, line, v, pos, buf)); |
return(argv_single(mdoc, line, v, pos, buf)); |
case (ARGV_MULTI): |
case (ARGV_MULTI): |
Line 863 mdoc_argv(struct mdoc *mdoc, int line, int tok, |
|
Line 764 mdoc_argv(struct mdoc *mdoc, int line, int tok, |
|
if (0 == buf[*pos]) |
if (0 == buf[*pos]) |
return(ARGV_EOLN); |
return(ARGV_EOLN); |
|
|
assert( ! isspace((int)buf[*pos])); |
assert( ! isspace((u_char)buf[*pos])); |
|
|
if ('-' != buf[*pos]) |
if ('-' != buf[*pos]) |
return(ARGV_WORD); |
return(ARGV_WORD); |
Line 878 mdoc_argv(struct mdoc *mdoc, int line, int tok, |
|
Line 779 mdoc_argv(struct mdoc *mdoc, int line, int tok, |
|
|
|
/* LINTED */ |
/* LINTED */ |
while (buf[*pos]) { |
while (buf[*pos]) { |
if (isspace((int)buf[*pos])) |
if (isspace((u_char)buf[*pos])) |
if ('\\' != buf[*pos - 1]) |
if ('\\' != buf[*pos - 1]) |
break; |
break; |
(*pos)++; |
(*pos)++; |
Line 899 mdoc_argv(struct mdoc *mdoc, int line, int tok, |
|
Line 800 mdoc_argv(struct mdoc *mdoc, int line, int tok, |
|
return(ARGV_WORD); |
return(ARGV_WORD); |
} |
} |
|
|
while (buf[*pos] && isspace((int)buf[*pos])) |
while (buf[*pos] && isspace((u_char)buf[*pos])) |
(*pos)++; |
(*pos)++; |
|
|
/* FIXME: whitespace if no value. */ |
/* FIXME: whitespace if no value. */ |
|
|
if ( ! argv(mdoc, line, v, pos, buf)) |
if ( ! argv(mdoc, tok, line, v, pos, buf)) |
return(ARGV_ERROR); |
return(ARGV_ERROR); |
|
|
return(ARGV_ARG); |
return(ARGV_ARG); |