From 38f00ffdcbcf2be5ad01776afecc32d1c141f46c Mon Sep 17 00:00:00 2001 From: Kristaps Dzonsons Date: Mon, 28 Mar 2011 21:49:42 +0000 Subject: Put mandocerrs and mandoclevels arrays into libmandoc with accessors mparse_strerror() and mparse_strlevel(). --- Makefile | 2 +- main.c | 123 ++-------------------------------------------------------- mandoc.3 | 16 ++++++-- mandoc.h | 4 +- read.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 152 insertions(+), 126 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 0ea83604..2a8eac6d 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.159 2011/03/23 09:47:13 kristaps Exp $ */ +/* $Id: main.c,v 1.160 2011/03/28 21:49:42 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2011 Ingo Schwarze @@ -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 fc1a142d..2fd887b8 100644 --- a/mandoc.3 +++ b/mandoc.3 @@ -1,4 +1,4 @@ -.\" $Id: mandoc.3,v 1.1 2011/03/22 10:02:50 kristaps Exp $ +.\" $Id: mandoc.3,v 1.2 2011/03/28 21:49:42 kristaps Exp $ .\" .\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons .\" Copyright (c) 2010 Ingo Schwarze @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: March 22 2011 $ +.Dd $Mdocdate: March 28 2011 $ .Dt MANDOC 3 .Os .Sh NAME @@ -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 cf20bfbc..185c10bf 100644 --- a/mandoc.h +++ b/mandoc.h @@ -1,4 +1,4 @@ -/* $Id: mandoc.h,v 1.68 2011/03/23 09:47:13 kristaps Exp $ */ +/* $Id: mandoc.h,v 1.69 2011/03/28 21:49:42 kristaps Exp $ */ /* * Copyright (c) 2010, 2011 Kristaps Dzonsons * @@ -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 f9030624..681b5ff8 100644 --- a/read.c +++ b/read.c @@ -1,4 +1,4 @@ -/* $Id: read.c,v 1.6 2011/03/22 10:35:26 kristaps Exp $ */ +/* $Id: read.c,v 1.7 2011/03/28 21:49:42 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2011 Ingo Schwarze @@ -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]); +} -- cgit v1.2.3-56-ge451