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

Diff for /mandoc/read.c between version 1.147 and 1.150.2.3

version 1.147, 2016/01/08 02:13:39 version 1.150.2.3, 2017/01/09 02:21:37
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010-2015 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010-2016 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2010, 2012 Joerg Sonnenberger <joerg@netbsd.org>   * Copyright (c) 2010, 2012 Joerg Sonnenberger <joerg@netbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 143  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 143  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "empty argument, using 0n",          "empty argument, using 0n",
         "missing display type, using -ragged",          "missing display type, using -ragged",
         "list type is not the first argument",          "list type is not the first argument",
         "missing -width in -tag list, using 8n",          "missing -width in -tag list, using 6n",
         "missing utility name, using \"\"",          "missing utility name, using \"\"",
         "missing function name, using \"\"",          "missing function name, using \"\"",
         "empty head in list item",          "empty head in list item",
Line 291  choose_parser(struct mparse *curp)
Line 291  choose_parser(struct mparse *curp)
                 }                  }
         }          }
   
         if (curp->man == NULL) {  
                 curp->man = roff_man_alloc(curp->roff, curp, curp->defos,  
                     curp->options & MPARSE_QUICK ? 1 : 0);  
                 curp->man->macroset = MACROSET_MAN;  
                 curp->man->first->tok = TOKEN_NONE;  
         }  
   
         if (format == MPARSE_MDOC) {          if (format == MPARSE_MDOC) {
                 mdoc_hash_init();                  mdoc_hash_init();
                 curp->man->macroset = MACROSET_MDOC;                  curp->man->macroset = MACROSET_MDOC;
Line 324  mparse_buf_r(struct mparse *curp, struct buf blk, size
Line 317  mparse_buf_r(struct mparse *curp, struct buf blk, size
         const char      *save_file;          const char      *save_file;
         char            *cp;          char            *cp;
         size_t           pos; /* byte number in the ln buffer */          size_t           pos; /* byte number in the ln buffer */
           size_t           j;  /* auxiliary byte number in the blk buffer */
         enum rofferr     rr;          enum rofferr     rr;
         int              of;          int              of;
         int              lnn; /* line number in the real file */          int              lnn; /* line number in the real file */
Line 429  mparse_buf_r(struct mparse *curp, struct buf blk, size
Line 423  mparse_buf_r(struct mparse *curp, struct buf blk, size
                         }                          }
   
                         if ('"' == blk.buf[i + 1] || '#' == blk.buf[i + 1]) {                          if ('"' == blk.buf[i + 1] || '#' == blk.buf[i + 1]) {
                                   j = i;
                                 i += 2;                                  i += 2;
                                 /* Comment, skip to end of line */                                  /* Comment, skip to end of line */
                                 for (; i < blk.sz; ++i) {                                  for (; i < blk.sz; ++i) {
                                         if ('\n' == blk.buf[i]) {                                          if (blk.buf[i] != '\n')
                                                 ++i;                                                  continue;
                                                 ++lnn;                                          if (blk.buf[i - 1] == ' ' ||
                                                 break;                                              blk.buf[i - 1] == '\t')
                                         }                                                  mandoc_msg(
                                                       MANDOCERR_SPACE_EOL,
                                                       curp, curp->line,
                                                       pos + i-1 - j, NULL);
                                           ++i;
                                           ++lnn;
                                           break;
                                 }                                  }
   
                                 /* Backout trailing whitespaces */                                  /* Backout trailing whitespaces */
Line 539  rerun:
Line 540  rerun:
                         if (curp->secondary)                          if (curp->secondary)
                                 curp->secondary->sz -= pos + 1;                                  curp->secondary->sz -= pos + 1;
                         save_file = curp->file;                          save_file = curp->file;
                         if (mparse_open(curp, &fd, ln.buf + of) ==                          if ((fd = mparse_open(curp, ln.buf + of)) != -1) {
                             MANDOCLEVEL_OK) {  
                                 mparse_readfd(curp, fd, ln.buf + of);                                  mparse_readfd(curp, fd, ln.buf + of);
                                 close(fd);                                  close(fd);
                                 curp->file = save_file;                                  curp->file = save_file;
Line 563  rerun:
Line 563  rerun:
                         break;                          break;
                 }                  }
   
                 /*                  if (curp->man->macroset == MACROSET_NONE)
                  * If input parsers have not been allocated, do so now.  
                  * We keep these instanced between parsers, but set them  
                  * locally per parse routine since we can use different  
                  * parsers with each one.  
                  */  
   
                 if (curp->man == NULL ||  
                     curp->man->macroset == MACROSET_NONE)  
                         choose_parser(curp);                          choose_parser(curp);
   
                 /*                  /*
Line 684  read_whole_file(struct mparse *curp, const char *file,
Line 676  read_whole_file(struct mparse *curp, const char *file,
 static void  static void
 mparse_end(struct mparse *curp)  mparse_end(struct mparse *curp)
 {  {
   
         if (curp->man == NULL && curp->sodest == NULL)  
                 curp->man = roff_man_alloc(curp->roff, curp, curp->defos,  
                     curp->options & MPARSE_QUICK ? 1 : 0);  
         if (curp->man->macroset == MACROSET_NONE)          if (curp->man->macroset == MACROSET_NONE)
                 curp->man->macroset = MACROSET_MAN;                  curp->man->macroset = MACROSET_MAN;
         if (curp->man->macroset == MACROSET_MDOC)          if (curp->man->macroset == MACROSET_MDOC)
Line 777  mparse_readfd(struct mparse *curp, int fd, const char 
Line 765  mparse_readfd(struct mparse *curp, int fd, const char 
         return curp->file_status;          return curp->file_status;
 }  }
   
 enum mandoclevel  int
 mparse_open(struct mparse *curp, int *fd, const char *file)  mparse_open(struct mparse *curp, const char *file)
 {  {
         char             *cp;          char             *cp;
           int               fd;
   
         curp->file = file;          curp->file = file;
         cp = strrchr(file, '.');          cp = strrchr(file, '.');
Line 788  mparse_open(struct mparse *curp, int *fd, const char *
Line 777  mparse_open(struct mparse *curp, int *fd, const char *
   
         /* First try to use the filename as it is. */          /* First try to use the filename as it is. */
   
         if ((*fd = open(file, O_RDONLY)) != -1)          if ((fd = open(file, O_RDONLY)) != -1)
                 return MANDOCLEVEL_OK;                  return fd;
   
         /*          /*
          * If that doesn't work and the filename doesn't           * If that doesn't work and the filename doesn't
Line 798  mparse_open(struct mparse *curp, int *fd, const char *
Line 787  mparse_open(struct mparse *curp, int *fd, const char *
   
         if ( ! curp->gzip) {          if ( ! curp->gzip) {
                 mandoc_asprintf(&cp, "%s.gz", file);                  mandoc_asprintf(&cp, "%s.gz", file);
                 *fd = open(file, O_RDONLY);                  fd = open(cp, O_RDONLY);
                 free(cp);                  free(cp);
                 if (*fd != -1) {                  if (fd != -1) {
                         curp->gzip = 1;                          curp->gzip = 1;
                         return MANDOCLEVEL_OK;                          return fd;
                 }                  }
         }          }
   
         /* Neither worked, give up. */          /* Neither worked, give up. */
   
         mandoc_msg(MANDOCERR_FILE, curp, 0, 0, strerror(errno));          mandoc_msg(MANDOCERR_FILE, curp, 0, 0, strerror(errno));
         return MANDOCLEVEL_ERROR;          return -1;
 }  }
   
 struct mparse *  struct mparse *
Line 842  mparse_alloc(int options, enum mandoclevel wlevel, man
Line 831  mparse_alloc(int options, enum mandoclevel wlevel, man
 void  void
 mparse_reset(struct mparse *curp)  mparse_reset(struct mparse *curp)
 {  {
   
         roff_reset(curp->roff);          roff_reset(curp->roff);
           roff_man_reset(curp->man);
         if (curp->man != NULL)  
                 roff_man_reset(curp->man);  
         if (curp->secondary)          if (curp->secondary)
                 curp->secondary->sz = 0;                  curp->secondary->sz = 0;
   

Legend:
Removed from v.1.147  
changed lines
  Added in v.1.150.2.3

CVSweb