version 1.188, 2012/07/16 09:51:54 |
version 1.193, 2013/09/16 00:25:07 |
Line 319 static const enum mdoct rsord[RSORD_MAX] = { |
|
Line 319 static const enum mdoct rsord[RSORD_MAX] = { |
|
MDOC__U, |
MDOC__U, |
MDOC__P, |
MDOC__P, |
MDOC__Q, |
MDOC__Q, |
|
MDOC__C, |
MDOC__D, |
MDOC__D, |
MDOC__O, |
MDOC__O |
MDOC__C |
|
}; |
}; |
|
|
static const char * const secnames[SEC__MAX] = { |
static const char * const secnames[SEC__MAX] = { |
Line 416 mdoc_valid_post(struct mdoc *mdoc) |
|
Line 416 mdoc_valid_post(struct mdoc *mdoc) |
|
} |
} |
|
|
static int |
static int |
check_count(struct mdoc *m, 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_lvl lvl, enum check_ineq ineq, int val) |
{ |
{ |
const char *p; |
const char *p; |
enum mandocerr t; |
enum mandocerr t; |
|
|
if (m->last->type != type) |
if (mdoc->last->type != type) |
return(1); |
return(1); |
|
|
switch (ineq) { |
switch (ineq) { |
case (CHECK_LT): |
case (CHECK_LT): |
p = "less than "; |
p = "less than "; |
if (m->last->nchild < val) |
if (mdoc->last->nchild < val) |
return(1); |
return(1); |
break; |
break; |
case (CHECK_GT): |
case (CHECK_GT): |
p = "more than "; |
p = "more than "; |
if (m->last->nchild > val) |
if (mdoc->last->nchild > val) |
return(1); |
return(1); |
break; |
break; |
case (CHECK_EQ): |
case (CHECK_EQ): |
p = ""; |
p = ""; |
if (val == m->last->nchild) |
if (val == mdoc->last->nchild) |
return(1); |
return(1); |
break; |
break; |
default: |
default: |
Line 447 check_count(struct mdoc *m, enum mdoc_type type, |
|
Line 447 check_count(struct mdoc *m, enum mdoc_type type, |
|
} |
} |
|
|
t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT; |
t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT; |
mandoc_vmsg(t, m->parse, m->last->line, m->last->pos, |
mandoc_vmsg(t, mdoc->parse, mdoc->last->line, mdoc->last->pos, |
"want %s%d children (have %d)", |
"want %s%d children (have %d)", |
p, val, m->last->nchild); |
p, val, mdoc->last->nchild); |
return(1); |
return(1); |
} |
} |
|
|
Line 515 hwarn_le1(POST_ARGS) |
|
Line 515 hwarn_le1(POST_ARGS) |
|
} |
} |
|
|
static void |
static void |
check_args(struct mdoc *m, struct mdoc_node *n) |
check_args(struct mdoc *mdoc, struct mdoc_node *n) |
{ |
{ |
int i; |
int i; |
|
|
Line 524 check_args(struct mdoc *m, struct mdoc_node *n) |
|
Line 524 check_args(struct mdoc *m, struct mdoc_node *n) |
|
|
|
assert(n->args->argc); |
assert(n->args->argc); |
for (i = 0; i < (int)n->args->argc; i++) |
for (i = 0; i < (int)n->args->argc; i++) |
check_argv(m, n, &n->args->argv[i]); |
check_argv(mdoc, n, &n->args->argv[i]); |
} |
} |
|
|
static void |
static void |
check_argv(struct mdoc *m, struct mdoc_node *n, struct mdoc_argv *v) |
check_argv(struct mdoc *mdoc, struct mdoc_node *n, struct mdoc_argv *v) |
{ |
{ |
int i; |
int i; |
|
|
for (i = 0; i < (int)v->sz; i++) |
for (i = 0; i < (int)v->sz; i++) |
check_text(m, v->line, v->pos, v->value[i]); |
check_text(mdoc, v->line, v->pos, v->value[i]); |
|
|
/* FIXME: move to post_std(). */ |
/* FIXME: move to post_std(). */ |
|
|
if (MDOC_Std == v->arg) |
if (MDOC_Std == v->arg) |
if ( ! (v->sz || m->meta.name)) |
if ( ! (v->sz || mdoc->meta.name)) |
mdoc_nmsg(m, n, MANDOCERR_NONAME); |
mdoc_nmsg(mdoc, n, MANDOCERR_NONAME); |
} |
} |
|
|
static void |
static void |
check_text(struct mdoc *m, int ln, int pos, char *p) |
check_text(struct mdoc *mdoc, int ln, int pos, char *p) |
{ |
{ |
char *cp; |
char *cp; |
|
|
if (MDOC_LITERAL & m->flags) |
if (MDOC_LITERAL & mdoc->flags) |
return; |
return; |
|
|
for (cp = p; NULL != (p = strchr(p, '\t')); p++) |
for (cp = p; NULL != (p = strchr(p, '\t')); p++) |
mdoc_pmsg(m, ln, pos + (int)(p - cp), MANDOCERR_BADTAB); |
mdoc_pmsg(mdoc, ln, pos + (int)(p - cp), MANDOCERR_BADTAB); |
} |
} |
|
|
static int |
static int |
Line 1353 post_it(POST_ARGS) |
|
Line 1353 post_it(POST_ARGS) |
|
static int |
static int |
post_bl_block(POST_ARGS) |
post_bl_block(POST_ARGS) |
{ |
{ |
struct mdoc_node *n; |
struct mdoc_node *n, *ni, *nc; |
|
|
/* |
/* |
* These are fairly complicated, so we've broken them into two |
* These are fairly complicated, so we've broken them into two |
Line 1369 post_bl_block(POST_ARGS) |
|
Line 1369 post_bl_block(POST_ARGS) |
|
NULL == n->norm->Bl.width) { |
NULL == n->norm->Bl.width) { |
if ( ! post_bl_block_tag(mdoc)) |
if ( ! post_bl_block_tag(mdoc)) |
return(0); |
return(0); |
|
assert(n->norm->Bl.width); |
} else if (NULL != n->norm->Bl.width) { |
} else if (NULL != n->norm->Bl.width) { |
if ( ! post_bl_block_width(mdoc)) |
if ( ! post_bl_block_width(mdoc)) |
return(0); |
return(0); |
} else |
assert(n->norm->Bl.width); |
return(1); |
} |
|
|
assert(n->norm->Bl.width); |
for (ni = n->body->child; ni; ni = ni->next) { |
|
if (NULL == ni->body) |
|
continue; |
|
nc = ni->body->last; |
|
while (NULL != nc) { |
|
switch (nc->tok) { |
|
case (MDOC_Pp): |
|
/* FALLTHROUGH */ |
|
case (MDOC_Lp): |
|
/* FALLTHROUGH */ |
|
case (MDOC_br): |
|
break; |
|
default: |
|
nc = NULL; |
|
continue; |
|
} |
|
if (NULL == ni->next) { |
|
mdoc_nmsg(mdoc, nc, MANDOCERR_MOVEPAR); |
|
if ( ! mdoc_node_relink(mdoc, nc)) |
|
return(0); |
|
} else if (0 == n->norm->Bl.comp && |
|
LIST_column != n->norm->Bl.type) { |
|
mdoc_nmsg(mdoc, nc, MANDOCERR_IGNPAR); |
|
mdoc_node_delete(mdoc, nc); |
|
} else |
|
break; |
|
nc = ni->body->last; |
|
} |
|
} |
return(1); |
return(1); |
} |
} |
|
|
Line 1935 post_sh_head(POST_ARGS) |
|
Line 1964 post_sh_head(POST_ARGS) |
|
break; |
break; |
if (*mdoc->meta.msec == '9') |
if (*mdoc->meta.msec == '9') |
break; |
break; |
mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_SECMSEC); |
mandoc_msg(MANDOCERR_SECMSEC, mdoc->parse, |
|
mdoc->last->line, mdoc->last->pos, buf); |
break; |
break; |
default: |
default: |
break; |
break; |
Line 2176 post_dt(POST_ARGS) |
|
Line 2206 post_dt(POST_ARGS) |
|
free(mdoc->meta.vol); |
free(mdoc->meta.vol); |
mdoc->meta.vol = mandoc_strdup(cp); |
mdoc->meta.vol = mandoc_strdup(cp); |
} else { |
} else { |
/* FIXME: warn about bad arch. */ |
|
cp = mdoc_a2arch(nn->string); |
cp = mdoc_a2arch(nn->string); |
if (NULL == cp) { |
if (NULL == cp) { |
|
mdoc_nmsg(mdoc, nn, MANDOCERR_BADVOLARCH); |
free(mdoc->meta.vol); |
free(mdoc->meta.vol); |
mdoc->meta.vol = mandoc_strdup(nn->string); |
mdoc->meta.vol = mandoc_strdup(nn->string); |
} else |
} else |