diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-03-24 20:10:53 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2010-03-24 20:10:53 +0000 |
commit | 1bd27bfb1ecce0925949a108025f62bf87b5c5f5 (patch) | |
tree | 121babbde4f600edf3a9e716f4d00acf795aa3f6 /man_validate.c | |
parent | efcc4d089d85c2b28629f9b05e441837f2c1a4f2 (diff) | |
download | mandoc-1bd27bfb1ecce0925949a108025f62bf87b5c5f5.tar.gz |
Using man_node_delete() instead of man_node_free()/man_node_freelist() and friends (much simpler).
Split blk_imp() into blk_exp() (explicit macros), blk_dotted() (roff macros), and the original.
Added de, dei, am, ami, and ig roff macros (for now, these are discarded within the parse).
Diffstat (limited to 'man_validate.c')
-rw-r--r-- | man_validate.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/man_validate.c b/man_validate.c index 6d0c5e4d..6787d911 100644 --- a/man_validate.c +++ b/man_validate.c @@ -46,6 +46,7 @@ static int check_ge2(CHKARGS); static int check_le5(CHKARGS); static int check_par(CHKARGS); static int check_part(CHKARGS); +static int check_roff(CHKARGS); static int check_root(CHKARGS); static int check_sec(CHKARGS); static int check_text(CHKARGS); @@ -57,6 +58,7 @@ static v_check posts_part[] = { check_part, NULL }; static v_check posts_sec[] = { check_sec, NULL }; static v_check posts_le1[] = { check_le1, NULL }; static v_check pres_bline[] = { check_bline, NULL }; +static v_check pres_roff[] = { check_bline, check_roff, NULL }; static const struct man_valid man_valids[MAN_MAX] = { { NULL, posts_eq0 }, /* br */ @@ -94,6 +96,12 @@ static const struct man_valid man_valids[MAN_MAX] = { { NULL, posts_eq0 }, /* Sp */ { pres_bline, posts_le1 }, /* Vb */ { pres_bline, posts_eq0 }, /* Ve */ + { pres_roff, NULL }, /* de */ + { pres_roff, NULL }, /* dei */ + { pres_roff, NULL }, /* am */ + { pres_roff, NULL }, /* ami */ + { pres_roff, NULL }, /* ig */ + { NULL, NULL }, /* . */ }; @@ -284,6 +292,24 @@ check_bline(CHKARGS) assert( ! (MAN_ELINE & m->flags)); if (MAN_BLINE & m->flags) return(man_nerr(m, n, WLNSCOPE)); + return(1); } + +static int +check_roff(CHKARGS) +{ + + if (MAN_BLOCK != n->type) + return(1); + + for (n = n->parent; n; n = n->parent) + if (MAN_de == n->tok || MAN_dei == n->tok || + MAN_am == n->tok || + MAN_ami == n->tok || + MAN_ig == n->tok) + return(man_nerr(m, n, WROFFNEST)); + + return(1); +} |