[BACK]Return to mdoc_macro.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mandoc

Diff for /src/usr.bin/mandoc/mdoc_macro.c between version 1.104 and 1.105

version 1.104, 2014/11/27 22:27:40 version 1.105, 2014/11/28 01:05:40
Line 60 
Line 60 
 static  enum mdoct      rew_alt(enum mdoct);  static  enum mdoct      rew_alt(enum mdoct);
 static  enum rew        rew_dohalt(enum mdoct, enum mdoc_type,  static  enum rew        rew_dohalt(enum mdoct, enum mdoc_type,
                                 const struct mdoc_node *);                                  const struct mdoc_node *);
 static  int             rew_elem(struct mdoc *, enum mdoct);  static  void            rew_elem(struct mdoc *, enum mdoct);
 static  int             rew_last(struct mdoc *,  static  void            rew_last(struct mdoc *, const struct mdoc_node *);
                                 const struct mdoc_node *);  
 static  int             rew_sub(enum mdoc_type, struct mdoc *,  static  int             rew_sub(enum mdoc_type, struct mdoc *,
                                 enum mdoct, int, int);                                  enum mdoct, int, int);
   
Line 236 
Line 235 
   
         /* Rewind to the first. */          /* Rewind to the first. */
   
         return(rew_last(mdoc, mdoc->first));          rew_last(mdoc, mdoc->first);
           return(1);
 }  }
   
 /*  /*
Line 266 
Line 266 
         return(MDOC_MAX);          return(MDOC_MAX);
 }  }
   
 static int  static void
 rew_last(struct mdoc *mdoc, const struct mdoc_node *to)  rew_last(struct mdoc *mdoc, const struct mdoc_node *to)
 {  {
         struct mdoc_node *n, *np;          struct mdoc_node *n, *np;
   
         assert(to);          assert(to);
         mdoc->next = MDOC_NEXT_SIBLING;          mdoc->next = MDOC_NEXT_SIBLING;
   
   
         while (mdoc->last != to) {          while (mdoc->last != to) {
                 /*                  /*
                  * Save the parent here, because we may delete the                   * Save the parent here, because we may delete the
Line 283 
Line 281 
                  * out to be lost.                   * out to be lost.
                  */                   */
                 np = mdoc->last->parent;                  np = mdoc->last->parent;
                 if ( ! mdoc_valid_post(mdoc))                  mdoc_valid_post(mdoc);
                         return(0);  
                 n = mdoc->last;                  n = mdoc->last;
                 mdoc->last = np;                  mdoc->last = np;
                 assert(mdoc->last);                  assert(mdoc->last);
                 mdoc->last->last = n;                  mdoc->last->last = n;
         }          }
           mdoc_valid_post(mdoc);
         return(mdoc_valid_post(mdoc));  
 }  }
   
 /*  /*
Line 453 
Line 449 
             REWIND_FORCE : REWIND_LATER);              REWIND_FORCE : REWIND_LATER);
 }  }
   
 static int  static void
 rew_elem(struct mdoc *mdoc, enum mdoct tok)  rew_elem(struct mdoc *mdoc, enum mdoct tok)
 {  {
         struct mdoc_node *n;          struct mdoc_node *n;
Line 463 
Line 459 
                 n = n->parent;                  n = n->parent;
         assert(MDOC_ELEM == n->type);          assert(MDOC_ELEM == n->type);
         assert(tok == n->tok);          assert(tok == n->tok);
           rew_last(mdoc, n);
         return(rew_last(mdoc, n));  
 }  }
   
 /*  /*
Line 585 
Line 580 
         }          }
   
         assert(n);          assert(n);
         if ( ! rew_last(mdoc, n))          rew_last(mdoc, n);
                 return(0);  
   
         /*          /*
          * The current block extends an enclosing block.           * The current block extends an enclosing block.
          * Now that the current block ends, close the enclosing block, too.           * Now that the current block ends, close the enclosing block, too.
          */           */
         while (NULL != (n = n->pending)) {          while (NULL != (n = n->pending)) {
                 if ( ! rew_last(mdoc, n))                  rew_last(mdoc, n);
                         return(0);  
                 if (MDOC_HEAD == n->type &&                  if (MDOC_HEAD == n->type &&
                     ! mdoc_body_alloc(mdoc, n->line, n->pos, n->tok))                      ! mdoc_body_alloc(mdoc, n->line, n->pos, n->tok))
                         return(0);                          return(0);
Line 799 
Line 792 
                         if ( ! mdoc_elem_alloc(mdoc, line, ppos,                          if ( ! mdoc_elem_alloc(mdoc, line, ppos,
                             MDOC_br, NULL))                              MDOC_br, NULL))
                                 return(0);                                  return(0);
                         if ( ! rew_elem(mdoc, MDOC_br))                          rew_elem(mdoc, MDOC_br);
                                 return(0);  
                 } else if ( ! mdoc_tail_alloc(mdoc, line, ppos, atok))                  } else if ( ! mdoc_tail_alloc(mdoc, line, ppos, atok))
                         return(0);                          return(0);
         }          }
