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

Diff for /src/usr.bin/mandoc/man.c between version 1.51 and 1.52

version 1.51, 2011/01/01 17:38:11 version 1.52, 2011/01/04 22:28:17
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>
  *   *
  * 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 26 
Line 26 
 #include "libman.h"  #include "libman.h"
 #include "libmandoc.h"  #include "libmandoc.h"
   
 #include "out.h"  
 #include "term.h"  
 #include "tbl.h"  
   
 const   char *const __man_macronames[MAN_MAX] = {  const   char *const __man_macronames[MAN_MAX] = {
         "br",           "TH",           "SH",           "SS",          "br",           "TH",           "SH",           "SS",
         "TP",           "LP",           "PP",           "P",          "TP",           "LP",           "PP",           "P",
Line 39 
Line 35 
         "RI",           "na",           "sp",           "nf",          "RI",           "na",           "sp",           "nf",
         "fi",           "RE",           "RS",           "DT",          "fi",           "RE",           "RS",           "DT",
         "UC",           "PD",           "AT",           "in",          "UC",           "PD",           "AT",           "in",
         "TS",           "TE",           "ft",          "ft"
         };          };
   
 const   char * const *man_macronames = __man_macronames;  const   char * const *man_macronames = __man_macronames;
Line 48 
Line 44 
                                 enum man_type, enum mant);                                  enum man_type, enum mant);
 static  int              man_node_append(struct man *,  static  int              man_node_append(struct man *,
                                 struct man_node *);                                  struct man_node *);
   static  int              man_span_alloc(struct man *,
                                   const struct tbl_span *);
 static  void             man_node_free(struct man_node *);  static  void             man_node_free(struct man_node *);
 static  void             man_node_unlink(struct man *,  static  void             man_node_unlink(struct man *,
                                 struct man_node *);                                  struct man_node *);
Line 55 
Line 53 
 static  int              man_pmacro(struct man *, int, char *, int);  static  int              man_pmacro(struct man *, int, char *, int);
 static  void             man_free1(struct man *);  static  void             man_free1(struct man *);
 static  void             man_alloc1(struct man *);  static  void             man_alloc1(struct man *);
   static  int              man_descope(struct man *, int, int);
   
   
 const struct man_node *  const struct man_node *
