]> git.cameronkatri.com Git - mandoc.git/blobdiff - mdoc_validate.c
Very tricky diff to fix macro interpretation and spacing around tabs
[mandoc.git] / mdoc_validate.c
index ff80872b7ff5f7ff166e9aa90f8c1fe91a2f2e0e..d796206fc7e9cf41b6c49fc637ad9484bff4e272 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: mdoc_validate.c,v 1.287 2015/04/19 13:50:26 schwarze Exp $ */
+/*     $Id: mdoc_validate.c,v 1.296 2015/10/12 21:26:02 schwarze Exp $ */
 /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -107,7 +107,6 @@ static      void     post_sh_see_also(POST_ARGS);
 static void     post_sh_authors(POST_ARGS);
 static void     post_sm(POST_ARGS);
 static void     post_st(POST_ARGS);
-static void     post_vt(POST_ARGS);
 
 static void     pre_an(PRE_ARGS);
 static void     pre_bd(PRE_ARGS);
@@ -161,7 +160,7 @@ static      const struct valids mdoc_valids[MDOC_MAX] = {
        { pre_std, NULL },                      /* Rv */
        { NULL, post_st },                      /* St */
        { NULL, NULL },                         /* Va */
-       { NULL, post_vt },                      /* Vt */
+       { NULL, NULL },                         /* Vt */
        { NULL, NULL },                         /* Xr */
        { NULL, NULL },                         /* %A */
        { NULL, post_hyph },                    /* %B */ /* FIXME: can be used outside Rs/Re. */
@@ -302,11 +301,9 @@ mdoc_valid_pre(struct roff_man *mdoc, struct roff_node *n)
        case ROFFT_TEXT:
                if (n->sec != SEC_SYNOPSIS || n->parent->tok != MDOC_Fd)
                        check_text(mdoc, n->line, n->pos, n->string);
-               /* FALLTHROUGH */
+               return;
        case ROFFT_TBL:
-               /* FALLTHROUGH */
        case ROFFT_EQN:
-               /* FALLTHROUGH */
        case ROFFT_ROOT:
                return;
        default:
@@ -332,9 +329,7 @@ mdoc_valid_post(struct roff_man *mdoc)
 
        switch (n->type) {
        case ROFFT_TEXT:
-               /* FALLTHROUGH */
        case ROFFT_EQN:
-               /* FALLTHROUGH */
        case ROFFT_TBL:
                break;
        case ROFFT_ROOT:
@@ -567,13 +562,9 @@ pre_bl(PRE_ARGS)
                            n->line, n->pos, "Bl -tag");
                break;
        case LIST_column:
-               /* FALLTHROUGH */
        case LIST_diag:
-               /* FALLTHROUGH */
        case LIST_ohang:
-               /* FALLTHROUGH */
        case LIST_inset:
-               /* FALLTHROUGH */
        case LIST_item:
                if (n->norm->Bl.width)
                        mandoc_vmsg(MANDOCERR_BL_SKIPW, mdoc->parse,
@@ -581,9 +572,7 @@ pre_bl(PRE_ARGS)
                            mdoc_argnames[mdoclt]);
                break;
        case LIST_bullet:
-               /* FALLTHROUGH */
        case LIST_dash:
-               /* FALLTHROUGH */
        case LIST_hyphen:
                if (NULL == n->norm->Bl.width)
                        n->norm->Bl.width = "2n";
@@ -658,7 +647,6 @@ pre_bd(PRE_ARGS)
                        break;
                default:
                        abort();
-                       /* NOTREACHED */
                }
                if (DISP__NONE == dt)
                        continue;
@@ -932,28 +920,6 @@ post_fa(POST_ARGS)
        }
 }
 
