SF.net SVN: geany:[4257] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Mon Sep 28 15:55:50 UTC 2009


Revision: 4257
          http://geany.svn.sourceforge.net/geany/?rev=4257&view=rev
Author:   ntrel
Date:     2009-09-28 15:55:49 +0000 (Mon, 28 Sep 2009)

Log Message:
-----------
Add apply_style_entries() to simplify implementing styleset_foo().

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/HACKING
    trunk/src/highlighting.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-09-28 15:33:05 UTC (rev 4256)
+++ trunk/ChangeLog	2009-09-28 15:55:49 UTC (rev 4257)
@@ -12,6 +12,8 @@
    data/filetypes.restructuredtext:
    Remove style defaults from the code - just read them from
    configuration files.
+ * src/highlighting.c, HACKING:
+   Add apply_style_entries() to simplify implementing styleset_foo().
 
 
 2009-09-27  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/HACKING
===================================================================
--- trunk/HACKING	2009-09-28 15:33:05 UTC (rev 4256)
+++ trunk/HACKING	2009-09-28 15:55:49 UTC (rev 4257)
@@ -305,11 +305,10 @@
 1. Write styleset_foo_init() to setup lexer styles and load style
    settings from the filetypes.foo configuration file. You should probably
    start by copying and adapting another filetype's initialization, such
-   as styleset_tcl_init(). Another way is to use load_style_entries()
-   to make style initialization simpler - see styleset_c_like_init().
+   as styleset_tcl_init(). You may want to use load_style_entries().
 2. Write styleset_foo() to apply styles when a new scintilla widget
    is created. Again you could copy and adapt a function like
-   styleset_tcl().
+   styleset_tcl(). You may want to use apply_style_entries().
 3. In highlighting_init_styles(), add
    ``init_styleset_case(GEANY_FILETYPES_FOO, styleset_foo_init);``.
 4. In highlighting_set_styles(), add

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2009-09-28 15:33:05 UTC (rev 4256)
+++ trunk/src/highlighting.c	2009-09-28 15:55:49 UTC (rev 4257)
@@ -756,16 +756,15 @@
 #define foreach_range(i, size) \
 		for (i = 0; i < size; i++)
 
-/* entries contains the default style names for the filetype.
- * If used, entries[n].style should have foreground and background in 0xRRGGBB format, or -1. */
+/* names: the style names for the filetype. */
 static void load_style_entries(GKeyFile *config, GKeyFile *config_home, gint filetype_idx,
-		const gchar **entries, gsize entries_len)
+		const gchar **names, gsize names_len)
 {
 	guint i;
 
-	foreach_range(i, entries_len)
+	foreach_range(i, names_len)
 	{
-		const gchar *name = entries[i];
+		const gchar *name = names[i];
 		GeanyLexerStyle *style = &style_sets[filetype_idx].styling[i];
 
 		get_keyfile_style(config, config_home, name, style);
@@ -773,6 +772,22 @@
 }
 
 
+/* styles: the style IDs for the filetype.
+ * STYLE_DEFAULT will be set to match the first style. */
+static void apply_style_entries(ScintillaObject *sci, gint filetype_idx,
+		gint *styles, gsize styles_len)
+{
+	guint i;
+
+	g_return_if_fail(styles_len > 0);
+
+	set_sci_style(sci, STYLE_DEFAULT, filetype_idx, 0);
+
+	foreach_range(i, styles_len)
+		set_sci_style(sci, styles[i], filetype_idx, i);
+}
+
+
 /* call new_styleset(filetype_idx, >= 20) before using this. */
 static void
 styleset_c_like_init(GKeyFile *config, GKeyFile *config_home, gint filetype_idx)
@@ -807,28 +822,31 @@
 
 static void styleset_c_like(ScintillaObject *sci, gint filetype_idx)
 {
-	set_sci_style(sci, STYLE_DEFAULT, filetype_idx, 0);
-	set_sci_style(sci, SCE_C_DEFAULT, filetype_idx, 0);
-	set_sci_style(sci, SCE_C_COMMENT, filetype_idx, 1);
-	set_sci_style(sci, SCE_C_COMMENTLINE, filetype_idx, 2);
-	set_sci_style(sci, SCE_C_COMMENTDOC, filetype_idx, 3);
-	set_sci_style(sci, SCE_C_NUMBER, filetype_idx, 4);
-	set_sci_style(sci, SCE_C_WORD, filetype_idx, 5);
-	set_sci_style(sci, SCE_C_WORD2, filetype_idx, 6);
-	set_sci_style(sci, SCE_C_STRING, filetype_idx, 7);
-	set_sci_style(sci, SCE_C_CHARACTER, filetype_idx, 8);
-	set_sci_style(sci, SCE_C_UUID, filetype_idx, 9);
-	set_sci_style(sci, SCE_C_PREPROCESSOR, filetype_idx, 10);
-	set_sci_style(sci, SCE_C_OPERATOR, filetype_idx, 11);
-	set_sci_style(sci, SCE_C_IDENTIFIER, filetype_idx, 12);
-	set_sci_style(sci, SCE_C_STRINGEOL, filetype_idx, 13);
-	set_sci_style(sci, SCE_C_VERBATIM, filetype_idx, 14);
-	set_sci_style(sci, SCE_C_REGEX, filetype_idx, 15);
-	set_sci_style(sci, SCE_C_COMMENTLINEDOC, filetype_idx, 16);
-	set_sci_style(sci, SCE_C_COMMENTDOCKEYWORD, filetype_idx, 17);
-	set_sci_style(sci, SCE_C_COMMENTDOCKEYWORDERROR, filetype_idx, 18);
-	/* is used for local structs and typedefs */
-	set_sci_style(sci, SCE_C_GLOBALCLASS, filetype_idx, 19);
+	gint styles[] = {
+		SCE_C_DEFAULT,
+		SCE_C_COMMENT,
+		SCE_C_COMMENTLINE,
+		SCE_C_COMMENTDOC,
+		SCE_C_NUMBER,
+		SCE_C_WORD,
+		SCE_C_WORD2,
+		SCE_C_STRING,
+		SCE_C_CHARACTER,
+		SCE_C_UUID,
+		SCE_C_PREPROCESSOR,
+		SCE_C_OPERATOR,
+		SCE_C_IDENTIFIER,
+		SCE_C_STRINGEOL,
+		SCE_C_VERBATIM,
+		SCE_C_REGEX,
+		SCE_C_COMMENTLINEDOC,
+		SCE_C_COMMENTDOCKEYWORD,
+		SCE_C_COMMENTDOCKEYWORDERROR,
+		/* used for local structs and typedefs */
+		SCE_C_GLOBALCLASS
+	};
+
+	apply_style_entries(sci, filetype_idx, styles, G_N_ELEMENTS(styles));
 }
 
 


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