Line 124 
Line 123 
 int  int
 man_parseln(struct man *m, int ln, char *buf, int offs)  man_parseln(struct man *m, int ln, char *buf, int offs)
 {  {
         struct man_node *n;  
   
         if (MAN_HALT & m->flags)          if (MAN_HALT & m->flags)
                 return(0);                  return(0);
   
         n = m->last;  
   
         if (n && MAN_TS == n->tok && MAN_BODY == n->type &&  
             strncmp(buf+offs, ".TE", 3)) {  
                 n = n->parent;  
                 if ( ! tbl_read(n->data.TS, "man tbl parser",  
                     ln, buf+offs, strlen(buf+offs)))  
                         man_nmsg(m, n, MANDOCERR_TBL);  
                 return(1);  
         }  
   
         return(('.' == buf[offs] || '\'' == buf[offs]) ?          return(('.' == buf[offs] || '\'' == buf[offs]) ?
                         man_pmacro(m, ln, buf, offs) :                          man_pmacro(m, ln, buf, offs) :
                         man_ptext(m, ln, buf, offs));                          man_ptext(m, ln, buf, offs));
Line 224 
Line 211 
         man->last = p;          man->last = p;
   
         switch (p->type) {          switch (p->type) {
           case (MAN_TBL):
                   /* FALLTHROUGH */
         case (MAN_TEXT):          case (MAN_TEXT):
                 if ( ! man_valid_post(man))                  if ( ! man_valid_post(man))
                         return(0);                          return(0);
Line 301 
Line 290 
         return(1);          return(1);
 }  }
   
   static int
   man_span_alloc(struct man *m, const struct tbl_span *span)
   {
           struct man_node *n;
   
           /* FIXME: grab from span */
           n = man_node_alloc(0, 0, MAN_TBL, MAN_MAX);
           n->span = span;
   
           if ( ! man_node_append(m, n))
                   return(0);
   
           m->next = MAN_NEXT_SIBLING;
           return(1);
   }
   
 int  int
 man_word_alloc(struct man *m, int line, int pos, const char *word)  man_word_alloc(struct man *m, int line, int pos, const char *word)
 {  {
Line 335 
Line 339 
   
         if (p->string)          if (p->string)
                 free(p->string);                  free(p->string);
         if (p->data.TS)  
                 tbl_free(p->data.TS);  
         free(p);          free(p);
 }  }
   
Line 353 
Line 355 
 }  }
   
   
   int
   man_addspan(struct man *m, const struct tbl_span *sp)
   {
   
           if ( ! man_span_alloc(m, sp))
                   return(0);
           return(man_descope(m, 0, 0));
   }
   
 static int  static int
   man_descope(struct man *m, int line, int offs)
   {
           /*
            * Co-ordinate what happens with having a next-line scope open:
            * first close out the element scope (if applicable), then close
            * out the block scope (also if applicable).
            */
   
           if (MAN_ELINE & m->flags) {
                   m->flags &= ~MAN_ELINE;
                   if ( ! man_unscope(m, m->last->parent, MANDOCERR_MAX))
                           return(0);
           }
   
           if ( ! (MAN_BLINE & m->flags))
                   return(1);
           m->flags &= ~MAN_BLINE;
   
           if ( ! man_unscope(m, m->last->parent, MANDOCERR_MAX))
                   return(0);
           return(man_body_alloc(m, line, offs, m->last->tok));
   }
   
   
   static int
 man_ptext(struct man *m, int line, char *buf, int offs)  man_ptext(struct man *m, int line, char *buf, int offs)
 {  {
         int              i;          int              i;
Line 372 
Line 408 
         if (MAN_LITERAL & m->flags) {          if (MAN_LITERAL & m->flags) {
                 if ( ! man_word_alloc(m, line, offs, buf + offs))                  if ( ! man_word_alloc(m, line, offs, buf + offs))
                         return(0);                          return(0);
                 goto descope;                  return(man_descope(m, line, offs));
         }          }
   
         /* Pump blank lines directly into the backend. */          /* Pump blank lines directly into the backend. */
Line 384 
Line 420 
                 /* Allocate a blank entry. */                  /* Allocate a blank entry. */
                 if ( ! man_word_alloc(m, line, offs, ""))                  if ( ! man_word_alloc(m, line, offs, ""))
                         return(0);                          return(0);
                 goto descope;                  return(man_descope(m, line, offs));
         }          }
   
         /*          /*
Line 421 
Line 457 
         if (mandoc_eos(buf, (size_t)i, 0))          if (mandoc_eos(buf, (size_t)i, 0))
                 m->last->flags |= MAN_EOS;                  m->last->flags |= MAN_EOS;
   
 descope:          return(man_descope(m, line, offs));
         /*  
          * Co-ordinate what happens with having a next-line scope open:  
          * first close out the element scope (if applicable), then close  
          * out the block scope (also if applicable).  
          */  
   
         if (MAN_ELINE & m->flags) {  
                 m->flags &= ~MAN_ELINE;  
                 if ( ! man_unscope(m, m->last->parent, MANDOCERR_MAX))  
                         return(0);  
         }  
   
         if ( ! (MAN_BLINE & m->flags))  
                 return(1);  
         m->flags &= ~MAN_BLINE;  
   
         if ( ! man_unscope(m, m->last->parent, MANDOCERR_MAX))  
                 return(0);  
         return(man_body_alloc(m, line, offs, m->last->tok));  
 }  }
   
   

Legend:
Removed from v.1.51  
changed lines
  Added in v.1.52