From b04f9fcc8c94ff8c36d4c2bfe95d687784d4168f Mon Sep 17 00:00:00 2001 From: schwarze Date: Mon, 29 Mar 2010 22:56:52 +0000 Subject: merge 1.9.19, keeping local patches * scoping fixes for roff instructions * accept apostroph in place of dot as a macro control character * accept tabs between the control character and the macro name * check that man(7) .TH titles use capital letters --- usr.bin/mandoc/man_validate.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) (limited to 'usr.bin/mandoc/man_validate.c') diff --git a/usr.bin/mandoc/man_validate.c b/usr.bin/mandoc/man_validate.c index 4630457a58a..826df3c3138 100644 --- a/usr.bin/mandoc/man_validate.c +++ b/usr.bin/mandoc/man_validate.c @@ -1,4 +1,4 @@ -/* $Id: man_validate.c,v 1.14 2010/03/26 01:22:05 schwarze Exp $ */ +/* $Id: man_validate.c,v 1.15 2010/03/29 22:56:52 schwarze Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -46,9 +46,10 @@ static int check_roff(CHKARGS); static int check_root(CHKARGS); static int check_sec(CHKARGS); static int check_text(CHKARGS); +static int check_title(CHKARGS); static v_check posts_eq0[] = { check_eq0, NULL }; -static v_check posts_ge2_le5[] = { check_ge2, check_le5, NULL }; +static v_check posts_th[] = { check_ge2, check_le5, check_title, 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 }; @@ -58,7 +59,7 @@ static v_check pres_roff[] = { check_bline, check_roff, NULL }; static const struct man_valid man_valids[MAN_MAX] = { { NULL, posts_eq0 }, /* br */ - { pres_bline, posts_ge2_le5 }, /* TH */ /* FIXME: make sure capitalised. */ + { pres_bline, posts_th }, /* TH */ { pres_bline, posts_sec }, /* SH */ { pres_bline, posts_sec }, /* SS */ { pres_bline, posts_par }, /* TP */ @@ -169,6 +170,24 @@ check_root(CHKARGS) } +static int +check_title(CHKARGS) +{ + const char *p; + + assert(n->child); + if ('\0' == *n->child->string) + return(man_nerr(m, n, WNOTITLE)); + + for (p = n->child->string; '\0' != *p; p++) + if (isalpha((u_char)*p) && ! isupper((u_char)*p)) + if ( ! man_nwarn(m, n, WTITLECASE)) + return(0); + + return(1); +} + + static int check_text(CHKARGS) { -- cgit v1.2.3-59-g8ed1b