[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.211 and 1.217

version 1.211, 2014/04/20 19:40:13 version 1.217, 2014/07/01 22:37:15
Line 935  pre_dt(PRE_ARGS)
Line 935  pre_dt(PRE_ARGS)
 {  {
   
         if (NULL == mdoc->meta.date || mdoc->meta.os)          if (NULL == mdoc->meta.date || mdoc->meta.os)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO);                  mandoc_msg(MANDOCERR_PROLOG_ORDER, mdoc->parse,
                       n->line, n->pos, "Dt");
   
         if (mdoc->meta.title)          if (mdoc->meta.title)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGREP);                  mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
                       n->line, n->pos, "Dt");
   
         return(1);          return(1);
 }  }
Line 948  pre_os(PRE_ARGS)
Line 950  pre_os(PRE_ARGS)
 {  {
   
         if (NULL == mdoc->meta.title || NULL == mdoc->meta.date)          if (NULL == mdoc->meta.title || NULL == mdoc->meta.date)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO);                  mandoc_msg(MANDOCERR_PROLOG_ORDER, mdoc->parse,
                       n->line, n->pos, "Os");
   
         if (mdoc->meta.os)          if (mdoc->meta.os)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGREP);                  mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
                       n->line, n->pos, "Os");
   
         return(1);          return(1);
 }  }
Line 961  pre_dd(PRE_ARGS)
Line 965  pre_dd(PRE_ARGS)
 {  {
   
         if (mdoc->meta.title || mdoc->meta.os)          if (mdoc->meta.title || mdoc->meta.os)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGOOO);                  mandoc_msg(MANDOCERR_PROLOG_ORDER, mdoc->parse,
                       n->line, n->pos, "Dd");
   
         if (mdoc->meta.date)          if (mdoc->meta.date)
                 mdoc_nmsg(mdoc, n, MANDOCERR_PROLOGREP);                  mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
                       n->line, n->pos, "Dd");
   
         return(1);          return(1);
 }  }
Line 1044  post_bf(POST_ARGS)
Line 1050  post_bf(POST_ARGS)
 static int  static int
 post_lb(POST_ARGS)  post_lb(POST_ARGS)
 {  {
         const char      *p;          struct mdoc_node        *n;
         char            *buf;          const char              *stdlibname;
         size_t           sz;          char                    *libname;
   
         check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1);          check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_EQ, 1);
   
         assert(mdoc->last->child);          n = mdoc->last->child;
         assert(MDOC_TEXT == mdoc->last->child->type);  
   
         p = mdoc_a2lib(mdoc->last->child->string);          assert(n);
           assert(MDOC_TEXT == n->type);
   
         /* If lookup ok, replace with table value. */          if (NULL == (stdlibname = mdoc_a2lib(n->string)))
                   mandoc_asprintf(&libname,
                       "library \\(lq%s\\(rq", n->string);
           else
                   libname = mandoc_strdup(stdlibname);
   
         if (p) {          free(n->string);
                 free(mdoc->last->child->string);          n->string = libname;
                 mdoc->last->child->string = mandoc_strdup(p);  
                 return(1);  
         }  
   
         /* If not, use "library ``xxxx''. */  
   
         sz = strlen(mdoc->last->child->string) + 2 +  
              strlen("\\(lqlibrary\\(rq");  
         buf = mandoc_malloc(sz);  
         snprintf(buf, sz, "library \\(lq%s\\(rq",  
             mdoc->last->child->string);  
         free(mdoc->last->child->string);  
         mdoc->last->child->string = buf;  
         return(1);          return(1);
 }  }
   
