aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-02-06 08:28:35 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-02-06 08:28:35 +0000
commitd8b17016dd40c058e6cbfc2f195d4a2ac296d65e (patch)
tree6cedd7c230bf41c721154acd804b911a04cf13d9
parent7fefe85053961b17df364545120a269be409beb4 (diff)
downloadmandoc-d8b17016dd40c058e6cbfc2f195d4a2ac296d65e.tar.gz
mandoc-d8b17016dd40c058e6cbfc2f195d4a2ac296d65e.tar.zst
mandoc-d8b17016dd40c058e6cbfc2f195d4a2ac296d65e.zip
better error reporting for .br .fi .nf with arguments
-rw-r--r--man_macro.c9
-rw-r--r--man_validate.c12
-rw-r--r--mandoc.17
3 files changed, 15 insertions, 13 deletions
diff --git a/man_macro.c b/man_macro.c
index ed79321f..06a1d05d 100644
--- a/man_macro.c
+++ b/man_macro.c
@@ -1,4 +1,4 @@
-/* $Id: man_macro.c,v 1.95 2015/01/24 10:08:53 schwarze Exp $ */
+/* $Id: man_macro.c,v 1.96 2015/02/06 08:28:35 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2012, 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -420,6 +420,13 @@ in_line_eoln(MACRO_PROT_ARGS)
n = man->last;
for (;;) {
+ if (buf[*pos] != '\0' && (tok == MAN_br ||
+ tok == MAN_fi || tok == MAN_nf)) {
+ mandoc_vmsg(MANDOCERR_ARG_SKIP,
+ man->parse, line, *pos, "%s %s",
+ man_macronames[tok], buf + *pos);
+ break;
+ }
la = *pos;
if ( ! man_args(man, line, pos, buf, &p))
break;
diff --git a/man_validate.c b/man_validate.c
index 2e844d19..682213b7 100644
--- a/man_validate.c
+++ b/man_validate.c
@@ -38,7 +38,6 @@
typedef void (*v_check)(CHKARGS);
-static void check_eq0(CHKARGS);
static void check_eq2(CHKARGS);
static void check_le1(CHKARGS);
static void check_le5(CHKARGS);
@@ -182,7 +181,6 @@ check_##name(CHKARGS) \
#ineq, (x), n->nchild); \
}
-INEQ_DEFINE(0, ==, eq0)
INEQ_DEFINE(2, ==, eq2)
INEQ_DEFINE(1, <=, le1)
INEQ_DEFINE(5, <=, le5)
@@ -401,9 +399,7 @@ static void
post_nf(CHKARGS)
{
- check_eq0(man, n);
-
- if (MAN_LITERAL & man->flags)
+ if (man->flags & MAN_LITERAL)
mandoc_msg(MANDOCERR_NF_SKIP, man->parse,
n->line, n->pos, "nf");
@@ -414,8 +410,6 @@ static void
post_fi(CHKARGS)
{
- check_eq0(man, n);
-
if ( ! (MAN_LITERAL & man->flags))
mandoc_msg(MANDOCERR_FI_SKIP, man->parse,
n->line, n->pos, "fi");
@@ -501,9 +495,7 @@ static void
post_vs(CHKARGS)
{
- if (n->tok == MAN_br)
- check_eq0(man, n);
- else
+ if (n->tok == MAN_sp)
check_le1(man, n);
if (NULL != n->prev)
diff --git a/mandoc.1 b/mandoc.1
index f453a208..d3871b95 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.147 2015/02/06 07:13:14 schwarze Exp $
+.\" $Id: mandoc.1,v 1.148 2015/02/06 08:28:35 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -1635,7 +1635,10 @@ or
.Ic \&EN
macro, or a
.Xr roff 7
-.Ic \&br
+.Ic \&br ,
+.Ic \&fi ,
+or
+.Ic \&nf
request or
.Sq \&..
block closing request is invoked with at least one argument.