[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.155 and 1.162

version 1.155, 2011/02/02 21:40:45 version 1.162, 2011/03/17 11:30:23
Line 74  static void  check_args(struct mdoc *, struct mdoc_nod
Line 74  static void  check_args(struct mdoc *, struct mdoc_nod
   
 static  int      concat(struct mdoc *, char *,  static  int      concat(struct mdoc *, char *,
                         const struct mdoc_node *, size_t);                          const struct mdoc_node *, size_t);
   static  enum mdoc_sec   a2sec(const char *);
   static  size_t          macro2len(enum mdoct);
   
 static  int      ebool(POST_ARGS);  static  int      ebool(POST_ARGS);
 static  int      berr_ge1(POST_ARGS);  static  int      berr_ge1(POST_ARGS);
Line 140  static v_post  posts_bx[] = { post_bx, NULL };
Line 142  static v_post  posts_bx[] = { post_bx, NULL };
 static  v_post   posts_bool[] = { ebool, NULL };  static  v_post   posts_bool[] = { ebool, NULL };
 static  v_post   posts_eoln[] = { post_eoln, NULL };  static  v_post   posts_eoln[] = { post_eoln, NULL };
 static  v_post   posts_defaults[] = { post_defaults, NULL };  static  v_post   posts_defaults[] = { post_defaults, NULL };
 static  v_post   posts_dd[] = { ewarn_ge1, post_dd, post_prol, NULL };  static  v_post   posts_dd[] = { post_dd, post_prol, NULL };
 static  v_post   posts_dl[] = { post_literal, bwarn_ge1, NULL };  static  v_post   posts_dl[] = { post_literal, bwarn_ge1, NULL };
 static  v_post   posts_dt[] = { post_dt, post_prol, NULL };  static  v_post   posts_dt[] = { post_dt, post_prol, NULL };
 static  v_post   posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL };  static  v_post   posts_fo[] = { hwarn_eq1, bwarn_ge1, NULL };
Line 221  const struct valids mdoc_valids[MDOC_MAX] = {
Line 223  const struct valids mdoc_valids[MDOC_MAX] = {
         { NULL, posts_text },                   /* Xr */          { NULL, posts_text },                   /* Xr */
         { NULL, posts_text },                   /* %A */          { NULL, posts_text },                   /* %A */
         { NULL, posts_text },                   /* %B */ /* FIXME: can be used outside Rs/Re. */          { NULL, posts_text },                   /* %B */ /* FIXME: can be used outside Rs/Re. */
         { NULL, posts_text },                   /* %D */ /* FIXME: check date with mandoc_a2time(). */          { NULL, posts_text },                   /* %D */
         { NULL, posts_text },                   /* %I */          { NULL, posts_text },                   /* %I */
         { NULL, posts_text },                   /* %J */          { NULL, posts_text },                   /* %J */
         { NULL, posts_text },                   /* %N */          { NULL, posts_text },                   /* %N */
Line 321  static const enum mdoct rsord[RSORD_MAX] = {
Line 323  static const enum mdoct rsord[RSORD_MAX] = {
         MDOC__U          MDOC__U
 };  };
   
   static  const char * const secnames[SEC__MAX] = {
           NULL,
           "NAME",
           "LIBRARY",
           "SYNOPSIS",
           "DESCRIPTION",
           "IMPLEMENTATION NOTES",
           "RETURN VALUES",
           "ENVIRONMENT",
           "FILES",
           "EXIT STATUS",
           "EXAMPLES",
           "DIAGNOSTICS",
           "COMPATIBILITY",
           "ERRORS",
           "SEE ALSO",
           "STANDARDS",
           "HISTORY",
           "AUTHORS",
           "CAVEATS",
           "BUGS",
           "SECURITY CONSIDERATIONS",
           NULL
   };
   
 int  int
 mdoc_valid_pre(struct mdoc *mdoc, struct mdoc_node *n)  mdoc_valid_pre(struct mdoc *mdoc, struct mdoc_node *n)
Line 338  mdoc_valid_pre(struct mdoc *mdoc, struct mdoc_node *n)
Line 364  mdoc_valid_pre(struct mdoc *mdoc, struct mdoc_node *n)
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_TBL):          case (MDOC_TBL):
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
           case (MDOC_EQN):
                   /* FALLTHROUGH */
         case (MDOC_ROOT):          case (MDOC_ROOT):
                 return(1);                  return(1);
         default:          default:
Line 367  mdoc_valid_post(struct mdoc *mdoc)
Line 395  mdoc_valid_post(struct mdoc *mdoc)
         switch (mdoc->last->type) {          switch (mdoc->last->type) {
         case (MDOC_TEXT):          case (MDOC_TEXT):
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
           case (MDOC_EQN):
                   /* FALLTHROUGH */
         case (MDOC_TBL):          case (MDOC_TBL):
                 return(1);                  return(1);
         case (MDOC_ROOT):          case (MDOC_ROOT):
Line 416  check_count(struct mdoc *m, enum mdoc_type type, 
Line 446  check_count(struct mdoc *m, enum mdoc_type type, 
         }          }
   
         t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT;          t = lvl == CHECK_WARN ? MANDOCERR_ARGCWARN : MANDOCERR_ARGCOUNT;
           mdoc_vmsg(m, t, m->last->line, m->last->pos,
         return(mdoc_vmsg(m, t, m->last->line, m->last->pos,  
                         "want %s%d children (have %d)",                          "want %s%d children (have %d)",
                         p, val, m->last->nchild));                          p, val, m->last->nchild);
           return(1);
 }  }
   
 static int  static int
Line 915  static int
Line 945  static int
 pre_dt(PRE_ARGS)  pre_dt(PRE_ARGS)
 {  {
   
         if (0 == mdoc->meta.date || mdoc->meta.os)          if (NULL == mdoc->meta.date || mdoc->meta.os)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO);                  mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO);
   
         if (mdoc->meta.title)          if (mdoc->meta.title)
Line 928  static int
Line 958  static int
 pre_os(PRE_ARGS)  pre_os(PRE_ARGS)
 {  {
   
         if (NULL == mdoc->meta.title || 0 == mdoc->meta.date)          if (NULL == mdoc->meta.title || NULL == mdoc->meta.date)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO);                  mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO);
   
         if (mdoc->meta.os)          if (mdoc->meta.os)
Line 1236  post_an(POST_ARGS)
Line 1266  post_an(POST_ARGS)
 static int  static int
 post_it(POST_ARGS)  post_it(POST_ARGS)
 {  {
         int               i, cols, rc;          int               i, cols;
         enum mdoc_list    lt;          enum mdoc_list    lt;
         struct mdoc_node *n, *c;          struct mdoc_node *n, *c;
         enum mandocerr    er;          enum mandocerr    er;
Line 1302  post_it(POST_ARGS)
Line 1332  post_it(POST_ARGS)
                 else                  else
                         er = MANDOCERR_SYNTARGCOUNT;                          er = MANDOCERR_SYNTARGCOUNT;
   
                 rc = mdoc_vmsg(mdoc, er,                  mdoc_vmsg(mdoc, er, mdoc->last->line, mdoc->last->pos,
                                 mdoc->last->line, mdoc->last->pos,  
                                 "columns == %d (have %d)", cols, i);                                  "columns == %d (have %d)", cols, i);
                 return(rc);                  return(MANDOCERR_ARGCOUNT == er);
         default:          default:
                 break;                  break;
         }          }
Line 1366  post_bl_block_width(POST_ARGS)
Line 1395  post_bl_block_width(POST_ARGS)
                 width = 6;                  width = 6;
         else if (MDOC_MAX == (tok = mdoc_hash_find(n->norm->Bl.width)))          else if (MDOC_MAX == (tok = mdoc_hash_find(n->norm->Bl.width)))
                 return(1);                  return(1);
         else if (0 == (width = mdoc_macro2len(tok)))  {          else if (0 == (width = macro2len(tok)))  {
                 mdoc_nmsg(mdoc, n, MANDOCERR_BADWIDTH);                  mdoc_nmsg(mdoc, n, MANDOCERR_BADWIDTH);
                 return(1);                  return(1);
         }          }
Line 1423  post_bl_block_tag(POST_ARGS)
Line 1452  post_bl_block_tag(POST_ARGS)
                         break;                          break;
                 }                  }
   
                 if (0 != (ssz = mdoc_macro2len(nn->tok)))                  if (0 != (ssz = macro2len(nn->tok)))
                         sz = ssz;                          sz = ssz;
   
                 break;                  break;
Line 1817  post_sh_head(POST_ARGS)
Line 1846  post_sh_head(POST_ARGS)
         if ( ! concat(mdoc, buf, mdoc->last->child, BUFSIZ))          if ( ! concat(mdoc, buf, mdoc->last->child, BUFSIZ))
                 return(0);                  return(0);
   
         sec = mdoc_str2sec(buf);          sec = a2sec(buf);
   
         /* The NAME should be first. */          /* The NAME should be first. */
   
Line 1967  post_dd(POST_ARGS)
Line 1996  post_dd(POST_ARGS)
         char              buf[DATESIZE];          char              buf[DATESIZE];
         struct mdoc_node *n;          struct mdoc_node *n;
   
         n = mdoc->last;          if (mdoc->meta.date)
                   free(mdoc->meta.date);
   
         if (NULL == n->child) {          n = mdoc->last;
                 mdoc->meta.date = time(NULL);          if (NULL == n->child || '\0' == n->child->string[0]) {
                   mdoc->meta.date = mandoc_normdate(NULL,
                       mdoc->msg, mdoc->data, n->line, n->pos);
                 return(1);                  return(1);
         }          }
   
         if ( ! concat(mdoc, buf, n->child, DATESIZE))          if ( ! concat(mdoc, buf, n->child, DATESIZE))
                 return(0);                  return(0);
   
         mdoc->meta.date = mandoc_a2time          mdoc->meta.date = mandoc_normdate(buf,
                 (MTIME_MDOCDATE | MTIME_CANONICAL, buf);              mdoc->msg, mdoc->data, n->line, n->pos);
   
         if (0 == mdoc->meta.date) {  
                 mdoc_nmsg(mdoc, n, MANDOCERR_BADDATE);  
                 mdoc->meta.date = time(NULL);  
         }  
   
         return(1);          return(1);
 }  }
   