Line 1192  post_defaults(POST_ARGS)
Line 1189  post_defaults(POST_ARGS)
 static int  static int
 post_at(POST_ARGS)  post_at(POST_ARGS)
 {  {
         const char       *p, *q;          struct mdoc_node        *n;
         char             *buf;          const char              *std_att;
         size_t            sz;          char                    *att;
   
         /*          /*
          * If we have a child, look it up in the standard keys.  If a           * If we have a child, look it up in the standard keys.  If a
Line 1202  post_at(POST_ARGS)
Line 1199  post_at(POST_ARGS)
          * prefix "AT&T UNIX " to the existing data.           * prefix "AT&T UNIX " to the existing data.
          */           */
   
         if (NULL == mdoc->last->child)          if (NULL == (n = mdoc->last->child))
                 return(1);                  return(1);
   
         assert(MDOC_TEXT == mdoc->last->child->type);          assert(MDOC_TEXT == n->type);
         p = mdoc_a2att(mdoc->last->child->string);          if (NULL == (std_att = mdoc_a2att(n->string))) {
   
         if (p) {  
                 free(mdoc->last->child->string);  
                 mdoc->last->child->string = mandoc_strdup(p);  
         } else {  
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADATT);                  mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADATT);
                 p = "AT&T UNIX ";                  mandoc_asprintf(&att, "AT&T UNIX %s", n->string);
                 q = mdoc->last->child->string;          } else
                 sz = strlen(p) + strlen(q) + 1;                  att = mandoc_strdup(std_att);
                 buf = mandoc_malloc(sz);  
                 strlcpy(buf, p, sz);  
                 strlcat(buf, q, sz);  
                 free(mdoc->last->child->string);  
                 mdoc->last->child->string = buf;  
         }  
   
           free(n->string);
           n->string = att;
         return(1);          return(1);
 }  }
   
Line 1478  post_bl_block_tag(POST_ARGS)
Line 1466  post_bl_block_tag(POST_ARGS)
         assert(n->args);          assert(n->args);
         i = (int)(n->args->argc)++;          i = (int)(n->args->argc)++;
   
         n->args->argv = mandoc_realloc(n->args->argv,          n->args->argv = mandoc_reallocarray(n->args->argv,
             n->args->argc * sizeof(struct mdoc_argv));              n->args->argc, sizeof(struct mdoc_argv));
   
         n->args->argv[i].arg = MDOC_Width;          n->args->argv[i].arg = MDOC_Width;
         n->args->argv[i].line = n->line;          n->args->argv[i].line = n->line;
Line 1539  post_bl_head(POST_ARGS)
Line 1527  post_bl_head(POST_ARGS)
          */           */
   
         np->args->argv[j].sz = (size_t)mdoc->last->nchild;          np->args->argv[j].sz = (size_t)mdoc->last->nchild;
         np->args->argv[j].value = mandoc_malloc(          np->args->argv[j].value = mandoc_reallocarray(NULL,
             (size_t)mdoc->last->nchild * sizeof(char *));              (size_t)mdoc->last->nchild, sizeof(char *));
   
         mdoc->last->norm->Bl.ncols = np->args->argv[j].sz;          mdoc->last->norm->Bl.ncols = np->args->argv[j].sz;
         mdoc->last->norm->Bl.cols = (void *)np->args->argv[j].value;          mdoc->last->norm->Bl.cols = (void *)np->args->argv[j].value;
Line 1663  ebool(struct mdoc *mdoc)
Line 1651  ebool(struct mdoc *mdoc)
 static int  static int
 post_root(POST_ARGS)  post_root(POST_ARGS)
 {  {
         int               erc;          int               ret;
         struct mdoc_node *n;          struct mdoc_node *n;
   
         erc = 0;          ret = 1;
   
         /* Check that we have a finished prologue. */          /* Check that we have a finished prologue. */
   
         if ( ! (MDOC_PBODY & mdoc->flags)) {          if ( ! (MDOC_PBODY & mdoc->flags)) {
                 erc++;                  ret = 0;
                 mdoc_nmsg(mdoc, mdoc->first, MANDOCERR_NODOCPROLOG);                  mdoc_nmsg(mdoc, mdoc->first, MANDOCERR_NODOCPROLOG);
         }          }
   
Line 1680  post_root(POST_ARGS)
Line 1668  post_root(POST_ARGS)
   
         /* Check that we begin with a proper `Sh'. */          /* Check that we begin with a proper `Sh'. */
   
         if (NULL == n->child) {          if (NULL == n->child)
                 erc++;                  mdoc_nmsg(mdoc, n, MANDOCERR_DOC_EMPTY);
                 mdoc_nmsg(mdoc, n, MANDOCERR_NODOCBODY);          else if (MDOC_Sh != n->child->tok)
         } else if (MDOC_BLOCK != n->child->type ||                  mandoc_msg(MANDOCERR_SEC_BEFORE, mdoc->parse,
             MDOC_Sh != n->child->tok) {                      n->child->line, n->child->pos,
                 erc++;                      mdoc_macronames[n->child->tok]);
                 /* Can this be lifted?  See rxdebug.1 for example. */  
                 mdoc_nmsg(mdoc, n, MANDOCERR_NODOCBODY);  
         }  
   
         return(erc ? 0 : 1);          return(ret);
 }  }
   
 static int  static int
