]> granicus.if.org Git - multimarkdown/commitdiff
ADDED: Add conversion from ITMZ routines
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Thu, 6 Sep 2018 01:58:02 +0000 (21:58 -0400)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Thu, 6 Sep 2018 01:58:02 +0000 (21:58 -0400)
Sources/libMultiMarkdown/include/libMultiMarkdown.h
Sources/libMultiMarkdown/mmd.c

index 062f3b6bb8b14dadb7101bb408c75a0affd1e0d5..800e9d9526549e3fb24fef098df95087246e9fef 100644 (file)
@@ -105,6 +105,10 @@ typedef struct stack stack;
 DString * mmd_string_convert_opml_to_text(const char * source);
 
 
+/// Convert ITMZ string to MMD
+DString * mmd_string_convert_itmz_to_text(const char * source);
+
+
 /// Convert MMD text to specified format, with specified extensions, and language
 /// Returned char * must be freed
 char * mmd_string_convert(const char * source, unsigned long extensions, short format, short language);
@@ -155,6 +159,10 @@ struct stack * mmd_string_transclusion_manifest(const char * source, const char
 DString * mmd_d_string_convert_opml_to_text(DString * source);
 
 
+/// Convert ITMZ DString to MMD
+DString * mmd_d_string_convert_itmz_to_text(DString * source);
+
+
 /// Convert MMD text to specified format, with specified extensions, and language
 /// Returned char * must be freed
 char * mmd_d_string_convert(DString * source, unsigned long extensions, short format, short language);
@@ -257,6 +265,10 @@ void mmd_engine_convert_to_file(mmd_engine * e, short format, const char * direc
 DString *  mmd_engine_convert_opml_to_text(mmd_engine * e);
 
 
+/// Convert ITMZ to text without modifying original engine source
+DString *  mmd_engine_convert_itmz_to_text(mmd_engine * e);
+
+
 /// Convert MMD text to specified format using DString as a container for block of data
 /// and length of that block.  Must be used for "complex" output formats such as EPUB.
 /// Returned DString * must be freed
index 6bf6b715540bf7ef982285ef1d1b114a8e089f71..1144b3dcc21a68dfc4e29a77121ce3060d0f4b60 100644 (file)
@@ -2887,6 +2887,55 @@ DString *  mmd_engine_convert_opml_to_text(mmd_engine * e) {
 }
 
 
+/// Convert ITMZ string to MMD
+DString * mmd_string_convert_itmz_to_text(const char * source) {
+       mmd_engine * e = mmd_engine_create_with_string(source, 0);
+
+       DString * result =  mmd_engine_convert_itmz_to_text(e);
+
+       e->root = NULL;
+       mmd_engine_free(e, true);
+
+       return result;
+}
+
+
+/// Convert ITMZ DString to MMD
+DString * mmd_d_string_convert_itmz_to_text(DString * source) {
+       mmd_engine * e = mmd_engine_create_with_dstring(source, 0);
+
+       DString * result =  mmd_engine_convert_itmz_to_text(e);
+
+       e->root = NULL;
+       mmd_engine_free(e, false);
+
+       return result;
+}
+
+
+/// Convert ITMZ to text without modifying original engine source
+DString *  mmd_engine_convert_itmz_to_text(mmd_engine * e) {
+       DString * original = d_string_new("");
+       d_string_append_c_array(original, e->dstr->str, e->dstr->currentStringLength);
+
+       mmd_convert_opml_string(e, 0, e->dstr->currentStringLength);
+
+       // Swap original and engine
+       char * temp = e->dstr->str;
+       size_t size = e->dstr->currentStringLength;
+
+       // Replace engine copy with original ITMZ text
+       e->dstr->str = original->str;
+       e->dstr->currentStringLength = original->currentStringLength;
+
+       // Original now contains the processed text
+       original->str = temp;
+       original->currentStringLength = size;
+
+       return original;
+}
+
+
 /// Return string containing engine version.
 char * mmd_version(void) {
        char * result;