=================================================================== RCS file: /cvs/mandoc/read.c,v retrieving revision 1.111 retrieving revision 1.117 diff -u -p -r1.111 -r1.117 --- mandoc/read.c 2015/01/15 04:26:40 1.111 +++ mandoc/read.c 2015/01/26 13:03:48 1.117 @@ -1,4 +1,4 @@ -/* $Id: read.c,v 1.111 2015/01/15 04:26:40 schwarze Exp $ */ +/* $Id: read.c,v 1.117 2015/01/26 13:03:48 schwarze Exp $ */ /* * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons * Copyright (c) 2010-2015 Ingo Schwarze @@ -80,8 +80,8 @@ static const enum mandocerr mandoclimits[MANDOCLEVEL_M MANDOCERR_WARNING, MANDOCERR_WARNING, MANDOCERR_ERROR, + MANDOCERR_UNSUPP, MANDOCERR_MAX, - MANDOCERR_MAX, MANDOCERR_MAX }; @@ -180,25 +180,26 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "unexpected end of equation", /* related to tables */ - "bad table syntax", - "bad table option", - "bad table layout", + "non-alphabetic character in tbl options", + "skipping unknown tbl option", + "missing tbl option argument", + "wrong tbl option argument size", "no table layout cells specified", "no table data cells specified", "ignore data in cell", "data block still open", "ignoring extra data cells", - "ignoring macro in table", /* related to document structure and macros */ NULL, - "input too large", "input stack limit exceeded, infinite loop?", "skipping bad character", "skipping unknown macro", + "skipping insecure request", "skipping item outside list", "skipping column outside column list", "skipping end of block that is not open", + "fewer RS blocks open, skipping", "inserting missing end of block", "appending missing end of block", @@ -216,6 +217,14 @@ static const char * const mandocerrs[MANDOCERR_MAX] = "skipping all arguments", "skipping excess arguments", "divide by zero", + + "unsupported feature", + "input too large", + "unsupported control character", + "unsupported roff request", + "unsupported table layout", + "ignoring macro in table", + "eqn in tbl", }; static const char * const mandoclevels[MANDOCLEVEL_MAX] = { @@ -223,7 +232,7 @@ static const char * const mandoclevels[MANDOCLEVEL_MAX "RESERVED", "WARNING", "ERROR", - "FATAL", + "UNSUPP", "BADARG", "SYSERR" }; @@ -303,6 +312,7 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size { const struct tbl_span *span; struct buf ln; + const char *save_file; char *cp; size_t pos; /* byte number in the ln buffer */ enum rofferr rr; @@ -364,9 +374,8 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size if (c & 0x80) { if ( ! (curp->filenc && preconv_encode( &blk, &i, &ln, &pos, &curp->filenc))) { - mandoc_vmsg(MANDOCERR_BADCHAR, - curp, curp->line, pos, - "0x%x", c); + mandoc_vmsg(MANDOCERR_CHAR_BAD, curp, + curp->line, pos, "0x%x", c); ln.buf[pos++] = '?'; i++; } @@ -378,8 +387,10 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size */ if (c == 0x7f || (c < 0x20 && c != 0x09)) { - mandoc_vmsg(MANDOCERR_BADCHAR, curp, - curp->line, pos, "0x%x", c); + mandoc_vmsg(c == 0x00 || c == 0x04 || + c > 0x0a ? MANDOCERR_CHAR_BAD : + MANDOCERR_CHAR_UNSUPP, + curp, curp->line, pos, "0x%x", c); i++; ln.buf[pos++] = '?'; continue; @@ -435,7 +446,7 @@ mparse_buf_r(struct mparse *curp, struct buf blk, size if ( ! (isascii(c) && (isgraph(c) || isblank(c)))) { - mandoc_vmsg(MANDOCERR_BADCHAR, curp, + mandoc_vmsg(MANDOCERR_CHAR_BAD, curp, curp->line, pos, "0x%x", c); i += 2; ln.buf[pos++] = '?'; @@ -518,11 +529,14 @@ rerun: */ if (curp->secondary) curp->secondary->sz -= pos + 1; + save_file = curp->file; save_child = curp->child; if (mparse_open(curp, &fd, ln.buf + of) == - MANDOCLEVEL_OK) + MANDOCLEVEL_OK) { mparse_readfd(curp, fd, ln.buf + of); - else { + curp->file = save_file; + } else { + curp->file = save_file; mandoc_vmsg(MANDOCERR_SO_FAIL, curp, curp->line, pos, ".so %s", ln.buf + of); @@ -958,7 +972,7 @@ mandoc_msg(enum mandocerr er, struct mparse *m, { enum mandoclevel level; - level = MANDOCLEVEL_ERROR; + level = MANDOCLEVEL_UNSUPP; while (er < mandoclimits[level]) level--;