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

Diff for /mandoc/man_macro.c between version 1.82 and 1.83

version 1.82, 2014/04/20 16:46:04 version 1.83, 2014/07/07 19:18:15
Line 97  const struct man_macro __man_macros[MAN_MAX] = {
Line 97  const struct man_macro __man_macros[MAN_MAX] = {
 const   struct man_macro * const man_macros = __man_macros;  const   struct man_macro * const man_macros = __man_macros;
   
   
 /*  
  * Warn when "n" is an explicit non-roff macro.  
  */  
 static void  
 rew_warn(struct man *man, struct man_node *n, enum mandocerr er)  
 {  
   
         if (er == MANDOCERR_MAX || MAN_BLOCK != n->type)  
                 return;  
         if (MAN_VALID & n->flags)  
                 return;  
         if ( ! (MAN_EXPLICIT & man_macros[n->tok].flags))  
                 return;  
   
         assert(er < MANDOCERR_FATAL);  
         man_nmsg(man, n, er);  
 }  
   
 /*  
  * Rewind scope.  If a code "er" != MANDOCERR_MAX has been provided, it  
  * will be used if an explicit block scope is being closed out.  
  */  
 int  int
 man_unscope(struct man *man, const struct man_node *to,  man_unscope(struct man *man, const struct man_node *to)
                 enum mandocerr er)  
 {  {
         struct man_node *n;          struct man_node *n;
   
         assert(to);  
   
         man->next = MAN_NEXT_SIBLING;          man->next = MAN_NEXT_SIBLING;
           to = to->parent;
         while (man->last != to) {          n = man->last;
           while (n != to) {
                   if (NULL == to &&
                       MAN_BLOCK == n->type &&
                       0 == (MAN_VALID & n->flags) &&
                       MAN_EXPLICIT & man_macros[n->tok].flags)
                           mandoc_msg(MANDOCERR_SCOPEEXIT,
                               man->parse, n->line, n->pos,
                               man_macronames[n->tok]);
                 /*                  /*
                  * Save the parent here, because we may delete the                   * We might delete the man->last node
                  * man->last node in the post-validation phase and reset                   * in the post-validation phase.
                  * it to man->last->parent, causing a step in the closing                   * Save a pointer to the parent such that
                  * out to be lost.                   * we know where to continue the iteration.
                  */                   */
                 n = man->last->parent;                  man->last = n;
                 rew_warn(man, man->last, er);                  n = n->parent;
                 if ( ! man_valid_post(man))                  if ( ! man_valid_post(man))
                         return(0);                          return(0);
                 man->last = n;  
                 assert(man->last);  
         }          }
   
         rew_warn(man, man->last, er);  
         if ( ! man_valid_post(man))  
                 return(0);  
   
         return(1);          return(1);
 }  }
   
Line 264  rew_scope(enum man_type type, struct man *man, enum ma
Line 240  rew_scope(enum man_type type, struct man *man, enum ma
          */           */
         assert(n);          assert(n);
   
         return(man_unscope(man, n, MANDOCERR_MAX));          return(man_unscope(man, n));
 }  }
   
   
Line 298  blk_close(MACRO_PROT_ARGS)
Line 274  blk_close(MACRO_PROT_ARGS)
                 if ( ! rew_scope(MAN_BLOCK, man, MAN_PP))                  if ( ! rew_scope(MAN_BLOCK, man, MAN_PP))
                         return(0);                          return(0);
         } else          } else
                 man_unscope(man, nn, MANDOCERR_MAX);                  man_unscope(man, nn);
   
         return(1);          return(1);
 }  }
Line 335  blk_exp(MACRO_PROT_ARGS)
Line 311  blk_exp(MACRO_PROT_ARGS)
                 if (n->tok != tok)                  if (n->tok != tok)
                         continue;                          continue;
                 assert(MAN_HEAD == n->type);                  assert(MAN_HEAD == n->type);
                 man_unscope(man, n, MANDOCERR_MAX);                  man_unscope(man, n);
                 break;                  break;
         }          }
   
Line 482  int
Line 458  int
 man_macroend(struct man *man)  man_macroend(struct man *man)
 {  {
   
         return(man_unscope(man, man->first, MANDOCERR_SCOPEEXIT));          return(man_unscope(man, man->first));
 }  }
   
 static int  static int

Legend:
Removed from v.1.82  
changed lines
  Added in v.1.83

CVSweb