[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.382 and 1.388

version 1.382, 2020/04/02 15:04:36 version 1.388, 2020/10/30 13:24:33
Line 37 
Line 37 
 #include "mandoc.h"  #include "mandoc.h"
 #include "mandoc_xr.h"  #include "mandoc_xr.h"
 #include "roff.h"  #include "roff.h"
 #include "tag.h"  
 #include "mdoc.h"  #include "mdoc.h"
 #include "libmandoc.h"  #include "libmandoc.h"
 #include "roff_int.h"  #include "roff_int.h"
 #include "libmdoc.h"  #include "libmdoc.h"
   #include "tag.h"
   
 /* FIXME: .Bl -diag can't have non-text children in HEAD. */  /* FIXME: .Bl -diag can't have non-text children in HEAD. */
   
Line 92  static void  post_es(POST_ARGS);
Line 92  static void  post_es(POST_ARGS);
 static  void     post_eoln(POST_ARGS);  static  void     post_eoln(POST_ARGS);
 static  void     post_ex(POST_ARGS);  static  void     post_ex(POST_ARGS);
 static  void     post_fa(POST_ARGS);  static  void     post_fa(POST_ARGS);
   static  void     post_fl(POST_ARGS);
 static  void     post_fn(POST_ARGS);  static  void     post_fn(POST_ARGS);
 static  void     post_fname(POST_ARGS);  static  void     post_fname(POST_ARGS);
 static  void     post_fo(POST_ARGS);  static  void     post_fo(POST_ARGS);
Line 150  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
Line 151  static const v_post mdoc_valids[MDOC_MAX - MDOC_Dd] = 
         post_ex,        /* Ex */          post_ex,        /* Ex */
         post_fa,        /* Fa */          post_fa,        /* Fa */
         NULL,           /* Fd */          NULL,           /* Fd */
         post_tag,       /* Fl */          post_fl,        /* Fl */
         post_fn,        /* Fn */          post_fn,        /* Fn */
         post_delim_nb,  /* Ft */          post_delim_nb,  /* Ft */
         post_tag,       /* Ic */          post_tag,       /* Ic */
Line 1105  post_tg(POST_ARGS)
Line 1106  post_tg(POST_ARGS)
         struct roff_node *n;    /* The .Tg node. */          struct roff_node *n;    /* The .Tg node. */
         struct roff_node *nch;  /* The first child of the .Tg node. */          struct roff_node *nch;  /* The first child of the .Tg node. */
         struct roff_node *nn;   /* The next node after the .Tg node. */          struct roff_node *nn;   /* The next node after the .Tg node. */
           struct roff_node *np;   /* The parent of the next node. */
         struct roff_node *nt;   /* The TEXT node containing the tag. */          struct roff_node *nt;   /* The TEXT node containing the tag. */
         size_t            len;  /* The number of bytes in the tag. */          size_t            len;  /* The number of bytes in the tag. */
   
Line 1150  post_tg(POST_ARGS)
Line 1152  post_tg(POST_ARGS)
         }          }
   
         /* By default, tag the .Tg node itself. */          /* By default, tag the .Tg node itself. */
         if (nn == NULL)          if (nn == NULL || nn->flags & NODE_ID)
                 nn = n;                  nn = n;
   
         /* Explicit tagging of specific macros. */          /* Explicit tagging of specific macros. */
Line 1158  post_tg(POST_ARGS)
Line 1160  post_tg(POST_ARGS)
         case MDOC_Sh:          case MDOC_Sh:
         case MDOC_Ss:          case MDOC_Ss:
         case MDOC_Fo:          case MDOC_Fo:
                 nn = nn->head;                  nn = nn->head->child == NULL ? n : nn->head;
                 /* FALLTHROUGH */                  break;
           case MDOC_It:
                   np = nn->parent;
                   while (np->tok != MDOC_Bl)
                           np = np->parent;
                   switch (np->norm->Bl.type) {
                   case LIST_column:
                           break;
                   case LIST_diag:
                   case LIST_hang:
                   case LIST_inset:
                   case LIST_ohang:
                   case LIST_tag:
                           nn = nn->head;
                           break;
                   case LIST_bullet:
                   case LIST_dash:
                   case LIST_enum:
                   case LIST_hyphen:
                   case LIST_item:
                           nn = nn->body->child == NULL ? n : nn->body;
                           break;
                   default:
                           abort();
                   }
                   break;
           case MDOC_Bd:
           case MDOC_Bl:
           case MDOC_D1:
           case MDOC_Dl:
                   nn = nn->body->child == NULL ? n : nn->body;
                   break;
           case MDOC_Pp:
                   break;
         case MDOC_Cm:          case MDOC_Cm:
         case MDOC_Dv:          case MDOC_Dv:
         case MDOC_Em:          case MDOC_Em:
