=================================================================== RCS file: /cvs/mandoc/man_validate.c,v retrieving revision 1.60 retrieving revision 1.64 diff -u -p -r1.60 -r1.64 --- mandoc/man_validate.c 2011/01/17 00:21:29 1.60 +++ mandoc/man_validate.c 2011/03/17 11:56:17 1.64 @@ -1,6 +1,7 @@ -/* $Id: man_validate.c,v 1.60 2011/01/17 00:21:29 schwarze Exp $ */ +/* $Id: man_validate.c,v 1.64 2011/03/17 11:56:17 kristaps Exp $ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons + * Copyright (c) 2010 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 @@ -121,6 +122,8 @@ man_valid_pre(struct man *m, struct man_node *n) /* FALLTHROUGH */ case (MAN_ROOT): /* FALLTHROUGH */ + case (MAN_EQN): + /* FALLTHROUGH */ case (MAN_TBL): return(1); default: @@ -150,6 +153,8 @@ man_valid_post(struct man *m) return(check_text(m, m->last)); case (MAN_ROOT): return(check_root(m, m->last)); + case (MAN_EQN): + /* FALLTHROUGH */ case (MAN_TBL): return(1); default: @@ -190,8 +195,9 @@ check_root(CHKARGS) */ m->meta.title = mandoc_strdup("unknown"); - m->meta.date = time(NULL); m->meta.msec = mandoc_strdup("1"); + m->meta.date = mandoc_normdate(NULL, + m->msg, m->data, n->line, n->pos); } return(1); @@ -217,9 +223,8 @@ check_text(CHKARGS) if ('\t' == *p) { if (MAN_LITERAL & m->flags) continue; - if (man_pmsg(m, n->line, pos, MANDOCERR_BADTAB)) - continue; - return(0); + man_pmsg(m, n->line, pos, MANDOCERR_BADTAB); + continue; } /* Check the special character. */ @@ -294,7 +299,7 @@ check_ft(CHKARGS) } if (0 == ok) { - man_vmsg(m, MANDOCERR_BADFONT, + man_vmsg(m, MANDOCERR_BADFONT, n->line, n->pos, "%s", cp); *cp = '\0'; } @@ -373,6 +378,7 @@ static int post_TH(CHKARGS) { const char *p; + int line, pos; if (m->meta.title) free(m->meta.title); @@ -382,12 +388,13 @@ post_TH(CHKARGS) free(m->meta.source); if (m->meta.msec) free(m->meta.msec); - if (m->meta.rawdate) - free(m->meta.rawdate); + if (m->meta.date) + free(m->meta.date); - m->meta.title = m->meta.vol = m->meta.rawdate = + line = n->line; + pos = n->pos; + m->meta.title = m->meta.vol = m->meta.date = m->meta.msec = m->meta.source = NULL; - m->meta.date = 0; /* ->TITLE<- MSEC DATE SOURCE VOL */ @@ -415,24 +422,12 @@ post_TH(CHKARGS) /* TITLE MSEC ->DATE<- SOURCE VOL */ - /* - * Try to parse the date. If this works, stash the epoch (this - * is optimal because we can reformat it in the canonical form). - * If it doesn't parse, isn't specified at all, or is an empty - * string, then use the current date. - */ - if (n) n = n->next; - if (n && n->string && *n->string) { - m->meta.date = mandoc_a2time - (MTIME_ISO_8601, n->string); - if (0 == m->meta.date) { - man_nmsg(m, n, MANDOCERR_BADDATE); - m->meta.rawdate = mandoc_strdup(n->string); - } - } else - m->meta.date = time(NULL); + if (n) + pos = n->pos; + m->meta.date = mandoc_normdate(n ? n->string : NULL, + m->msg, m->data, line, pos); /* TITLE MSEC DATE ->SOURCE<- VOL */