[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.335 and 1.339

version 1.335, 2017/06/11 14:24:55 version 1.339, 2017/06/17 22:43:14
Line 53  typedef void (*v_post)(POST_ARGS);
Line 53  typedef void (*v_post)(POST_ARGS);
   
 static  int      build_list(struct roff_man *, int);  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_bsd(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 *);
 static  void     check_args(struct roff_man *, struct roff_node *);  static  void     check_args(struct roff_man *, struct roff_node *);
   static  void     check_toptext(struct roff_man *, int, int, const char *);
 static  int      child_an(const struct roff_node *);  static  int      child_an(const struct roff_node *);
 static  size_t          macro2len(enum roff_tok);  static  size_t          macro2len(enum roff_tok);
 static  void     rewrite_macro2len(struct roff_man *, char **);  static  void     rewrite_macro2len(struct roff_man *, char **);
Line 304  mdoc_node_validate(struct roff_man *mdoc)
Line 304  mdoc_node_validate(struct roff_man *mdoc)
                 if (n->sec != SEC_SYNOPSIS ||                  if (n->sec != SEC_SYNOPSIS ||
                     (n->parent->tok != MDOC_Cd && n->parent->tok != MDOC_Fd))                      (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);
                 if (n->parent->tok == MDOC_Sh ||                  if (n->parent->tok == MDOC_It ||
                     n->parent->tok == MDOC_Ss ||                      (n->parent->type == ROFFT_BODY &&
                     n->parent->tok == MDOC_It)                       (n->parent->tok == MDOC_Sh ||
                         check_bsd(mdoc, n->line, n->pos, n->string);                        n->parent->tok == MDOC_Ss)))
                           check_toptext(mdoc, n->line, n->pos, n->string);
                 break;                  break;
         case ROFFT_EQN:          case ROFFT_EQN:
         case ROFFT_TBL:          case ROFFT_TBL:
Line 390  check_text(struct roff_man *mdoc, int ln, int pos, cha
Line 391  check_text(struct roff_man *mdoc, int ln, int pos, cha
 }  }
   
 static void  static void
 check_bsd(struct roff_man *mdoc, int ln, int pos, char *p)  check_toptext(struct roff_man *mdoc, int ln, int pos, const char *p)
 {  {
         const char      *cp;          const char      *cp, *cpr;
   
           if (*p == '\0')
                   return;
   
         if ((cp = strstr(p, "OpenBSD")) != NULL)          if ((cp = strstr(p, "OpenBSD")) != NULL)
                 mandoc_msg(MANDOCERR_BX, mdoc->parse,                  mandoc_msg(MANDOCERR_BX, mdoc->parse,
                     ln, pos + (cp - p), "Ox");                      ln, pos + (cp - p), "Ox");
Line 406  check_bsd(struct roff_man *mdoc, int ln, int pos, char
Line 410  check_bsd(struct roff_man *mdoc, int ln, int pos, char
         if ((cp = strstr(p, "DragonFly")) != NULL)          if ((cp = strstr(p, "DragonFly")) != NULL)
                 mandoc_msg(MANDOCERR_BX, mdoc->parse,                  mandoc_msg(MANDOCERR_BX, mdoc->parse,
                     ln, pos + (cp - p), "Dx");                      ln, pos + (cp - p), "Dx");
   
           cp = p;
           while ((cp = strstr(cp + 1, "()")) != NULL) {
                   for (cpr = cp - 1; cpr >= p; cpr--)
                           if (*cpr != '_' && !isalnum((unsigned char)*cpr))
                                   break;
                   if ((cpr < p || *cpr == ' ') && cpr + 1 < cp) {
                           cpr++;
                           mandoc_vmsg(MANDOCERR_FUNC, mdoc->parse,
                               ln, pos + (cpr - p),
                               "%.*s()", (int)(cp - cpr), cpr);
                   }
           }
 }  }
   
 static void  static void
Line 1773  post_root(POST_ARGS)
Line 1790  post_root(POST_ARGS)
         /* Add missing prologue data. */          /* Add missing prologue data. */
   
         if (mdoc->meta.date == NULL)          if (mdoc->meta.date == NULL)
                 mdoc->meta.date = mdoc->quick ?                  mdoc->meta.date = mdoc->quick ? mandoc_strdup("") :
                     mandoc_strdup("") :                      mandoc_normdate(mdoc, NULL, 0, 0);
                     mandoc_normdate(mdoc->parse, NULL, 0, 0);  
   
         if (mdoc->meta.title == NULL) {          if (mdoc->meta.title == NULL) {
                 mandoc_msg(MANDOCERR_DT_NOTITLE,                  mandoc_msg(MANDOCERR_DT_NOTITLE,
Line 1790  post_root(POST_ARGS)
Line 1806  post_root(POST_ARGS)
                 mandoc_msg(MANDOCERR_OS_MISSING,                  mandoc_msg(MANDOCERR_OS_MISSING,
                     mdoc->parse, 0, 0, NULL);                      mdoc->parse, 0, 0, NULL);
                 mdoc->meta.os = mandoc_strdup("");                  mdoc->meta.os = mandoc_strdup("");
         }          } else if (mdoc->meta.os_e &&
               (mdoc->meta.rcsids & (1 << mdoc->meta.os_e)) == 0)
                   mandoc_msg(MANDOCERR_RCS_MISSING,
                       mdoc->parse, 0, 0, NULL);
   
         /* Check that we begin with a proper `Sh'. */          /* Check that we begin with a proper `Sh'. */
   
Line 2331  post_dd(POST_ARGS)
Line 2350  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, NULL, n->line, n->pos);
                 return;                  return;
         }          }
   
Line 2340  post_dd(POST_ARGS)
Line 2359  post_dd(POST_ARGS)
         if (mdoc->quick)          if (mdoc->quick)
                 mdoc->meta.date = datestr;                  mdoc->meta.date = datestr;
         else {          else {
                 mdoc->meta.date = mandoc_normdate(mdoc->parse,                  mdoc->meta.date = mandoc_normdate(mdoc,
                     datestr, n->line, n->pos);                      datestr, n->line, n->pos);
                 free(datestr);                  free(datestr);
         }          }
Line 2552  post_os(POST_ARGS)
Line 2571  post_os(POST_ARGS)
 out:    mdoc->meta.os_e = strstr(mdoc->meta.os, "OpenBSD") != NULL ?  out:    mdoc->meta.os_e = strstr(mdoc->meta.os, "OpenBSD") != NULL ?
             MDOC_OS_OPENBSD : strstr(mdoc->meta.os, "NetBSD") != NULL ?              MDOC_OS_OPENBSD : strstr(mdoc->meta.os, "NetBSD") != NULL ?
             MDOC_OS_NETBSD : MDOC_OS_OTHER;              MDOC_OS_NETBSD : MDOC_OS_OTHER;
   
           /*
            * This is the earliest point where we can check
            * Mdocdate conventions because we don't know
            * the operating system earlier.
            */
   
           while (n->tok != MDOC_Dd)
                   if ((n = n->prev) == NULL)
                           return;
           if ((n = n->child) == NULL)
                   return;
           if (strncmp(n->string, "$" "Mdocdate", 9)) {
                   if (mdoc->meta.os_e == MDOC_OS_OPENBSD)
                           mandoc_vmsg(MANDOCERR_MDOCDATE_MISSING,
                               mdoc->parse, n->line, n->pos,
                               "Dd %s", n->string);
           } else {
                   if (mdoc->meta.os_e == MDOC_OS_NETBSD)
                           mandoc_vmsg(MANDOCERR_MDOCDATE,
                               mdoc->parse, n->line, n->pos,
                               "Dd %s", n->string);
           }
 }  }
   
 enum roff_sec  enum roff_sec

Legend:
Removed from v.1.335  
changed lines
  Added in v.1.339

CVSweb