[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.15 and 1.16

version 1.15, 2009/07/06 09:21:24 version 1.16, 2009/07/06 13:04:52
Line 22 
Line 22 
   
 #include "libmdoc.h"  #include "libmdoc.h"
   
 enum    mwarn {  
         WIGNE,  
         WIMPBRK,  
         WMACPARM,  
         WOBS  
 };  
   
 enum    merr {  
         EOPEN,  
         EQUOT,  
         ENOCTX,  
         ENOPARMS  
 };  
   
 #define REWIND_REWIND   (1 << 0)  #define REWIND_REWIND   (1 << 0)
 #define REWIND_NOHALT   (1 << 1)  #define REWIND_NOHALT   (1 << 1)
 #define REWIND_HALT     (1 << 2)  #define REWIND_HALT     (1 << 2)
Line 62  static int   rew_subblock(enum mdoc_type, 
Line 48  static int   rew_subblock(enum mdoc_type, 
 static  int       rew_last(struct mdoc *, struct mdoc_node *);  static  int       rew_last(struct mdoc *, struct mdoc_node *);
 static  int       append_delims(struct mdoc *, int, int *, char *);  static  int       append_delims(struct mdoc *, int, int *, char *);
 static  int       lookup(struct mdoc *, int, int, int, const char *);  static  int       lookup(struct mdoc *, int, int, int, const char *);
 static  int       pwarn(struct mdoc *, int, int, enum mwarn);  
 static  int       perr(struct mdoc *, int, int, enum merr);  
 static  int       swarn(struct mdoc *, enum mdoc_type, int, int,  static  int       swarn(struct mdoc *, enum mdoc_type, int, int,
                         const struct mdoc_node *);                          const struct mdoc_node *);
   
 #define nerr(m, n, t) perr((m), (n)->line, (n)->pos, (t))  
   
 /* Central table of library: who gets parsed how. */  /* Central table of library: who gets parsed how. */
   
 const   struct mdoc_macro __mdoc_macros[MDOC_MAX] = {  const   struct mdoc_macro __mdoc_macros[MDOC_MAX] = {
Line 196  const struct mdoc_macro * const mdoc_macros = __mdoc_m
Line 178  const struct mdoc_macro * const mdoc_macros = __mdoc_m
   
   
 static int  static int
 perr(struct mdoc *mdoc, int line, int pos, enum merr type)  
 {  
         char            *p;  
   
         p = NULL;  
         switch (type) {  
         case (EOPEN):  
                 p = "explicit scope still open on exit";  
                 break;  
         case (EQUOT):  
                 p = "unterminated quotation";  
                 break;  
         case (ENOCTX):  
                 p = "closure has no prior context";  
                 break;  
         case (ENOPARMS):  
                 p = "unexpect line arguments";  
                 break;  
         }  
         assert(p);  
         return(mdoc_perr(mdoc, line, pos, p));  
 }  
   
   
 static int  
 pwarn(struct mdoc *mdoc, int line, int pos, enum mwarn type)  
 {  
         char            *p;  
   
         p = NULL;  
         switch (type) {  
         case (WIGNE):  
                 p = "ignoring empty element";  
                 break;  
         case (WIMPBRK):  
                 p = "crufty end-of-line scope violation";  
                 break;  
         case (WMACPARM):  
                 p = "macro-like parameter";  
                 break;  
         case (WOBS):  
                 p = "macro marked obsolete";  
                 break;  
         }  
         assert(p);  
         return(mdoc_pwarn(mdoc, line, pos, p));  
 }  
   
   
 static int  
 swarn(struct mdoc *mdoc, enum mdoc_type type,  swarn(struct mdoc *mdoc, enum mdoc_type type,
                 int line, int pos, const struct mdoc_node *p)                  int line, int pos, const struct mdoc_node *p)
 {  {
Line 283  swarn(struct mdoc *mdoc, enum mdoc_type type, 
Line 215  swarn(struct mdoc *mdoc, enum mdoc_type type, 
         }          }
   
         if ( ! (MDOC_IGN_SCOPE & mdoc->pflags))          if ( ! (MDOC_IGN_SCOPE & mdoc->pflags))
                 return(mdoc_perr(mdoc, line, pos,                  return(mdoc_verr(mdoc, line, pos,
                                 "%s scope breaks %s scope of %s",                                  "%s scope breaks %s scope of %s",
                                 tt, t, n));                                  tt, t, n));
         return(mdoc_pwarn(mdoc, line, pos,          return(mdoc_vwarn(mdoc, line, pos,
                                 "%s scope breaks %s scope of %s",                                  "%s scope breaks %s scope of %s",
                                 tt, t, n));                                  tt, t, n));
 }  }
Line 312  mdoc_macroend(struct mdoc *mdoc)
Line 244  mdoc_macroend(struct mdoc *mdoc)
                         continue;                          continue;
                 if ( ! (MDOC_EXPLICIT & mdoc_macros[n->tok].flags))                  if ( ! (MDOC_EXPLICIT & mdoc_macros[n->tok].flags))
                         continue;                          continue;
                 return(nerr(mdoc, n, EOPEN));                  return(mdoc_nerr(mdoc, n, EOPEN));
         }          }
   
         return(rew_last(mdoc, mdoc->first));          return(rew_last(mdoc, mdoc->first));
Line 328  lookup(struct mdoc *mdoc, int line, int pos, int from,
Line 260  lookup(struct mdoc *mdoc, int line, int pos, int from,
                 return(res);                  return(res);
         if (MDOC_MAX == res)          if (MDOC_MAX == res)
                 return(res);                  return(res);
         if ( ! pwarn(mdoc, line, pos, WMACPARM))          if ( ! mdoc_pwarn(mdoc, line, pos, EMACPARM))
                 return(-1);                  return(-1);
         return(MDOC_MAX);          return(MDOC_MAX);
 }  }
Line 637  rew_expblock(struct mdoc *mdoc, int tok, int line, int
Line 569  rew_expblock(struct mdoc *mdoc, int tok, int line, int
         for (n = mdoc->last; n; n = n->parent) {          for (n = mdoc->last; n; n = n->parent) {
                 c = rew_dohalt(tok, MDOC_BLOCK, n);                  c = rew_dohalt(tok, MDOC_BLOCK, n);
                 if (REWIND_HALT == c)                  if (REWIND_HALT == c)
                         return(perr(mdoc, line, ppos, ENOCTX));                          return(mdoc_perr(mdoc, line, ppos, ENOCTX));
                 if (REWIND_REWIND == c)                  if (REWIND_REWIND == c)
                         break;                          break;
                 else if (rew_dobreak(tok, n))                  else if (rew_dobreak(tok, n))
Line 728  blk_exp_close(MACRO_PROT_ARGS)
Line 660  blk_exp_close(MACRO_PROT_ARGS)
                                 return(0);                                  return(0);
                         return(rew_expblock(mdoc, tok, line, ppos));                          return(rew_expblock(mdoc, tok, line, ppos));
                 }                  }
                 return(perr(mdoc, line, ppos, ENOPARMS));                  return(mdoc_perr(mdoc, line, ppos, ENOPARMS));
         }          }
   
         if ( ! rew_subblock(MDOC_BODY, mdoc, tok, line, ppos))          if ( ! rew_subblock(MDOC_BODY, mdoc, tok, line, ppos))
Line 871  in_line(MACRO_PROT_ARGS)
Line 803  in_line(MACRO_PROT_ARGS)
                                         return(0);                                          return(0);
                         } else if ( ! nc && 0 == cnt) {                          } else if ( ! nc && 0 == cnt) {
                                 mdoc_argv_free(arg);                                  mdoc_argv_free(arg);
                                 if ( ! pwarn(mdoc, line, ppos, WIGNE))                                  if ( ! mdoc_pwarn(mdoc, line, ppos, EIGNE))
                                         return(0);                                          return(0);
                         }                          }
                         c = mdoc_macro(mdoc, c, line, la, pos, buf);                          c = mdoc_macro(mdoc, c, line, la, pos, buf);
Line 927  in_line(MACRO_PROT_ARGS)
Line 859  in_line(MACRO_PROT_ARGS)
                         return(0);                          return(0);
         } else if ( ! nc && 0 == cnt) {          } else if ( ! nc && 0 == cnt) {
                 mdoc_argv_free(arg);                  mdoc_argv_free(arg);
                 if ( ! pwarn(mdoc, line, ppos, WIGNE))                  if ( ! mdoc_pwarn(mdoc, line, ppos, EIGNE))
                         return(0);                          return(0);
         }          }
   
