From: Fletcher T. Penney Date: Tue, 21 Nov 2017 22:14:17 +0000 (-0500) Subject: UPDATED: Improve commands for accepting/rejecting CriticMarkup X-Git-Tag: 6.3.0^2~20 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad6014479c2df649d7858c59bfa3394d666fa8e5;p=multimarkdown UPDATED: Improve commands for accepting/rejecting CriticMarkup --- diff --git a/Sources/libMultiMarkdown/critic_markup.c b/Sources/libMultiMarkdown/critic_markup.c index 0afe3cd..8047207 100644 --- a/Sources/libMultiMarkdown/critic_markup.c +++ b/Sources/libMultiMarkdown/critic_markup.c @@ -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 diff --git a/Sources/libMultiMarkdown/critic_markup.h b/Sources/libMultiMarkdown/critic_markup.h index 167668c..c5c58ce 100644 --- a/Sources/libMultiMarkdown/critic_markup.h +++ b/Sources/libMultiMarkdown/critic_markup.h @@ -60,6 +60,11 @@ #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 diff --git a/Sources/libMultiMarkdown/include/libMultiMarkdown.h b/Sources/libMultiMarkdown/include/libMultiMarkdown.h index c2159ba..f9d1ee4 100644 --- a/Sources/libMultiMarkdown/include/libMultiMarkdown.h +++ b/Sources/libMultiMarkdown/include/libMultiMarkdown.h @@ -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