diff --git a/src/script/functions/basic.cpp b/src/script/functions/basic.cpp index fe25e939..0b0be30f 100644 --- a/src/script/functions/basic.cpp +++ b/src/script/functions/basic.cpp @@ -324,7 +324,7 @@ SCRIPT_FUNCTION(sort_text) { /// Replace the contents of a specific tag with the value of a script function String replace_tag_contents(String input, const String& tag, const ScriptValueP& contents, Context& ctx) { - assert_tagged(input); + assert_tagged(input, false); String ret; size_t start = 0, pos = input.find(tag); while (pos != String::npos) { @@ -345,7 +345,7 @@ String replace_tag_contents(String input, const String& tag, const ScriptValueP& pos = input.find(tag, start); } ret.append(input, start, pos-start); - assert_tagged(ret); + assert_tagged(ret, false); return ret; } @@ -360,13 +360,13 @@ SCRIPT_FUNCTION(tag_contents) { SCRIPT_FUNCTION(remove_tag) { SCRIPT_PARAM_C(String, input); SCRIPT_PARAM_C(String, tag); - assert_tagged(input); + assert_tagged(input, false); SCRIPT_RETURN(remove_tag(input, tag)); } SCRIPT_FUNCTION(remove_tags) { SCRIPT_PARAM_C(String, input); - assert_tagged(input); + assert_tagged(input, false); SCRIPT_RETURN(untag_no_escape(input)); } diff --git a/src/util/tagged_string.cpp b/src/util/tagged_string.cpp index e7ab57e5..f30ce876 100644 --- a/src/util/tagged_string.cpp +++ b/src/util/tagged_string.cpp @@ -573,7 +573,7 @@ String simplify_tagged_overlap(const String& str) { // ----------------------------------------------------------------------------- : Verification -void check_tagged(const String& str) { +void check_tagged(const String& str, bool check_balance) { for (size_t i = 0 ; i < str.size() ; ) { if (str.GetChar(i) == _('<')) { size_t end = skip_tag(str,i); @@ -586,14 +586,16 @@ void check_tagged(const String& str) { handle_warning(_("Invalid character in tag"),false); } } - if (str.GetChar(i+1) == _('/')) { - // close tag, don't check - } else if (is_substr(str,i,_(" tags - } else { - size_t close = match_close_tag(str,i); - if (close == String::npos) { - handle_warning(_("Invalid tagged string: missing close tag for <") + tag_at(str,i) + _(">"),false); + if (check_balance) { + if (str.GetChar(i+1) == _('/')) { + // close tag, don't check + } else if (is_substr(str,i,_(" tags + } else { + size_t close = match_close_tag(str,i); + if (close == String::npos) { + handle_warning(_("Invalid tagged string: missing close tag for <") + tag_at(str,i) + _(">"),false); + } } } i = end; diff --git a/src/util/tagged_string.hpp b/src/util/tagged_string.hpp index a5d4bfad..2e65d0b7 100644 --- a/src/util/tagged_string.hpp +++ b/src/util/tagged_string.hpp @@ -183,11 +183,11 @@ String tagged_substr_replace(const String& input, size_t start, size_t end, cons * * In case of an error, throws an exception. */ -void check_tagged(const String& str); +void check_tagged(const String& str, bool check_balance = true); #ifdef _DEBUG #define assert_tagged check_tagged #else - #define assert_tagged(_) + #define assert_tagged(_,_) #endif /// Simplify a tagged string