[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.236 and 1.238

version 1.236, 2014/07/30 23:38:52 version 1.238, 2014/07/31 09:22:21
Line 568  static int
Line 568  static int
 pre_bl(PRE_ARGS)  pre_bl(PRE_ARGS)
 {  {
         struct mdoc_node *np;          struct mdoc_node *np;
         struct mdoc_argv *argv;          struct mdoc_argv *argv, *wa;
         int               i;          int               i;
           enum mdocargt     mdoclt;
         enum mdoc_list    lt;          enum mdoc_list    lt;
   
         if (MDOC_BLOCK != n->type) {          if (MDOC_BLOCK != n->type) {
Line 591  pre_bl(PRE_ARGS)
Line 592  pre_bl(PRE_ARGS)
          * ones.  If we find no list type, we default to LIST_item.           * ones.  If we find no list type, we default to LIST_item.
          */           */
   
           wa = n->args->argv;
           mdoclt = MDOC_ARG_MAX;
         for (i = 0; n->args && i < (int)n->args->argc; i++) {          for (i = 0; n->args && i < (int)n->args->argc; i++) {
                 argv = n->args->argv + i;                  argv = n->args->argv + i;
                 lt = LIST__NONE;                  lt = LIST__NONE;
Line 638  pre_bl(PRE_ARGS)
Line 641  pre_bl(PRE_ARGS)
                         n->norm->Bl.comp = 1;                          n->norm->Bl.comp = 1;
                         break;                          break;
                 case MDOC_Width:                  case MDOC_Width:
                           wa = argv;
                         if (0 == argv->sz) {                          if (0 == argv->sz) {
                                 mandoc_msg(MANDOCERR_ARG_EMPTY,                                  mandoc_msg(MANDOCERR_ARG_EMPTY,
                                     mdoc->parse, argv->line,                                      mdoc->parse, argv->line,
Line 671  pre_bl(PRE_ARGS)
Line 675  pre_bl(PRE_ARGS)
                 }                  }
                 if (LIST__NONE == lt)                  if (LIST__NONE == lt)
                         continue;                          continue;
                   mdoclt = argv->arg;
   
                 /* Check: multiple list types. */                  /* Check: multiple list types. */
   
Line 726  pre_bl(PRE_ARGS)
Line 731  pre_bl(PRE_ARGS)
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case LIST_item:          case LIST_item:
                 if (n->norm->Bl.width)                  if (n->norm->Bl.width)
                         mdoc_nmsg(mdoc, n, MANDOCERR_IGNARGV);                          mandoc_vmsg(MANDOCERR_BL_SKIPW, mdoc->parse,
                               wa->line, wa->pos, "Bl -%s",
                               mdoc_argnames[mdoclt]);
                 break;                  break;
         case LIST_bullet:          case LIST_bullet:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
Line 838  pre_bd(PRE_ARGS)
Line 845  pre_bd(PRE_ARGS)
 static int  static int
 pre_an(PRE_ARGS)  pre_an(PRE_ARGS)
 {  {
         int              i;          struct mdoc_argv *argv;
           size_t   i;
   
         if (NULL == n->args)          if (n->args == NULL)
                 return(1);                  return(1);
   
         for (i = 1; i < (int)n->args->argc; i++)          for (i = 1; i < n->args->argc; i++) {
                 mdoc_pmsg(mdoc, n->args->argv[i].line,                  argv = n->args->argv + i;
                     n->args->argv[i].pos, MANDOCERR_IGNARGV);                  mandoc_vmsg(MANDOCERR_AN_REP,
                       mdoc->parse, argv->line, argv->pos,
                       "An -%s", mdoc_argnames[argv->arg]);
           }
   
         if (MDOC_Split == n->args->argv[0].arg)          argv = n->args->argv;
           if (argv->arg == MDOC_Split)
                 n->norm->An.auth = AUTH_split;                  n->norm->An.auth = AUTH_split;
         else if (MDOC_Nosplit == n->args->argv[0].arg)          else if (argv->arg == MDOC_Nosplit)
                 n->norm->An.auth = AUTH_nosplit;                  n->norm->An.auth = AUTH_nosplit;
         else          else
                 abort();                  abort();
Line 1451  static int
Line 1463  static int
 post_bl_head(POST_ARGS)  post_bl_head(POST_ARGS)
 {  {
         struct mdoc_node *np, *nn, *nnp;          struct mdoc_node *np, *nn, *nnp;
           struct mdoc_argv *argv;
         int               i, j;          int               i, j;
   
         if (LIST_column != mdoc->last->norm->Bl.type)          if (LIST_column != mdoc->last->norm->Bl.type)
Line 1458  post_bl_head(POST_ARGS)
Line 1471  post_bl_head(POST_ARGS)
                 return(hwarn_eq0(mdoc));                  return(hwarn_eq0(mdoc));
   
         /*          /*
          * Convert old-style lists, where the column width specifiers           * Append old-style lists, where the column width specifiers
          * trail as macro parameters, to the new-style ("normal-form")           * trail as macro parameters, to the new-style ("normal-form")
          * lists where they're argument values following -column.           * lists where they're argument values following -column.
          */           */
   
         /* First, disallow both types and allow normal-form. */          if (mdoc->last->child == NULL)
   
         /*  
          * TODO: technically, we can accept both and just merge the two  
          * lists, but I'll leave that for another day.  
          */  
   
         if (mdoc->last->norm->Bl.ncols && mdoc->last->nchild) {  
                 mdoc_nmsg(mdoc, mdoc->last, MANDOCERR_COLUMNS);  
                 return(0);  
         } else if (NULL == mdoc->last->child)  
                 return(1);                  return(1);
   
         np = mdoc->last->parent;          np = mdoc->last->parent;
Line 1484  post_bl_head(POST_ARGS)
Line 1487  post_bl_head(POST_ARGS)
                         break;                          break;
   
         assert(j < (int)np->args->argc);          assert(j < (int)np->args->argc);
         assert(0 == np->args->argv[j].sz);  
   
         /*          /*
          * Accommodate for new-style groff column syntax.  Shuffle the           * Accommodate for new-style groff column syntax.  Shuffle the
Line 1492  post_bl_head(POST_ARGS)
Line 1494  post_bl_head(POST_ARGS)
          * column field.  Then, delete the head children.           * column field.  Then, delete the head children.
          */           */
   
         np->args->argv[j].sz = (size_t)mdoc->last->nchild;          argv = np->args->argv + j;
         np->args->argv[j].value = mandoc_reallocarray(NULL,          i = argv->sz;
             (size_t)mdoc->last->nchild, sizeof(char *));          argv->sz += mdoc->last->nchild;
           argv->value = mandoc_reallocarray(argv->value,
               argv->sz, sizeof(char *));
   
         mdoc->last->norm->Bl.ncols = np->args->argv[j].sz;          mdoc->last->norm->Bl.ncols = argv->sz;
         mdoc->last->norm->Bl.cols = (void *)np->args->argv[j].value;          mdoc->last->norm->Bl.cols = (void *)argv->value;
   
         for (i = 0, nn = mdoc->last->child; nn; i++) {          for (nn = mdoc->last->child; nn; i++) {
                 np->args->argv[j].value[i] = nn->string;                  argv->value[i] = nn->string;
                 nn->string = NULL;                  nn->string = NULL;
                 nnp = nn;                  nnp = nn;
                 nn = nn->next;                  nn = nn->next;

Legend:
Removed from v.1.236  
changed lines
  Added in v.1.238

CVSweb