summaryrefslogtreecommitdiffstatshomepage
path: root/man_validate.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2010-03-24 20:10:53 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2010-03-24 20:10:53 +0000
commitbdcaee420fe7a05a2069049d14aa31dce93be009 (patch)
tree497c84386ad0639f035b07c56b0fcd0e16c719fb /man_validate.c
parent0cbe61642c46c73e81d998bc81f574b30674e3cb (diff)
downloadmandoc-bdcaee420fe7a05a2069049d14aa31dce93be009.tar.gz
mandoc-bdcaee420fe7a05a2069049d14aa31dce93be009.tar.zst
mandoc-bdcaee420fe7a05a2069049d14aa31dce93be009.zip
Using man_node_delete() instead of man_node_free()/man_node_freelist() and friends (much simpler).
Split blk_imp() into blk_exp() (explicit macros), blk_dotted() (roff macros), and the original. Added de, dei, am, ami, and ig roff macros (for now, these are discarded within the parse).
Diffstat (limited to 'man_validate.c')
-rw-r--r--man_validate.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/man_validate.c b/man_validate.c
index f0b8164f..db3b1d0e 100644
--- a/man_validate.c
+++ b/man_validate.c
@@ -1,4 +1,4 @@
-/* $Id: man_validate.c,v 1.30 2010/03/23 11:30:48 kristaps Exp $ */
+/* $Id: man_validate.c,v 1.31 2010/03/24 20:10:53 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -46,6 +46,7 @@ static int check_ge2(CHKARGS);
static int check_le5(CHKARGS);
static int check_par(CHKARGS);
static int check_part(CHKARGS);
+static int check_roff(CHKARGS);
static int check_root(CHKARGS);
static int check_sec(CHKARGS);
static int check_text(CHKARGS);
@@ -57,6 +58,7 @@ static v_check posts_part[] = { check_part, NULL };
static v_check posts_sec[] = { check_sec, NULL };
static v_check posts_le1[] = { check_le1, NULL };
static v_check pres_bline[] = { check_bline, NULL };
+static v_check pres_roff[] = { check_bline, check_roff, NULL };
static const struct man_valid man_valids[MAN_MAX] = {
{ NULL, posts_eq0 }, /* br */
@@ -94,6 +96,12 @@ static const struct man_valid man_valids[MAN_MAX] = {
{ NULL, posts_eq0 }, /* Sp */
{ pres_bline, posts_le1 }, /* Vb */
{ pres_bline, posts_eq0 }, /* Ve */
+ { pres_roff, NULL }, /* de */
+ { pres_roff, NULL }, /* dei */
+ { pres_roff, NULL }, /* am */
+ { pres_roff, NULL }, /* ami */
+ { pres_roff, NULL }, /* ig */
+ { NULL, NULL }, /* . */
};
@@ -284,6 +292,24 @@ check_bline(CHKARGS)
assert( ! (MAN_ELINE & m->flags));
if (MAN_BLINE & m->flags)
return(man_nerr(m, n, WLNSCOPE));
+
return(1);
}
+
+static int
+check_roff(CHKARGS)
+{
+
+ if (MAN_BLOCK != n->type)
+ return(1);
+
+ for (n = n->parent; n; n = n->parent)
+ if (MAN_de == n->tok || MAN_dei == n->tok ||
+ MAN_am == n->tok ||
+ MAN_ami == n->tok ||
+ MAN_ig == n->tok)
+ return(man_nerr(m, n, WROFFNEST));
+
+ return(1);
+}