diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2011-01-22 14:00:52 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2011-01-22 14:00:52 +0000 |
commit | 89f935ee79367075972f0189373d7ef70f44cf6a (patch) | |
tree | d83e31d0bf5027e6a0a6f3f64507f591108116bd | |
parent | 2431b218394ba14677aba28b89b056f9f3c6d87f (diff) | |
download | mandoc-89f935ee79367075972f0189373d7ef70f44cf6a.tar.gz |
Check argument count validation for all in_line() macros.
Most empty in_line() macros are already removed by the parser,
so there is no need to check again in mdoc_validate.c.
This also downgrades almost all remaining argument count issues
from ERROR to WARNING.
ok kristaps@
-rw-r--r-- | mdoc_validate.c | 56 |
1 files changed, 20 insertions, 36 deletions
diff --git a/mdoc_validate.c b/mdoc_validate.c index 55f933c4..0e8f6d53 100644 --- a/mdoc_validate.c +++ b/mdoc_validate.c @@ -78,7 +78,6 @@ static int concat(struct mdoc *, char *, static int ebool(POST_ARGS); static int berr_ge1(POST_ARGS); static int bwarn_ge1(POST_ARGS); -static int eerr_ge1(POST_ARGS); static int ewarn_eq0(POST_ARGS); static int ewarn_eq1(POST_ARGS); static int ewarn_ge1(POST_ARGS); @@ -154,11 +153,10 @@ static v_post posts_sp[] = { ewarn_le1, NULL }; static v_post posts_ss[] = { post_ignpar, hwarn_ge1, bwarn_ge1, NULL }; static v_post posts_st[] = { post_st, NULL }; static v_post posts_std[] = { post_std, NULL }; -static v_post posts_text[] = { eerr_ge1, NULL }; +static v_post posts_text[] = { ewarn_ge1, NULL }; static v_post posts_text1[] = { ewarn_eq1, NULL }; static v_post posts_vt[] = { post_vt, NULL }; static v_post posts_wline[] = { bwarn_ge1, NULL }; -static v_post posts_wtext[] = { ewarn_ge1, NULL }; static v_pre pres_an[] = { pre_an, NULL }; static v_pre pres_bd[] = { pre_display, pre_bd, pre_literal, pre_par, NULL }; static v_pre pres_bl[] = { pre_bl, pre_par, NULL }; @@ -190,21 +188,21 @@ const struct valids mdoc_valids[MDOC_MAX] = { { pres_bl, posts_bl }, /* Bl */ { NULL, NULL }, /* El */ { pres_it, posts_it }, /* It */ - { NULL, posts_text }, /* Ad */ + { NULL, NULL }, /* Ad */ { pres_an, posts_an }, /* An */ { NULL, posts_defaults }, /* Ar */ - { NULL, posts_text }, /* Cd */ + { NULL, NULL }, /* Cd */ { NULL, NULL }, /* Cm */ { NULL, NULL }, /* Dv */ - { pres_er, posts_text }, /* Er */ + { pres_er, NULL }, /* Er */ { NULL, NULL }, /* Ev */ { pres_std, posts_std }, /* Ex */ { NULL, NULL }, /* Fa */ - { pres_fd, posts_wtext }, /* Fd */ + { pres_fd, posts_text }, /* Fd */ { NULL, NULL }, /* Fl */ - { NULL, posts_text }, /* Fn */ - { NULL, posts_wtext }, /* Ft */ - { NULL, posts_text }, /* Ic */ + { NULL, NULL }, /* Fn */ + { NULL, NULL }, /* Ft */ + { NULL, NULL }, /* Ic */ { NULL, posts_text1 }, /* In */ { NULL, posts_defaults }, /* Li */ { NULL, posts_nd }, /* Nd */ @@ -216,7 +214,7 @@ const struct valids mdoc_valids[MDOC_MAX] = { { NULL, posts_st }, /* St */ { NULL, NULL }, /* Va */ { NULL, posts_vt }, /* Vt */ - { NULL, posts_wtext }, /* Xr */ + { NULL, posts_text }, /* Xr */ { NULL, posts_text }, /* %A */ { NULL, posts_text }, /* %B */ /* FIXME: can be used outside Rs/Re. */ { NULL, posts_text }, /* %D */ /* FIXME: check date with mandoc_a2time(). */ @@ -247,7 +245,7 @@ const struct valids mdoc_valids[MDOC_MAX] = { { NULL, NULL }, /* Em */ { NULL, NULL }, /* Eo */ { NULL, NULL }, /* Fx */ - { NULL, posts_text }, /* Ms */ + { NULL, NULL }, /* Ms */ { NULL, posts_notext }, /* No */ { NULL, posts_notext }, /* Ns */ { NULL, NULL }, /* Nx */ @@ -266,9 +264,9 @@ const struct valids mdoc_valids[MDOC_MAX] = { { NULL, NULL }, /* So */ { NULL, NULL }, /* Sq */ { NULL, posts_bool }, /* Sm */ - { NULL, posts_text }, /* Sx */ - { NULL, posts_text }, /* Sy */ - { NULL, posts_text }, /* Tn */ + { NULL, NULL }, /* Sx */ + { NULL, NULL }, /* Sy */ + { NULL, NULL }, /* Tn */ { NULL, NULL }, /* Ux */ { NULL, NULL }, /* Xc */ { NULL, NULL }, /* Xo */ @@ -284,7 +282,7 @@ const struct valids mdoc_valids[MDOC_MAX] = { { NULL, posts_eoln }, /* Ud */ { NULL, posts_lb }, /* Lb */ { NULL, posts_notext }, /* Lp */ - { NULL, posts_text }, /* Lk */ + { NULL, NULL }, /* Lk */ { NULL, posts_defaults }, /* Mt */ { NULL, NULL }, /* Brq */ { NULL, NULL }, /* Bro */ @@ -434,12 +432,6 @@ bwarn_ge1(POST_ARGS) } static int -eerr_ge1(POST_ARGS) -{ - return(check_count(mdoc, MDOC_ELEM, CHECK_ERROR, CHECK_GT, 0)); -} - -static int ewarn_eq0(POST_ARGS) { return(check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0)); @@ -1079,12 +1071,11 @@ post_vt(POST_ARGS) /* * The Vt macro comes in both ELEM and BLOCK form, both of which * have different syntaxes (yet more context-sensitive - * behaviour). ELEM types must have a child; BLOCK types, + * behaviour). ELEM types must have a child, which is already + * guaranteed by the in_line parsing routine; BLOCK types, * specifically the BODY, should only have TEXT children. */ - if (MDOC_ELEM == mdoc->last->type) - return(eerr_ge1(mdoc)); if (MDOC_BODY != mdoc->last->type) return(1); @@ -1228,19 +1219,12 @@ post_an(POST_ARGS) struct mdoc_node *np; np = mdoc->last; - if (AUTH__NONE != np->norm->An.auth && np->child) { + if (AUTH__NONE == np->norm->An.auth) { + if (0 == np->child) + check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_GT, 0); + } else if (np->child) check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0); - return(1); - } - - /* - * FIXME: make this ewarn and make sure that the front-ends - * don't print the arguments. - */ - if (AUTH__NONE != np->norm->An.auth || np->child) - return(1); - mdoc_nmsg(mdoc, np, MANDOCERR_NOARGS); return(1); } |