[Geany] Adding Syntax Highlighting for New FIletype Problem

Andrew Rowland weibullguy at xxxxx
Fri Sep 19 09:46:19 UTC 2008


All,

I am attempting to add filetype and syntax highlighting support for R
scripts.  I am following the steps outlined in HACKING.  I've added
GEANY_FILETYPES_R to filetypes.h, initialized GEANY_FILETYPES_R in
init_builtin_filetypes(), and updated data/filetype_extensions.conf.
After rebuilding Geany, R scripts show up in the Filetypes menu under
scripting languages and Geany recognizes *.R and *.r files as R scripts.
So, the first step was successful.

On to the syntax highlighting.  I shamelessly stole LexR.cxx from
scintilla and I've created data/filetypes.r.  I then wrote the
styleset_r_init() and styleset_r() functions, added
init_styleset_case(GEANY_FILETYPES_R, r) to highlighting_init_styles(),
and added styleset_case(GEANY_FILETYPES_R, r)
to highlighting_set_styles().

Unfortunately, the only style that is applied to R scripts is the
default style.  If I change the hex color codes in highlighting.c or in
data/filetypes.r, the new colors will be used.  However, none of the
other styles are being used.

Below are my init_styleset_case() and styleset_case() functions.  I'm
sure it's something I've done wrong, but I can't see the problem.  A
pointer in the right direction would be appreciated.

TIA

Andrew

static void styleset_r_init(gint ft_id, GKeyFile *config, GKeyFile
*config_home)
{
	new_style_array(GEANY_FILETYPES_R, 12);

	get_keyfile_hex(config, config_home, "styling", "default", "0x000000",
"0xffffff", "false", &style_sets[GEANY_FILETYPES_R].styling[0]);
	get_keyfile_hex(config, config_home, "styling", "comment", "0x000000",
"0xffffff", "false", &style_sets[GEANY_FILETYPES_R].styling[1]);
	get_keyfile_hex(config, config_home, "styling", "kword", "0xF70808",
"0xffffff", "false", &style_sets[GEANY_FILETYPES_R].styling[2]);
	get_keyfile_hex(config, config_home, "styling", "operator", "0x000fff",
"0xffffff", "false", &style_sets[GEANY_FILETYPES_R].styling[3]);
    get_keyfile_hex(config, config_home, "styling", "basekword",
"0x000fff", "0xffffff", "true",
&style_sets[GEANY_FILETYPES_R].styling[4]);
    get_keyfile_hex(config, config_home, "styling", "otherkword",
"0x119911", "0xffffff", "true",
&style_sets[GEANY_FILETYPES_R].styling[5]);
    get_keyfile_hex(config, config_home, "styling", "number",
"0x000fff", "0xffffff", "true",
&style_sets[GEANY_FILETYPES_R].styling[6]);
    get_keyfile_hex(config, config_home, "styling", "string",
"0x119911", "0xffffff", "true",
&style_sets[GEANY_FILETYPES_R].styling[7]);
    get_keyfile_hex(config, config_home, "styling", "string2",
"0x119911", "0xffffff", "true",
&style_sets[GEANY_FILETYPES_R].styling[8]);
    get_keyfile_hex(config, config_home, "styling", "identifier",
"0x119911", "0xffffff", "true",
&style_sets[GEANY_FILETYPES_R].styling[9]);
    get_keyfile_hex(config, config_home, "styling", "infix", "0x119911",
"0xffffff", "true", &style_sets[GEANY_FILETYPES_R].styling[10]);
	get_keyfile_hex(config, config_home, "styling", "infixeol", "0x119911",
"0xffffff", "true", &style_sets[GEANY_FILETYPES_R].styling[11]);
	
	style_sets[GEANY_FILETYPES_R].keywords = g_new(gchar*, 2);
	get_keyfile_keywords(config, config_home, "keywords", "primary",
GEANY_FILETYPES_R, 0, "if source array matrix diag solve for");
	style_sets[GEANY_FILETYPES_R].keywords[1] = NULL;

	get_keyfile_wordchars(config, config_home,
		&style_sets[GEANY_FILETYPES_R].wordchars);
}


static void styleset_r(ScintillaObject *sci)
{
	const filetype_id ft_id = GEANY_FILETYPES_R;

	styleset_common(sci, 5, ft_id);

	apply_filetype_properties(sci, SCLEX_R, ft_id);

	SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t)
style_sets[GEANY_FILETYPES_R].keywords[0]);

	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_R, 0);
	set_sci_style(sci, SCE_R_DEFAULT, GEANY_FILETYPES_R, 0);
	set_sci_style(sci, SCE_R_COMMENT, GEANY_FILETYPES_R, 1);
	set_sci_style(sci, SCE_R_KWORD, GEANY_FILETYPES_R, 2);
	set_sci_style(sci, SCE_R_OPERATOR, GEANY_FILETYPES_R, 3);
	set_sci_style(sci, SCE_R_BASEKWORD, GEANY_FILETYPES_R, 4);
	set_sci_style(sci, SCE_R_OTHERKWORD, GEANY_FILETYPES_R, 5);
	set_sci_style(sci, SCE_R_NUMBER, GEANY_FILETYPES_R, 6);
	set_sci_style(sci, SCE_R_STRING, GEANY_FILETYPES_R, 7);
	set_sci_style(sci, SCE_R_STRING2, GEANY_FILETYPES_R, 8);
	set_sci_style(sci, SCE_R_IDENTIFIER, GEANY_FILETYPES_R, 9);
	set_sci_style(sci, SCE_R_INFIX, GEANY_FILETYPES_R, 10);
	set_sci_style(sci, SCE_R_INFIXEOL, GEANY_FILETYPES_R, 11);
}




More information about the Users mailing list