[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.312 and 1.318

version 1.312, 2017/01/08 02:01:17 version 1.318, 2017/02/06 03:44:58
Line 51  enum check_ineq {
Line 51  enum check_ineq {
   
 typedef void    (*v_post)(POST_ARGS);  typedef void    (*v_post)(POST_ARGS);
   
   static  int      build_list(struct roff_man *, int);
 static  void     check_text(struct roff_man *, int, int, char *);  static  void     check_text(struct roff_man *, int, int, char *);
 static  void     check_argv(struct roff_man *,  static  void     check_argv(struct roff_man *,
                         struct roff_node *, struct mdoc_argv *);                          struct roff_node *, struct mdoc_argv *);
Line 95  static void  post_par(POST_ARGS);
Line 96  static void  post_par(POST_ARGS);
 static  void     post_prevpar(POST_ARGS);  static  void     post_prevpar(POST_ARGS);
 static  void     post_root(POST_ARGS);  static  void     post_root(POST_ARGS);
 static  void     post_rs(POST_ARGS);  static  void     post_rs(POST_ARGS);
   static  void     post_rv(POST_ARGS);
 static  void     post_sh(POST_ARGS);  static  void     post_sh(POST_ARGS);
 static  void     post_sh_head(POST_ARGS);  static  void     post_sh_head(POST_ARGS);
 static  void     post_sh_name(POST_ARGS);  static  void     post_sh_name(POST_ARGS);
Line 104  static void  post_sm(POST_ARGS);
Line 106  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 142  static v_post mdoc_valids[MDOC_MAX] = {
Line 145  static v_post mdoc_valids[MDOC_MAX] = {
         NULL,           /* Op */          NULL,           /* Op */
         post_obsolete,  /* Ot */          post_obsolete,  /* Ot */
         post_defaults,  /* Pa */          post_defaults,  /* Pa */
         post_std,       /* Rv */          post_rv,        /* Rv */
         post_st,        /* St */          post_st,        /* St */
         NULL,           /* Va */          NULL,           /* Va */
         NULL,           /* Vt */          NULL,           /* Vt */
Line 166  static v_post mdoc_valids[MDOC_MAX] = {
Line 169  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 179  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 202  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 225  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 317  mdoc_node_validate(struct roff_man *mdoc)
Line 320  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 620  post_bd(POST_ARGS)
Line 623  post_bd(POST_ARGS)
         }          }
 }  }
   
   /*
    * Stand-alone line macros.
    */
   
 static void  static void
 post_an_norm(POST_ARGS)  post_an_norm(POST_ARGS)
 {  {
Line 648  post_an_norm(POST_ARGS)
Line 655  post_an_norm(POST_ARGS)
 }  }
   
 static void  static void
   post_eoln(POST_ARGS)
   {
           struct roff_node        *n;
   
           n = mdoc->last;
           if (n->child != NULL)
                   mandoc_vmsg(MANDOCERR_ARG_SKIP, mdoc->parse,
                       n->line, n->pos, "%s %s",
                       mdoc_macronames[n->tok], n->child->string);
   
           while (n->child != NULL)
                   roff_node_delete(mdoc, n->child);
   
           roff_word_alloc(mdoc, n->line, n->pos, n->tok == MDOC_Bt ?
               "is currently in beta test." : "currently under development.");
           mdoc->last->flags |= NODE_EOS | NODE_NOSRC;
           mdoc->last = n;
   }
   
   static int
   build_list(struct roff_man *mdoc, int tok)
   {
           struct roff_node        *n;
           int                      ic;
   
           n = mdoc->last->next;
           for (ic = 1;; ic++) {
                   roff_elem_alloc(mdoc, n->line, n->pos, tok);
                   mdoc->last->flags |= NODE_NOSRC;
                   mdoc_node_relink(mdoc, n);
                   n = mdoc->last = mdoc->last->parent;
                   mdoc->next = ROFF_NEXT_SIBLING;
                   if (n->next == NULL)
                           return ic;
                   if (ic > 1 || n->next->next != NULL) {
                           roff_word_alloc(mdoc, n->line, n->pos, ",");
                           mdoc->last->flags |= NODE_DELIMC | NODE_NOSRC;
                   }
                   n = mdoc->last->next;
                   if (n->next == NULL) {
                           roff_word_alloc(mdoc, n->line, n->pos, "and");
                           mdoc->last->flags |= NODE_NOSRC;
                   }
           }
   }
   
   static void
   post_ex(POST_ARGS)
   {
           struct roff_node        *n;
           int                      ic;
   
           post_std(mdoc);
   
           n = mdoc->last;
           mdoc->next = ROFF_NEXT_CHILD;
           roff_word_alloc(mdoc, n->line, n->pos, "The");
           mdoc->last->flags |= NODE_NOSRC;
   
           if (mdoc->last->next != NULL)
                   ic = build_list(mdoc, MDOC_Nm);
           else if (mdoc->meta.name != NULL) {
                   roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Nm);
                   mdoc->last->flags |= NODE_NOSRC;
                   roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
                   mdoc->last->flags |= NODE_NOSRC;
                   mdoc->last = mdoc->last->parent;
                   mdoc->next = ROFF_NEXT_SIBLING;
                   ic = 1;
           } else {
                   mandoc_msg(MANDOCERR_EX_NONAME, mdoc->parse,
                       n->line, n->pos, "Ex");
                   ic = 0;
           }
   
           roff_word_alloc(mdoc, n->line, n->pos,
               ic > 1 ? "utilities exit\\~0" : "utility exits\\~0");
           mdoc->last->flags |= NODE_NOSRC;
           roff_word_alloc(mdoc, n->line, n->pos,
               "on success, and\\~>0 if an error occurs.");
           mdoc->last->flags |= NODE_EOS | NODE_NOSRC;
           mdoc->last = n;
   }
   
   static void
   post_lb(POST_ARGS)
   {
           struct roff_node        *n;
           const char              *p;
   
           n = mdoc->last;
           assert(n->child->type == ROFFT_TEXT);
           mdoc->next = ROFF_NEXT_CHILD;
   
           if ((p = mdoc_a2lib(n->child->string)) != NULL) {
                   n->child->flags |= NODE_NOPRT;
                   roff_word_alloc(mdoc, n->line, n->pos, p);
                   mdoc->last->flags = NODE_NOSRC;
                   mdoc->last = n;
                   return;
           }
   
           roff_word_alloc(mdoc, n->line, n->pos, "library");
           mdoc->last->flags = NODE_NOSRC;
           roff_word_alloc(mdoc, n->line, n->pos, "\\(Lq");
           mdoc->last->flags = NODE_DELIMO | NODE_NOSRC;
           mdoc->last = mdoc->last->next;
           roff_word_alloc(mdoc, n->line, n->pos, "\\(Rq");
           mdoc->last->flags = NODE_DELIMC | NODE_NOSRC;
           mdoc->last = n;
   }
   
   static void
   post_rv(POST_ARGS)
   {
           struct roff_node        *n;
           int                      ic;
   
           post_std(mdoc);
   
           n = mdoc->last;
           mdoc->next = ROFF_NEXT_CHILD;
           if (n->child != NULL) {
                   roff_word_alloc(mdoc, n->line, n->pos, "The");
                   mdoc->last->flags |= NODE_NOSRC;
                   ic = build_list(mdoc, MDOC_Fn);
                   roff_word_alloc(mdoc, n->line, n->pos,
                       ic > 1 ? "functions return" : "function returns");
                   mdoc->last->flags |= NODE_NOSRC;
                   roff_word_alloc(mdoc, n->line, n->pos,
                       "the value\\~0 if successful;");
           } else
                   roff_word_alloc(mdoc, n->line, n->pos, "Upon successful "
                       "completion, the value\\~0 is returned;");
           mdoc->last->flags |= NODE_NOSRC;
   
           roff_word_alloc(mdoc, n->line, n->pos, "otherwise "
               "the value\\~\\-1 is returned and the global variable");
           mdoc->last->flags |= NODE_NOSRC;
           roff_elem_alloc(mdoc, n->line, n->pos, MDOC_Va);
           mdoc->last->flags |= NODE_NOSRC;
           roff_word_alloc(mdoc, n->line, n->pos, "errno");
           mdoc->last->flags |= NODE_NOSRC;
           mdoc->last = mdoc->last->parent;
           mdoc->next = ROFF_NEXT_SIBLING;
           roff_word_alloc(mdoc, n->line, n->pos,
               "is set to indicate the error.");
           mdoc->last->flags |= NODE_EOS | NODE_NOSRC;
           mdoc->last = n;
   }
   
   static void
 post_std(POST_ARGS)  post_std(POST_ARGS)
 {  {
         struct roff_node *n;          struct roff_node *n;
Line 662  post_std(POST_ARGS)
Line 821  post_std(POST_ARGS)
 }  }
   
 static void  static void
   post_st(POST_ARGS)
   {
           struct roff_node         *n, *nch;
           const char               *p;
   
           n = mdoc->last;
           nch = n->child;
           assert(nch->type == ROFFT_TEXT);
   
           if ((p = mdoc_a2st(nch->string)) == NULL) {
                   mandoc_vmsg(MANDOCERR_ST_BAD, mdoc->parse,
                       nch->line, nch->pos, "St %s", nch->string);
                   roff_node_delete(mdoc, n);
                   return;
           }
   
           nch->flags |= NODE_NOPRT;
           mdoc->next = ROFF_NEXT_CHILD;
           roff_word_alloc(mdoc, nch->line, nch->pos, p);
           mdoc->last->flags |= NODE_NOSRC;
           mdoc->last= n;
   }
   
   static void
 post_obsolete(POST_ARGS)  post_obsolete(POST_ARGS)
 {  {
         struct roff_node *n;          struct roff_node *n;
Line 672  post_obsolete(POST_ARGS)
Line 855  post_obsolete(POST_ARGS)
                     n->line, n->pos, mdoc_macronames[n->tok]);                      n->line, n->pos, mdoc_macronames[n->tok]);
 }  }
   
   /*
    * Block macros.
    */
   
 static void  static void
 post_bf(POST_ARGS)  post_bf(POST_ARGS)
 {  {
Line 738  post_bf(POST_ARGS)
Line 925  post_bf(POST_ARGS)
 }  }
   
 static void  static void
 post_lb(POST_ARGS)  
 {  
         struct roff_node        *n;  
         const char              *stdlibname;  
         char                    *libname;  
   
         n = mdoc->last->child;  
         assert(n->type == ROFFT_TEXT);  
   
         if (NULL == (stdlibname = mdoc_a2lib(n->string)))  
                 mandoc_asprintf(&libname,  
                     "library \\(Lq%s\\(Rq", n->string);  
         else  
                 libname = mandoc_strdup(stdlibname);  
   
         free(n->string);  
         n->string = libname;  
 }  
   
 static void  
 post_eoln(POST_ARGS)  
 {  
         const struct roff_node *n;  
   
         n = mdoc->last;  
         if (n->child != NULL)  
                 mandoc_vmsg(MANDOCERR_ARG_SKIP,  
                     mdoc->parse, n->line, n->pos,  
                     "%s %s", mdoc_macronames[n->tok],  
                     n->child->string);  
 }  
   
 static void  
 post_fname(POST_ARGS)  post_fname(POST_ARGS)
 {  {
         const struct roff_node  *n;          const struct roff_node  *n;
Line 859  post_nm(POST_ARGS)
Line 1013  post_nm(POST_ARGS)
             (mdoc->lastsec == SEC_NAME && n->child == NULL))              (mdoc->lastsec == SEC_NAME && n->child == NULL))
                 mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse,                  mandoc_msg(MANDOCERR_NM_NONAME, mdoc->parse,
                     n->line, n->pos, "Nm");                      n->line, n->pos, "Nm");
   
           if ((n->type != ROFFT_ELEM && n->type != ROFFT_HEAD) ||
               (n->child != NULL && n->child->type == ROFFT_TEXT) ||
               mdoc->meta.name == NULL)
                   return;
   
           mdoc->next = ROFF_NEXT_CHILD;
           roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);
           mdoc->last->flags |= NODE_NOSRC;
           mdoc->last = n;
 }  }
   
 static void  static void
