=================================================================== RCS file: /cvs/mandoc/read.c,v retrieving revision 1.171 retrieving revision 1.190 diff -u -p -r1.171 -r1.190 --- mandoc/read.c 2017/06/06 15:01:04 1.171 +++ mandoc/read.c 2017/07/08 14:51:04 1.190 @@ -1,4 +1,4 @@ -/* $Id: read.c,v 1.171 2017/06/06 15:01:04 schwarze Exp $ */ +/* $Id: read.c,v 1.190 2017/07/08 14:51:04 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010-2017 Ingo Schwarze @@ -53,10 +53,10 @@ struct mparse { const char *file; /* filename of current input file */ struct buf *primary; /* buffer currently being parsed */ struct buf *secondary; /* preprocessed copy of input */ - const char *defos; /* default operating system */ + const char *os_s; /* default operating system */ mandocmsg mmsg; /* warning/error message handler */ enum mandoclevel file_status; /* status of current parse */ - enum mandoclevel wlevel; /* ignore messages below this */ + enum mandocerr mmin; /* ignore messages below this */ int options; /* parser options */ int gzip; /* current input file is gzipped */ int filenc; /* encoding of the current file */ @@ -75,7 +75,7 @@ static void mparse_parse_buffer(struct mparse *, str static const enum mandocerr mandoclimits[MANDOCLEVEL_MAX] = { MANDOCERR_OK, - MANDOCERR_STYLE, + MANDOCERR_OK, MANDOCERR_WARNING, MANDOCERR_ERROR, MANDOCERR_UNSUPP, @@ -86,26 +86,46 @@ static const enum mandocerr mandoclimits[MANDOCLEVEL_M static const char * const mandocerrs[MANDOCERR_MAX] = { "ok", + "base system convention", + + "Mdocdate found", + "Mdocdate missing", + "unknown architecture", + "operating system explicitly specified", + "RCS id missing", + "referenced manual not found", + "generic style suggestion", + "legacy man(7) date format", + "lower case character in document title", + "duplicate RCS id", + "typo in section name", + "unterminated quoted argument", "useless macro", "consider using OS macro", - "description line ends with a full stop", + "errnos out of order", + "duplicate errno", + "trailing delimiter", + "no blank before trailing delimiter", + "fill mode already enabled, skipping", + "fill mode already disabled, skipping", + "function name without markup", + "whitespace at end of input line", + "bad comment style", "generic warning", /* related to the prologue */ "missing manual title, using UNTITLED", "missing manual title, using \"\"", - "lower case character in document title", "missing manual section, using \"\"", "unknown manual section", "missing date, using today's date", "cannot parse date, using it verbatim", + "date in the future, using it anyway", "missing Os macro, using \"\"", - "duplicate prologue macro", "late prologue macro", - "skipping late title macro", "prologue macros out of order", /* related to document structure */ @@ -123,6 +143,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "sections out of conventional order", "duplicate section title", "unexpected section", + "cross reference to self", "unusual Xr order", "unusual Xr punctuation", "AUTHORS section without An macro", @@ -136,8 +157,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "blocks badly nested", "nested displays are not portable", "moving content out of list", - "fill mode already enabled, skipping", - "fill mode already disabled, skipping", + "first macro on line", "line scope broken", "skipping blank line in line scope", @@ -154,6 +174,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "missing function name, using \"\"", "empty head in list item", "empty list item", + "missing argument, using next line", "missing font type, using \\fR", "unknown font type, using \\fR", "nothing follows prefix", @@ -165,7 +186,6 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "missing eqn box, using \"\"", /* related to bad macro arguments */ - "unterminated quoted argument", "duplicate argument", "skipping duplicate argument", "skipping duplicate display type", @@ -175,6 +195,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "unknown AT&T UNIX version", "comma in function argument", "parenthesis in function name", + "unknown library name", "invalid content in Rs block", "invalid Boolean argument", "unknown font, skipping request", @@ -183,9 +204,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = /* related to plain text */ "blank line in fill mode, using .sp", "tab in filled text", - "whitespace at end of input line", "new sentence, new line", - "bad comment style", "invalid escape sequence", "undefined string, using \"\"", @@ -211,6 +230,8 @@ static const char * const mandocerrs[MANDOCERR_MAX] = /* related to document structure and macros */ NULL, + "duplicate prologue macro", + "skipping late title macro", "input stack limit exceeded, infinite loop?", "skipping bad character", "skipping unknown macro", @@ -519,14 +540,11 @@ rerun: * currently open parse. Since we only get here if * there does exist data (see tbl_data.c), we're * guaranteed that something's been allocated. - * Do the same for ROFF_EQN. */ if (rr == ROFF_TBL) while ((span = roff_span(curp->roff)) != NULL) roff_addtbl(curp->man, span); - else if (rr == ROFF_EQN) - roff_addeqn(curp->man, roff_eqn(curp->roff)); else if ((curp->man->macroset == MACROSET_MDOC ? mdoc_parseln(curp->man, curp->line, ln.buf, of) : man_parseln(curp->man, curp->line, ln.buf, of)) == 2) @@ -745,20 +763,20 @@ mparse_open(struct mparse *curp, const char *file) } struct mparse * -mparse_alloc(int options, enum mandoclevel wlevel, mandocmsg mmsg, - const char *defos) +mparse_alloc(int options, enum mandocerr mmin, mandocmsg mmsg, + enum mandoc_os os_e, const char *os_s) { struct mparse *curp; curp = mandoc_calloc(1, sizeof(struct mparse)); curp->options = options; - curp->wlevel = wlevel; + curp->mmin = mmin; curp->mmsg = mmsg; - curp->defos = defos; + curp->os_s = os_s; curp->roff = roff_alloc(curp, options); - curp->man = roff_man_alloc( curp->roff, curp, curp->defos, + curp->man = roff_man_alloc(curp->roff, curp, curp->os_s, curp->options & MPARSE_QUICK ? 1 : 0); if (curp->options & MPARSE_MDOC) { curp->man->macroset = MACROSET_MDOC; @@ -770,6 +788,7 @@ mparse_alloc(int options, enum mandoclevel wlevel, man curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX); } curp->man->first->tok = TOKEN_NONE; + curp->man->meta.os_e = os_e; return curp; } @@ -845,12 +864,12 @@ mandoc_msg(enum mandocerr er, struct mparse *m, { enum mandoclevel level; + if (er < m->mmin && er != MANDOCERR_FILE) + return; + level = MANDOCLEVEL_UNSUPP; while (er < mandoclimits[level]) level--; - - if (level < m->wlevel && er != MANDOCERR_FILE) - return; if (m->mmsg) (*m->mmsg)(er, level, m->file, ln, col, msg);