SF.net SVN: geany:[5280] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Tue Oct 5 11:07:10 UTC 2010


Revision: 5280
          http://geany.svn.sourceforge.net/geany/?rev=5280&view=rev
Author:   ntrel
Date:     2010-10-05 11:07:10 +0000 (Tue, 05 Oct 2010)

Log Message:
-----------
Don't cache overridden lexer properties.
Add foreach_strv() to plugin API.
Add utils_strv_join().

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/editor.c
    trunk/src/highlighting.c
    trunk/src/utils.c
    trunk/src/utils.h

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2010-10-04 14:33:21 UTC (rev 5279)
+++ trunk/ChangeLog	2010-10-05 11:07:10 UTC (rev 5280)
@@ -1,3 +1,11 @@
+2010-10-05  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/utils.c, src/utils.h, src/highlighting.c, src/editor.c:
+   Don't cache overridden lexer properties.
+   Add foreach_strv() to plugin API.
+   Add utils_strv_join().
+
+
 2010-10-01  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/tools.c, doc/geany.txt, doc/geany.html:

Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c	2010-10-04 14:33:21 UTC (rev 5279)
+++ trunk/src/editor.c	2010-10-05 11:07:10 UTC (rev 5280)
@@ -262,7 +262,7 @@
 	gchar **keys = g_key_file_get_keys(userconfig, kb_group, NULL, NULL);
 	gchar **ptr;
 
-	/* remove overridden keys in sys file */
+	/* remove overridden keys from system keyfile */
 	foreach_strv(ptr, keys)
 		g_key_file_remove_key(sysconfig, kb_group, *ptr, NULL);
 

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2010-10-04 14:33:21 UTC (rev 5279)
+++ trunk/src/highlighting.c	2010-10-05 11:07:10 UTC (rev 5280)
@@ -3191,26 +3191,17 @@
 static void read_properties(GeanyFiletype *ft, GKeyFile *config, GKeyFile *configh)
 {
 	gchar group[] = "lexer_properties";
-	gchar **keys = g_key_file_get_keys(config, group, NULL, NULL);
+	gchar **keys;
 	gchar **keysh = g_key_file_get_keys(configh, group, NULL, NULL);
+	gchar **ptr;
 
-	/* move/merge keysh into keys */
-	if (!keys)
-		keys = keysh;
-	else if (keysh)
-	{
-		gchar **strv = g_new0(gchar*, g_strv_length(keys) + g_strv_length(keysh) + 1);
-		gchar **read, **write = strv;
+	/* remove overridden keys from system keyfile */
+	foreach_strv(ptr, keysh)
+		g_key_file_remove_key(config, group, *ptr, NULL);
 
-		/* may have same key in each, but home will override so it's OK */
-		foreach_strv(read, keys)
-			*write++ = *read;
-		foreach_strv(read, keysh)
-			*write++ = *read;
-		g_free(keys);
-		g_free(keysh);
-		keys = strv;
-	}
+	/* merge sys and user keys */
+	keys = g_key_file_get_keys(config, group, NULL, NULL);
+	keys = utils_strv_join(keys, keysh);
 
 	if (keys)
 	{

Modified: trunk/src/utils.c
===================================================================
--- trunk/src/utils.c	2010-10-04 14:33:21 UTC (rev 5279)
+++ trunk/src/utils.c	2010-10-05 11:07:10 UTC (rev 5280)
@@ -2036,3 +2036,29 @@
 }
 
 
+/* Joins @a first and @a second into a new string vector, freeing the originals.
+ * The original contents are reused. */
+gchar **utils_strv_join(gchar **first, gchar **second)
+{
+	gchar **strv;
+	gchar **rptr, **wptr;
+
+	if (!first)
+		return second;
+	if (!second)
+		return first;
+
+	strv = g_new0(gchar*, g_strv_length(first) + g_strv_length(second) + 1);
+	wptr = strv;
+
+	foreach_strv(rptr, first)
+		*wptr++ = *rptr;
+	foreach_strv(rptr, second)
+		*wptr++ = *rptr;
+
+	g_free(first);
+	g_free(second);
+	return strv;
+}
+
+

Modified: trunk/src/utils.h
===================================================================
--- trunk/src/utils.h	2010-10-04 14:33:21 UTC (rev 5279)
+++ trunk/src/utils.h	2010-10-05 11:07:10 UTC (rev 5280)
@@ -115,8 +115,12 @@
 #define foreach_str(char_ptr, string) \
 	for (char_ptr = string; *char_ptr; char_ptr++)
 
-/* Iterate NULL-terminated string vector */
-#define foreach_strv foreach_str
+/** Iterates a null-terminated string vector.
+ * @param str_ptr @c gchar** pointer to string element.
+ * @param strv Can be @c NULL.
+ * @since Geany 0.20 */
+#define foreach_strv(str_ptr, strv)\
+	if (!(strv)) {} else foreach_str(str_ptr, strv)
 
 /** Iterates from 0 to @a size.
  * @param i Integer.
@@ -214,6 +218,8 @@
 
 gchar **utils_strv_new(const gchar *first, ...) G_GNUC_NULL_TERMINATED;
 
+gchar **utils_strv_join(gchar **first, gchar **second) G_GNUC_WARN_UNUSED_RESULT;
+
 gint utils_mkdir(const gchar *path, gboolean create_parent_dirs);
 
 GSList *utils_get_file_list(const gchar *path, guint *length, GError **error);


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