aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-02-06 07:13:14 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-02-06 07:13:14 +0000
commit7fefe85053961b17df364545120a269be409beb4 (patch)
tree6d94494870630a9f491e0b4a94211c5beea6e4ba
parent7dfe6b3fdffd0ff76af3e3d347b0f300fddb15e8 (diff)
downloadmandoc-7fefe85053961b17df364545120a269be409beb4.tar.gz
mandoc-7fefe85053961b17df364545120a269be409beb4.tar.zst
mandoc-7fefe85053961b17df364545120a269be409beb4.zip
Delete the legacy generic warning type MANDOCERR_ARGCWARN,
replacing the last instances by more specific warnings. Improved functionality, minus 50 lines of code.
-rw-r--r--man_validate.c6
-rw-r--r--mandoc.123
-rw-r--r--mandoc.h4
-rw-r--r--mdoc_macro.c7
-rw-r--r--mdoc_validate.c100
-rw-r--r--read.c4
6 files changed, 44 insertions, 100 deletions
diff --git a/man_validate.c b/man_validate.c
index 3a774965..2e844d19 100644
--- a/man_validate.c
+++ b/man_validate.c
@@ -252,9 +252,9 @@ static void
check_part(CHKARGS)
{
- if (MAN_BODY == n->type && 0 == n->nchild)
- mandoc_msg(MANDOCERR_ARGCWARN, man->parse, n->line,
- n->pos, "want children (have none)");
+ if (n->type == MAN_BODY && n->child == NULL)
+ mandoc_msg(MANDOCERR_BLK_EMPTY, man->parse,
+ n->line, n->pos, man_macronames[n->tok]);
}
static void
diff --git a/mandoc.1 b/mandoc.1
index 3e2a2d06..f453a208 100644
--- a/mandoc.1
+++ b/mandoc.1
@@ -1,4 +1,4 @@
-.\" $Id: mandoc.1,v 1.146 2015/02/06 03:38:45 schwarze Exp $
+.\" $Id: mandoc.1,v 1.147 2015/02/06 07:13:14 schwarze Exp $
.\"
.\" Copyright (c) 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
.\" Copyright (c) 2012, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -994,8 +994,19 @@ except that it may control a following
clause.
.It Sy "skipping empty macro"
.Pq mdoc
-The indicated macro has no arguments or no body content
-and hence no effect.
+The indicated macro has no arguments and hence no effect.
+.It Sy "empty block"
+.Pq mdoc , man
+A
+.Ic \&Bd ,
+.Ic \&Bk ,
+.Ic \&Bl ,
+.Ic \&D1 ,
+.Ic \&Dl ,
+.Ic \&RS ,
+or
+.Ic \&UR
+block contains nothing in its body and will produce no output.
.It Sy "empty argument, using 0n"
.Pq mdoc
The required width is missing after
@@ -1005,12 +1016,6 @@ or
.Fl offset
or
.Fl width.
-.It Sy "argument count wrong"
-.Pq mdoc , man
-The indicated macro has too few or too many arguments.
-The syntax tree will contain the wrong number of arguments as given.
-Formatting behaviour depends on the specific macro in question.
-Note that the same message may also occur as an ERROR, see below.
.It Sy "missing display type, using -ragged"
.Pq mdoc
The
diff --git a/mandoc.h b/mandoc.h
index 5fbc6871..250c5ef2 100644
--- a/mandoc.h
+++ b/mandoc.h
@@ -1,4 +1,4 @@
-/* $Id: mandoc.h,v 1.197 2015/02/06 03:38:45 schwarze Exp $ */
+/* $Id: mandoc.h,v 1.198 2015/02/06 07:13:14 schwarze Exp $ */
/*
* Copyright (c) 2010, 2011, 2014 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -92,8 +92,8 @@ enum mandocerr {
MANDOCERR_REQ_EMPTY, /* skipping empty request: request */
MANDOCERR_COND_EMPTY, /* conditional request controls empty scope */
MANDOCERR_MACRO_EMPTY, /* skipping empty macro: macro */
+ MANDOCERR_BLK_EMPTY, /* empty block: macro */
MANDOCERR_ARG_EMPTY, /* empty argument, using 0n: macro arg */
- MANDOCERR_ARGCWARN, /* argument count wrong */
MANDOCERR_BD_NOTYPE, /* missing display type, using -ragged: Bd */
MANDOCERR_BL_LATETYPE, /* list type is not the first argument: Bl arg */
MANDOCERR_BL_NOWIDTH, /* missing -width in -tag list, using 8n */
diff --git a/mdoc_macro.c b/mdoc_macro.c
index 18f1df58..158e1bbd 100644
--- a/mdoc_macro.c
+++ b/mdoc_macro.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_macro.c,v 1.178 2015/02/06 03:38:45 schwarze Exp $ */
+/* $Id: mdoc_macro.c,v 1.179 2015/02/06 07:13:14 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010, 2012-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -1403,9 +1403,10 @@ in_line_eoln(MACRO_PROT_ARGS)
rew_last(mdoc, mdoc->last->parent);
}
- if (buf[*pos] == '\0' && tok == MDOC_Fd) {
+ if (buf[*pos] == '\0' &&
+ (tok == MDOC_Fd || mdoc_macronames[tok][0] == '%')) {
mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
- line, ppos, "Fd");
+ line, ppos, mdoc_macronames[tok]);
return;
}
diff --git a/mdoc_validate.c b/mdoc_validate.c
index cd666b5a..01138f2a 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_validate.c,v 1.274 2015/02/06 03:38:45 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.275 2015/02/06 07:13:14 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -56,8 +56,6 @@ struct valids {
v_post post;
};
-static void check_count(struct mdoc *, enum mdoc_type,
- enum check_ineq, int);
static void check_text(struct mdoc *, int, int, char *);
static void check_argv(struct mdoc *,
struct mdoc_node *, struct mdoc_argv *);
@@ -67,9 +65,6 @@ static enum mdoc_sec a2sec(const char *);
static size_t macro2len(enum mdoct);
static void rewrite_macro2len(char **);
-static void ewarn_eq1(POST_ARGS);
-static void ewarn_ge1(POST_ARGS);
-
static void post_an(POST_ARGS);
static void post_at(POST_ARGS);
static void post_bf(POST_ARGS);
@@ -92,7 +87,6 @@ static void post_fn(POST_ARGS);
static void post_fname(POST_ARGS);
static void post_fo(POST_ARGS);
static void post_hyph(POST_ARGS);
-static void post_hyphtext(POST_ARGS);
static void post_ignpar(POST_ARGS);
static void post_it(POST_ARGS);
static void post_lb(POST_ARGS);
@@ -167,17 +161,17 @@ static const struct valids mdoc_valids[MDOC_MAX] = {
{ NULL, NULL }, /* Va */
{ NULL, post_vt }, /* Vt */
{ NULL, NULL }, /* Xr */
- { NULL, ewarn_ge1 }, /* %A */
- { NULL, post_hyphtext }, /* %B */ /* FIXME: can be used outside Rs/Re. */
- { NULL, ewarn_ge1 }, /* %D */
- { NULL, ewarn_ge1 }, /* %I */
- { NULL, ewarn_ge1 }, /* %J */
- { NULL, post_hyphtext }, /* %N */
- { NULL, post_hyphtext }, /* %O */
- { NULL, ewarn_ge1 }, /* %P */
- { NULL, post_hyphtext }, /* %R */
- { NULL, post_hyphtext }, /* %T */ /* FIXME: can be used outside Rs/Re. */
- { NULL, ewarn_ge1 }, /* %V */
+ { NULL, NULL }, /* %A */
+ { NULL, post_hyph }, /* %B */ /* FIXME: can be used outside Rs/Re. */
+ { NULL, NULL }, /* %D */
+ { NULL, NULL }, /* %I */
+ { NULL, NULL }, /* %J */
+ { NULL, post_hyph }, /* %N */
+ { NULL, post_hyph }, /* %O */
+ { NULL, NULL }, /* %P */
+ { NULL, post_hyph }, /* %R */
+ { NULL, post_hyph }, /* %T */ /* FIXME: can be used outside Rs/Re. */
+ { NULL, NULL }, /* %V */
{ NULL, NULL }, /* Ac */
{ NULL, NULL }, /* Ao */
{ NULL, NULL }, /* Aq */
@@ -239,14 +233,14 @@ static const struct valids mdoc_valids[MDOC_MAX] = {
{ NULL, NULL }, /* Brq */
{ NULL, NULL }, /* Bro */
{ NULL, NULL }, /* Brc */
- { NULL, ewarn_ge1 }, /* %C */
+ { NULL, NULL }, /* %C */
{ pre_obsolete, post_es }, /* Es */
{ pre_obsolete, post_en }, /* En */
{ NULL, NULL }, /* Dx */
- { NULL, ewarn_ge1 }, /* %Q */
+ { NULL, NULL }, /* %Q */
{ NULL, post_par }, /* br */
{ NULL, post_par }, /* sp */
- { NULL, ewarn_eq1 }, /* %U */
+ { NULL, NULL }, /* %U */
{ NULL, NULL }, /* Ta */
{ NULL, NULL }, /* ll */
};
@@ -366,53 +360,6 @@ mdoc_valid_post(struct mdoc *mdoc)
}
static void
-check_count(struct mdoc *mdoc, enum mdoc_type type,
- enum check_ineq ineq, int val)
-{
- const char *p;
-
- if (mdoc->last->type != type)
- return;
-
- switch (ineq) {
- case CHECK_LT:
- p = "less than ";
- if (mdoc->last->nchild < val)
- return;
- break;
- case CHECK_GT:
- p = "more than ";
- if (mdoc->last->nchild > val)
- return;
- break;
- case CHECK_EQ:
- p = "";
- if (val == mdoc->last->nchild)
- return;
- break;
- default:
- abort();
- /* NOTREACHED */
- }
-
- mandoc_vmsg(MANDOCERR_ARGCWARN, mdoc->parse, mdoc->last->line,
- mdoc->last->pos, "want %s%d children (have %d)",
- p, val, mdoc->last->nchild);
-}
-
-static void
-ewarn_eq1(POST_ARGS)
-{
- check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);
-}
-
-static void
-ewarn_ge1(POST_ARGS)
-{
- check_count(mdoc, MDOC_ELEM, CHECK_GT, 0);
-}
-
-static void
check_args(struct mdoc *mdoc, struct mdoc_node *n)
{
int i;
@@ -920,7 +867,6 @@ post_lb(POST_ARGS)
const char *stdlibname;
char *libname;
- check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);
n = mdoc->last->child;
assert(MDOC_TEXT == n->type);
@@ -1089,7 +1035,7 @@ post_d1(POST_ARGS)
return;
if (n->child == NULL)
- mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
+ mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
n->line, n->pos, "D1");
post_hyph(mdoc);
@@ -1106,7 +1052,7 @@ post_literal(POST_ARGS)
return;
if (n->child == NULL)
- mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
+ mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
n->line, n->pos, mdoc_macronames[n->tok]);
if (n->tok == MDOC_Bd &&
@@ -1513,7 +1459,7 @@ post_bl(POST_ARGS)
nchild = nbody->child;
if (nchild == NULL) {
- mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
+ mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
nbody->line, nbody->pos, "Bl");
return;
}
@@ -1581,7 +1527,7 @@ post_bk(POST_ARGS)
n = mdoc->last;
if (n->type == MDOC_BLOCK && n->body->child == NULL) {
- mandoc_msg(MANDOCERR_MACRO_EMPTY,
+ mandoc_msg(MANDOCERR_BLK_EMPTY,
mdoc->parse, n->line, n->pos, "Bk");
mdoc_node_delete(mdoc, n);
}
@@ -1793,14 +1739,6 @@ post_hyph(POST_ARGS)
}
static void
-post_hyphtext(POST_ARGS)
-{
-
- ewarn_ge1(mdoc);
- post_hyph(mdoc);
-}
-
-static void
post_ns(POST_ARGS)
{
diff --git a/read.c b/read.c
index 560e6fdd..a52bfb1c 100644
--- a/read.c
+++ b/read.c
@@ -1,4 +1,4 @@
-/* $Id: read.c,v 1.123 2015/02/06 03:38:45 schwarze Exp $ */
+/* $Id: read.c,v 1.124 2015/02/06 07:13:14 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -136,8 +136,8 @@ static const char * const mandocerrs[MANDOCERR_MAX] = {
"skipping empty request",
"conditional request controls empty scope",
"skipping empty macro",
+ "empty block",
"empty argument, using 0n",
- "argument count wrong",
"missing display type, using -ragged",
"list type is not the first argument",
"missing -width in -tag list, using 8n",