SF.net SVN: geany:[4717] branches/gnu-regex
ntrel at users.sourceforge.net
ntrel at xxxxx
Mon Mar 1 18:16:29 UTC 2010
Revision: 4717
http://geany.svn.sourceforge.net/geany/?rev=4717&view=rev
Author: ntrel
Date: 2010-03-01 18:16:28 +0000 (Mon, 01 Mar 2010)
Log Message:
-----------
Fix regex search for '\\'.
Modified Paths:
--------------
branches/gnu-regex/ChangeLog
branches/gnu-regex/src/document.c
branches/gnu-regex/src/search.c
branches/gnu-regex/src/utils.c
branches/gnu-regex/src/utils.h
Modified: branches/gnu-regex/ChangeLog
===================================================================
--- branches/gnu-regex/ChangeLog 2010-03-01 17:07:56 UTC (rev 4716)
+++ branches/gnu-regex/ChangeLog 2010-03-01 18:16:28 UTC (rev 4717)
@@ -2,6 +2,8 @@
* src/search.c:
Make regex search imply replacing escaped chars.
+ * src/utils.c, src/utils.h, src/search.c, src/document.c:
+ Fix regex search for '\\'.
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 17:07:56 UTC (rev 4716)
+++ branches/gnu-regex/src/document.c 2010-03-01 18:16:28 UTC (rev 4717)
@@ -2122,7 +2122,7 @@
g_free(grp);
}
/* now fix backslash, tabs, etc */
- if (!utils_str_replace_escape(str->str))
+ if (!utils_str_replace_escape(str->str, FALSE))
{
/* replace_text should already be checked as valid */
g_assert_not_reached();
Modified: branches/gnu-regex/src/search.c
===================================================================
--- branches/gnu-regex/src/search.c 2010-03-01 17:07:56 UTC (rev 4716)
+++ branches/gnu-regex/src/search.c 2010-03-01 18:16:28 UTC (rev 4717)
@@ -1077,14 +1077,18 @@
search_data.text = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(user_data)))));
search_data.flags = get_search_flags(find_dlg.dialog);
- if (strlen(search_data.text) == 0 ||
- ((search_replace_escape || search_data.flags & SCFIND_REGEXP) &&
- ! utils_str_replace_escape(search_data.text)))
+ if (strlen(search_data.text) == 0)
{
+ fail:
utils_beep();
gtk_widget_grab_focus(find_dlg.entry);
return;
}
+ if (search_replace_escape || search_data.flags & SCFIND_REGEXP)
+ {
+ if (! utils_str_replace_escape(search_data.text, search_data.flags & SCFIND_REGEXP))
+ goto fail;
+ }
ui_combo_box_add_to_history(GTK_COMBO_BOX(user_data), search_data.text);
switch (response)
@@ -1205,24 +1209,30 @@
if ((response != GEANY_RESPONSE_FIND) && (search_flags_re & SCFIND_MATCHCASE)
&& (strcmp(find, replace) == 0))
{
+ fail:
utils_beep();
gtk_widget_grab_focus(replace_dlg.find_entry);
return;
}
+ 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))
+ goto fail;
+ }
+ else if (search_replace_escape_re)
+ {
+ if (! utils_str_replace_escape(find, FALSE) ||
+ ! utils_str_replace_escape(replace, FALSE))
+ goto fail;
+ }
ui_combo_box_add_to_history(GTK_COMBO_BOX(
gtk_widget_get_parent(replace_dlg.find_entry)), find);
ui_combo_box_add_to_history(GTK_COMBO_BOX(
gtk_widget_get_parent(replace_dlg.replace_entry)), replace);
- if ((search_replace_escape_re || search_flags_re & SCFIND_REGEXP) &&
- (! utils_str_replace_escape(find) || ! utils_str_replace_escape(replace)))
- {
- utils_beep();
- gtk_widget_grab_focus(replace_dlg.find_entry);
- return;
- }
-
switch (response)
{
case GEANY_RESPONSE_REPLACE_AND_FIND:
Modified: branches/gnu-regex/src/utils.c
===================================================================
--- branches/gnu-regex/src/utils.c 2010-03-01 17:07:56 UTC (rev 4716)
+++ branches/gnu-regex/src/utils.c 2010-03-01 18:16:28 UTC (rev 4717)
@@ -1046,7 +1046,7 @@
/* Contributed by Stefan Oltmanns, thanks.
* Replaces \\, \r, \n, \t and \uXXX by their real counterparts */
-gboolean utils_str_replace_escape(gchar *string)
+gboolean utils_str_replace_escape(gchar *string, gboolean keep_backslash)
{
gsize i, j, len;
guint unicodechar;
@@ -1066,6 +1066,8 @@
switch (string[i])
{
case '\\':
+ if (keep_backslash)
+ string[j++] = '\\';
string[j] = '\\';
break;
case 'n':
Modified: branches/gnu-regex/src/utils.h
===================================================================
--- branches/gnu-regex/src/utils.h 2010-03-01 17:07:56 UTC (rev 4716)
+++ branches/gnu-regex/src/utils.h 2010-03-01 18:16:28 UTC (rev 4717)
@@ -180,7 +180,7 @@
gchar **utils_read_file_in_array(const gchar *filename);
-gboolean utils_str_replace_escape(gchar *string);
+gboolean utils_str_replace_escape(gchar *string, gboolean keep_backslash);
gboolean utils_wrap_string(gchar *string, gint wrapstart);
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