=================================================================== RCS file: /cvs/mandoc/man_validate.c,v retrieving revision 1.30 retrieving revision 1.39 diff -u -p -r1.30 -r1.39 --- mandoc/man_validate.c 2010/03/23 11:30:48 1.30 +++ mandoc/man_validate.c 2010/05/15 22:44:04 1.39 @@ -1,4 +1,4 @@ -/* $Id: man_validate.c,v 1.30 2010/03/23 11:30:48 kristaps Exp $ */ +/* $Id: man_validate.c,v 1.39 2010/05/15 22:44:04 kristaps Exp $ */ /* * Copyright (c) 2008, 2009 Kristaps Dzonsons * @@ -49,9 +49,10 @@ static int check_part(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 }; @@ -60,7 +61,7 @@ static v_check pres_bline[] = { check_bline, 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 */ @@ -91,7 +92,7 @@ static const struct man_valid man_valids[MAN_MAX] = { { NULL, NULL }, /* DT */ { NULL, NULL }, /* UC */ { NULL, NULL }, /* PD */ - { NULL, posts_eq0 }, /* Sp */ + { NULL, posts_le1 }, /* Sp */ { pres_bline, posts_le1 }, /* Vb */ { pres_bline, posts_eq0 }, /* Ve */ }; @@ -158,9 +159,38 @@ check_root(CHKARGS) if (NULL == m->first->child) return(man_nerr(m, n, WNODATA)); - if (NULL == m->meta.title) + if (NULL == m->meta.title) { + if ( ! man_nwarn(m, n, WNOTITLE)) + return(0); + /* + * If a title hasn't been set, do so now (by + * implication, date and section also aren't set). + * + * FIXME: this should be in man_action.c. + */ + m->meta.title = mandoc_strdup("unknown"); + m->meta.date = time(NULL); + m->meta.msec = mandoc_strdup("1"); + } + + return(1); +} + + +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); } @@ -191,9 +221,7 @@ check_text(CHKARGS) if ('\t' == *p || isprint((u_char)*p)) continue; - if (MAN_IGN_CHARS & m->pflags) - return(man_pwarn(m, n->line, pos, WNPRINT)); - return(man_perr(m, n->line, pos, WNPRINT)); + return(man_pwarn(m, n->line, pos, WNPRINT)); } return(1); @@ -284,6 +312,7 @@ check_bline(CHKARGS) assert( ! (MAN_ELINE & m->flags)); if (MAN_BLINE & m->flags) return(man_nerr(m, n, WLNSCOPE)); + return(1); }