-/* $Id: mdoc.c,v 1.118 2010/03/31 07:42:04 kristaps Exp $ */
+/* $Id: mdoc.c,v 1.120 2010/04/05 08:59:46 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include "libmdoc.h"
#include "libmandoc.h"
* we're in the body, deny prologue calls.
*/
if (MDOC_PROLOGUE & mdoc_macros[tok].flags &&
- MDOC_PBODY & m->flags)
- return(mdoc_perr(m, ln, pp, EPROLBODY));
+ MDOC_PBODY & m->flags) {
+ if ( ! mdoc_pwarn(m, ln, pp, EBODYPROL))
+ return(0);
+ /*
+ * FIXME: do this in mdoc_action.c.
+ */
+ if (NULL == m->meta.title)
+ m->meta.title = mandoc_strdup("unknown");
+ if (NULL == m->meta.vol)
+ m->meta.vol = mandoc_strdup("local");
+ if (NULL == m->meta.os)
+ m->meta.os = mandoc_strdup("local");
+ if (0 == m->meta.date)
+ m->meta.date = time(NULL);
+ m->flags |= MDOC_PBODY;
+ }
if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) &&
! (MDOC_PBODY & m->flags))
return(mdoc_perr(m, ln, pp, EBODYPROL));
for (i = 0; ' ' == buf[i]; i++)
/* Skip leading whitespace. */ ;
- if ('\0' == buf[i])
- return(mdoc_perr(m, line, 0, ENOBLANK));
+ if ('\0' == buf[i]) {
+ if ( ! mdoc_pwarn(m, line, 0, ENOBLANK))
+ return(0);
+ /*
+ * Assume that a `Pp' should be inserted in the case of
+ * a blank line. Technically, blank lines aren't
+ * allowed, but enough manuals assume this behaviour
+ * that we want to work around it.
+ */
+ if ( ! mdoc_elem_alloc(m, line, 0, MDOC_Pp, NULL))
+ return(0);
+ }
/*
* Break apart a free-form line into tokens. Spaces are