SF.net SVN: geany:[4718] branches/gnu-regex
ntrel at users.sourceforge.net
ntrel at xxxxx
Mon Mar 1 18:28:57 UTC 2010
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.
More information about the Commits
mailing list