SF.net SVN: geany: [2011] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Fri Nov 2 17:44:06 UTC 2007


Revision: 2011
          http://geany.svn.sourceforge.net/geany/?rev=2011&view=rev
Author:   ntrel
Date:     2007-11-02 10:44:05 -0700 (Fri, 02 Nov 2007)

Log Message:
-----------
Fix bug with using the default extension, not the user set one, if
'New with template' is used before any documents of the same filetype
are open.
Load filetype keyfiles from filetypes_load_config(), not from
styleset_foo_init().
Add highlighting_init_styles(), highlighting_set_styles(),
simplifying a lot of styleset function code.
Remove filetype::style_func_ptr field.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/document.c
    trunk/src/filetypes.c
    trunk/src/filetypes.h
    trunk/src/highlighting.c
    trunk/src/highlighting.h
    trunk/src/main.c
    trunk/src/templates.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/ChangeLog	2007-11-02 17:44:05 UTC (rev 2011)
@@ -2,6 +2,16 @@
 
  * src/sciwrappers.c:
    Show line wrap symbol at start of line for wrapped lines.
+ * src/templates.c, src/highlighting.c, src/highlighting.h,
+   src/filetypes.c, src/filetypes.h, src/document.c, src/main.c:
+   Fix bug with using the default extension, not the user set one, if
+   'New with template' is used before any documents of the same filetype
+   are open.
+   Load filetype keyfiles from filetypes_load_config(), not from
+   styleset_foo_init().
+   Add highlighting_init_styles(), highlighting_set_styles(),
+   simplifying a lot of styleset function code.
+   Remove filetype::style_func_ptr field.
 
 
 2007-11-02  Enrico Tröger  <enrico.troeger at uvena.de>

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/src/document.c	2007-11-02 17:44:05 UTC (rev 2011)
@@ -557,7 +557,7 @@
 
 	document_set_filetype(idx, ft);	// also clears taglist
 	if (ft == NULL)
-		filetypes[GEANY_FILETYPES_ALL]->style_func_ptr(doc_list[idx].sci);
+		highlighting_set_styles(doc_list[idx].sci, GEANY_FILETYPES_ALL);
 	ui_set_window_title(idx);
 	build_menu_update(idx);
 	document_update_tag_list(idx, FALSE);
@@ -1884,7 +1884,7 @@
 			tm_workspace_remove_object(doc_list[idx].tm_file, TRUE);
 			doc_list[idx].tm_file = NULL;
 		}
-		type->style_func_ptr(doc_list[idx].sci);	// set new styles
+		highlighting_set_styles(doc_list[idx].sci, type->id);
 		build_menu_update(idx);
 		colourise = TRUE;
 	}

Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/src/filetypes.c	2007-11-02 17:44:05 UTC (rev 2011)
@@ -109,7 +109,6 @@
 	filetypes[GEANY_FILETYPES_C]->pattern = utils_strv_new("*.c", "*.h", NULL);
 	filetypes[GEANY_FILETYPES_C]->comment_open = g_strdup("/*");
 	filetypes[GEANY_FILETYPES_C]->comment_close = g_strdup("*/");
-	filetypes[GEANY_FILETYPES_C]->style_func_ptr = styleset_c;
 
 #define CPP
 	filetypes[GEANY_FILETYPES_CPP]->id = GEANY_FILETYPES_CPP;
@@ -120,7 +119,6 @@
 	filetypes[GEANY_FILETYPES_CPP]->extension = g_strdup("cpp");
 	filetypes[GEANY_FILETYPES_CPP]->pattern = utils_strv_new("*.cpp", "*.cxx", "*.c++", "*.cc",
 		"*.h", "*.hpp", "*.hxx", "*.h++", "*.hh", "*.C", NULL);
-	filetypes[GEANY_FILETYPES_CPP]->style_func_ptr = styleset_cpp;
 	filetypes[GEANY_FILETYPES_CPP]->comment_open = g_strdup("//");
 	filetypes[GEANY_FILETYPES_CPP]->comment_close = NULL;
 
@@ -132,7 +130,6 @@
 	filetypes[GEANY_FILETYPES_CS]->title = g_strdup_printf(_("%s source file"), "C#");
 	filetypes[GEANY_FILETYPES_CS]->extension = g_strdup("cs");
 	filetypes[GEANY_FILETYPES_CS]->pattern = utils_strv_new("*.cs", "*.lala", NULL);
-	filetypes[GEANY_FILETYPES_CS]->style_func_ptr = styleset_cs;
 	filetypes[GEANY_FILETYPES_CS]->comment_open = g_strdup("//");
 	filetypes[GEANY_FILETYPES_CS]->comment_close = NULL;
 
@@ -146,7 +143,6 @@
 	filetypes[GEANY_FILETYPES_D]->pattern = utils_strv_new("*.d", "*.di", NULL);
 	filetypes[GEANY_FILETYPES_D]->comment_open = g_strdup("//");
 	filetypes[GEANY_FILETYPES_D]->comment_close = NULL;
-	filetypes[GEANY_FILETYPES_D]->style_func_ptr = styleset_d;
 
 #define JAVA
 	filetypes[GEANY_FILETYPES_JAVA]->id = GEANY_FILETYPES_JAVA;
@@ -158,7 +154,6 @@
 	filetypes[GEANY_FILETYPES_JAVA]->pattern = utils_strv_new("*.java", "*.jsp", NULL);
 	filetypes[GEANY_FILETYPES_JAVA]->comment_open = g_strdup("/*");
 	filetypes[GEANY_FILETYPES_JAVA]->comment_close = g_strdup("*/");
-	filetypes[GEANY_FILETYPES_JAVA]->style_func_ptr = styleset_java;
 
 #define PAS // to avoid warnings when building under Windows, the symbol PASCAL is there defined
 	filetypes[GEANY_FILETYPES_PASCAL]->id = GEANY_FILETYPES_PASCAL;
@@ -169,7 +164,6 @@
 	filetypes[GEANY_FILETYPES_PASCAL]->extension = g_strdup("pas");
 	filetypes[GEANY_FILETYPES_PASCAL]->pattern = utils_strv_new("*.pas", "*.pp", "*.inc", "*.dpr",
 		"*.dpk", NULL);
-	filetypes[GEANY_FILETYPES_PASCAL]->style_func_ptr = styleset_pascal;
 	filetypes[GEANY_FILETYPES_PASCAL]->comment_open = g_strdup("{");
 	filetypes[GEANY_FILETYPES_PASCAL]->comment_close = g_strdup("}");
 
@@ -181,7 +175,6 @@
 	filetypes[GEANY_FILETYPES_ASM]->title = g_strdup_printf(_("%s source file"), "Assembler");
 	filetypes[GEANY_FILETYPES_ASM]->extension = g_strdup("asm");
 	filetypes[GEANY_FILETYPES_ASM]->pattern = utils_strv_new("*.asm", NULL);
-	filetypes[GEANY_FILETYPES_ASM]->style_func_ptr = styleset_asm;
 	filetypes[GEANY_FILETYPES_ASM]->comment_open = g_strdup(";");
 	filetypes[GEANY_FILETYPES_ASM]->comment_close = NULL;
 
@@ -193,7 +186,6 @@
 	filetypes[GEANY_FILETYPES_BASIC]->title = g_strdup_printf(_("%s source file"), "FreeBasic");
 	filetypes[GEANY_FILETYPES_BASIC]->extension = g_strdup("bas");
 	filetypes[GEANY_FILETYPES_BASIC]->pattern = utils_strv_new("*.bas", "*.bi", NULL);
-	filetypes[GEANY_FILETYPES_BASIC]->style_func_ptr = styleset_basic;
 	filetypes[GEANY_FILETYPES_BASIC]->comment_open = g_strdup("'");
 	filetypes[GEANY_FILETYPES_BASIC]->comment_close = NULL;
 
