[BACK]Return to mdoc_validate.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mdoc_validate.c between version 1.266 and 1.267

version 1.266, 2015/02/03 00:48:47 version 1.267, 2015/02/04 16:38:56
Line 48  enum check_ineq {
Line 48  enum check_ineq {
         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 62  struct valids {
Line 57  struct valids {
 };  };
   
 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 374  mdoc_valid_post(struct mdoc *mdoc)
Line 369  mdoc_valid_post(struct mdoc *mdoc)
   
 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 403  check_count(struct mdoc *mdoc, enum mdoc_type type,
Line 397  check_count(struct mdoc *mdoc, enum mdoc_type type,
                 /* 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 412  check_count(struct mdoc *mdoc, enum mdoc_type type,
Line 405  check_count(struct mdoc *mdoc, enum mdoc_type type,
 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 941  post_lb(POST_ARGS)
Line 934  post_lb(POST_ARGS)
         const char              *stdlibname;          const char              *stdlibname;
         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);
   
Line 995  static void
Line 988  static void
 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 1069  post_nm(POST_ARGS)
Line 1062  post_nm(POST_ARGS)
 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 1177  post_an(POST_ARGS)
Line 1179  post_an(POST_ARGS)
         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 1661  post_rs(POST_ARGS)
Line 1663  post_rs(POST_ARGS)
   
         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 2072  post_ignpar(POST_ARGS)
Line 2074  post_ignpar(POST_ARGS)
 {  {
         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 2135  post_par(POST_ARGS)
Line 2137  post_par(POST_ARGS)
         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.266  
changed lines
  Added in v.1.267

CVSweb