version 1.266, 2015/02/03 00:48:47 |
version 1.267, 2015/02/04 16:38:56 |
Line 48 enum check_ineq { |
|
Line 48 enum check_ineq { |
|
CHECK_EQ |
CHECK_EQ |
}; |
}; |
|
|
enum check_lvl { |
|
CHECK_WARN, |
|
CHECK_ERROR, |
|
}; |
|
|
|
typedef void (*v_pre)(PRE_ARGS); |
typedef void (*v_pre)(PRE_ARGS); |
typedef void (*v_post)(POST_ARGS); |
typedef void (*v_post)(POST_ARGS); |
|
|
|
|
}; |
}; |
|
|
static void check_count(struct mdoc *, enum mdoc_type, |
static void check_count(struct mdoc *, enum mdoc_type, |
enum check_lvl, enum check_ineq, int); |
enum check_ineq, int); |
static void check_text(struct mdoc *, int, int, char *); |
static void check_text(struct mdoc *, int, int, char *); |
static void check_argv(struct mdoc *, |
static void check_argv(struct mdoc *, |
struct mdoc_node *, struct mdoc_argv *); |
struct mdoc_node *, struct mdoc_argv *); |
Line 374 mdoc_valid_post(struct mdoc *mdoc) |
|
Line 369 mdoc_valid_post(struct mdoc *mdoc) |
|
|
|
static void |
static void |
check_count(struct mdoc *mdoc, enum mdoc_type type, |
check_count(struct mdoc *mdoc, enum mdoc_type type, |
enum check_lvl lvl, enum check_ineq ineq, int val) |
enum check_ineq ineq, int val) |
{ |
{ |
const char *p; |
const char *p; |
enum mandocerr t; |
|
|
|
if (mdoc->last->type != type) |
if (mdoc->last->type != type) |
return; |
return; |
Line 403 check_count(struct mdoc *mdoc, enum mdoc_type type, |
|
Line 397 check_count(struct mdoc *mdoc, enum mdoc_type type, |
|
/* NOTREACHED */ |
/* NOTREACHED */ |
} |
} |
|
|
t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT; |
mandoc_vmsg(MANDOCERR_ARGCWARN, mdoc->parse, mdoc->last->line, |
mandoc_vmsg(t, mdoc->parse, mdoc->last->line, |
|
mdoc->last->pos, "want %s%d children (have %d)", |
mdoc->last->pos, "want %s%d children (have %d)", |
p, val, mdoc->last->nchild); |
p, val, mdoc->last->nchild); |
} |
} |
Line 412 check_count(struct mdoc *mdoc, enum mdoc_type type, |
|
Line 405 check_count(struct mdoc *mdoc, enum mdoc_type type, |
|
static void |
static void |
bwarn_ge1(POST_ARGS) |
bwarn_ge1(POST_ARGS) |
{ |
{ |
check_count(mdoc, MDOC_BODY, CHECK_WARN, CHECK_GT, 0); |
check_count(mdoc, MDOC_BODY, CHECK_GT, 0); |
} |
} |
|
|
static void |
static void |
ewarn_eq1(POST_ARGS) |
ewarn_eq1(POST_ARGS) |
{ |
{ |
check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1); |
check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1); |
} |
} |
|
|
static void |
static void |
ewarn_ge1(POST_ARGS) |
ewarn_ge1(POST_ARGS) |
{ |
{ |
check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_GT, 0); |
check_count(mdoc, MDOC_ELEM, CHECK_GT, 0); |
} |
} |
|
|
static void |
static void |
hwarn_eq0(POST_ARGS) |
hwarn_eq0(POST_ARGS) |
{ |
{ |
check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 0); |
check_count(mdoc, MDOC_HEAD, CHECK_EQ, 0); |
} |
} |
|
|
static void |
static void |
Line 941 post_lb(POST_ARGS) |
|
Line 934 post_lb(POST_ARGS) |
|
const char *stdlibname; |
const char *stdlibname; |
char *libname; |
char *libname; |
|
|
check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1); |
check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1); |
n = mdoc->last->child; |
n = mdoc->last->child; |
assert(MDOC_TEXT == n->type); |
assert(MDOC_TEXT == n->type); |
|
|
|
|
post_fo(POST_ARGS) |
post_fo(POST_ARGS) |
{ |
{ |
|
|
check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 1); |
check_count(mdoc, MDOC_HEAD, CHECK_EQ, 1); |
bwarn_ge1(mdoc); |
bwarn_ge1(mdoc); |
if (mdoc->last->type == MDOC_HEAD && mdoc->last->nchild) |
if (mdoc->last->type == MDOC_HEAD && mdoc->last->nchild) |
post_fname(mdoc); |
post_fname(mdoc); |
Line 1069 post_nm(POST_ARGS) |
|
Line 1062 post_nm(POST_ARGS) |
|
static void |
static void |
post_nd(POST_ARGS) |
post_nd(POST_ARGS) |
{ |
{ |
|
struct mdoc_node *n; |
|
|
check_count(mdoc, MDOC_BODY, CHECK_ERROR, CHECK_GT, 0); |
n = mdoc->last; |
|
|
|
if (n->type != MDOC_BODY) |
|
return; |
|
|
|
if (n->child == NULL) |
|
mandoc_msg(MANDOCERR_ND_EMPTY, mdoc->parse, |
|
n->line, n->pos, "Nd"); |
|
|
post_hyph(mdoc); |
post_hyph(mdoc); |
} |
} |
|
|
Line 1177 post_an(POST_ARGS) |
|
Line 1179 post_an(POST_ARGS) |
|
np = mdoc->last; |
np = mdoc->last; |
if (AUTH__NONE == np->norm->An.auth) { |
if (AUTH__NONE == np->norm->An.auth) { |
if (0 == np->child) |
if (0 == np->child) |
check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_GT, 0); |
check_count(mdoc, MDOC_ELEM, CHECK_GT, 0); |
} else if (np->child) |
} else if (np->child) |
check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0); |
check_count(mdoc, MDOC_ELEM, CHECK_EQ, 0); |
} |
} |
|
|
static void |
static void |
Line 1661 post_rs(POST_ARGS) |
|
Line 1663 post_rs(POST_ARGS) |
|
|
|
switch (mdoc->last->type) { |
switch (mdoc->last->type) { |
case MDOC_HEAD: |
case MDOC_HEAD: |
check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 0); |
check_count(mdoc, MDOC_HEAD, CHECK_EQ, 0); |
return; |
return; |
case MDOC_BODY: |
case MDOC_BODY: |
if (mdoc->last->child) |
if (mdoc->last->child) |
break; |
break; |
check_count(mdoc, MDOC_BODY, CHECK_WARN, CHECK_GT, 0); |
check_count(mdoc, MDOC_BODY, CHECK_GT, 0); |
return; |
return; |
default: |
default: |
return; |
return; |
Line 2072 post_ignpar(POST_ARGS) |
|
Line 2074 post_ignpar(POST_ARGS) |
|
{ |
{ |
struct mdoc_node *np; |
struct mdoc_node *np; |
|
|
check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_GT, 0); |
check_count(mdoc, MDOC_HEAD, CHECK_GT, 0); |
post_hyph(mdoc); |
post_hyph(mdoc); |
|
|
if (MDOC_BODY != mdoc->last->type) |
if (MDOC_BODY != mdoc->last->type) |
Line 2135 post_par(POST_ARGS) |
|
Line 2137 post_par(POST_ARGS) |
|
struct mdoc_node *np; |
struct mdoc_node *np; |
|
|
if (mdoc->last->tok == MDOC_sp) |
if (mdoc->last->tok == MDOC_sp) |
check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_LT, 2); |
check_count(mdoc, MDOC_ELEM, CHECK_LT, 2); |
else |
else |
check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0); |
check_count(mdoc, MDOC_ELEM, CHECK_EQ, 0); |
|
|
if (MDOC_ELEM != mdoc->last->type && |
if (MDOC_ELEM != mdoc->last->type && |
MDOC_BLOCK != mdoc->last->type) |
MDOC_BLOCK != mdoc->last->type) |