@@ -206,7 +198,6 @@
 	filetypes[GEANY_FILETYPES_FORTRAN]->extension = g_strdup("f");
 	filetypes[GEANY_FILETYPES_FORTRAN]->pattern = utils_strv_new("*.f", "*.for", "*.ftn", "*.f77",
 		"*.f90", "*.f95", NULL);
-	filetypes[GEANY_FILETYPES_FORTRAN]->style_func_ptr = styleset_fortran;
 	filetypes[GEANY_FILETYPES_FORTRAN]->comment_open = g_strdup("c");
 	filetypes[GEANY_FILETYPES_FORTRAN]->comment_close = NULL;
 
@@ -218,7 +209,6 @@
 	filetypes[GEANY_FILETYPES_CAML]->title = g_strdup_printf(_("%s source file"), "(O)Caml");
 	filetypes[GEANY_FILETYPES_CAML]->extension = g_strdup("ml");
 	filetypes[GEANY_FILETYPES_CAML]->pattern = utils_strv_new("*.ml", "*.mli", NULL);
-	filetypes[GEANY_FILETYPES_CAML]->style_func_ptr = styleset_caml;
 	filetypes[GEANY_FILETYPES_CAML]->comment_open = g_strdup("(*");
 	filetypes[GEANY_FILETYPES_CAML]->comment_close = g_strdup("*)");
 
@@ -233,7 +223,6 @@
 		"*.pod", NULL);
 	filetypes[GEANY_FILETYPES_PERL]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_PERL]->comment_close = NULL;
-	filetypes[GEANY_FILETYPES_PERL]->style_func_ptr = styleset_perl;
 
 #define PHP
 	filetypes[GEANY_FILETYPES_PHP]->id = GEANY_FILETYPES_PHP;
@@ -244,7 +233,6 @@
 	filetypes[GEANY_FILETYPES_PHP]->extension = g_strdup("php");
 	filetypes[GEANY_FILETYPES_PHP]->pattern = utils_strv_new("*.php", "*.php3", "*.php4", "*.php5",
 		"*.phtml", NULL);
-	filetypes[GEANY_FILETYPES_PHP]->style_func_ptr = styleset_php;
 	filetypes[GEANY_FILETYPES_PHP]->comment_open = g_strdup("//");
 	filetypes[GEANY_FILETYPES_PHP]->comment_close = NULL;
 
@@ -256,7 +244,6 @@
 	filetypes[GEANY_FILETYPES_JS]->title = g_strdup_printf(_("%s source file"), "Javascript");
 	filetypes[GEANY_FILETYPES_JS]->extension = g_strdup("js");
 	filetypes[GEANY_FILETYPES_JS]->pattern = utils_strv_new("*.js", NULL);
-	filetypes[GEANY_FILETYPES_JS]->style_func_ptr = styleset_js;
 	filetypes[GEANY_FILETYPES_JS]->comment_open = g_strdup("//");
 	filetypes[GEANY_FILETYPES_JS]->comment_close = NULL;
 
@@ -268,7 +255,6 @@
 	filetypes[GEANY_FILETYPES_PYTHON]->title = g_strdup_printf(_("%s source file"), "Python");
 	filetypes[GEANY_FILETYPES_PYTHON]->extension = g_strdup("py");
 	filetypes[GEANY_FILETYPES_PYTHON]->pattern = utils_strv_new("*.py", "*.pyw", NULL);
-	filetypes[GEANY_FILETYPES_PYTHON]->style_func_ptr = styleset_python;
 	filetypes[GEANY_FILETYPES_PYTHON]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_PYTHON]->comment_close = NULL;
 
@@ -280,7 +266,6 @@
 	filetypes[GEANY_FILETYPES_RUBY]->title = g_strdup_printf(_("%s source file"), "Ruby");
 	filetypes[GEANY_FILETYPES_RUBY]->extension = g_strdup("rb");
 	filetypes[GEANY_FILETYPES_RUBY]->pattern = utils_strv_new("*.rb", "*.rhtml", "*.ruby", NULL);
-	filetypes[GEANY_FILETYPES_RUBY]->style_func_ptr = styleset_ruby;
 	filetypes[GEANY_FILETYPES_RUBY]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_RUBY]->comment_close = NULL;
 
@@ -292,7 +277,6 @@
 	filetypes[GEANY_FILETYPES_TCL]->title = g_strdup_printf(_("%s source file"), "Tcl");
 	filetypes[GEANY_FILETYPES_TCL]->extension = g_strdup("tcl");
 	filetypes[GEANY_FILETYPES_TCL]->pattern = utils_strv_new("*.tcl", "*.tk", "*.wish", NULL);
-	filetypes[GEANY_FILETYPES_TCL]->style_func_ptr = styleset_tcl;
 	filetypes[GEANY_FILETYPES_TCL]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_TCL]->comment_close = NULL;
 
@@ -304,7 +288,6 @@
 	filetypes[GEANY_FILETYPES_LUA]->title = g_strdup_printf(_("%s source file"), "Lua");
 	filetypes[GEANY_FILETYPES_LUA]->extension = g_strdup("lua");
 	filetypes[GEANY_FILETYPES_LUA]->pattern = utils_strv_new("*.lua", NULL);
-	filetypes[GEANY_FILETYPES_LUA]->style_func_ptr = styleset_lua;
 	filetypes[GEANY_FILETYPES_LUA]->comment_open = g_strdup("--");
 	filetypes[GEANY_FILETYPES_LUA]->comment_close = NULL;
 
@@ -316,7 +299,6 @@
 	filetypes[GEANY_FILETYPES_FERITE]->title = g_strdup_printf(_("%s source file"), "Ferite");
 	filetypes[GEANY_FILETYPES_FERITE]->extension = g_strdup("fe");
 	filetypes[GEANY_FILETYPES_FERITE]->pattern = utils_strv_new("*.fe", NULL);
-	filetypes[GEANY_FILETYPES_FERITE]->style_func_ptr = styleset_ferite;
 	filetypes[GEANY_FILETYPES_FERITE]->comment_open = g_strdup("/*");
 	filetypes[GEANY_FILETYPES_FERITE]->comment_close = g_strdup("*/");
 
@@ -328,7 +310,6 @@
 	filetypes[GEANY_FILETYPES_HASKELL]->title = g_strdup_printf(_("%s source file"), "Haskell");
 	filetypes[GEANY_FILETYPES_HASKELL]->extension = g_strdup("hs");
 	filetypes[GEANY_FILETYPES_HASKELL]->pattern = utils_strv_new("*.hs", "*.lhs", NULL);
-	filetypes[GEANY_FILETYPES_HASKELL]->style_func_ptr = styleset_haskell;
 	filetypes[GEANY_FILETYPES_HASKELL]->comment_open = g_strdup("--");
 	filetypes[GEANY_FILETYPES_HASKELL]->comment_close = NULL;
 
@@ -341,7 +322,6 @@
 	filetypes[GEANY_FILETYPES_SH]->extension = g_strdup("sh");
 	filetypes[GEANY_FILETYPES_SH]->pattern = utils_strv_new("*.sh", "configure", "configure.in",
 		"configure.in.in", "configure.ac", "*.ksh", "*.zsh", "*.ash", "*.bash", NULL);
-	filetypes[GEANY_FILETYPES_SH]->style_func_ptr = styleset_sh;
 	filetypes[GEANY_FILETYPES_SH]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_SH]->comment_close = NULL;
 
@@ -354,7 +334,6 @@
 	filetypes[GEANY_FILETYPES_MAKE]->extension = g_strdup("mak");
 	filetypes[GEANY_FILETYPES_MAKE]->pattern = utils_strv_new(
 		"*.mak", "*.mk", "GNUmakefile", "makefile", "Makefile", "makefile.*", "Makefile.*", NULL);
-	filetypes[GEANY_FILETYPES_MAKE]->style_func_ptr = styleset_makefile;
 	filetypes[GEANY_FILETYPES_MAKE]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_MAKE]->comment_close = NULL;
 
