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

Diff for /mandoc/read.c between version 1.83 and 1.91

version 1.83, 2014/09/06 22:39:36 version 1.91, 2014/10/18 15:57:34
Line 69  struct mparse {
Line 69  struct mparse {
         int               line; /* line number in the file */          int               line; /* line number in the file */
 };  };
   
   static  void      choose_parser(struct mparse *);
 static  void      resize_buf(struct buf *, size_t);  static  void      resize_buf(struct buf *, size_t);
 static  void      mparse_buf_r(struct mparse *, struct buf, int);  static  void      mparse_buf_r(struct mparse *, struct buf, int);
 static  void      pset(const char *, int, struct mparse *);  
 static  int       read_whole_file(struct mparse *, const char *, int,  static  int       read_whole_file(struct mparse *, const char *, int,
                                 struct buf *, int *);                                  struct buf *, int *);
 static  void      mparse_end(struct mparse *);  static  void      mparse_end(struct mparse *);
Line 117  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 117  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "sections out of conventional order",          "sections out of conventional order",
         "duplicate section title",          "duplicate section title",
         "unexpected section",          "unexpected section",
           "unusual Xr order",
           "unusual Xr punctuation",
           "AUTHORS section without An macro",
   
         /* related to macros and nesting */          /* related to macros and nesting */
         "obsolete macro",          "obsolete macro",
Line 146  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 149  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "missing font type, using \\fR",          "missing font type, using \\fR",
         "unknown font type, using \\fR",          "unknown font type, using \\fR",
         "missing -std argument, adding it",          "missing -std argument, adding it",
           "missing eqn box, using \"\"",
   
         /* related to bad macro arguments */          /* related to bad macro arguments */
         "unterminated quoted argument",          "unterminated quoted argument",
Line 155  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 159  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "skipping duplicate list type",          "skipping duplicate list type",
         "skipping -width argument",          "skipping -width argument",
         "unknown AT&T UNIX version",          "unknown AT&T UNIX version",
           "comma in function argument",
           "parenthesis in function name",
         "invalid content in Rs block",          "invalid content in Rs block",
         "invalid Boolean argument",          "invalid Boolean argument",
         "unknown font, skipping request",          "unknown font, skipping request",
Line 174  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 180  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "equation scope open on exit",          "equation scope open on exit",
         "overlapping equation scopes",          "overlapping equation scopes",
         "unexpected end of equation",          "unexpected end of equation",
         "equation syntax error",  
   
         /* related to tables */          /* related to tables */
         "bad table syntax",          "bad table syntax",
