version 1.40, 2009/01/19 17:51:33 |
version 1.42, 2009/01/19 23:11:43 |
Line 71 static int pre_prologue(struct mdoc *, struct mdoc_nod |
|
Line 71 static int pre_prologue(struct mdoc *, struct mdoc_nod |
|
/* Specific post-child-parse routines. */ |
/* Specific post-child-parse routines. */ |
|
|
static int herr_ge1(struct mdoc *); |
static int herr_ge1(struct mdoc *); |
|
static int herr_le1(struct mdoc *); |
static int hwarn_ge1(struct mdoc *); |
static int hwarn_ge1(struct mdoc *); |
static int herr_eq0(struct mdoc *); |
static int herr_eq0(struct mdoc *); |
static int eerr_eq0(struct mdoc *); |
static int eerr_eq0(struct mdoc *); |
Line 92 static int post_an(struct mdoc *); |
|
Line 93 static int post_an(struct mdoc *); |
|
static int post_at(struct mdoc *); |
static int post_at(struct mdoc *); |
static int post_xr(struct mdoc *); |
static int post_xr(struct mdoc *); |
static int post_nm(struct mdoc *); |
static int post_nm(struct mdoc *); |
|
static int post_bf(struct mdoc *); |
static int post_root(struct mdoc *); |
static int post_root(struct mdoc *); |
|
|
/* Collections of pre-child-parse routines. */ |
/* Collections of pre-child-parse routines. */ |
Line 130 static v_post posts_an[] = { post_an, NULL }; |
|
Line 132 static v_post posts_an[] = { post_an, NULL }; |
|
static v_post posts_at[] = { post_at, NULL }; |
static v_post posts_at[] = { post_at, NULL }; |
static v_post posts_xr[] = { eerr_ge1, eerr_le2, post_xr, NULL }; |
static v_post posts_xr[] = { eerr_ge1, eerr_le2, post_xr, NULL }; |
static v_post posts_nm[] = { post_nm, NULL }; |
static v_post posts_nm[] = { post_nm, NULL }; |
|
static v_post posts_bf[] = { herr_le1, post_bf, NULL }; |
|
|
/* Per-macro pre- and post-child-check routine collections. */ |
/* Per-macro pre- and post-child-check routine collections. */ |
|
|
Line 193 const struct valids mdoc_valids[MDOC_MAX] = { |
|
Line 196 const struct valids mdoc_valids[MDOC_MAX] = { |
|
{ NULL, posts_wline }, /* Aq */ |
{ NULL, posts_wline }, /* Aq */ |
{ NULL, posts_at }, /* At */ |
{ NULL, posts_at }, /* At */ |
{ NULL, NULL }, /* Bc */ |
{ NULL, NULL }, /* Bc */ |
{ NULL, NULL }, /* Bf */ /* FIXME */ |
{ NULL, posts_bf }, /* Bf */ |
{ NULL, NULL }, /* Bo */ |
{ NULL, NULL }, /* Bo */ |
{ NULL, posts_wline }, /* Bq */ |
{ NULL, posts_wline }, /* Bq */ |
{ NULL, NULL }, /* Bsx */ |
{ NULL, NULL }, /* Bsx */ |
Line 474 hwarn_ge1(struct mdoc *mdoc) |
|
Line 477 hwarn_ge1(struct mdoc *mdoc) |
|
|
|
|
|
static int |
static int |
|
herr_le1(struct mdoc *mdoc) |
|
{ |
|
if (MDOC_HEAD != mdoc->last->type) |
|
return(1); |
|
return(post_check_children_lt(mdoc, "parameters", 2)); |
|
} |
|
|
|
|
|
static int |
herr_ge1(struct mdoc *mdoc) |
herr_ge1(struct mdoc *mdoc) |
{ |
{ |
|
|
Line 763 pre_prologue(struct mdoc *mdoc, struct mdoc_node *node |
|
Line 775 pre_prologue(struct mdoc *mdoc, struct mdoc_node *node |
|
} |
} |
|
|
return(mdoc_nerr(mdoc, node, "prologue macro repeated")); |
return(mdoc_nerr(mdoc, node, "prologue macro repeated")); |
|
} |
|
|
|
|
|
static int |
|
post_bf(struct mdoc *mdoc) |
|
{ |
|
char *p; |
|
struct mdoc_node *head; |
|
|
|
if (MDOC_BLOCK != mdoc->last->type) |
|
return(1); |
|
assert(MDOC_Bf == mdoc->last->tok); |
|
head = mdoc->last->data.block.head; |
|
assert(head); |
|
|
|
if (0 == mdoc->last->data.block.argc) { |
|
if (head->child) { |
|
assert(MDOC_TEXT == head->child->type); |
|
p = head->child->data.text.string; |
|
if (xstrcmp(p, "Em")) |
|
return(1); |
|
else if (xstrcmp(p, "Li")) |
|
return(1); |
|
else if (xstrcmp(p, "Sm")) |
|
return(1); |
|
return(mdoc_nerr(mdoc, head->child, "invalid font mode")); |
|
} |
|
return(mdoc_err(mdoc, "macro expects an argument or parameter")); |
|
} |
|
if (head->child) |
|
return(mdoc_err(mdoc, "macro expects an argument or parameter")); |
|
if (1 == mdoc->last->data.block.argc) |
|
return(1); |
|
return(mdoc_err(mdoc, "macro expects an argument or parameter")); |
} |
} |
|
|
|
|