=================================================================== RCS file: /cvs/mandoc/main.c,v retrieving revision 1.156 retrieving revision 1.163 diff -u -p -r1.156 -r1.163 --- mandoc/main.c 2011/03/20 16:05:21 1.156 +++ mandoc/main.c 2011/05/20 15:51:18 1.163 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.156 2011/03/20 16:05:21 kristaps Exp $ */ +/* $Id: main.c,v 1.163 2011/05/20 15:51:18 kristaps Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010, 2011 Ingo Schwarze @@ -30,7 +30,6 @@ #include "main.h" #include "mdoc.h" #include "man.h" -#include "roff.h" #if !defined(__GNUC__) || (__GNUC__ < 2) # if !defined(lint) @@ -44,6 +43,8 @@ typedef void (*out_free)(void *); enum outt { OUTT_ASCII = 0, /* -Tascii */ + OUTT_LOCALE, /* -Tlocale */ + OUTT_UTF8, /* -Tutf8 */ OUTT_TREE, /* -Ttree */ OUTT_HTML, /* -Thtml */ OUTT_XHTML, /* -Txhtml */ @@ -64,123 +65,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", - - /* 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", - "line scope broken", - "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", - - "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 *); @@ -283,7 +167,7 @@ usage(void) "[-mformat] " "[-Ooption] " "[-Toutput] " - "[-Werr] " + "[-Wlevel] " "[file...]\n", progname); @@ -324,10 +208,20 @@ parse(struct curparse *curp, int fd, switch (curp->outtype) { case (OUTT_XHTML): curp->outdata = xhtml_alloc(curp->outopts); + curp->outfree = html_free; break; case (OUTT_HTML): curp->outdata = html_alloc(curp->outopts); + curp->outfree = html_free; break; + case (OUTT_UTF8): + curp->outdata = utf8_alloc(curp->outopts); + curp->outfree = ascii_free; + break; + case (OUTT_LOCALE): + curp->outdata = locale_alloc(curp->outopts); + curp->outfree = ascii_free; + break; case (OUTT_ASCII): curp->outdata = ascii_alloc(curp->outopts); curp->outfree = ascii_free; @@ -350,7 +244,6 @@ parse(struct curparse *curp, int fd, case (OUTT_XHTML): curp->outman = html_man; curp->outmdoc = html_mdoc; - curp->outfree = html_free; break; case (OUTT_TREE): curp->outman = tree_man; @@ -360,6 +253,10 @@ parse(struct curparse *curp, int fd, /* FALLTHROUGH */ case (OUTT_ASCII): /* FALLTHROUGH */ + case (OUTT_UTF8): + /* FALLTHROUGH */ + case (OUTT_LOCALE): + /* FALLTHROUGH */ case (OUTT_PS): curp->outman = terminal_man; curp->outmdoc = terminal_mdoc; @@ -417,6 +314,10 @@ toptions(struct curparse *curp, char *arg) curp->outtype = OUTT_TREE; else if (0 == strcmp(arg, "html")) curp->outtype = OUTT_HTML; + else if (0 == strcmp(arg, "utf8")) + curp->outtype = OUTT_UTF8; + else if (0 == strcmp(arg, "locale")) + curp->outtype = OUTT_LOCALE; else if (0 == strcmp(arg, "xhtml")) curp->outtype = OUTT_XHTML; else if (0 == strcmp(arg, "ps")) @@ -477,7 +378,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);