Line 810 
Line 802 
                 lastarg = *pos;                  lastarg = *pos;
   
                 if (j == maxargs && ! flushed) {                  if (j == maxargs && ! flushed) {
                         if ( ! (endbody != NULL ? rew_last(mdoc, endbody) :                          if (endbody != NULL)
                             rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos)))                                  rew_last(mdoc, endbody);
                           else if ( ! rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos))
                                 return(0);                                  return(0);
                         flushed = 1;                          flushed = 1;
                 }                  }
Line 835 
Line 828 
                 }                  }
   
                 if ( ! flushed) {                  if ( ! flushed) {
                         if ( ! (endbody != NULL ? rew_last(mdoc, endbody) :                          if (endbody != NULL)
                             rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos)))                                  rew_last(mdoc, endbody);
                           else if ( ! rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos))
                                 return(0);                                  return(0);
                         flushed = 1;                          flushed = 1;
                 }                  }
Line 848 
Line 842 
                 break;                  break;
         }          }
   
         if ( ! flushed && ! (endbody != NULL ? rew_last(mdoc, endbody) :          if ( ! flushed) {
             rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos)))                  if (endbody != NULL)
                 return(0);                          rew_last(mdoc, endbody);
                   else if ( ! rew_sub(MDOC_BLOCK, mdoc, tok, line, ppos))
                           return(0);
           }
   
         if ( ! nl)          if ( ! nl)
                 return(1);                  return(1);
