=================================================================== RCS file: /cvs/mandoc/read.c,v retrieving revision 1.70 retrieving revision 1.81 diff -u -p -r1.70 -r1.81 --- mandoc/read.c 2014/07/30 00:19:16 1.70 +++ mandoc/read.c 2014/08/16 19:00:01 1.81 @@ -1,4 +1,4 @@ -/* $Id: read.c,v 1.70 2014/07/30 00:19:16 schwarze Exp $ */ +/* $Id: read.c,v 1.81 2014/08/16 19:00:01 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010-2014 Ingo Schwarze @@ -16,13 +16,12 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif -#ifdef HAVE_MMAP -# include -# include +#include +#if HAVE_MMAP +#include +#include #endif #include @@ -93,16 +92,19 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "generic warning", /* related to the prologue */ - "missing .TH macro, using \"unknown 1\"", + "missing manual title, using UNTITLED", + "missing manual title, using \"\"", "lower case character in document title", + "missing manual section, using \"\"", "unknown manual section", "unknown manual volume or arch", "missing date, using today's date", "cannot parse date, using it verbatim", - "prologue macros out of order", + "missing Os macro, using \"\"", "duplicate prologue macro", - "incomplete prologue, terminated by", - "skipping prologue macro in body", + "late prologue macro", + "skipping late title macro", + "prologue macros out of order", /* related to document structure */ ".so is fragile, better use ln(1)", @@ -123,8 +125,8 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "nested displays are not portable", "moving content out of list", ".Vt block has child macro", - "fill mode already enabled, skipping .fi", - "fill mode already disabled, skipping .nf", + "fill mode already enabled, skipping", + "fill mode already disabled, skipping", "line scope broken", /* related to missing macro arguments */ @@ -136,7 +138,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "missing display type, using -ragged", "list type is not the first argument", "missing -width in -tag list, using 8n", - "missing name for .Ex, using \"\"", + "missing utility name, using \"\"", "empty head in list item", "empty list item", "missing font type, using \\fR", @@ -144,11 +146,12 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "missing -std argument, adding it", /* related to bad macro arguments */ - "skipping argument", "unterminated quoted argument", "duplicate argument", + "skipping duplicate argument", "skipping duplicate display type", "skipping duplicate list type", + "skipping -width argument", "unknown AT&T UNIX version", "invalid content in Rs block", "invalid Boolean argument", @@ -185,6 +188,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "input stack limit exceeded, infinite loop?", "skipping bad character", "skipping unknown macro", + "skipping item outside list", "skipping column outside column list", "skipping end of block that is not open", "inserting missing end of block", @@ -193,26 +197,20 @@ static const char * const mandocerrs[MANDOCERR_MAX] = /* related to request and macro arguments */ "escaped character not allowed in a name", "argument count wrong", + "missing list type, using -item", "missing manual name, using \"\"", + "uname(3) system call failed, using UNKNOWN", "unknown standard specifier", - "uname(3) system call failed", - "request requires a numeric argument", - "missing list type, using -item", + "skipping request without numeric argument", "skipping all arguments", "skipping excess arguments", "generic fatal error", "input too large", - "not a manual", - "column syntax is inconsistent", - "NOT IMPLEMENTED: .Bd -file", - "child violates parent syntax", - "argument count wrong, violates syntax", + "NOT IMPLEMENTED: Bd -file", "NOT IMPLEMENTED: .so with absolute path or \"..\"", ".so request failed", - "no document prologue", - "static buffer exhausted", /* system errors */ NULL, @@ -264,18 +262,9 @@ pset(const char *buf, int pos, struct mparse *curp) } if (MPARSE_MDOC & curp->options) { - if (NULL == curp->pmdoc) - curp->pmdoc = mdoc_alloc( - curp->roff, curp, curp->defos, - MPARSE_QUICK & curp->options ? 1 : 0); - assert(curp->pmdoc); curp->mdoc = curp->pmdoc; return; } else if (MPARSE_MAN & curp->options) { - if (NULL == curp->pman) - curp->pman = man_alloc(curp->roff, curp, - MPARSE_QUICK & curp->options ? 1 : 0); - assert(curp->pman); curp->man = curp->pman; return; } @@ -366,8 +355,8 @@ mparse_buf_r(struct mparse *curp, struct buf blk, int if ( ! (isascii(c) && (isgraph(c) || isblank(c)))) { - mandoc_msg(MANDOCERR_BADCHAR, curp, - curp->line, pos, NULL); + mandoc_vmsg(MANDOCERR_BADCHAR, curp, + curp->line, pos, "0x%x", c); i++; ln.buf[pos++] = '?'; continue; @@ -423,8 +412,8 @@ mparse_buf_r(struct mparse *curp, struct buf blk, int if ( ! (isascii(c) && (isgraph(c) || isblank(c)))) { - mandoc_msg(MANDOCERR_BADCHAR, curp, - curp->line, pos, NULL); + mandoc_vmsg(MANDOCERR_BADCHAR, curp, + curp->line, pos, "0x%x", c); i += 2; ln.buf[pos++] = '?'; continue; @@ -601,7 +590,7 @@ read_whole_file(struct mparse *curp, const char *file, size_t off; ssize_t ssz; -#ifdef HAVE_MMAP +#if HAVE_MMAP struct stat st; if (-1 == fstat(fd, &st)) { curp->file_status = MANDOCLEVEL_SYSERR; @@ -683,6 +672,19 @@ mparse_end(struct mparse *curp) if (MANDOCLEVEL_FATAL <= curp->file_status) return; + if (curp->mdoc == NULL && + curp->man == NULL && + curp->sodest == NULL) { + if (curp->options & MPARSE_MDOC) + curp->mdoc = curp->pmdoc; + else { + if (curp->pman == NULL) + curp->pman = man_alloc(curp->roff, curp, + curp->options & MPARSE_QUICK ? 1 : 0); + curp->man = curp->pman; + } + } + if (curp->mdoc && ! mdoc_endparse(curp->mdoc)) { assert(MANDOCLEVEL_FATAL <= curp->file_status); return; @@ -693,12 +695,6 @@ mparse_end(struct mparse *curp) return; } - if ( ! (curp->mdoc || curp->man || curp->sodest)) { - mandoc_msg(MANDOCERR_NOTMANUAL, curp, 0, 0, NULL); - curp->file_status = MANDOCLEVEL_FATAL; - return; - } - roff_endparse(curp->roff); } @@ -767,7 +763,7 @@ mparse_readfd(struct mparse *curp, int fd, const char mparse_parse_buffer(curp, blk, file); -#ifdef HAVE_MMAP +#if HAVE_MMAP if (with_mmap) munmap(blk.buf, blk.sz); else @@ -796,6 +792,14 @@ mparse_alloc(int options, enum mandoclevel wlevel, curp->defos = defos; curp->roff = roff_alloc(curp, options); + if (curp->options & MPARSE_MDOC) + curp->pmdoc = mdoc_alloc( + curp->roff, curp, curp->defos, + curp->options & MPARSE_QUICK ? 1 : 0); + if (curp->options & MPARSE_MAN) + curp->pman = man_alloc(curp->roff, curp, + curp->options & MPARSE_QUICK ? 1 : 0); + return(curp); }