[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.113 and 1.118

version 1.113, 2011/12/03 23:59:14 version 1.118, 2012/11/16 13:40:36
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010, 2012 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 228  mdoc_macroend(struct mdoc *m)
Line 228  mdoc_macroend(struct mdoc *m)
 static enum mdoct  static enum mdoct
 lookup(enum mdoct from, const char *p)  lookup(enum mdoct from, const char *p)
 {  {
         /* FIXME: make -diag lists be un-PARSED. */  
   
         if ( ! (MDOC_PARSED & mdoc_macros[from].flags))          if ( ! (MDOC_PARSED & mdoc_macros[from].flags))
                 return(MDOC_MAX);                  return(MDOC_MAX);
Line 739  blk_exp_close(MACRO_PROT_ARGS)
Line 738  blk_exp_close(MACRO_PROT_ARGS)
                 if (later &&                  if (later &&
                     MDOC_EXPLICIT & mdoc_macros[later->tok].flags)                      MDOC_EXPLICIT & mdoc_macros[later->tok].flags)
                         continue;                          continue;
                 if (MDOC_CALLABLE & mdoc_macros[n->tok].flags)                  if (MDOC_It != n->tok)
                         later = n;                          later = n;
         }          }
   
Line 984  in_line(MACRO_PROT_ARGS)
Line 983  in_line(MACRO_PROT_ARGS)
 static int  static int
 blk_full(MACRO_PROT_ARGS)  blk_full(MACRO_PROT_ARGS)
 {  {
         int               la, nl;          int               la, nl, nparsed;
         struct mdoc_arg  *arg;          struct mdoc_arg  *arg;
         struct mdoc_node *head; /* save of head macro */          struct mdoc_node *head; /* save of head macro */
         struct mdoc_node *body; /* save of body macro */          struct mdoc_node *body; /* save of body macro */
Line 1039  blk_full(MACRO_PROT_ARGS)
Line 1038  blk_full(MACRO_PROT_ARGS)
         head = body = NULL;          head = body = NULL;
   
         /*          /*
            * Exception: Heads of `It' macros in `-diag' lists are not
            * parsed, even though `It' macros in general are parsed.
            */
           nparsed = MDOC_It == tok &&
                   MDOC_Bl == m->last->parent->tok &&
                   LIST_diag == m->last->parent->norm->Bl.type;
   
           /*
          * The `Nd' macro has all arguments in its body: it's a hybrid           * The `Nd' macro has all arguments in its body: it's a hybrid
          * of block partial-explicit and full-implicit.  Stupid.           * of block partial-explicit and full-implicit.  Stupid.
          */           */
Line 1146  blk_full(MACRO_PROT_ARGS)
Line 1153  blk_full(MACRO_PROT_ARGS)
                         continue;                          continue;
                 }                  }
   
                 ntok = ARGS_QWORD == ac ? MDOC_MAX : lookup(tok, p);                  ntok = nparsed || ARGS_QWORD == ac ?
                           MDOC_MAX : lookup(tok, p);
   
                 if (MDOC_MAX == ntok) {                  if (MDOC_MAX == ntok) {
                         if ( ! dword(m, line, la, p, DELIM_MAX))                          if ( ! dword(m, line, la, p, DELIM_MAX))
Line 1350  blk_part_imp(MACRO_PROT_ARGS)
Line 1358  blk_part_imp(MACRO_PROT_ARGS)
   
         if (n && ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))          if (n && ! rew_sub(MDOC_BLOCK, m, tok, line, ppos))
                 return(0);                  return(0);
   
           /* Move trailing .Ns out of scope. */
   
           for (n = body->child; n && n->next; n = n->next)
                   /* Do nothing. */ ;
           if (n && MDOC_Ns == n->tok)
                   mdoc_node_relink(m, n);
   
         return(1);          return(1);
 }  }

Legend:
Removed from v.1.113  
changed lines
  Added in v.1.118

CVSweb