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

Diff for /mandoc/Attic/validate.c between version 1.44 and 1.46

version 1.44, 2009/01/20 13:44:05 version 1.46, 2009/01/21 11:35:26
Line 91  static int bwarn_ge1(struct mdoc *);
Line 91  static int bwarn_ge1(struct mdoc *);
 static  int     ewarn_ge1(struct mdoc *);  static  int     ewarn_ge1(struct mdoc *);
 static  int     ebool(struct mdoc *);  static  int     ebool(struct mdoc *);
 static  int     post_sh(struct mdoc *);  static  int     post_sh(struct mdoc *);
   static  int     post_sh_body(struct mdoc *);
   static  int     post_sh_head(struct mdoc *);
 static  int     post_bl(struct mdoc *);  static  int     post_bl(struct mdoc *);
 static  int     post_it(struct mdoc *);  static  int     post_it(struct mdoc *);
 static  int     post_ex(struct mdoc *);  static  int     post_ex(struct mdoc *);
Line 137  static v_post posts_at[] = { post_at, NULL };
Line 139  static v_post posts_at[] = { post_at, NULL };
 static  v_post  posts_xr[] = { eerr_ge1, eerr_le2, post_xr, NULL };  static  v_post  posts_xr[] = { eerr_ge1, eerr_le2, post_xr, NULL };
 static  v_post  posts_nm[] = { post_nm, NULL };  static  v_post  posts_nm[] = { post_nm, NULL };
 static  v_post  posts_bf[] = { herr_le1, post_bf, NULL };  static  v_post  posts_bf[] = { herr_le1, post_bf, NULL };
   static  v_post  posts_rs[] = { herr_eq0, bwarn_ge1, NULL };
   static  v_post  posts_fo[] = { bwarn_ge1, NULL };
   static  v_post  posts_bk[] = { herr_eq0, bwarn_ge1, NULL };
   
 /* Per-macro pre- and post-child-check routine collections. */  /* Per-macro pre- and post-child-check routine collections. */
   
