version 1.4, 2010/12/29 14:38:14 |
version 1.9, 2011/03/15 16:23:51 |
Line 71 static const struct tbl_phrase keys[KEY_MAXKEYS] = { |
|
Line 71 static const struct tbl_phrase keys[KEY_MAXKEYS] = { |
|
{ "nospaces", TBL_OPT_NOSPACE, KEY_NOSPACE}, |
{ "nospaces", TBL_OPT_NOSPACE, KEY_NOSPACE}, |
}; |
}; |
|
|
static int arg(struct tbl *, int, const char *, int *, int); |
static int arg(struct tbl_node *, int, |
static void opt(struct tbl *, int, const char *, int *); |
const char *, int *, enum tbl_ident); |
|
static void opt(struct tbl_node *, int, |
|
const char *, int *); |
|
|
static int |
static int |
arg(struct tbl *tbl, int ln, const char *p, int *pos, int key) |
arg(struct tbl_node *tbl, int ln, const char *p, int *pos, enum tbl_ident key) |
{ |
{ |
int i; |
int i; |
char buf[KEY_MAXNUMSZ]; |
char buf[KEY_MAXNUMSZ]; |
Line 100 arg(struct tbl *tbl, int ln, const char *p, int *pos, |
|
Line 102 arg(struct tbl *tbl, int ln, const char *p, int *pos, |
|
|
|
switch (key) { |
switch (key) { |
case (KEY_DELIM): |
case (KEY_DELIM): |
if ('\0' == (tbl->delims[0] = p[(*pos)++])) { |
if ('\0' == p[(*pos)++]) { |
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
return(0); |
return(0); |
} |
} |
|
|
if ('\0' == (tbl->delims[1] = p[(*pos)++])) { |
if ('\0' == p[(*pos)++]) { |
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
return(0); |
return(0); |
} |
} |
break; |
break; |
case (KEY_TAB): |
case (KEY_TAB): |
if ('\0' != (tbl->tab = p[(*pos)++])) |
if ('\0' != (tbl->opts.tab = p[(*pos)++])) |
break; |
break; |
|
|
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
Line 125 arg(struct tbl *tbl, int ln, const char *p, int *pos, |
|
Line 127 arg(struct tbl *tbl, int ln, const char *p, int *pos, |
|
|
|
if (i < KEY_MAXNUMSZ) { |
if (i < KEY_MAXNUMSZ) { |
buf[i] = '\0'; |
buf[i] = '\0'; |
tbl->linesize = atoi(buf); |
tbl->opts.linesize = atoi(buf); |
break; |
break; |
} |
} |
|
|
(*tbl->msg)(MANDOCERR_TBL, tbl->data, ln, *pos, NULL); |
(*tbl->msg)(MANDOCERR_TBL, tbl->data, ln, *pos, NULL); |
return(0); |
return(0); |
case (KEY_DPOINT): |
case (KEY_DPOINT): |
if ('\0' != (tbl->decimal = p[(*pos)++])) |
if ('\0' != (tbl->opts.decimal = p[(*pos)++])) |
break; |
break; |
|
|
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
TBL_MSG(tbl, MANDOCERR_TBL, ln, *pos - 1); |
Line 152 arg(struct tbl *tbl, int ln, const char *p, int *pos, |
|
Line 154 arg(struct tbl *tbl, int ln, const char *p, int *pos, |
|
} |
} |
|
|
static void |
static void |
opt(struct tbl *tbl, int ln, const char *p, int *pos) |
opt(struct tbl_node *tbl, int ln, const char *p, int *pos) |
{ |
{ |
int i, sv; |
int i, sv; |
char buf[KEY_MAXNAME]; |
char buf[KEY_MAXNAME]; |
|
|
/* Copy up to first non-alpha character. */ |
/* Copy up to first non-alpha character. */ |
|
|
for (sv = *pos, i = 0; i < KEY_MAXNAME; i++, (*pos)++) { |
for (sv = *pos, i = 0; i < KEY_MAXNAME; i++, (*pos)++) { |
buf[i] = tolower(p[*pos]); |
buf[i] = (char)tolower((unsigned char)p[*pos]); |
if ( ! isalpha((unsigned char)buf[i])) |
if ( ! isalpha((unsigned char)buf[i])) |
break; |
break; |
} |
} |
|
|
*/ |
*/ |
|
|
if (keys[i].key) |
if (keys[i].key) |
tbl->opts |= keys[i].key; |
tbl->opts.opts |= keys[i].key; |
else if ( ! arg(tbl, ln, p, pos, keys[i].ident)) |
else if ( ! arg(tbl, ln, p, pos, keys[i].ident)) |
return; |
return; |
|
|
|
|
} |
} |
|
|
int |
int |
tbl_option(struct tbl *tbl, int ln, const char *p) |
tbl_option(struct tbl_node *tbl, int ln, const char *p) |
{ |
{ |
int pos; |
int pos; |
|
|