-static void
-post_vt(POST_ARGS)
-{
-       const struct roff_node *n;
-
-       /*
-        * 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, which is already
-        * guaranteed by the in_line parsing routine; BLOCK types,
-        * specifically the BODY, should only have TEXT children.
-        */
-
-       if (mdoc->last->type != ROFFT_BODY)
-               return;
-
-       for (n = mdoc->last->child; n; n = n->next)
-               if (n->type != ROFFT_TEXT)
-                       mandoc_msg(MANDOCERR_VT_CHILD, mdoc->parse,
-                           n->line, n->pos, mdoc_macronames[n->tok]);
-}
-
 static void
 post_nm(POST_ARGS)
 {
@@ -969,7 +935,7 @@ post_nm(POST_ARGS)
        if (NULL != mdoc->meta.name)
                return;
 
-       mdoc_deroff(&mdoc->meta.name, n);
+       deroff(&mdoc->meta.name, n);
 
        if (NULL == mdoc->meta.name)
                mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse,
@@ -1051,17 +1017,15 @@ post_defaults(POST_ARGS)
 
        switch (nn->tok) {
        case MDOC_Ar:
-               mdoc_word_alloc(mdoc, nn->line, nn->pos, "file");
-               mdoc_word_alloc(mdoc, nn->line, nn->pos, "...");
+               roff_word_alloc(mdoc, nn->line, nn->pos, "file");
+               roff_word_alloc(mdoc, nn->line, nn->pos, "...");
                break;
        case MDOC_Pa:
-               /* FALLTHROUGH */
        case MDOC_Mt:
-               mdoc_word_alloc(mdoc, nn->line, nn->pos, "~");
+               roff_word_alloc(mdoc, nn->line, nn->pos, "~");
                break;
        default:
                abort();
-               /* NOTREACHED */
        }
        mdoc->last = nn;
 }
@@ -1076,7 +1040,7 @@ post_at(POST_ARGS)
        n = mdoc->last;
        if (n->child == NULL) {
                mdoc->next = ROFF_NEXT_CHILD;
-               mdoc_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX");
+               roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX");
                mdoc->last = n;
                return;
        }
@@ -1147,13 +1111,9 @@ post_it(POST_ARGS)
 
        switch (lt) {
        case LIST_tag:
-               /* FALLTHROUGH */
        case LIST_hang:
-               /* FALLTHROUGH */
        case LIST_ohang:
-               /* FALLTHROUGH */
        case LIST_inset:
-               /* FALLTHROUGH */
        case LIST_diag:
                if (nit->head->child == NULL)
                        mandoc_vmsg(MANDOCERR_IT_NOHEAD,
@@ -1162,11 +1122,8 @@ post_it(POST_ARGS)
                            mdoc_argnames[nbl->args->argv[0].arg]);
                break;
        case LIST_bullet:
-               /* FALLTHROUGH */
        case LIST_dash:
-               /* FALLTHROUGH */
        case LIST_enum:
-               /* FALLTHROUGH */
        case LIST_hyphen:
                if (nit->body == NULL || nit->body->child == NULL)
                        mandoc_vmsg(MANDOCERR_IT_NOBODY,
@@ -1227,9 +1184,7 @@ post_bl_block(POST_ARGS)
                while (NULL != nc) {
                        switch (nc->tok) {
                        case MDOC_Pp:
-                               /* FALLTHROUGH */
                        case MDOC_Lp:
-                               /* FALLTHROUGH */
                        case MDOC_br:
                                break;
                        default:
@@ -1269,7 +1224,7 @@ rewrite_macro2len(char **arg)
                return;
        else if ( ! strcmp(*arg, "Ds"))
                width = 6;
-       else if ((tok = mdoc_hash_find(*arg)) == MDOC_MAX)
+       else if ((tok = mdoc_hash_find(*arg)) == TOKEN_NONE)
                return;
        else
                width = macro2len(tok);
@@ -1562,7 +1517,8 @@ post_root(POST_ARGS)
        /* Check that we begin with a proper `Sh'. */
 
        n = mdoc->first->child;
-       while (n != NULL && mdoc_macros[n->tok].flags & MDOC_PROLOGUE)
+       while (n != NULL && n->tok != TOKEN_NONE &&
+           mdoc_macros[n->tok].flags & MDOC_PROLOGUE)
                n = n->next;
 
        if (n == NULL)
@@ -1765,7 +1721,7 @@ post_sh_name(POST_ARGS)
                                mandoc_msg(MANDOCERR_NAMESEC_ND,
                                    mdoc->parse, n->line, n->pos, NULL);
                        break;
-               case MDOC_MAX:
+               case TOKEN_NONE:
                        if (hasnm)
                                break;
                        /* FALLTHROUGH */
@@ -1852,8 +1808,8 @@ child_an(const struct roff_node *n)
 
        for (n = n->child; n != NULL; n = n->next)
                if ((n->tok == MDOC_An && n->nchild) || child_an(n))
-                       return(1);
-       return(0);
+                       return 1;
+       return 0;
 }
 
 static void
@@ -1881,8 +1837,7 @@ post_sh_head(POST_ARGS)
         */
 
        secname = NULL;
-       sec = SEC_CUSTOM;
-       mdoc_deroff(&secname, mdoc->last);
+       deroff(&secname, mdoc->last);
        sec = NULL == secname ? SEC_CUSTOM : a2sec(secname);
 
        /* The NAME should be first. */
@@ -1961,7 +1916,6 @@ post_sh_head(POST_ARGS)
                goodsec = "2, 3, 4, 9";
                /* FALLTHROUGH */
        case SEC_RETURN_VALUES:
-               /* FALLTHROUGH */
        case SEC_LIBRARY:
                if (*mdoc->meta.msec == '2')
                        break;
@@ -2110,7 +2064,6 @@ pre_literal(PRE_ARGS)
                break;
        default:
                abort();
-               /* NOTREACHED */
        }
 }
 
@@ -2131,7 +2084,7 @@ post_dd(POST_ARGS)
        }
 
        datestr = NULL;
