[BACK]Return to mdoc.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/mdoc.c between version 1.116 and 1.120

version 1.116, 2010/01/07 10:24:43 version 1.120, 2010/04/05 08:59:46
Line 26 
Line 26 
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   #include <time.h>
   
 #include "libmdoc.h"  #include "libmdoc.h"
 #include "libmandoc.h"  #include "libmandoc.h"
Line 143  const char * const *mdoc_argnames = __mdoc_argnames;
Line 144  const char * const *mdoc_argnames = __mdoc_argnames;
 static  void              mdoc_free1(struct mdoc *);  static  void              mdoc_free1(struct mdoc *);
 static  void              mdoc_alloc1(struct mdoc *);  static  void              mdoc_alloc1(struct mdoc *);
 static  struct mdoc_node *node_alloc(struct mdoc *, int, int,  static  struct mdoc_node *node_alloc(struct mdoc *, int, int,
                                 int, enum mdoc_type);                                  enum mdoct, enum mdoc_type);
 static  int               node_append(struct mdoc *,  static  int               node_append(struct mdoc *,
                                 struct mdoc_node *);                                  struct mdoc_node *);
 static  int               parsetext(struct mdoc *, int, char *);  static  int               parsetext(struct mdoc *, int, char *);
Line 341  mdoc_err(struct mdoc *m, int line, int pos, int iserr,
Line 342  mdoc_err(struct mdoc *m, int line, int pos, int iserr,
   
   
 int  int
 mdoc_macro(struct mdoc *m, int tok,  mdoc_macro(struct mdoc *m, enum mdoct tok,
                 int ln, int pp, int *pos, char *buf)                  int ln, int pp, int *pos, char *buf)
 {  {
   
           assert(tok < MDOC_MAX);
         /*          /*
          * If we're in the prologue, deny "body" macros.  Similarly, if           * If we're in the prologue, deny "body" macros.  Similarly, if
          * we're in the body, deny prologue calls.           * we're in the body, deny prologue calls.
          */           */
         if (MDOC_PROLOGUE & mdoc_macros[tok].flags &&          if (MDOC_PROLOGUE & mdoc_macros[tok].flags &&
                         MDOC_PBODY & m->flags)                          MDOC_PBODY & m->flags) {
                 return(mdoc_perr(m, ln, pp, EPROLBODY));                  if ( ! mdoc_pwarn(m, ln, pp, EBODYPROL))
                           return(0);
                   /*
                    * FIXME: do this in mdoc_action.c.
                    */
                   if (NULL == m->meta.title)
                           m->meta.title = mandoc_strdup("unknown");
                   if (NULL == m->meta.vol)
                           m->meta.vol = mandoc_strdup("local");
                   if (NULL == m->meta.os)
                           m->meta.os = mandoc_strdup("local");
                   if (0 == m->meta.date)
                           m->meta.date = time(NULL);
                   m->flags |= MDOC_PBODY;
           }
         if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) &&          if ( ! (MDOC_PROLOGUE & mdoc_macros[tok].flags) &&
                         ! (MDOC_PBODY & m->flags))                          ! (MDOC_PBODY & m->flags))
                 return(mdoc_perr(m, ln, pp, EBODYPROL));                  return(mdoc_perr(m, ln, pp, EBODYPROL));
Line 424  node_append(struct mdoc *mdoc, struct mdoc_node *p)
Line 441  node_append(struct mdoc *mdoc, struct mdoc_node *p)
   
   
 static struct mdoc_node *  static struct mdoc_node *
 node_alloc(struct mdoc *m, int line,  node_alloc(struct mdoc *m, int line, int pos,
                 int pos, int tok, enum mdoc_type type)                  enum mdoct tok, enum mdoc_type type)
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
Line 434  node_alloc(struct mdoc *m, int line, 
Line 451  node_alloc(struct mdoc *m, int line, 
         p->line = line;          p->line = line;
         p->pos = pos;          p->pos = pos;
         p->tok = tok;          p->tok = tok;
         if (MDOC_TEXT != (p->type = type))          p->type = type;
                 assert(p->tok >= 0);  
   
         return(p);          return(p);
 }  }
   
   
 int  int
 mdoc_tail_alloc(struct mdoc *m, int line, int pos, int tok)  mdoc_tail_alloc(struct mdoc *m, int line, int pos, enum mdoct tok)
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
Line 455  mdoc_tail_alloc(struct mdoc *m, int line, int pos, int
Line 471  mdoc_tail_alloc(struct mdoc *m, int line, int pos, int
   
   
 int  int
 mdoc_head_alloc(struct mdoc *m, int line, int pos, int tok)  mdoc_head_alloc(struct mdoc *m, int line, int pos, enum mdoct tok)
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
Line 471  mdoc_head_alloc(struct mdoc *m, int line, int pos, int
Line 487  mdoc_head_alloc(struct mdoc *m, int line, int pos, int
   
   
 int  int
 mdoc_body_alloc(struct mdoc *m, int line, int pos, int tok)  mdoc_body_alloc(struct mdoc *m, int line, int pos, enum mdoct tok)
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
Line 485  mdoc_body_alloc(struct mdoc *m, int line, int pos, int
Line 501  mdoc_body_alloc(struct mdoc *m, int line, int pos, int
   
 int  int
 mdoc_block_alloc(struct mdoc *m, int line, int pos,  mdoc_block_alloc(struct mdoc *m, int line, int pos,
                 int tok, struct mdoc_arg *args)                  enum mdoct tok, struct mdoc_arg *args)
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
Line 502  mdoc_block_alloc(struct mdoc *m, int line, int pos, 
Line 518  mdoc_block_alloc(struct mdoc *m, int line, int pos, 
   
 int  int
 mdoc_elem_alloc(struct mdoc *m, int line, int pos,  mdoc_elem_alloc(struct mdoc *m, int line, int pos,
                 int tok, struct mdoc_arg *args)                  enum mdoct tok, struct mdoc_arg *args)
 {  {
         struct mdoc_node *p;          struct mdoc_node *p;
   
Line 599  parsetext(struct mdoc *m, int line, char *buf)
Line 615  parsetext(struct mdoc *m, int line, char *buf)
         for (i = 0; ' ' == buf[i]; i++)          for (i = 0; ' ' == buf[i]; i++)
                 /* Skip leading whitespace. */ ;                  /* Skip leading whitespace. */ ;
   
         if ('\0' == buf[i])          if ('\0' == buf[i]) {
                 return(mdoc_perr(m, line, 0, ENOBLANK));                  if ( ! mdoc_pwarn(m, line, 0, ENOBLANK))
                           return(0);
                   /*
                    * Assume that a `Pp' should be inserted in the case of
                    * a blank line.  Technically, blank lines aren't
                    * allowed, but enough manuals assume this behaviour
                    * that we want to work around it.
                    */
                   if ( ! mdoc_elem_alloc(m, line, 0, MDOC_Pp, NULL))
                           return(0);
           }
   
         /*          /*
          * Break apart a free-form line into tokens.  Spaces are           * Break apart a free-form line into tokens.  Spaces are

Legend:
Removed from v.1.116  
changed lines
  Added in v.1.120

CVSweb