=================================================================== RCS file: /cvs/mandoc/man_validate.c,v retrieving revision 1.25 retrieving revision 1.31 diff -u -p -r1.25 -r1.31 --- mandoc/man_validate.c 2009/10/18 11:36:37 1.25 +++ mandoc/man_validate.c 2010/03/24 20:10:53 1.31 @@ -1,4 +1,4 @@ -/* $Id: man_validate.c,v 1.25 2009/10/18 11:36:37 kristaps Exp $ */ +/* $Id: man_validate.c,v 1.31 2010/03/24 20:10:53 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -14,6 +14,10 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include @@ -42,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); @@ -51,12 +56,13 @@ static v_check posts_ge2_le5[] = { check_ge2, check_ static v_check posts_par[] = { check_par, NULL }; static v_check posts_part[] = { check_part, NULL }; static v_check posts_sec[] = { check_sec, NULL }; -static v_check posts_sp[] = { check_le1, 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] = { - { pres_bline, posts_eq0 }, /* br */ - { pres_bline, posts_ge2_le5 }, /* TH */ + { NULL, posts_eq0 }, /* br */ + { pres_bline, posts_ge2_le5 }, /* TH */ /* FIXME: make sure capitalised. */ { pres_bline, posts_sec }, /* SH */ { pres_bline, posts_sec }, /* SS */ { pres_bline, posts_par }, /* TP */ @@ -76,9 +82,9 @@ static const struct man_valid man_valids[MAN_MAX] = { { NULL, NULL }, /* I */ { NULL, NULL }, /* IR */ { NULL, NULL }, /* RI */ - { pres_bline, posts_eq0 }, /* na */ + { NULL, posts_eq0 }, /* na */ { NULL, NULL }, /* i */ - { pres_bline, posts_sp }, /* sp */ + { NULL, posts_le1 }, /* sp */ { pres_bline, posts_eq0 }, /* nf */ { pres_bline, posts_eq0 }, /* fi */ { NULL, NULL }, /* r */ @@ -86,6 +92,16 @@ static const struct man_valid man_valids[MAN_MAX] = { { NULL, posts_part }, /* RS */ { NULL, NULL }, /* DT */ { NULL, NULL }, /* UC */ + { NULL, NULL }, /* PD */ + { 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 }, /* . */ }; @@ -276,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); +}