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

Diff for /mandoc/read.c between version 1.134 and 1.135

version 1.134, 2015/04/18 16:06:41 version 1.135, 2015/04/18 16:34:25
Line 47 
Line 47 
 #define REPARSE_LIMIT   1000  #define REPARSE_LIMIT   1000
   
 struct  mparse {  struct  mparse {
         struct roff_man  *pman; /* persistent man parser */  
         struct roff_man  *pmdoc; /* persistent mdoc parser */  
         struct roff_man  *man; /* man parser */          struct roff_man  *man; /* man parser */
         struct roff_man  *mdoc; /* mdoc parser */  
         struct roff      *roff; /* roff parser (!NULL) */          struct roff      *roff; /* roff parser (!NULL) */
         const struct mchars *mchars; /* character table */          const struct mchars *mchars; /* character table */
         char             *sodest; /* filename pointed to by .so */          char             *sodest; /* filename pointed to by .so */
Line 293  choose_parser(struct mparse *curp)
Line 290  choose_parser(struct mparse *curp)
         }          }
   
         if (format == MPARSE_MDOC) {          if (format == MPARSE_MDOC) {
                 if (NULL == curp->pmdoc)                  if (curp->man == NULL)
                         curp->pmdoc = mdoc_alloc(                          curp->man = mdoc_alloc(
                             curp->roff, curp, curp->defos,                              curp->roff, curp, curp->defos,
                             MPARSE_QUICK & curp->options ? 1 : 0);                              MPARSE_QUICK & curp->options ? 1 : 0);
                 assert(curp->pmdoc);                  else
                 curp->mdoc = curp->pmdoc;                          curp->man->macroset = MACROSET_MDOC;
                 return;                  return;
         }          }
   
         /* Fall back to man(7) as a last resort. */          /* Fall back to man(7) as a last resort. */
   
         if (NULL == curp->pman)          if (curp->man == NULL)
                 curp->pman = man_alloc(                  curp->man = man_alloc(
                     curp->roff, curp, curp->defos,                      curp->roff, curp, curp->defos,
                     MPARSE_QUICK & curp->options ? 1 : 0);                      MPARSE_QUICK & curp->options ? 1 : 0);
         assert(curp->pman);          else
         curp->man = curp->pman;                  curp->man->macroset = MACROSET_MAN;
 }  }
   
 /*  /*
Line 575  rerun:
Line 572  rerun:
                  * parsers with each one.                   * parsers with each one.
                  */                   */
   
                 if ( ! (curp->man || curp->mdoc))                  if (curp->man == NULL ||
                       curp->man->macroset == MACROSET_NONE)
                         choose_parser(curp);                          choose_parser(curp);
   
                 /*                  /*
Line 589  rerun:
Line 587  rerun:
   
                 if (rr == ROFF_TBL) {                  if (rr == ROFF_TBL) {
                         while ((span = roff_span(curp->roff)) != NULL)                          while ((span = roff_span(curp->roff)) != NULL)
                                 if (curp->man == NULL)                                  if (curp->man->macroset == MACROSET_MDOC)
                                         mdoc_addspan(curp->mdoc, span);                                          mdoc_addspan(curp->man, span);
                                 else                                  else
                                         man_addspan(curp->man, span);                                          man_addspan(curp->man, span);
                 } else if (rr == ROFF_EQN) {                  } else if (rr == ROFF_EQN) {
                         if (curp->man == NULL)                          if (curp->man->macroset == MACROSET_MDOC)
                                 mdoc_addeqn(curp->mdoc, roff_eqn(curp->roff));                                  mdoc_addeqn(curp->man, roff_eqn(curp->roff));
                         else                          else
                                 man_addeqn(curp->man, roff_eqn(curp->roff));                                  man_addeqn(curp->man, roff_eqn(curp->roff));
                 } else if ((curp->man == NULL ?                  } else if ((curp->man->macroset == MACROSET_MDOC ?
                     mdoc_parseln(curp->mdoc, curp->line, ln.buf, of) :                      mdoc_parseln(curp->man, curp->line, ln.buf, of) :
                     man_parseln(curp->man, curp->line, ln.buf, of)) == 2)                      man_parseln(curp->man, curp->line, ln.buf, of)) == 2)
                                 break;                                  break;
   
Line 689  static void
Line 687  static void
 mparse_end(struct mparse *curp)  mparse_end(struct mparse *curp)
 {  {
   
         if (curp->mdoc == NULL &&          if (curp->man == NULL && curp->sodest == NULL)
             curp->man == NULL &&                  curp->man = man_alloc(curp->roff, curp, curp->defos,
             curp->sodest == NULL) {                      curp->options & MPARSE_QUICK ? 1 : 0);
                 if (curp->options & MPARSE_MDOC)          if (curp->man->macroset == MACROSET_NONE)
                         curp->mdoc = curp->pmdoc;                  curp->man->macroset = MACROSET_MAN;
                 else {          if (curp->man->macroset == MACROSET_MDOC)
                         if (curp->pman == NULL)                  mdoc_endparse(curp->man);
                                 curp->pman = man_alloc(          else
                                     curp->roff, curp, curp->defos,  
                                     curp->options & MPARSE_QUICK ? 1 : 0);  
                         curp->man = curp->pman;  
                 }  
         }  
         if (curp->mdoc)  
                 mdoc_endparse(curp->mdoc);  
         if (curp->man)  
                 man_endparse(curp->man);                  man_endparse(curp->man);
         roff_endparse(curp->roff);          roff_endparse(curp->roff);
 }  }
Line 901  mparse_alloc(int options, enum mandoclevel wlevel, man
Line 891  mparse_alloc(int options, enum mandoclevel wlevel, man
         curp->mchars = mchars;          curp->mchars = mchars;
         curp->roff = roff_alloc(curp, curp->mchars, options);          curp->roff = roff_alloc(curp, curp->mchars, options);
         if (curp->options & MPARSE_MDOC)          if (curp->options & MPARSE_MDOC)
                 curp->pmdoc = mdoc_alloc(                  curp->man = mdoc_alloc(
                     curp->roff, curp, curp->defos,                      curp->roff, curp, curp->defos,
                     curp->options & MPARSE_QUICK ? 1 : 0);                      curp->options & MPARSE_QUICK ? 1 : 0);
         if (curp->options & MPARSE_MAN)          if (curp->options & MPARSE_MAN)
                 curp->pman = man_alloc(                  curp->man = man_alloc(
                     curp->roff, curp, curp->defos,                      curp->roff, curp, curp->defos,
                     curp->options & MPARSE_QUICK ? 1 : 0);                      curp->options & MPARSE_QUICK ? 1 : 0);
   
Line 918  mparse_reset(struct mparse *curp)
Line 908  mparse_reset(struct mparse *curp)
   
         roff_reset(curp->roff);          roff_reset(curp->roff);
   
         if (curp->mdoc)          if (curp->man != NULL) {
                 mdoc_reset(curp->mdoc);                  if (curp->man->macroset == MACROSET_MDOC)
         if (curp->man)                          mdoc_reset(curp->man);
                 man_reset(curp->man);                  else
                           man_reset(curp->man);
                   curp->man->macroset = MACROSET_NONE;
           }
         if (curp->secondary)          if (curp->secondary)
                 curp->secondary->sz = 0;                  curp->secondary->sz = 0;
   
         curp->file_status = MANDOCLEVEL_OK;          curp->file_status = MANDOCLEVEL_OK;
         curp->mdoc = NULL;  
         curp->man = NULL;  
   
         free(curp->sodest);          free(curp->sodest);
         curp->sodest = NULL;          curp->sodest = NULL;
Line 937  void
Line 928  void
 mparse_free(struct mparse *curp)  mparse_free(struct mparse *curp)
 {  {
   
         if (curp->pmdoc)          if (curp->man->macroset == MACROSET_MDOC)
                 mdoc_free(curp->pmdoc);                  mdoc_free(curp->man);
         if (curp->pman)          if (curp->man->macroset == MACROSET_MAN)
                 man_free(curp->pman);                  man_free(curp->man);
         if (curp->roff)          if (curp->roff)
                 roff_free(curp->roff);                  roff_free(curp->roff);
         if (curp->secondary)          if (curp->secondary)
Line 952  mparse_free(struct mparse *curp)
Line 943  mparse_free(struct mparse *curp)
 }  }
   
 void  void
 mparse_result(struct mparse *curp, struct roff_man **mdoc,  mparse_result(struct mparse *curp, struct roff_man **man,
         struct roff_man **man, char **sodest)          char **sodest)
 {  {
   
         if (sodest && NULL != (*sodest = curp->sodest)) {          if (sodest && NULL != (*sodest = curp->sodest)) {
                 *mdoc = NULL;  
                 *man = NULL;                  *man = NULL;
                 return;                  return;
         }          }
         if (mdoc)  
                 *mdoc = curp->mdoc;  
         if (man)          if (man)
                 *man = curp->man;                  *man = curp->man;
 }  }

Legend:
Removed from v.1.134  
changed lines
  Added in v.1.135

CVSweb