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.