Line 1911  post_sh_body(POST_ARGS)
Line 1896  post_sh_body(POST_ARGS)
          */           */
   
         if (NULL == (n = mdoc->last->child)) {          if (NULL == (n = mdoc->last->child)) {
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADNAMESEC);                  mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse,
                       mdoc->last->line, mdoc->last->pos, "empty");
                 return(1);                  return(1);
         }          }
   
Line 1920  post_sh_body(POST_ARGS)
Line 1906  post_sh_body(POST_ARGS)
                         continue;                          continue;
                 if (MDOC_TEXT == n->type)                  if (MDOC_TEXT == n->type)
                         continue;                          continue;
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADNAMESEC);                  mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse,
                       n->line, n->pos, mdoc_macronames[n->tok]);
         }          }
   
         assert(n);          assert(n);
         if (MDOC_BLOCK == n->type && MDOC_Nd == n->tok)          if (MDOC_BLOCK == n->type && MDOC_Nd == n->tok)
                 return(1);                  return(1);
   
         mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADNAMESEC);          mandoc_msg(MANDOCERR_NAMESEC_BAD, mdoc->parse,
               n->line, n->pos, mdoc_macronames[n->tok]);
         return(1);          return(1);
 }  }
   
Line 1935  static int
Line 1923  static int
 post_sh_head(POST_ARGS)  post_sh_head(POST_ARGS)
 {  {
         struct mdoc_node *n;          struct mdoc_node *n;
           const char      *goodsec;
         char            *secname;          char            *secname;
         enum mdoc_sec    sec;          enum mdoc_sec    sec;
   
Line 1953  post_sh_head(POST_ARGS)
Line 1942  post_sh_head(POST_ARGS)
         /* The NAME should be first. */          /* The NAME should be first. */
   
         if (SEC_NAME != sec && SEC_NONE == mdoc->lastnamed)          if (SEC_NAME != sec && SEC_NONE == mdoc->lastnamed)
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_NAMESECFIRST);                  mandoc_msg(MANDOCERR_NAMESEC_FIRST, mdoc->parse,
                       mdoc->last->line, mdoc->last->pos, secname);
   
         /* The SYNOPSIS gets special attention in other areas. */          /* The SYNOPSIS gets special attention in other areas. */
   
Line 1996  post_sh_head(POST_ARGS)
Line 1986  post_sh_head(POST_ARGS)
          */           */
   
         if (sec == mdoc->lastnamed)          if (sec == mdoc->lastnamed)
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_SECREP);                  mandoc_msg(MANDOCERR_SEC_REP, mdoc->parse,
                       mdoc->last->line, mdoc->last->pos, secname);
   
         if (sec < mdoc->lastnamed)          if (sec < mdoc->lastnamed)
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_SECOOO);                  mandoc_msg(MANDOCERR_SEC_ORDER, mdoc->parse,
                       mdoc->last->line, mdoc->last->pos, secname);
   
         /* Mark the last named section. */          /* Mark the last named section. */
   
