diff --git a/VERSION b/VERSION
index 3336003..88c5fb8 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.3.7
+1.4.0
diff --git a/main.c b/main.c
index b5d6b80..af055a2 100644
--- a/main.c
+++ b/main.c
@@ -102,7 +102,7 @@ main(int argc, char **argv)
int flags = 0;
int debug = 0;
int toc = 0;
- int use_mkd_text = 0;
+ int use_mkd_line = 0;
char *text = 0;
char *ofile = 0;
char *urlbase = 0;
@@ -127,7 +127,7 @@ main(int argc, char **argv)
case 'f': set(&flags, optarg);
break;
case 't': text = optarg;
- use_mkd_text = 1;
+ use_mkd_line = 1;
break;
case 'T': toc = 1;
break;
@@ -151,8 +151,8 @@ main(int argc, char **argv)
argc -= optind;
argv += optind;
- if ( use_mkd_text )
- rc = mkd_text( text, strlen(text), stdout, flags);
+ if ( use_mkd_line )
+ rc = mkd_generateline( text, strlen(text), stdout, flags);
else {
if ( text ) {
if ( (doc = mkd_string(text, strlen(text), flags)) == 0 ) {
diff --git a/mkd2html.c b/mkd2html.c
index eaf5362..ae15320 100644
--- a/mkd2html.c
+++ b/mkd2html.c
@@ -162,7 +162,7 @@ char **argv;
if ( h ) {
fprintf(output,"
");
- mkd_text(h, strlen(h), output, 0);
+ mkd_generateline(h, strlen(h), output, 0);
fprintf(output, "\n");
}
for ( i=0; i < S(headers); i++ )
diff --git a/mkdio.c b/mkdio.c
index 4d88211..e0f54bc 100644
--- a/mkdio.c
+++ b/mkdio.c
@@ -244,18 +244,55 @@ mkd_string_to_anchor(char *s, int len, void(*outchar)(int,void*), void *out)
}
-/* public interface for ___mkd_reparse()
+/* ___mkd_reparse() a line
+ */
+static void
+mkd_parse_line(char *bfr, int size, MMIOT *f, int flags)
+{
+ ___mkd_initmmiot(f, 0);
+ f->flags = flags & USER_FLAGS;
+ ___mkd_reparse(bfr, size, 0, f);
+ ___mkd_emblock(f);
+}
+
+
+/* ___mkd_reparse() a line, returning it in malloc()ed memory
*/
int
-mkd_text(char *bfr, int size, FILE *output, int flags)
+mkd_line(char *bfr, int size, char **res, int flags)
+{
+ MMIOT f;
+ int len;
+
+ mkd_parse_line(bfr, size, &f, flags);
+
+ if ( len = S(f.out) ) {
+ /* kludge alert; we know that T(f.out) is malloced memory,
+ * so we can just steal it away. This is awful -- there
+ * should be an opaque method that transparently moves
+ * the pointer out of the embedded Cstring.
+ */
+ *res = T(f.out);
+ T(f.out) = 0;
+ S(f.out) = 0;
+ }
+ else {
+ *res = 0;
+ len = EOF;
+ }
+ ___mkd_freemmiot(&f, 0);
+ return len;
+}
+
+
+/* ___mkd_reparse() a line, writing it to a FILE
+ */
+int
+mkd_generateline(char *bfr, int size, FILE *output, int flags)
{
MMIOT f;
- ___mkd_initmmiot(&f, 0);
- f.flags = flags & USER_FLAGS;
-
- ___mkd_reparse(bfr, size, 0, &f);
- ___mkd_emblock(&f);
+ mkd_parse_line(bfr, size, &f, flags);
if ( flags & CDATA_OUTPUT )
mkd_generatexml(T(f.out), S(f.out), output);
else
diff --git a/mkdio.h b/mkdio.h
index 5a18f66..ed2983c 100644
--- a/mkdio.h
+++ b/mkdio.h
@@ -15,20 +15,15 @@ void mkd_basename(MMIOT*,char*);
/* compilation, debugging, cleanup
*/
int mkd_compile(MMIOT*, int);
-int mkd_generatehtml(MMIOT*,FILE*);
-int mkd_generatetoc(MMIOT*,FILE*);
-int mkd_generatecss(MMIOT*,FILE*);
-#define mkd_style mkd_generatecss
-int mkd_xhtmlpage(MMIOT*,int,FILE*);
int mkd_cleanup(MMIOT*);
/* markup functions
*/
-int mkd_text(char *, int, FILE*, int);
int mkd_dump(MMIOT*, FILE*, int, char*);
int markdown(MMIOT*, FILE*, int);
-void mkd_basename(MMIOT*,char*);
+int mkd_line(char *, int, char **, int);
void mkd_string_to_anchor(char *, int, int (*)(int,void*), void*);
+int mkd_xhtmlpage(MMIOT*,int,FILE*);
/* header block access
*/
@@ -42,6 +37,15 @@ int mkd_document(MMIOT*, char**);
int mkd_toc(MMIOT*, char**);
int mkd_css(MMIOT*, char **);
+/* write-to-file functions
+ */
+int mkd_generatehtml(MMIOT*,FILE*);
+int mkd_generatetoc(MMIOT*,FILE*);
+int mkd_generatecss(MMIOT*,FILE*);
+#define mkd_style mkd_generatecss
+int mkd_generateline(char *, int, FILE*, int);
+#define mkd_text mkd_generateline
+
/* version#.
*/
extern char markdown_version[];
diff --git a/theme.c b/theme.c
index 95f45d1..76cfa56 100644
--- a/theme.c
+++ b/theme.c
@@ -310,7 +310,7 @@ ftitle(MMIOT *doc, FILE* output, int flags)
h = pagename;
if ( h )
- mkd_text(h, strlen(h), output, flags);
+ mkd_generateline(h, strlen(h), output, flags);
}
@@ -322,7 +322,7 @@ fdate(MMIOT *doc, FILE *output, int flags)
char *h = infop ? ctime(&infop->st_mtime) : mkd_doc_date(doc);
if ( h )
- mkd_text(h, strlen(h), output, flags|MKD_TAGTEXT);
+ mkd_generateline(h, strlen(h), output, flags|MKD_TAGTEXT);
}
@@ -339,7 +339,7 @@ fauthor(MMIOT *doc, FILE *output, int flags)
#endif
if ( h )
- mkd_text(h, strlen(h), output, flags);
+ mkd_generateline(h, strlen(h), output, flags);
}