version 1.274, 2015/02/06 03:38:45 |
version 1.275, 2015/02/06 07:13:14 |
|
|
v_post post; |
v_post post; |
}; |
}; |
|
|
static void check_count(struct mdoc *, enum mdoc_type, |
|
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 67 static enum mdoc_sec a2sec(const char *); |
|
Line 65 static enum mdoc_sec a2sec(const char *); |
|
static size_t macro2len(enum mdoct); |
static size_t macro2len(enum mdoct); |
static void rewrite_macro2len(char **); |
static void rewrite_macro2len(char **); |
|
|
static void ewarn_eq1(POST_ARGS); |
|
static void ewarn_ge1(POST_ARGS); |
|
|
|
static void post_an(POST_ARGS); |
static void post_an(POST_ARGS); |
static void post_at(POST_ARGS); |
static void post_at(POST_ARGS); |
static void post_bf(POST_ARGS); |
static void post_bf(POST_ARGS); |
Line 92 static void post_fn(POST_ARGS); |
|
Line 87 static void post_fn(POST_ARGS); |
|
static void post_fname(POST_ARGS); |
static void post_fname(POST_ARGS); |
static void post_fo(POST_ARGS); |
static void post_fo(POST_ARGS); |
static void post_hyph(POST_ARGS); |
static void post_hyph(POST_ARGS); |
static void post_hyphtext(POST_ARGS); |
|
static void post_ignpar(POST_ARGS); |
static void post_ignpar(POST_ARGS); |
static void post_it(POST_ARGS); |
static void post_it(POST_ARGS); |
static void post_lb(POST_ARGS); |
static void post_lb(POST_ARGS); |
Line 167 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
Line 161 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
{ NULL, NULL }, /* Va */ |
{ NULL, NULL }, /* Va */ |
{ NULL, post_vt }, /* Vt */ |
{ NULL, post_vt }, /* Vt */ |
{ NULL, NULL }, /* Xr */ |
{ NULL, NULL }, /* Xr */ |
{ NULL, ewarn_ge1 }, /* %A */ |
{ NULL, NULL }, /* %A */ |
{ NULL, post_hyphtext }, /* %B */ /* FIXME: can be used outside Rs/Re. */ |
{ NULL, post_hyph }, /* %B */ /* FIXME: can be used outside Rs/Re. */ |
{ NULL, ewarn_ge1 }, /* %D */ |
{ NULL, NULL }, /* %D */ |
{ NULL, ewarn_ge1 }, /* %I */ |
{ NULL, NULL }, /* %I */ |
{ NULL, ewarn_ge1 }, /* %J */ |
{ NULL, NULL }, /* %J */ |
{ NULL, post_hyphtext }, /* %N */ |
{ NULL, post_hyph }, /* %N */ |
{ NULL, post_hyphtext }, /* %O */ |
{ NULL, post_hyph }, /* %O */ |
{ NULL, ewarn_ge1 }, /* %P */ |
{ NULL, NULL }, /* %P */ |
{ NULL, post_hyphtext }, /* %R */ |
{ NULL, post_hyph }, /* %R */ |
{ NULL, post_hyphtext }, /* %T */ /* FIXME: can be used outside Rs/Re. */ |
{ NULL, post_hyph }, /* %T */ /* FIXME: can be used outside Rs/Re. */ |
{ NULL, ewarn_ge1 }, /* %V */ |
{ NULL, NULL }, /* %V */ |
{ NULL, NULL }, /* Ac */ |
{ NULL, NULL }, /* Ac */ |
{ NULL, NULL }, /* Ao */ |
{ NULL, NULL }, /* Ao */ |
{ NULL, NULL }, /* Aq */ |
{ NULL, NULL }, /* Aq */ |
Line 239 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
Line 233 static const struct valids mdoc_valids[MDOC_MAX] = { |
|
{ NULL, NULL }, /* Brq */ |
{ NULL, NULL }, /* Brq */ |
{ NULL, NULL }, /* Bro */ |
{ NULL, NULL }, /* Bro */ |
{ NULL, NULL }, /* Brc */ |
{ NULL, NULL }, /* Brc */ |
{ NULL, ewarn_ge1 }, /* %C */ |
{ NULL, NULL }, /* %C */ |
{ pre_obsolete, post_es }, /* Es */ |
{ pre_obsolete, post_es }, /* Es */ |
{ pre_obsolete, post_en }, /* En */ |
{ pre_obsolete, post_en }, /* En */ |
{ NULL, NULL }, /* Dx */ |
{ NULL, NULL }, /* Dx */ |
{ NULL, ewarn_ge1 }, /* %Q */ |
{ NULL, NULL }, /* %Q */ |
{ NULL, post_par }, /* br */ |
{ NULL, post_par }, /* br */ |
{ NULL, post_par }, /* sp */ |
{ NULL, post_par }, /* sp */ |
{ NULL, ewarn_eq1 }, /* %U */ |
{ NULL, NULL }, /* %U */ |
{ NULL, NULL }, /* Ta */ |
{ NULL, NULL }, /* Ta */ |
{ NULL, NULL }, /* ll */ |
{ NULL, NULL }, /* ll */ |
}; |
}; |
Line 366 mdoc_valid_post(struct mdoc *mdoc) |
|
Line 360 mdoc_valid_post(struct mdoc *mdoc) |
|
} |
} |
|
|
static void |
static void |
check_count(struct mdoc *mdoc, enum mdoc_type type, |
|
enum check_ineq ineq, int val) |
|
{ |
|
const char *p; |
|
|
|
if (mdoc->last->type != type) |
|
return; |
|
|
|
switch (ineq) { |
|
case CHECK_LT: |
|
p = "less than "; |
|
if (mdoc->last->nchild < val) |
|
return; |
|
break; |
|
case CHECK_GT: |
|
p = "more than "; |
|
if (mdoc->last->nchild > val) |
|
return; |
|
break; |
|
case CHECK_EQ: |
|
p = ""; |
|
if (val == mdoc->last->nchild) |
|
return; |
|
break; |
|
default: |
|
abort(); |
|
/* NOTREACHED */ |
|
} |
|
|
|
mandoc_vmsg(MANDOCERR_ARGCWARN, mdoc->parse, mdoc->last->line, |
|
mdoc->last->pos, "want %s%d children (have %d)", |
|
p, val, mdoc->last->nchild); |
|
} |
|
|
|
static void |
|
ewarn_eq1(POST_ARGS) |
|
{ |
|
check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1); |
|
} |
|
|
|
static void |
|
ewarn_ge1(POST_ARGS) |
|
{ |
|
check_count(mdoc, MDOC_ELEM, CHECK_GT, 0); |
|
} |
|
|
|
static void |
|
check_args(struct mdoc *mdoc, struct mdoc_node *n) |
check_args(struct mdoc *mdoc, struct mdoc_node *n) |
{ |
{ |
int i; |
int i; |
Line 920 post_lb(POST_ARGS) |
|
Line 867 post_lb(POST_ARGS) |
|
const char *stdlibname; |
const char *stdlibname; |
char *libname; |
char *libname; |
|
|
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); |
|
|
Line 1089 post_d1(POST_ARGS) |
|
Line 1035 post_d1(POST_ARGS) |
|
return; |
return; |
|
|
if (n->child == NULL) |
if (n->child == NULL) |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse, |
n->line, n->pos, "D1"); |
n->line, n->pos, "D1"); |
|
|
post_hyph(mdoc); |
post_hyph(mdoc); |
Line 1106 post_literal(POST_ARGS) |
|
Line 1052 post_literal(POST_ARGS) |
|
return; |
return; |
|
|
if (n->child == NULL) |
if (n->child == NULL) |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse, |
n->line, n->pos, mdoc_macronames[n->tok]); |
n->line, n->pos, mdoc_macronames[n->tok]); |
|
|
if (n->tok == MDOC_Bd && |
if (n->tok == MDOC_Bd && |
Line 1513 post_bl(POST_ARGS) |
|
Line 1459 post_bl(POST_ARGS) |
|
|
|
nchild = nbody->child; |
nchild = nbody->child; |
if (nchild == NULL) { |
if (nchild == NULL) { |
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse, |
mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse, |
nbody->line, nbody->pos, "Bl"); |
nbody->line, nbody->pos, "Bl"); |
return; |
return; |
} |
} |
Line 1581 post_bk(POST_ARGS) |
|
Line 1527 post_bk(POST_ARGS) |
|
n = mdoc->last; |
n = mdoc->last; |
|
|
if (n->type == MDOC_BLOCK && n->body->child == NULL) { |
if (n->type == MDOC_BLOCK && n->body->child == NULL) { |
mandoc_msg(MANDOCERR_MACRO_EMPTY, |
mandoc_msg(MANDOCERR_BLK_EMPTY, |
mdoc->parse, n->line, n->pos, "Bk"); |
mdoc->parse, n->line, n->pos, "Bk"); |
mdoc_node_delete(mdoc, n); |
mdoc_node_delete(mdoc, n); |
} |
} |
Line 1790 post_hyph(POST_ARGS) |
|
Line 1736 post_hyph(POST_ARGS) |
|
isalpha((unsigned char)cp[1])) |
isalpha((unsigned char)cp[1])) |
*cp = ASCII_HYPH; |
*cp = ASCII_HYPH; |
} |
} |
} |
|
|
|
static void |
|
post_hyphtext(POST_ARGS) |
|
{ |
|
|
|
ewarn_ge1(mdoc); |
|
post_hyph(mdoc); |
|
} |
} |
|
|
static void |
static void |