[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.227 and 1.228

version 1.227, 2014/07/05 01:12:20 version 1.228, 2014/07/05 12:34:17
Line 696  pre_bl(PRE_ARGS)
Line 696  pre_bl(PRE_ARGS)
                 default:                  default:
                         continue;                          continue;
                 }                  }
                   if (LIST__NONE == lt)
                           continue;
   
                 /* Check: multiple list types. */                  /* Check: multiple list types. */
   
                 if (LIST__NONE != lt && n->norm->Bl.type != LIST__NONE)                  if (LIST__NONE != n->norm->Bl.type) {
                         mdoc_nmsg(mdoc, n, MANDOCERR_LISTREP);                          mandoc_msg(MANDOCERR_BL_REP,
                               mdoc->parse, n->line, n->pos,
                 /* Assign list type. */                              mdoc_argnames[argv->arg]);
                           continue;
                 if (LIST__NONE != lt && n->norm->Bl.type == LIST__NONE) {  
                         n->norm->Bl.type = lt;  
                         /* Set column information, too. */  
                         if (LIST_column == lt) {  
                                 n->norm->Bl.ncols =  
                                     n->args->argv[i].sz;  
                                 n->norm->Bl.cols = (void *)  
                                     n->args->argv[i].value;  
                         }  
                 }                  }
   
                 /* The list type should come first. */                  /* The list type should come first. */
   
                 if (n->norm->Bl.type == LIST__NONE)                  if (n->norm->Bl.width ||
                         if (n->norm->Bl.width ||                      n->norm->Bl.offs ||
                             n->norm->Bl.offs ||                      n->norm->Bl.comp)
                             n->norm->Bl.comp)                          mandoc_msg(MANDOCERR_BL_LATETYPE,
                                 mandoc_msg(MANDOCERR_BL_LATETYPE,                              mdoc->parse, n->line, n->pos,
                                     mdoc->parse, n->line, n->pos,                              mdoc_argnames[n->args->argv[0].arg]);
                                     mdoc_argnames[n->args->argv[0].arg]);  
                 continue;                  n->norm->Bl.type = lt;
                   if (LIST_column == lt) {
                           n->norm->Bl.ncols = argv->sz;
                           n->norm->Bl.cols = (void *)argv->value;
                   }
         }          }
   
         /* Allow lists to default to LIST_item. */          /* Allow lists to default to LIST_item. */
Line 744  pre_bl(PRE_ARGS)
Line 741  pre_bl(PRE_ARGS)
         switch (n->norm->Bl.type) {          switch (n->norm->Bl.type) {
         case LIST_tag:          case LIST_tag:
                 if (NULL == n->norm->Bl.width)                  if (NULL == n->norm->Bl.width)
                         mdoc_nmsg(mdoc, n, MANDOCERR_BL_WIDTH);                          mdoc_nmsg(mdoc, n, MANDOCERR_BL_NOWIDTH);
                 break;                  break;
         case LIST_column:          case LIST_column:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 846  pre_bd(PRE_ARGS)
Line 843  pre_bd(PRE_ARGS)
                         abort();                          abort();
                         /* NOTREACHED */                          /* NOTREACHED */
                 }                  }
                   if (DISP__NONE == dt)
                           continue;
   
                 /* Check whether a type has already been assigned. */                  if (DISP__NONE == n->norm->Bd.type)
   
                 if (DISP__NONE != dt && n->norm->Bd.type != DISP__NONE)  
                         mdoc_nmsg(mdoc, n, MANDOCERR_DISPREP);  
   
                 /* Make our type assignment. */  
   
                 if (DISP__NONE != dt && n->norm->Bd.type == DISP__NONE)  
                         n->norm->Bd.type = dt;                          n->norm->Bd.type = dt;
                   else
                           mandoc_msg(MANDOCERR_BD_REP,
                               mdoc->parse, n->line, n->pos,
                               mdoc_argnames[argv->arg]);
         }          }
   
         if (DISP__NONE == n->norm->Bd.type) {          if (DISP__NONE == n->norm->Bd.type) {
Line 1222  post_at(POST_ARGS)
Line 1218  post_at(POST_ARGS)
   
         assert(MDOC_TEXT == n->type);          assert(MDOC_TEXT == n->type);
         if (NULL == (std_att = mdoc_a2att(n->string))) {          if (NULL == (std_att = mdoc_a2att(n->string))) {
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADATT);                  mandoc_msg(MANDOCERR_AT_BAD, mdoc->parse,
                       n->line, n->pos, n->string);
                 mandoc_asprintf(&att, "AT&T UNIX %s", n->string);                  mandoc_asprintf(&att, "AT&T UNIX %s", n->string);
         } else          } else
                 att = mandoc_strdup(std_att);                  att = mandoc_strdup(std_att);
Line 1425  post_bl_block_width(POST_ARGS)
Line 1422  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 = macro2len(tok)))  {          else
                 mdoc_nmsg(mdoc, n, MANDOCERR_BADWIDTH);                  width = macro2len(tok);
                 return(1);  
         }  
   
         /* The value already exists: free and reallocate it. */          /* The value already exists: free and reallocate it. */
   