Line 2009  post_sh_head(POST_ARGS)
Line 2001  post_sh_head(POST_ARGS)
   
         assert(mdoc->meta.msec);          assert(mdoc->meta.msec);
   
           goodsec = NULL;
         switch (sec) {          switch (sec) {
         case SEC_ERRORS:          case SEC_ERRORS:
                 if (*mdoc->meta.msec == '4')                  if (*mdoc->meta.msec == '4')
                         break;                          break;
                   goodsec = "2, 3, 4, 9";
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case SEC_RETURN_VALUES:          case SEC_RETURN_VALUES:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 2021  post_sh_head(POST_ARGS)
Line 2015  post_sh_head(POST_ARGS)
                         break;                          break;
                 if (*mdoc->meta.msec == '3')                  if (*mdoc->meta.msec == '3')
                         break;                          break;
                   if (NULL == goodsec)
                           goodsec = "2, 3, 9";
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case SEC_CONTEXT:          case SEC_CONTEXT:
                 if (*mdoc->meta.msec == '9')                  if (*mdoc->meta.msec == '9')
                         break;                          break;
                 mandoc_msg(MANDOCERR_SECMSEC, mdoc->parse,                  if (NULL == goodsec)
                     mdoc->last->line, mdoc->last->pos, secname);                          goodsec = "9";
                   mandoc_vmsg(MANDOCERR_SEC_MSEC, mdoc->parse,
                       mdoc->last->line, mdoc->last->pos,
                       "%s for %s only", secname, goodsec);
                 break;                  break;
         default:          default:
                 break;                  break;
Line 2191  post_dt(POST_ARGS)
Line 2190  post_dt(POST_ARGS)
   
         mdoc->meta.title = mdoc->meta.vol = mdoc->meta.arch = NULL;          mdoc->meta.title = mdoc->meta.vol = mdoc->meta.arch = NULL;
   
         /* First make all characters uppercase. */          /* First check that all characters are uppercase. */
   
         if (NULL != (nn = n->child))          if (NULL != (nn = n->child))
                 for (p = nn->string; *p; p++) {                  for (p = nn->string; *p; p++) {
                         if (toupper((unsigned char)*p) == *p)                          if (toupper((unsigned char)*p) == *p)
                                 continue;                                  continue;
                           mandoc_msg(MANDOCERR_TITLE_CASE,
                         /*                              mdoc->parse, nn->line,
                          * FIXME: don't be lazy: have this make all                              nn->pos + (p - nn->string),
                          * characters be uppercase and just warn once.                              nn->string);
                          */  
                         mdoc_nmsg(mdoc, nn, MANDOCERR_UPPERCASE);  
                         break;                          break;
                 }                  }
   
Line 2246  post_dt(POST_ARGS)
Line 2243  post_dt(POST_ARGS)
                 mdoc->meta.vol = mandoc_strdup(cp);                  mdoc->meta.vol = mandoc_strdup(cp);
                 mdoc->meta.msec = mandoc_strdup(nn->string);                  mdoc->meta.msec = mandoc_strdup(nn->string);
         } else {          } else {
                 mdoc_nmsg(mdoc, n, MANDOCERR_BADMSEC);                  mandoc_msg(MANDOCERR_MSEC_BAD, mdoc->parse,
                       nn->line, nn->pos, nn->string);
                 mdoc->meta.vol = mandoc_strdup(nn->string);                  mdoc->meta.vol = mandoc_strdup(nn->string);
                 mdoc->meta.msec = mandoc_strdup(nn->string);                  mdoc->meta.msec = mandoc_strdup(nn->string);
         }          }
Line 2268  post_dt(POST_ARGS)
Line 2266  post_dt(POST_ARGS)
         } else {          } else {
                 cp = mdoc_a2arch(nn->string);                  cp = mdoc_a2arch(nn->string);
                 if (NULL == cp) {                  if (NULL == cp) {
                         mdoc_nmsg(mdoc, nn, MANDOCERR_BADVOLARCH);                          mandoc_msg(MANDOCERR_ARCH_BAD, mdoc->parse,
                               nn->line, nn->pos, nn->string);
                         free(mdoc->meta.vol);                          free(mdoc->meta.vol);
                         mdoc->meta.vol = mandoc_strdup(nn->string);                          mdoc->meta.vol = mandoc_strdup(nn->string);
                 } else                  } else

Legend:
Removed from v.1.211  
changed lines
  Added in v.1.217

CVSweb