Commit 7e54d5b0 authored by twanvl's avatar twanvl

slightly less tagged string checking

parent 17cfc132
......@@ -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));
}
......
......@@ -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,_("<hint"))) {
// no close tag for <hint> 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,_("<hint"))) {
// no close tag for <hint> 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;
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment