aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mdoc_validate.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-02-06 03:38:45 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-02-06 03:38:45 +0000
commit7dfe6b3fdffd0ff76af3e3d347b0f300fddb15e8 (patch)
treec8da2ede0eced598b1c3160a92a64f654f8225ca /mdoc_validate.c
parent21214100bde85df055d67a3ab4b9c51b8a2dd7fb (diff)
downloadmandoc-7dfe6b3fdffd0ff76af3e3d347b0f300fddb15e8.tar.gz
mandoc-7dfe6b3fdffd0ff76af3e3d347b0f300fddb15e8.tar.zst
mandoc-7dfe6b3fdffd0ff76af3e3d347b0f300fddb15e8.zip
better handle .Fo and .Fd without argument
better handle .Fo with more than one argument
Diffstat (limited to 'mdoc_validate.c')
-rw-r--r--mdoc_validate.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/mdoc_validate.c b/mdoc_validate.c
index f399e868..cd666b5a 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -1,4 +1,4 @@
-/* $Id: mdoc_validate.c,v 1.273 2015/02/06 02:04:54 schwarze Exp $ */
+/* $Id: mdoc_validate.c,v 1.274 2015/02/06 03:38:45 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -67,7 +67,6 @@ static enum mdoc_sec a2sec(const char *);
static size_t macro2len(enum mdoct);
static void rewrite_macro2len(char **);
-static void bwarn_ge1(POST_ARGS);
static void ewarn_eq1(POST_ARGS);
static void ewarn_ge1(POST_ARGS);
@@ -151,7 +150,7 @@ static const struct valids mdoc_valids[MDOC_MAX] = {
{ NULL, NULL }, /* Ev */
{ pre_std, post_ex }, /* Ex */
{ NULL, post_fa }, /* Fa */
- { NULL, ewarn_ge1 }, /* Fd */
+ { NULL, NULL }, /* Fd */
{ NULL, NULL }, /* Fl */
{ NULL, post_fn }, /* Fn */
{ NULL, NULL }, /* Ft */
@@ -402,12 +401,6 @@ check_count(struct mdoc *mdoc, enum mdoc_type type,
}
static void
-bwarn_ge1(POST_ARGS)
-{
- check_count(mdoc, MDOC_BODY, CHECK_GT, 0);
-}
-
-static void
ewarn_eq1(POST_ARGS)
{
check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);
@@ -980,11 +973,27 @@ post_fn(POST_ARGS)
static void
post_fo(POST_ARGS)
{
+ const struct mdoc_node *n;
+
+ n = mdoc->last;
+
+ if (n->type != MDOC_HEAD)
+ return;
+
+ if (n->child == NULL) {
+ mandoc_msg(MANDOCERR_FO_NOHEAD, mdoc->parse,
+ n->line, n->pos, "Fo");
+ return;
+ }
+ if (n->child != n->last) {
+ mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
+ n->child->next->line, n->child->next->pos,
+ "Fo ... %s", n->child->next->string);
+ while (n->child != n->last)
+ mdoc_node_delete(mdoc, n->last);
+ }
- check_count(mdoc, MDOC_HEAD, CHECK_EQ, 1);
- bwarn_ge1(mdoc);
- if (mdoc->last->type == MDOC_HEAD && mdoc->last->nchild)
- post_fname(mdoc);
+ post_fname(mdoc);
}
static void