Line 945  post_defaults(POST_ARGS)
Line 1109  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 961  post_defaults(POST_ARGS)
Line 1128  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 979  post_at(POST_ARGS)
Line 1140  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 1028  post_es(POST_ARGS)
Line 1191  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 1414  post_root(POST_ARGS)
Line 1612  post_root(POST_ARGS)
 }  }
   
 static void  static void
 post_st(POST_ARGS)  
 {  
         struct roff_node         *n, *nch;  
         const char               *p;  
   
         n = mdoc->last;  
         nch = n->child;  
   
         assert(nch->type == ROFFT_TEXT);  
   
         if ((p = mdoc_a2st(nch->string)) == NULL) {  
                 mandoc_vmsg(MANDOCERR_ST_BAD, mdoc->parse,  
                     nch->line, nch->pos, "St %s", nch->string);  
                 roff_node_delete(mdoc, n);  
         } else {  
                 free(nch->string);  
                 nch->string = mandoc_strdup(p);  
         }  
 }  
   
 static void  
 post_rs(POST_ARGS)  post_rs(POST_ARGS)
 {  {
         struct roff_node *np, *nch, *next, *prev;          struct roff_node *np, *nch, *next, *prev;
Line 1552  static void
Line 1729  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 1941  post_dd(POST_ARGS)
Line 2118  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 1958  post_dd(POST_ARGS)
Line 2137  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 1970  post_dd(POST_ARGS)
Line 2149  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 1982  post_dt(POST_ARGS)
Line 2159  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 2037  post_dt(POST_ARGS)
Line 2216  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 2055  post_dt(POST_ARGS)
Line 2234  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 2066  post_dt(POST_ARGS)
Line 2245  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 2096  post_os(POST_ARGS)
Line 2300  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 2116  post_os(POST_ARGS)
Line 2322  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 2137  post_os(POST_ARGS)
Line 2343  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);  
 }  
   
 /*  
  * If no argument is provided,  
  * fill in the name of the current manual page.  
  */  
 static void  
 post_ex(POST_ARGS)  
 {  
         struct roff_node *n;  
   
         post_std(mdoc);  
   
         n = mdoc->last;  
         if (n->child != NULL)  
                 return;  
   
         if (mdoc->meta.name == NULL) {  
                 mandoc_msg(MANDOCERR_EX_NONAME, mdoc->parse,  
                     n->line, n->pos, "Ex");  
                 return;  
         }  
   
         mdoc->next = ROFF_NEXT_CHILD;  
         roff_word_alloc(mdoc, n->line, n->pos, mdoc->meta.name);  
         mdoc->last = n;  
 }  }
   
 enum roff_sec  enum roff_sec

Legend:
Removed from v.1.312  
changed lines
  Added in v.1.318

CVSweb