Merge pull request #21872 from Paulb23/fix_backwards_search

Fix backwards search in TextEdit selecting non-whole words, issue 15677
This commit is contained in:
Rémi Verschelde 2018-09-10 18:52:35 +02:00 committed by GitHub
commit e883edfac9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -4838,29 +4838,28 @@ bool TextEdit::search(const String &p_key, uint32_t p_search_flags, int p_from_l
pos = -1; pos = -1;
int pos_from = 0; int pos_from = (p_search_flags & SEARCH_BACKWARDS) ? text_line.length() : 0;
int last_pos = -1; int last_pos = -1;
while (true) { while (true) {
while ((last_pos = (p_search_flags & SEARCH_MATCH_CASE) ? text_line.find(p_key, pos_from) : text_line.findn(p_key, pos_from)) != -1) {
if (p_search_flags & SEARCH_BACKWARDS) { if (p_search_flags & SEARCH_BACKWARDS) {
while ((last_pos = (p_search_flags & SEARCH_MATCH_CASE) ? text_line.rfind(p_key, pos_from) : text_line.rfindn(p_key, pos_from)) != -1) {
if (last_pos > from_column) if (last_pos <= from_column) {
break;
pos = last_pos; pos = last_pos;
break;
}
pos_from = last_pos - p_key.length();
}
} else { } else {
while ((last_pos = (p_search_flags & SEARCH_MATCH_CASE) ? text_line.find(p_key, pos_from) : text_line.findn(p_key, pos_from)) != -1) {
if (last_pos >= from_column) { if (last_pos >= from_column) {
pos = last_pos; pos = last_pos;
break; break;
} }
}
pos_from = last_pos + p_key.length(); pos_from = last_pos + p_key.length();
} }
}
bool is_match = true; bool is_match = true;
@ -4872,11 +4871,15 @@ bool TextEdit::search(const String &p_key, uint32_t p_search_flags, int p_from_l
is_match = false; is_match = false;
} }
if (pos_from == -1) {
pos = -1;
}
if (is_match || last_pos == -1 || pos == -1) { if (is_match || last_pos == -1 || pos == -1) {
break; break;
} }
pos_from = pos + 1; pos_from = (p_search_flags & SEARCH_BACKWARDS) ? pos - 1 : pos + 1;
pos = -1; pos = -1;
} }