@@ -367,7 +346,6 @@
 	filetypes[GEANY_FILETYPES_XML]->extension = g_strdup("xml");
 	filetypes[GEANY_FILETYPES_XML]->pattern = utils_strv_new(
 		"*.xml", "*.sgml", "*.xsl", "*.xslt", "*.xsd", NULL);
-	filetypes[GEANY_FILETYPES_XML]->style_func_ptr = styleset_xml;
 	filetypes[GEANY_FILETYPES_XML]->comment_open = g_strdup("<!--");
 	filetypes[GEANY_FILETYPES_XML]->comment_close = g_strdup("-->");
 
@@ -379,7 +357,6 @@
 	filetypes[GEANY_FILETYPES_DOCBOOK]->title = g_strdup_printf(_("%s source file"), "Docbook");
 	filetypes[GEANY_FILETYPES_DOCBOOK]->extension = g_strdup("docbook");
 	filetypes[GEANY_FILETYPES_DOCBOOK]->pattern = utils_strv_new("*.docbook", NULL);
-	filetypes[GEANY_FILETYPES_DOCBOOK]->style_func_ptr = styleset_docbook;
 	filetypes[GEANY_FILETYPES_DOCBOOK]->comment_open = g_strdup("<!--");
 	filetypes[GEANY_FILETYPES_DOCBOOK]->comment_close = g_strdup("-->");
 
@@ -392,7 +369,6 @@
 	filetypes[GEANY_FILETYPES_HTML]->extension = g_strdup("html");
 	filetypes[GEANY_FILETYPES_HTML]->pattern = utils_strv_new(
 		"*.htm", "*.html", "*.shtml", "*.hta", "*.htd", "*.htt", "*.cfm", NULL);
-	filetypes[GEANY_FILETYPES_HTML]->style_func_ptr = styleset_html;
 	filetypes[GEANY_FILETYPES_HTML]->comment_open = g_strdup("<!--");
 	filetypes[GEANY_FILETYPES_HTML]->comment_close = g_strdup("-->");
 
@@ -404,7 +380,6 @@
 	filetypes[GEANY_FILETYPES_CSS]->title = g_strdup(_("Cascading StyleSheet"));
 	filetypes[GEANY_FILETYPES_CSS]->extension = g_strdup("css");
 	filetypes[GEANY_FILETYPES_CSS]->pattern = utils_strv_new("*.css", NULL);
-	filetypes[GEANY_FILETYPES_CSS]->style_func_ptr = styleset_css;
 	filetypes[GEANY_FILETYPES_CSS]->comment_open = g_strdup("/*");
 	filetypes[GEANY_FILETYPES_CSS]->comment_close = g_strdup("*/");
 
@@ -416,7 +391,6 @@
 	filetypes[GEANY_FILETYPES_SQL]->title = g_strdup(_("SQL Dump file"));
 	filetypes[GEANY_FILETYPES_SQL]->extension = g_strdup("sql");
 	filetypes[GEANY_FILETYPES_SQL]->pattern = utils_strv_new("*.sql", NULL);
-	filetypes[GEANY_FILETYPES_SQL]->style_func_ptr = styleset_sql;
 	filetypes[GEANY_FILETYPES_SQL]->comment_open = g_strdup("/*");
 	filetypes[GEANY_FILETYPES_SQL]->comment_close = g_strdup("*/");
 
@@ -428,7 +402,6 @@
 	filetypes[GEANY_FILETYPES_LATEX]->title = g_strdup_printf(_("%s source file"), "LaTeX");
 	filetypes[GEANY_FILETYPES_LATEX]->extension = g_strdup("tex");
 	filetypes[GEANY_FILETYPES_LATEX]->pattern = utils_strv_new("*.tex", "*.sty", "*.idx", NULL);
-	filetypes[GEANY_FILETYPES_LATEX]->style_func_ptr = styleset_latex;
 	filetypes[GEANY_FILETYPES_LATEX]->comment_open = g_strdup("%");
 	filetypes[GEANY_FILETYPES_LATEX]->comment_close = NULL;
 
@@ -440,7 +413,6 @@
 	filetypes[GEANY_FILETYPES_OMS]->title = g_strdup_printf(_("%s source file"), "O-Matrix");
 	filetypes[GEANY_FILETYPES_OMS]->extension = g_strdup("oms");
 	filetypes[GEANY_FILETYPES_OMS]->pattern = utils_strv_new("*.oms", NULL);
-	filetypes[GEANY_FILETYPES_OMS]->style_func_ptr = styleset_oms;
 	filetypes[GEANY_FILETYPES_OMS]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_OMS]->comment_close = NULL;
 
@@ -452,7 +424,6 @@
 	filetypes[GEANY_FILETYPES_VHDL]->title = g_strdup_printf(_("%s source file"), "VHDL");
 	filetypes[GEANY_FILETYPES_VHDL]->extension = g_strdup("vhd");
 	filetypes[GEANY_FILETYPES_VHDL]->pattern = utils_strv_new("*.vhd", "*.vhdl", NULL);
-	filetypes[GEANY_FILETYPES_VHDL]->style_func_ptr = styleset_vhdl;
 	filetypes[GEANY_FILETYPES_VHDL]->comment_open = g_strdup("--");
 	filetypes[GEANY_FILETYPES_VHDL]->comment_close = NULL;
 
@@ -464,7 +435,6 @@
 	filetypes[GEANY_FILETYPES_DIFF]->title = g_strdup(_("Diff file"));
 	filetypes[GEANY_FILETYPES_DIFF]->extension = g_strdup("diff");
 	filetypes[GEANY_FILETYPES_DIFF]->pattern = utils_strv_new("*.diff", "*.patch", "*.rej", NULL);
-	filetypes[GEANY_FILETYPES_DIFF]->style_func_ptr = styleset_diff;
 	filetypes[GEANY_FILETYPES_DIFF]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_DIFF]->comment_close = NULL;
 
@@ -477,7 +447,6 @@
 	filetypes[GEANY_FILETYPES_CONF]->extension = g_strdup("conf");
 	filetypes[GEANY_FILETYPES_CONF]->pattern = utils_strv_new("*.conf", "*.ini", "config", "*rc",
 		"*.cfg", NULL);
-	filetypes[GEANY_FILETYPES_CONF]->style_func_ptr = styleset_conf;
 	filetypes[GEANY_FILETYPES_CONF]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_CONF]->comment_close = NULL;
 
@@ -489,7 +458,6 @@
 	filetypes[GEANY_FILETYPES_HAXE]->title = g_strdup_printf(_("%s source file"), "Haxe");
 	filetypes[GEANY_FILETYPES_HAXE]->extension = g_strdup("hx");
 	filetypes[GEANY_FILETYPES_HAXE]->pattern = utils_strv_new("*.hx", NULL);
-	filetypes[GEANY_FILETYPES_HAXE]->style_func_ptr = styleset_haxe;
 	filetypes[GEANY_FILETYPES_HAXE]->comment_open = g_strdup("//");
 	filetypes[GEANY_FILETYPES_HAXE]->comment_close = NULL;
 
@@ -502,7 +470,6 @@
 	filetypes[GEANY_FILETYPES_REST]->extension = g_strdup("rst");
 	filetypes[GEANY_FILETYPES_REST]->pattern = utils_strv_new(
 		"*.rest", "*.reST", "*.rst", NULL);
-	filetypes[GEANY_FILETYPES_REST]->style_func_ptr = styleset_none;
 	filetypes[GEANY_FILETYPES_REST]->comment_open = NULL;
 	filetypes[GEANY_FILETYPES_REST]->comment_close = NULL;
 
@@ -514,7 +481,6 @@
 	filetypes[GEANY_FILETYPES_ALL]->title = g_strdup(_("All files"));
 	filetypes[GEANY_FILETYPES_ALL]->extension = g_strdup("*");
 	filetypes[GEANY_FILETYPES_ALL]->pattern = utils_strv_new("*", NULL);
-	filetypes[GEANY_FILETYPES_ALL]->style_func_ptr = styleset_none;
 	filetypes[GEANY_FILETYPES_ALL]->comment_open = NULL;
 	filetypes[GEANY_FILETYPES_ALL]->comment_close = NULL;
 }
