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

Diff for /mandoc/main.c between version 1.74 and 1.77

version 1.74, 2010/05/15 22:28:22 version 1.77, 2010/05/16 19:08:11
Line 386  static void
Line 386  static void
 fdesc(struct curparse *curp)  fdesc(struct curparse *curp)
 {  {
         struct buf       ln, blk;          struct buf       ln, blk;
         int              i, pos, lnn, lnn_start, with_mmap;          int              i, pos, lnn, lnn_start, with_mmap, of;
         enum rofferr     re;          enum rofferr     re;
         struct man      *man;          struct man      *man;
         struct mdoc     *mdoc;          struct mdoc     *mdoc;
Line 467  fdesc(struct curparse *curp)
Line 467  fdesc(struct curparse *curp)
                                 goto bailout;                                  goto bailout;
                 ln.buf[pos] = '\0';                  ln.buf[pos] = '\0';
   
                 re = roff_parseln(roff, lnn_start, &ln.buf, &ln.sz);                  /*
                    * A significant amount of complexity is contained by
                    * the roff preprocessor.  It's line-oriented but can be
                    * expressed on one line, so we need at times to
                    * readjust our starting point and re-run it.  The roff
                    * preprocessor can also readjust the buffers with new
                    * data, so we pass them in wholesale.
                    */
   
                   of = 0;
                   do {
                           re = roff_parseln(roff, lnn_start,
                                           &ln.buf, &ln.sz, of, &of);
                   } while (ROFF_RERUN == re);
   
                 if (ROFF_IGN == re)                  if (ROFF_IGN == re)
                         continue;                          continue;
                 else if (ROFF_ERR == re)                  else if (ROFF_ERR == re)
                         goto bailout;                          goto bailout;
   
                 /* If unset, assign parser in pset(). */                  /*
                    * If input parsers have not been allocated, do so now.
                    * We keep these instanced betwen parsers, but set them
                    * locally per parse routine since we can use different
                    * parsers with each one.
                    */
   
                 if ( ! (man || mdoc) && ! pset(ln.buf, pos, curp, &man, &mdoc))                  if ( ! (man || mdoc))
                         goto bailout;                          if ( ! pset(ln.buf + of, pos - of, curp, &man, &mdoc))
                                   goto bailout;
   
                 /* Pass down into parsers. */                  /* Lastly, push down into the parsers themselves. */
   
                 if (man && ! man_parseln(man, lnn_start, ln.buf))                  if (man && ! man_parseln(man, lnn_start, ln.buf, of))
                         goto bailout;                          goto bailout;
                 if (mdoc && ! mdoc_parseln(mdoc, lnn_start, ln.buf))                  if (mdoc && ! mdoc_parseln(mdoc, lnn_start, ln.buf, of))
                         goto bailout;                          goto bailout;
         }          }
   
Line 493  fdesc(struct curparse *curp)
Line 513  fdesc(struct curparse *curp)
                 goto bailout;                  goto bailout;
         }          }
   
           /* Clean up the parse routine ASTs. */
   
         if (mdoc && ! mdoc_endparse(mdoc))          if (mdoc && ! mdoc_endparse(mdoc))
                 goto bailout;                  goto bailout;
         if (man && ! man_endparse(man))          if (man && ! man_endparse(man))
Line 574  pset(const char *buf, int pos, struct curparse *curp,
Line 596  pset(const char *buf, int pos, struct curparse *curp,
          * default to -man, which is more lenient.           * default to -man, which is more lenient.
          */           */
   
         if (buf[0] == '.') {          if ('.' == buf[0] || '\'' == buf[0]) {
                 for (i = 1; buf[i]; i++)                  for (i = 1; buf[i]; i++)
                         if (' ' != buf[i] && '\t' != buf[i])                          if (' ' != buf[i] && '\t' != buf[i])
                                 break;                                  break;
Line 777  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 799  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "ok",          "ok",
         "multi-line scope open on exit",          "multi-line scope open on exit",
         "request for scope closure when no matching scope is open",          "request for scope closure when no matching scope is open",
           "macro requires line argument(s)",
         "line arguments will be lost",          "line arguments will be lost",
         "memory exhausted"          "memory exhausted"
 };  };

Legend:
Removed from v.1.74  
changed lines
  Added in v.1.77

CVSweb