=================================================================== RCS file: /cvs/mandoc/man_validate.c,v retrieving revision 1.81 retrieving revision 1.84 diff -u -p -r1.81 -r1.84 --- mandoc/man_validate.c 2012/06/02 20:16:23 1.81 +++ mandoc/man_validate.c 2012/07/29 12:35:42 1.84 @@ -1,7 +1,7 @@ -/* $Id: man_validate.c,v 1.81 2012/06/02 20:16:23 schwarze Exp $ */ +/* $Id: man_validate.c,v 1.84 2012/07/29 12:35:42 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2010 Ingo Schwarze + * Copyright (c) 2010, 2012 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -55,6 +55,7 @@ static int check_root(CHKARGS); static void check_text(CHKARGS); static int post_AT(CHKARGS); +static int post_IP(CHKARGS); static int post_vs(CHKARGS); static int post_fi(CHKARGS); static int post_ft(CHKARGS); @@ -70,6 +71,8 @@ static v_check posts_eq0[] = { check_eq0, NULL }; static v_check posts_eq2[] = { check_eq2, NULL }; static v_check posts_fi[] = { check_eq0, post_fi, NULL }; static v_check posts_ft[] = { post_ft, NULL }; +static v_check posts_ip[] = { post_IP, NULL }; +static v_check posts_le1[] = { check_le1, NULL }; static v_check posts_nf[] = { check_eq0, post_nf, NULL }; static v_check posts_par[] = { check_par, NULL }; static v_check posts_part[] = { check_part, NULL }; @@ -88,7 +91,7 @@ static const struct man_valid man_valids[MAN_MAX] = { { NULL, posts_par }, /* LP */ { NULL, posts_par }, /* PP */ { NULL, posts_par }, /* P */ - { NULL, NULL }, /* IP */ + { NULL, posts_ip }, /* IP */ { NULL, NULL }, /* HP */ { NULL, NULL }, /* SM */ { NULL, NULL }, /* SB */ @@ -109,7 +112,7 @@ static const struct man_valid man_valids[MAN_MAX] = { { NULL, posts_part }, /* RS */ { NULL, NULL }, /* DT */ { NULL, posts_uc }, /* UC */ - { NULL, NULL }, /* PD */ + { NULL, posts_le1 }, /* PD */ { NULL, posts_at }, /* AT */ { NULL, NULL }, /* in */ { NULL, posts_ft }, /* ft */ @@ -354,7 +357,25 @@ check_par(CHKARGS) return(1); } +static int +post_IP(CHKARGS) +{ + switch (n->type) { + case (MAN_BLOCK): + if (0 == n->head->nchild && 0 == n->body->nchild) + man_node_delete(m, n); + break; + case (MAN_BODY): + if (0 == n->parent->head->nchild && 0 == n->nchild) + man_nmsg(m, n, MANDOCERR_IGNPAR); + break; + default: + break; + } + return(1); +} + static int post_TH(CHKARGS) { @@ -541,12 +562,25 @@ static int post_vs(CHKARGS) { - /* - * Don't warn about this because it occurs in pod2man and would - * cause considerable (unfixable) warnage. - */ - if (NULL == n->prev && MAN_ROOT == n->parent->type) + if (NULL != n->prev) + return(1); + + switch (n->parent->tok) { + case (MAN_SH): + /* FALLTHROUGH */ + case (MAN_SS): + man_nmsg(m, n, MANDOCERR_IGNPAR); + /* FALLTHROUGH */ + case (MAN_MAX): + /* + * Don't warn about this because it occurs in pod2man + * and would cause considerable (unfixable) warnage. + */ man_node_delete(m, n); + break; + default: + break; + } return(1); }