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