hermet pushed a commit to branch master.

http://git.enlightenment.org/tools/enventor.git/commit/?id=70490cec7028b5e03cde9288da754856a9cda177

commit 70490cec7028b5e03cde9288da754856a9cda177
Author: ChunEon Park <[email protected]>
Date:   Wed Mar 5 03:15:33 2014 +0900

    search - fix the replace all misbehavior.
    
    I missed the offset of the delta length between replace and find.
    it found the position of the next incorrectly.
    now it's fixed.
---
 src/bin/search.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/bin/search.c b/src/bin/search.c
index 70f84fe..4b007d5 100644
--- a/src/bin/search.c
+++ b/src/bin/search.c
@@ -41,14 +41,16 @@ replace_all_proc(search_data *sd)
 {
    const char *find = elm_entry_entry_get(sd->en_find);
    if (!find) return;
-
    int find_len = strlen(find);
+
    const char *replace = elm_entry_entry_get(sd->en_replace);
+   int replace_len = 0;
 
    //Same word. no need to replace
    if (replace)
      {
-        if (!strcmp(find, replace) && (find_len == strlen(replace)))
+        replace_len = strlen(replace);
+        if (!strcmp(find, replace) && (find_len == replace_len))
           return;
      }
 
@@ -60,10 +62,11 @@ replace_all_proc(search_data *sd)
 
    char *s = utf8;
    int pos;
+   int delta = replace_len - find_len;
 
    while ((s = strstr(s, find)))
      {
-        pos = s - utf8;
+        pos = s + (delta * replace_cnt) - utf8;
         elm_entry_select_region_set(sd->entry, pos, pos + find_len);
         elm_entry_entry_insert(sd->entry, replace);
         elm_entry_select_none(sd->entry);

-- 


Reply via email to