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

Diff for /mandoc/read.c between version 1.23 and 1.27

version 1.23, 2011/07/23 18:41:18 version 1.27, 2012/02/05 16:46:15
Line 63  struct mparse {
Line 63  struct mparse {
         mandocmsg         mmsg; /* warning/error message handler */          mandocmsg         mmsg; /* warning/error message handler */
         void             *arg; /* argument to mmsg */          void             *arg; /* argument to mmsg */
         const char       *file;          const char       *file;
           struct buf       *secondary;
 };  };
   
 static  void      resize_buf(struct buf *, size_t);  static  void      resize_buf(struct buf *, size_t);
Line 191  static const char * const mandocerrs[MANDOCERR_MAX] = 
Line 192  static const char * const mandocerrs[MANDOCERR_MAX] = 
         "not a manual",          "not a manual",
         "column syntax is inconsistent",          "column syntax is inconsistent",
         "NOT IMPLEMENTED: .Bd -file",          "NOT IMPLEMENTED: .Bd -file",
         "line scope broken, syntax violated",  
         "argument count wrong, violates syntax",          "argument count wrong, violates syntax",
         "child violates parent syntax",          "child violates parent syntax",
         "argument count wrong, violates syntax",          "argument count wrong, violates syntax",
Line 325  mparse_buf_r(struct mparse *curp, struct buf blk, int 
Line 325  mparse_buf_r(struct mparse *curp, struct buf blk, int 
                          * Warn about bogus characters.  If you're using                           * Warn about bogus characters.  If you're using
                          * non-ASCII encoding, you're screwing your                           * non-ASCII encoding, you're screwing your
                          * readers.  Since I'd rather this not happen,                           * readers.  Since I'd rather this not happen,
                          * I'll be helpful and drop these characters so                           * I'll be helpful and replace these characters
                          * we don't display gibberish.  Note to manual                           * with "?", so we don't display gibberish.
                          * writers: use special characters.                           * Note to manual writers: use special characters.
                          */                           */
   
                         c = (unsigned char) blk.buf[i];                          c = (unsigned char) blk.buf[i];
Line 335  mparse_buf_r(struct mparse *curp, struct buf blk, int 
Line 335  mparse_buf_r(struct mparse *curp, struct buf blk, int 
                         if ( ! (isascii(c) &&                          if ( ! (isascii(c) &&
                                         (isgraph(c) || isblank(c)))) {                                          (isgraph(c) || isblank(c)))) {
                                 mandoc_msg(MANDOCERR_BADCHAR, curp,                                  mandoc_msg(MANDOCERR_BADCHAR, curp,
                                                 curp->line, pos, "ignoring byte");                                                  curp->line, pos, NULL);
                                 i++;                                  i++;
                                   if (pos >= (int)ln.sz)
                                           resize_buf(&ln, 256);
                                   ln.buf[pos++] = '?';
                                 continue;                                  continue;
                         }                          }
   
Line 411  mparse_buf_r(struct mparse *curp, struct buf blk, int 
Line 414  mparse_buf_r(struct mparse *curp, struct buf blk, int 
   
                 of = 0;                  of = 0;
   
                   /*
                    * Maintain a lookaside buffer of all parsed lines.  We
                    * only do this if mparse_keep() has been invoked (the
                    * buffer may be accessed with mparse_getkeep()).
                    */
   
                   if (curp->secondary) {
                           curp->secondary->buf =
                                   mandoc_realloc
                                   (curp->secondary->buf,
                                    curp->secondary->sz + pos + 2);
                           memcpy(curp->secondary->buf +
                                           curp->secondary->sz,
                                           ln.buf, pos);
                           curp->secondary->sz += pos;
                           curp->secondary->buf
                                   [curp->secondary->sz] = '\n';
                           curp->secondary->sz++;
                           curp->secondary->buf
                                   [curp->secondary->sz] = '\0';
                   }
 rerun:  rerun:
                 rr = roff_parseln                  rr = roff_parseln
                         (curp->roff, curp->line,                          (curp->roff, curp->line,
Line 437  rerun:
Line 461  rerun:
                         assert(MANDOCLEVEL_FATAL <= curp->file_status);                          assert(MANDOCLEVEL_FATAL <= curp->file_status);
                         break;                          break;
                 case (ROFF_SO):                  case (ROFF_SO):
                           /*
                            * We remove `so' clauses from our lookaside
                            * buffer because we're going to descend into
                            * the file recursively.
                            */
                           if (curp->secondary)
                                   curp->secondary->sz -= pos + 1;
                         mparse_readfd_r(curp, -1, ln.buf + of, 1);                          mparse_readfd_r(curp, -1, ln.buf + of, 1);
                         if (MANDOCLEVEL_FATAL <= curp->file_status)                          if (MANDOCLEVEL_FATAL <= curp->file_status)
                                 break;                                  break;
Line 704  mparse_reset(struct mparse *curp)
Line 735  mparse_reset(struct mparse *curp)
                 mdoc_reset(curp->mdoc);                  mdoc_reset(curp->mdoc);
         if (curp->man)          if (curp->man)
                 man_reset(curp->man);                  man_reset(curp->man);
           if (curp->secondary)
                   curp->secondary->sz = 0;
   
         curp->file_status = MANDOCLEVEL_OK;          curp->file_status = MANDOCLEVEL_OK;
         curp->mdoc = NULL;          curp->mdoc = NULL;
Line 720  mparse_free(struct mparse *curp)
Line 753  mparse_free(struct mparse *curp)
                 man_free(curp->pman);                  man_free(curp->pman);
         if (curp->roff)          if (curp->roff)
                 roff_free(curp->roff);                  roff_free(curp->roff);
           if (curp->secondary)
                   free(curp->secondary->buf);
   
           free(curp->secondary);
         free(curp);          free(curp);
 }  }
   
Line 779  const char *
Line 815  const char *
 mparse_strlevel(enum mandoclevel lvl)  mparse_strlevel(enum mandoclevel lvl)
 {  {
         return(mandoclevels[lvl]);          return(mandoclevels[lvl]);
   }
   
   void
   mparse_keep(struct mparse *p)
   {
   
           assert(NULL == p->secondary);
           p->secondary = mandoc_calloc(1, sizeof(struct buf));
   }
   
   const char *
   mparse_getkeep(const struct mparse *p)
   {
   
           assert(p->secondary);
           return(p->secondary->sz ? p->secondary->buf : NULL);
 }  }

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.27

CVSweb