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

Diff for /mandoc/roff.c between version 1.57 and 1.60

version 1.57, 2008/12/10 00:52:46 version 1.60, 2008/12/10 12:09:47
Line 59  enum rofferr {
Line 59  enum rofferr {
         ERR_PR_OOO,                     /* Prelude macro bad order. */          ERR_PR_OOO,                     /* Prelude macro bad order. */
         ERR_PR_REP,                     /* Prelude macro repeated. */          ERR_PR_REP,                     /* Prelude macro repeated. */
         ERR_NOT_PR,                     /* Not allowed in prelude. */          ERR_NOT_PR,                     /* Not allowed in prelude. */
         WRN_SECORD,                     /* Sections out-of-order. */          WRN_SECORD                      /* Sections out-of-order. */
 };  };
   
 struct  rofftree {  struct  rofftree {
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 527  rofffindtok(const char *buf)
Line 529  rofffindtok(const char *buf)
 static int  static int
 roffchecksec(struct rofftree *tree, const char *start, int sec)  roffchecksec(struct rofftree *tree, const char *start, int sec)
 {  {
         int              prior;  
   
         switch (sec) {          switch (sec) {
         case(ROFFSec_SYNOP):          case(ROFFSec_SYNOP):
                 if ((prior = ROFFSec_NAME) & tree->asec)                  if (ROFFSec_NAME & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_DESC):          case(ROFFSec_DESC):
                 if ((prior = ROFFSec_SYNOP) & tree->asec)                  if (ROFFSec_SYNOP & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_RETVAL):          case(ROFFSec_RETVAL):
                 if ((prior = ROFFSec_DESC) & tree->asec)                  if (ROFFSec_DESC & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_ENV):          case(ROFFSec_ENV):
                 if ((prior = ROFFSec_RETVAL) & tree->asec)                  if (ROFFSec_RETVAL & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_FILES):          case(ROFFSec_FILES):
                 if ((prior = ROFFSec_ENV) & tree->asec)                  if (ROFFSec_ENV & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_EX):          case(ROFFSec_EX):
                 if ((prior = ROFFSec_FILES) & tree->asec)                  if (ROFFSec_FILES & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_DIAG):          case(ROFFSec_DIAG):
                 if ((prior = ROFFSec_EX) & tree->asec)                  if (ROFFSec_EX & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_ERRS):          case(ROFFSec_ERRS):
                 if ((prior = ROFFSec_DIAG) & tree->asec)                  if (ROFFSec_DIAG & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_SEEALSO):          case(ROFFSec_SEEALSO):
                 if ((prior = ROFFSec_ERRS) & tree->asec)                  if (ROFFSec_ERRS & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_STAND):          case(ROFFSec_STAND):
                 if ((prior = ROFFSec_SEEALSO) & tree->asec)                  if (ROFFSec_SEEALSO & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_HIST):          case(ROFFSec_HIST):
                 if ((prior = ROFFSec_STAND) & tree->asec)                  if (ROFFSec_STAND & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_AUTH):          case(ROFFSec_AUTH):
                 if ((prior = ROFFSec_HIST) & tree->asec)                  if (ROFFSec_HIST & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_CAVEATS):          case(ROFFSec_CAVEATS):
                 if ((prior = ROFFSec_AUTH) & tree->asec)                  if (ROFFSec_AUTH & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         case(ROFFSec_BUGS):          case(ROFFSec_BUGS):
                 if ((prior = ROFFSec_CAVEATS) & tree->asec)                  if (ROFFSec_CAVEATS & tree->asec)
                         return(1);                          return(1);
                 break;                  break;
         default:          default:
Line 1022  roff_Dt(ROFFCALL_ARGS)
Line 1023  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;

Legend:
Removed from v.1.57  
changed lines
  Added in v.1.60

CVSweb