summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-03-28 21:49:42 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-03-28 21:49:42 +0000
commitf9ed40780bf69c4c7b35c8f14faeb0fda9a1dcbd (patch)
tree8a283738da3875f77f0b1f54b52038e80e73cde4
parent9c849ad2541554265be745b2b20262f8c84fb161 (diff)
downloadmandoc-f9ed40780bf69c4c7b35c8f14faeb0fda9a1dcbd.tar.gz
Put mandocerrs and mandoclevels arrays into libmandoc with accessors
mparse_strerror() and mparse_strlevel().
-rw-r--r--Makefile2
-rw-r--r--main.c121
-rw-r--r--mandoc.312
-rw-r--r--mandoc.h2
-rw-r--r--read.c131
5 files changed, 147 insertions, 121 deletions
diff --git a/Makefile b/Makefile
index 9c17d400..0d93ae9f 100644
--- a/Makefile
+++ b/Makefile
@@ -232,7 +232,7 @@ install: all
mkdir -p $(DESTDIR)$(MANDIR)/man3
mkdir -p $(DESTDIR)$(MANDIR)/man7
$(INSTALL_PROGRAM) mandoc $(DESTDIR)$(BINDIR)
- $(INSTALL_LIB) libmandoc.a $(DESTDIR)$(LIBDIR)/
+ $(INSTALL_LIB) libmandoc.a $(DESTDIR)$(LIBDIR)
$(INSTALL_MAN) mandoc.1 $(DESTDIR)$(MANDIR)/man1
$(INSTALL_MAN) mandoc.3 $(DESTDIR)$(MANDIR)/man3
$(INSTALL_MAN) man.7 mdoc.7 roff.7 eqn.7 tbl.7 mandoc_char.7 $(DESTDIR)$(MANDIR)/man7
diff --git a/main.c b/main.c
index 3c0cb697..857201ba 100644
--- a/main.c
+++ b/main.c
@@ -63,124 +63,6 @@ struct curparse {
char outopts[BUFSIZ]; /* buf of output opts */
};
-static const char * const mandoclevels[MANDOCLEVEL_MAX] = {
- "SUCCESS",
- "RESERVED",
- "WARNING",
- "ERROR",
- "FATAL",
- "BADARG",
- "SYSERR"
-};
-
-static const char * const mandocerrs[MANDOCERR_MAX] = {
- "ok",
-
- "generic warning",
-
- /* related to the prologue */
- "no title in document",
- "document title should be all caps",
- "unknown manual section",
- "date missing, using today's date",
- "cannot parse date, using it verbatim",
- "prologue macros out of order",
- "duplicate prologue macro",
- "macro not allowed in prologue",
- "macro not allowed in body",
-
- /* related to document structure */
- ".so is fragile, better use ln(1)",
- "NAME section must come first",
- "bad NAME section contents",
- "manual name not yet set",
- "sections out of conventional order",
- "duplicate section name",
- "section not in conventional manual section",
-
- /* related to macros and nesting */
- "skipping obsolete macro",
- "skipping paragraph macro",
- "skipping no-space macro",
- "blocks badly nested",
- "child violates parent syntax",
- "nested displays are not portable",
- "already in literal mode",
- "line scope broken",
-
- /* related to missing macro arguments */
- "skipping empty macro",
- "argument count wrong",
- "missing display type",
- "list type must come first",
- "tag lists require a width argument",
- "missing font type",
- "skipping end of block that is not open",
-
- /* related to bad macro arguments */
- "skipping argument",
- "duplicate argument",
- "duplicate display type",
- "duplicate list type",
- "unknown AT&T UNIX version",
- "bad Boolean value",
- "unknown font",
- "unknown standard specifier",
- "bad width argument",
-
- /* related to plain text */
- "blank line in non-literal context",
- "tab in non-literal context",
- "end of line whitespace",
- "bad comment style",
- "unknown escape sequence",
- "unterminated quoted string",
-
- "generic error",
-
- /* related to tables */
- "bad table syntax",
- "bad table option",
- "bad table layout",
- "no table layout cells specified",
- "no table data cells specified",
- "ignore data in cell",
- "data block still open",
- "ignoring extra data cells",
-
- "input stack limit exceeded, infinite loop?",
- "skipping bad character",
- "escaped character not allowed in a name",
- "skipping text before the first section header",
- "skipping unknown macro",
- "NOT IMPLEMENTED, please use groff: skipping request",
- "argument count wrong",
- "skipping end of block that is not open",
- "missing end of block",
- "scope open on exit",
- "uname(3) system call failed",
- "macro requires line argument(s)",
- "macro requires body argument(s)",
- "macro requires argument(s)",
- "missing list type",
- "line argument(s) will be lost",
- "body argument(s) will be lost",
-
- "generic fatal error",
-
- "not a manual",
- "column syntax is inconsistent",
- "NOT IMPLEMENTED: .Bd -file",
- "line scope broken, syntax violated",
- "argument count wrong, violates syntax",
- "child violates parent syntax",
- "argument count wrong, violates syntax",
- "NOT IMPLEMENTED: .so with absolute path or \"..\"",
- "no document body",
- "no document prologue",
- "static buffer exhausted",
-};
-
static int moptions(enum mparset *, char *);
static void mmsg(enum mandocerr, enum mandoclevel,
const char *, int, int, const char *);
@@ -477,7 +359,8 @@ mmsg(enum mandocerr t, enum mandoclevel lvl,
fprintf(stderr, "%s:%d:%d: %s: %s",
file, line, col + 1,
- mandoclevels[lvl], mandocerrs[t]);
+ mparse_strlevel(lvl),
+ mparse_strerror(t));
if (msg)
fprintf(stderr, ": %s", msg);
diff --git a/mandoc.3 b/mandoc.3
index 2bea6fb6..314f080b 100644
--- a/mandoc.3
+++ b/mandoc.3
@@ -28,7 +28,9 @@
.Nm mparse_free ,
.Nm mparse_readfd ,
.Nm mparse_reset ,
-.Nm mparse_result
+.Nm mparse_result ,
+.Nm mparse_strerror ,
+.Nm mparse_strlevel
.Nd mandoc macro compiler library
.Sh SYNOPSIS
.In man.h
@@ -77,6 +79,14 @@
.Fa "struct mdoc **mdoc"
.Fa "struct man **man"
.Fc
+.Ft "const char *"
+.Fo mparse_strerror
+.Fa "enum mandocerr"
+.Fc
+.Ft "const char *"
+.Fo mparse_strlevel
+.Fa "enum mandoclevel"
+.Fc
.Vt extern const char * const * man_macronames;
.Vt extern const char * const * mdoc_argnames;
.Vt extern const char * const * mdoc_macronames;
diff --git a/mandoc.h b/mandoc.h
index e629016c..60e05a34 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -303,6 +303,8 @@ struct mparse *mparse_alloc(enum mparset,
enum mandoclevel, mandocmsg, void *);
enum mandoclevel mparse_readfd(struct mparse *, int, const char *);
void mparse_result(struct mparse *, struct mdoc **, struct man **);
+const char *mparse_strerror(enum mandocerr);
+const char *mparse_strlevel(enum mandoclevel);
void *mandoc_calloc(size_t, size_t);
void *mandoc_malloc(size_t);
diff --git a/read.c b/read.c
index 664eeeaf..27aaf8d2 100644
--- a/read.c
+++ b/read.c
@@ -78,6 +78,124 @@ static const enum mandocerr mandoclimits[MANDOCLEVEL_MAX] = {
MANDOCERR_MAX
};
+static const char * const mandocerrs[MANDOCERR_MAX] = {
+ "ok",
+
+ "generic warning",
+
+ /* related to the prologue */
+ "no title in document",
+ "document title should be all caps",
+ "unknown manual section",
+ "date missing, using today's date",
+ "cannot parse date, using it verbatim",
+ "prologue macros out of order",
+ "duplicate prologue macro",
+ "macro not allowed in prologue",
+ "macro not allowed in body",
+
+ /* related to document structure */
+ ".so is fragile, better use ln(1)",
+ "NAME section must come first",
+ "bad NAME section contents",
+ "manual name not yet set",
+ "sections out of conventional order",
+ "duplicate section name",
+ "section not in conventional manual section",
+
+ /* related to macros and nesting */
+ "skipping obsolete macro",
+ "skipping paragraph macro",
+ "skipping no-space macro",
+ "blocks badly nested",
+ "child violates parent syntax",
+ "nested displays are not portable",
+ "already in literal mode",
+ "line scope broken",
+
+ /* related to missing macro arguments */
+ "skipping empty macro",
+ "argument count wrong",
+ "missing display type",
+ "list type must come first",
+ "tag lists require a width argument",
+ "missing font type",
+ "skipping end of block that is not open",
+
+ /* related to bad macro arguments */
+ "skipping argument",
+ "duplicate argument",
+ "duplicate display type",
+ "duplicate list type",
+ "unknown AT&T UNIX version",
+ "bad Boolean value",
+ "unknown font",
+ "unknown standard specifier",
+ "bad width argument",
+
+ /* related to plain text */
+ "blank line in non-literal context",
+ "tab in non-literal context",
+ "end of line whitespace",
+ "bad comment style",
+ "unknown escape sequence",
+ "unterminated quoted string",
+
+ "generic error",
+
+ /* related to tables */
+ "bad table syntax",
+ "bad table option",
+ "bad table layout",
+ "no table layout cells specified",
+ "no table data cells specified",
+ "ignore data in cell",
+ "data block still open",
+ "ignoring extra data cells",
+
+ "input stack limit exceeded, infinite loop?",
+ "skipping bad character",
+ "escaped character not allowed in a name",
+ "skipping text before the first section header",
+ "skipping unknown macro",
+ "NOT IMPLEMENTED, please use groff: skipping request",
+ "argument count wrong",
+ "skipping end of block that is not open",
+ "missing end of block",
+ "scope open on exit",
+ "uname(3) system call failed",
+ "macro requires line argument(s)",
+ "macro requires body argument(s)",
+ "macro requires argument(s)",
+ "missing list type",
+ "line argument(s) will be lost",
+ "body argument(s) will be lost",
+
+ "generic fatal error",
+
+ "not a manual",
+ "column syntax is inconsistent",
+ "NOT IMPLEMENTED: .Bd -file",
+ "line scope broken, syntax violated",
+ "argument count wrong, violates syntax",
+ "child violates parent syntax",
+ "argument count wrong, violates syntax",
+ "NOT IMPLEMENTED: .so with absolute path or \"..\"",
+ "no document body",
+ "no document prologue",
+ "static buffer exhausted",
+};
+
+static const char * const mandoclevels[MANDOCLEVEL_MAX] = {
+ "SUCCESS",
+ "RESERVED",
+ "WARNING",
+ "ERROR",
+ "FATAL",
+ "BADARG",
+ "SYSERR"
+};
+
static void
resize_buf(struct buf *buf, size_t initial)
{
@@ -627,3 +745,16 @@ mandoc_msg(enum mandocerr er, struct mparse *m,
if (m->file_status < level)
m->file_status = level;
}
+
+const char *
+mparse_strerror(enum mandocerr er)
+{
+
+ return(mandocerrs[er]);
+}
+
+const char *
+mparse_strlevel(enum mandoclevel lvl)
+{
+ return(mandoclevels[lvl]);
+}