Line 1111  blk_part_imp(MACRO_PROT_ARGS)
Line 1043  blk_part_imp(MACRO_PROT_ARGS)
                 if (body == n)                  if (body == n)
                         break;                          break;
   
         if (NULL == n && ! pwarn(mdoc, body->line, body->pos, WIMPBRK))          if (NULL == n && ! mdoc_nwarn(mdoc, body, EIMPBRK))
                         return(0);                          return(0);
   
         if (n && ! rew_last(mdoc, body))          if (n && ! rew_last(mdoc, body))
Line 1414  static int
Line 1346  static int
 obsolete(MACRO_PROT_ARGS)  obsolete(MACRO_PROT_ARGS)
 {  {
   
         return(pwarn(mdoc, line, ppos, WOBS));          return(mdoc_pwarn(mdoc, line, ppos, EOBS));
 }  }
   
   
Line 1450  phrase(struct mdoc *mdoc, int line, int ppos, char *bu
Line 1382  phrase(struct mdoc *mdoc, int line, int ppos, char *bu
                                 else if ('\\' != buf[i - 1])                                  else if ('\\' != buf[i - 1])
                                         break;                                          break;
                         if (0 == buf[i])                          if (0 == buf[i])
                                 return(perr(mdoc, line, la, EQUOT));                                  return(mdoc_perr(mdoc, line, la, EQUOT));
                         quoted = 1;                          quoted = 1;
                 } else                  } else
                         for ( ; buf[i]; i++)                          for ( ; buf[i]; i++)

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.16

CVSweb