@@ -787,14 +753,12 @@
 }
 
 
-void filetypes_get_config(GKeyFile *config, GKeyFile *configh, gint ft)
+static void load_settings(gint ft, GKeyFile *config, GKeyFile *configh)
 {
 	gchar *result;
 	GError *error = NULL;
 	gboolean tmp;
 
-	if (config == NULL || configh == NULL || ft < 0 || ft >= GEANY_MAX_FILE_TYPES) return;
-
 	// default extension
 	result = g_key_file_get_string(configh, "settings", "extension", NULL);
 	if (result == NULL) result = g_key_file_get_string(config, "settings", "extension", NULL);
@@ -874,6 +838,61 @@
 }
 
 
+/* simple wrapper function to print file errors in DEBUG mode */
+static void load_system_keyfile(GKeyFile *key_file, const gchar *file, GKeyFileFlags flags,
+								G_GNUC_UNUSED GError **just_for_compatibility)
+{
+	GError *error = NULL;
+	gboolean done = g_key_file_load_from_file(key_file, file, flags, &error);
+	if (! done && error != NULL)
+	{
+		geany_debug("Failed to open %s (%s)", file, error->message);
+		g_error_free(error);
+		error = NULL;
+	}
+}
+
+
+/* Load the configuration file for the associated filetype id.
+ * This should only be called when the filetype is needed, to save loading
+ * 20+ configuration files all at once. */
+void filetypes_load_config(gint ft_id)
+{
+	GKeyFile *config, *config_home;
+	static gboolean loaded[GEANY_MAX_FILE_TYPES] = {FALSE};
+
+	g_return_if_fail(ft_id >= 0 && ft_id < GEANY_MAX_FILE_TYPES);
+	
+	if (loaded[ft_id])
+		return;
+	loaded[ft_id] = TRUE;
+
+	config = g_key_file_new();
+	config_home = g_key_file_new();
+	{
+		// highlighting uses GEANY_FILETYPES_ALL for common settings
+		gchar *ext = (ft_id != GEANY_FILETYPES_ALL) ?
+			filetypes_get_conf_extension(ft_id) : g_strdup("common");
+		gchar *f0 = g_strconcat(app->datadir, G_DIR_SEPARATOR_S "filetypes.", ext, NULL);
+		gchar *f = g_strconcat(app->configdir,
+			G_DIR_SEPARATOR_S GEANY_FILEDEFS_SUBDIR G_DIR_SEPARATOR_S "filetypes.", ext, NULL);
+
+		load_system_keyfile(config, f0, G_KEY_FILE_KEEP_COMMENTS, NULL);
+		g_key_file_load_from_file(config_home, f, G_KEY_FILE_KEEP_COMMENTS, NULL);
+
+		g_free(ext);
+		g_free(f);
+		g_free(f0);
+	}
+
+	load_settings(ft_id, config, config_home);
+	highlighting_init_styles(ft_id, config, config_home);
+	
+	g_key_file_free(config);
+	g_key_file_free(config_home);
+}
+
+
 gchar *filetypes_get_conf_extension(gint filetype_idx)
 {
 	gchar *result;

Modified: trunk/src/filetypes.h
===================================================================
--- trunk/src/filetypes.h	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/src/filetypes.h	2007-11-02 17:44:05 UTC (rev 2011)
@@ -119,7 +119,6 @@
 	gboolean  		  comment_use_indent;
 	struct build_programs	*programs;
 	struct build_actions	*actions;
-	void (*style_func_ptr) (ScintillaObject*);
 };
 
 extern filetype *filetypes[GEANY_MAX_FILE_TYPES];
@@ -144,7 +143,7 @@
 /* frees the array and all related pointers */
 void filetypes_free_types();
 
-void filetypes_get_config(GKeyFile *config, GKeyFile *configh, gint ft);
+void filetypes_load_config(gint ft_id);
 
 void filetypes_save_commands();
 

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/src/highlighting.c	2007-11-02 17:44:05 UTC (rev 2011)
@@ -117,39 +117,6 @@
 #endif
 
 
-/* simple wrapper function to print file errors in DEBUG mode */
-static void load_system_keyfile(GKeyFile *key_file, const gchar *file, GKeyFileFlags flags,
-								G_GNUC_UNUSED GError **just_for_compatibility)
-{
-	GError *error = NULL;
-	gboolean done = g_key_file_load_from_file(key_file, file, flags, &error);
-	if (! done && error != NULL)
-	{
-		geany_debug("Failed to open %s (%s)", file, error->message);
-		g_error_free(error);
-		error = NULL;
-	}
-}
-
-
-static void load_keyfiles(GKeyFile *config, GKeyFile *config_home, filetype_id ft_id)
-{
-	// highlighting uses GEANY_FILETYPES_ALL for common settings
-	gchar *ext = (ft_id != GEANY_FILETYPES_ALL) ?
-		filetypes_get_conf_extension(ft_id) : g_strdup("common");
-	gchar *f0 = g_strconcat(app->datadir, G_DIR_SEPARATOR_S "filetypes.", ext, NULL);
-	gchar *f = g_strconcat(app->configdir,
-		G_DIR_SEPARATOR_S GEANY_FILEDEFS_SUBDIR G_DIR_SEPARATOR_S "filetypes.", ext, NULL);
-
-	load_system_keyfile(config, f0, G_KEY_FILE_KEEP_COMMENTS, NULL);
-	g_key_file_load_from_file(config_home, f, G_KEY_FILE_KEEP_COMMENTS, NULL);
-
-	g_free(ext);
-	g_free(f);
-	g_free(f0);
-}
-
-
 static void get_keyfile_keywords(GKeyFile *config, GKeyFile *configh, const gchar *section,
 				const gchar *key, gint index, gint pos, const gchar *default_value)
 {
@@ -328,7 +295,7 @@
 }
 
 
-void styleset_free_styles()
+void highlighting_free_styles()
 {
 	gint i;
 
@@ -382,21 +349,14 @@
 }
 
 
-static void styleset_common_init(void)
+static void styleset_common_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config;
-	GKeyFile *config_home;
 	static gboolean common_style_set_valid = FALSE;
 
 	if (common_style_set_valid)
 		return;
 	common_style_set_valid = TRUE;	// ensure filetypes.common is only loaded once
 
-	config = g_key_file_new();
-	config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_ALL);
-
 	get_keyfile_hex(config, config_home, "styling", "default",
 		"0x000000", "0xffffff", "false", &common_style_set.styling[GCS_DEFAULT]);
 	get_keyfile_hex(config, config_home, "styling", "selection",
@@ -438,17 +398,11 @@
 	get_keyfile_wordchars(config, config_home, &common_style_set.wordchars);
 	whitespace_chars = get_keyfile_whitespace_chars(config, config_home);
 
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_ALL);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
 static void styleset_common(ScintillaObject *sci, gint style_bits, filetype_id ft_id)
 {
-	styleset_common_init();
-
 	// load global tags file for autocompletion, calltips, etc.
 	if (ft_id < GEANY_FILETYPES_ALL)
 		symbols_global_tags_loaded(ft_id);
@@ -707,13 +661,8 @@
 }
 
 
-static void styleset_c_init(void)
+static void styleset_c_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_C);
-
 	new_style_array(GEANY_FILETYPES_C, 21);
 	styleset_c_like_init(config, config_home, GEANY_FILETYPES_C);
 	get_keyfile_int(config, config_home, "styling", "styling_within_preprocessor",
@@ -727,19 +676,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_C].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_C);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_c(ScintillaObject *sci)
+static void styleset_c(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_C;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_C].styling == NULL) styleset_c_init();
 
 	apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
@@ -764,13 +708,8 @@
 }
 
 
