]> granicus.if.org Git - multimarkdown/commitdiff
UPDATED: Improve commands for accepting/rejecting CriticMarkup
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 21 Nov 2017 22:14:17 +0000 (17:14 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Tue, 21 Nov 2017 22:14:17 +0000 (17:14 -0500)
Sources/libMultiMarkdown/critic_markup.c
Sources/libMultiMarkdown/critic_markup.h
Sources/libMultiMarkdown/include/libMultiMarkdown.h

index 0afe3cda419494684bb23be54ae970b32db6461a..8047207595dea238afdc910383b56b71bfcc0d8f 100644 (file)
@@ -233,8 +233,9 @@ void accept_token_tree(DString * d, token * t) {
        }
 }
 
-void mmd_critic_markup_accept(DString * d) {
-       token * t = critic_parse_substring(d->str, 0, d->currentStringLength);
+
+void mmd_critic_markup_accept_range(DString * d, size_t start, size_t len) {
+       token * t = critic_parse_substring(d->str, start, len);
 
        if (t && t->child) {
                accept_token_tree(d, t->child->tail);
@@ -244,6 +245,11 @@ void mmd_critic_markup_accept(DString * d) {
 }
 
 
+void mmd_critic_markup_accept(DString * d) {
+       mmd_critic_markup_accept_range(d, 0, d->currentStringLength);
+}
+
+
 void reject_token_tree(DString * d, token * t);
 void reject_token(DString * d, token * t);
 
@@ -317,9 +323,11 @@ void reject_token_tree(DString * d, token * t) {
        }
 }
 
-void mmd_critic_markup_reject(DString * d) {
-       token * t = critic_parse_substring(d->str, 0, d->currentStringLength);
 
+void mmd_critic_markup_reject_range(DString * d, size_t start, size_t len) {
+       token * t = critic_parse_substring(d->str, start, len);
+       token_tree_describe(t, d->str);
+       
        if (t && t->child) {
                reject_token_tree(d, t->child->tail);
        }
@@ -328,3 +336,59 @@ void mmd_critic_markup_reject(DString * d) {
 
 }
 
+
+void mmd_critic_markup_reject(DString * d) {
+       mmd_critic_markup_reject_range(d, 0, d->currentStringLength);
+}
+
+
+#ifdef TEST
+void Test_critic(CuTest* tc) {
+       #ifdef kUseObjectPool
+       token_pool_init();
+       #endif
+
+       DString * test = d_string_new("{--foo bar--}");
+       mmd_critic_markup_reject(test);
+       CuAssertStrEquals(tc, "foo bar", test->str);
+
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{++foo bar++}");
+       mmd_critic_markup_reject(test);
+       CuAssertStrEquals(tc, "", test->str);
+
+
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{--foo bar--}");
+       mmd_critic_markup_accept(test);
+       CuAssertStrEquals(tc, "", test->str);
+
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{++foo bar++}");
+       mmd_critic_markup_accept(test);
+       CuAssertStrEquals(tc, "foo bar", test->str);
+
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{++foo{--bat--}bar++}");
+       mmd_critic_markup_accept(test);
+       CuAssertStrEquals(tc, "foobar", test->str);
+
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{--foo{-- bat --}bar--}");
+       mmd_critic_markup_reject(test);
+       CuAssertStrEquals(tc, "foo bat bar", test->str);
+
+
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{--foo{++ bat ++}bar--}");
+       mmd_critic_markup_reject(test);
+       CuAssertStrEquals(tc, "foobar", test->str);
+
+       // Decrement counter and clean up token pool
+       token_pool_drain();
+
+       #ifdef kUseObjectPool
+       token_pool_free();
+       #endif
+}
+#endif
index 167668c7622763de2b2296ff9b1d23e31988f31f..c5c58ce462cee1cf0e928a4fcf887c4c185fcc5f 100644 (file)
 
 #include "d_string.h"
 
+#ifdef TEST
+       #include "CuTest.h"
+#endif
+
+
 enum cm_types {
        CM_ADD_OPEN = 1,                // Can't use type 0
        CM_ADD_CLOSE,
@@ -88,7 +93,9 @@ enum cm_types {
 
 
 void mmd_critic_markup_accept(DString * d);
+void mmd_critic_markup_accept_range(DString * d, size_t start, size_t len);
 
 void mmd_critic_markup_reject(DString * d);
+void mmd_critic_markup_reject_range(DString * d, size_t start, size_t len);
 
 #endif
index c2159badd82537c269519b6724fc045327a3d3aa..f9d1ee453855eb8276a7e4704df322894a7eda7a 100644 (file)
@@ -306,10 +306,18 @@ void mmd_append_mmd_footer(DString * source);
 void mmd_critic_markup_accept(DString * d);
 
 
+/// Accept all CriticMarkup changes in the specified range
+void mmd_critic_markup_accept_range(DString * d, size_t start, size_t len);
+
+
 /// Reject all CriticMarkup changes in the source string
 void mmd_critic_markup_reject(DString * d);
 
 
+/// Reject all CriticMarkup changes in the specified range
+void mmd_critic_markup_reject_range(DString * d, size_t start, size_t len);
+
+
 /// Token types for parse tree
 enum token_types {
        DOC_START_TOKEN = 0,    //!< DOC_START_TOKEN must be type 0