SF.net SVN: geany:[5730] trunk
ntrel at users.sourceforge.net
ntrel at xxxxx
Tue Apr 19 16:36:29 UTC 2011
Revision: 5730
http://geany.svn.sourceforge.net/geany/?rev=5730&view=rev
Author: ntrel
Date: 2011-04-19 16:36:29 +0000 (Tue, 19 Apr 2011)
Log Message:
-----------
Add utils_string_find() to search in a fixed range.
Change utils_string_replace() to just replace a fixed number of
characters.
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/editor.c
trunk/src/utils.c
trunk/src/utils.h
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2011-04-19 16:04:31 UTC (rev 5729)
+++ trunk/ChangeLog 2011-04-19 16:36:29 UTC (rev 5730)
@@ -4,6 +4,10 @@
Fix multiple snippet cursor positions for Tabs + Spaces mode.
Simplify editor_insert_snippet() code now we use cursor marker
strings.
+ * src/utils.c, src/utils.h, src/editor.c:
+ Add utils_string_find() to search in a fixed range.
+ Change utils_string_replace() to just replace a fixed number of
+ characters.
2011-04-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c 2011-04-19 16:04:31 UTC (rev 5729)
+++ trunk/src/editor.c 2011-04-19 16:36:29 UTC (rev 5730)
@@ -2347,9 +2347,7 @@
g_return_val_if_fail(match->rm_so >= 0, FALSE);
pos += match->rm_so;
- g_string_erase(haystack, pos, match->rm_eo - match->rm_so);
- g_string_insert(haystack, pos, replace);
- pos += strlen(replace);
+ pos = utils_string_replace(haystack, pos, match->rm_eo - match->rm_so, replace);
ret++;
}
return ret;
@@ -2534,10 +2532,12 @@
i = 0;
while (1)
{
- cursor_steps = utils_string_replace(pattern, cursor_steps, -1, geany_cursor_marker, NULL);
+ cursor_steps = utils_string_find(pattern, cursor_steps, -1, geany_cursor_marker);
if (cursor_steps == -1)
break;
+ g_string_erase(pattern, cursor_steps, strlen(geany_cursor_marker));
+
if (i++ > 0)
{
/* save the relative offset to each cursor position */
Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c 2011-04-19 16:04:31 UTC (rev 5729)
+++ trunk/src/utils.c 2011-04-19 16:36:29 UTC (rev 5730)
@@ -1530,11 +1530,9 @@
}
-/* Replaces needle if in range.
- * end can be -1 for haystack->len.
- * returns: position of replaced text or -1. */
-gint utils_string_replace(GString *haystack, gint start, gint end,
- const gchar *needle, const gchar *replace)
+/* end can be -1 for haystack->len.
+ * returns: position of found text or -1. */
+gint utils_string_find(GString *haystack, gint start, gint end, const gchar *needle)
{
gint pos;
@@ -1558,14 +1556,22 @@
pos += start;
if (pos >= end)
return -1;
-
- g_string_erase(haystack, pos, strlen(needle));
- if (G_LIKELY(replace))
- g_string_insert(haystack, pos, replace);
return pos;
}
+/* Replaces @len characters from offset @a pos.
+ * len can be -1 for str->len.
+ * returns: pos + strlen(replace). */
+gint utils_string_replace(GString *str, gint pos, gint len, const gchar *replace)
+{
+ g_string_erase(str, pos, len);
+ g_string_insert(str, pos, replace);
+
+ return pos + strlen(replace);
+}
+
+
/**
* Replaces all occurrences of @a needle in @a haystack with @a replace.
* As of Geany 0.16, @a replace can match @a needle, so the following will work:
@@ -1584,13 +1590,12 @@
while (1)
{
- pos = utils_string_replace(haystack, pos, -1, needle, replace);
+ pos = utils_string_find(haystack, pos, -1, needle);
if (pos == -1)
break;
- if (replace)
- pos += strlen(replace);
+ pos = utils_string_replace(haystack, pos, strlen(needle), replace);
count++;
}
return count;
@@ -1612,7 +1617,13 @@
*/
guint utils_string_replace_first(GString *haystack, const gchar *needle, const gchar *replace)
{
- return utils_string_replace(haystack, 0, -1, needle, replace) == -1 ? 0 : 1;
+ gint pos = utils_string_find(haystack, 0, -1, needle);
+
+ if (pos == -1)
+ return 0;
+
+ utils_string_replace(haystack, pos, strlen(needle), replace);
+ return 1;
}
Modified: trunk/src/utils.h
===================================================================
--- trunk/src/utils.h 2011-04-19 16:04:31 UTC (rev 5729)
+++ trunk/src/utils.h 2011-04-19 16:36:29 UTC (rev 5730)
@@ -168,9 +168,10 @@
gchar *utils_get_hostname(void);
-gint utils_string_replace(GString *haystack, gint start, gint end,
- const gchar *needle, const gchar *replace);
+gint utils_string_find(GString *haystack, gint start, gint end, const gchar *needle);
+gint utils_string_replace(GString *str, gint pos, gint len, const gchar *replace);
+
guint utils_string_replace_all(GString *haystack, const gchar *needle, const gchar *replace);
guint utils_string_replace_first(GString *haystack, const gchar *needle, const gchar *replace);
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