-static void styleset_cpp_init(void)
+static void styleset_cpp_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_CPP);
-
 	new_style_array(GEANY_FILETYPES_CPP, 21);
 	styleset_c_like_init(config, config_home, GEANY_FILETYPES_CPP);
 	get_keyfile_int(config, config_home, "styling", "styling_within_preprocessor",
@@ -784,19 +723,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_CPP].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_CPP);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_cpp(ScintillaObject *sci)
+static void styleset_cpp(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_CPP;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_CPP].styling == NULL) styleset_cpp_init();
 
 	apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
@@ -821,13 +755,8 @@
 }
 
 
-static void styleset_cs_init(void)
+static void styleset_cs_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_CS);
-
 	new_style_array(GEANY_FILETYPES_CS, 21);
 	styleset_c_like_init(config, config_home, GEANY_FILETYPES_CS);
 	get_keyfile_int(config, config_home, "styling", "styling_within_preprocessor",
@@ -849,19 +778,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_CS].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_CS);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_cs(ScintillaObject *sci)
+static void styleset_cs(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_CS;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[ft_id].styling == NULL) styleset_cs_init();
 
 	apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
@@ -880,13 +804,8 @@
 }
 
 
-static void styleset_pascal_init(void)
+static void styleset_pascal_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_PASCAL);
-
 	new_style_array(GEANY_FILETYPES_PASCAL, 12);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x0000ff", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PASCAL].styling[0]);
 	get_keyfile_style(config, config_home, "comment", &gsd_comment, &style_sets[GEANY_FILETYPES_PASCAL].styling[1]);
@@ -909,19 +828,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_PASCAL].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_PASCAL);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_pascal(ScintillaObject *sci)
+static void styleset_pascal(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_PASCAL;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_PASCAL].styling == NULL) styleset_pascal_init();
 
 	apply_filetype_properties(sci, SCLEX_PASCAL, ft_id);
 
@@ -945,13 +859,8 @@
 }
 
 
-static void styleset_makefile_init(void)
+static void styleset_makefile_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_MAKE);
-
 	new_style_array(GEANY_FILETYPES_MAKE, 7);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x00002f", "0xffffff", "false", &style_sets[GEANY_FILETYPES_MAKE].styling[0]);
 	get_keyfile_style(config, config_home, "comment", &gsd_comment, &style_sets[GEANY_FILETYPES_MAKE].styling[1]);
@@ -965,19 +874,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_MAKE].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_MAKE);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_makefile(ScintillaObject *sci)
+static void styleset_makefile(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_MAKE;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_MAKE].styling == NULL) styleset_makefile_init();
 
 	apply_filetype_properties(sci, SCLEX_MAKEFILE, ft_id);
 
@@ -992,13 +896,8 @@
 }
 
 
-static void styleset_diff_init(void)
+static void styleset_diff_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_DIFF);
-
 	new_style_array(GEANY_FILETYPES_DIFF, 7);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_DIFF].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_DIFF].styling[1]);
@@ -1012,19 +911,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_DIFF].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_DIFF);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_diff(ScintillaObject *sci)
+static void styleset_diff(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_DIFF;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_DIFF].styling == NULL) styleset_diff_init();
 
 	apply_filetype_properties(sci, SCLEX_DIFF, ft_id);
 
@@ -1039,13 +933,8 @@
 }
 
 
-static void styleset_latex_init(void)
+static void styleset_latex_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_LATEX);
-
 	new_style_array(GEANY_FILETYPES_LATEX, 5);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x00002f", "0xffffff", "false", &style_sets[GEANY_FILETYPES_LATEX].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "command", "0xff0000", "0xffffff", "true", &style_sets[GEANY_FILETYPES_LATEX].styling[1]);
@@ -1059,19 +948,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_LATEX].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_LATEX);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_latex(ScintillaObject *sci)
+static void styleset_latex(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_LATEX;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_LATEX].styling == NULL) styleset_latex_init();
 
 	apply_filetype_properties(sci, SCLEX_LATEX, ft_id);
 
@@ -1086,32 +970,21 @@
 }
 
 
-static void styleset_php_init(void)
+static void styleset_php_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_PHP);
-
 	style_sets[GEANY_FILETYPES_PHP].styling = NULL;
 	style_sets[GEANY_FILETYPES_PHP].keywords = NULL;
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_PHP].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_PHP);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_php(ScintillaObject *sci)
+static void styleset_php(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_PHP;
 
 	styleset_common(sci, 7, ft_id);
-	// PHP doesn't have its own styling, so check wordchars to see if init was run
-	if (style_sets[GEANY_FILETYPES_PHP].wordchars == NULL) styleset_php_init();
 
 	apply_filetype_properties(sci, SCLEX_HTML, ft_id);
 
@@ -1122,32 +995,21 @@
 }
 
 
-static void styleset_html_init(void)
+static void styleset_html_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_HTML);
-
 	style_sets[GEANY_FILETYPES_HTML].styling = NULL;
 	style_sets[GEANY_FILETYPES_HTML].keywords = NULL;
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_HTML].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_HTML);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_html(ScintillaObject *sci)
+static void styleset_html(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_HTML;
 
 	styleset_common(sci, 7, ft_id);
-	// HTML doesn't have its own styling, so check wordchars to see if init was run
-	if (style_sets[GEANY_FILETYPES_HTML].wordchars == NULL) styleset_html_init();
 
 	apply_filetype_properties(sci, SCLEX_HTML, ft_id);
 
@@ -1156,13 +1018,8 @@
 }
 
 
-static void styleset_markup_init(void)
+static void styleset_markup_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_XML);
-
 	new_style_array(GEANY_FILETYPES_XML, 55);
 	get_keyfile_hex(config, config_home, "styling", "html_default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_XML].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "html_tag", "0x000099", "0xffffff", "false", &style_sets[GEANY_FILETYPES_XML].styling[1]);
@@ -1234,19 +1091,17 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_XML].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_XML);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
 static void styleset_markup(ScintillaObject *sci, gboolean set_keywords)
 {
-	if (style_sets[GEANY_FILETYPES_XML].styling == NULL) styleset_markup_init();
+	/* Used by several filetypes */
+	if (style_sets[GEANY_FILETYPES_XML].styling == NULL)
+		filetypes_load_config(GEANY_FILETYPES_XML);
 
 	// don't set keywords for plain XML
-	if(set_keywords)
+	if (set_keywords)
 	{
 		SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_XML].keywords[0]);
 		SSM(sci, SCI_SETKEYWORDS, 1, (sptr_t) style_sets[GEANY_FILETYPES_XML].keywords[1]);
@@ -1465,13 +1320,8 @@
 }
 
 
-static void styleset_java_init(void)
+static void styleset_java_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_JAVA);
-
 	new_style_array(GEANY_FILETYPES_JAVA, 20);
 	styleset_c_like_init(config, config_home, GEANY_FILETYPES_JAVA);
 
@@ -1490,19 +1340,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_JAVA].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_JAVA);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_java(ScintillaObject *sci)
+static void styleset_java(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_JAVA;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_JAVA].styling == NULL) styleset_java_init();
 
 	apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
@@ -1517,13 +1362,8 @@
 }
 
 
-static void styleset_perl_init(void)
+static void styleset_perl_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_PERL);
-
 	new_style_array(GEANY_FILETYPES_PERL, 30);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PERL].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "error", "0xff0000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PERL].styling[1]);
@@ -1589,19 +1429,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_PERL].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_PERL);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_perl(ScintillaObject *sci)
+static void styleset_perl(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_PERL;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_PERL].styling == NULL) styleset_perl_init();
 
 	apply_filetype_properties(sci, SCLEX_PERL, ft_id);
 
@@ -1643,13 +1478,8 @@
 }
 
 
-static void styleset_python_init(void)
+static void styleset_python_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_PYTHON);
-
 	new_style_array(GEANY_FILETYPES_PYTHON, 16);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PYTHON].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "commentline", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PYTHON].styling[1]);
@@ -1674,19 +1504,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_PYTHON].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_PYTHON);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_python(ScintillaObject *sci)
+static void styleset_python(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_PYTHON;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_PYTHON].styling == NULL) styleset_python_init();
 
 	apply_filetype_properties(sci, SCLEX_PYTHON, ft_id);
 
