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.