[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.160 and 1.172

version 1.160, 2011/03/17 09:22:39 version 1.172, 2011/07/26 14:09:01
Line 33 
Line 33 
 #include <string.h>  #include <string.h>
 #include <time.h>  #include <time.h>
   
   #include "mdoc.h"
 #include "mandoc.h"  #include "mandoc.h"
 #include "libmdoc.h"  #include "libmdoc.h"
 #include "libmandoc.h"  #include "libmandoc.h"
Line 74  static void  check_args(struct mdoc *, struct mdoc_nod
Line 75  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  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 153  static v_post  posts_notext[] = { ewarn_eq0, NULL };
Line 155  static v_post  posts_notext[] = { ewarn_eq0, NULL };
 static  v_post   posts_ns[] = { post_ns, NULL };  static  v_post   posts_ns[] = { post_ns, NULL };
 static  v_post   posts_os[] = { post_os, post_prol, NULL };  static  v_post   posts_os[] = { post_os, post_prol, NULL };
 static  v_post   posts_rs[] = { post_rs, NULL };  static  v_post   posts_rs[] = { post_rs, NULL };
 static  v_post   posts_sh[] = { post_ignpar, hwarn_ge1, bwarn_ge1, post_sh, NULL };  static  v_post   posts_sh[] = { post_ignpar, hwarn_ge1, post_sh, NULL };
 static  v_post   posts_sp[] = { ewarn_le1, NULL };  static  v_post   posts_sp[] = { ewarn_le1, NULL };
 static  v_post   posts_ss[] = { post_ignpar, hwarn_ge1, bwarn_ge1, NULL };  static  v_post   posts_ss[] = { post_ignpar, hwarn_ge1, NULL };
 static  v_post   posts_st[] = { post_st, NULL };  static  v_post   posts_st[] = { post_st, NULL };
 static  v_post   posts_std[] = { post_std, NULL };  static  v_post   posts_std[] = { post_std, NULL };
 static  v_post   posts_text[] = { ewarn_ge1, NULL };  static  v_post   posts_text[] = { ewarn_ge1, NULL };
Line 178  static v_pre  pres_sh[] = { pre_sh, NULL };
Line 180  static v_pre  pres_sh[] = { pre_sh, NULL };
 static  v_pre    pres_ss[] = { pre_ss, NULL };  static  v_pre    pres_ss[] = { pre_ss, NULL };
 static  v_pre    pres_std[] = { pre_std, NULL };  static  v_pre    pres_std[] = { pre_std, NULL };
   
 const   struct valids mdoc_valids[MDOC_MAX] = {  static  const struct valids mdoc_valids[MDOC_MAX] = {
         { NULL, NULL },                         /* Ap */          { NULL, NULL },                         /* Ap */
         { pres_dd, posts_dd },                  /* Dd */          { pres_dd, posts_dd },                  /* Dd */
         { pres_dt, posts_dt },                  /* Dt */          { pres_dt, posts_dt },                  /* Dt */
Line 445  check_count(struct mdoc *m, enum mdoc_type type, 
Line 447  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;
           mandoc_vmsg(t, m->parse, 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 543  check_argv(struct mdoc *m, struct mdoc_node *n, struct
Line 545  check_argv(struct mdoc *m, struct mdoc_node *n, struct
 static void  static void
 check_text(struct mdoc *m, int ln, int pos, char *p)  check_text(struct mdoc *m, int ln, int pos, char *p)
 {  {
         int              c;          char            *cp;
         size_t           sz;  
   
         for ( ; *p; p++, pos++) {          cp = p;
                 sz = strcspn(p, "\t\\");          for (cp = p; NULL != (p = strchr(p, '\t')); p++) {
                 p += (int)sz;                  if (MDOC_LITERAL & m->flags)
   
                 if ('\0' == *p)  
                         break;  
   
                 pos += (int)sz;  
   
                 if ('\t' == *p) {  
                         if ( ! (MDOC_LITERAL & m->flags))  
                                 mdoc_pmsg(m, ln, pos, MANDOCERR_BADTAB);  
                         continue;                          continue;
                 }                  mdoc_pmsg(m, ln, (int)(p - cp), MANDOCERR_BADTAB);
   
                 if (0 == (c = mandoc_special(p))) {  
                         mdoc_pmsg(m, ln, pos, MANDOCERR_BADESCAPE);  
                         continue;  
                 }  
   
                 p += c - 1;  
                 pos += c - 1;  
         }          }
 }  }
   
Line 580  check_parent(PRE_ARGS, enum mdoct tok, enum mdoc_type 
Line 564  check_parent(PRE_ARGS, enum mdoct tok, enum mdoc_type 
                         (t == n->parent->type))                          (t == n->parent->type))
                 return(1);                  return(1);
   
         mdoc_vmsg(mdoc, MANDOCERR_SYNTCHILD,          mandoc_vmsg(MANDOCERR_SYNTCHILD, mdoc->parse, n->line,
                                 n->line, n->pos, "want parent %s",                          n->pos, "want parent %s", MDOC_ROOT == t ?
                                 MDOC_ROOT == t ? "<root>" :                          "<root>" : mdoc_macronames[tok]);
                                         mdoc_macronames[tok]);  
         return(0);          return(0);
 }  }
   
Line 890  pre_sh(PRE_ARGS)
Line 873  pre_sh(PRE_ARGS)
         if (MDOC_BLOCK != n->type)          if (MDOC_BLOCK != n->type)
                 return(1);                  return(1);
   
         mdoc->regs->regs[(int)REG_nS].set = 0;          roff_regunset(mdoc->roff, REG_nS);
         return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT));          return(check_parent(mdoc, n, MDOC_MAX, MDOC_ROOT));
 }  }
   
Line 1265  post_an(POST_ARGS)
Line 1248  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 1331  post_it(POST_ARGS)
Line 1314  post_it(POST_ARGS)
                 else                  else
                         er = MANDOCERR_SYNTARGCOUNT;                          er = MANDOCERR_SYNTARGCOUNT;
   
                 rc = mdoc_vmsg(mdoc, er,                  mandoc_vmsg(er, mdoc->parse, mdoc->last->line,
                                 mdoc->last->line, mdoc->last->pos,                                  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 1395  post_bl_block_width(POST_ARGS)
Line 1378  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 1452  post_bl_block_tag(POST_ARGS)
Line 1435  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 1526  post_bl_head(POST_ARGS) 
Line 1509  post_bl_head(POST_ARGS) 
         assert(0 == np->args->argv[j].sz);          assert(0 == np->args->argv[j].sz);
   
         /*          /*
          * Accomodate for new-style groff column syntax.  Shuffle the           * Accommodate for new-style groff column syntax.  Shuffle the
          * child nodes, all of which must be TEXT, as arguments for the           * child nodes, all of which must be TEXT, as arguments for the
          * column field.  Then, delete the head children.           * column field.  Then, delete the head children.
          */           */
Line 2001  post_dd(POST_ARGS)
Line 1984  post_dd(POST_ARGS)
   
         n = mdoc->last;          n = mdoc->last;
         if (NULL == n->child || '\0' == n->child->string[0]) {          if (NULL == n->child || '\0' == n->child->string[0]) {
                 mdoc->meta.date = mandoc_normdate(NULL,                  mdoc->meta.date = mandoc_normdate
                     mdoc->msg, mdoc->data, n->line, n->pos);                          (mdoc->parse, NULL, 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_normdate(buf,          mdoc->meta.date = mandoc_normdate
             mdoc->msg, mdoc->data, n->line, n->pos);                  (mdoc->parse, buf, n->line, n->pos);
   
         return(1);          return(1);
 }  }
Line 2037  post_dt(POST_ARGS)
Line 2020  post_dt(POST_ARGS)
   
         if (NULL != (nn = n->child))          if (NULL != (nn = n->child))
                 for (p = nn->string; *p; p++) {                  for (p = nn->string; *p; p++) {
                         if (toupper((u_char)*p) == *p)                          if (toupper((unsigned char)*p) == *p)
                                 continue;                                  continue;
   
                         /*                          /*
Line 2193  post_os(POST_ARGS)
Line 2176  post_os(POST_ARGS)
                         return(0);                          return(0);
                 }                  }
 #else /*!OSNAME */  #else /*!OSNAME */
                 if (uname(&utsname)) {                  if (-1 == uname(&utsname)) {
                         mdoc_nmsg(mdoc, n, MANDOCERR_UNAME);                          mdoc_nmsg(mdoc, n, MANDOCERR_UNAME);
                         mdoc->meta.os = mandoc_strdup("UNKNOWN");                          mdoc->meta.os = mandoc_strdup("UNKNOWN");
                         return(post_prol(mdoc));                          return(post_prol(mdoc));
Line 2292  a2sec(const char *p)
Line 2275  a2sec(const char *p)
         return(SEC_CUSTOM);          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.160  
changed lines
  Added in v.1.172

CVSweb