Line 2125  post_bx(POST_ARGS)
Line 2152  post_bx(POST_ARGS)
   
         n = mdoc->last->child;          n = mdoc->last->child;
         if (n && NULL != (n = n->next))          if (n && NULL != (n = n->next))
                 *n->string = toupper((unsigned char)*n->string);                  *n->string = (char)toupper
                           ((unsigned char)*n->string);
   
         return(1);          return(1);
 }  }
Line 2252  concat(struct mdoc *m, char *p, const struct mdoc_node
Line 2280  concat(struct mdoc *m, char *p, const struct mdoc_node
         return(1);          return(1);
 }  }
   
   static enum mdoc_sec
   a2sec(const char *p)
   {
           int              i;
   
           for (i = 0; i < (int)SEC__MAX; i++)
                   if (secnames[i] && 0 == strcmp(p, secnames[i]))
                           return((enum mdoc_sec)i);
   
           return(SEC_CUSTOM);
   }
   
   static size_t
   macro2len(enum mdoct macro)
   {
   
           switch (macro) {
           case(MDOC_Ad):
                   return(12);
           case(MDOC_Ao):
                   return(12);
           case(MDOC_An):
                   return(12);
           case(MDOC_Aq):
                   return(12);
           case(MDOC_Ar):
                   return(12);
           case(MDOC_Bo):
                   return(12);
           case(MDOC_Bq):
                   return(12);
           case(MDOC_Cd):
                   return(12);
           case(MDOC_Cm):
                   return(10);
           case(MDOC_Do):
                   return(10);
           case(MDOC_Dq):
                   return(12);
           case(MDOC_Dv):
                   return(12);
           case(MDOC_Eo):
                   return(12);
           case(MDOC_Em):
                   return(10);
           case(MDOC_Er):
                   return(17);
           case(MDOC_Ev):
                   return(15);
           case(MDOC_Fa):
                   return(12);
           case(MDOC_Fl):
                   return(10);
           case(MDOC_Fo):
                   return(16);
           case(MDOC_Fn):
                   return(16);
           case(MDOC_Ic):
                   return(10);
           case(MDOC_Li):
                   return(16);
           case(MDOC_Ms):
                   return(6);
           case(MDOC_Nm):
                   return(10);
           case(MDOC_No):
                   return(12);
           case(MDOC_Oo):
                   return(10);
           case(MDOC_Op):
                   return(14);
           case(MDOC_Pa):
                   return(32);
           case(MDOC_Pf):
                   return(12);
           case(MDOC_Po):
                   return(12);
           case(MDOC_Pq):
                   return(12);
           case(MDOC_Ql):
                   return(16);
           case(MDOC_Qo):
                   return(12);
           case(MDOC_So):
                   return(12);
           case(MDOC_Sq):
                   return(12);
           case(MDOC_Sy):
                   return(6);
           case(MDOC_Sx):
                   return(16);
           case(MDOC_Tn):
                   return(10);
           case(MDOC_Va):
                   return(12);
           case(MDOC_Vt):
                   return(12);
           case(MDOC_Xr):
                   return(10);
           default:
                   break;
           };
           return(0);
   }

Legend:
Removed from v.1.155  
changed lines
  Added in v.1.162

CVSweb