[BACK]Return to roff.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/roff.c between version 1.56 and 1.59

version 1.56, 2008/12/09 19:57:26 version 1.59, 2008/12/10 12:05:33
Line 70  struct rofftree {
Line 70  struct rofftree {
         char              os[64];               /* `Os' results. */          char              os[64];               /* `Os' results. */
         char              title[64];            /* `Dt' results. */          char              title[64];            /* `Dt' results. */
         enum roffmsec     section;          enum roffmsec     section;
         char              volume[64];           /* `Dt' results. */          enum roffvol      volume;
         int               state;          int               state;
 #define ROFF_PRELUDE     (1 << 1)               /* In roff prelude. */ /* FIXME: put into asec. */  #define ROFF_PRELUDE     (1 << 1)               /* In roff prelude. */ /* FIXME: put into asec. */
 #define ROFF_PRELUDE_Os  (1 << 2)               /* `Os' is parsed. */  #define ROFF_PRELUDE_Os  (1 << 2)               /* `Os' is parsed. */
Line 164  roff_free(struct rofftree *tree, int flush)
Line 164  roff_free(struct rofftree *tree, int flush)
                         goto end;                          goto end;
         }          }
   
         if ( ! (*tree->cb.rofftail)(tree->arg))          if ( ! (*tree->cb.rofftail)(tree->arg, &tree->tm,
                                   tree->os, tree->title,
                                   tree->section, tree->volume))
                 goto end;                  goto end;
   
         error = 0;          error = 0;
Line 1022  roff_Dt(ROFFCALL_ARGS)
Line 1024  roff_Dt(ROFFCALL_ARGS)
                 return(roff_errp(tree, *argv, tok, ERR_BADARG));                  return(roff_errp(tree, *argv, tok, ERR_BADARG));
   
         argv++;          argv++;
         sz = sizeof(tree->volume);  
   
         if (NULL == *argv) {          if (NULL == *argv) {
                 tree->volume[0] = 0;                  switch (tree->section) {
         } else if (strlcpy(tree->volume, *argv, sz) >= sz)                  case(ROFF_MSEC_1):
                 return(roff_errp(tree, *argv, tok, ERR_ARGLEN));                          /* FALLTHROUGH */
                   case(ROFF_MSEC_6):
                           /* FALLTHROUGH */
                   case(ROFF_MSEC_7):
                           tree->volume = ROFF_VOL_URM;
                           break;
                   case(ROFF_MSEC_2):
                           /* FALLTHROUGH */
                   case(ROFF_MSEC_3):
                           /* FALLTHROUGH */
                   case(ROFF_MSEC_3p):
                           /* FALLTHROUGH */
                   case(ROFF_MSEC_4):
                           /* FALLTHROUGH */
                   case(ROFF_MSEC_5):
                           tree->volume = ROFF_VOL_PRM;
                           break;
                   case(ROFF_MSEC_8):
                           tree->volume = ROFF_VOL_PRM;
                           break;
                   case(ROFF_MSEC_9):
                           tree->volume = ROFF_VOL_KM;
                           break;
                   case(ROFF_MSEC_UNASS):
                           /* FALLTHROUGH */
                   case(ROFF_MSEC_DRAFT):
                           /* FALLTHROUGH */
                   case(ROFF_MSEC_PAPER):
                           tree->volume = ROFF_VOL_NONE;
                           break;
                   default:
                           abort();
                           /* NOTREACHED */
                   }
           } else if (ROFF_VOL_MAX == (tree->volume = roff_vol(*argv)))
                   return(roff_errp(tree, *argv, tok, ERR_BADARG));
   
         assert(NULL == tree->last);          assert(NULL == tree->last);
         tree->state |= ROFF_PRELUDE_Dt;          tree->state |= ROFF_PRELUDE_Dt;
Line 1154  static int
Line 1190  static int
 roff_layout(ROFFCALL_ARGS)  roff_layout(ROFFCALL_ARGS)
 {  {
         int              i, c, argcp[ROFF_MAXLINEARG];          int              i, c, argcp[ROFF_MAXLINEARG];
         char            *argvp[ROFF_MAXLINEARG], *p;          char            *argvp[ROFF_MAXLINEARG];
   
         /*          /*
          * The roff_layout function is for multi-line macros.  A layout           * The roff_layout function is for multi-line macros.  A layout
Line 1180  roff_layout(ROFFCALL_ARGS) 
Line 1216  roff_layout(ROFFCALL_ARGS) 
                 return((*tree->cb.roffblkout)(tree->arg, tok));                  return((*tree->cb.roffblkout)(tree->arg, tok));
         }          }
   
           argv++;
         assert( ! (ROFF_CALLABLE & tokens[tok].flags));          assert( ! (ROFF_CALLABLE & tokens[tok].flags));
   
         p = *argv++;  
   
         if ( ! roffparseopts(tree, tok, &argv, argcp, argvp))          if ( ! roffparseopts(tree, tok, &argv, argcp, argvp))
                 return(0);                  return(0);

Legend:
Removed from v.1.56  
changed lines
  Added in v.1.59

CVSweb