aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2010-09-26 20:22:28 +0000
committerIngo Schwarze <schwarze@openbsd.org>2010-09-26 20:22:28 +0000
commit7dd5c61d801d065c98fea61d76ccc782ac3de66f (patch)
tree7b96fa142089f7613ac26ecc84f1f851d7ec3892
parentecabba142785ad106c05e2eea8414e57ed8b0376 (diff)
downloadmandoc-7dd5c61d801d065c98fea61d76ccc782ac3de66f.tar.gz
mandoc-7dd5c61d801d065c98fea61d76ccc782ac3de66f.tar.zst
mandoc-7dd5c61d801d065c98fea61d76ccc782ac3de66f.zip
If an explicit scope is still open at the end of an input file,
report an ERROR: We can still render the page by just closing the open scope, but it is likely that information will be missing or document structure mangled. Before, man(7) only reported a WARNING (which is dangerous because we cannot be sure rendering is correct) and mdoc(7) ran into FATAL (which is too drastic, there is no reason not to show what we have). "looks good" kristaps@
-rw-r--r--main.c5
-rw-r--r--mandoc.h5
-rw-r--r--mdoc_macro.c14
3 files changed, 9 insertions, 15 deletions
diff --git a/main.c b/main.c
index f429ae00..f1d64062 100644
--- a/main.c
+++ b/main.c
@@ -1,4 +1,4 @@
-/* $Id: main.c,v 1.105 2010/09/04 20:18:53 kristaps Exp $ */
+/* $Id: main.c,v 1.106 2010/09/26 20:22:28 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -139,7 +139,6 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"section not in conventional manual section",
"end of line whitespace",
"blocks badly nested",
- "scope open on exit",
"generic error",
@@ -165,6 +164,7 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"argument count wrong",
"request scope close w/none open",
"scope already open",
+ "scope open on exit",
"macro requires line argument(s)",
"macro requires body argument(s)",
"macro requires argument(s)",
@@ -182,7 +182,6 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"unsupported display type",
"blocks badly nested",
"no such block is open",
- "scope broken, syntax violated",
"line scope broken, syntax violated",
"argument count wrong, violates syntax",
"child violates parent syntax",
diff --git a/mandoc.h b/mandoc.h
index b314d886..ec603ace 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.18 2010/08/20 01:02:07 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.19 2010/09/26 20:22:28 schwarze Exp $ */
/*
* Copyright (c) 2010 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -63,7 +63,6 @@ enum mandocerr {
MANDOCERR_SECMSEC, /* section not in conventional manual section */
MANDOCERR_EOLNSPACE, /* end of line whitespace */
MANDOCERR_SCOPENEST, /* blocks badly nested */
- MANDOCERR_SCOPEEXIT, /* scope open on exit */
MANDOCERR_ERROR, /* ===== end of errors ===== */
@@ -89,6 +88,7 @@ enum mandocerr {
MANDOCERR_ARGCOUNT, /* argument count wrong */
MANDOCERR_NOSCOPE, /* no such block is open */
MANDOCERR_SCOPEREP, /* scope already open */
+ MANDOCERR_SCOPEEXIT, /* scope open on exit */
/* FIXME: merge following with MANDOCERR_ARGCOUNT */
MANDOCERR_NOARGS, /* macro requires line argument(s) */
MANDOCERR_NOBODY, /* macro requires body argument(s) */
@@ -108,7 +108,6 @@ enum mandocerr {
MANDOCERR_BADDISP, /* unsupported display type */
MANDOCERR_SCOPEFATAL, /* blocks badly nested */
MANDOCERR_SYNTNOSCOPE, /* no scope to rewind: syntax violated */
- MANDOCERR_SYNTSCOPE, /* scope broken, syntax violated */
MANDOCERR_SYNTLINESCOPE, /* line scope broken, syntax violated */
MANDOCERR_SYNTARGVCOUNT, /* argument count wrong, violates syntax */
MANDOCERR_SYNTCHILD, /* child violates parent syntax */
diff --git a/mdoc_macro.c b/mdoc_macro.c
index 91972f34..cd6d23a5 100644
--- a/mdoc_macro.c
+++ b/mdoc_macro.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_macro.c,v 1.93 2010/07/18 17:00:26 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.94 2010/09/26 20:22:28 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>
@@ -207,14 +207,10 @@ mdoc_macroend(struct mdoc *m)
n = MDOC_VALID & m->last->flags ? m->last->parent : m->last;
- for ( ; n; n = n->parent) {
- if (MDOC_BLOCK != n->type)
- continue;
- if ( ! (MDOC_EXPLICIT & mdoc_macros[n->tok].flags))
- continue;
- mdoc_nmsg(m, n, MANDOCERR_SYNTSCOPE);
- return(0);
- }
+ for ( ; n; n = n->parent)
+ if (MDOC_BLOCK == n->type &&
+ MDOC_EXPLICIT & mdoc_macros[n->tok].flags)
+ mdoc_nmsg(m, n, MANDOCERR_SCOPEEXIT);
/* Rewind to the first. */