From 2d4fe3c4403ea308c0da29fe4250e6fd94ec3108 Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Sun, 4 Sep 2011 09:49:46 +0000 Subject: Teach -man that a literal context should be closed by SS/SH in the backend (the front-end already accomodated for this). Found indirectly from a question by Brad Smith. --- man_validate.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'man_validate.c') diff --git a/man_validate.c b/man_validate.c index 8d61d303..39380fa3 100644 --- a/man_validate.c +++ b/man_validate.c @@ -46,42 +46,44 @@ struct man_valid { static int check_bline(CHKARGS); static int check_eq0(CHKARGS); -static int check_ft(CHKARGS); static int check_le1(CHKARGS); static int check_ge2(CHKARGS); static int check_le5(CHKARGS); static int check_par(CHKARGS); static int check_part(CHKARGS); static int check_root(CHKARGS); -static int check_sec(CHKARGS); static void check_text(CHKARGS); static int post_AT(CHKARGS); static int post_vs(CHKARGS); static int post_fi(CHKARGS); +static int post_ft(CHKARGS); static int post_nf(CHKARGS); +static int post_sec(CHKARGS); static int post_TH(CHKARGS); static int post_UC(CHKARGS); +static int pre_sec(CHKARGS); static v_check posts_at[] = { post_AT, NULL }; static v_check posts_br[] = { post_vs, check_eq0, NULL }; static v_check posts_eq0[] = { check_eq0, NULL }; static v_check posts_fi[] = { check_eq0, post_fi, NULL }; -static v_check posts_ft[] = { check_ft, NULL }; +static v_check posts_ft[] = { post_ft, 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 }; -static v_check posts_sec[] = { check_sec, NULL }; +static v_check posts_sec[] = { post_sec, NULL }; static v_check posts_sp[] = { post_vs, check_le1, NULL }; static v_check posts_th[] = { check_ge2, check_le5, post_TH, NULL }; static v_check posts_uc[] = { post_UC, NULL }; static v_check pres_bline[] = { check_bline, NULL }; +static v_check pres_sec[] = { check_bline, pre_sec, NULL}; static const struct man_valid man_valids[MAN_MAX] = { { NULL, posts_br }, /* br */ { pres_bline, posts_th }, /* TH */ - { pres_bline, posts_sec }, /* SH */ - { pres_bline, posts_sec }, /* SS */ + { pres_sec, posts_sec }, /* SH */ + { pres_sec, posts_sec }, /* SS */ { pres_bline, NULL }, /* TP */ { pres_bline, posts_par }, /* LP */ { pres_bline, posts_par }, /* PP */ @@ -237,7 +239,7 @@ INEQ_DEFINE(2, >=, ge2) INEQ_DEFINE(5, <=, le5) static int -check_ft(CHKARGS) +post_ft(CHKARGS) { char *cp; int ok; @@ -293,7 +295,16 @@ check_ft(CHKARGS) } static int -check_sec(CHKARGS) +pre_sec(CHKARGS) +{ + + if (MAN_BLOCK == n->type) + m->flags &= ~MAN_LITERAL; + return(1); +} + +static int +post_sec(CHKARGS) { if ( ! (MAN_HEAD == n->type && 0 == n->nchild)) @@ -303,7 +314,6 @@ check_sec(CHKARGS) return(0); } - static int check_part(CHKARGS) { -- cgit