Don't cache overridden lexer properties.

Add foreach_strv() to plugin API.
Add utils_strv_join().



git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@5280 ea778897-0a13-0410-b9d1-a72fbfd435f5
This commit is contained in:
Nick Treleaven 2010-10-05 11:07:10 +00:00
parent 0f63274d8b
commit 14d751dd87
5 changed files with 51 additions and 20 deletions

View File

@ -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:

View File

@ -262,7 +262,7 @@ static void load_kb(GKeyFile *sysconfig, GKeyFile *userconfig)
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);

View File

@ -3191,26 +3191,17 @@ static void get_key_values(GKeyFile *config, const gchar *group, gchar **keys, g
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)
{

View File

@ -2036,3 +2036,29 @@ gchar **utils_copy_environment(const gchar **exclude_vars, const gchar *first_va
}
/* 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;
}

View File

@ -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 @@ void utils_free_pointers(gsize arg_count, ...) G_GNUC_NULL_TERMINATED;
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);