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

Diff for /mandoc/main.c between version 1.90 and 1.94

version 1.90, 2010/06/26 15:22:19 version 1.94, 2010/06/30 20:32:15
Line 88  struct curparse {
Line 88  struct curparse {
         struct man       *man;          /* man parser */          struct man       *man;          /* man parser */
         struct mdoc      *mdoc;         /* mdoc parser */          struct mdoc      *mdoc;         /* mdoc parser */
         struct roff      *roff;         /* roff parser (!NULL) */          struct roff      *roff;         /* roff parser (!NULL) */
           struct regset     regs;         /* roff registers */
         enum outt         outtype;      /* which output to use */          enum outt         outtype;      /* which output to use */
         out_mdoc          outmdoc;      /* mdoc output ptr */          out_mdoc          outmdoc;      /* mdoc output ptr */
         out_man           outman;       /* man output ptr */          out_man           outman;       /* man output ptr */
Line 98  struct curparse {
Line 99  struct curparse {
   
 static  const char * const      mandocerrs[MANDOCERR_MAX] = {  static  const char * const      mandocerrs[MANDOCERR_MAX] = {
         "ok",          "ok",
   
           "generic warning",
   
         "text should be uppercase",          "text should be uppercase",
         "sections out of conventional order",          "sections out of conventional order",
         "section name repeats",          "section name repeats",
Line 117  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 121  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "section not in conventional manual section",          "section not in conventional manual section",
         "end of line whitespace",          "end of line whitespace",
         "scope open on exit",          "scope open on exit",
   
           "generic error",
   
         "NAME section must come first",          "NAME section must come first",
         "bad Boolean value",          "bad Boolean value",
         "child violates parent syntax",          "child violates parent syntax",
Line 148  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 155  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "missing display type",          "missing display type",
         "line argument(s) will be lost",          "line argument(s) will be lost",
         "body argument(s) will be lost",          "body argument(s) will be lost",
   
           "generic fatal error",
   
         "column syntax is inconsistent",          "column syntax is inconsistent",
         "missing font type",          "missing font type",
         "displays may not be nested",          "displays may not be nested",
Line 181  static void    version(void) __attribute__((noreturn))
Line 191  static void    version(void) __attribute__((noreturn))
 static  int               woptions(int *, char *);  static  int               woptions(int *, char *);
   
 static  const char       *progname;  static  const char       *progname;
 static  int               with_error;  static  int               with_fatal;
 static  int               with_warning;  static  int               with_error;
   
 int  int
 main(int argc, char *argv[])  main(int argc, char *argv[])
Line 245  main(int argc, char *argv[])
Line 255  main(int argc, char *argv[])
         while (*argv) {          while (*argv) {
                 ffile(*argv, &curp);                  ffile(*argv, &curp);
   
                 if (with_error && !(curp.fflags & FL_IGN_ERRORS))                  if (with_fatal && !(curp.fflags & FL_IGN_ERRORS))
                         break;                          break;
                 ++argv;                  ++argv;
         }          }
Line 259  main(int argc, char *argv[])
Line 269  main(int argc, char *argv[])
         if (curp.roff)          if (curp.roff)
                 roff_free(curp.roff);                  roff_free(curp.roff);
   
         return((with_warning || with_error) ?          return((with_fatal || with_error) ?
                         EXIT_FAILURE :  EXIT_SUCCESS);                          EXIT_FAILURE :  EXIT_SUCCESS);
 }  }
   
Line 298  man_init(struct curparse *curp)
Line 308  man_init(struct curparse *curp)
         if (curp->fflags & FL_NIGN_ESCAPE)          if (curp->fflags & FL_NIGN_ESCAPE)
                 pflags &= ~MAN_IGN_ESCAPE;                  pflags &= ~MAN_IGN_ESCAPE;
   
         return(man_alloc(curp, pflags, mmsg));          return(man_alloc(&curp->regs, curp, pflags, mmsg));
 }  }
   
   
Line 306  static struct roff *
Line 316  static struct roff *
 roff_init(struct curparse *curp)  roff_init(struct curparse *curp)
 {  {
   
         return(roff_alloc(mmsg, curp));          return(roff_alloc(&curp->regs, mmsg, curp));
 }  }
   
   
Line 326  mdoc_init(struct curparse *curp)
Line 336  mdoc_init(struct curparse *curp)
         if (curp->fflags & FL_NIGN_MACRO)          if (curp->fflags & FL_NIGN_MACRO)
                 pflags &= ~MDOC_IGN_MACRO;                  pflags &= ~MDOC_IGN_MACRO;
   
         return(mdoc_alloc(curp, pflags, mmsg));          return(mdoc_alloc(&curp->regs, curp, pflags, mmsg));
 }  }
   
   
Line 337  ffile(const char *file, struct curparse *curp)
Line 347  ffile(const char *file, struct curparse *curp)
         curp->file = file;          curp->file = file;
         if (-1 == (curp->fd = open(curp->file, O_RDONLY, 0))) {          if (-1 == (curp->fd = open(curp->file, O_RDONLY, 0))) {
                 perror(curp->file);                  perror(curp->file);
                 with_error = 1;                  with_fatal = 1;
                 return;                  return;
         }          }
   
