TextEdit: Improve search method to avoid overlapping results

This commit is contained in:
Ignacio Etcheverry 2016-05-28 18:23:49 +02:00
parent 65fa8f91ca
commit aba972238e

View File

@ -3566,10 +3566,8 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
//wrapped //wrapped
if (p_search_flags&SEARCH_BACKWARDS) { if (p_search_flags&SEARCH_BACKWARDS) {
text_line=text_line.substr(from_column,text_line.length());
from_column=text_line.length(); from_column=text_line.length();
} else { } else {
text_line=text_line.substr(0,from_column);
from_column=0; from_column=0;
} }
@ -3580,7 +3578,6 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
} else { } else {
//text_line=text_line.substr(0,p_from_column); //wrap around for missing begining.
if (p_search_flags&SEARCH_BACKWARDS) if (p_search_flags&SEARCH_BACKWARDS)
from_column=text_line.length()-1; from_column=text_line.length()-1;
else else
@ -3589,12 +3586,25 @@ bool TextEdit::search(const String &p_key,uint32_t p_search_flags, int p_from_li
pos=-1; pos=-1;
if (!(p_search_flags&SEARCH_BACKWARDS)) { int pos_from=0;
int last_pos=-1;
while ((last_pos=(p_search_flags&SEARCH_MATCH_CASE)?text_line.find(p_key,pos_from):text_line.findn(p_key,pos_from))!=-1) {
pos = (p_search_flags&SEARCH_MATCH_CASE)?text_line.find(p_key,from_column):text_line.findn(p_key,from_column); if (p_search_flags&SEARCH_BACKWARDS) {
} else {
pos = (p_search_flags&SEARCH_MATCH_CASE)?text_line.rfind(p_key,from_column):text_line.rfindn(p_key,from_column); if (last_pos>from_column)
break;
pos=last_pos;
} else {
if (last_pos>=from_column) {
pos=last_pos;
break;
}
}
pos_from=last_pos+p_key.length();
} }
if (pos!=-1 && (p_search_flags&SEARCH_WHOLE_WORDS)) { if (pos!=-1 && (p_search_flags&SEARCH_WHOLE_WORDS)) {