diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2011-03-07 01:35:51 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2011-03-07 01:35:51 +0000 |
commit | 860c46e76e21acef233ea6b22f4cf3f19ac662a6 (patch) | |
tree | 3fd72d4d6d98f026b3dd3f02bd69673454089ab0 /man_validate.c | |
parent | 2d69adf810fd4bbdd2db0a89bd3f90a5d65821f4 (diff) | |
download | mandoc-860c46e76e21acef233ea6b22f4cf3f19ac662a6.tar.gz |
Clean up date handling,
as a first step to get rid of the frequent petty warnings in this area:
- always store dates as strings, not as seconds since the Epoch
- for input, try the three most common formats everywhere
- for unrecognized format, just pass the date though verbatim
- when there is no date at all, still use the current date
Originally triggered by a one-line patch from Tim van der Molen,
<tbvdm at xs4all dot nl>, which is included here.
Feedback and OK on manual parts from jmc@.
"please check this in" kristaps@
Diffstat (limited to 'man_validate.c')
-rw-r--r-- | man_validate.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/man_validate.c b/man_validate.c index f9f48e14..07fe1051 100644 --- a/man_validate.c +++ b/man_validate.c @@ -1,6 +1,7 @@ /* $Id$ */ /* - * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv> + * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> + * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -194,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); @@ -298,7 +300,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'; } @@ -377,6 +379,7 @@ static int post_TH(CHKARGS) { const char *p; + int line, pos; if (m->meta.title) free(m->meta.title); @@ -386,12 +389,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 */ @@ -419,24 +423,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 */ |