version 1.62, 2011/02/09 09:18:15 |
version 1.66, 2011/03/22 14:33:05 |
|
|
/* $Id$ */ |
/* $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 |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
|
|
#include <string.h> |
#include <string.h> |
#include <time.h> |
#include <time.h> |
|
|
|
#include "man.h" |
#include "mandoc.h" |
#include "mandoc.h" |
#include "libman.h" |
#include "libman.h" |
#include "libmandoc.h" |
#include "libmandoc.h" |
Line 194 check_root(CHKARGS) |
|
Line 196 check_root(CHKARGS) |
|
*/ |
*/ |
|
|
m->meta.title = mandoc_strdup("unknown"); |
m->meta.title = mandoc_strdup("unknown"); |
m->meta.date = time(NULL); |
|
m->meta.msec = mandoc_strdup("1"); |
m->meta.msec = mandoc_strdup("1"); |
|
m->meta.date = mandoc_normdate |
|
(m->parse, NULL, n->line, n->pos); |
} |
} |
|
|
return(1); |
return(1); |
Line 221 check_text(CHKARGS) |
|
Line 224 check_text(CHKARGS) |
|
if ('\t' == *p) { |
if ('\t' == *p) { |
if (MAN_LITERAL & m->flags) |
if (MAN_LITERAL & m->flags) |
continue; |
continue; |
if (man_pmsg(m, n->line, pos, MANDOCERR_BADTAB)) |
man_pmsg(m, n->line, pos, MANDOCERR_BADTAB); |
continue; |
continue; |
return(0); |
|
} |
} |
|
|
/* Check the special character. */ |
/* Check the special character. */ |
Line 246 check_##name(CHKARGS) \ |
|
Line 248 check_##name(CHKARGS) \ |
|
{ \ |
{ \ |
if (n->nchild ineq (x)) \ |
if (n->nchild ineq (x)) \ |
return(1); \ |
return(1); \ |
man_vmsg(m, MANDOCERR_ARGCOUNT, n->line, n->pos, \ |
mandoc_vmsg(MANDOCERR_ARGCOUNT, m->parse, n->line, n->pos, \ |
"line arguments %s %d (have %d)", \ |
"line arguments %s %d (have %d)", \ |
#ineq, (x), n->nchild); \ |
#ineq, (x), n->nchild); \ |
return(1); \ |
return(1); \ |
Line 298 check_ft(CHKARGS) |
|
Line 300 check_ft(CHKARGS) |
|
} |
} |
|
|
if (0 == ok) { |
if (0 == ok) { |
man_vmsg(m, MANDOCERR_BADFONT, |
mandoc_vmsg |
n->line, n->pos, "%s", cp); |
(MANDOCERR_BADFONT, m->parse, |
|
n->line, n->pos, "%s", cp); |
*cp = '\0'; |
*cp = '\0'; |
} |
} |
|
|
if (1 < n->nchild) |
if (1 < n->nchild) |
man_vmsg(m, MANDOCERR_ARGCOUNT, n->line, n->pos, |
mandoc_vmsg |
"want one child (have %d)", n->nchild); |
(MANDOCERR_ARGCOUNT, m->parse, n->line, |
|
n->pos, "want one child (have %d)", |
|
n->nchild); |
|
|
return(1); |
return(1); |
} |
} |
|
|
post_TH(CHKARGS) |
post_TH(CHKARGS) |
{ |
{ |
const char *p; |
const char *p; |
|
int line, pos; |
|
|
if (m->meta.title) |
if (m->meta.title) |
free(m->meta.title); |
free(m->meta.title); |
Line 386 post_TH(CHKARGS) |
|
Line 392 post_TH(CHKARGS) |
|
free(m->meta.source); |
free(m->meta.source); |
if (m->meta.msec) |
if (m->meta.msec) |
free(m->meta.msec); |
free(m->meta.msec); |
if (m->meta.rawdate) |
if (m->meta.date) |
free(m->meta.rawdate); |
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.msec = m->meta.source = NULL; |
m->meta.date = 0; |
|
|
|
/* ->TITLE<- MSEC DATE SOURCE VOL */ |
/* ->TITLE<- MSEC DATE SOURCE VOL */ |
|
|
Line 419 post_TH(CHKARGS) |
|
Line 426 post_TH(CHKARGS) |
|
|
|
/* TITLE MSEC ->DATE<- SOURCE VOL */ |
/* 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) |
if (n) |
n = n->next; |
n = n->next; |
if (n && n->string && *n->string) { |
if (n) |
m->meta.date = mandoc_a2time |
pos = n->pos; |
(MTIME_ISO_8601, n->string); |
m->meta.date = mandoc_normdate |
if (0 == m->meta.date) { |
(m->parse, n ? n->string : NULL, line, pos); |
man_nmsg(m, n, MANDOCERR_BADDATE); |
|
m->meta.rawdate = mandoc_strdup(n->string); |
|
} |
|
} else |
|
m->meta.date = time(NULL); |
|
|
|
/* TITLE MSEC DATE ->SOURCE<- VOL */ |
/* TITLE MSEC DATE ->SOURCE<- VOL */ |
|
|