[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.60 and 1.73

version 1.60, 2011/03/23 15:33:57 version 1.73, 2012/06/03 09:52:07
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
    * Copyright (c) 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 52  static void   rew_warn(struct man *, 
Line 53  static void   rew_warn(struct man *, 
   
 const   struct man_macro __man_macros[MAN_MAX] = {  const   struct man_macro __man_macros[MAN_MAX] = {
         { in_line_eoln, MAN_NSCOPED }, /* br */          { in_line_eoln, MAN_NSCOPED }, /* br */
         { in_line_eoln, 0 }, /* TH */          { in_line_eoln, MAN_BSCOPE }, /* TH */
         { blk_imp, MAN_SCOPED }, /* SH */          { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SH */
         { blk_imp, MAN_SCOPED }, /* SS */          { blk_imp, MAN_BSCOPE | MAN_SCOPED }, /* SS */
         { blk_imp, MAN_SCOPED | MAN_FSCOPED }, /* TP */          { blk_imp, MAN_BSCOPE | MAN_SCOPED | MAN_FSCOPED }, /* TP */
         { blk_imp, 0 }, /* LP */          { blk_imp, MAN_BSCOPE }, /* LP */
         { blk_imp, 0 }, /* PP */          { blk_imp, MAN_BSCOPE }, /* PP */
         { blk_imp, 0 }, /* P */          { blk_imp, MAN_BSCOPE }, /* P */
         { blk_imp, 0 }, /* IP */          { blk_imp, MAN_BSCOPE }, /* IP */
         { blk_imp, 0 }, /* HP */          { blk_imp, MAN_BSCOPE }, /* HP */
         { in_line_eoln, MAN_SCOPED }, /* SM */          { in_line_eoln, MAN_SCOPED }, /* SM */
         { in_line_eoln, MAN_SCOPED }, /* SB */          { in_line_eoln, MAN_SCOPED }, /* SB */
         { in_line_eoln, 0 }, /* BI */          { in_line_eoln, 0 }, /* BI */
Line 74  const struct man_macro __man_macros[MAN_MAX] = {
Line 75  const struct man_macro __man_macros[MAN_MAX] = {
         { in_line_eoln, 0 }, /* RI */          { in_line_eoln, 0 }, /* RI */
         { in_line_eoln, MAN_NSCOPED }, /* na */          { in_line_eoln, MAN_NSCOPED }, /* na */
         { in_line_eoln, MAN_NSCOPED }, /* sp */          { in_line_eoln, MAN_NSCOPED }, /* sp */
         { in_line_eoln, 0 }, /* nf */          { in_line_eoln, MAN_BSCOPE }, /* nf */
         { in_line_eoln, 0 }, /* fi */          { in_line_eoln, MAN_BSCOPE }, /* fi */
         { blk_close, 0 }, /* RE */          { blk_close, 0 }, /* RE */
         { blk_exp, MAN_EXPLICIT }, /* RS */          { blk_exp, MAN_EXPLICIT }, /* RS */
         { in_line_eoln, 0 }, /* DT */          { in_line_eoln, 0 }, /* DT */
Line 84  const struct man_macro __man_macros[MAN_MAX] = {
Line 85  const struct man_macro __man_macros[MAN_MAX] = {
         { in_line_eoln, 0 }, /* AT */          { in_line_eoln, 0 }, /* AT */
         { in_line_eoln, 0 }, /* in */          { in_line_eoln, 0 }, /* in */
         { in_line_eoln, 0 }, /* ft */          { in_line_eoln, 0 }, /* ft */
           { in_line_eoln, 0 }, /* OP */
           { in_line_eoln, MAN_BSCOPE }, /* EX */
           { in_line_eoln, MAN_BSCOPE }, /* EE */
 };  };
   
 const   struct man_macro * const man_macros = __man_macros;  const   struct man_macro * const man_macros = __man_macros;
Line 120  man_unscope(struct man *m, const struct man_node *to, 
Line 124  man_unscope(struct man *m, const struct man_node *to, 
   
         assert(to);          assert(to);
   
           m->next = MAN_NEXT_SIBLING;
   
         /* LINTED */          /* LINTED */
         while (m->last != to) {          while (m->last != to) {
                 /*                  /*
Line 140  man_unscope(struct man *m, const struct man_node *to, 
Line 146  man_unscope(struct man *m, const struct man_node *to, 
         if ( ! man_valid_post(m))          if ( ! man_valid_post(m))
                 return(0);                  return(0);
   
         m->next = MAN_ROOT == m->last->type ?  
                 MAN_NEXT_CHILD : MAN_NEXT_SIBLING;  
   
         return(1);          return(1);
 }  }
   
Line 183  rew_dohalt(enum mant tok, enum man_type type, const st
Line 186  rew_dohalt(enum mant tok, enum man_type type, const st
                 return(REW_NOHALT);                  return(REW_NOHALT);
   
         /* First: rewind to ourselves. */          /* First: rewind to ourselves. */
         if (type == n->type && tok == n->tok)          if (type == n->type && tok == n->tok) {
                 return(REW_REWIND);                  if (MAN_EXPLICIT & man_macros[n->tok].flags)
                           return(REW_HALT);
                   else
                           return(REW_REWIND);
           }
   
         /*          /*
          * Next follow the implicit scope-smashings as defined by man.7:           * Next follow the implicit scope-smashings as defined by man.7:
Line 200  rew_dohalt(enum mant tok, enum man_type type, const st
Line 207  rew_dohalt(enum mant tok, enum man_type type, const st
                         return(c);                          return(c);
                 break;                  break;
         case (MAN_RS):          case (MAN_RS):
                   /* Preserve empty paragraphs before RS. */
                   if (0 == n->nchild && (MAN_P == n->tok ||
                       MAN_PP == n->tok || MAN_LP == n->tok))
                           return(REW_HALT);
                 /* Rewind to a subsection, if a block. */                  /* Rewind to a subsection, if a block. */
                 if (REW_NOHALT != (c = rew_block(MAN_SS, type, n)))                  if (REW_NOHALT != (c = rew_block(MAN_SS, type, n)))
                         return(c);                          return(c);
Line 279  blk_close(MACRO_PROT_ARGS)
Line 290  blk_close(MACRO_PROT_ARGS)
         }          }
   
         for (nn = m->last->parent; nn; nn = nn->parent)          for (nn = m->last->parent; nn; nn = nn->parent)
                 if (ntok == nn->tok)                  if (ntok == nn->tok && MAN_BLOCK == nn->type)
                         break;                          break;
   
         if (NULL == nn)          if (NULL != nn)
                   man_unscope(m, nn, MANDOCERR_MAX);
           else
                 man_pmsg(m, line, ppos, MANDOCERR_NOSCOPE);                  man_pmsg(m, line, ppos, MANDOCERR_NOSCOPE);
   
         if ( ! rew_scope(MAN_BODY, m, ntok))  
                 return(0);  
         if ( ! rew_scope(MAN_BLOCK, m, ntok))  
                 return(0);  
   
         return(1);          return(1);
 }  }
   
Line 298  blk_close(MACRO_PROT_ARGS)
Line 306  blk_close(MACRO_PROT_ARGS)
 int  int
 blk_exp(MACRO_PROT_ARGS)  blk_exp(MACRO_PROT_ARGS)
 {  {
           struct man_node *n;
         int              la;          int              la;
         char            *p;          char            *p;
   
         /*          /* Close out prior implicit scopes. */
          * Close out prior scopes.  "Regular" explicit macros cannot be  
          * nested, but we allow roff macros to be placed just about  
          * anywhere.  
          */  
   
         if ( ! rew_scope(MAN_BODY, m, tok))  
                 return(0);  
         if ( ! rew_scope(MAN_BLOCK, m, tok))          if ( ! rew_scope(MAN_BLOCK, m, tok))
                 return(0);                  return(0);
   
Line 328  blk_exp(MACRO_PROT_ARGS)
Line 331  blk_exp(MACRO_PROT_ARGS)
         assert(m);          assert(m);
         assert(tok != MAN_MAX);          assert(tok != MAN_MAX);
   
         if ( ! rew_scope(MAN_HEAD, m, tok))          for (n = m->last; n; n = n->parent) {
                 return(0);                  if (n->tok != tok)
                           continue;
                   assert(MAN_HEAD == n->type);
                   man_unscope(m, n, MANDOCERR_MAX);
                   break;
           }
   
         return(man_body_alloc(m, line, ppos, tok));          return(man_body_alloc(m, line, ppos, tok));
 }  }
   
Line 433  in_line_eoln(MACRO_PROT_ARGS)
Line 442  in_line_eoln(MACRO_PROT_ARGS)
                 assert( ! (MAN_SCOPED & man_macros[tok].flags));                  assert( ! (MAN_SCOPED & man_macros[tok].flags));
                 m->flags |= MAN_ILINE;                  m->flags |= MAN_ILINE;
         }          }
   
           assert(MAN_ROOT != m->last->type);
           m->next = MAN_NEXT_SIBLING;
   
         /*          /*
          * Rewind our element scope.  Note that when TH is pruned, we'll           * Rewind our element scope.  Note that when TH is pruned, we'll
Line 457  in_line_eoln(MACRO_PROT_ARGS)
Line 469  in_line_eoln(MACRO_PROT_ARGS)
   
         if (m->last->type != MAN_ROOT && ! man_valid_post(m))          if (m->last->type != MAN_ROOT && ! man_valid_post(m))
                 return(0);                  return(0);
   
         m->next = MAN_ROOT == m->last->type ?  
                 MAN_NEXT_CHILD : MAN_NEXT_SIBLING;  
   
         return(1);          return(1);
 }  }

Legend:
Removed from v.1.60  
changed lines
  Added in v.1.73

CVSweb