-       mdoc_deroff(&datestr, n);
+       deroff(&datestr, n);
        if (mdoc->quick)
                mdoc->meta.date = datestr;
        else {
@@ -2266,7 +2219,7 @@ post_os(POST_ARGS)
 
        free(mdoc->meta.os);
        mdoc->meta.os = NULL;
-       mdoc_deroff(&mdoc->meta.os, n);
+       deroff(&mdoc->meta.os, n);
        if (mdoc->meta.os)
                goto out;
 
@@ -2315,7 +2268,7 @@ post_ex(POST_ARGS)
        }
 
        mdoc->next = ROFF_NEXT_CHILD;
-       mdoc_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
+       roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
        mdoc->last = n;
 }
 
@@ -2326,9 +2279,9 @@ a2sec(const char *p)
 
        for (i = 0; i < (int)SEC__MAX; i++)
                if (secnames[i] && 0 == strcmp(p, secnames[i]))
-                       return((enum roff_sec)i);
+                       return (enum roff_sec)i;
 
-       return(SEC_CUSTOM);
+       return SEC_CUSTOM;
 }
 
 static size_t
@@ -2337,89 +2290,89 @@ macro2len(int macro)
 
        switch (macro) {
        case MDOC_Ad:
-               return(12);
+               return 12;
        case MDOC_Ao:
-               return(12);
+               return 12;
        case MDOC_An:
-               return(12);
+               return 12;
        case MDOC_Aq:
-               return(12);
+               return 12;
        case MDOC_Ar:
-               return(12);
+               return 12;
        case MDOC_Bo:
-               return(12);
+               return 12;
        case MDOC_Bq:
-               return(12);
+               return 12;
        case MDOC_Cd:
-               return(12);
+               return 12;
        case MDOC_Cm:
-               return(10);
+               return 10;
        case MDOC_Do:
-               return(10);
+               return 10;
        case MDOC_Dq:
-               return(12);
+               return 12;
        case MDOC_Dv:
-               return(12);
+               return 12;
        case MDOC_Eo:
-               return(12);
+               return 12;
        case MDOC_Em:
-               return(10);
+               return 10;
        case MDOC_Er:
-               return(17);
+               return 17;
        case MDOC_Ev:
-               return(15);
+               return 15;
        case MDOC_Fa:
-               return(12);
+               return 12;
        case MDOC_Fl:
-               return(10);
+               return 10;
        case MDOC_Fo:
-               return(16);
+               return 16;
        case MDOC_Fn:
-               return(16);
+               return 16;
        case MDOC_Ic:
-               return(10);
+               return 10;
        case MDOC_Li:
-               return(16);
+               return 16;
        case MDOC_Ms:
-               return(6);
+               return 6;
        case MDOC_Nm:
-               return(10);
+               return 10;
        case MDOC_No:
-               return(12);
+               return 12;
        case MDOC_Oo:
-               return(10);
+               return 10;
        case MDOC_Op:
-               return(14);
+               return 14;
        case MDOC_Pa:
-               return(32);
+               return 32;
        case MDOC_Pf:
-               return(12);
+               return 12;
        case MDOC_Po:
-               return(12);
+               return 12;
        case MDOC_Pq:
-               return(12);
+               return 12;
        case MDOC_Ql:
-               return(16);
+               return 16;
        case MDOC_Qo:
-               return(12);
+               return 12;
        case MDOC_So:
-               return(12);
+               return 12;
        case MDOC_Sq:
-               return(12);
+               return 12;
        case MDOC_Sy:
-               return(6);
+               return 6;
        case MDOC_Sx:
-               return(16);
+               return 16;
        case MDOC_Tn:
-               return(10);
+               return 10;
        case MDOC_Va:
-               return(12);
+               return 12;
        case MDOC_Vt:
-               return(12);
+               return 12;
        case MDOC_Xr:
-               return(10);
+               return 10;
        default:
                break;
        };
-       return(0);
+       return 0;
 }