Line 378  read_whole_file(struct curparse *curp, struct buf *fb,
Line 388  read_whole_file(struct curparse *curp, struct buf *fb,
   
         if (-1 == fstat(curp->fd, &st)) {          if (-1 == fstat(curp->fd, &st)) {
                 perror(curp->file);                  perror(curp->file);
                 with_error = 1;                  with_fatal = 1;
                 return(0);                  return(0);
         }          }
   
Line 393  read_whole_file(struct curparse *curp, struct buf *fb,
Line 403  read_whole_file(struct curparse *curp, struct buf *fb,
                 if (st.st_size >= (1U << 31)) {                  if (st.st_size >= (1U << 31)) {
                         fprintf(stderr, "%s: input too large\n",                          fprintf(stderr, "%s: input too large\n",
                                         curp->file);                                          curp->file);
                         with_error = 1;                          with_fatal = 1;
                         return(0);                          return(0);
                 }                  }
                 *with_mmap = 1;                  *with_mmap = 1;
Line 437  read_whole_file(struct curparse *curp, struct buf *fb,
Line 447  read_whole_file(struct curparse *curp, struct buf *fb,
   
         free(fb->buf);          free(fb->buf);
         fb->buf = NULL;          fb->buf = NULL;
         with_error = 1;          with_fatal = 1;
         return(0);          return(0);
 }  }
   
Line 451  fdesc(struct curparse *curp)
Line 461  fdesc(struct curparse *curp)
         struct man      *man;          struct man      *man;
         struct mdoc     *mdoc;          struct mdoc     *mdoc;
         struct roff     *roff;          struct roff     *roff;
         struct regset    regs;  
   
         man = NULL;          man = NULL;
         mdoc = NULL;          mdoc = NULL;
         roff = NULL;          roff = NULL;
   
         memset(&ln, 0, sizeof(struct buf));          memset(&ln, 0, sizeof(struct buf));
         memset(&regs, 0, sizeof(struct regset));  
   
         /*          /*
          * Two buffers: ln and buf.  buf is the input file and may be           * Two buffers: ln and buf.  buf is the input file and may be
Line 540  fdesc(struct curparse *curp)
Line 549  fdesc(struct curparse *curp)
   
                 of = 0;                  of = 0;
                 do {                  do {
                         re = roff_parseln(roff, &regs, lnn_start,                          re = roff_parseln(roff, lnn_start,
                                         &ln.buf, &ln.sz, of, &of);                                          &ln.buf, &ln.sz, of, &of);
                 } while (ROFF_RERUN == re);                  } while (ROFF_RERUN == re);
   
Line 599  fdesc(struct curparse *curp)
Line 608  fdesc(struct curparse *curp)
                         curp->outfree = ascii_free;                          curp->outfree = ascii_free;
                         break;                          break;
                 case (OUTT_PS):                  case (OUTT_PS):
                         curp->outdata = ps_alloc();                          curp->outdata = ps_alloc(curp->outopts);
                         curp->outfree = ps_free;                          curp->outfree = ps_free;
                         break;                          break;
                 default:                  default:
Line 637  fdesc(struct curparse *curp)
Line 646  fdesc(struct curparse *curp)
                 (*curp->outmdoc)(curp->outdata, mdoc);                  (*curp->outmdoc)(curp->outdata, mdoc);
   
  cleanup:   cleanup:
           memset(&curp->regs, 0, sizeof(struct regset));
         if (mdoc)          if (mdoc)
                 mdoc_reset(mdoc);                  mdoc_reset(mdoc);
         if (man)          if (man)
Line 653  fdesc(struct curparse *curp)
Line 663  fdesc(struct curparse *curp)
         return;          return;
   
  bailout:   bailout:
         with_error = 1;          with_fatal = 1;
         goto cleanup;          goto cleanup;
 }  }
   
Line 838  static int
Line 848  static int
 mmsg(enum mandocerr t, void *arg, int ln, int col, const char *msg)  mmsg(enum mandocerr t, void *arg, int ln, int col, const char *msg)
 {  {
         struct curparse *cp;          struct curparse *cp;
           const char *level;
           int rc;
   
         cp = (struct curparse *)arg;          cp = (struct curparse *)arg;
           level = NULL;
           rc = 1;
   
         if (t <= MANDOCERR_ERROR) {          if (t >= MANDOCERR_FATAL) {
                 if ( ! (cp->wflags & WARN_WALL))                  with_fatal = 1;
                   level = "FATAL";
                   rc = 0;
           } else {
                   if ( ! (WARN_WALL & cp->wflags))
                         return(1);                          return(1);
                 with_warning = 1;                  if (t >= MANDOCERR_ERROR) {
         } else                          with_error = 1;
                 with_error = 1;                          level = "ERROR";
                   }
                   if (WARN_WERR & cp->wflags) {
                           with_fatal = 1;
                           rc = 0;
                   }
           }
   
         fprintf(stderr, "%s:%d:%d: %s", cp->file,          fprintf(stderr, "%s:%d:%d:", cp->file, ln, col + 1);
                         ln, col + 1, mandocerrs[t]);          if (level)
                   fprintf(stderr, " %s:", level);
           fprintf(stderr, " %s", mandocerrs[t]);
         if (msg)          if (msg)
                 fprintf(stderr, ": %s", msg);                  fprintf(stderr, ": %s", msg);
   
         fputc('\n', stderr);          fputc('\n', stderr);
   
         /* This is superfluous, but whatever. */          return(rc);
         if (t > MANDOCERR_ERROR)  
                 return(0);  
         if (cp->wflags & WARN_WERR) {  
                 with_error = 1;  
                 return(0);  
         }  
         return(1);  
 }  }

Legend:
Removed from v.1.90  
changed lines
  Added in v.1.94

CVSweb