SF.net SVN: geany:[4080] branches/custom-filetypes

ntrel at users.sourceforge.net ntrel at xxxxx
Fri Aug 14 11:05:47 UTC 2009


Revision: 4080
          http://geany.svn.sourceforge.net/geany/?rev=4080&view=rev
Author:   ntrel
Date:     2009-08-14 11:05:47 +0000 (Fri, 14 Aug 2009)

Log Message:
-----------
Fix setting wordchars for custom filetypes.
Use style_sets array for custom filetypes too.
Replace styleset_none() with styleset_default().

Modified Paths:
--------------
    branches/custom-filetypes/ChangeLog
    branches/custom-filetypes/src/highlighting.c
    branches/custom-filetypes/src/main.c

Modified: branches/custom-filetypes/ChangeLog
===================================================================
--- branches/custom-filetypes/ChangeLog	2009-08-13 21:59:33 UTC (rev 4079)
+++ branches/custom-filetypes/ChangeLog	2009-08-14 11:05:47 UTC (rev 4080)
@@ -1,3 +1,11 @@
+2009-08-14  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/highlighting.c, src/main.c:
+   Fix setting wordchars for custom filetypes.
+   Use style_sets array for custom filetypes too.
+   Replace styleset_none() with styleset_default().
+
+
 2009-08-12  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/templates.c, src/highlighting.c, src/dialogs.c, src/filetypes.c,

Modified: branches/custom-filetypes/src/highlighting.c
===================================================================
--- branches/custom-filetypes/src/highlighting.c	2009-08-13 21:59:33 UTC (rev 4079)
+++ branches/custom-filetypes/src/highlighting.c	2009-08-14 11:05:47 UTC (rev 4080)
@@ -62,7 +62,7 @@
 } StyleSet;
 
 /* each filetype has a styleset except GEANY_FILETYPES_NONE, which uses common_style_set */
-static StyleSet style_sets[GEANY_MAX_BUILT_IN_FILETYPES] = {{0, NULL, NULL, NULL}};
+static StyleSet *style_sets = NULL;
 
 
 enum	/* Geany common styling */
@@ -402,7 +402,7 @@
 
 static GeanyLexerStyle *get_style(guint ft_id, guint styling_index)
 {
-	g_assert(ft_id < GEANY_MAX_BUILT_IN_FILETYPES);
+	g_assert(ft_id < filetypes_array->len);
 
 	if (G_UNLIKELY(ft_id == GEANY_FILETYPES_NONE))
 	{
@@ -432,13 +432,16 @@
 
 void highlighting_free_styles()
 {
-	gint i;
+	guint i;
 
-	for (i = 0; i < GEANY_MAX_BUILT_IN_FILETYPES; i++)
+	for (i = 0; i < filetypes_array->len; i++)
 		styleset_free(i);
 
 	if (named_style_hash)
 		g_hash_table_destroy(named_style_hash);
+
+	if (style_sets)
+		g_free(style_sets);
 }
 
 
@@ -600,10 +603,15 @@
 }
 
 
-static void styleset_common(ScintillaObject *sci)
+static void styleset_common(ScintillaObject *sci, filetype_id ft_id)
 {
 	SSM(sci, SCI_STYLECLEARALL, 0, 0);
 
+	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) (ft_id == GEANY_FILETYPES_NONE ?
+		common_style_set.wordchars : style_sets[ft_id].wordchars));
+	/* have to set whitespace after setting wordchars */
+	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
+
 	/* caret colour, style and width */
 	SSM(sci, SCI_SETCARETFORE, invert(common_style_set.styling[GCS_CARET].foreground), 0);
 	SSM(sci, SCI_SETCARETWIDTH, common_style_set.styling[GCS_CARET].background, 0);
@@ -793,13 +801,7 @@
 
 	SSM(sci, SCI_SETLEXER, lexer, 0);
 
-	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[ft_id].wordchars);
-	/* have to set whitespace after setting wordchars */
-	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
-
-	SSM(sci, SCI_AUTOCSETMAXHEIGHT, editor_prefs.symbolcompletion_max_height, 0);
-
-	styleset_common(sci);
+	styleset_common(sci, ft_id);
 }
 
 
@@ -2164,17 +2166,14 @@
 }
 
 
-static void styleset_none(ScintillaObject *sci)
+static void styleset_default(ScintillaObject *sci, gint ft_id)
 {
 	SSM(sci, SCI_SETLEXER, SCLEX_NULL, 0);
 
 	/* we need to set STYLE_DEFAULT before we call SCI_STYLECLEARALL in styleset_common() */
 	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_NONE, GCS_DEFAULT);
 
-	styleset_common(sci);
-
-	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) common_style_set.wordchars);
-	SSM(sci, SCI_SETWHITESPACECHARS, 0, (sptr_t) whitespace_chars);
+	styleset_common(sci, ft_id);
 }
 
 
@@ -2897,8 +2896,6 @@
 {
 	const filetype_id ft_id = GEANY_FILETYPES_MATLAB;
 
-	styleset_common(sci);
-
 	apply_filetype_properties(sci, SCLEX_MATLAB, ft_id);
 
 	SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_MATLAB].keywords[0]);
@@ -3497,10 +3494,10 @@
 /* Called by filetypes_load_config(). */
 void highlighting_init_styles(gint filetype_idx, GKeyFile *config, GKeyFile *configh)
 {
-	if (filetype_idx >= GEANY_MAX_BUILT_IN_FILETYPES)
-		return;	/* not supported yet */
+	if (!style_sets)
+		style_sets = g_new0(StyleSet, filetypes_array->len);
 
-	/* Clear old information if necessary - e.g. reloading config */
+	/* Clear old information if necessary - e.g. when reloading config */
 	styleset_free(filetype_idx);
 
 	/* All stylesets depend on filetypes.common */
@@ -3619,8 +3616,9 @@
 		styleset_case(GEANY_FILETYPES_VHDL,		styleset_vhdl);
 		styleset_case(GEANY_FILETYPES_XML,		styleset_xml);
 		styleset_case(GEANY_FILETYPES_YAML,		styleset_yaml);
+		case GEANY_FILETYPES_NONE:
 		default:
-		styleset_case(GEANY_FILETYPES_NONE,		styleset_none);
+			styleset_default(sci, filetype_idx);
 	}
 }
 
@@ -3635,7 +3633,7 @@
  * @see Scintilla messages @c SCI_STYLEGETFORE, etc, for use with ScintillaFuncs::send_message(). */
 const GeanyLexerStyle *highlighting_get_style(gint ft_id, gint style_id)
 {
-	if (ft_id < 0 || ft_id > GEANY_MAX_BUILT_IN_FILETYPES)
+	if (ft_id < 0 || ft_id >= (gint)filetypes_array->len)
 		return NULL;
 
 	/* ensure filetype loaded */

Modified: branches/custom-filetypes/src/main.c
===================================================================
--- branches/custom-filetypes/src/main.c	2009-08-13 21:59:33 UTC (rev 4079)
+++ branches/custom-filetypes/src/main.c	2009-08-14 11:05:47 UTC (rev 4080)
@@ -1088,7 +1088,6 @@
 	navqueue_free();
 	keybindings_free();
 	filetypes_save_commands();
-	filetypes_free_types();
 	highlighting_free_styles();
 	templates_free_templates();
 	msgwin_finalize();
@@ -1103,6 +1102,7 @@
 	toolbar_finalize();
 	treeviews_finalize();
 	configuration_finalize();
+	filetypes_free_types();
 	log_finalize();
 
 	tm_workspace_free(TM_WORK_OBJECT(app->tm_workspace));


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