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

Diff for /mandoc/Attic/man_action.c between version 1.34 and 1.39

version 1.34, 2010/05/15 22:44:04 version 1.39, 2010/05/26 14:03:54
Line 22 
Line 22 
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
   
   #include "mandoc.h"
 #include "libman.h"  #include "libman.h"
 #include "libmandoc.h"  #include "libmandoc.h"
   
Line 32  struct actions {
Line 33  struct actions {
 static  int       post_TH(struct man *);  static  int       post_TH(struct man *);
 static  int       post_fi(struct man *);  static  int       post_fi(struct man *);
 static  int       post_nf(struct man *);  static  int       post_nf(struct man *);
   static  int       post_AT(struct man *);
   static  int       post_UC(struct man *);
   
 const   struct actions man_actions[MAN_MAX] = {  const   struct actions man_actions[MAN_MAX] = {
         { NULL }, /* br */          { NULL }, /* br */
Line 64  const struct actions man_actions[MAN_MAX] = {
Line 67  const struct actions man_actions[MAN_MAX] = {
         { NULL }, /* RE */          { NULL }, /* RE */
         { NULL }, /* RS */          { NULL }, /* RS */
         { NULL }, /* DT */          { NULL }, /* DT */
         { NULL }, /* UC */          { post_UC }, /* UC */
         { NULL }, /* PD */          { NULL }, /* PD */
         { NULL }, /* Sp */          { NULL }, /* Sp */
         { post_nf }, /* Vb */          { post_nf }, /* Vb */
         { post_fi }, /* Ve */          { post_fi }, /* Ve */
           { post_AT }, /* AT */
 };  };
   
   
Line 100  post_fi(struct man *m)
Line 104  post_fi(struct man *m)
 {  {
   
         if ( ! (MAN_LITERAL & m->flags))          if ( ! (MAN_LITERAL & m->flags))
                 if ( ! man_nwarn(m, m->last, WNLITERAL))                  if ( ! man_nmsg(m, m->last, MANDOCERR_NOSCOPE))
                         return(0);                          return(0);
         m->flags &= ~MAN_LITERAL;          m->flags &= ~MAN_LITERAL;
         return(1);          return(1);
Line 112  post_nf(struct man *m)
Line 116  post_nf(struct man *m)
 {  {
   
         if (MAN_LITERAL & m->flags)          if (MAN_LITERAL & m->flags)
                 if ( ! man_nwarn(m, m->last, WOLITERAL))                  if ( ! man_nmsg(m, m->last, MANDOCERR_SCOPEREP))
                         return(0);                          return(0);
         m->flags |= MAN_LITERAL;          m->flags |= MAN_LITERAL;
         return(1);          return(1);
Line 132  post_TH(struct man *m)
Line 136  post_TH(struct man *m)
                 free(m->meta.source);                  free(m->meta.source);
         if (m->meta.msec)          if (m->meta.msec)
                 free(m->meta.msec);                  free(m->meta.msec);
           if (m->meta.rawdate)
                   free(m->meta.rawdate);
   
         m->meta.title = m->meta.vol =          m->meta.title = m->meta.vol = m->meta.rawdate =
                 m->meta.msec = m->meta.source = NULL;                  m->meta.msec = m->meta.source = NULL;
         m->meta.date = 0;          m->meta.date = 0;
   
Line 151  post_TH(struct man *m)
Line 157  post_TH(struct man *m)
   
         /* TITLE MSEC ->DATE<- SOURCE VOL */          /* TITLE MSEC ->DATE<- SOURCE VOL */
   
           /*
            * Try to parse the date.  If this works, stash the epoch (this
            * is optimal because we can reformat it in the canonical form).
            * If it doesn't parse, isn't specified at all, or is an empty
            * string, then use the current date.
            */
   
         n = n->next;          n = n->next;
         if (n) {          if (n && n->string && *n->string) {
                 m->meta.date = mandoc_a2time                  m->meta.date = mandoc_a2time
                         (MTIME_ISO_8601, n->string);                          (MTIME_ISO_8601, n->string);
                 if (0 == m->meta.date) {                  if (0 == m->meta.date) {
                         if ( ! man_nwarn(m, n, WDATE))                          if ( ! man_nmsg(m, n, MANDOCERR_BADDATE))
                                 return(0);                                  return(0);
                         m->meta.date = time(NULL);                          m->meta.rawdate = mandoc_strdup(n->string);
                 }                  }
         } else          } else
                 m->meta.date = time(NULL);                  m->meta.date = time(NULL);
Line 178  post_TH(struct man *m)
Line 191  post_TH(struct man *m)
          * meta-data.           * meta-data.
          */           */
         man_node_delete(m, m->last);          man_node_delete(m, m->last);
           return(1);
   }
   
   
   static int
   post_AT(struct man *m)
   {
           static const char * const unix_versions[] = {
               "7th Edition",
               "System III",
               "System V",
               "System V Release 2",
           };
   
           const char      *p, *s;
           struct man_node *n, *nn;
   
           n = m->last->child;
   
           if (NULL == n || MAN_TEXT != n->type)
                   p = unix_versions[0];
           else {
                   s = n->string;
                   if (0 == strcmp(s, "3"))
                           p = unix_versions[0];
                   else if (0 == strcmp(s, "4"))
                           p = unix_versions[1];
                   else if (0 == strcmp(s, "5")) {
                           nn = n->next;
                           if (nn && MAN_TEXT == nn->type && nn->string[0])
                                   p = unix_versions[3];
                           else
                                   p = unix_versions[2];
                   } else
                           p = unix_versions[0];
           }
   
           if (m->meta.source)
                   free(m->meta.source);
   
           m->meta.source = mandoc_strdup(p);
   
           return(1);
   }
   
   
   static int
   post_UC(struct man *m)
   {
           static const char * const bsd_versions[] = {
               "3rd Berkeley Distribution",
               "4th Berkeley Distribution",
               "4.2 Berkeley Distribution",
               "4.3 Berkeley Distribution",
               "4.4 Berkeley Distribution",
           };
   
           const char      *p, *s;
           struct man_node *n;
   
           n = m->last->child;
   
           if (NULL == n || MAN_TEXT != n->type)
                   p = bsd_versions[0];
           else {
                   s = n->string;
                   if (0 == strcmp(s, "3"))
                           p = bsd_versions[0];
                   else if (0 == strcmp(s, "4"))
                           p = bsd_versions[1];
                   else if (0 == strcmp(s, "5"))
                           p = bsd_versions[2];
                   else if (0 == strcmp(s, "6"))
                           p = bsd_versions[3];
                   else if (0 == strcmp(s, "7"))
                           p = bsd_versions[4];
                   else
                           p = bsd_versions[0];
           }
   
           if (m->meta.source)
                   free(m->meta.source);
   
           m->meta.source = mandoc_strdup(p);
   
         return(1);          return(1);
 }  }

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.39

CVSweb