(mc_search_regex_prepare_replace_str): refactoring.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2015-01-07 09:52:24 +03:00
parent fa7d2ea110
commit 6ed1eba88f

View File

@ -8,7 +8,7 @@
Written by: Written by:
Slava Zanko <slavazanko@gmail.com>, 2009, 2010, 2011, 2013 Slava Zanko <slavazanko@gmail.com>, 2009, 2010, 2011, 2013
Vitaliy Filippov <vitalif@yourcmc.ru>, 2011 Vitaliy Filippov <vitalif@yourcmc.ru>, 2011
Andrew Borodin <aborodin@vmail.ru>, 2013, 2014 Andrew Borodin <aborodin@vmail.ru>, 2013-2015
This file is part of the Midnight Commander. This file is part of the Midnight Commander.
@ -940,8 +940,7 @@ mc_search_regex_prepare_replace_str (mc_search_t * lc_mc_search, GString * repla
int num_replace_tokens; int num_replace_tokens;
gsize loop; gsize loop;
gsize len = 0; gsize prev = 0;
gchar *prev_str;
replace_transform_type_t replace_flags = REPLACE_T_NO_TRANSFORM; replace_transform_type_t replace_flags = REPLACE_T_NO_TRANSFORM;
num_replace_tokens = num_replace_tokens =
@ -959,12 +958,12 @@ mc_search_regex_prepare_replace_str (mc_search_t * lc_mc_search, GString * repla
} }
ret = g_string_sized_new (64); ret = g_string_sized_new (64);
prev_str = replace_str->str;
for (loop = 0; loop < replace_str->len - 1; loop++) for (loop = 0; loop < replace_str->len - 1; loop++)
{ {
int lc_index; int lc_index;
gchar *tmp_str; gchar *tmp_str;
gsize len = 0;
lc_index = mc_search_regex__process_replace_str (replace_str, loop, &len, &replace_flags); lc_index = mc_search_regex__process_replace_str (replace_str, loop, &len, &replace_flags);
@ -972,39 +971,37 @@ mc_search_regex_prepare_replace_str (mc_search_t * lc_mc_search, GString * repla
{ {
if (len != 0) if (len != 0)
{ {
mc_search_regex__process_append_str (ret, prev_str, mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
replace_str->str - prev_str + loop,
&replace_flags); &replace_flags);
mc_search_regex__process_append_str (ret, replace_str->str + loop + 1, len - 1, mc_search_regex__process_append_str (ret, replace_str->str + loop + 1, len - 1,
&replace_flags); &replace_flags);
prev_str = replace_str->str + loop + len; prev = loop + len;
loop += len - 1; loop = prev - 1; /* prepare to loop++ */
} }
continue; continue;
} }
if (lc_index == REPLACE_PREPARE_T_REPLACE_FLAG) if (lc_index == REPLACE_PREPARE_T_REPLACE_FLAG)
{ {
if (loop) if (loop != 0)
mc_search_regex__process_append_str (ret, prev_str, mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
replace_str->str - prev_str + loop,
&replace_flags); &replace_flags);
prev_str = replace_str->str + loop + len; prev = loop + len;
loop += len - 1; loop = prev - 1; /* prepare to loop++ */
continue; continue;
} }
/* escape sequence */ /* escape sequence */
if (lc_index == REPLACE_PREPARE_T_ESCAPE_SEQ) if (lc_index == REPLACE_PREPARE_T_ESCAPE_SEQ)
{ {
mc_search_regex__process_append_str (ret, prev_str, mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
replace_str->str + loop - prev_str,
&replace_flags); &replace_flags);
/* call process_escape_sequence without starting '\\' */ /* call process_escape_sequence without starting '\\' */
mc_search_regex__process_escape_sequence (ret, replace_str->str + loop + 1, len - 1, mc_search_regex__process_escape_sequence (ret, replace_str->str + loop + 1, len - 1,
&replace_flags, lc_mc_search->is_utf8); &replace_flags, lc_mc_search->is_utf8);
prev_str = replace_str->str + loop + len; prev = loop + len;
loop += len - 1; loop = prev - 1; /* prepare to loop++ */
continue; continue;
} }
@ -1019,17 +1016,18 @@ mc_search_regex_prepare_replace_str (mc_search_t * lc_mc_search, GString * repla
tmp_str = mc_search_regex__get_token_by_num (lc_mc_search, lc_index); tmp_str = mc_search_regex__get_token_by_num (lc_mc_search, lc_index);
if (loop) if (loop != 0)
mc_search_regex__process_append_str (ret, prev_str, replace_str->str - prev_str + loop, mc_search_regex__process_append_str (ret, replace_str->str + prev, loop - prev,
&replace_flags); &replace_flags);
prev_str = replace_str->str + loop + len;
mc_search_regex__process_append_str (ret, tmp_str, -1, &replace_flags); mc_search_regex__process_append_str (ret, tmp_str, -1, &replace_flags);
g_free (tmp_str); g_free (tmp_str);
loop += len - 1;
prev = loop + len;
loop = prev - 1; /* prepare to loop++ */
} }
mc_search_regex__process_append_str (ret, prev_str,
replace_str->str - prev_str + replace_str->len, mc_search_regex__process_append_str (ret, replace_str->str + prev, replace_str->len - prev,
&replace_flags); &replace_flags);
return ret; return ret;