Revision: 4718 http://geany.svn.sourceforge.net/geany/?rev=4718&view=rev Author: ntrel Date: 2010-03-01 18:28:57 +0000 (Mon, 01 Mar 2010)
Log Message: ----------- Fix not replacing escapes within a backreference match.
Modified Paths: -------------- branches/gnu-regex/ChangeLog branches/gnu-regex/src/document.c branches/gnu-regex/src/search.c branches/gnu-regex/src/utils.c
Modified: branches/gnu-regex/ChangeLog =================================================================== --- branches/gnu-regex/ChangeLog 2010-03-01 18:16:28 UTC (rev 4717) +++ branches/gnu-regex/ChangeLog 2010-03-01 18:28:57 UTC (rev 4718) @@ -4,6 +4,8 @@ Make regex search imply replacing escaped chars. * src/utils.c, src/utils.h, src/search.c, src/document.c: Fix regex search for '\'. + * src/utils.c, src/search.c, src/document.c: + Fix not replacing escapes within a backreference match.
2010-02-26 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: branches/gnu-regex/src/document.c =================================================================== --- branches/gnu-regex/src/document.c 2010-03-01 18:16:28 UTC (rev 4717) +++ branches/gnu-regex/src/document.c 2010-03-01 18:28:57 UTC (rev 4718) @@ -2099,17 +2099,12 @@ i++; continue; } - if (ptr[1] == '\') - { - /* backslash escape, leave for later */ - i += 2; - continue; - } c = ptr[1]; - if (!isdigit(c)) + /* backslash or unnecessary escape */ + if (c == '\' || !isdigit(c)) { - /* unnecessary escape */ - i += 2; + g_string_erase(str, i, 1); + i++; continue; } /* digit escape */ @@ -2121,12 +2116,6 @@ i += strlen(grp); g_free(grp); } - /* now fix backslash, tabs, etc */ - if (!utils_str_replace_escape(str->str, FALSE)) - { - /* replace_text should already be checked as valid */ - g_assert_not_reached(); - } ret = sci_replace_target(sci, str->str, FALSE); g_string_free(str, TRUE); return ret;
Modified: branches/gnu-regex/src/search.c =================================================================== --- branches/gnu-regex/src/search.c 2010-03-01 18:16:28 UTC (rev 4717) +++ branches/gnu-regex/src/search.c 2010-03-01 18:28:57 UTC (rev 4718) @@ -1216,9 +1216,8 @@ } if (search_flags_re & SCFIND_REGEXP) { - /* we don't want to interpret escapes for replace string yet, so check a copy */ if (! utils_str_replace_escape(find, TRUE) || - ! utils_str_replace_escape(utils_strdupa(replace), TRUE)) + ! utils_str_replace_escape(replace, TRUE)) goto fail; } else if (search_replace_escape_re)
Modified: branches/gnu-regex/src/utils.c =================================================================== --- branches/gnu-regex/src/utils.c 2010-03-01 18:16:28 UTC (rev 4717) +++ branches/gnu-regex/src/utils.c 2010-03-01 18:28:57 UTC (rev 4718) @@ -1045,7 +1045,8 @@
/* Contributed by Stefan Oltmanns, thanks. - * Replaces \, \r, \n, \t and \uXXX by their real counterparts */ + * Replaces \, \r, \n, \t and \uXXX by their real counterparts. + * keep_backslash is used for regex strings to leave '\' and '?' in place */ gboolean utils_str_replace_escape(gchar *string, gboolean keep_backslash) { gsize i, j, len; @@ -1165,6 +1166,8 @@ } default: /* unnecessary escapes are allowed */ + if (keep_backslash) + string[j++] = '\'; string[j] = string[i]; } }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.