summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2009-07-13 07:23:07 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2009-07-13 07:23:07 +0000
commit25984218728319c0e6aae65ffcdb4997a8036795 (patch)
tree9004cc211f9271d99ac9894140af4cc76ac02671
parentc13cf29fb280ec0bdd7e124d786f95c82f3e2c71 (diff)
downloadmandoc-25984218728319c0e6aae65ffcdb4997a8036795.tar.gz
Err/warn fix (schwarze@openbsd.org).
Lots of whitespace churn in getting functions aligned nicely.
-rw-r--r--mdoc.74
-rw-r--r--mdoc_term.c23
-rw-r--r--mdoc_validate.c230
3 files changed, 128 insertions, 129 deletions
diff --git a/mdoc.7 b/mdoc.7
index c3d92afb..a1da4515 100644
--- a/mdoc.7
+++ b/mdoc.7
@@ -668,8 +668,4 @@ blocks.
The \-split and \-nosplit arguments to
.Sq \&.An
are inane.
-.\" LIST-ITEM
-.It
-The end-of-line whitespace warnings are superfluous holdovers from
-historic groff.
.El
diff --git a/mdoc_term.c b/mdoc_term.c
index df2258c1..7db43e79 100644
--- a/mdoc_term.c
+++ b/mdoc_term.c
@@ -571,16 +571,15 @@ arg_listtype(const struct mdoc_node *n)
/* FALLTHROUGH */
case (MDOC_Column):
/* FALLTHROUGH */
+ case (MDOC_Hang):
+ /* FALLTHROUGH */
case (MDOC_Ohang):
return(n->args->argv[i].arg);
default:
break;
}
- /* FIXME: mandated by parser. */
-
- errx(1, "list type not supported");
- /* NOTREACHED */
+ return(-1);
}
@@ -726,6 +725,7 @@ termp_it_pre(DECL_ARGS)
(void)arg_getattrs(keys, vals, 3, bl);
type = arg_listtype(bl);
+ assert(-1 != type);
/* Calculate real width and offset. */
@@ -752,7 +752,7 @@ termp_it_pre(DECL_ARGS)
/*
* List-type can override the width in the case of fixed-head
* values (bullet, dash/hyphen, enum). Tags need a non-zero
- * offset.
+ * offset. FIXME: double-check that correct.
*/
switch (type) {
@@ -768,6 +768,8 @@ termp_it_pre(DECL_ARGS)
if (width < 5)
width = 5;
break;
+ case (MDOC_Hang):
+ /* FALLTHROUGH */
case (MDOC_Tag):
if (0 == width)
width = 10;
@@ -785,6 +787,8 @@ termp_it_pre(DECL_ARGS)
case (MDOC_Diag):
term_word(p, "\\ ");
/* FALLTHROUGH */
+ case (MDOC_Hang):
+ /* FALLTHROUGH */
case (MDOC_Inset):
if (MDOC_BODY == node->type)
p->flags &= ~TERMP_NOSPACE;
@@ -826,11 +830,17 @@ termp_it_pre(DECL_ARGS)
/* FALLTHROUGH */
case (MDOC_Hyphen):
/* FALLTHROUGH */
+ case (MDOC_Hang):
+ /* FALLTHROUGH */
case (MDOC_Tag):
if (MDOC_HEAD == node->type)
p->flags |= TERMP_NOBREAK;
else
p->flags |= TERMP_NOLPAD;
+
+ if (MDOC_HEAD == node->type && MDOC_Hang == type)
+ p->flags |= TERMP_NONOBREAK;
+
if (MDOC_HEAD == node->type && MDOC_Tag == type)
if (NULL == node->next ||
NULL == node->next->child)
@@ -872,6 +882,8 @@ termp_it_pre(DECL_ARGS)
/* FALLTHROUGH */
case (MDOC_Hyphen):
/* FALLTHROUGH */
+ case (MDOC_Hang):
+ /* FALLTHROUGH */
case (MDOC_Tag):
if (MDOC_HEAD == node->type)
p->rmargin = p->offset + width;
@@ -954,6 +966,7 @@ termp_it_post(DECL_ARGS)
return;
type = arg_listtype(node->parent->parent->parent);
+ assert(-1 != type);
switch (type) {
case (MDOC_Diag):
diff --git a/mdoc_validate.c b/mdoc_validate.c
index 9202df65..0c7826a0 100644
--- a/mdoc_validate.c
+++ b/mdoc_validate.c
@@ -28,9 +28,8 @@
/* FIXME: .Bl -diag can't have non-text children in HEAD. */
/* TODO: ignoring Pp (it's superfluous in some invocations). */
-#define PRE_ARGS struct mdoc *mdoc, const struct mdoc_node *n
-#define POST_ARGS struct mdoc *mdoc
-
+#define PRE_ARGS struct mdoc *mdoc, const struct mdoc_node *n
+#define POST_ARGS struct mdoc *mdoc
typedef int (*v_pre)(PRE_ARGS);
typedef int (*v_post)(POST_ARGS);
@@ -40,112 +39,117 @@ struct valids {
v_post *post;
};
-static int check_parent(PRE_ARGS, int, enum mdoc_type);
-static int check_msec(PRE_ARGS, ...);
-static int check_sec(PRE_ARGS, ...);
-static int check_stdarg(PRE_ARGS);
-static int check_text(struct mdoc *, int, int, const char *);
-static int check_argv(struct mdoc *,
+static int check_parent(PRE_ARGS, int, enum mdoc_type);
+static int check_msec(PRE_ARGS, ...);
+static int check_sec(PRE_ARGS, ...);
+static int check_stdarg(PRE_ARGS);
+static int check_text(struct mdoc *, int, int, const char *);
+static int check_argv(struct mdoc *,
const struct mdoc_node *,
const struct mdoc_argv *);
-static int check_args(struct mdoc *,
+static int check_args(struct mdoc *,
const struct mdoc_node *);
-static int err_child_lt(struct mdoc *, const char *, int);
-static int warn_child_lt(struct mdoc *, const char *, int);
-static int err_child_gt(struct mdoc *, const char *, int);
-static int warn_child_gt(struct mdoc *, const char *, int);
-static int err_child_eq(struct mdoc *, const char *, int);
-static int warn_child_eq(struct mdoc *, const char *, int);
-static int warn_print(struct mdoc *, int, int);
-static int warn_count(struct mdoc *, const char *,
+static int err_child_lt(struct mdoc *, const char *, int);
+static int warn_child_lt(struct mdoc *, const char *, int);
+static int err_child_gt(struct mdoc *, const char *, int);
+static int warn_child_gt(struct mdoc *, const char *, int);
+static int err_child_eq(struct mdoc *, const char *, int);
+static int warn_child_eq(struct mdoc *, const char *, int);
+static int warn_print(struct mdoc *, int, int);
+static int warn_count(struct mdoc *, const char *,
int, const char *, int);
-static int err_count(struct mdoc *, const char *,
+static int err_count(struct mdoc *, const char *,
int, const char *, int);
-static int pre_an(PRE_ARGS);
-static int pre_bd(PRE_ARGS);
-static int pre_bl(PRE_ARGS);
-static int pre_cd(PRE_ARGS);
-static int pre_dd(PRE_ARGS);
-static int pre_display(PRE_ARGS);
-static int pre_dt(PRE_ARGS);
-static int pre_er(PRE_ARGS);
-static int pre_ex(PRE_ARGS);
-static int pre_fd(PRE_ARGS);
-static int pre_it(PRE_ARGS);
-static int pre_lb(PRE_ARGS);
-static int pre_os(PRE_ARGS);
-static int pre_rv(PRE_ARGS);
-static int pre_sh(PRE_ARGS);
-static int pre_ss(PRE_ARGS);
-static int herr_ge1(POST_ARGS);
-static int hwarn_le1(POST_ARGS);
-static int herr_eq0(POST_ARGS);
-static int eerr_eq0(POST_ARGS);
-static int eerr_le2(POST_ARGS);
-static int eerr_eq1(POST_ARGS);
-static int eerr_ge1(POST_ARGS);
-static int ewarn_eq0(POST_ARGS);
-static int bwarn_ge1(POST_ARGS);
-static int berr_ge1(POST_ARGS);
-static int hwarn_eq1(POST_ARGS);
-static int ewarn_ge1(POST_ARGS);
-static int ebool(POST_ARGS);
-
-static int post_an(POST_ARGS);
-static int post_args(POST_ARGS);
-static int post_at(POST_ARGS);
-static int post_bf(POST_ARGS);
-static int post_bl(POST_ARGS);
-static int post_bl_head(POST_ARGS);
-static int post_it(POST_ARGS);
-static int post_lb(POST_ARGS);
-static int post_nm(POST_ARGS);
-static int post_root(POST_ARGS);
-static int post_sh(POST_ARGS);
-static int post_sh_body(POST_ARGS);
-static int post_sh_head(POST_ARGS);
-static int post_st(POST_ARGS);
-
-static v_pre pres_an[] = { pre_an, NULL };
-static v_pre pres_bd[] = { pre_display, pre_bd, NULL };
-static v_pre pres_bl[] = { pre_bl, NULL };
-static v_pre pres_cd[] = { pre_cd, NULL };
-static v_pre pres_dd[] = { pre_dd, NULL };
-static v_pre pres_d1[] = { pre_display, NULL };
-static v_pre pres_dt[] = { pre_dt, NULL };
-static v_pre pres_er[] = { pre_er, NULL };
-static v_pre pres_ex[] = { pre_ex, NULL };
-static v_pre pres_fd[] = { pre_fd, NULL };
-static v_pre pres_it[] = { pre_it, NULL };
-static v_pre pres_lb[] = { pre_lb, NULL };
-static v_pre pres_os[] = { pre_os, NULL };
-static v_pre pres_rv[] = { pre_rv, NULL };
-static v_pre pres_sh[] = { pre_sh, NULL };
-static v_pre pres_ss[] = { pre_ss, NULL };
-static v_post posts_bool[] = { eerr_eq1, ebool, NULL };
-static v_post posts_bd[] = { herr_eq0, bwarn_ge1, NULL };
-static v_post posts_text[] = { eerr_ge1, NULL };
-static v_post posts_wtext[] = { ewarn_ge1, NULL };
-static v_post posts_notext[] = { eerr_eq0, NULL };
-static v_post posts_wline[] = { bwarn_ge1, herr_eq0, NULL };
-static v_post posts_sh[] = { herr_ge1, bwarn_ge1, post_sh, NULL };
-static v_post posts_bl[] = { bwarn_ge1, post_bl, NULL };
-static v_post posts_it[] = { post_it, NULL };
-static v_post posts_in[] = { eerr_eq1, NULL };
-static v_post posts_ss[] = { herr_ge1, NULL };
-static v_post posts_nd[] = { berr_ge1, NULL };
-static v_post posts_pf[] = { eerr_eq1, NULL };
-static v_post posts_lb[] = { eerr_eq1, post_lb, NULL };
-static v_post posts_st[] = { eerr_eq1, post_st, NULL };
-static v_post posts_pp[] = { ewarn_eq0, NULL };
-static v_post posts_ex[] = { eerr_eq0, post_args, NULL };
-static v_post posts_rv[] = { eerr_eq0, post_args, NULL };
-static v_post posts_an[] = { post_an, NULL };
-static v_post posts_at[] = { post_at, NULL };
-static v_post posts_xr[] = { eerr_ge1, eerr_le2, NULL };
-static v_post posts_nm[] = { post_nm, NULL };
-static v_post posts_bf[] = { hwarn_le1, post_bf, NULL };
-static v_post posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL };
+
+#ifdef __linux__
+extern size_t strlcat(char *, const char *, size_t);
+#endif
+
+static int berr_ge1(POST_ARGS);
+static int bwarn_ge1(POST_ARGS);
+static int ebool(POST_ARGS);
+static int eerr_eq0(POST_ARGS);
+static int eerr_eq1(POST_ARGS);
+static int eerr_ge1(POST_ARGS);
+static int eerr_le2(POST_ARGS);
+static int ewarn_eq0(POST_ARGS);
+static int ewarn_ge1(POST_ARGS);
+static int herr_eq0(POST_ARGS);
+static int herr_ge1(POST_ARGS);
+static int hwarn_eq1(POST_ARGS);
+static int hwarn_le1(POST_ARGS);
+
+static int post_an(POST_ARGS);
+static int post_args(POST_ARGS);
+static int post_at(POST_ARGS);
+static int post_bf(POST_ARGS);
+static int post_bl(POST_ARGS);
+static int post_bl_head(POST_ARGS);
+static int post_it(POST_ARGS);
+static int post_lb(POST_ARGS);
+static int post_nm(POST_ARGS);
+static int post_root(POST_ARGS);
+static int post_sh(POST_ARGS);
+static int post_sh_body(POST_ARGS);
+static int post_sh_head(POST_ARGS);
+static int post_st(POST_ARGS);
+static int pre_an(PRE_ARGS);
+static int pre_bd(PRE_ARGS);
+static int pre_bl(PRE_ARGS);
+static int pre_cd(PRE_ARGS);
+static int pre_dd(PRE_ARGS);
+static int pre_display(PRE_ARGS);
+static int pre_dt(PRE_ARGS);
+static int pre_er(PRE_ARGS);
+static int pre_ex(PRE_ARGS);
+static int pre_fd(PRE_ARGS);
+static int pre_it(PRE_ARGS);
+static int pre_lb(PRE_ARGS);
+static int pre_os(PRE_ARGS);
+static int pre_rv(PRE_ARGS);
+static int pre_sh(PRE_ARGS);
+static int pre_ss(PRE_ARGS);
+
+static v_post posts_an[] = { post_an, NULL };
+static v_post posts_at[] = { post_at, NULL };
+static v_post posts_bd[] = { herr_eq0, bwarn_ge1, NULL };
+static v_post posts_bf[] = { hwarn_le1, post_bf, NULL };
+static v_post posts_bl[] = { bwarn_ge1, post_bl, NULL };
+static v_post posts_bool[] = { eerr_eq1, ebool, NULL };
+static v_post posts_ex[] = { eerr_eq0, post_args, NULL };
+static v_post posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL };
+static v_post posts_in[] = { eerr_eq1, NULL };
+static v_post posts_it[] = { post_it, NULL };
+static v_post posts_lb[] = { eerr_eq1, post_lb, NULL };
+static v_post posts_nd[] = { berr_ge1, NULL };
+static v_post posts_nm[] = { post_nm, NULL };
+static v_post posts_notext[] = { eerr_eq0, NULL };
+static v_post posts_pf[] = { eerr_eq1, NULL };
+static v_post posts_pp[] = { ewarn_eq0, NULL };
+static v_post posts_rv[] = { eerr_eq0, post_args, NULL };
+static v_post posts_sh[] = { herr_ge1, bwarn_ge1, post_sh, NULL };
+static v_post posts_ss[] = { herr_ge1, NULL };
+static v_post posts_st[] = { eerr_eq1, post_st, NULL };
+static v_post posts_text[] = { eerr_ge1, NULL };
+static v_post posts_wline[] = { bwarn_ge1, herr_eq0, NULL };
+static v_post posts_wtext[] = { ewarn_ge1, NULL };
+static v_post posts_xr[] = { eerr_ge1, eerr_le2, NULL };
+static v_pre pres_an[] = { pre_an, NULL };
+static v_pre pres_bd[] = { pre_display, pre_bd, NULL };
+static v_pre pres_bl[] = { pre_bl, NULL };
+static v_pre pres_cd[] = { pre_cd, NULL };
+static v_pre pres_d1[] = { pre_display, NULL };
+static v_pre pres_dd[] = { pre_dd, NULL };
+static v_pre pres_dt[] = { pre_dt, NULL };
+static v_pre pres_er[] = { pre_er, NULL };
+static v_pre pres_ex[] = { pre_ex, NULL };
+static v_pre pres_fd[] = { pre_fd, NULL };
+static v_pre pres_it[] = { pre_it, NULL };
+static v_pre pres_lb[] = { pre_lb, NULL };
+static v_pre pres_os[] = { pre_os, NULL };
+static v_pre pres_rv[] = { pre_rv, NULL };
+static v_pre pres_sh[] = { pre_sh, NULL };
+static v_pre pres_ss[] = { pre_ss, NULL };
const struct valids mdoc_valids[MDOC_MAX] = {
{ NULL, NULL }, /* Ap */
@@ -269,14 +273,8 @@ const struct valids mdoc_valids[MDOC_MAX] = {
};
-#ifdef __linux__
-extern size_t strlcat(char *, const char *, size_t);
-#endif
-
-
int
-mdoc_valid_pre(struct mdoc *mdoc,
- const struct mdoc_node *n)
+mdoc_valid_pre(struct mdoc *mdoc, const struct mdoc_node *n)
{
v_pre *p;
int line, pos;
@@ -305,14 +303,6 @@ mdoc_valid_post(struct mdoc *mdoc)
{
v_post *p;
- /*
- * This check occurs after the macro's children have been filled
- * in: postfix validation. Since this happens when we're
- * rewinding the scope tree, it's possible to have multiple
- * invocations (as by design, for now), we set bit MDOC_VALID to
- * indicate that we've validated.
- */
-
if (MDOC_VALID & mdoc->last->flags)
return(1);
mdoc->last->flags |= MDOC_VALID;
@@ -544,7 +534,7 @@ check_text(struct mdoc *mdoc, int line, int pos, const char *p)
}
if ( ! (MDOC_IGN_ESCAPE & mdoc->pflags))
return(mdoc_perr(mdoc, line, pos, EESCAPE));
- if ( ! mdoc_perr(mdoc, line, pos, EESCAPE))
+ if ( ! mdoc_pwarn(mdoc, line, pos, EESCAPE))
return(0);
}