]> git.cameronkatri.com Git - mandoc.git/blobdiff - read.c
Remove two useless FATAL errors.
[mandoc.git] / read.c
diff --git a/read.c b/read.c
index 8cc2d17fb2c22edddaa5c0639d05b90f39b5095a..21357c62d08ef060a92284c763fd76ba4f1054d2 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/*     $Id: read.c,v 1.59 2014/07/03 23:24:56 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>
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -65,7 +65,7 @@ struct        mparse {
        mandocmsg         mmsg; /* warning/error message handler */
        const char       *file;
        struct buf       *secondary;
        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);
 };
 
 static void      resize_buf(struct buf *, size_t);
@@ -131,31 +131,36 @@ static    const char * const      mandocerrs[MANDOCERR_MAX] = {
        "skipping empty request",
        "conditional request controls empty scope",
        "skipping empty macro",
        "skipping empty request",
        "conditional request controls empty scope",
        "skipping empty macro",
+       "empty argument, using 0n",
        "argument count wrong",
        "argument count wrong",
-       "missing display type",
-       "list type must come first",
-       "tag lists require a width argument",
-       "missing head in list item",
-       "missing font type",
+       "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",
+       "unknown font type, using \\fR",
+       "missing -std argument, adding it",
 
        /* related to bad macro arguments */
        "skipping argument",
 
        /* related to bad macro arguments */
        "skipping argument",
+       "unterminated quoted argument",
        "duplicate argument",
        "duplicate argument",
-       "duplicate display type",
-       "duplicate list type",
+       "skipping duplicate display type",
+       "skipping duplicate list type",
        "unknown AT&T UNIX version",
        "unknown AT&T UNIX version",
-       "bad Boolean value",
-       "unknown font",
-       "unknown standard specifier",
-       "bad width argument",
+       "invalid content in Rs block",
+       "invalid Boolean argument",
+       "unknown font, skipping request",
 
        /* related to plain text */
 
        /* related to plain text */
-       "blank line in non-literal context",
-       "tab in non-literal context",
-       "end of line whitespace",
+       "blank line in fill mode, using .sp",
+       "tab in filled text",
+       "whitespace at end of input line",
        "bad comment style",
        "bad comment style",
-       "bad escape sequence",
-       "unterminated quoted string",
+       "invalid escape sequence",
+       "undefined string, using \"\"",
 
        "generic error",
 
 
        "generic error",
 
@@ -176,38 +181,35 @@ static    const char * const      mandocerrs[MANDOCERR_MAX] = {
        "data block still open",
        "ignoring extra data cells",
 
        "data block still open",
        "ignoring extra data cells",
 
+       /* related to document structure and macros */
        "input stack limit exceeded, infinite loop?",
        "skipping bad character",
        "input stack limit exceeded, infinite loop?",
        "skipping bad character",
-       "escaped character not allowed in a name",
-       "manual name not yet set",
-       "skipping text before first section header",
        "skipping unknown macro",
        "skipping unknown macro",
-       "NOT IMPLEMENTED, please use groff: skipping request",
-       "argument count wrong",
-       "skipping invalid content in .Rs block",
        "skipping column outside column list",
        "skipping end of block that is not open",
        "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",
-       "macro requires body argument(s)",
-       "macro requires argument(s)",
-       "request requires a numeric argument",
-       "missing list type",
-       "line argument(s) will be lost",
+       "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",
 
        "generic fatal error",
 
        "input too large",
-       "not a manual",
        "column syntax is inconsistent",
        "NOT IMPLEMENTED: .Bd -file",
        "column syntax is inconsistent",
        "NOT IMPLEMENTED: .Bd -file",
-       "argument count wrong, violates syntax",
        "child violates parent syntax",
        "argument count wrong, violates syntax",
        "NOT IMPLEMENTED: .so with absolute path or \"..\"",
        ".so request failed",
        "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 */
        "static buffer exhausted",
 
        /* system errors */
@@ -260,18 +262,9 @@ pset(const char *buf, int pos, struct mparse *curp)
        }
 
        if (MPARSE_MDOC & curp->options) {
        }
 
        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) {
                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;
        }
                curp->man = curp->pman;
                return;
        }
@@ -679,6 +672,19 @@ mparse_end(struct mparse *curp)
        if (MANDOCLEVEL_FATAL <= curp->file_status)
                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;
        if (curp->mdoc && ! mdoc_endparse(curp->mdoc)) {
                assert(MANDOCLEVEL_FATAL <= curp->file_status);
                return;
@@ -689,12 +695,6 @@ mparse_end(struct mparse *curp)
                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);
 }
 
        roff_endparse(curp->roff);
 }
 
@@ -778,7 +778,7 @@ out:
 
 struct mparse *
 mparse_alloc(int options, enum mandoclevel wlevel,
 
 struct mparse *
 mparse_alloc(int options, enum mandoclevel wlevel,
-               mandocmsg mmsg, char *defos)
+               mandocmsg mmsg, const char *defos)
 {
        struct mparse   *curp;
 
 {
        struct mparse   *curp;
 
@@ -792,6 +792,14 @@ mparse_alloc(int options, enum mandoclevel wlevel,
        curp->defos = defos;
 
        curp->roff = roff_alloc(curp, options);
        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);
 }
 
        return(curp);
 }