+#define merr(m, t) nerr((m), (m)->last, (t))
+static int
+nerr(struct mdoc *m, const struct mdoc_node *n, enum merr type)
+{
+ char *p;
+
+ p = NULL;
+
+ switch (type) {
+ case (ENESTDISP):
+ p = "displays may not be nested";
+ break;
+ case (EBOOL):
+ p = "expected boolean value";
+ break;
+ case (EARGREP):
+ p = "argument repeated";
+ break;
+ case (EMULTIDISP):
+ p = "multiple display types specified";
+ break;
+ case (EMULTILIST):
+ p = "multiple list types specified";
+ break;
+ case (ELISTTYPE):
+ p = "missing list type";
+ break;
+ case (EDISPTYPE):
+ p = "missing display type";
+ break;
+ case (ELINE):
+ p = "expected line arguments";
+ break;
+ case (ENOPROLOGUE):
+ p = "document has no prologue";
+ break;
+ case (ENODATA):
+ p = "document has no data";
+ break;
+ case (EATT):
+ p = "expected valid AT&T symbol";
+ break;
+ case (ENAME):
+ p = "default name not yet set";
+ break;
+ }
+
+ assert(p);
+ return(mdoc_nerr(m, n, p));
+}
+
+
+#define mwarn(m, t) nwarn((m), (m)->last, (t))
+static int
+nwarn(struct mdoc *m, const struct mdoc_node *n, enum mwarn type)
+{
+ char *p;
+ enum mdoc_warn c;
+
+ c = WARN_SYNTAX;
+ p = NULL;
+
+ switch (type) {
+ case (WBADMSEC):
+ p = "inappropriate manual section";
+ c = WARN_COMPAT;
+ break;
+ case (WBADSEC):
+ p = "inappropriate document section";
+ c = WARN_COMPAT;
+ break;
+ case (WARGVAL):
+ p = "argument value suggested";
+ c = WARN_COMPAT;
+ break;
+ case (WPROLREP):
+ p = "prologue macros repeated";
+ c = WARN_COMPAT;
+ break;
+ case (WPROLOOO):
+ p = "prologue macros out-of-order";
+ c = WARN_COMPAT;
+ break;
+ case (WNOLINE):
+ p = "suggested no line arguments";
+ break;
+ case (WLINE):
+ p = "suggested line arguments";
+ break;
+ case (WMULTILINE):
+ p = "suggested multi-line arguments";
+ break;
+ case (WNOMULTILINE):
+ p = "suggested no multi-line arguments";
+ break;
+ case (WWRONGMSEC):
+ p = "document section in wrong manual section";
+ c = WARN_COMPAT;
+ break;
+ case (WSECOOO):
+ p = "document section out of conventional order";
+ break;
+ case (WSECREP):
+ p = "document section repeated";
+ break;
+ case (WBADSTAND):
+ p = "unknown standard";
+ break;
+ case (WNAMESECINC):
+ p = "NAME section contents incomplete/badly-ordered";
+ break;
+ }
+ assert(p);
+ return(mdoc_nwarn(m, n, c, p));
+}
+
+