[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.373 and 1.377

version 1.373, 2019/03/13 18:29:18 version 1.377, 2020/01/19 18:02:00
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2019 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>   * Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 113  static void  post_sm(POST_ARGS);
Line 113  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_sx(POST_ARGS);  static  void     post_sx(POST_ARGS);
   static  void     post_tg(POST_ARGS);
 static  void     post_useless(POST_ARGS);  static  void     post_useless(POST_ARGS);
 static  void     post_xr(POST_ARGS);  static  void     post_xr(POST_ARGS);
 static  void     post_xx(POST_ARGS);  static  void     post_xx(POST_ARGS);
Line 238  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
Line 239  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
         NULL,           /* %Q */          NULL,           /* %Q */
         NULL,           /* %U */          NULL,           /* %U */
         NULL,           /* Ta */          NULL,           /* Ta */
           post_tg,        /* Tg */
 };  };
   
 #define RSORD_MAX 14 /* Number of `Rs' blocks. */  #define RSORD_MAX 14 /* Number of `Rs' blocks. */
Line 1090  post_st(POST_ARGS)
Line 1092  post_st(POST_ARGS)
 }  }
   
 static void  static void
   post_tg(POST_ARGS)
   {
           struct roff_node        *n, *nch;
           size_t                  len;
   
           n = mdoc->last;
           nch = n->child;
           if (nch == NULL && n->next != NULL &&
               n->next->child->type == ROFFT_TEXT) {
                   mdoc->next = ROFF_NEXT_CHILD;
                   roff_word_alloc(mdoc, n->line, n->pos, n->next->child->string);
                   nch = mdoc->last;
                   nch->flags |= NODE_NOSRC;
                   mdoc->last = n;
           }
           if (nch == NULL || *nch->string == '\0') {
                   mandoc_msg(MANDOCERR_MACRO_EMPTY, n->line, n->pos, "Tg");
                   roff_node_delete(mdoc, n);
                   return;
           }
           len = strcspn(nch->string, " \t");
           if (nch->string[len] != '\0')
                   mandoc_msg(MANDOCERR_TG_SPC, nch->line, nch->pos + len + 1,
                       "Tg %s", nch->string);
           if (nch->next != NULL) {
                   mandoc_msg(MANDOCERR_ARG_EXCESS, nch->next->line,
                       nch->next->pos, "Tg ... %s", nch->next->string);
                   while (nch->next != NULL)
                           roff_node_delete(mdoc, nch->next);
           }
           if (nch->string[len] != '\0')
                   roff_node_delete(mdoc, n);
   }
   
   static void
 post_obsolete(POST_ARGS)  post_obsolete(POST_ARGS)
 {  {
         struct roff_node *n;          struct roff_node *n;
Line 1186  post_fname(POST_ARGS)
Line 1223  post_fname(POST_ARGS)
         size_t                   pos;          size_t                   pos;
   
         n = mdoc->last->child;          n = mdoc->last->child;
         pos = strcspn(n->string, "()");          cp = n->string;
         cp = n->string + pos;          if (*cp == '(') {
         if ( ! (cp[0] == '\0' || (cp[0] == '(' && cp[1] == '*')))                  if (cp[strlen(cp + 1)] == ')')
                 mandoc_msg(MANDOCERR_FN_PAREN, n->line, n->pos + pos,                          return;
                     "%s", n->string);                  pos = 0;
           } else {
                   pos = strcspn(cp, "()");
                   if (cp[pos] == '\0')
                           return;
           }
           mandoc_msg(MANDOCERR_FN_PAREN, n->line, n->pos + pos, "%s", cp);
 }  }
   
 static void  static void
Line 1748  post_bl(POST_ARGS)
Line 1791  post_bl(POST_ARGS)
         while (nchild != NULL) {          while (nchild != NULL) {
                 nnext = nchild->next;                  nnext = nchild->next;
                 if (nchild->tok == MDOC_It ||                  if (nchild->tok == MDOC_It ||
                     (nchild->tok == MDOC_Sm &&                      ((nchild->tok == MDOC_Sm || nchild->tok == MDOC_Tg) &&
                      nnext != NULL && nnext->tok == MDOC_It)) {                       nnext != NULL && nnext->tok == MDOC_It)) {
                         nchild = nnext;                          nchild = nnext;
                         continue;                          continue;
Line 1903  post_root(POST_ARGS)
Line 1946  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 ? mandoc_strdup("") :                  mdoc->meta.date = mandoc_normdate(NULL, NULL);
                     mandoc_normdate(mdoc, NULL, 0, 0);  
   
         if (mdoc->meta.title == NULL) {          if (mdoc->meta.title == NULL) {
                 mandoc_msg(MANDOCERR_DT_NOTITLE, 0, 0, "EOF");                  mandoc_msg(MANDOCERR_DT_NOTITLE, 0, 0, "EOF");
Line 2502  static void
Line 2544  static void
 post_dd(POST_ARGS)  post_dd(POST_ARGS)
 {  {
         struct roff_node *n;          struct roff_node *n;
         char             *datestr;  
   
         n = mdoc->last;          n = mdoc->last;
         n->flags |= NODE_NOPRT;          n->flags |= NODE_NOPRT;
Line 2519  post_dd(POST_ARGS)
Line 2560  post_dd(POST_ARGS)
                 mandoc_msg(MANDOCERR_PROLOG_ORDER,                  mandoc_msg(MANDOCERR_PROLOG_ORDER,
                     n->line, n->pos, "Dd after Os");                      n->line, n->pos, "Dd after Os");
   
         if (n->child == NULL || n->child->string[0] == '\0') {          if (mdoc->quick && n != NULL)
                 mdoc->meta.date = mdoc->quick ? mandoc_strdup("") :                  mdoc->meta.date = mandoc_strdup("");
                     mandoc_normdate(mdoc, NULL, n->line, n->pos);          else
                 return;                  mdoc->meta.date = mandoc_normdate(n->child, n);
         }  
   
         datestr = NULL;  
         deroff(&datestr, n);  
         if (mdoc->quick)  
                 mdoc->meta.date = datestr;  
         else {  
                 mdoc->meta.date = mandoc_normdate(mdoc,  
                     datestr, n->line, n->pos);  
                 free(datestr);  
         }  
 }  }
   
 static void  static void

Legend:
Removed from v.1.373  
changed lines
  Added in v.1.377

CVSweb