-/* $Id: man_validate.c,v 1.22 2009/08/21 12:12:12 kristaps Exp $ */
+/* $Id: man_validate.c,v 1.26 2009/10/24 05:45:05 kristaps Exp $ */
/*
* Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@kth.se>
*
static int check_bline(CHKARGS);
static int check_eq0(CHKARGS);
-static int check_eq1(CHKARGS);
+static int check_le1(CHKARGS);
static int check_ge2(CHKARGS);
static int check_le5(CHKARGS);
static int check_par(CHKARGS);
+static int check_part(CHKARGS);
static int check_root(CHKARGS);
static int check_sec(CHKARGS);
-static int check_sp(CHKARGS);
static int check_text(CHKARGS);
static v_check posts_eq0[] = { check_eq0, NULL };
static v_check posts_ge2_le5[] = { check_ge2, check_le5, NULL };
static v_check posts_par[] = { check_par, NULL };
+static v_check posts_part[] = { check_part, NULL };
static v_check posts_sec[] = { check_sec, NULL };
-static v_check posts_sp[] = { check_sp, NULL };
+static v_check posts_sp[] = { check_le1, NULL };
static v_check pres_bline[] = { check_bline, NULL };
static const struct man_valid man_valids[MAN_MAX] = {
{ pres_bline, posts_eq0 }, /* fi */
{ NULL, NULL }, /* r */
{ NULL, NULL }, /* RE */
- { NULL, NULL }, /* RS */ /* FIXME: warn if empty body. */
+ { NULL, posts_part }, /* RS */
{ NULL, NULL }, /* DT */
+ { NULL, NULL }, /* UC */
+ { NULL, NULL }, /* PD */
};
}
INEQ_DEFINE(0, ==, eq0)
-INEQ_DEFINE(1, ==, eq1)
+INEQ_DEFINE(1, <=, le1)
INEQ_DEFINE(2, >=, ge2)
INEQ_DEFINE(5, <=, le5)
static int
-check_sp(CHKARGS)
+check_sec(CHKARGS)
{
- long lval;
- char *ep, *buf;
-
- if (NULL == n->child)
- return(1);
- else if ( ! check_eq1(m, n))
- return(0);
-
- assert(MAN_TEXT == n->child->type);
- buf = n->child->string;
- assert(buf);
-
- /* From OpenBSD's strtol(3). */
-
- errno = 0;
- lval = strtol(buf, &ep, 10);
- if (buf[0] == '\0' || *ep != '\0')
- return(man_nerr(m, n->child, WNUMFMT));
-
- if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) ||
- (lval > INT_MAX || lval < 0))
- return(man_nerr(m, n->child, WNUMFMT));
+ if (MAN_BODY == n->type && 0 == n->nchild)
+ return(man_nwarn(m, n, WBODYARGS));
+ if (MAN_HEAD == n->type && 0 == n->nchild)
+ return(man_nerr(m, n, WHEADARGS));
return(1);
}
static int
-check_sec(CHKARGS)
+check_part(CHKARGS)
{
if (MAN_BODY == n->type && 0 == n->nchild)
return(man_nwarn(m, n, WBODYARGS));
- if (MAN_HEAD == n->type && 0 == n->nchild)
- return(man_nerr(m, n, WHEADARGS));
return(1);
}