aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/man.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2015-10-22 21:54:23 +0000
committerIngo Schwarze <schwarze@openbsd.org>2015-10-22 21:54:23 +0000
commite66bc70731870e9afaa3b406e8e49e65b95bfb57 (patch)
treee5dd94d28e6f4546833c334a078d677f759dd890 /man.c
parent9712be0c6ab0aa2d1baa5449bf191e975946ebdb (diff)
downloadmandoc-e66bc70731870e9afaa3b406e8e49e65b95bfb57.tar.gz
mandoc-e66bc70731870e9afaa3b406e8e49e65b95bfb57.tar.zst
mandoc-e66bc70731870e9afaa3b406e8e49e65b95bfb57.zip
move man(7) validation into the dedicated validation phase, too
Diffstat (limited to 'man.c')
-rw-r--r--man.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/man.c b/man.c
index d2c27bfa..31c094e8 100644
--- a/man.c
+++ b/man.c
@@ -1,4 +1,4 @@
-/* $Id: man.c,v 1.165 2015/10/06 18:32:19 schwarze Exp $ */
+/* $Id: man.c,v 1.166 2015/10/22 21:54:23 schwarze Exp $ */
/*
* Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2013, 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -332,3 +332,38 @@ man_mparse(const struct roff_man *man)
assert(man && man->parse);
return man->parse;
}
+
+void
+man_state(struct roff_man *man, struct roff_node *n)
+{
+
+ switch(n->tok) {
+ case MAN_nf:
+ case MAN_EX:
+ if (man->flags & MAN_LITERAL && ! (n->flags & MAN_VALID))
+ mandoc_msg(MANDOCERR_NF_SKIP, man->parse,
+ n->line, n->pos, "nf");
+ man->flags |= MAN_LITERAL;
+ break;
+ case MAN_fi:
+ case MAN_EE:
+ if ( ! (man->flags & MAN_LITERAL) &&
+ ! (n->flags & MAN_VALID))
+ mandoc_msg(MANDOCERR_FI_SKIP, man->parse,
+ n->line, n->pos, "fi");
+ man->flags &= ~MAN_LITERAL;
+ break;
+ default:
+ break;
+ }
+ man->last->flags |= MAN_VALID;
+}
+
+void
+man_validate(struct roff_man *man)
+{
+
+ man->last = man->first;
+ man_node_validate(man);
+ man->flags &= ~MAN_LITERAL;
+}