]> git.cameronkatri.com Git - mandoc.git/blobdiff - mandoc_msg.c
fix the section number in the <title> element for preformatted pages;
[mandoc.git] / mandoc_msg.c
index aa0cce5afda79cc7af71dade07a171dcc4a52f1a..beec5059a28cbca434b36ae1afaa719c802010a2 100644 (file)
@@ -1,7 +1,7 @@
-/*     $OpenBSD$ */
+/* $OpenBSD: mandoc_msg.c,v 1.8 2020/01/19 17:59:01 schwarze Exp $ */
 /*
+ * Copyright (c) 2014-2021 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
- * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Implementation of warning and error messages for mandoc(1).
  */
+#include "config.h"
+
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -27,8 +31,8 @@ static        const enum mandocerr lowest_type[MANDOCLEVEL_MAX] = {
        MANDOCERR_WARNING,
        MANDOCERR_ERROR,
        MANDOCERR_UNSUPP,
-       MANDOCERR_MAX,
-       MANDOCERR_MAX
+       MANDOCERR_BADARG,
+       MANDOCERR_SYSERR
 };
 
 static const char *const level_name[MANDOCLEVEL_MAX] = {
@@ -51,7 +55,6 @@ static        const char *const type_message[MANDOCERR_MAX] = {
        "unknown architecture",
        "operating system explicitly specified",
        "RCS id missing",
-       "referenced manual not found",
 
        "generic style suggestion",
 
@@ -65,10 +68,12 @@ static      const char *const type_message[MANDOCERR_MAX] = {
        "consider using OS macro",
        "errnos out of order",
        "duplicate errno",
+       "referenced manual not found",
        "trailing delimiter",
        "no blank before trailing delimiter",
        "fill mode already enabled, skipping",
        "fill mode already disabled, skipping",
+       "input text line longer than 80 bytes",
        "verbatim \"--\", maybe consider using \\(em",
        "function name without markup",
        "whitespace at end of input line",
@@ -81,7 +86,8 @@ static        const char *const type_message[MANDOCERR_MAX] = {
        "missing manual title, using \"\"",
        "missing manual section, using \"\"",
        "unknown manual section",
-       "missing date, using today's date",
+       "filename/section mismatch",
+       "missing date, using \"\"",
        "cannot parse date, using it verbatim",
        "date in the future, using it anyway",
        "missing Os macro, using \"\"",
@@ -167,6 +173,7 @@ static      const char *const type_message[MANDOCERR_MAX] = {
        "tab in filled text",
        "new sentence, new line",
        "invalid escape sequence",
+       "undefined escape, printing literally",
        "undefined string, using \"\"",
 
        /* related to tables */
@@ -184,13 +191,13 @@ static    const char *const type_message[MANDOCERR_MAX] = {
        "empty tbl layout",
        "invalid character in tbl layout",
        "unmatched parenthesis in tbl layout",
+       "ignoring excessive spacing in tbl layout",
        "tbl without any data cells",
        "ignoring data in spanned tbl cell",
        "ignoring extra tbl data cells",
        "data block open at end of tbl",
 
        /* related to document structure and macros */
-       NULL,
        "duplicate prologue macro",
        "skipping late title macro",
        "input stack limit exceeded, infinite loop?",
@@ -221,6 +228,7 @@ static      const char *const type_message[MANDOCERR_MAX] = {
        "excessive shift",
        "NOT IMPLEMENTED: .so with absolute path or \"..\"",
        ".so request failed",
+       "skipping tag containing whitespace",
        "skipping all arguments",
        "skipping excess arguments",
        "divide by zero",
@@ -228,6 +236,7 @@ static      const char *const type_message[MANDOCERR_MAX] = {
        "unsupported feature",
        "input too large",
        "unsupported control character",
+       "unsupported escape sequence",
        "unsupported roff request",
        "nested .while loops",
        "end of scope with open .while loop",
@@ -236,11 +245,43 @@ static    const char *const type_message[MANDOCERR_MAX] = {
        "eqn delim option in tbl",
        "unsupported tbl layout modifier",
        "ignoring macro in table",
+       "skipping tbl in -Tman mode",
+       "skipping eqn in -Tman mode",
+
+       /* bad command line arguments */
+       NULL,
+       "bad command line argument",
+       "duplicate command line argument",
+       "option has a superfluous value",
+       "missing option value",
+       "bad option value",
+       "duplicate option value",
+       "no such tag",
+       "-Tmarkdown unsupported for man(7) input",
+
+       /* system errors */
+       NULL,
+       "dup",
+       "exec",
+       "fdopen",
+       "fflush",
+       "fork",
+       "fstat",
+       "getline",
+       "glob",
+       "gzclose",
+       "gzdopen",
+       "mkstemp",
+       "open",
+       "pledge",
+       "read",
+       "wait",
+       "write",
 };
 
-static FILE            *fileptr = stderr;
+static FILE            *fileptr = NULL;
 static const char      *filename = NULL;
-static enum mandocerr   min_type = MANDOCERR_MAX;
+static enum mandocerr   min_type = MANDOCERR_BADARG;
 static enum mandoclevel rc = MANDOCLEVEL_OK;
 
 
@@ -288,16 +329,15 @@ mandoc_msg_setrc(enum mandoclevel level)
 }
 
 void
-mandoc_vmsg(enum mandocerr t, void *dummy, int line, int col,
-    const char *fmt, ...)
+mandoc_msg(enum mandocerr t, int line, int col, const char *fmt, ...)
 {
        va_list                  ap;
        enum mandoclevel         level;
 
-       if (t < min_type && t != MANDOCERR_FILE)
+       if (t < min_type)
                return;
 
-       level = MANDOCLEVEL_UNSUPP;
+       level = MANDOCLEVEL_SYSERR;
        while (t < lowest_type[level])
                level--;
        mandoc_msg_setrc(level);
@@ -326,10 +366,10 @@ mandoc_vmsg(enum mandocerr t, void *dummy, int line, int col,
 }
 
 void
-mandoc_msg(enum mandocerr t, void *dummy, int line, int col, const char *msg)
+mandoc_msg_summary(void)
 {
-       if (msg == NULL)
-               mandoc_vmsg(t, dummy, line, col, NULL);
-       else
-               mandoc_vmsg(t, dummy, line, col, "%s", msg);
+       if (fileptr != NULL && rc != MANDOCLEVEL_OK)
+               fprintf(fileptr,
+                   "%s: see above the output for %s messages\n",
+                   getprogname(), level_name[rc]);
 }