version 1.113, 2010/12/01 16:54:25 |
version 1.116, 2010/12/05 15:37:30 |
Line 146 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
Line 146 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
"NAME section must come first", |
"NAME section must come first", |
"bad Boolean value", |
"bad Boolean value", |
"child violates parent syntax", |
"child violates parent syntax", |
|
"displays may not be nested", |
"bad AT&T symbol", |
"bad AT&T symbol", |
"bad standard", |
"bad standard", |
"list type repeated", |
"list type repeated", |
Line 183 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
Line 184 static const char * const mandocerrs[MANDOCERR_MAX] = |
|
"generic fatal error", |
"generic fatal error", |
|
|
"column syntax is inconsistent", |
"column syntax is inconsistent", |
"displays may not be nested", |
|
"unsupported display type", |
"unsupported display type", |
"blocks badly nested", |
"blocks badly nested", |
"no such block is open", |
"no such block is open", |
Line 213 static void version(void) __attribute__((noreturn)) |
|
Line 213 static void version(void) __attribute__((noreturn)) |
|
static int woptions(struct curparse *, char *); |
static int woptions(struct curparse *, char *); |
|
|
static const char *progname; |
static const char *progname; |
|
static enum mandoclevel file_status = MANDOCLEVEL_OK; |
static enum mandoclevel exit_status = MANDOCLEVEL_OK; |
static enum mandoclevel exit_status = MANDOCLEVEL_OK; |
|
|
int |
int |
Line 349 pfile(const char *file, struct curparse *curp) |
|
Line 350 pfile(const char *file, struct curparse *curp) |
|
|
|
if (-1 == (fd = open(file, O_RDONLY, 0))) { |
if (-1 == (fd = open(file, O_RDONLY, 0))) { |
perror(file); |
perror(file); |
exit_status = MANDOCLEVEL_SYSERR; |
file_status = MANDOCLEVEL_SYSERR; |
return(0); |
return(0); |
} |
} |
|
|
Line 367 pfile(const char *file, struct curparse *curp) |
|
Line 368 pfile(const char *file, struct curparse *curp) |
|
if (-1 == close(fd)) |
if (-1 == close(fd)) |
perror(file); |
perror(file); |
|
|
return(MANDOCLEVEL_FATAL > exit_status ? 1 : 0); |
return(MANDOCLEVEL_FATAL > file_status ? 1 : 0); |
} |
} |
|
|
|
|
Line 471 fdesc(struct curparse *curp) |
|
Line 472 fdesc(struct curparse *curp) |
|
|
|
curp->mdoc = NULL; |
curp->mdoc = NULL; |
curp->man = NULL; |
curp->man = NULL; |
|
file_status = MANDOCLEVEL_OK; |
|
|
/* Make sure the mandotory roff parser is initialised. */ |
/* Make sure the mandotory roff parser is initialised. */ |
|
|
Line 483 fdesc(struct curparse *curp) |
|
Line 485 fdesc(struct curparse *curp) |
|
|
|
pdesc(curp); |
pdesc(curp); |
|
|
if (MANDOCLEVEL_FATAL <= exit_status) |
if (MANDOCLEVEL_FATAL <= file_status) |
goto cleanup; |
goto cleanup; |
|
|
/* NOTE a parser may not have been assigned, yet. */ |
/* NOTE a parser may not have been assigned, yet. */ |
|
|
if ( ! (curp->man || curp->mdoc)) { |
if ( ! (curp->man || curp->mdoc)) { |
fprintf(stderr, "%s: Not a manual\n", curp->file); |
fprintf(stderr, "%s: Not a manual\n", curp->file); |
exit_status = MANDOCLEVEL_FATAL; |
file_status = MANDOCLEVEL_FATAL; |
goto cleanup; |
goto cleanup; |
} |
} |
|
|
/* Clean up the parse routine ASTs. */ |
/* Clean up the parse routine ASTs. */ |
|
|
if (curp->mdoc && ! mdoc_endparse(curp->mdoc)) { |
if (curp->mdoc && ! mdoc_endparse(curp->mdoc)) { |
assert(MANDOCLEVEL_FATAL <= exit_status); |
assert(MANDOCLEVEL_FATAL <= file_status); |
goto cleanup; |
goto cleanup; |
} |
} |
|
|
if (curp->man && ! man_endparse(curp->man)) { |
if (curp->man && ! man_endparse(curp->man)) { |
assert(MANDOCLEVEL_FATAL <= exit_status); |
assert(MANDOCLEVEL_FATAL <= file_status); |
goto cleanup; |
goto cleanup; |
} |
} |
|
|
assert(curp->roff); |
assert(curp->roff); |
if ( ! roff_endparse(curp->roff)) { |
if ( ! roff_endparse(curp->roff)) { |
assert(MANDOCLEVEL_FATAL <= exit_status); |
assert(MANDOCLEVEL_FATAL <= file_status); |
goto cleanup; |
goto cleanup; |
} |
} |
|
|
Line 517 fdesc(struct curparse *curp) |
|
Line 519 fdesc(struct curparse *curp) |
|
* the requested level, do not produce output. |
* the requested level, do not produce output. |
*/ |
*/ |
|
|
if (MANDOCLEVEL_OK != exit_status && curp->wstop) |
if (MANDOCLEVEL_OK != file_status && curp->wstop) |
goto cleanup; |
goto cleanup; |
|
|
/* If unset, allocate output dev now (if applicable). */ |
/* If unset, allocate output dev now (if applicable). */ |
Line 592 fdesc(struct curparse *curp) |
|
Line 594 fdesc(struct curparse *curp) |
|
assert(curp->roff); |
assert(curp->roff); |
roff_reset(curp->roff); |
roff_reset(curp->roff); |
|
|
|
if (exit_status < file_status) |
|
exit_status = file_status; |
|
|
return; |
return; |
} |
} |
|
|
Line 609 pdesc(struct curparse *curp) |
|
Line 614 pdesc(struct curparse *curp) |
|
*/ |
*/ |
|
|
if ( ! read_whole_file(curp, &blk, &with_mmap)) { |
if ( ! read_whole_file(curp, &blk, &with_mmap)) { |
exit_status = MANDOCLEVEL_SYSERR; |
file_status = MANDOCLEVEL_SYSERR; |
return; |
return; |
} |
} |
|
|
|
|
parsebuf(struct curparse *curp, struct buf blk, int start) |
parsebuf(struct curparse *curp, struct buf blk, int start) |
{ |
{ |
struct buf ln; |
struct buf ln; |
|
enum rofferr rr; |
int i, of, rc; |
int i, of, rc; |
int pos; /* byte number in the ln buffer */ |
int pos; /* byte number in the ln buffer */ |
int lnn; /* line number in the real file */ |
int lnn; /* line number in the real file */ |
Line 743 parsebuf(struct curparse *curp, struct buf blk, int st |
|
Line 749 parsebuf(struct curparse *curp, struct buf blk, int st |
|
of = 0; |
of = 0; |
|
|
rerun: |
rerun: |
rc = roff_parseln |
rr = roff_parseln |
(curp->roff, curp->line, |
(curp->roff, curp->line, |
&ln.buf, &ln.sz, of, &of); |
&ln.buf, &ln.sz, of, &of); |
|
|
switch (rc) { |
switch (rr) { |
case (ROFF_REPARSE): |
case (ROFF_REPARSE): |
parsebuf(curp, ln, 0); |
parsebuf(curp, ln, 0); |
pos = 0; |
pos = 0; |
|
|
pos = 0; |
pos = 0; |
continue; |
continue; |
case (ROFF_ERR): |
case (ROFF_ERR): |
assert(MANDOCLEVEL_FATAL <= exit_status); |
assert(MANDOCLEVEL_FATAL <= file_status); |
break; |
break; |
case (ROFF_SO): |
case (ROFF_SO): |
if (pfile(ln.buf + of, curp)) { |
if (pfile(ln.buf + of, curp)) { |
|
|
curp->line, ln.buf, of); |
curp->line, ln.buf, of); |
|
|
if ( ! rc) { |
if ( ! rc) { |
assert(MANDOCLEVEL_FATAL <= exit_status); |
assert(MANDOCLEVEL_FATAL <= file_status); |
break; |
break; |
} |
} |
} |
} |
Line 979 mmsg(enum mandocerr t, void *arg, int ln, int col, con |
|
Line 985 mmsg(enum mandocerr t, void *arg, int ln, int col, con |
|
fprintf(stderr, ": %s", msg); |
fprintf(stderr, ": %s", msg); |
fputc('\n', stderr); |
fputc('\n', stderr); |
|
|
if (exit_status < level) |
if (file_status < level) |
exit_status = level; |
file_status = level; |
|
|
return(level < MANDOCLEVEL_FATAL); |
return(level < MANDOCLEVEL_FATAL); |
} |
} |