[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.362 and 1.363

version 1.362, 2018/08/17 20:33:38 version 1.363, 2018/12/03 21:00:11
Line 64  static size_t  macro2len(enum roff_tok);
Line 64  static size_t  macro2len(enum roff_tok);
 static  void     rewrite_macro2len(struct roff_man *, char **);  static  void     rewrite_macro2len(struct roff_man *, char **);
 static  int      similar(const char *, const char *);  static  int      similar(const char *, const char *);
   
   static  void     post_abort(POST_ARGS);
 static  void     post_an(POST_ARGS);  static  void     post_an(POST_ARGS);
 static  void     post_an_norm(POST_ARGS);  static  void     post_an_norm(POST_ARGS);
 static  void     post_at(POST_ARGS);  static  void     post_at(POST_ARGS);
Line 151  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
Line 152  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
         post_nd,        /* Nd */          post_nd,        /* Nd */
         post_nm,        /* Nm */          post_nm,        /* Nm */
         post_delim_nb,  /* Op */          post_delim_nb,  /* Op */
         post_obsolete,  /* Ot */          post_abort,     /* Ot */
         post_defaults,  /* Pa */          post_defaults,  /* Pa */
         post_rv,        /* Rv */          post_rv,        /* Rv */
         post_st,        /* St */          post_st,        /* St */
Line 224  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
Line 225  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
         post_obsolete,  /* Fr */          post_obsolete,  /* Fr */
         post_eoln,      /* Ud */          post_eoln,      /* Ud */
         post_lb,        /* Lb */          post_lb,        /* Lb */
         post_par,       /* Lp */          post_abort,     /* Lp */
         post_delim_nb,  /* Lk */          post_delim_nb,  /* Lk */
         post_defaults,  /* Mt */          post_defaults,  /* Mt */
         post_delim_nb,  /* Brq */          post_delim_nb,  /* Brq */
Line 285  static const char * const secnames[SEC__MAX] = {
Line 286  static const char * const secnames[SEC__MAX] = {
 };  };
   
   
   /* Validate the subtree rooted at mdoc->last. */
 void  void
 mdoc_node_validate(struct roff_man *mdoc)  mdoc_node_validate(struct roff_man *mdoc)
 {  {
         struct roff_node *n, *np;          struct roff_node *n, *np;
         const v_post *p;          const v_post *p;
   
           /*
            * Translate obsolete macros to modern macros first
            * such that later code does not need to look
            * for the obsolete versions.
            */
   
         n = mdoc->last;          n = mdoc->last;
           switch (n->tok) {
           case MDOC_Lp:
                   n->tok = MDOC_Pp;
                   break;
           case MDOC_Ot:
                   post_obsolete(mdoc);
                   n->tok = MDOC_Ft;
                   break;
           default:
                   break;
           }
   
           /*
            * Iterate over all children, recursing into each one
            * in turn, depth-first.
            */
   
         mdoc->last = mdoc->last->child;          mdoc->last = mdoc->last->child;
         while (mdoc->last != NULL) {          while (mdoc->last != NULL) {
                 mdoc_node_validate(mdoc);                  mdoc_node_validate(mdoc);
Line 301  mdoc_node_validate(struct roff_man *mdoc)
Line 326  mdoc_node_validate(struct roff_man *mdoc)
                         mdoc->last = mdoc->last->next;                          mdoc->last = mdoc->last->next;
         }          }
   
           /* Finally validate the macro itself. */
   
         mdoc->last = n;          mdoc->last = n;
         mdoc->next = ROFF_NEXT_SIBLING;          mdoc->next = ROFF_NEXT_SIBLING;
         switch (n->type) {          switch (n->type) {
Line 487  check_toptext(struct roff_man *mdoc, int ln, int pos, 
Line 514  check_toptext(struct roff_man *mdoc, int ln, int pos, 
 }  }
   
 static void  static void
   post_abort(POST_ARGS)
   {
           abort();
   }
   
   static void
 post_delim(POST_ARGS)  post_delim(POST_ARGS)
 {  {
         const struct roff_node  *nch;          const struct roff_node  *nch;
Line 1263  post_nm(POST_ARGS)
Line 1296  post_nm(POST_ARGS)
             n->child->type == ROFFT_TEXT && mdoc->meta.msec != NULL)              n->child->type == ROFFT_TEXT && mdoc->meta.msec != NULL)
                 mandoc_xr_add(mdoc->meta.msec, n->child->string, -1, -1);                  mandoc_xr_add(mdoc->meta.msec, n->child->string, -1, -1);
   
         if (n->last != NULL &&          if (n->last != NULL && n->last->tok == MDOC_Pp)
             (n->last->tok == MDOC_Pp ||  
              n->last->tok == MDOC_Lp))  
                 mdoc_node_relink(mdoc, n->last);                  mdoc_node_relink(mdoc, n->last);
   
         if (mdoc->meta.name == NULL)          if (mdoc->meta.name == NULL)
Line 1618  post_bl_block(POST_ARGS)
Line 1649  post_bl_block(POST_ARGS)
                 while (nc != NULL) {                  while (nc != NULL) {
                         switch (nc->tok) {                          switch (nc->tok) {
                         case MDOC_Pp:                          case MDOC_Pp:
                         case MDOC_Lp:  
                         case ROFF_br:                          case ROFF_br:
                                 break;                                  break;
                         default:                          default:
Line 2492  post_ignpar(POST_ARGS)
Line 2522  post_ignpar(POST_ARGS)
         }          }
   
         if ((np = mdoc->last->child) != NULL)          if ((np = mdoc->last->child) != NULL)
                 if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) {                  if (np->tok == MDOC_Pp) {
                         mandoc_vmsg(MANDOCERR_PAR_SKIP,                          mandoc_vmsg(MANDOCERR_PAR_SKIP,
                             mdoc->parse, np->line, np->pos,                              mdoc->parse, np->line, np->pos,
                             "%s after %s", roff_name[np->tok],                              "%s after %s", roff_name[np->tok],
Line 2501  post_ignpar(POST_ARGS)
Line 2531  post_ignpar(POST_ARGS)
                 }                  }
   
         if ((np = mdoc->last->last) != NULL)          if ((np = mdoc->last->last) != NULL)
                 if (np->tok == MDOC_Pp || np->tok == MDOC_Lp) {                  if (np->tok == MDOC_Pp) {
                         mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,                          mandoc_vmsg(MANDOCERR_PAR_SKIP, mdoc->parse,
                             np->line, np->pos, "%s at the end of %s",                              np->line, np->pos, "%s at the end of %s",
                             roff_name[np->tok],                              roff_name[np->tok],
Line 2522  post_prevpar(POST_ARGS)
Line 2552  post_prevpar(POST_ARGS)
                 return;                  return;
   
         /*          /*
          * Don't allow prior `Lp' or `Pp' prior to a paragraph-type           * Don't allow `Pp' prior to a paragraph-type
          * block:  `Lp', `Pp', or non-compact `Bd' or `Bl'.           * block: `Pp' or non-compact `Bd' or `Bl'.
          */           */
   
         if (n->prev->tok != MDOC_Pp &&          if (n->prev->tok != MDOC_Pp && n->prev->tok != ROFF_br)
             n->prev->tok != MDOC_Lp &&  
             n->prev->tok != ROFF_br)  
                 return;                  return;
         if (n->tok == MDOC_Bl && n->norm->Bl.comp)          if (n->tok == MDOC_Bl && n->norm->Bl.comp)
                 return;                  return;
Line 2566  post_par(POST_ARGS)
Line 2594  post_par(POST_ARGS)
                 np = mdoc->last->parent;                  np = mdoc->last->parent;
                 if (np->tok != MDOC_Sh && np->tok != MDOC_Ss)                  if (np->tok != MDOC_Sh && np->tok != MDOC_Ss)
                         return;                          return;
         } else if (np->tok != MDOC_Pp && np->tok != MDOC_Lp &&          } else if (np->tok != MDOC_Pp &&
             (mdoc->last->tok != ROFF_br ||              (mdoc->last->tok != ROFF_br ||
              (np->tok != ROFF_sp && np->tok != ROFF_br)))               (np->tok != ROFF_sp && np->tok != ROFF_br)))
                 return;                  return;

Legend:
Removed from v.1.362  
changed lines
  Added in v.1.363

CVSweb