version 1.189, 2012/07/18 11:11:12 |
version 1.194, 2013/10/05 22:08:12 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2010, 2011, 2012 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2010, 2011, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
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 888 pre_sh(PRE_ARGS) |
|
Line 888 pre_sh(PRE_ARGS) |
|
|
|
if (MDOC_BLOCK != n->type) |
if (MDOC_BLOCK != n->type) |
return(1); |
return(1); |
|
|
roff_regunset(mdoc->roff, REG_nS); |
|
return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT)); |
return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT)); |
} |
} |
|
|
Line 1905 post_sh_head(POST_ARGS) |
|
Line 1903 post_sh_head(POST_ARGS) |
|
|
|
/* The SYNOPSIS gets special attention in other areas. */ |
/* The SYNOPSIS gets special attention in other areas. */ |
|
|
if (SEC_SYNOPSIS == sec) |
if (SEC_SYNOPSIS == sec) { |
|
roff_setreg(mdoc->roff, "nS", 1); |
mdoc->flags |= MDOC_SYNOPSIS; |
mdoc->flags |= MDOC_SYNOPSIS; |
else |
} else { |
|
roff_setreg(mdoc->roff, "nS", 0); |
mdoc->flags &= ~MDOC_SYNOPSIS; |
mdoc->flags &= ~MDOC_SYNOPSIS; |
|
} |
|
|
/* Mark our last section. */ |
/* Mark our last section. */ |
|
|
Line 1964 post_sh_head(POST_ARGS) |
|
Line 1965 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 2205 post_dt(POST_ARGS) |
|
Line 2207 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 |