version 1.60, 2009/02/25 12:32:50 |
version 1.63, 2009/02/27 09:39:40 |
Line 52 static int check_msec(PRE_ARGS, int, enum mdoc_msec *) |
|
Line 52 static int check_msec(PRE_ARGS, int, enum mdoc_msec *) |
|
static int check_stdarg(PRE_ARGS); |
static int check_stdarg(PRE_ARGS); |
|
|
static int check_text(struct mdoc *, |
static int check_text(struct mdoc *, |
size_t, size_t, const char *); |
int, int, const char *); |
|
|
static int err_child_lt(struct mdoc *, const char *, int); |
static int err_child_lt(struct mdoc *, const char *, int); |
static int warn_child_lt(struct mdoc *, const char *, int); |
static int warn_child_lt(struct mdoc *, const char *, int); |
Line 278 mdoc_valid_pre(struct mdoc *mdoc, |
|
Line 278 mdoc_valid_pre(struct mdoc *mdoc, |
|
{ |
{ |
v_pre *p; |
v_pre *p; |
struct mdoc_arg *argv; |
struct mdoc_arg *argv; |
size_t argc, i, j, line, pos; |
size_t argc; |
|
int line, pos, i, j; |
const char *tp; |
const char *tp; |
|
|
if (MDOC_TEXT == node->type) { |
if (MDOC_TEXT == node->type) { |
Line 296 mdoc_valid_pre(struct mdoc *mdoc, |
|
Line 297 mdoc_valid_pre(struct mdoc *mdoc, |
|
node->data.block.argc : |
node->data.block.argc : |
node->data.elem.argc; |
node->data.elem.argc; |
|
|
for (i = 0; i < argc; i++) { |
for (i = 0; i < (int)argc; i++) { |
if (0 == argv[i].sz) |
if (0 == argv[i].sz) |
continue; |
continue; |
for (j = 0; j < argv[i].sz; j++) { |
for (j = 0; j < (int)argv[i].sz; j++) { |
tp = argv[i].value[j]; |
tp = argv[i].value[j]; |
line = argv[i].line; |
line = argv[i].line; |
pos = argv[i].pos; |
pos = argv[i].pos; |
Line 476 check_msec(PRE_ARGS, int sz, enum mdoc_msec *msecs) |
|
Line 477 check_msec(PRE_ARGS, int sz, enum mdoc_msec *msecs) |
|
|
|
|
|
static int |
static int |
check_text(struct mdoc *mdoc, size_t line, size_t pos, const char *p) |
check_text(struct mdoc *mdoc, int line, int pos, const char *p) |
{ |
{ |
size_t c; |
size_t c; |
|
|
|
/* XXX - indicate deprecated escapes \*(xx and \*x. */ |
|
|
for ( ; *p; p++) { |
for ( ; *p; p++) { |
if ( ! isprint((int)*p) && '\t' != *p) |
if ( ! isprint((int)*p) && '\t' != *p) |
return(mdoc_perr(mdoc, line, pos, |
return(mdoc_perr(mdoc, line, pos, |
Line 487 check_text(struct mdoc *mdoc, size_t line, size_t pos, |
|
Line 490 check_text(struct mdoc *mdoc, size_t line, size_t pos, |
|
if ('\\' != *p) |
if ('\\' != *p) |
continue; |
continue; |
if ((c = mdoc_isescape(p))) { |
if ((c = mdoc_isescape(p))) { |
p += (c - 1); |
p += (int)c - 1; |
continue; |
continue; |
} |
} |
return(mdoc_perr(mdoc, line, pos, |
return(mdoc_perr(mdoc, line, pos, |
Line 540 pre_display(PRE_ARGS) |
|
Line 543 pre_display(PRE_ARGS) |
|
static int |
static int |
pre_bl(PRE_ARGS) |
pre_bl(PRE_ARGS) |
{ |
{ |
int type, i; |
int type, i, width, offset; |
struct mdoc_arg *argv; |
struct mdoc_arg *argv; |
size_t argc; |
size_t argc; |
|
|
Line 551 pre_bl(PRE_ARGS) |
|
Line 554 pre_bl(PRE_ARGS) |
|
|
|
/* Make sure that only one type of list is specified. */ |
/* Make sure that only one type of list is specified. */ |
|
|
|
type = offset = width = -1; |
|
|
/* LINTED */ |
/* LINTED */ |
for (i = 0, type = 0; i < (int)argc; i++) { |
for (i = 0; i < (int)argc; i++) { |
argv = &n->data.block.argv[i]; |
argv = &n->data.block.argv[i]; |
|
|
switch (argv->arg) { |
switch (argv->arg) { |
Line 577 pre_bl(PRE_ARGS) |
|
Line 582 pre_bl(PRE_ARGS) |
|
case (MDOC_Inset): |
case (MDOC_Inset): |
/* FALLTHROUGH */ |
/* FALLTHROUGH */ |
case (MDOC_Column): |
case (MDOC_Column): |
if (0 == type++) |
if (-1 == type) { |
|
type = argv->arg; |
break; |
break; |
|
} |
return(mdoc_perr(mdoc, argv->line, argv->pos, |
return(mdoc_perr(mdoc, argv->line, argv->pos, |
"multiple types specified")); |
"multiple types specified")); |
|
case (MDOC_Width): |
|
if (-1 == width) { |
|
width = argv->arg; |
|
break; |
|
} |
|
return(mdoc_perr(mdoc, argv->line, argv->pos, |
|
"multiple -%s arguments", |
|
mdoc_argnames[MDOC_Width])); |
|
case (MDOC_Offset): |
|
if (-1 == offset) { |
|
offset = argv->arg; |
|
break; |
|
} |
|
return(mdoc_perr(mdoc, argv->line, argv->pos, |
|
"multiple -%s arguments", |
|
mdoc_argnames[MDOC_Offset])); |
default: |
default: |
break; |
break; |
} |
} |
} |
} |
|
|
if (type) |
if (-1 == type) |
return(1); |
return(mdoc_err(mdoc, "no type specified")); |
return(mdoc_err(mdoc, "no type specified")); |
|
|
switch (type) { |
|
case (MDOC_Column): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Diag): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Inset): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Item): |
|
if (-1 == width) |
|
break; |
|
return(mdoc_nwarn(mdoc, n, WARN_SYNTAX, |
|
"superfluous -%s argument", |
|
mdoc_argnames[MDOC_Width])); |
|
case (MDOC_Tag): |
|
if (-1 != width) |
|
break; |
|
return(mdoc_nwarn(mdoc, n, WARN_SYNTAX, |
|
"suggest -%s argument", |
|
mdoc_argnames[MDOC_Width])); |
|
default: |
|
break; |
|
} |
|
|
|
return(1); |
} |
} |
|
|
|
|
|
|
pre_it(PRE_ARGS) |
pre_it(PRE_ARGS) |
{ |
{ |
|
|
/* TODO: -width attribute must be specified for -tag. */ |
|
/* TODO: children too big for -width? */ |
/* TODO: children too big for -width? */ |
|
|
if (MDOC_BLOCK != n->type) |
if (MDOC_BLOCK != n->type) |