[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.274 and 1.275

version 1.274, 2015/02/06 03:38:45 version 1.275, 2015/02/06 07:13:14
Line 56  struct valids {
Line 56  struct valids {
         v_post   post;          v_post   post;
 };  };
   
 static  void     check_count(struct mdoc *, enum mdoc_type,  
                         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 67  static enum mdoc_sec a2sec(const char *);
Line 65  static enum mdoc_sec a2sec(const char *);
 static  size_t          macro2len(enum mdoct);  static  size_t          macro2len(enum mdoct);
 static  void     rewrite_macro2len(char **);  static  void     rewrite_macro2len(char **);
   
 static  void     ewarn_eq1(POST_ARGS);  
 static  void     ewarn_ge1(POST_ARGS);  
   
 static  void     post_an(POST_ARGS);  static  void     post_an(POST_ARGS);
 static  void     post_at(POST_ARGS);  static  void     post_at(POST_ARGS);
 static  void     post_bf(POST_ARGS);  static  void     post_bf(POST_ARGS);
Line 92  static void  post_fn(POST_ARGS);
Line 87  static void  post_fn(POST_ARGS);
 static  void     post_fname(POST_ARGS);  static  void     post_fname(POST_ARGS);
 static  void     post_fo(POST_ARGS);  static  void     post_fo(POST_ARGS);
 static  void     post_hyph(POST_ARGS);  static  void     post_hyph(POST_ARGS);
 static  void     post_hyphtext(POST_ARGS);  
 static  void     post_ignpar(POST_ARGS);  static  void     post_ignpar(POST_ARGS);
 static  void     post_it(POST_ARGS);  static  void     post_it(POST_ARGS);
 static  void     post_lb(POST_ARGS);  static  void     post_lb(POST_ARGS);
Line 167  static const struct valids mdoc_valids[MDOC_MAX] = {
Line 161  static const struct valids mdoc_valids[MDOC_MAX] = {
         { NULL, NULL },                         /* Va */          { NULL, NULL },                         /* Va */
         { NULL, post_vt },                      /* Vt */          { NULL, post_vt },                      /* Vt */
         { NULL, NULL },                         /* Xr */          { NULL, NULL },                         /* Xr */
         { NULL, ewarn_ge1 },                    /* %A */          { NULL, NULL },                         /* %A */
         { NULL, post_hyphtext },                /* %B */ /* FIXME: can be used outside Rs/Re. */          { NULL, post_hyph },                    /* %B */ /* FIXME: can be used outside Rs/Re. */
         { NULL, ewarn_ge1 },                    /* %D */          { NULL, NULL },                         /* %D */
         { NULL, ewarn_ge1 },                    /* %I */          { NULL, NULL },                         /* %I */
         { NULL, ewarn_ge1 },                    /* %J */          { NULL, NULL },                         /* %J */
         { NULL, post_hyphtext },                /* %N */          { NULL, post_hyph },                    /* %N */
         { NULL, post_hyphtext },                /* %O */          { NULL, post_hyph },                    /* %O */
         { NULL, ewarn_ge1 },                    /* %P */          { NULL, NULL },                         /* %P */
         { NULL, post_hyphtext },                /* %R */          { NULL, post_hyph },                    /* %R */
         { NULL, post_hyphtext },                /* %T */ /* FIXME: can be used outside Rs/Re. */          { NULL, post_hyph },                    /* %T */ /* FIXME: can be used outside Rs/Re. */
         { NULL, ewarn_ge1 },                    /* %V */          { NULL, NULL },                         /* %V */
         { NULL, NULL },                         /* Ac */          { NULL, NULL },                         /* Ac */
         { NULL, NULL },                         /* Ao */          { NULL, NULL },                         /* Ao */
         { NULL, NULL },                         /* Aq */          { NULL, NULL },                         /* Aq */
Line 239  static const struct valids mdoc_valids[MDOC_MAX] = {
Line 233  static const struct valids mdoc_valids[MDOC_MAX] = {
         { NULL, NULL },                         /* Brq */          { NULL, NULL },                         /* Brq */
         { NULL, NULL },                         /* Bro */          { NULL, NULL },                         /* Bro */
         { NULL, NULL },                         /* Brc */          { NULL, NULL },                         /* Brc */
         { NULL, ewarn_ge1 },                    /* %C */          { NULL, NULL },                         /* %C */
         { pre_obsolete, post_es },              /* Es */          { pre_obsolete, post_es },              /* Es */
         { pre_obsolete, post_en },              /* En */          { pre_obsolete, post_en },              /* En */
         { NULL, NULL },                         /* Dx */          { NULL, NULL },                         /* Dx */
         { NULL, ewarn_ge1 },                    /* %Q */          { NULL, NULL },                         /* %Q */
         { NULL, post_par },                     /* br */          { NULL, post_par },                     /* br */
         { NULL, post_par },                     /* sp */          { NULL, post_par },                     /* sp */
         { NULL, ewarn_eq1 },                    /* %U */          { NULL, NULL },                         /* %U */
         { NULL, NULL },                         /* Ta */          { NULL, NULL },                         /* Ta */
         { NULL, NULL },                         /* ll */          { NULL, NULL },                         /* ll */
 };  };
Line 366  mdoc_valid_post(struct mdoc *mdoc)
Line 360  mdoc_valid_post(struct mdoc *mdoc)
 }  }
   
 static void  static void
 check_count(struct mdoc *mdoc, enum mdoc_type type,  
         enum check_ineq ineq, int val)  
 {  
         const char      *p;  
   
         if (mdoc->last->type != type)  
                 return;  
   
         switch (ineq) {  
         case CHECK_LT:  
                 p = "less than ";  
                 if (mdoc->last->nchild < val)  
                         return;  
                 break;  
         case CHECK_GT:  
                 p = "more than ";  
                 if (mdoc->last->nchild > val)  
                         return;  
                 break;  
         case CHECK_EQ:  
                 p = "";  
                 if (val == mdoc->last->nchild)  
                         return;  
                 break;  
         default:  
                 abort();  
                 /* NOTREACHED */  
         }  
   
         mandoc_vmsg(MANDOCERR_ARGCWARN, mdoc->parse, mdoc->last->line,  
             mdoc->last->pos, "want %s%d children (have %d)",  
             p, val, mdoc->last->nchild);  
 }  
   
 static void  
 ewarn_eq1(POST_ARGS)  
 {  
         check_count(mdoc, MDOC_ELEM, CHECK_EQ, 1);  
 }  
   
 static void  
 ewarn_ge1(POST_ARGS)  
 {  
         check_count(mdoc, MDOC_ELEM, CHECK_GT, 0);  
 }  
   
 static void  
 check_args(struct mdoc *mdoc, struct mdoc_node *n)  check_args(struct mdoc *mdoc, struct mdoc_node *n)
 {  {
         int              i;          int              i;
Line 920  post_lb(POST_ARGS)
Line 867  post_lb(POST_ARGS)
         const char              *stdlibname;          const char              *stdlibname;
         char                    *libname;          char                    *libname;
   
         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 1089  post_d1(POST_ARGS)
Line 1035  post_d1(POST_ARGS)
                 return;                  return;
   
         if (n->child == NULL)          if (n->child == NULL)
                 mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,                  mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
                     n->line, n->pos, "D1");                      n->line, n->pos, "D1");
   
         post_hyph(mdoc);          post_hyph(mdoc);
Line 1106  post_literal(POST_ARGS)
Line 1052  post_literal(POST_ARGS)
                 return;                  return;
   
         if (n->child == NULL)          if (n->child == NULL)
                 mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,                  mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
                     n->line, n->pos, mdoc_macronames[n->tok]);                      n->line, n->pos, mdoc_macronames[n->tok]);
   
         if (n->tok == MDOC_Bd &&          if (n->tok == MDOC_Bd &&
Line 1513  post_bl(POST_ARGS)
Line 1459  post_bl(POST_ARGS)
   
         nchild = nbody->child;          nchild = nbody->child;
         if (nchild == NULL) {          if (nchild == NULL) {
                 mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,                  mandoc_msg(MANDOCERR_BLK_EMPTY, mdoc->parse,
                     nbody->line, nbody->pos, "Bl");                      nbody->line, nbody->pos, "Bl");
                 return;                  return;
         }          }
Line 1581  post_bk(POST_ARGS)
Line 1527  post_bk(POST_ARGS)
         n = mdoc->last;          n = mdoc->last;
   
         if (n->type == MDOC_BLOCK && n->body->child == NULL) {          if (n->type == MDOC_BLOCK && n->body->child == NULL) {
                 mandoc_msg(MANDOCERR_MACRO_EMPTY,                  mandoc_msg(MANDOCERR_BLK_EMPTY,
                     mdoc->parse, n->line, n->pos, "Bk");                      mdoc->parse, n->line, n->pos, "Bk");
                 mdoc_node_delete(mdoc, n);                  mdoc_node_delete(mdoc, n);
         }          }
Line 1790  post_hyph(POST_ARGS)
Line 1736  post_hyph(POST_ARGS)
                             isalpha((unsigned char)cp[1]))                              isalpha((unsigned char)cp[1]))
                                 *cp = ASCII_HYPH;                                  *cp = ASCII_HYPH;
         }          }
 }  
   
 static void  
 post_hyphtext(POST_ARGS)  
 {  
   
         ewarn_ge1(mdoc);  
         post_hyph(mdoc);  
 }  }
   
 static void  static void

Legend:
Removed from v.1.274  
changed lines
  Added in v.1.275

CVSweb