-/* $Id: read.c,v 1.67 2014/07/07 16:12:20 schwarze Exp $ */
+/* $Id: read.c,v 1.72 2014/07/30 14:50:08 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
mandocmsg mmsg; /* warning/error message handler */
const char *file;
struct buf *secondary;
- char *defos; /* default operating system */
+ const char *defos; /* default operating system */
};
static void resize_buf(struct buf *, size_t);
"missing display type, using -ragged",
"list type is not the first argument",
"missing -width in -tag list, using 8n",
+ "missing name for .Ex, using \"\"",
"empty head in list item",
"empty list item",
"missing font type, using \\fR",
"data block still open",
"ignoring extra data cells",
+ /* related to document structure and macros */
"input stack limit exceeded, infinite loop?",
"skipping bad character",
- "escaped character not allowed in a name",
- "manual name not yet set",
"skipping unknown macro",
- "argument count wrong",
- "unknown standard specifier",
"skipping column outside column list",
"skipping end of block that is not open",
- "missing end of block",
- "scope open on exit",
- "uname(3) system call failed",
- "request requires a numeric argument",
+ "inserting missing end of block",
+ "appending missing end of block",
+
+ /* 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",
+ "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: .so with absolute path or \"..\"",
".so request failed",
- "no document prologue",
"static buffer exhausted",
/* system errors */
}
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;
}
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;
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);
}
struct mparse *
mparse_alloc(int options, enum mandoclevel wlevel,
- mandocmsg mmsg, char *defos)
+ mandocmsg mmsg, const char *defos)
{
struct mparse *curp;
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);
}