[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.214 and 1.218

version 1.214, 2017/02/11 14:11:17 version 1.218, 2017/04/17 12:53:29
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2012-2016 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010, 2012-2017 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 381  rew_elem(struct roff_man *mdoc, int tok)
Line 381  rew_elem(struct roff_man *mdoc, int tok)
 static void  static void
 break_intermediate(struct roff_node *n, struct roff_node *breaker)  break_intermediate(struct roff_node *n, struct roff_node *breaker)
 {  {
           if (n != breaker &&
               n->type != ROFFT_BLOCK && n->type != ROFFT_HEAD &&
               (n->type != ROFFT_BODY || n->end != ENDBODY_NOT))
                   n = n->parent;
         while (n != breaker) {          while (n != breaker) {
                 if ( ! (n->flags & NODE_VALID))                  if ( ! (n->flags & NODE_VALID))
                         n->flags |= NODE_BROKEN;                          n->flags |= NODE_BROKEN;
Line 400  find_pending(struct roff_man *mdoc, int tok, int line,
Line 404  find_pending(struct roff_man *mdoc, int tok, int line,
         struct roff_node        *n;          struct roff_node        *n;
         int                      irc;          int                      irc;
   
           if (target->flags & NODE_VALID)
                   return 0;
   
         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)
Line 407  find_pending(struct roff_man *mdoc, int tok, int line,
Line 414  find_pending(struct roff_man *mdoc, int tok, int line,
                 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);                          break_intermediate(mdoc->last, target);
                         n->flags |= NODE_BROKEN;  
                         if (target->type == ROFFT_HEAD)                          if (target->type == ROFFT_HEAD)
                                 target->flags |= NODE_ENDED;                                  target->flags |= NODE_ENDED;
                         else if ( ! (target->flags & NODE_ENDED)) {                          else if ( ! (target->flags & NODE_ENDED)) {
Line 417  find_pending(struct roff_man *mdoc, int tok, int line,
Line 423  find_pending(struct roff_man *mdoc, int tok, int line,
                                     "%s breaks %s", mdoc_macronames[tok],                                      "%s breaks %s", mdoc_macronames[tok],
                                     mdoc_macronames[n->tok]);                                      mdoc_macronames[n->tok]);
                                 mdoc_endbody_alloc(mdoc, line, ppos,                                  mdoc_endbody_alloc(mdoc, line, ppos,
                                     tok, target, ENDBODY_NOSPACE);                                      tok, target);
                         }                          }
                 }                  }
         }          }
Line 631  blk_exp_close(MACRO_PROT_ARGS)
Line 637  blk_exp_close(MACRO_PROT_ARGS)
                             mdoc_macronames[later->tok]);                              mdoc_macronames[later->tok]);
   
                         endbody = mdoc_endbody_alloc(mdoc, line, ppos,                          endbody = mdoc_endbody_alloc(mdoc, line, ppos,
                             atok, body, ENDBODY_SPACE);                              atok, body);
   
                         if (tok == MDOC_El)                          if (tok == MDOC_El)
                                 itblk->flags |= NODE_ENDED | NODE_BROKEN;                                  itblk->flags |= NODE_ENDED | NODE_BROKEN;
Line 733  blk_exp_close(MACRO_PROT_ARGS)
Line 739  blk_exp_close(MACRO_PROT_ARGS)
                         do                          do
                                 target = target->parent;                                  target = target->parent;
                         while ( ! (target->flags & NODE_ENDED));                          while ( ! (target->flags & NODE_ENDED));
                         if ( ! (target->flags & NODE_VALID))                          pending = find_pending(mdoc, ntok, line, ppos, target);
                                 pending = find_pending(mdoc, ntok,  
                                     line, ppos, target);  
                 }                  }
                 if ( ! pending)                  if ( ! pending)
                         rew_pending(mdoc, n);                          rew_pending(mdoc, n);
Line 899  in_line(MACRO_PROT_ARGS)
Line 903  in_line(MACRO_PROT_ARGS)
                 }                  }
         }          }
   
         if (scope)          if (scope && tok != MDOC_Lk) {
                 rew_elem(mdoc, tok);                  rew_elem(mdoc, tok);
                   scope = 0;
           }
   
         /*          /*
          * If no elements have been collected and we're allowed to have           * If no elements have been collected and we're allowed to have
Line 920  in_line(MACRO_PROT_ARGS)
Line 926  in_line(MACRO_PROT_ARGS)
         }          }
         if (nl)          if (nl)
                 append_delims(mdoc, line, pos, buf);                  append_delims(mdoc, line, pos, buf);
           if (scope)
                   rew_elem(mdoc, tok);
 }  }
   
 static void  static void

Legend:
Removed from v.1.214  
changed lines
  Added in v.1.218

CVSweb