@@ -1715,13 +1540,8 @@
 }
 
 
-static void styleset_ruby_init(void)
+static void styleset_ruby_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_RUBY);
-
 	new_style_array(GEANY_FILETYPES_RUBY, 33);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_RUBY].styling[0]);
 	get_keyfile_style(config, config_home, "commentline", &gsd_comment, &style_sets[GEANY_FILETYPES_RUBY].styling[1]);
@@ -1763,19 +1583,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_RUBY].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_RUBY);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_ruby(ScintillaObject *sci)
+static void styleset_ruby(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_RUBY;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_RUBY].styling == NULL) styleset_ruby_init();
 
 	apply_filetype_properties(sci, SCLEX_RUBY, ft_id);
 
@@ -1818,13 +1633,8 @@
 }
 
 
-static void styleset_sh_init(void)
+static void styleset_sh_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_SH);
-
 	new_style_array(GEANY_FILETYPES_SH, 11);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_SH].styling[0]);
 	get_keyfile_style(config, config_home, "commentline", &gsd_comment, &style_sets[GEANY_FILETYPES_SH].styling[1]);
@@ -1844,19 +1654,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_SH].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_SH);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_sh(ScintillaObject *sci)
+static void styleset_sh(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_SH;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_SH].styling == NULL) styleset_sh_init();
 
 	apply_filetype_properties(sci, SCLEX_BASH, ft_id);
 
@@ -1879,7 +1684,7 @@
 }
 
 
-void styleset_xml(ScintillaObject *sci)
+static void styleset_xml(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_XML;
 
@@ -1892,13 +1697,8 @@
 }
 
 
-static void styleset_docbook_init(void)
+static void styleset_docbook_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_DOCBOOK);
-
 	new_style_array(GEANY_FILETYPES_DOCBOOK, 29);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_DOCBOOK].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "tag", "0x000099", "0xffffff", "false", &style_sets[GEANY_FILETYPES_DOCBOOK].styling[1]);
@@ -1992,19 +1792,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_DOCBOOK].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_DOCBOOK);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_docbook(ScintillaObject *sci)
+static void styleset_docbook(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_DOCBOOK;
 
 	styleset_common(sci, 7, ft_id);
-	if (style_sets[GEANY_FILETYPES_DOCBOOK].styling == NULL) styleset_docbook_init();
 
 	apply_filetype_properties(sci, SCLEX_XML, ft_id);
 
@@ -2051,15 +1846,12 @@
 }
 
 
-void styleset_none(ScintillaObject *sci)
+static void styleset_none(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_ALL;
 
 	SSM(sci, SCI_SETLEXER, SCLEX_NULL, 0);
 
-	if (style_sets[GEANY_FILETYPES_ALL].styling == NULL)
-		styleset_common_init();
-
 	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_ALL, GCS_DEFAULT);
 
 	styleset_common(sci, 5, ft_id);
@@ -2069,13 +1861,8 @@
 }
 
 
-static void styleset_css_init(void)
+static void styleset_css_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_CSS);
-
 	new_style_array(GEANY_FILETYPES_CSS, 16);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x003399", "0xffffff", "false", &style_sets[GEANY_FILETYPES_CSS].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_CSS].styling[1]);
@@ -2125,19 +1912,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_CSS].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_CSS);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_css(ScintillaObject *sci)
+static void styleset_css(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_CSS;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_CSS].styling == NULL) styleset_css_init();
 
 	apply_filetype_properties(sci, SCLEX_CSS, ft_id);
 
@@ -2165,13 +1947,8 @@
 }
 
 
-static void styleset_conf_init(void)
+static void styleset_conf_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_CONF);
-
 	new_style_array(GEANY_FILETYPES_CONF, 6);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x7f0000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_CONF].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_CONF].styling[1]);
@@ -2184,19 +1961,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_CONF].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_CONF);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_conf(ScintillaObject *sci)
+static void styleset_conf(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_CONF;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_CONF].styling == NULL) styleset_conf_init();
 
 	apply_filetype_properties(sci, SCLEX_PROPERTIES, ft_id);
 
@@ -2212,13 +1984,8 @@
 }
 
 
-static void styleset_asm_init(void)
+static void styleset_asm_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_ASM);
-
 	new_style_array(GEANY_FILETYPES_ASM, 15);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_ASM].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_ASM].styling[1]);
@@ -2244,19 +2011,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_ASM].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_ASM);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_asm(ScintillaObject *sci)
+static void styleset_asm(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_ASM;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_ASM].styling == NULL) styleset_asm_init();
 
 	apply_filetype_properties(sci, SCLEX_ASM, ft_id);
 
@@ -2285,13 +2047,8 @@
 }
 
 
-static void styleset_fortran_init(void)
+static void styleset_fortran_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_FORTRAN);
-
 	new_style_array(GEANY_FILETYPES_FORTRAN, 15);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_FORTRAN].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_FORTRAN].styling[1]);
@@ -2317,19 +2074,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_FORTRAN].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_FORTRAN);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_fortran(ScintillaObject *sci)
+static void styleset_fortran(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_FORTRAN;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_FORTRAN].styling == NULL) styleset_fortran_init();
 
 	apply_filetype_properties(sci, SCLEX_F77, ft_id);	// SCLEX_FORTRAN
 
@@ -2356,13 +2108,8 @@
 }
 
 
-static void styleset_sql_init(void)
+static void styleset_sql_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_SQL);
-
 	new_style_array(GEANY_FILETYPES_SQL, 15);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_SQL].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_SQL].styling[1]);
@@ -2413,19 +2160,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_SQL].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_SQL);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_sql(ScintillaObject *sci)
+static void styleset_sql(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_SQL;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_SQL].styling == NULL) styleset_sql_init();
 
 	apply_filetype_properties(sci, SCLEX_SQL, ft_id);
 
@@ -2450,13 +2192,8 @@
 }
 
 
-static void styleset_haskell_init(void)
+static void styleset_haskell_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_HASKELL);
-
 	new_style_array(GEANY_FILETYPES_HASKELL, 17);
 
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[0]);
@@ -2483,19 +2220,14 @@
 	style_sets[GEANY_FILETYPES_HASKELL].keywords[1] = NULL;
 
 	get_keyfile_wordchars(config, config_home, &style_sets[GEANY_FILETYPES_HASKELL].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_HASKELL);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_haskell(ScintillaObject *sci)
+static void styleset_haskell(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_HASKELL;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_HASKELL].styling == NULL) styleset_haskell_init();
 
 	apply_filetype_properties(sci, SCLEX_HASKELL, ft_id);
 
@@ -2522,13 +2254,8 @@
 }
 
 
-static void styleset_caml_init(void)
+static void styleset_caml_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_CAML);
-
 	new_style_array(GEANY_FILETYPES_CAML, 14);
 
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_CAML].styling[0]);
@@ -2557,19 +2284,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_CAML].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_CAML);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_caml(ScintillaObject *sci)
+static void styleset_caml(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_CAML;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_CAML].styling == NULL) styleset_caml_init();
 
 	apply_filetype_properties(sci, SCLEX_CAML, ft_id);
 
@@ -2596,13 +2318,8 @@
 
 
 
-static void styleset_oms_init(void)
+static void styleset_oms_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_OMS);
-
 	new_style_array(GEANY_FILETYPES_OMS, 11);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_OMS].styling[0]);
 	get_keyfile_hex(config, config_home, "styling", "commentline", "0x909090", "0xffffff", "false", &style_sets[GEANY_FILETYPES_OMS].styling[1]);
@@ -2626,19 +2343,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_OMS].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_OMS);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_oms(ScintillaObject *sci)
+static void styleset_oms(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_OMS;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_OMS].styling == NULL) styleset_oms_init();
 
 	apply_filetype_properties(sci, SCLEX_OMS, ft_id);
 
@@ -2661,13 +2373,8 @@
 }
 
 