Line 957 
Line 954 
                  */                   */
   
                 if (MDOC_MAX != ntok) {                  if (MDOC_MAX != ntok) {
                         if (scope && ! rew_elem(mdoc, tok))                          if (scope)
                                 return(0);                                  rew_elem(mdoc, tok);
                         if (nc && 0 == cnt) {                          if (nc && 0 == cnt) {
                                 if ( ! mdoc_elem_alloc(mdoc,                                  if ( ! mdoc_elem_alloc(mdoc,
                                     line, ppos, tok, arg))                                      line, ppos, tok, arg))
                                         return(0);                                          return(0);
                                 if ( ! rew_last(mdoc, mdoc->last))                                  rew_last(mdoc, mdoc->last);
                                         return(0);  
                         } else if ( ! nc && 0 == cnt) {                          } else if ( ! nc && 0 == cnt) {
                                 mdoc_argv_free(arg);                                  mdoc_argv_free(arg);
                                 mandoc_msg(MANDOCERR_MACRO_EMPTY,                                  mandoc_msg(MANDOCERR_MACRO_EMPTY,
Line 1009 
Line 1005 
                          * Close out our scope, if one is open, before                           * Close out our scope, if one is open, before
                          * any punctuation.                           * any punctuation.
                          */                           */
                         if (scope && ! rew_elem(mdoc, tok))                          if (scope)
                                 return(0);                                  rew_elem(mdoc, tok);
                         scope = 0;                          scope = 0;
                         if (tok == MDOC_Fn)                          if (tok == MDOC_Fn)
                                 mayopen = 0;                                  mayopen = 0;
Line 1040 
Line 1036 
                  * having to parse out spaces.                   * having to parse out spaces.
                  */                   */
                 if (scope && MDOC_Fl == tok) {                  if (scope && MDOC_Fl == tok) {
                         if ( ! rew_elem(mdoc, tok))                          rew_elem(mdoc, tok);
                                 return(0);  
                         scope = 0;                          scope = 0;
                 }                  }
         }          }
   
         if (scope && ! rew_elem(mdoc, tok))          if (scope)
                 return(0);                  rew_elem(mdoc, tok);
   
         /*          /*
          * 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 1058 
Line 1053 
         if (nc && 0 == cnt) {          if (nc && 0 == cnt) {
                 if ( ! mdoc_elem_alloc(mdoc, line, ppos, tok, arg))                  if ( ! mdoc_elem_alloc(mdoc, line, ppos, tok, arg))
                         return(0);                          return(0);
                 if ( ! rew_last(mdoc, mdoc->last))                  rew_last(mdoc, mdoc->last);
                         return(0);  
         } else if ( ! nc && 0 == cnt) {          } else if ( ! nc && 0 == cnt) {
                 mdoc_argv_free(arg);                  mdoc_argv_free(arg);
                 mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,                  mandoc_msg(MANDOCERR_MACRO_EMPTY, mdoc->parse,
Line 1100 
Line 1094 
                         if ( ! mdoc_elem_alloc(mdoc, line, ppos,                          if ( ! mdoc_elem_alloc(mdoc, line, ppos,
                             MDOC_br, NULL))                              MDOC_br, NULL))
                                 return(0);                                  return(0);
                         return(rew_elem(mdoc, MDOC_br));                          rew_elem(mdoc, MDOC_br);
                           return(1);
                 }                  }
         }          }
   
Line 1641 
Line 1636 
                                return(0);                                 return(0);
   
                 if (j == maxargs && ! flushed) {                  if (j == maxargs && ! flushed) {
                         if ( ! rew_elem(mdoc, tok))                          rew_elem(mdoc, tok);
                                 return(0);  
                         flushed = 1;                          flushed = 1;
                 }                  }
   
                 ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);                  ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);
   
                 if (MDOC_MAX != ntok) {                  if (MDOC_MAX != ntok) {
                         if ( ! flushed && ! rew_elem(mdoc, tok))                          if ( ! flushed)
                                 return(0);                                  rew_elem(mdoc, tok);
                         flushed = 1;                          flushed = 1;
                         if ( ! mdoc_macro(mdoc, ntok, line, la, pos, buf))                          if ( ! mdoc_macro(mdoc, ntok, line, la, pos, buf))
                                 return(0);                                  return(0);
Line 1662 
Line 1656 
                     ARGS_QWORD != ac &&                      ARGS_QWORD != ac &&
                     ! flushed &&                      ! flushed &&
                     DELIM_NONE != mdoc_isdelim(p)) {                      DELIM_NONE != mdoc_isdelim(p)) {
                         if ( ! rew_elem(mdoc, tok))                          rew_elem(mdoc, tok);
                                 return(0);  
                         flushed = 1;                          flushed = 1;
                 }                  }
   
Line 1678 
Line 1671 
   
         /* Close out in a consistent state. */          /* Close out in a consistent state. */
   
         if ( ! flushed && ! rew_elem(mdoc, tok))          if ( ! flushed)
                 return(0);                  rew_elem(mdoc, tok);
         if ( ! nl)          if ( ! nl)
                 return(1);                  return(1);
         return(append_delims(mdoc, line, pos, buf));          return(append_delims(mdoc, line, pos, buf));
Line 1743 
Line 1736 
                                 return(0);                                  return(0);
                         continue;                          continue;
                 }                  }
                   rew_elem(mdoc, tok);
                 if ( ! rew_elem(mdoc, tok))  
                         return(0);  
                 return(mdoc_macro(mdoc, ntok, line, la, pos, buf));                  return(mdoc_macro(mdoc, ntok, line, la, pos, buf));
         }          }
   
         /* Close out (no delimiters). */          /* Close out (no delimiters). */
   
         return(rew_elem(mdoc, tok));          rew_elem(mdoc, tok);
           return(1);
 }  }
   
 static int  static int

Legend:
Removed from v.1.104  
changed lines
  Added in v.1.105