Line 228  const struct valids mdoc_valids[MDOC_MAX] = {
Line 233  const struct valids mdoc_valids[MDOC_MAX] = {
         { NULL, NULL }, /* Qo */          { NULL, NULL }, /* Qo */
         { NULL, posts_wline }, /* Qq */          { NULL, posts_wline }, /* Qq */
         { NULL, NULL }, /* Re */          { NULL, NULL }, /* Re */
         { NULL, NULL }, /* Rs */          { NULL, posts_rs }, /* Rs */
         { NULL, NULL }, /* Sc */          { NULL, NULL }, /* Sc */
         { NULL, NULL }, /* So */          { NULL, NULL }, /* So */
         { NULL, posts_wline }, /* Sq */          { NULL, posts_wline }, /* Sq */
Line 239  const struct valids mdoc_valids[MDOC_MAX] = {
Line 244  const struct valids mdoc_valids[MDOC_MAX] = {
         { NULL, NULL }, /* Ux */          { NULL, NULL }, /* Ux */
         { NULL, NULL }, /* Xc */          { NULL, NULL }, /* Xc */
         { NULL, NULL }, /* Xo */          { NULL, NULL }, /* Xo */
         { NULL, NULL }, /* Fo */          { NULL, posts_fo }, /* Fo */
         { NULL, NULL }, /* Fc */          { NULL, NULL }, /* Fc */
         { NULL, NULL }, /* Oo */          { NULL, NULL }, /* Oo */
         { NULL, NULL }, /* Oc */          { NULL, NULL }, /* Oc */
         { NULL, NULL }, /* Bk */          { NULL, posts_bk }, /* Bk */
         { NULL, NULL }, /* Ek */          { NULL, NULL }, /* Ek */
         { NULL, posts_notext }, /* Bt */          { NULL, posts_notext }, /* Bt */
         { NULL, NULL }, /* Hf */          { NULL, NULL }, /* Hf */
Line 714  static int
Line 719  static int
 pre_prologue(struct mdoc *mdoc, struct mdoc_node *node)  pre_prologue(struct mdoc *mdoc, struct mdoc_node *node)
 {  {
   
         if (SEC_PROLOGUE != mdoc->sec_lastn)          if (SEC_PROLOGUE != mdoc->lastnamed)
                 return(mdoc_nerr(mdoc, node, "macro may only be invoked in the prologue"));                  return(mdoc_nerr(mdoc, node, "macro may only be invoked in the prologue"));
         assert(MDOC_ELEM == node->type);          assert(MDOC_ELEM == node->type);
   
Line 1057  static int
Line 1062  static int
 post_root(struct mdoc *mdoc)  post_root(struct mdoc *mdoc)
 {  {
   
         if (NULL == mdoc->last->child)          if (NULL == mdoc->first->child)
                 return(mdoc_err(mdoc, "document has no data"));                  return(mdoc_err(mdoc, "document has no data"));
         if (NULL == mdoc->meta.title)          if (SEC_PROLOGUE == mdoc->lastnamed)
                 return(mdoc_err(mdoc, "document has incomplete prologue"));                  return(mdoc_err(mdoc, "document has incomplete prologue"));
         if (NULL == mdoc->meta.os)          if (MDOC_BLOCK != mdoc->first->child->type)
                 return(mdoc_err(mdoc, "document has incomplete prologue"));                  return(mdoc_err(mdoc, "document expects `%s' macro after prologue", mdoc_macronames[MDOC_Sh]));
         if (0 == mdoc->meta.date)          if (MDOC_Sh != mdoc->first->child->tok)
                 return(mdoc_err(mdoc, "document has incomplete prologue"));                  return(mdoc_err(mdoc, "document expects `%s' macro after prologue", mdoc_macronames[MDOC_Sh]));
         return(1);          return(1);
 }  }
   
   
 /* Warn if conventional sections are out of order. */  
 static int  static int
 post_sh(struct mdoc *mdoc)  post_sh(struct mdoc *mdoc)
 {  {
   
           if (MDOC_HEAD == mdoc->last->type)
                   return(post_sh_head(mdoc));
           if (MDOC_BODY == mdoc->last->type)
                   return(post_sh_body(mdoc));
           return(1);
   }
   
   
   static int
   post_sh_body(struct mdoc *mdoc)
   {
           struct mdoc_node *n;
   
           assert(MDOC_Sh == mdoc->last->tok);
           if (SEC_NAME != mdoc->lastnamed)
                   return(1);
   
           if (NULL == (n = mdoc->last->child))
                   return(mdoc_err(mdoc, "section NAME must contain %s as the first body child", mdoc_macronames[MDOC_Nm]));
           if (MDOC_ELEM != n->type || MDOC_Nm != n->tok)
                   return(mdoc_err(mdoc, "section NAME must contain %s as the first body child", mdoc_macronames[MDOC_Nm]));
           if (NULL == (n = n->next))
                   return(mdoc_err(mdoc, "section NAME must contain %s as the second body child", mdoc_macronames[MDOC_Nd]));
           if (MDOC_ELEM != n->type || MDOC_Nd != n->tok)
                   return(mdoc_err(mdoc, "section NAME must contain %s as the second body child", mdoc_macronames[MDOC_Nd]));
           if (NULL == (n = n->next))
                   return(1);
   
           return(mdoc_warn(mdoc, WARN_SYNTAX, "section NAME usually limited to %s and %s body children",
                                   mdoc_macronames[MDOC_Nm], mdoc_macronames[MDOC_Nd]));
   }
   
   
   static int
   post_sh_head(struct mdoc *mdoc)
   {
         char              buf[64];          char              buf[64];
         enum mdoc_sec     sec;          enum mdoc_sec     sec;
   
         if (MDOC_HEAD != mdoc->last->type)  
                 return(1);  
         assert(MDOC_Sh == mdoc->last->tok);          assert(MDOC_Sh == mdoc->last->tok);
   
         if ( ! xstrlcats(buf, mdoc->last->child, 64))          if ( ! xstrlcats(buf, mdoc->last->child, 64))
                 return(mdoc_err(mdoc, "macro parameters too long"));                  return(mdoc_err(mdoc, "macro parameters too long"));
   
         if (SEC_CUSTOM == (sec = mdoc_atosec(buf)))          sec = mdoc_atosec(buf);
   
           if (SEC_BODY == mdoc->lastnamed && SEC_NAME != sec)
                   return(mdoc_err(mdoc, "section NAME must be first"));
           if (SEC_CUSTOM == sec)
                 return(1);                  return(1);
         if (sec > mdoc->sec_lastn)          if (sec == mdoc->lastnamed)
                 return(1);  
         if (sec == mdoc->sec_lastn)  
                 return(mdoc_warn(mdoc, WARN_SYNTAX, "section repeated"));                  return(mdoc_warn(mdoc, WARN_SYNTAX, "section repeated"));
         return(mdoc_warn(mdoc, WARN_SYNTAX, "section out of conventional order"));          if (sec < mdoc->lastnamed)
                   return(mdoc_warn(mdoc, WARN_SYNTAX, "section out of conventional order"));
   
           return(1);
 }  }
   
   

Legend:
Removed from v.1.44  
changed lines
  Added in v.1.46

CVSweb