Line 1172  post_tg(POST_ARGS)
Line 1207  post_tg(POST_ARGS)
         case MDOC_Ms:          case MDOC_Ms:
         case MDOC_No:          case MDOC_No:
         case MDOC_Sy:          case MDOC_Sy:
                 if (nn->child != NULL && (nn->flags & NODE_ID) == 0)                  if (nn->child == NULL)
                         break;                          nn = n;
                 /* FALLTHROUGH */                  break;
         default:          default:
                 nn = n;                  nn = n;
                 break;                  break;
Line 1594  post_es(POST_ARGS)
Line 1629  post_es(POST_ARGS)
 }  }
   
 static void  static void
   post_fl(POST_ARGS)
   {
           struct roff_node        *n;
           char                    *cp;
   
           /*
            * Transform ".Fl Fl long" to ".Fl \-long",
            * resulting for example in better HTML output.
            */
   
           n = mdoc->last;
           if (n->prev != NULL && n->prev->tok == MDOC_Fl &&
               n->prev->child == NULL && n->child != NULL &&
               (n->flags & NODE_LINE) == 0) {
                   mandoc_asprintf(&cp, "\\-%s", n->child->string);
                   free(n->child->string);
                   n->child->string = cp;
                   roff_node_delete(mdoc, n->prev);
           }
           post_tag(mdoc);
   }
   
   static void
 post_xx(POST_ARGS)  post_xx(POST_ARGS)
 {  {
         struct roff_node        *n;          struct roff_node        *n;
Line 2178  post_hyph(POST_ARGS)
Line 2236  post_hyph(POST_ARGS)
                         if (*cp == '-' &&                          if (*cp == '-' &&
                             isalpha((unsigned char)cp[-1]) &&                              isalpha((unsigned char)cp[-1]) &&
                             isalpha((unsigned char)cp[1])) {                              isalpha((unsigned char)cp[1])) {
                                 if (n->string == NULL && n->flags & NODE_ID)                                  if (n->tag == NULL && n->flags & NODE_ID)
                                         n->string = mandoc_strdup(nch->string);                                          n->tag = mandoc_strdup(nch->string);
                                 *cp = ASCII_HYPH;                                  *cp = ASCII_HYPH;
                         }                          }
         }          }
Line 2559  post_section(POST_ARGS)
Line 2617  post_section(POST_ARGS)
                         if ((nch = n->child) != NULL &&                          if ((nch = n->child) != NULL &&
                             nch->type == ROFFT_TEXT &&                              nch->type == ROFFT_TEXT &&
                             strcmp(nch->string, tag) == 0)                              strcmp(nch->string, tag) == 0)
                                 tag_put(NULL, TAG_WEAK, n);                                  tag_put(NULL, TAG_STRONG, n);
                         else                          else
                                 tag_put(tag, TAG_FALLBACK, n);                                  tag_put(tag, TAG_FALLBACK, n);
                         free(tag);                          free(tag);
Line 2731  post_dt(POST_ARGS)
Line 2789  post_dt(POST_ARGS)
                 mandoc_msg(MANDOCERR_MSEC_BAD,                  mandoc_msg(MANDOCERR_MSEC_BAD,
                     nn->line, nn->pos, "Dt ... %s", nn->string);                      nn->line, nn->pos, "Dt ... %s", nn->string);
                 mdoc->meta.vol = mandoc_strdup(nn->string);                  mdoc->meta.vol = mandoc_strdup(nn->string);
         } else          } else {
                 mdoc->meta.vol = mandoc_strdup(cp);                  mdoc->meta.vol = mandoc_strdup(cp);
                   if (mdoc->filesec != '\0' &&
                       mdoc->filesec != *nn->string &&
                       *nn->string >= '1' && *nn->string <= '9')
                           mandoc_msg(MANDOCERR_MSEC_FILE, nn->line, nn->pos,
                               "*.%c vs Dt ... %c", mdoc->filesec, *nn->string);
           }
   
         /* Optional third argument: architecture. */          /* Optional third argument: architecture. */
   

Legend:
Removed from v.1.382  
changed lines
  Added in v.1.388

CVSweb