=================================================================== RCS file: /cvs/mandoc/mandoc_msg.c,v retrieving revision 1.6 retrieving revision 1.20 diff -u -p -r1.6 -r1.20 --- mandoc/mandoc_msg.c 2019/03/06 15:55:38 1.6 +++ mandoc/mandoc_msg.c 2022/06/07 09:54:40 1.20 @@ -1,7 +1,7 @@ -/* $Id: mandoc_msg.c,v 1.6 2019/03/06 15:55:38 schwarze Exp $ */ +/* $OpenBSD: mandoc_msg.c,v 1.20 2022/06/07 09:54:40 schwarze Exp $ */ /* + * Copyright (c) 2014-2022 Ingo Schwarze * Copyright (c) 2010, 2011 Kristaps Dzonsons - * Copyright (c) 2014,2015,2016,2017,2018 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,6 +14,8 @@ * 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" @@ -29,8 +31,8 @@ static const enum mandocerr lowest_type[MANDOCLEVEL_MA MANDOCERR_WARNING, MANDOCERR_ERROR, MANDOCERR_UNSUPP, - MANDOCERR_MAX, - MANDOCERR_MAX + MANDOCERR_BADARG, + MANDOCERR_SYSERR }; static const char *const level_name[MANDOCLEVEL_MAX] = { @@ -53,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", @@ -67,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", @@ -83,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 \"\"", @@ -162,13 +166,14 @@ static const char *const type_message[MANDOCERR_MAX] = "invalid Boolean argument", "argument contains two font escapes", "unknown font, skipping request", + "ignoring distance argument", "odd number of characters in request", /* related to plain text */ "blank line in fill mode, using .sp", "tab in filled text", "new sentence, new line", - "invalid escape sequence", + "invalid escape sequence argument", "undefined escape, printing literally", "undefined string, using \"\"", @@ -187,13 +192,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?", @@ -212,11 +217,13 @@ static const char *const type_message[MANDOCERR_MAX] = "escaped character not allowed in a name", "using macro argument outside macro", "argument number is not numeric", + "negative argument, using 0", "NOT IMPLEMENTED: Bd -file", "skipping display without arguments", "missing list type, using -item", "argument is not numeric, using 1", "argument is not a character", + "skipping unusable escape sequence", "missing manual name, using \"\"", "uname(3) system call failed, using UNKNOWN", "unknown standard specifier", @@ -224,10 +231,17 @@ 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", + /* related to escape sequences */ + "incomplete escape sequence", + "invalid special character", + "unknown special character", + "invalid escape argument delimiter", + "unsupported feature", "input too large", "unsupported control character", @@ -240,11 +254,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 = 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; @@ -297,10 +343,10 @@ mandoc_msg(enum mandocerr t, int line, int col, const 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,4 +372,13 @@ mandoc_msg(enum mandocerr t, int line, int col, const va_end(ap); } fputc('\n', fileptr); +} + +void +mandoc_msg_summary(void) +{ + if (fileptr != NULL && rc != MANDOCLEVEL_OK) + fprintf(fileptr, + "%s: see above the output for %s messages\n", + getprogname(), level_name[rc]); }