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

Diff for /mandoc/mdoc_validate.c between version 1.311 and 1.316

version 1.311, 2017/01/08 00:11:24 version 1.316, 2017/01/10 23:36:34
Line 104  static void  post_sm(POST_ARGS);
Line 104  static void  post_sm(POST_ARGS);
 static  void     post_st(POST_ARGS);  static  void     post_st(POST_ARGS);
 static  void     post_std(POST_ARGS);  static  void     post_std(POST_ARGS);
 static  void     post_xr(POST_ARGS);  static  void     post_xr(POST_ARGS);
   static  void     post_xx(POST_ARGS);
   
 static  v_post mdoc_valids[MDOC_MAX] = {  static  v_post mdoc_valids[MDOC_MAX] = {
         NULL,           /* Ap */          NULL,           /* Ap */
Line 166  static v_post mdoc_valids[MDOC_MAX] = {
Line 167  static v_post mdoc_valids[MDOC_MAX] = {
         post_bf,        /* Bf */          post_bf,        /* Bf */
         NULL,           /* Bo */          NULL,           /* Bo */
         NULL,           /* Bq */          NULL,           /* Bq */
         NULL,           /* Bsx */          post_xx,        /* Bsx */
         post_bx,        /* Bx */          post_bx,        /* Bx */
         post_obsolete,  /* Db */          post_obsolete,  /* Db */
         NULL,           /* Dc */          NULL,           /* Dc */
Line 176  static v_post mdoc_valids[MDOC_MAX] = {
Line 177  static v_post mdoc_valids[MDOC_MAX] = {
         NULL,           /* Ef */          NULL,           /* Ef */
         NULL,           /* Em */          NULL,           /* Em */
         NULL,           /* Eo */          NULL,           /* Eo */
         NULL,           /* Fx */          post_xx,        /* Fx */
         NULL,           /* Ms */          NULL,           /* Ms */
         NULL,           /* No */          NULL,           /* No */
         post_ns,        /* Ns */          post_ns,        /* Ns */
         NULL,           /* Nx */          post_xx,        /* Nx */
         NULL,           /* Ox */          post_xx,        /* Ox */
         NULL,           /* Pc */          NULL,           /* Pc */
         NULL,           /* Pf */          NULL,           /* Pf */
         NULL,           /* Po */          NULL,           /* Po */
Line 199  static v_post mdoc_valids[MDOC_MAX] = {
Line 200  static v_post mdoc_valids[MDOC_MAX] = {
         post_hyph,      /* Sx */          post_hyph,      /* Sx */
         NULL,           /* Sy */          NULL,           /* Sy */
         NULL,           /* Tn */          NULL,           /* Tn */
         NULL,           /* Ux */          post_xx,        /* Ux */
         NULL,           /* Xc */          NULL,           /* Xc */
         NULL,           /* Xo */          NULL,           /* Xo */
         post_fo,        /* Fo */          post_fo,        /* Fo */
Line 222  static v_post mdoc_valids[MDOC_MAX] = {
Line 223  static v_post mdoc_valids[MDOC_MAX] = {
         NULL,           /* %C */          NULL,           /* %C */
         post_es,        /* Es */          post_es,        /* Es */
         post_en,        /* En */          post_en,        /* En */
         NULL,           /* Dx */          post_xx,        /* Dx */
         NULL,           /* %Q */          NULL,           /* %Q */
         post_par,       /* br */          post_par,       /* br */
         post_par,       /* sp */          post_par,       /* sp */
Line 297  mdoc_node_validate(struct roff_man *mdoc)
Line 298  mdoc_node_validate(struct roff_man *mdoc)
         mdoc->next = ROFF_NEXT_SIBLING;          mdoc->next = ROFF_NEXT_SIBLING;
         switch (n->type) {          switch (n->type) {
         case ROFFT_TEXT:          case ROFFT_TEXT:
                 if (n->sec != SEC_SYNOPSIS || n->parent->tok != MDOC_Fd)                  if (n->sec != SEC_SYNOPSIS ||
                       (n->parent->tok != MDOC_Cd && n->parent->tok != MDOC_Fd))
                         check_text(mdoc, n->line, n->pos, n->string);                          check_text(mdoc, n->line, n->pos, n->string);
                 break;                  break;
         case ROFFT_EQN:          case ROFFT_EQN:
Line 316  mdoc_node_validate(struct roff_man *mdoc)
Line 318  mdoc_node_validate(struct roff_man *mdoc)
                  */                   */
   
                 if (n->child != NULL)                  if (n->child != NULL)
                         n->child->flags &= ~MDOC_DELIMC;                          n->child->flags &= ~NODE_DELIMC;
                 if (n->last != NULL)                  if (n->last != NULL)
                         n->last->flags &= ~MDOC_DELIMO;                          n->last->flags &= ~NODE_DELIMO;
   
                 /* Call the macro's postprocessor. */                  /* Call the macro's postprocessor. */
   
Line 944  post_defaults(POST_ARGS)
Line 946  post_defaults(POST_ARGS)
         case MDOC_Ar:          case MDOC_Ar:
                 mdoc->next = ROFF_NEXT_CHILD;                  mdoc->next = ROFF_NEXT_CHILD;
                 roff_word_alloc(mdoc, nn->line, nn->pos, "file");                  roff_word_alloc(mdoc, nn->line, nn->pos, "file");
                   mdoc->last->flags |= NODE_NOSRC;
                 roff_word_alloc(mdoc, nn->line, nn->pos, "...");                  roff_word_alloc(mdoc, nn->line, nn->pos, "...");
                   mdoc->last->flags |= NODE_NOSRC;
                 break;                  break;
         case MDOC_Pa:          case MDOC_Pa:
         case MDOC_Mt:          case MDOC_Mt:
                 mdoc->next = ROFF_NEXT_CHILD;                  mdoc->next = ROFF_NEXT_CHILD;
                 roff_word_alloc(mdoc, nn->line, nn->pos, "~");                  roff_word_alloc(mdoc, nn->line, nn->pos, "~");
                   mdoc->last->flags |= NODE_NOSRC;
                 break;                  break;
         default:          default:
                 abort();                  abort();
Line 960  post_defaults(POST_ARGS)
Line 965  post_defaults(POST_ARGS)
 static void  static void
 post_at(POST_ARGS)  post_at(POST_ARGS)
 {  {
         struct roff_node        *n;          struct roff_node        *n, *nch;
         const char              *std_att;          const char              *att;
         char                    *att;  
   
         n = mdoc->last;          n = mdoc->last;
         if (n->child == NULL) {          nch = n->child;
                 mdoc->next = ROFF_NEXT_CHILD;  
                 roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX");  
                 mdoc->last = n;  
                 return;  
         }  
   
         /*          /*
          * If we have a child, look it up in the standard keys.  If a           * If we have a child, look it up in the standard keys.  If a
Line 978  post_at(POST_ARGS)
Line 977  post_at(POST_ARGS)
          * prefix "AT&T UNIX " to the existing data.           * prefix "AT&T UNIX " to the existing data.
          */           */
   
         n = n->child;          att = NULL;
         assert(n->type == ROFFT_TEXT);          if (nch != NULL && ((att = mdoc_a2att(nch->string)) == NULL))
         if ((std_att = mdoc_a2att(n->string)) == NULL) {  
                 mandoc_vmsg(MANDOCERR_AT_BAD, mdoc->parse,                  mandoc_vmsg(MANDOCERR_AT_BAD, mdoc->parse,
                     n->line, n->pos, "At %s", n->string);                      nch->line, nch->pos, "At %s", nch->string);
                 mandoc_asprintf(&att, "AT&T UNIX %s", n->string);  
         } else  
                 att = mandoc_strdup(std_att);  
   
         free(n->string);          mdoc->next = ROFF_NEXT_CHILD;
         n->string = att;          if (att != NULL) {
                   roff_word_alloc(mdoc, nch->line, nch->pos, att);
                   nch->flags |= NODE_NOPRT;
           } else
                   roff_word_alloc(mdoc, n->line, n->pos, "AT&T UNIX");
           mdoc->last->flags |= NODE_NOSRC;
           mdoc->last = n;
 }  }
   
 static void  static void
Line 1027  post_es(POST_ARGS)
Line 1028  post_es(POST_ARGS)
 }  }
   
 static void  static void
   post_xx(POST_ARGS)
   {
           struct roff_node        *n;
           const char              *os;
   
           n = mdoc->last;
           switch (n->tok) {
           case MDOC_Bsx:
                   os = "BSD/OS";
                   break;
           case MDOC_Dx:
                   os = "DragonFly";
                   break;
           case MDOC_Fx:
                   os = "FreeBSD";
                   break;
           case MDOC_Nx:
                   os = "NetBSD";
                   break;
           case MDOC_Ox:
                   os = "OpenBSD";
                   break;
           case MDOC_Ux:
                   os = "UNIX";
                   break;
           default:
                   abort();
           }
           mdoc->next = ROFF_NEXT_CHILD;
           roff_word_alloc(mdoc, n->line, n->pos, os);
           mdoc->last->flags |= NODE_NOSRC;
           mdoc->last = n;
   }
   
   static void
 post_it(POST_ARGS)  post_it(POST_ARGS)
 {  {
         struct roff_node *nbl, *nit, *nch;          struct roff_node *nbl, *nit, *nch;
Line 1551  static void
Line 1587  static void
 post_ns(POST_ARGS)  post_ns(POST_ARGS)
 {  {
   
         if (mdoc->last->flags & MDOC_LINE)          if (mdoc->last->flags & NODE_LINE)
                 mandoc_msg(MANDOCERR_NS_SKIP, mdoc->parse,                  mandoc_msg(MANDOCERR_NS_SKIP, mdoc->parse,
                     mdoc->last->line, mdoc->last->pos, NULL);                      mdoc->last->line, mdoc->last->pos, NULL);
 }  }
Line 1940  post_dd(POST_ARGS)
Line 1976  post_dd(POST_ARGS)
         char             *datestr;          char             *datestr;
   
         n = mdoc->last;          n = mdoc->last;
           n->flags |= NODE_NOPRT;
   
         if (mdoc->meta.date != NULL) {          if (mdoc->meta.date != NULL) {
                 mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,                  mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
                     n->line, n->pos, "Dd");                      n->line, n->pos, "Dd");
Line 1957  post_dd(POST_ARGS)
Line 1995  post_dd(POST_ARGS)
         if (n->child == NULL || n->child->string[0] == '\0') {          if (n->child == NULL || n->child->string[0] == '\0') {
                 mdoc->meta.date = mdoc->quick ? mandoc_strdup("") :                  mdoc->meta.date = mdoc->quick ? mandoc_strdup("") :
                     mandoc_normdate(mdoc->parse, NULL, n->line, n->pos);                      mandoc_normdate(mdoc->parse, NULL, n->line, n->pos);
                 goto out;                  return;
         }          }
   
         datestr = NULL;          datestr = NULL;
Line 1969  post_dd(POST_ARGS)
Line 2007  post_dd(POST_ARGS)
                     datestr, n->line, n->pos);                      datestr, n->line, n->pos);
                 free(datestr);                  free(datestr);
         }          }
 out:  
         roff_node_delete(mdoc, n);  
 }  }
   
 static void  static void
Line 1981  post_dt(POST_ARGS)
Line 2017  post_dt(POST_ARGS)
         char             *p;          char             *p;
   
         n = mdoc->last;          n = mdoc->last;
           n->flags |= NODE_NOPRT;
   
         if (mdoc->flags & MDOC_PBODY) {          if (mdoc->flags & MDOC_PBODY) {
                 mandoc_msg(MANDOCERR_DT_LATE, mdoc->parse,                  mandoc_msg(MANDOCERR_DT_LATE, mdoc->parse,
                     n->line, n->pos, "Dt");                      n->line, n->pos, "Dt");
                 goto out;                  return;
         }          }
   
         if (mdoc->meta.title != NULL)          if (mdoc->meta.title != NULL)
Line 2036  post_dt(POST_ARGS)
Line 2074  post_dt(POST_ARGS)
                     mdoc->parse, n->line, n->pos,                      mdoc->parse, n->line, n->pos,
                     "Dt %s", mdoc->meta.title);                      "Dt %s", mdoc->meta.title);
                 mdoc->meta.vol = mandoc_strdup("LOCAL");                  mdoc->meta.vol = mandoc_strdup("LOCAL");
                 goto out;  /* msec and arch remain NULL. */                  return;  /* msec and arch remain NULL. */
         }          }
   
         mdoc->meta.msec = mandoc_strdup(nn->string);          mdoc->meta.msec = mandoc_strdup(nn->string);
Line 2054  post_dt(POST_ARGS)
Line 2092  post_dt(POST_ARGS)
         /* Optional third argument: architecture. */          /* Optional third argument: architecture. */
   
         if ((nn = nn->next) == NULL)          if ((nn = nn->next) == NULL)
                 goto out;                  return;
   
         for (p = nn->string; *p != '\0'; p++)          for (p = nn->string; *p != '\0'; p++)
                 *p = tolower((unsigned char)*p);                  *p = tolower((unsigned char)*p);
Line 2065  post_dt(POST_ARGS)
Line 2103  post_dt(POST_ARGS)
         if ((nn = nn->next) != NULL)          if ((nn = nn->next) != NULL)
                 mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,                  mandoc_vmsg(MANDOCERR_ARG_EXCESS, mdoc->parse,
                     nn->line, nn->pos, "Dt ... %s", nn->string);                      nn->line, nn->pos, "Dt ... %s", nn->string);
   
 out:  
         roff_node_delete(mdoc, n);  
 }  }
   
 static void  static void
 post_bx(POST_ARGS)  post_bx(POST_ARGS)
 {  {
         struct roff_node        *n;          struct roff_node        *n, *nch;
   
           n = mdoc->last;
           nch = n->child;
   
           if (nch != NULL) {
                   mdoc->last = nch;
                   nch = nch->next;
                   mdoc->next = ROFF_NEXT_SIBLING;
                   roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns);
                   mdoc->last->flags |= NODE_NOSRC;
                   mdoc->next = ROFF_NEXT_SIBLING;
           } else
                   mdoc->next = ROFF_NEXT_CHILD;
           roff_word_alloc(mdoc, n->line, n->pos, "BSD");
           mdoc->last->flags |= NODE_NOSRC;
   
           if (nch == NULL) {
                   mdoc->last = n;
                   return;
           }
   
           roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns);
           mdoc->last->flags |= NODE_NOSRC;
           mdoc->next = ROFF_NEXT_SIBLING;
           roff_word_alloc(mdoc, n->line, n->pos, "-");
           mdoc->last->flags |= NODE_NOSRC;
           roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Ns);
           mdoc->last->flags |= NODE_NOSRC;
           mdoc->last = n;
   
         /*          /*
          * Make `Bx's second argument always start with an uppercase           * Make `Bx's second argument always start with an uppercase
          * letter.  Groff checks if it's an "accepted" term, but we just           * letter.  Groff checks if it's an "accepted" term, but we just
          * uppercase blindly.           * uppercase blindly.
          */           */
   
         if ((n = mdoc->last->child) != NULL && (n = n->next) != NULL)          *nch->string = (char)toupper((unsigned char)*nch->string);
                 *n->string = (char)toupper((unsigned char)*n->string);  
 }  }
   
 static void  static void
