[BACK]Return to mdoc_validate.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mandoc

Diff for /src/usr.bin/mandoc/mdoc_validate.c between version 1.182 and 1.183

version 1.182, 2015/02/03 00:48:27 version 1.183, 2015/02/04 16:38:31
Line 46 
Line 46 
         CHECK_EQ          CHECK_EQ
 };  };
   
 enum    check_lvl {  
         CHECK_WARN,  
         CHECK_ERROR,  
 };  
   
 typedef void    (*v_pre)(PRE_ARGS);  typedef void    (*v_pre)(PRE_ARGS);
 typedef void    (*v_post)(POST_ARGS);  typedef void    (*v_post)(POST_ARGS);
   
Line 60 
Line 55 
 };  };
   
 static  void     check_count(struct mdoc *, enum mdoc_type,  static  void     check_count(struct mdoc *, enum mdoc_type,
                         enum check_lvl, enum check_ineq, int);                          enum check_ineq, int);
 static  void     check_text(struct mdoc *, int, int, char *);  static  void     check_text(struct mdoc *, int, int, char *);
 static  void     check_argv(struct mdoc *,  static  void     check_argv(struct mdoc *,
                         struct mdoc_node *, struct mdoc_argv *);                          struct mdoc_node *, struct mdoc_argv *);
Line 372 
Line 367 
   
 static void  static void
 check_count(struct mdoc *mdoc, enum mdoc_type type,  check_count(struct mdoc *mdoc, enum mdoc_type type,
                 enum check_lvl lvl, enum check_ineq ineq, int val)          enum check_ineq ineq, int val)
 {  {
         const char      *p;          const char      *p;
         enum mandocerr   t;  
   
         if (mdoc->last->type != type)          if (mdoc->last->type != type)
                 return;                  return;
Line 401 
Line 395 
                 /* NOTREACHED */                  /* NOTREACHED */
         }          }
   
         t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT;          mandoc_vmsg(MANDOCERR_ARGCWARN, mdoc->parse, mdoc->last->line,
         mandoc_vmsg(t, mdoc->parse, mdoc->last->line,  
             mdoc->last->pos, "want %s%d children (have %d)",              mdoc->last->pos, "want %s%d children (have %d)",
             p, val, mdoc->last->nchild);              p, val, mdoc->last->nchild);
 }  }
Line 410 
Line 403 
 static void  static void
 bwarn_ge1(POST_ARGS)  bwarn_ge1(POST_ARGS)
 {  {
         check_count(mdoc, MDOC_BODY, CHECK_WARN, CHECK_GT, 0);          check_count(mdoc, MDOC_BODY, CHECK_GT, 0);
 }  }
   
 static void  static void
 ewarn_eq1(POST_ARGS)  ewarn_eq1(POST_ARGS)
 {  {
         check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1);          check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);
 }  }
   
 static void  static void
 ewarn_ge1(POST_ARGS)  ewarn_ge1(POST_ARGS)
 {  {
         check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_GT, 0);          check_count(mdoc, MDOC_ELEM, CHECK_GT, 0);
 }  }
   
 static void  static void
 hwarn_eq0(POST_ARGS)  hwarn_eq0(POST_ARGS)
 {  {
         check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 0);          check_count(mdoc, MDOC_HEAD, CHECK_EQ, 0);
 }  }
   
 static void  static void
Line 938 
Line 931 
         struct mdoc_node        *n;          struct mdoc_node        *n;
         char                    *libname;          char                    *libname;
   
         check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1);          check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);
         n = mdoc->last->child;          n = mdoc->last->child;
         assert(MDOC_TEXT == n->type);          assert(MDOC_TEXT == n->type);
         mandoc_asprintf(&libname, "library \\(lq%s\\(rq", n->string);          mandoc_asprintf(&libname, "library \\(lq%s\\(rq", n->string);
Line 986 
Line 979 
 post_fo(POST_ARGS)  post_fo(POST_ARGS)
 {  {
   
         check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 1);          check_count(mdoc, MDOC_HEAD, CHECK_EQ, 1);
         bwarn_ge1(mdoc);          bwarn_ge1(mdoc);
         if (mdoc->last->type == MDOC_HEAD && mdoc->last->nchild)          if (mdoc->last->type == MDOC_HEAD && mdoc->last->nchild)
                 post_fname(mdoc);                  post_fname(mdoc);
Line 1060 
Line 1053 
 static void  static void
 post_nd(POST_ARGS)  post_nd(POST_ARGS)
 {  {
           struct mdoc_node        *n;
   
         check_count(mdoc, MDOC_BODY, CHECK_ERROR, CHECK_GT, 0);          n = mdoc->last;
   
           if (n->type != MDOC_BODY)
                   return;
   
           if (n->child == NULL)
                   mandoc_msg(MANDOCERR_ND_EMPTY, mdoc->parse,
                       n->line, n->pos, "Nd");
   
         post_hyph(mdoc);          post_hyph(mdoc);
 }  }
   
Line 1168 
Line 1170 
         np = mdoc->last;          np = mdoc->last;
         if (AUTH__NONE == np->norm->An.auth) {          if (AUTH__NONE == np->norm->An.auth) {
                 if (0 == np->child)                  if (0 == np->child)
                         check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_GT, 0);                          check_count(mdoc, MDOC_ELEM, CHECK_GT, 0);
         } else if (np->child)          } else if (np->child)
                 check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0);                  check_count(mdoc, MDOC_ELEM, CHECK_EQ, 0);
 }  }
   
 static void  static void
Line 1652 
Line 1654 
   
         switch (mdoc->last->type) {          switch (mdoc->last->type) {
         case MDOC_HEAD:          case MDOC_HEAD:
                 check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_EQ, 0);                  check_count(mdoc, MDOC_HEAD, CHECK_EQ, 0);
                 return;                  return;
         case MDOC_BODY:          case MDOC_BODY:
                 if (mdoc->last->child)                  if (mdoc->last->child)
                         break;                          break;
                 check_count(mdoc, MDOC_BODY, CHECK_WARN, CHECK_GT, 0);                  check_count(mdoc, MDOC_BODY, CHECK_GT, 0);
                 return;                  return;
         default:          default:
                 return;                  return;
Line 2063 
Line 2065 
 {  {
         struct mdoc_node *np;          struct mdoc_node *np;
   
         check_count(mdoc, MDOC_HEAD, CHECK_WARN, CHECK_GT, 0);          check_count(mdoc, MDOC_HEAD, CHECK_GT, 0);
         post_hyph(mdoc);          post_hyph(mdoc);
   
         if (MDOC_BODY != mdoc->last->type)          if (MDOC_BODY != mdoc->last->type)
Line 2126 
Line 2128 
         struct mdoc_node *np;          struct mdoc_node *np;
   
         if (mdoc->last->tok == MDOC_sp)          if (mdoc->last->tok == MDOC_sp)
                 check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_LT, 2);                  check_count(mdoc, MDOC_ELEM, CHECK_LT, 2);
         else          else
                 check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 0);                  check_count(mdoc, MDOC_ELEM, CHECK_EQ, 0);
   
         if (MDOC_ELEM != mdoc->last->type &&          if (MDOC_ELEM != mdoc->last->type &&
             MDOC_BLOCK != mdoc->last->type)              MDOC_BLOCK != mdoc->last->type)

Legend:
Removed from v.1.182  
changed lines
  Added in v.1.183