-static void styleset_tcl_init(void)
+static void styleset_tcl_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_TCL);
-
 	new_style_array(GEANY_FILETYPES_TCL, 16);
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_TCL].styling[0]);
 	get_keyfile_style(config, config_home, "comment", &gsd_comment, &style_sets[GEANY_FILETYPES_TCL].styling[1]);
@@ -2696,19 +2403,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_TCL].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_TCL);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_tcl(ScintillaObject *sci)
+static void styleset_tcl(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_TCL;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_TCL].styling == NULL) styleset_tcl_init();
 
 	apply_filetype_properties(sci, SCLEX_TCL, ft_id);
 
@@ -2737,13 +2439,8 @@
 	set_sci_style(sci, SCE_TCL_WORD5, GEANY_FILETYPES_TCL, 15);
 }
 
-static void styleset_d_init(void)
+static void styleset_d_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_D);
-
 	new_style_array(GEANY_FILETYPES_D, 18);
 
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_D].styling[0]);
@@ -2785,19 +2482,14 @@
 	style_sets[GEANY_FILETYPES_D].keywords[4] = NULL;
 
 	get_keyfile_wordchars(config, config_home, &style_sets[GEANY_FILETYPES_D].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_D);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_d(ScintillaObject *sci)
+static void styleset_d(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_D;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_D].styling == NULL) styleset_d_init();
 
 	apply_filetype_properties(sci, SCLEX_D, ft_id);
 
@@ -2828,13 +2520,8 @@
 }
 
 
-static void styleset_ferite_init(void)
+static void styleset_ferite_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_FERITE);
-
 	new_style_array(GEANY_FILETYPES_FERITE, 20);
 	styleset_c_like_init(config, config_home, GEANY_FILETYPES_FERITE);
 
@@ -2846,19 +2533,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_FERITE].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_FERITE);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_ferite(ScintillaObject *sci)
+static void styleset_ferite(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_FERITE;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_FERITE].styling == NULL) styleset_ferite_init();
 
 	apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
@@ -2872,13 +2554,8 @@
 }
 
 
-static void styleset_vhdl_init(void)
+static void styleset_vhdl_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_VHDL);
-
 	new_style_array(GEANY_FILETYPES_VHDL, 15);
 
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_VHDL].styling[0]);
@@ -2930,19 +2607,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_VHDL].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_VHDL);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_vhdl(ScintillaObject *sci)
+static void styleset_vhdl(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_VHDL;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_VHDL].styling == NULL) styleset_vhdl_init();
 
 	apply_filetype_properties(sci, SCLEX_VHDL, ft_id);
 
@@ -2973,13 +2645,8 @@
 }
 
 
-static void styleset_js_init(void)
+static void styleset_js_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_JS);
-
 	new_style_array(GEANY_FILETYPES_JS, 20);
 	styleset_c_like_init(config, config_home, GEANY_FILETYPES_JS);
 
@@ -2994,19 +2661,14 @@
 	style_sets[GEANY_FILETYPES_JS].keywords[1] = NULL;
 
 	get_keyfile_wordchars(config, config_home, &style_sets[GEANY_FILETYPES_JS].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_JS);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_js(ScintillaObject *sci)
+static void styleset_js(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_JS;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_JS].styling == NULL) styleset_js_init();
 
 	apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
@@ -3018,13 +2680,8 @@
 }
 
 
-static void styleset_lua_init(void)
+static void styleset_lua_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_LUA);
-
 	new_style_array(GEANY_FILETYPES_LUA, 20);
 
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_LUA].styling[0]);
@@ -3088,19 +2745,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_LUA].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_LUA);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_lua(ScintillaObject *sci)
+static void styleset_lua(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_LUA;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_LUA].styling == NULL) styleset_lua_init();
 
 	apply_filetype_properties(sci, SCLEX_LUA, ft_id);
 
@@ -3137,13 +2789,8 @@
 }
 
 
-static void styleset_basic_init(void)
+static void styleset_basic_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_BASIC);
-
 	new_style_array(GEANY_FILETYPES_BASIC, 19);
 
 	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_BASIC].styling[0]);
@@ -3187,19 +2834,14 @@
 
 	get_keyfile_wordchars(config, config_home,
 		&style_sets[GEANY_FILETYPES_BASIC].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_BASIC);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_basic(ScintillaObject *sci)
+static void styleset_basic(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_BASIC;
 
 	styleset_common(sci, 5, ft_id);
-	if (style_sets[GEANY_FILETYPES_BASIC].styling == NULL) styleset_basic_init();
 
 	apply_filetype_properties(sci, SCLEX_FREEBASIC, ft_id);
 
@@ -3230,13 +2872,8 @@
 	set_sci_style(sci, SCE_B_BINNUMBER, GEANY_FILETYPES_BASIC, 18);
 }
 
-static void styleset_haxe_init(void)
+static void styleset_haxe_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
-	GKeyFile *config = g_key_file_new();
-	GKeyFile *config_home = g_key_file_new();
-
-	load_keyfiles(config, config_home, GEANY_FILETYPES_HAXE);
-
 	new_style_array(GEANY_FILETYPES_HAXE, 20);
 	styleset_c_like_init(config, config_home, GEANY_FILETYPES_HAXE);
 
@@ -3263,19 +2900,14 @@
 	style_sets[GEANY_FILETYPES_HAXE].keywords[3] = NULL;
 
 	get_keyfile_wordchars(config, config_home, &style_sets[GEANY_FILETYPES_HAXE].wordchars);
-	filetypes_get_config(config, config_home, GEANY_FILETYPES_HAXE);
-
-	g_key_file_free(config);
-	g_key_file_free(config_home);
 }
 
 
-void styleset_haxe(ScintillaObject *sci)
+static void styleset_haxe(ScintillaObject *sci)
 {
 	const filetype_id ft_id = GEANY_FILETYPES_HAXE;
 
 	styleset_common(sci, 5,ft_id);
-	if (style_sets[GEANY_FILETYPES_HAXE].styling == NULL) styleset_haxe_init();
 
 	apply_filetype_properties(sci, SCLEX_CPP, ft_id);
 
@@ -3289,3 +2921,103 @@
 }
 
 