Line 2095  post_os(POST_ARGS)
Line 2158  post_os(POST_ARGS)
         struct roff_node *n;          struct roff_node *n;
   
         n = mdoc->last;          n = mdoc->last;
           n->flags |= NODE_NOPRT;
   
         if (mdoc->meta.os != NULL)          if (mdoc->meta.os != NULL)
                 mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,                  mandoc_msg(MANDOCERR_PROLOG_REP, mdoc->parse,
                     n->line, n->pos, "Os");                      n->line, n->pos, "Os");
Line 2115  post_os(POST_ARGS)
Line 2180  post_os(POST_ARGS)
         mdoc->meta.os = NULL;          mdoc->meta.os = NULL;
         deroff(&mdoc->meta.os, n);          deroff(&mdoc->meta.os, n);
         if (mdoc->meta.os)          if (mdoc->meta.os)
                 goto out;                  return;
   
         if (mdoc->defos) {          if (mdoc->defos) {
                 mdoc->meta.os = mandoc_strdup(mdoc->defos);                  mdoc->meta.os = mandoc_strdup(mdoc->defos);
                 goto out;                  return;
         }          }
   
 #ifdef OSNAME  #ifdef OSNAME
Line 2136  post_os(POST_ARGS)
Line 2201  post_os(POST_ARGS)
         }          }
         mdoc->meta.os = mandoc_strdup(defbuf);          mdoc->meta.os = mandoc_strdup(defbuf);
 #endif /*!OSNAME*/  #endif /*!OSNAME*/
   
 out:  
         roff_node_delete(mdoc, n);  
 }  }
   
 /*  /*

Legend:
Removed from v.1.311  
changed lines
  Added in v.1.316

CVSweb