Line 247  resize_buf(struct buf *buf, size_t initial)
Line 252  resize_buf(struct buf *buf, size_t initial)
 }  }
   
 static void  static void
 pset(const char *buf, int pos, struct mparse *curp)  choose_parser(struct mparse *curp)
 {  {
         char            *cp, *ep;          char            *cp, *ep;
         int              format;          int              format;
         int              i;  
   
         if ('.' == buf[0] || '\'' == buf[0]) {  
                 for (i = 1; buf[i]; i++)  
                         if (' ' != buf[i] && '\t' != buf[i])  
                                 break;  
                 if ('\0' == buf[i])  
                         return;  
         }  
   
         /*          /*
          * If neither command line arguments -mdoc or -man select           * If neither command line arguments -mdoc or -man select
          * a parser nor the roff parser found a .Dd or .TH macro           * a parser nor the roff parser found a .Dd or .TH macro
Line 271  pset(const char *buf, int pos, struct mparse *curp)
Line 267  pset(const char *buf, int pos, struct mparse *curp)
                 cp = curp->primary->buf;                  cp = curp->primary->buf;
                 ep = cp + curp->primary->sz;                  ep = cp + curp->primary->sz;
                 while (cp < ep) {                  while (cp < ep) {
                         if (*cp == '.' || *cp != '\'') {                          if (*cp == '.' || *cp == '\'') {
                                 cp++;                                  cp++;
                                 if (cp[0] == 'D' && cp[1] == 'd') {                                  if (cp[0] == 'D' && cp[1] == 'd') {
                                         format = MPARSE_MDOC;                                          format = MPARSE_MDOC;
Line 550  rerun:
Line 546  rerun:
                  */                   */
   
                 if ( ! (curp->man || curp->mdoc))                  if ( ! (curp->man || curp->mdoc))
                         pset(ln.buf + of, pos - of, curp);                          choose_parser(curp);
   
                 /*                  /*
                  * Lastly, push down into the parsers themselves.  One                   * Lastly, push down into the parsers themselves.
                  * of these will have already been set in the pset()  
                  * routine.  
                  * If libroff returns ROFF_TBL, then add it to the                   * If libroff returns ROFF_TBL, then add it to the
                  * currently open parse.  Since we only get here if                   * currently open parse.  Since we only get here if
                  * there does exist data (see tbl_data.c), we're                   * there does exist data (see tbl_data.c), we're
Line 723  mparse_end(struct mparse *curp)
Line 717  mparse_end(struct mparse *curp)
 static void  static void
 mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file)  mparse_parse_buffer(struct mparse *curp, struct buf blk, const char *file)
 {  {
           struct buf      *svprimary;
         const char      *svfile;          const char      *svfile;
         static int       recursion_depth;          static int       recursion_depth;
   
Line 734  mparse_parse_buffer(struct mparse *curp, struct buf bl
Line 729  mparse_parse_buffer(struct mparse *curp, struct buf bl
         /* Line number is per-file. */          /* Line number is per-file. */
         svfile = curp->file;          svfile = curp->file;
         curp->file = file;          curp->file = file;
           svprimary = curp->primary;
         curp->primary = &blk;          curp->primary = &blk;
         curp->line = 1;          curp->line = 1;
         recursion_depth++;          recursion_depth++;
Line 743  mparse_parse_buffer(struct mparse *curp, struct buf bl
Line 739  mparse_parse_buffer(struct mparse *curp, struct buf bl
         if (0 == --recursion_depth && MANDOCLEVEL_FATAL > curp->file_status)          if (0 == --recursion_depth && MANDOCLEVEL_FATAL > curp->file_status)
                 mparse_end(curp);                  mparse_end(curp);
   
           curp->primary = svprimary;
         curp->file = svfile;          curp->file = svfile;
 }  }
   
Line 771  mparse_readfd(struct mparse *curp, int fd, const char 
Line 768  mparse_readfd(struct mparse *curp, int fd, const char 
                         (*curp->mmsg)(MANDOCERR_SYSOPEN,                          (*curp->mmsg)(MANDOCERR_SYSOPEN,
                             curp->file_status,                              curp->file_status,
                             file, 0, 0, strerror(errno));                              file, 0, 0, strerror(errno));
                 goto out;                  return(curp->file_status);
         }          }
   
         /*          /*
Line 781  mparse_readfd(struct mparse *curp, int fd, const char 
Line 778  mparse_readfd(struct mparse *curp, int fd, const char 
          * the parse phase for the file.           * the parse phase for the file.
          */           */
   
         if ( ! read_whole_file(curp, file, fd, &blk, &with_mmap))          if (read_whole_file(curp, file, fd, &blk, &with_mmap)) {
                 goto out;                  mparse_parse_buffer(curp, blk, file);
   
         mparse_parse_buffer(curp, blk, file);  
   
 #if HAVE_MMAP  #if HAVE_MMAP
         if (with_mmap)                  if (with_mmap)
                 munmap(blk.buf, blk.sz);                          munmap(blk.buf, blk.sz);
         else                  else
 #endif  #endif
                 free(blk.buf);                          free(blk.buf);
           }
   
         if (STDIN_FILENO != fd && -1 == close(fd))          if (STDIN_FILENO != fd && -1 == close(fd))
                 perror(file);                  perror(file);
 out:  
         return(curp->file_status);          return(curp->file_status);
 }  }
   

Legend:
Removed from v.1.83  
changed lines
  Added in v.1.91

CVSweb