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

Diff for /mandoc/read.c between version 1.208 and 1.211

version 1.208, 2018/12/20 21:30:32 version 1.211, 2019/01/11 17:04:44
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-2018 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010-2019 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 47 
Line 47 
 struct  mparse {  struct  mparse {
         struct roff      *roff; /* roff parser (!NULL) */          struct roff      *roff; /* roff parser (!NULL) */
         struct roff_man  *man; /* man parser */          struct roff_man  *man; /* man parser */
         char             *sodest; /* filename pointed to by .so */  
         struct buf       *primary; /* buffer currently being parsed */          struct buf       *primary; /* buffer currently being parsed */
         struct buf       *secondary; /* copy of top level input */          struct buf       *secondary; /* copy of top level input */
         struct buf       *loop; /* open .while request line */          struct buf       *loop; /* open .while request line */
Line 123  choose_parser(struct mparse *curp)
Line 122  choose_parser(struct mparse *curp)
         }          }
   
         if (format == MPARSE_MDOC) {          if (format == MPARSE_MDOC) {
                 curp->man->macroset = MACROSET_MDOC;                  curp->man->meta.macroset = MACROSET_MDOC;
                 if (curp->man->mdocmac == NULL)                  if (curp->man->mdocmac == NULL)
                         curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);                          curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);
         } else {          } else {
                 curp->man->macroset = MACROSET_MAN;                  curp->man->meta.macroset = MACROSET_MAN;
                 if (curp->man->manmac == NULL)                  if (curp->man->manmac == NULL)
                         curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);                          curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
         }          }
         curp->man->first->tok = TOKEN_NONE;          curp->man->meta.first->tok = TOKEN_NONE;
 }  }
   
 /*  /*
Line 334  rerun:
Line 333  rerun:
                 case ROFF_IGN:                  case ROFF_IGN:
                         break;                          break;
                 case ROFF_CONT:                  case ROFF_CONT:
                         if (curp->man->macroset == MACROSET_NONE)                          if (curp->man->meta.macroset == MACROSET_NONE)
                                 choose_parser(curp);                                  choose_parser(curp);
                         if ((curp->man->macroset == MACROSET_MDOC ?                          if ((curp->man->meta.macroset == MACROSET_MDOC ?
                              mdoc_parseln(curp->man, curp->line, ln.buf, of) :                               mdoc_parseln(curp->man, curp->line, ln.buf, of) :
                              man_parseln(curp->man, curp->line, ln.buf, of)                               man_parseln(curp->man, curp->line, ln.buf, of)
                             ) == 2)                              ) == 2)
Line 365  rerun:
Line 364  rerun:
                 case ROFF_SO:                  case ROFF_SO:
                         if ( ! (curp->options & MPARSE_SO) &&                          if ( ! (curp->options & MPARSE_SO) &&
                             (i >= blk.sz || blk.buf[i] == '\0')) {                              (i >= blk.sz || blk.buf[i] == '\0')) {
                                 curp->sodest = mandoc_strdup(ln.buf + of);                                  curp->man->meta.sodest =
                                       mandoc_strdup(ln.buf + of);
                                 goto out;                                  goto out;
                         }                          }
                         if ((fd = mparse_open(curp, ln.buf + of)) != -1) {                          if ((fd = mparse_open(curp, ln.buf + of)) != -1) {
Line 526  read_whole_file(struct mparse *curp, int fd, struct bu
Line 526  read_whole_file(struct mparse *curp, int fd, struct bu
 static void  static void
 mparse_end(struct mparse *curp)  mparse_end(struct mparse *curp)
 {  {
         if (curp->man->macroset == MACROSET_NONE)          if (curp->man->meta.macroset == MACROSET_NONE)
                 curp->man->macroset = MACROSET_MAN;                  curp->man->meta.macroset = MACROSET_MAN;
         if (curp->man->macroset == MACROSET_MDOC)          if (curp->man->meta.macroset == MACROSET_MDOC)
                 mdoc_endparse(curp->man);                  mdoc_endparse(curp->man);
         else          else
                 man_endparse(curp->man);                  man_endparse(curp->man);
Line 607  int
Line 607  int
 mparse_open(struct mparse *curp, const char *file)  mparse_open(struct mparse *curp, const char *file)
 {  {
         char             *cp;          char             *cp;
         int               fd;          int               fd, save_errno;
   
         cp = strrchr(file, '.');          cp = strrchr(file, '.');
         curp->gzip = (cp != NULL && ! strcmp(cp + 1, "gz"));          curp->gzip = (cp != NULL && ! strcmp(cp + 1, "gz"));
Line 623  mparse_open(struct mparse *curp, const char *file)
Line 623  mparse_open(struct mparse *curp, const char *file)
          */           */
   
         if ( ! curp->gzip) {          if ( ! curp->gzip) {
                   save_errno = errno;
                 mandoc_asprintf(&cp, "%s.gz", file);                  mandoc_asprintf(&cp, "%s.gz", file);
                 fd = open(cp, O_RDONLY);                  fd = open(cp, O_RDONLY);
                 free(cp);                  free(cp);
                   errno = save_errno;
                 if (fd != -1) {                  if (fd != -1) {
                         curp->gzip = 1;                          curp->gzip = 1;
                         return fd;                          return fd;
Line 651  mparse_alloc(int options, enum mandoc_os os_e, const c
Line 653  mparse_alloc(int options, enum mandoc_os os_e, const c
         curp->man = roff_man_alloc(curp->roff, curp->os_s,          curp->man = roff_man_alloc(curp->roff, curp->os_s,
                 curp->options & MPARSE_QUICK ? 1 : 0);                  curp->options & MPARSE_QUICK ? 1 : 0);
         if (curp->options & MPARSE_MDOC) {          if (curp->options & MPARSE_MDOC) {
                 curp->man->macroset = MACROSET_MDOC;                  curp->man->meta.macroset = MACROSET_MDOC;
                 if (curp->man->mdocmac == NULL)                  if (curp->man->mdocmac == NULL)
                         curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);                          curp->man->mdocmac = roffhash_alloc(MDOC_Dd, MDOC_MAX);
         } else if (curp->options & MPARSE_MAN) {          } else if (curp->options & MPARSE_MAN) {
                 curp->man->macroset = MACROSET_MAN;                  curp->man->meta.macroset = MACROSET_MAN;
                 if (curp->man->manmac == NULL)                  if (curp->man->manmac == NULL)
                         curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);                          curp->man->manmac = roffhash_alloc(MAN_TH, MAN_MAX);
         }          }
         curp->man->first->tok = TOKEN_NONE;          curp->man->meta.first->tok = TOKEN_NONE;
         curp->man->meta.os_e = os_e;          curp->man->meta.os_e = os_e;
         return curp;          return curp;
 }  }
Line 671  mparse_reset(struct mparse *curp)
Line 673  mparse_reset(struct mparse *curp)
         roff_man_reset(curp->man);          roff_man_reset(curp->man);
         free_buf_list(curp->secondary);          free_buf_list(curp->secondary);
         curp->secondary = NULL;          curp->secondary = NULL;
         free(curp->sodest);  
         curp->sodest = NULL;  
         curp->gzip = 0;          curp->gzip = 0;
 }  }
   
Line 684  mparse_free(struct mparse *curp)
Line 684  mparse_free(struct mparse *curp)
         roff_man_free(curp->man);          roff_man_free(curp->man);
         roff_free(curp->roff);          roff_free(curp->roff);
         free_buf_list(curp->secondary);          free_buf_list(curp->secondary);
         free(curp->sodest);  
         free(curp);          free(curp);
 }  }
   
 void  struct roff_meta *
 mparse_result(struct mparse *curp, struct roff_man **man,  mparse_result(struct mparse *curp)
         char **sodest)  
 {  {
           roff_state_reset(curp->man);
         if (sodest && NULL != (*sodest = curp->sodest)) {          if (curp->options & MPARSE_VALIDATE) {
                 *man = NULL;                  if (curp->man->meta.macroset == MACROSET_MDOC)
                 return;                          mdoc_validate(curp->man);
                   else
                           man_validate(curp->man);
         }          }
         if (man)          return &curp->man->meta;
                 *man = curp->man;  
 }  }
   
 void  void

Legend:
Removed from v.1.208  
changed lines
  Added in v.1.211

CVSweb