From: Fletcher T. Penney Date: Thu, 6 Sep 2018 01:58:02 +0000 (-0400) Subject: ADDED: Add conversion from ITMZ routines X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=14a362d83a16ba1bcc07d198a0964459ab3a63ac;p=multimarkdown ADDED: Add conversion from ITMZ routines --- diff --git a/Sources/libMultiMarkdown/include/libMultiMarkdown.h b/Sources/libMultiMarkdown/include/libMultiMarkdown.h index 062f3b6..800e9d9 100644 --- a/Sources/libMultiMarkdown/include/libMultiMarkdown.h +++ b/Sources/libMultiMarkdown/include/libMultiMarkdown.h @@ -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 diff --git a/Sources/libMultiMarkdown/mmd.c b/Sources/libMultiMarkdown/mmd.c index 6bf6b71..1144b3d 100644 --- a/Sources/libMultiMarkdown/mmd.c +++ b/Sources/libMultiMarkdown/mmd.c @@ -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;