Line 1659  post_bl(POST_ARGS)
Line 1654  post_bl(POST_ARGS)
 static int  static int
 ebool(struct mdoc *mdoc)  ebool(struct mdoc *mdoc)
 {  {
           struct mdoc_node        *nch;
           enum mdoct               tok;
   
         if (NULL == mdoc->last->child) {          tok = mdoc->last->tok;
                 if (MDOC_Sm == mdoc->last->tok)          nch = mdoc->last->child;
   
           if (NULL == nch) {
                   if (MDOC_Sm == tok)
                         mdoc->flags ^= MDOC_SMOFF;                          mdoc->flags ^= MDOC_SMOFF;
                 return(1);                  return(1);
         }          }
   
         check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_LT, 2);          check_count(mdoc, MDOC_ELEM, CHECK_WARN, CHECK_LT, 2);
   
         assert(MDOC_TEXT == mdoc->last->child->type);          assert(MDOC_TEXT == nch->type);
   
         if (0 == strcmp(mdoc->last->child->string, "on")) {          if (0 == strcmp(nch->string, "on")) {
                 if (MDOC_Sm == mdoc->last->tok)                  if (MDOC_Sm == tok)
                         mdoc->flags &= ~MDOC_SMOFF;                          mdoc->flags &= ~MDOC_SMOFF;
                 return(1);                  return(1);
         }          }
         if (0 == strcmp(mdoc->last->child->string, "off")) {          if (0 == strcmp(nch->string, "off")) {
                 if (MDOC_Sm == mdoc->last->tok)                  if (MDOC_Sm == tok)
                         mdoc->flags |= MDOC_SMOFF;                          mdoc->flags |= MDOC_SMOFF;
                 return(1);                  return(1);
         }          }
   
         mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADBOOL);          mandoc_vmsg(MANDOCERR_SM_BAD,
         return(1);              mdoc->parse, nch->line, nch->pos,
               "%s %s", mdoc_macronames[tok], nch->string);
           return(mdoc_node_relink(mdoc, nch));
 }  }
   
 static int  static int
Line 1718  post_root(POST_ARGS)
Line 1720  post_root(POST_ARGS)
 static int  static int
 post_st(POST_ARGS)  post_st(POST_ARGS)
 {  {
         struct mdoc_node         *ch;          struct mdoc_node         *n, *nch;
         const char               *p;          const char               *p;
   
         if (NULL == (ch = mdoc->last->child)) {          n = mdoc->last;
           nch = n->child;
   
           if (NULL == nch) {
                 mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,                  mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
                     mdoc->last->line, mdoc->last->pos,                      n->line, n->pos, mdoc_macronames[n->tok]);
                     mdoc_macronames[mdoc->last->tok]);                  mdoc_node_delete(mdoc, n);
                 mdoc_node_delete(mdoc, mdoc->last);  
                 return(1);                  return(1);
         }          }
   
         assert(MDOC_TEXT == ch->type);          assert(MDOC_TEXT == nch->type);
   
         if (NULL == (p = mdoc_a2st(ch->string))) {          if (NULL == (p = mdoc_a2st(nch->string))) {
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_BADSTANDARD);                  mandoc_msg(MANDOCERR_ST_BAD, mdoc->parse,
                 mdoc_node_delete(mdoc, mdoc->last);                      nch->line, nch->pos, nch->string);
                   mdoc_node_delete(mdoc, n);
         } else {          } else {
                 free(ch->string);                  free(nch->string);
                 ch->string = mandoc_strdup(p);                  nch->string = mandoc_strdup(p);
         }          }
   
         return(1);          return(1);

Legend:
Removed from v.1.227  
changed lines
  Added in v.1.228

CVSweb