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

Diff for /mandoc/Attic/libmdocml.c between version 1.7 and 1.21

version 1.7, 2008/11/23 23:12:47 version 1.21, 2008/12/10 14:42:46
Line 17 
Line 17 
  * PERFORMANCE OF THIS SOFTWARE.   * PERFORMANCE OF THIS SOFTWARE.
  */   */
 #include <assert.h>  #include <assert.h>
   #include <ctype.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <err.h>  #include <err.h>
 #include <stdio.h>  #include <stdio.h>
Line 24 
Line 25 
 #include <string.h>  #include <string.h>
 #include <unistd.h>  #include <unistd.h>
   
 #include "libmdocml.h"  
 #include "private.h"  #include "private.h"
   
 #define BUFFER_LINE      BUFSIZ /* Default line-buffer size. */  
   
 static  int      md_run_enter(const struct md_args *,  static  int      md_run_enter(const struct md_args *,
                         struct md_mbuf *, struct md_rbuf *, void *);                          struct md_mbuf *, struct md_rbuf *, void *);
 static  int      md_run_leave(const struct md_args *, struct md_mbuf *,  static  int      md_run_leave(const struct md_args *, struct md_mbuf *,
Line 55  md_buf_fill(struct md_rbuf *in)
Line 53  md_buf_fill(struct md_rbuf *in)
 }  }
   
   
 static int  static int md_buf_flush(struct md_mbuf *buf)
 md_buf_flush(struct md_mbuf *buf)  
 {  {
         ssize_t          sz;          ssize_t          sz;
   
Line 85  md_buf_flush(struct md_mbuf *buf)
Line 82  md_buf_flush(struct md_mbuf *buf)
 int  int
 md_buf_putchar(struct md_mbuf *buf, char c)  md_buf_putchar(struct md_mbuf *buf, char c)
 {  {
   
           assert(buf);
         return(md_buf_puts(buf, &c, 1));          return(md_buf_puts(buf, &c, 1));
 }  }
   
Line 92  md_buf_putchar(struct md_mbuf *buf, char c)
Line 91  md_buf_putchar(struct md_mbuf *buf, char c)
 int  int
 md_buf_putstring(struct md_mbuf *buf, const char *p)  md_buf_putstring(struct md_mbuf *buf, const char *p)
 {  {
   
           assert(buf);
         return(md_buf_puts(buf, p, strlen(p)));          return(md_buf_puts(buf, p, strlen(p)));
 }  }
   
Line 129  static int
Line 130  static int
 md_run_leave(const struct md_args *args, struct md_mbuf *mbuf,  md_run_leave(const struct md_args *args, struct md_mbuf *mbuf,
                 struct md_rbuf *rbuf, int c, void *data)                  struct md_rbuf *rbuf, int c, void *data)
 {  {
           md_exit          fp;
   
         assert(args);          assert(args);
         assert(mbuf);          assert(mbuf);
         assert(rbuf);          assert(rbuf);
   
         /* Run exiters. */          /* Run exiters. */
         switch (args->type) {          switch (args->type) {
         case (MD_HTML4_STRICT):          case (MD_HTML):
                 if ( ! md_exit_html4_strict(args, mbuf, rbuf, c, data))                  fp = md_exit_html;
                         return(-1);  
                 break;                  break;
         case (MD_DUMMY):          case (MD_XML):
                   fp = md_exit_xml;
                 break;                  break;
         default:          default:
                 abort();                  fp = md_exit_noop;
                   break;
         }          }
   
           if ( ! (*fp)(data, -1 == c ? 0 : 1))
                   c = -1;
   
         /* Make final flush of buffer. */          /* Make final flush of buffer. */
         if ( ! md_buf_flush(mbuf))          if (-1 != c && ! md_buf_flush(mbuf))
                 return(-1);                  return(-1);
   
         return(c);          return(c);
Line 158  md_run_enter(const struct md_args *args, struct md_mbu
Line 165  md_run_enter(const struct md_args *args, struct md_mbu
                 struct md_rbuf *rbuf, void *p)                  struct md_rbuf *rbuf, void *p)
 {  {
         ssize_t          sz, i;          ssize_t          sz, i;
         char             line[BUFFER_LINE];  
         size_t           pos;          size_t           pos;
           char             line[MD_LINE];
         md_line          fp;          md_line          fp;
   
         assert(args);          assert(args);
Line 168  md_run_enter(const struct md_args *args, struct md_mbu
Line 175  md_run_enter(const struct md_args *args, struct md_mbu
   
         /* Function ptrs to line-parsers. */          /* Function ptrs to line-parsers. */
         switch (args->type) {          switch (args->type) {
         case (MD_HTML4_STRICT):          case (MD_HTML):
                 fp = md_line_html4_strict;                  fp = md_line_html;
                 break;                  break;
           case (MD_XML):
                   fp = md_line_xml;
                   break;
         default:          default:
                 fp = md_line_dummy;                  fp = md_line_noop;
                 break;                  break;
         }          }
   
Line 189  again:
Line 199  again:
   
         for (i = 0; i < sz; i++) {          for (i = 0; i < sz; i++) {
                 if ('\n' != rbuf->buf[i]) {                  if ('\n' != rbuf->buf[i]) {
                         if (pos < BUFFER_LINE) {                          if (pos < MD_LINE) {
                                 /* LINTED */                                  /* LINTED */
                                 line[pos++] = rbuf->buf[i];                                  rbuf->linebuf[pos++] = rbuf->buf[i];
                                 continue;                                  continue;
                         }                          }
                         warnx("%s: line %zu too long",                          warnx("%s: line %zu too long",
Line 199  again:
Line 209  again:
                         return(md_run_leave(args, mbuf, rbuf, -1, p));                          return(md_run_leave(args, mbuf, rbuf, -1, p));
                 }                  }
   
                 if ( ! (*fp)(args, mbuf, rbuf, line, pos, p))                  rbuf->linebuf[(int)pos] = 0;
                   (void)memcpy(line, rbuf->linebuf, sizeof(line));
                   if ( ! (*fp)(p, line))
                         return(md_run_leave(args, mbuf, rbuf, -1, p));                          return(md_run_leave(args, mbuf, rbuf, -1, p));
                 rbuf->line++;                  rbuf->line++;
                 pos = 0;                  pos = 0;
Line 214  int
Line 226  int
 md_run(const struct md_args *args,  md_run(const struct md_args *args,
                 const struct md_buf *out, const struct md_buf *in)                  const struct md_buf *out, const struct md_buf *in)
 {  {
           md_init          fp;
         struct md_mbuf   mbuf;          struct md_mbuf   mbuf;
         struct md_rbuf   rbuf;          struct md_rbuf   rbuf;
         void            *data;          void            *data;
Line 227  md_run(const struct md_args *args,
Line 240  md_run(const struct md_args *args,
   
         mbuf.pos = 0;          mbuf.pos = 0;
         rbuf.line = 1;          rbuf.line = 1;
         data = NULL;  
   
         /* Run initialisers. */          /* Run initialisers. */
         switch (args->type) {          switch (args->type) {
         case (MD_HTML4_STRICT):          case (MD_HTML):
                 if ( ! md_init_html4_strict(args, &mbuf, &rbuf, &data))                  fp = md_init_html;
                         return(-1);  
                 break;                  break;
         case (MD_DUMMY):          case (MD_XML):
                   fp = md_init_xml;
                 break;                  break;
         default:          default:
                 abort();                  fp = md_init_noop;
                   break;
         }          }
   
           data = (*fp)(args, &mbuf, &rbuf);
   
         /* Go into mainline. */          /* Go into mainline. */
         return(md_run_enter(args, &mbuf, &rbuf, data));          return(md_run_enter(args, &mbuf, &rbuf, data));

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.21

CVSweb