+/* lang_name is the name used for the styleset_foo_init function, e.g. foo. */
+#define init_styleset_case(ft_id, lang_name) \
+	case (ft_id): \
+		styleset_ ## lang_name ## _init(filetype_idx, config, configh); \
+		break;
+
+/* Called by filetypes_load_config(). */
+void highlighting_init_styles(gint filetype_idx, GKeyFile *config, GKeyFile *configh)
+{
+	/* All stylesets depend on filetypes.common */
+	if (filetype_idx != GEANY_FILETYPES_ALL)
+		filetypes_load_config(GEANY_FILETYPES_ALL);
+
+	switch (filetype_idx)
+	{
+		init_styleset_case(GEANY_FILETYPES_ALL,		common);
+		init_styleset_case(GEANY_FILETYPES_ASM,		asm);
+		init_styleset_case(GEANY_FILETYPES_BASIC,	basic);
+		init_styleset_case(GEANY_FILETYPES_C,		c);
+		init_styleset_case(GEANY_FILETYPES_CAML,	caml);
+		init_styleset_case(GEANY_FILETYPES_CONF,	conf);
+		init_styleset_case(GEANY_FILETYPES_CPP,		cpp);
+		init_styleset_case(GEANY_FILETYPES_CS,		cs);
+		init_styleset_case(GEANY_FILETYPES_CSS,		css);
+		init_styleset_case(GEANY_FILETYPES_D,		d);
+		init_styleset_case(GEANY_FILETYPES_DIFF,	diff);
+		init_styleset_case(GEANY_FILETYPES_DOCBOOK,	docbook);
+		init_styleset_case(GEANY_FILETYPES_FERITE,	ferite);
+		init_styleset_case(GEANY_FILETYPES_FORTRAN,	fortran);
+		init_styleset_case(GEANY_FILETYPES_HASKELL,	haskell);
+		init_styleset_case(GEANY_FILETYPES_HAXE,	haxe);
+		init_styleset_case(GEANY_FILETYPES_HTML,	html);
+		init_styleset_case(GEANY_FILETYPES_JAVA,	java);
+		init_styleset_case(GEANY_FILETYPES_JS,		js);
+		init_styleset_case(GEANY_FILETYPES_LATEX,	latex);
+		init_styleset_case(GEANY_FILETYPES_LUA,		lua);
+		init_styleset_case(GEANY_FILETYPES_MAKE,	makefile);
+		init_styleset_case(GEANY_FILETYPES_OMS,		oms);
+		init_styleset_case(GEANY_FILETYPES_PASCAL,	pascal);
+		init_styleset_case(GEANY_FILETYPES_PERL,	perl);
+		init_styleset_case(GEANY_FILETYPES_PHP,		php);
+		init_styleset_case(GEANY_FILETYPES_PYTHON,	python);
+		init_styleset_case(GEANY_FILETYPES_RUBY,	ruby);
+		init_styleset_case(GEANY_FILETYPES_SH,		sh);
+		init_styleset_case(GEANY_FILETYPES_SQL,		sql);
+		init_styleset_case(GEANY_FILETYPES_TCL,		tcl);
+		init_styleset_case(GEANY_FILETYPES_VHDL,	vhdl);
+		init_styleset_case(GEANY_FILETYPES_XML,		markup);
+	}
+}
+
+
+/* lang_name is the name used for the styleset_foo function, e.g. foo. */
+#define styleset_case(ft_id, lang_name) \
+	case (ft_id): \
+		styleset_ ## lang_name (sci); \
+		break;
+
+void highlighting_set_styles(ScintillaObject *sci, gint filetype_idx)
+{
+	filetypes_load_config(filetype_idx);
+	
+	switch (filetype_idx)
+	{
+		styleset_case(GEANY_FILETYPES_ASM,		asm);
+		styleset_case(GEANY_FILETYPES_BASIC,	basic);
+		styleset_case(GEANY_FILETYPES_C,		c);
+		styleset_case(GEANY_FILETYPES_CAML,		caml);
+		styleset_case(GEANY_FILETYPES_CONF,		conf);
+		styleset_case(GEANY_FILETYPES_CPP,		cpp);
+		styleset_case(GEANY_FILETYPES_CS,		cs);
+		styleset_case(GEANY_FILETYPES_CSS,		css);
+		styleset_case(GEANY_FILETYPES_D,		d);
+		styleset_case(GEANY_FILETYPES_DIFF,		diff);
+		styleset_case(GEANY_FILETYPES_DOCBOOK,	docbook);
+		styleset_case(GEANY_FILETYPES_FERITE,	ferite);
+		styleset_case(GEANY_FILETYPES_FORTRAN,	fortran);
+		styleset_case(GEANY_FILETYPES_HASKELL,	haskell);
+		styleset_case(GEANY_FILETYPES_HAXE,		haxe);
+		styleset_case(GEANY_FILETYPES_HTML,		html);
+		styleset_case(GEANY_FILETYPES_JAVA,		java);
+		styleset_case(GEANY_FILETYPES_JS,		js);
+		styleset_case(GEANY_FILETYPES_LATEX,	latex);
+		styleset_case(GEANY_FILETYPES_LUA,		lua);
+		styleset_case(GEANY_FILETYPES_MAKE,		makefile);
+		styleset_case(GEANY_FILETYPES_OMS,		oms);
+		styleset_case(GEANY_FILETYPES_PASCAL,	pascal);
+		styleset_case(GEANY_FILETYPES_PERL,		perl);
+		styleset_case(GEANY_FILETYPES_PHP,		php);
+		styleset_case(GEANY_FILETYPES_PYTHON,	python);
+		styleset_case(GEANY_FILETYPES_RUBY,		ruby);
+		styleset_case(GEANY_FILETYPES_SH,		sh);
+		styleset_case(GEANY_FILETYPES_SQL,		sql);
+		styleset_case(GEANY_FILETYPES_TCL,		tcl);
+		styleset_case(GEANY_FILETYPES_VHDL,		vhdl);
+		styleset_case(GEANY_FILETYPES_XML,		xml);
+		default:
+		styleset_case(GEANY_FILETYPES_ALL,		none);
+	}
+}

Modified: trunk/src/highlighting.h
===================================================================
--- trunk/src/highlighting.h	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/src/highlighting.h	2007-11-02 17:44:05 UTC (rev 2011)
@@ -29,72 +29,10 @@
 #include "ScintillaWidget.h"
 
 
-void styleset_free_styles(void);
+void highlighting_init_styles(gint filetype_idx, GKeyFile *config, GKeyFile *configh);
 
-void styleset_c(ScintillaObject *sci);
+void highlighting_set_styles(ScintillaObject *sci, gint filetype_idx);
 
-void styleset_cpp(ScintillaObject *sci);
+void highlighting_free_styles(void);
 
-void styleset_makefile(ScintillaObject *sci);
-
-void styleset_latex(ScintillaObject *sci);
-
-void styleset_php(ScintillaObject *sci);
-
-void styleset_html(ScintillaObject *sci);
-
-void styleset_java(ScintillaObject *sci);
-
-void styleset_pascal(ScintillaObject *sci);
-
-void styleset_perl(ScintillaObject *sci);
-
-void styleset_python(ScintillaObject *sci);
-
-void styleset_ruby(ScintillaObject *sci);
-
-void styleset_sh(ScintillaObject *sci);
-
-void styleset_xml(ScintillaObject *sci);
-
-void styleset_docbook(ScintillaObject *sci);
-
-void styleset_none(ScintillaObject *sci);
-
-void styleset_css(ScintillaObject *sci);
-
-void styleset_conf(ScintillaObject *sci);
-
-void styleset_asm(ScintillaObject *sci);
-
-void styleset_sql(ScintillaObject *sci);
-
-void styleset_caml(ScintillaObject *sci);
-
-void styleset_haskell(ScintillaObject *sci);
-
-void styleset_oms(ScintillaObject *sci);
-
-void styleset_tcl(ScintillaObject *sci);
-
-void styleset_d(ScintillaObject *sci);
-
-void styleset_fortran(ScintillaObject *sci);
-
-void styleset_diff(ScintillaObject *sci);
-
-void styleset_ferite(ScintillaObject *sci);
-
-void styleset_vhdl(ScintillaObject *sci);
-
-void styleset_js(ScintillaObject *sci);
-
-void styleset_lua(ScintillaObject *sci);
-
-void styleset_cs(ScintillaObject *sci);
-
-void styleset_basic(ScintillaObject *sci);
-
-void styleset_haxe(ScintillaObject *sci);
-
 #endif

Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/src/main.c	2007-11-02 17:44:05 UTC (rev 2011)
@@ -788,7 +788,7 @@
 	keybindings_free();
 	filetypes_save_commands();
 	filetypes_free_types();
-	styleset_free_styles();
+	highlighting_free_styles();
 	templates_free_templates();
 	msgwin_finalize();
 	search_finalize();

Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c	2007-11-02 16:57:51 UTC (rev 2010)
+++ trunk/src/templates.c	2007-11-02 17:44:05 UTC (rev 2011)
@@ -528,6 +528,8 @@
 	filetype_id ft_id = filetype_idx;
 	filetype *ft = filetypes[ft_id];
 
+	filetypes_load_config(ft_id);	// load any user extension setting
+	
 	if (fname == NULL)
 	{
 		if (ft_id == GEANY_FILETYPES_ALL)
@@ -539,11 +541,8 @@
 		shortname = g_path_get_basename(fname);
 
 	template = utils_str_replace(template, "{filename}", shortname);
-
 	template = utils_str_replace(template, "{gpl}", templates[GEANY_TEMPLATE_GPL]);
-
 	template = utils_str_replace(template, "{bsd}", templates[GEANY_TEMPLATE_BSD]);
-
 	template = utils_str_replace(template, "{datetime}", date);
 
 	result = make_comment_block(template, ft_id, 8);


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