]> git.cameronkatri.com Git - mandoc.git/blobdiff - libmdocml.c
Better Oo/Oc support.
[mandoc.git] / libmdocml.c
index 02c85aced04cfaab067ec005c9a91c3d68194246..91f65dfeaa0437d7558a4b2dc9dd024f8f02154a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: libmdocml.c,v 1.8 2008/11/24 08:50:33 kristaps Exp $ */
+/* $Id: libmdocml.c,v 1.16 2008/11/30 21:41:35 kristaps Exp $ */
 /*
  * Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
  *
@@ -17,6 +17,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 #include <assert.h>
+#include <ctype.h>
 #include <fcntl.h>
 #include <err.h>
 #include <stdio.h>
@@ -55,8 +56,7 @@ md_buf_fill(struct md_rbuf *in)
 }
 
 
-static int
-md_buf_flush(struct md_mbuf *buf)
+static int md_buf_flush(struct md_mbuf *buf)
 {
        ssize_t          sz;
 
@@ -85,6 +85,8 @@ md_buf_flush(struct md_mbuf *buf)
 int
 md_buf_putchar(struct md_mbuf *buf, char c)
 {
+
+       assert(buf);
        return(md_buf_puts(buf, &c, 1));
 }
 
@@ -92,6 +94,8 @@ md_buf_putchar(struct md_mbuf *buf, char c)
 int
 md_buf_putstring(struct md_mbuf *buf, const char *p)
 {
+
+       assert(buf);
        return(md_buf_puts(buf, p, strlen(p)));
 }
 
@@ -136,13 +140,13 @@ md_run_leave(const struct md_args *args, struct md_mbuf *mbuf,
        /* Run exiters. */
        switch (args->type) {
        case (MD_HTML4_STRICT):
-               if ( ! md_exit_html4_strict(args, mbuf, rbuf, c, data))
-                       return(-1);
-               break;
-       case (MD_DUMMY):
+               if ( ! md_exit_html4_strict(data, -1 == c ? 0 : 1))
+                       c = -1;
                break;
        default:
-               abort();
+               if ( ! md_exit_xml(data, -1 == c ? 0 : 1))
+                       c = -1;
+               break;
        }
 
        /* Make final flush of buffer. */
@@ -172,7 +176,7 @@ md_run_enter(const struct md_args *args, struct md_mbuf *mbuf,
                fp = md_line_html4_strict;
                break;
        default:
-               fp = md_line_dummy;
+               fp = md_line_xml;
                break;
        }
 
@@ -188,6 +192,13 @@ again:
                return(md_run_leave(args, mbuf, rbuf, 0, p));
 
        for (i = 0; i < sz; i++) {
+               /*
+               if ( ! isascii(rbuf->buf[i])) {
+                       warnx("%s: non-ascii char (line %zu, col %zu)",
+                                       rbuf->name, rbuf->line, pos);
+                       return(md_run_leave(args, mbuf, rbuf, -1, p));
+               }
+               */
                if ('\n' != rbuf->buf[i]) {
                        if (pos < BUFFER_LINE) {
                                /* LINTED */
@@ -199,8 +210,8 @@ again:
                        return(md_run_leave(args, mbuf, rbuf, -1, p));
                }
 
-               line[pos] = 0;
-               if ( ! (*fp)(args, mbuf, rbuf, line, pos, p))
+               line[(int)pos] = 0;
+               if ( ! (*fp)(p, line))
                        return(md_run_leave(args, mbuf, rbuf, -1, p));
                rbuf->line++;
                pos = 0;
@@ -228,18 +239,16 @@ md_run(const struct md_args *args,
 
        mbuf.pos = 0;
        rbuf.line = 1;
-       data = NULL;
 
        /* Run initialisers. */
        switch (args->type) {
        case (MD_HTML4_STRICT):
-               if ( ! md_init_html4_strict(args, &mbuf, &rbuf, &data))
-                       return(-1);
-               break;
-       case (MD_DUMMY):
+               data = md_init_html4_strict
+                       (args, &mbuf, &rbuf);
                break;
        default:
-               abort();
+               data = md_init_xml(args, &mbuf, &rbuf);
+               break;
        }
 
        /* Go into mainline. */