diff options
author | 2014-08-08 16:17:09 +0000 | |
---|---|---|
committer | 2014-08-08 16:17:09 +0000 | |
commit | 3fdead0c15a9b57a9c5d379eb3eaf79e0a44599f (patch) | |
tree | cdf7ee71b5f7684ce94ade0d0537e56e9efecdf3 /usr.bin/mandoc/mdoc.c | |
parent | Simplify by allowing only one post-handler. (diff) | |
download | wireguard-openbsd-3fdead0c15a9b57a9c5d379eb3eaf79e0a44599f.tar.xz wireguard-openbsd-3fdead0c15a9b57a9c5d379eb3eaf79e0a44599f.zip |
Bring the handling of defective prologues even closer to groff,
in particular relaxing the distinction between prologue and body
and further improving messages.
* The last .Dd wins and the last .Os wins, even in the body.
* The last .Dt before the first body macro wins.
* Missing title in .Dt defaults to UNTITLED. Warn about it.
* Missing section in .Dt does not default to 1. But warn about it.
* Do not warn multiple times about the same mdoc(7) prologue macro.
* Warn about missing .Os.
* Incomplete .TH defaults to empty strings. Warn about it.
Diffstat (limited to 'usr.bin/mandoc/mdoc.c')
-rw-r--r-- | usr.bin/mandoc/mdoc.c | 61 |
1 files changed, 22 insertions, 39 deletions
diff --git a/usr.bin/mandoc/mdoc.c b/usr.bin/mandoc/mdoc.c index be74a3e3180..af1805db250 100644 --- a/usr.bin/mandoc/mdoc.c +++ b/usr.bin/mandoc/mdoc.c @@ -1,4 +1,4 @@ -/* $Id: mdoc.c,v 1.112 2014/08/08 15:54:10 schwarze Exp $ */ +/* $Id: mdoc.c,v 1.113 2014/08/08 16:17:09 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv> * Copyright (c) 2010, 2012, 2013, 2014 Ingo Schwarze <schwarze@openbsd.org> @@ -119,20 +119,13 @@ mdoc_free1(struct mdoc *mdoc) if (mdoc->first) mdoc_node_delete(mdoc, mdoc->first); - if (mdoc->meta.title) - free(mdoc->meta.title); - if (mdoc->meta.os) - free(mdoc->meta.os); - if (mdoc->meta.name) - free(mdoc->meta.name); - if (mdoc->meta.arch) - free(mdoc->meta.arch); - if (mdoc->meta.vol) - free(mdoc->meta.vol); - if (mdoc->meta.msec) - free(mdoc->meta.msec); - if (mdoc->meta.date) - free(mdoc->meta.date); + free(mdoc->meta.msec); + free(mdoc->meta.vol); + free(mdoc->meta.arch); + free(mdoc->meta.date); + free(mdoc->meta.title); + free(mdoc->meta.os); + free(mdoc->meta.name); } /* @@ -267,32 +260,22 @@ mdoc_macro(MACRO_PROT_ARGS) { assert(tok < MDOC_MAX); - /* If we're in the body, deny prologue calls. */ - - if (MDOC_PROLOGUE & mdoc_macros[tok].flags && - MDOC_PBODY & mdoc->flags) { - mandoc_vmsg(MANDOCERR_PROLOG_ONLY, mdoc->parse, - line, ppos, "%s", mdoc_macronames[tok]); - return(1); - } - - /* If we're in the prologue, deny "body" macros. */ - - if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) && - ! (MDOC_PBODY & mdoc->flags)) { - mandoc_vmsg(MANDOCERR_PROLOG_BAD, mdoc->parse, - line, ppos, "%s", mdoc_macronames[tok]); - if (NULL == mdoc->meta.msec) - mdoc->meta.msec = mandoc_strdup("1"); - if (NULL == mdoc->meta.title) - mdoc->meta.title = mandoc_strdup("UNKNOWN"); + if (mdoc->flags & MDOC_PBODY) { + if (tok == MDOC_Dt) { + mandoc_vmsg(MANDOCERR_DT_LATE, + mdoc->parse, line, ppos, + "Dt %s", buf + *pos); + return(1); + } + } else if ( ! (mdoc_macros[tok].flags & MDOC_PROLOGUE)) { + if (mdoc->meta.title == NULL) { + mandoc_vmsg(MANDOCERR_DT_NOTITLE, + mdoc->parse, line, ppos, "%s %s", + mdoc_macronames[tok], buf + *pos); + mdoc->meta.title = mandoc_strdup("UNTITLED"); + } if (NULL == mdoc->meta.vol) mdoc->meta.vol = mandoc_strdup("LOCAL"); - if (NULL == mdoc->meta.os) - mdoc->meta.os = mandoc_strdup("LOCAL"); - if (NULL == mdoc->meta.date) - mdoc->meta.date = mandoc_normdate - (mdoc->parse, NULL, line, ppos); mdoc->flags |= MDOC_PBODY; } |