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

Diff for /mandoc/mdoc_macro.c between version 1.212 and 1.213

version 1.212, 2017/02/10 22:19:18 version 1.213, 2017/02/11 13:24:12
Line 50  static int  find_pending(struct roff_man *, int, int, 
Line 50  static int  find_pending(struct roff_man *, int, int, 
                                 struct roff_node *);                                  struct roff_node *);
 static  int             lookup(struct roff_man *, int, int, int, const char *);  static  int             lookup(struct roff_man *, int, int, int, const char *);
 static  int             macro_or_word(MACRO_PROT_ARGS, int);  static  int             macro_or_word(MACRO_PROT_ARGS, int);
   static  void            break_intermediate(struct roff_node *,
                               struct roff_node *);
 static  int             parse_rest(struct roff_man *, int, int, int *, char *);  static  int             parse_rest(struct roff_man *, int, int, int *, char *);
 static  int             rew_alt(int);  static  int             rew_alt(int);
 static  void            rew_elem(struct roff_man *, int);  static  void            rew_elem(struct roff_man *, int);
Line 376  rew_elem(struct roff_man *mdoc, int tok)
Line 378  rew_elem(struct roff_man *mdoc, int tok)
         rew_last(mdoc, n);          rew_last(mdoc, n);
 }  }
   
   static void
   break_intermediate(struct roff_node *n, struct roff_node *breaker)
   {
           while (n != breaker) {
                   if ( ! (n->flags & NODE_VALID))
                           n->flags |= NODE_BROKEN;
                   n = n->parent;
           }
   }
   
 /*  /*
  * If there is an open sub-block of the target requiring   * If there is an open sub-block of the target requiring
  * explicit close-out, postpone closing out the target until   * explicit close-out, postpone closing out the target until
Line 390  find_pending(struct roff_man *mdoc, int tok, int line,
Line 402  find_pending(struct roff_man *mdoc, int tok, int line,
   
         irc = 0;          irc = 0;
         for (n = mdoc->last; n != NULL && n != target; n = n->parent) {          for (n = mdoc->last; n != NULL && n != target; n = n->parent) {
                 if (n->flags & NODE_ENDED) {                  if (n->flags & NODE_ENDED)
                         if ( ! (n->flags & NODE_VALID))  
                                 n->flags |= NODE_BROKEN;  
                         continue;                          continue;
                 }  
                 if (n->type == ROFFT_BLOCK &&                  if (n->type == ROFFT_BLOCK &&
                     mdoc_macros[n->tok].flags & MDOC_EXPLICIT) {                      mdoc_macros[n->tok].flags & MDOC_EXPLICIT) {
                         irc = 1;                          irc = 1;
                           break_intermediate(mdoc->last, n);
                         n->flags |= NODE_BROKEN;                          n->flags |= NODE_BROKEN;
                         if (target->type == ROFFT_HEAD)                          if (target->type == ROFFT_HEAD)
                                 target->flags |= NODE_ENDED;                                  target->flags |= NODE_ENDED;
Line 568  blk_exp_close(MACRO_PROT_ARGS)
Line 578  blk_exp_close(MACRO_PROT_ARGS)
   
         endbody = itblk = later = NULL;          endbody = itblk = later = NULL;
         for (n = mdoc->last; n; n = n->parent) {          for (n = mdoc->last; n; n = n->parent) {
                 if (n->flags & NODE_ENDED) {                  if (n->flags & NODE_ENDED)
                         if ( ! (n->flags & NODE_VALID))  
                                 n->flags |= NODE_BROKEN;  
                         continue;                          continue;
                 }  
   
                 /*                  /*
                  * Mismatching end macros can never break anything                   * Mismatching end macros can never break anything
Line 599  blk_exp_close(MACRO_PROT_ARGS)
Line 606  blk_exp_close(MACRO_PROT_ARGS)
                 }                  }
   
                 if (atok == n->tok) {                  if (atok == n->tok) {
                         assert(body);  
   
                         /*                          /*
                          * Found the start of our own block.                           * Found the start of our own block.
Line 650  blk_exp_close(MACRO_PROT_ARGS)
Line 656  blk_exp_close(MACRO_PROT_ARGS)
   
                 /* Breaking an open sub block. */                  /* Breaking an open sub block. */
   
                   break_intermediate(mdoc->last, body);
                 n->flags |= NODE_BROKEN;                  n->flags |= NODE_BROKEN;
                 if (later == NULL)                  if (later == NULL)
                         later = n;                          later = n;

Legend:
Removed from v.1.212  
changed lines
  Added in v.1.213

CVSweb