]> git.cameronkatri.com Git - mandoc.git/blobdiff - read.c
Fix operator precedence according to Brian W. Kernighan and Lorinda
[mandoc.git] / read.c
diff --git a/read.c b/read.c
index f0cf5b0c15a351a934d6877e2004c3ab10609e2c..e7207802adf6de2c2b5fc91055b0f7be56ac9968 100644 (file)
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/*     $Id: read.c,v 1.172 2017/06/07 23:29:48 schwarze Exp $ */
+/*     $Id: read.c,v 1.188 2017/07/04 14:40:38 schwarze Exp $ */
 /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -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 *, struct buf,
 
 static const enum mandocerr    mandoclimits[MANDOCLEVEL_MAX] = {
        MANDOCERR_OK,
-       MANDOCERR_STYLE,
+       MANDOCERR_OK,
        MANDOCERR_WARNING,
        MANDOCERR_ERROR,
        MANDOCERR_UNSUPP,
@@ -86,13 +86,27 @@ static      const enum mandocerr    mandoclimits[MANDOCLEVEL_MAX] = {
 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",
+       "duplicate RCS id",
+       "typo in section name",
        "useless macro",
        "consider using OS macro",
        "errnos out of order",
        "duplicate errno",
-       "description line ends with a full stop",
+       "trailing delimiter",
+       "no blank before trailing delimiter",
+       "function name without markup",
 
        "generic warning",
 
@@ -104,6 +118,7 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
        "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",
@@ -125,6 +140,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",
@@ -138,6 +154,7 @@ static      const char * const      mandocerrs[MANDOCERR_MAX] = {
        "blocks badly nested",
        "nested displays are not portable",
        "moving content out of list",
+       "first macro on line",
        "fill mode already enabled, skipping",
        "fill mode already disabled, skipping",
        "line scope broken",
@@ -156,6 +173,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",
@@ -177,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",
@@ -747,20 +766,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;
@@ -772,6 +791,7 @@ mparse_alloc(int options, enum mandoclevel wlevel, mandocmsg mmsg,
                        curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
        }
        curp->man->first->tok = TOKEN_NONE;
+       curp->man->meta.os_e = os_e;
        return curp;
 }
 
@@ -847,13 +867,13 @@ 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);