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

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

version 1.45, 2009/01/20 20:56:21 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 717  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 1060  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.45  
changed lines
  Added in v.1.46

CVSweb