/* * highligting.c - this file is part of Geany, a fast and lightweight IDE * * Copyright 2005 Enrico Troeger * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id$ */ #include "geany.h" #ifdef GEANY_WIN32 # include "win32.h" #else /* my_strtod() is an simple implementation of strtod() for Win32 systems(declared in win32.h), * because the Win32 API cannot handle hexadecimal numbers, my_strtod does only work for numbers * like 0x..., on non-Win32 systems use the ANSI-C function strtod() */ # include # define my_strtod(x, y) strtod(x, y) #endif #include "highlighting.h" #include "utils.h" static style_set *types[GEANY_MAX_FILE_TYPES] = { NULL }; /* simple wrapper function to print file errors in DEBUG mode */ void style_set_load_file(GKeyFile *key_file, const gchar *file, GKeyFileFlags flags, 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); } } gchar *styleset_get_string(GKeyFile *config, const gchar *section, const gchar *key) { GError *error = NULL; gchar *result; if (config == NULL || section == NULL) return NULL; result = g_key_file_get_string(config, section, key, &error); //if (error) geany_debug(error->message); if (error) g_error_free(error); return result; } void styleset_get_hex(GKeyFile *config, const gchar *section, const gchar *key, const gchar *foreground, const gchar *background, const gchar *bold, gint array[]) { GError *error = NULL; gchar **list; gsize len; if (config == NULL || section == NULL) return; list = g_key_file_get_string_list(config, section, key, &len, &error); if (list != NULL && list[0] != NULL) array[0] = (gint) my_strtod(list[0], NULL); else array[0] = (gint) my_strtod(foreground, NULL); if (list != NULL && list[1] != NULL) array[1] = (gint) my_strtod(list[1], NULL); else array[1] = (gint) my_strtod(background, NULL); if (list != NULL && list[2] != NULL) array[2] = utils_atob(list[2]); else array[2] = utils_atob(bold); g_strfreev(list); } void styleset_free_styles() { gint i; for (i = 0; i < GEANY_MAX_FILE_TYPES; i++) { if (types[i] != NULL) { g_strfreev(types[i]->keywords); g_free(types[i]); } } } void styleset_common_init(void) { GKeyFile *config = g_key_file_new(); style_set_load_file(config, GEANY_DATA_DIR "/filetypes.common", G_KEY_FILE_KEEP_COMMENTS, NULL); types[GEANY_FILETYPES_ALL] = g_new(style_set, 1); styleset_get_hex(config, "styling", "default", "0x000000", "0xffffff", "false", types[GEANY_FILETYPES_ALL]->styling[0]); styleset_get_hex(config, "styling", "selection", "0xc0c0c0", "0x00007f", "false", types[GEANY_FILETYPES_ALL]->styling[1]); styleset_get_hex(config, "styling", "brace_good", "0xff0000", "0xffffff", "false", types[GEANY_FILETYPES_ALL]->styling[2]); styleset_get_hex(config, "styling", "brace_bad", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_ALL]->styling[3]); types[GEANY_FILETYPES_ALL]->keywords = NULL; g_key_file_free(config); } void styleset_common(ScintillaObject *sci, gint style_bits) { if (types[GEANY_FILETYPES_ALL] == NULL) styleset_common_init(); SSM(sci, SCI_STYLESETFORE, STYLE_DEFAULT, types[GEANY_FILETYPES_ALL]->styling[0][0]); SSM(sci, SCI_STYLESETBACK, STYLE_DEFAULT, types[GEANY_FILETYPES_ALL]->styling[0][1]); SSM(sci, SCI_STYLESETBOLD, STYLE_DEFAULT, types[GEANY_FILETYPES_ALL]->styling[0][2]); SSM(sci, SCI_STYLECLEARALL, 0, 0); SSM(sci, SCI_SETUSETABS, TRUE, 0); SSM(sci, SCI_SETTABWIDTH, app->pref_editor_tab_width, 0); // colourize the current line SSM(sci, SCI_SETCARETLINEBACK, 0xE5E5E5, 0); SSM(sci, SCI_SETCARETLINEVISIBLE, 1, 0); // a darker grey for the line number margin SSM(sci, SCI_STYLESETBACK, STYLE_LINENUMBER, 0xD0D0D0); // define marker symbols // 0 -> line marker SSM(sci, SCI_MARKERDEFINE, 0, SC_MARK_SHORTARROW); SSM(sci, SCI_MARKERSETFORE, 0, 0x00007f); SSM(sci, SCI_MARKERSETBACK, 0, 0x00ffff); // 1 -> user marker SSM(sci, SCI_MARKERDEFINE, 1, SC_MARK_PLUS); SSM(sci, SCI_MARKERSETFORE, 1, 0x000000); SSM(sci, SCI_MARKERSETBACK, 1, 0xB8F4B8); SSM(sci, SCI_SETSELFORE, 1, types[GEANY_FILETYPES_ALL]->styling[1][0]); SSM(sci, SCI_SETSELBACK, 1, types[GEANY_FILETYPES_ALL]->styling[1][1]); SSM (sci, SCI_SETSTYLEBITS, style_bits, 0); SSM(sci, SCI_STYLESETFORE, STYLE_BRACELIGHT, types[GEANY_FILETYPES_ALL]->styling[2][0]); SSM(sci, SCI_STYLESETBACK, STYLE_BRACELIGHT, types[GEANY_FILETYPES_ALL]->styling[2][1]); SSM(sci, SCI_STYLESETBOLD, STYLE_BRACELIGHT, types[GEANY_FILETYPES_ALL]->styling[2][2]); SSM(sci, SCI_STYLESETFORE, STYLE_BRACEBAD, types[GEANY_FILETYPES_ALL]->styling[3][0]); SSM(sci, SCI_STYLESETBACK, STYLE_BRACEBAD, types[GEANY_FILETYPES_ALL]->styling[3][1]); SSM(sci, SCI_STYLESETBOLD, STYLE_BRACEBAD, types[GEANY_FILETYPES_ALL]->styling[3][2]); } void styleset_c_init(void) { GKeyFile *config = g_key_file_new(); style_set_load_file(config, GEANY_DATA_DIR "/filetypes.c", G_KEY_FILE_KEEP_COMMENTS, NULL); types[GEANY_FILETYPES_C] = g_new(style_set, 1); styleset_get_hex(config, "styling", "default", "0x000000", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[0]); styleset_get_hex(config, "styling", "comment", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[1]); styleset_get_hex(config, "styling", "commentline", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[2]); styleset_get_hex(config, "styling", "commentdoc", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[3]); styleset_get_hex(config, "styling", "number", "0x007f00", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[4]); styleset_get_hex(config, "styling", "word", "0x991111", "0xffffff", "true", types[GEANY_FILETYPES_C]->styling[5]); styleset_get_hex(config, "styling", "word2", "0x00007F", "0xffffff", "true", types[GEANY_FILETYPES_C]->styling[6]); styleset_get_hex(config, "styling", "string", "0x1E90FF", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[7]); styleset_get_hex(config, "styling", "character", "0x1E90FF", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[8]); styleset_get_hex(config, "styling", "uuid", "0x804040", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[9]); styleset_get_hex(config, "styling", "preprocessor", "0x7F7F00", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[10]); styleset_get_hex(config, "styling", "operator", "0x101030", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[11]); styleset_get_hex(config, "styling", "identifier", "0x100000", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[12]); styleset_get_hex(config, "styling", "stringeol", "0x000000", "0xe0c0e0", "false", types[GEANY_FILETYPES_C]->styling[13]); styleset_get_hex(config, "styling", "verbatim", "0x101030", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[14]); styleset_get_hex(config, "styling", "regex", "0x101030", "0xffffff", "false", types[GEANY_FILETYPES_C]->styling[15]); styleset_get_hex(config, "styling", "commentlinedoc", "0x0000ff", "0xffffff", "true", types[GEANY_FILETYPES_C]->styling[16]); styleset_get_hex(config, "styling", "commentdockeyword", "0x0000ff", "0xffffff", "true", types[GEANY_FILETYPES_C]->styling[17]); styleset_get_hex(config, "styling", "globalclass", "0xbb1111", "0xffffff", "true", types[GEANY_FILETYPES_C]->styling[18]); types[GEANY_FILETYPES_C]->keywords = g_new(gchar*, 3); types[GEANY_FILETYPES_C]->keywords[0] = styleset_get_string(config, "keywords", "primary"); if (types[GEANY_FILETYPES_C]->keywords[0] == NULL) types[GEANY_FILETYPES_C]->keywords[0] = g_strdup("if const struct char int float double void long for while do case switch return"); types[GEANY_FILETYPES_C]->keywords[1] = styleset_get_string(config, "keywords", "docComment"); if (types[GEANY_FILETYPES_C]->keywords[1] == NULL) types[GEANY_FILETYPES_C]->keywords[1] = g_strdup("TODO FIXME"); types[GEANY_FILETYPES_C]->keywords[2] = NULL; g_key_file_free(config); // load global tags file for C autocompletion if (! app->ignore_global_tags) tm_workspace_load_global_tags(GEANY_DATA_DIR "/global.tags"); } void styleset_c(ScintillaObject *sci) { if (types[GEANY_FILETYPES_C] == NULL) styleset_c_init(); styleset_common(sci, 5); /* Assign global keywords */ if ((app->tm_workspace) && (app->tm_workspace->global_tags)) { guint j; GPtrArray *g_typedefs = tm_tags_extract(app->tm_workspace->global_tags, tm_tag_typedef_t | tm_tag_struct_t | tm_tag_class_t); if ((g_typedefs) && (g_typedefs->len > 0)) { GString *s = g_string_sized_new(g_typedefs->len * 10); for (j = 0; j < g_typedefs->len; ++j) { if (!(TM_TAG(g_typedefs->pdata[j])->atts.entry.scope)) { g_string_append(s, TM_TAG(g_typedefs->pdata[j])->name); g_string_append_c(s, ' '); } } SSM(sci, SCI_SETKEYWORDS, 1, (sptr_t) s->str); g_string_free(s, TRUE); } g_ptr_array_free(g_typedefs, TRUE); } SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) GEANY_WORDCHARS); SSM (sci, SCI_AUTOCSETMAXHEIGHT, 8, 0); SSM (sci, SCI_SETLEXER, SCLEX_CPP, 0); //SSM (sci, SCI_SETCONTROLCHARSYMBOL, 32, 0); SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) types[GEANY_FILETYPES_C]->keywords[0]); //SSM(sci, SCI_SETKEYWORDS, 1, (sptr_t) secondaryKeyWords); SSM(sci, SCI_SETKEYWORDS, 2, (sptr_t) types[GEANY_FILETYPES_C]->keywords[1]); //SSM(sci, SCI_SETKEYWORDS, 4, (sptr_t) typedefsKeyWords); SSM(sci, SCI_STYLESETFORE, SCE_C_DEFAULT, types[GEANY_FILETYPES_C]->styling[0][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_DEFAULT, types[GEANY_FILETYPES_C]->styling[0][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_DEFAULT, types[GEANY_FILETYPES_C]->styling[0][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_COMMENT, types[GEANY_FILETYPES_C]->styling[1][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_COMMENT, types[GEANY_FILETYPES_C]->styling[1][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_COMMENT, types[GEANY_FILETYPES_C]->styling[1][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_COMMENTLINE, types[GEANY_FILETYPES_C]->styling[2][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_COMMENTLINE, types[GEANY_FILETYPES_C]->styling[2][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_COMMENTLINE, types[GEANY_FILETYPES_C]->styling[2][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_COMMENTDOC, types[GEANY_FILETYPES_C]->styling[3][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_COMMENTDOC, types[GEANY_FILETYPES_C]->styling[3][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_COMMENTDOC, types[GEANY_FILETYPES_C]->styling[3][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_NUMBER, types[GEANY_FILETYPES_C]->styling[4][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_NUMBER, types[GEANY_FILETYPES_C]->styling[4][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_NUMBER, types[GEANY_FILETYPES_C]->styling[4][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_WORD, types[GEANY_FILETYPES_C]->styling[5][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_WORD, types[GEANY_FILETYPES_C]->styling[5][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_WORD, types[GEANY_FILETYPES_C]->styling[5][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_WORD2, types[GEANY_FILETYPES_C]->styling[6][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_WORD2, types[GEANY_FILETYPES_C]->styling[6][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_WORD2, types[GEANY_FILETYPES_C]->styling[6][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_STRING, types[GEANY_FILETYPES_C]->styling[7][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_STRING, types[GEANY_FILETYPES_C]->styling[7][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_STRING, types[GEANY_FILETYPES_C]->styling[7][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_CHARACTER, types[GEANY_FILETYPES_C]->styling[8][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_CHARACTER, types[GEANY_FILETYPES_C]->styling[8][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_CHARACTER, types[GEANY_FILETYPES_C]->styling[8][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_UUID, types[GEANY_FILETYPES_C]->styling[9][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_UUID, types[GEANY_FILETYPES_C]->styling[9][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_UUID, types[GEANY_FILETYPES_C]->styling[9][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_PREPROCESSOR, types[GEANY_FILETYPES_C]->styling[10][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_PREPROCESSOR, types[GEANY_FILETYPES_C]->styling[10][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_PREPROCESSOR, types[GEANY_FILETYPES_C]->styling[10][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_OPERATOR, types[GEANY_FILETYPES_C]->styling[11][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_OPERATOR, types[GEANY_FILETYPES_C]->styling[11][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_OPERATOR, types[GEANY_FILETYPES_C]->styling[11][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_IDENTIFIER, types[GEANY_FILETYPES_C]->styling[12][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_IDENTIFIER, types[GEANY_FILETYPES_C]->styling[12][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_IDENTIFIER, types[GEANY_FILETYPES_C]->styling[12][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_STRINGEOL, types[GEANY_FILETYPES_C]->styling[13][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_STRINGEOL, types[GEANY_FILETYPES_C]->styling[13][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_STRINGEOL, types[GEANY_FILETYPES_C]->styling[13][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_VERBATIM, types[GEANY_FILETYPES_C]->styling[14][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_VERBATIM, types[GEANY_FILETYPES_C]->styling[14][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_VERBATIM, types[GEANY_FILETYPES_C]->styling[14][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_REGEX, types[GEANY_FILETYPES_C]->styling[15][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_REGEX, types[GEANY_FILETYPES_C]->styling[15][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_REGEX, types[GEANY_FILETYPES_C]->styling[15][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_COMMENTLINEDOC, types[GEANY_FILETYPES_C]->styling[16][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_COMMENTLINEDOC, types[GEANY_FILETYPES_C]->styling[16][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_COMMENTLINEDOC, types[GEANY_FILETYPES_C]->styling[16][2]); SSM(sci, SCI_STYLESETITALIC, SCE_C_COMMENTLINEDOC, TRUE); SSM(sci, SCI_STYLESETFORE, SCE_C_COMMENTDOCKEYWORD, types[GEANY_FILETYPES_C]->styling[17][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_COMMENTDOCKEYWORD, types[GEANY_FILETYPES_C]->styling[17][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_COMMENTDOCKEYWORD, types[GEANY_FILETYPES_C]->styling[17][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_COMMENTDOCKEYWORDERROR, 0x0000ff); SSM(sci, SCI_STYLESETBACK, SCE_C_COMMENTDOCKEYWORDERROR, 0xFFFFFF); SSM(sci, SCI_STYLESETITALIC, SCE_C_COMMENTDOCKEYWORDERROR, TRUE); // is used for local structs and typedefs SSM(sci, SCI_STYLESETFORE, SCE_C_GLOBALCLASS, types[GEANY_FILETYPES_C]->styling[18][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_GLOBALCLASS, types[GEANY_FILETYPES_C]->styling[18][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_GLOBALCLASS, types[GEANY_FILETYPES_C]->styling[18][2]); SSM(sci, SCI_SETWHITESPACEFORE, 1, 0xc0c0c0); // I dont like/need folding //SSM (sci, SCI_SETPROPERTY, (sptr_t) "fold.preprocessor", (sptr_t) "1"); //SSM (sci, SCI_SETPROPERTY, (sptr_t) "fold.at.else", (sptr_t) "1"); // enable folding for retrieval of current function (utils_get_current_tag) SSM(sci, SCI_SETPROPERTY, (sptr_t) "fold", (sptr_t) "1"); SSM(sci, SCI_SETPROPERTY, (sptr_t) "styling.within.preprocessor", (sptr_t) "1"); SSM(sci, SCI_SETPROPERTY, (sptr_t) "file.patterns.cpp", (sptr_t) "*.cpp;*.cxx;*.cc"); SSM(sci, SCI_SETPROPERTY, (sptr_t) "preprocessor.symbol.$(file.patterns.cpp)", (sptr_t) "#"); SSM(sci, SCI_SETPROPERTY, (sptr_t) "preprocessor.start.$(file.patterns.cpp)", (sptr_t) "if ifdef ifndef"); SSM(sci, SCI_SETPROPERTY, (sptr_t) "preprocessor.middle.$(file.patterns.cpp)", (sptr_t) "else elif"); SSM(sci, SCI_SETPROPERTY, (sptr_t) "preprocessor.end.$(file.patterns.cpp)", (sptr_t) "endif"); //SSM(sci, SCI_SETPROPERTY, (sptr_t) "statement.indent.$(file.patterns.cpp)", (sptr_t) "5 case catch class default do else for if private protected public struct try union while switch"); //SSM(sci, SCI_SETPROPERTY, (sptr_t) "statement.indent.$(file.patterns.header)", (sptr_t) "5 case catch class default do else for if private protected public struct try union while switch"); //SSM(sci, SCI_SETPROPERTY, (sptr_t) "statement.indent.$(file.patterns.c)", (sptr_t) "5 case do else for if struct union while switch"); } void styleset_pascal_init(void) { GKeyFile *config = g_key_file_new(); style_set_load_file(config, GEANY_DATA_DIR "/filetypes.pascal", G_KEY_FILE_KEEP_COMMENTS, NULL); types[GEANY_FILETYPES_PASCAL] = g_new(style_set, 1); styleset_get_hex(config, "styling", "default", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[0]); styleset_get_hex(config, "styling", "comment", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[1]); styleset_get_hex(config, "styling", "number", "0x007F00", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[2]); styleset_get_hex(config, "styling", "word", "0x991111", "0xffffff", "true", types[GEANY_FILETYPES_PASCAL]->styling[3]); styleset_get_hex(config, "styling", "string", "0x1E90FF", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[4]); styleset_get_hex(config, "styling", "character", "0x004040", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[5]); styleset_get_hex(config, "styling", "preprocessor", "0x7F7F00", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[6]); styleset_get_hex(config, "styling", "operator", "0x101030", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[7]); styleset_get_hex(config, "styling", "identifier", "0x100000", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[8]); styleset_get_hex(config, "styling", "regex", "0x13631B", "0xffffff", "false", types[GEANY_FILETYPES_PASCAL]->styling[9]); types[GEANY_FILETYPES_PASCAL]->keywords = g_new(gchar*, 2); types[GEANY_FILETYPES_PASCAL]->keywords[0] = styleset_get_string(config, "keywords", "primary"); if (types[GEANY_FILETYPES_PASCAL]->keywords[0] == NULL) types[GEANY_FILETYPES_PASCAL]->keywords[0] = g_strdup("word integer char string byte real \ for to do until repeat program if uses then else case var begin end \ asm unit interface implementation procedure function object try class"); types[GEANY_FILETYPES_PASCAL]->keywords[1] = NULL; g_key_file_free(config); } void styleset_pascal(ScintillaObject *sci) { if (types[GEANY_FILETYPES_PASCAL] == NULL) styleset_pascal_init(); styleset_common(sci, 5); // enable folding for retrieval of current function (utils_get_current_tag) SSM (sci, SCI_SETPROPERTY, (sptr_t) "fold", (sptr_t) "1"); SSM (sci, SCI_SETWORDCHARS, 0, (sptr_t) GEANY_WORDCHARS); SSM (sci, SCI_AUTOCSETMAXHEIGHT, 8, 0); SSM (sci, SCI_SETLEXER, SCLEX_PASCAL, 0); SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) types[GEANY_FILETYPES_PASCAL]->keywords[0]); SSM(sci, SCI_STYLESETFORE, SCE_C_DEFAULT, types[GEANY_FILETYPES_PASCAL]->styling[0][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_DEFAULT, types[GEANY_FILETYPES_PASCAL]->styling[0][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_DEFAULT, types[GEANY_FILETYPES_PASCAL]->styling[0][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_COMMENT, types[GEANY_FILETYPES_PASCAL]->styling[1][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_COMMENT, types[GEANY_FILETYPES_PASCAL]->styling[1][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_COMMENT, types[GEANY_FILETYPES_PASCAL]->styling[1][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_NUMBER, types[GEANY_FILETYPES_PASCAL]->styling[2][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_NUMBER, types[GEANY_FILETYPES_PASCAL]->styling[2][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_NUMBER, types[GEANY_FILETYPES_PASCAL]->styling[2][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_WORD, types[GEANY_FILETYPES_PASCAL]->styling[3][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_WORD, types[GEANY_FILETYPES_PASCAL]->styling[3][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_WORD, types[GEANY_FILETYPES_PASCAL]->styling[3][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_STRING, types[GEANY_FILETYPES_PASCAL]->styling[4][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_STRING, types[GEANY_FILETYPES_PASCAL]->styling[4][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_STRING, types[GEANY_FILETYPES_PASCAL]->styling[4][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_CHARACTER, types[GEANY_FILETYPES_PASCAL]->styling[5][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_CHARACTER, types[GEANY_FILETYPES_PASCAL]->styling[5][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_CHARACTER, types[GEANY_FILETYPES_PASCAL]->styling[5][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_PREPROCESSOR, types[GEANY_FILETYPES_PASCAL]->styling[6][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_PREPROCESSOR, types[GEANY_FILETYPES_PASCAL]->styling[6][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_PREPROCESSOR, types[GEANY_FILETYPES_PASCAL]->styling[6][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_OPERATOR, types[GEANY_FILETYPES_PASCAL]->styling[7][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_OPERATOR, types[GEANY_FILETYPES_PASCAL]->styling[7][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_OPERATOR, types[GEANY_FILETYPES_PASCAL]->styling[7][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_IDENTIFIER, types[GEANY_FILETYPES_PASCAL]->styling[8][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_IDENTIFIER, types[GEANY_FILETYPES_PASCAL]->styling[8][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_IDENTIFIER, types[GEANY_FILETYPES_PASCAL]->styling[8][2]); SSM(sci, SCI_STYLESETFORE, SCE_C_REGEX, types[GEANY_FILETYPES_PASCAL]->styling[9][0]); SSM(sci, SCI_STYLESETBACK, SCE_C_REGEX, types[GEANY_FILETYPES_PASCAL]->styling[9][1]); SSM(sci, SCI_STYLESETBOLD, SCE_C_REGEX, types[GEANY_FILETYPES_PASCAL]->styling[9][2]); SSM(sci, SCI_SETWHITESPACEFORE, 1, 0xc0c0c0); //SSM(sci, SCI_SETPROPERTY, (sptr_t) "styling.within.preprocessor", (sptr_t) "1"); } void styleset_makefile_init(void) { GKeyFile *config = g_key_file_new(); style_set_load_file(config, GEANY_DATA_DIR "/filetypes.makefile", G_KEY_FILE_KEEP_COMMENTS, NULL); types[GEANY_FILETYPES_MAKE] = g_new(style_set, 1); styleset_get_hex(config, "styling", "default", "0xFF0000", "0xffffff", "false", types[GEANY_FILETYPES_MAKE]->styling[0]); styleset_get_hex(config, "styling", "comment", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_MAKE]->styling[1]); styleset_get_hex(config, "styling", "preprocessor", "0x7F7F00", "0xffffff", "false", types[GEANY_FILETYPES_MAKE]->styling[2]); styleset_get_hex(config, "styling", "identifier", "0x007F00", "0xffffff", "false", types[GEANY_FILETYPES_MAKE]->styling[3]); styleset_get_hex(config, "styling", "operator", "0x101030", "0xffffff", "false", types[GEANY_FILETYPES_MAKE]->styling[4]); styleset_get_hex(config, "styling", "target", "0xff0000", "0xffffff", "false", types[GEANY_FILETYPES_MAKE]->styling[5]); styleset_get_hex(config, "styling", "ideol", "0x008000", "0xffffff", "false", types[GEANY_FILETYPES_MAKE]->styling[6]); types[GEANY_FILETYPES_MAKE]->keywords = NULL; g_key_file_free(config); } void styleset_makefile(ScintillaObject *sci) { if (types[GEANY_FILETYPES_MAKE] == NULL) styleset_makefile_init(); styleset_common(sci, 5); SSM (sci, SCI_SETLEXER, SCLEX_MAKEFILE, 0); SSM(sci, SCI_STYLESETFORE, SCE_MAKE_DEFAULT, types[GEANY_FILETYPES_MAKE]->styling[0][0]); SSM(sci, SCI_STYLESETBACK, SCE_MAKE_DEFAULT, types[GEANY_FILETYPES_MAKE]->styling[0][1]); SSM(sci, SCI_STYLESETBOLD, SCE_MAKE_DEFAULT, types[GEANY_FILETYPES_MAKE]->styling[0][2]); SSM(sci, SCI_STYLESETFORE, SCE_MAKE_COMMENT, types[GEANY_FILETYPES_MAKE]->styling[1][0]); SSM(sci, SCI_STYLESETBACK, SCE_MAKE_COMMENT, types[GEANY_FILETYPES_MAKE]->styling[1][1]); SSM(sci, SCI_STYLESETBOLD, SCE_MAKE_COMMENT, types[GEANY_FILETYPES_MAKE]->styling[1][2]); SSM(sci, SCI_STYLESETFORE, SCE_MAKE_PREPROCESSOR, types[GEANY_FILETYPES_MAKE]->styling[2][0]); SSM(sci, SCI_STYLESETBACK, SCE_MAKE_PREPROCESSOR, types[GEANY_FILETYPES_MAKE]->styling[2][1]); SSM(sci, SCI_STYLESETBOLD, SCE_MAKE_PREPROCESSOR, types[GEANY_FILETYPES_MAKE]->styling[2][2]); SSM(sci, SCI_STYLESETFORE, SCE_MAKE_IDENTIFIER, types[GEANY_FILETYPES_MAKE]->styling[3][0]); SSM(sci, SCI_STYLESETBACK, SCE_MAKE_IDENTIFIER, types[GEANY_FILETYPES_MAKE]->styling[3][1]); SSM(sci, SCI_STYLESETBOLD, SCE_MAKE_IDENTIFIER, types[GEANY_FILETYPES_MAKE]->styling[3][2]); SSM(sci, SCI_STYLESETFORE, SCE_MAKE_OPERATOR, types[GEANY_FILETYPES_MAKE]->styling[4][0]); SSM(sci, SCI_STYLESETBACK, SCE_MAKE_OPERATOR, types[GEANY_FILETYPES_MAKE]->styling[4][1]); SSM(sci, SCI_STYLESETBOLD, SCE_MAKE_OPERATOR, types[GEANY_FILETYPES_MAKE]->styling[4][2]); SSM(sci, SCI_STYLESETFORE, SCE_MAKE_TARGET, types[GEANY_FILETYPES_MAKE]->styling[5][0]); SSM(sci, SCI_STYLESETBACK, SCE_MAKE_TARGET, types[GEANY_FILETYPES_MAKE]->styling[5][1]); SSM(sci, SCI_STYLESETBOLD, SCE_MAKE_TARGET, types[GEANY_FILETYPES_MAKE]->styling[5][2]); SSM(sci, SCI_STYLESETFORE, SCE_MAKE_IDEOL, types[GEANY_FILETYPES_MAKE]->styling[6][0]); SSM(sci, SCI_STYLESETBACK, SCE_MAKE_IDEOL, types[GEANY_FILETYPES_MAKE]->styling[6][1]); SSM(sci, SCI_STYLESETBOLD, SCE_MAKE_IDEOL, types[GEANY_FILETYPES_MAKE]->styling[6][2]); } void styleset_tex_init(void) { GKeyFile *config = g_key_file_new(); style_set_load_file(config, GEANY_DATA_DIR "/filetypes.tex", G_KEY_FILE_KEEP_COMMENTS, NULL); types[GEANY_FILETYPES_TEX] = g_new(style_set, 1); styleset_get_hex(config, "styling", "default", "0xFF0000", "0xffffff", "false", types[GEANY_FILETYPES_TEX]->styling[0]); styleset_get_hex(config, "styling", "command", "0x0000ff", "0xffffff", "true", types[GEANY_FILETYPES_TEX]->styling[1]); styleset_get_hex(config, "styling", "tag", "0x7F7F00", "0xffffff", "true", types[GEANY_FILETYPES_TEX]->styling[2]); styleset_get_hex(config, "styling", "math", "0x007F00", "0xffffff", "false", types[GEANY_FILETYPES_TEX]->styling[3]); styleset_get_hex(config, "styling", "comment", "0x007F00", "0xffffff", "false", types[GEANY_FILETYPES_TEX]->styling[4]); types[GEANY_FILETYPES_TEX]->keywords = g_new(gchar*, 2); types[GEANY_FILETYPES_TEX]->keywords[0] = styleset_get_string(config, "keywords", "primary"); if (types[GEANY_FILETYPES_TEX]->keywords[0] == NULL) types[GEANY_FILETYPES_TEX]->keywords[0] = g_strdup("section subsection begin item"); types[GEANY_FILETYPES_TEX]->keywords[1] = NULL; g_key_file_free(config); } void styleset_tex(ScintillaObject *sci) { if (types[GEANY_FILETYPES_TEX] == NULL) styleset_tex_init(); styleset_common(sci, 5); SSM (sci, SCI_SETLEXER, SCLEX_LATEX, 0); SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) types[GEANY_FILETYPES_TEX]->keywords[0]); SSM(sci, SCI_STYLESETFORE, SCE_L_DEFAULT, types[GEANY_FILETYPES_TEX]->styling[0][0]); SSM(sci, SCI_STYLESETBACK, SCE_L_DEFAULT, types[GEANY_FILETYPES_TEX]->styling[0][1]); SSM(sci, SCI_STYLESETBOLD, SCE_L_DEFAULT, types[GEANY_FILETYPES_TEX]->styling[0][2]); SSM(sci, SCI_STYLESETFORE, SCE_L_COMMAND, types[GEANY_FILETYPES_TEX]->styling[1][0]); SSM(sci, SCI_STYLESETBACK, SCE_L_COMMAND, types[GEANY_FILETYPES_TEX]->styling[1][1]); SSM(sci, SCI_STYLESETBOLD, SCE_L_COMMAND, types[GEANY_FILETYPES_TEX]->styling[1][2]); SSM(sci, SCI_STYLESETFORE, SCE_L_TAG, types[GEANY_FILETYPES_TEX]->styling[2][0]); SSM(sci, SCI_STYLESETBACK, SCE_L_TAG, types[GEANY_FILETYPES_TEX]->styling[2][1]); SSM(sci, SCI_STYLESETBOLD, SCE_L_TAG, types[GEANY_FILETYPES_TEX]->styling[2][2]); SSM(sci, SCI_STYLESETFORE, SCE_L_MATH, types[GEANY_FILETYPES_TEX]->styling[3][0]); SSM(sci, SCI_STYLESETBACK, SCE_L_MATH, types[GEANY_FILETYPES_TEX]->styling[3][1]); SSM(sci, SCI_STYLESETBOLD, SCE_L_MATH, types[GEANY_FILETYPES_TEX]->styling[3][2]); SSM(sci, SCI_STYLESETFORE, SCE_L_COMMENT, types[GEANY_FILETYPES_TEX]->styling[4][0]); SSM(sci, SCI_STYLESETBACK, SCE_L_COMMENT, types[GEANY_FILETYPES_TEX]->styling[4][1]); SSM(sci, SCI_STYLESETBOLD, SCE_L_COMMENT, types[GEANY_FILETYPES_TEX]->styling[4][2]); SSM(sci, SCI_STYLESETITALIC, SCE_L_COMMENT, TRUE); } void styleset_php(ScintillaObject *sci) { styleset_common(sci, 7); // enable folding for retrieval of current function (utils_get_current_tag) SSM (sci, SCI_SETPROPERTY, (sptr_t) "fold", (sptr_t) "1"); SSM (sci, SCI_SETPROPERTY, (sptr_t) "phpscript.mode", (sptr_t) "1"); SSM (sci, SCI_SETLEXER, SCLEX_HTML, 0); // DWELL notification for URL highlighting SSM(sci, SCI_SETMOUSEDWELLTIME, 500, 0); // use the same colouring for HTML; XML and so on styleset_markup(sci); } void styleset_markup_init(void) { GKeyFile *config = g_key_file_new(); style_set_load_file(config, GEANY_DATA_DIR "/filetypes.markup", G_KEY_FILE_KEEP_COMMENTS, NULL); types[GEANY_FILETYPES_XML] = g_new(style_set, 1); styleset_get_hex(config, "styling", "html_default", "0x000000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[0]); styleset_get_hex(config, "styling", "html_tag", "0x990000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[1]); styleset_get_hex(config, "styling", "html_tagunknown", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[2]); styleset_get_hex(config, "styling", "html_attribute", "0x007F00", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[3]); styleset_get_hex(config, "styling", "html_attributeunknown", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[4]); styleset_get_hex(config, "styling", "html_number", "0x800080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[5]); styleset_get_hex(config, "styling", "html_doublestring", "0x1E90FF", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[6]); styleset_get_hex(config, "styling", "html_singlestring", "0x1E90FF", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[7]); styleset_get_hex(config, "styling", "html_other", "0x800080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[8]); styleset_get_hex(config, "styling", "html_comment", "0x808080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[9]); styleset_get_hex(config, "styling", "html_entity", "0x800080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[10]); styleset_get_hex(config, "styling", "html_tagend", "0x800000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[11]); styleset_get_hex(config, "styling", "html_xmlstart", "0x990000", "0xf0f0f0", "false", types[GEANY_FILETYPES_XML]->styling[12]); styleset_get_hex(config, "styling", "html_xmlend", "0x990000", "0xf0f0f0", "false", types[GEANY_FILETYPES_XML]->styling[13]); styleset_get_hex(config, "styling", "html_script", "0x800000", "0xf0f0f0", "false", types[GEANY_FILETYPES_XML]->styling[14]); styleset_get_hex(config, "styling", "html_asp", "0x4f4f00", "0xf0f0f0", "false", types[GEANY_FILETYPES_XML]->styling[15]); styleset_get_hex(config, "styling", "html_aspat", "0x4f4f00", "0xf0f0f0", "false", types[GEANY_FILETYPES_XML]->styling[16]); styleset_get_hex(config, "styling", "html_cdata", "0x990066", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[17]); styleset_get_hex(config, "styling", "html_question", "0xff0000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[18]); styleset_get_hex(config, "styling", "html_value", "0x990066", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[19]); styleset_get_hex(config, "styling", "html_xccomment", "0x990066", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[20]); styleset_get_hex(config, "styling", "sgml_default", "0x000000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[21]); styleset_get_hex(config, "styling", "sgml_comment", "0x808080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[22]); styleset_get_hex(config, "styling", "sgml_special", "0x007F00", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[23]); styleset_get_hex(config, "styling", "sgml_command", "0x991111", "0xffffff", "true", types[GEANY_FILETYPES_XML]->styling[24]); styleset_get_hex(config, "styling", "sgml_doublestring", "0x1E90FF", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[25]); styleset_get_hex(config, "styling", "sgml_simplestring", "0x004040", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[26]); styleset_get_hex(config, "styling", "sgml_1st_param", "0x804040", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[27]); styleset_get_hex(config, "styling", "sgml_entity", "0x101030", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[28]); styleset_get_hex(config, "styling", "sgml_block_default", "0x100000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[29]); styleset_get_hex(config, "styling", "sgml_1st_param_comment", "0x906040", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[30]); styleset_get_hex(config, "styling", "sgml_error", "0x0000ff", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[31]); styleset_get_hex(config, "styling", "php_default", "0x000000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[32]); styleset_get_hex(config, "styling", "php_simplestring", "0x008000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[33]); styleset_get_hex(config, "styling", "php_hstring", "0x008000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[34]); styleset_get_hex(config, "styling", "php_number", "0x006060", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[35]); styleset_get_hex(config, "styling", "php_word", "0x990000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[36]); styleset_get_hex(config, "styling", "php_variable", "0x00007F", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[37]); styleset_get_hex(config, "styling", "php_comment", "0x808080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[38]); styleset_get_hex(config, "styling", "php_commentline", "0x808080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[39]); styleset_get_hex(config, "styling", "php_operator", "0x602010", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[40]); styleset_get_hex(config, "styling", "php_hstring_variable", "0x601010", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[41]); styleset_get_hex(config, "styling", "php_complex_variable", "0x105010", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[42]); styleset_get_hex(config, "styling", "jscript_start", "0x808000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[43]); styleset_get_hex(config, "styling", "jscript_default", "0x000000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[44]); styleset_get_hex(config, "styling", "jscript_comment", "0x222222", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[45]); styleset_get_hex(config, "styling", "jscript_commentline", "0x808080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[46]); styleset_get_hex(config, "styling", "jscript_commentdoc", "0x808080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[47]); styleset_get_hex(config, "styling", "jscript_number", "0x606000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[48]); styleset_get_hex(config, "styling", "jscript_word", "0xff0000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[49]); styleset_get_hex(config, "styling", "jscript_keyword", "0x001050", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[50]); styleset_get_hex(config, "styling", "jscript_doublestring", "0x080080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[51]); styleset_get_hex(config, "styling", "jscript_singlestring", "0x080080", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[52]); styleset_get_hex(config, "styling", "jscript_symbols", "0x501000", "0xffffff", "false", types[GEANY_FILETYPES_XML]->styling[53]); styleset_get_hex(config, "styling", "jscript_stringeol", "0x000000", "0xe0c0e0", "false", types[GEANY_FILETYPES_XML]->styling[54]); types[GEANY_FILETYPES_XML]->keywords = g_new(gchar*, 7); types[GEANY_FILETYPES_XML]->keywords[0] = styleset_get_string(config, "keywords", "html"); if (types[GEANY_FILETYPES_XML]->keywords[0] == NULL) types[GEANY_FILETYPES_XML]->keywords[0] = g_strdup("a abbr acronym address applet area b base basefont bdo big blockquote body br button caption center cite code col colgroup dd del dfn dir div dl dt em embed fieldset font form frame frameset h1 h2 h3 h4 h5 h6 head hr html i iframe img input ins isindex kbd label legend li link map menu meta noframes noscript object ol optgroup option p param pre q quality s samp script select small span strike strong style sub sup table tbody td textarea tfoot th thead title tr tt u ul var xmlns leftmargin topmargin abbr accept-charset accept accesskey action align alink alt archive axis background bgcolor border cellpadding cellspacing char charoff charset checked cite class classid clear codebase codetype color cols colspan compact content coords data datafld dataformatas datapagesize datasrc datetime declare defer dir disabled enctype face for frame frameborder selected headers height href hreflang hspace http-equiv id ismap label lang language link longdesc marginwidth marginheight maxlength media framespacing method multiple name nohref noresize noshade nowrap object onblur onchange onclick ondblclick onfocus onkeydown onkeypress onkeyup onload onmousedown onmousemove onmouseover onmouseout onmouseup onreset onselect onsubmit onunload profile prompt pluginspage readonly rel rev rows rowspan rules scheme scope scrolling shape size span src standby start style summary tabindex target text title type usemap valign value valuetype version vlink vspace width text password checkbox radio submit reset file hidden image public doctype xml"); types[GEANY_FILETYPES_XML]->keywords[1] = styleset_get_string(config, "keywords", "javascript"); if (types[GEANY_FILETYPES_XML]->keywords[1] == NULL) types[GEANY_FILETYPES_XML]->keywords[1] = g_strdup("break this for while null else var false void new delete typeof if in continue true function with return case super extends do const try debugger catch switch finally enum export default class throw import length concat join pop push reverse shift slice splice sort unshift Date Infinity NaN undefined escape eval isFinite isNaN Number parseFloat parseInt string unescape Math abs acos asin atan atan2 ceil cos exp floor log max min pow random round sin sqrt tan MAX_VALUE MIN_VALUE NEGATIVE_INFINITY POSITIVE_INFINITY toString valueOf String length anchor big bold charAt charCodeAt concat fixed fontcolor fontsize fromCharCode indexOf italics lastIndexOf link slice small split strike sub substr substring sup toLowerCase toUpperCase"); types[GEANY_FILETYPES_XML]->keywords[2] = styleset_get_string(config, "keywords", "vbscript"); if (types[GEANY_FILETYPES_XML]->keywords[2] == NULL) types[GEANY_FILETYPES_XML]->keywords[2] = g_strdup("and as byref byval case call const continue dim do each else elseif end error exit false for function global goto if in loop me new next not nothing on optional or private public redim rem resume select set sub then to true type while with boolean byte currency date double integer long object single string type variant"); types[GEANY_FILETYPES_XML]->keywords[3] = styleset_get_string(config, "keywords", "python"); if (types[GEANY_FILETYPES_XML]->keywords[3] == NULL) types[GEANY_FILETYPES_XML]->keywords[3] = g_strdup("and assert break class continue complex def del elif else except exec finally for from global if import in inherit is int lambda not or pass print raise return tuple try unicode while yield long float str list"); types[GEANY_FILETYPES_XML]->keywords[4] = styleset_get_string(config, "keywords", "php"); if (types[GEANY_FILETYPES_XML]->keywords[4] == NULL) types[GEANY_FILETYPES_XML]->keywords[4] = g_strdup("and or xor FILE exception LINE array as break case class const continue declare default die do echo else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval exit extends for foreach function global if include include_once isset list new print require require_once return static switch unset use var while FUNCTION CLASS METHOD final php_user_filter interface implements extends public private protected abstract clone try catch throw cfunction old_function this"); types[GEANY_FILETYPES_XML]->keywords[5] = styleset_get_string(config, "keywords", "sgml"); if (types[GEANY_FILETYPES_XML]->keywords[5] == NULL) types[GEANY_FILETYPES_XML]->keywords[5] = g_strdup("ELEMENT DOCTYPE ATTLIST ENTITY NOTATION"); types[GEANY_FILETYPES_XML]->keywords[6] = NULL; g_key_file_free(config); } void styleset_markup(ScintillaObject *sci) { if (types[GEANY_FILETYPES_XML] == NULL) styleset_markup_init(); SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) types[GEANY_FILETYPES_XML]->keywords[0]); SSM(sci, SCI_SETKEYWORDS, 1, (sptr_t) types[GEANY_FILETYPES_XML]->keywords[1]); SSM(sci, SCI_SETKEYWORDS, 2, (sptr_t) types[GEANY_FILETYPES_XML]->keywords[2]); SSM(sci, SCI_SETKEYWORDS, 3, (sptr_t) types[GEANY_FILETYPES_XML]->keywords[3]); SSM(sci, SCI_SETKEYWORDS, 4, (sptr_t) types[GEANY_FILETYPES_XML]->keywords[4]); SSM(sci, SCI_SETKEYWORDS, 5, (sptr_t) types[GEANY_FILETYPES_XML]->keywords[5]); SSM(sci, SCI_SETWHITESPACEFORE, 1, 0xc0c0c0); // hotspotting, nice thing SSM(sci, SCI_SETHOTSPOTACTIVEFORE, 1, 0xff0000); SSM(sci, SCI_SETHOTSPOTACTIVEUNDERLINE, 1, 0); SSM(sci, SCI_SETHOTSPOTSINGLELINE, 1, 0); SSM(sci, SCI_STYLESETHOTSPOT, SCE_H_QUESTION, 1); SSM(sci, SCI_STYLESETFORE, SCE_H_DEFAULT, types[GEANY_FILETYPES_XML]->styling[0][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_DEFAULT, types[GEANY_FILETYPES_XML]->styling[0][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_DEFAULT, types[GEANY_FILETYPES_XML]->styling[0][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_TAG, types[GEANY_FILETYPES_XML]->styling[1][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_TAG, types[GEANY_FILETYPES_XML]->styling[1][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_TAG, types[GEANY_FILETYPES_XML]->styling[1][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_TAGUNKNOWN, types[GEANY_FILETYPES_XML]->styling[2][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_TAGUNKNOWN, types[GEANY_FILETYPES_XML]->styling[2][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_TAGUNKNOWN, types[GEANY_FILETYPES_XML]->styling[2][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_ATTRIBUTE, types[GEANY_FILETYPES_XML]->styling[3][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_ATTRIBUTE, types[GEANY_FILETYPES_XML]->styling[3][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_ATTRIBUTE, types[GEANY_FILETYPES_XML]->styling[3][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_ATTRIBUTEUNKNOWN, types[GEANY_FILETYPES_XML]->styling[4][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_ATTRIBUTEUNKNOWN, types[GEANY_FILETYPES_XML]->styling[4][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_ATTRIBUTEUNKNOWN, types[GEANY_FILETYPES_XML]->styling[4][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_NUMBER, types[GEANY_FILETYPES_XML]->styling[5][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_NUMBER, types[GEANY_FILETYPES_XML]->styling[5][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_NUMBER, types[GEANY_FILETYPES_XML]->styling[5][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_DOUBLESTRING, types[GEANY_FILETYPES_XML]->styling[6][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_DOUBLESTRING, types[GEANY_FILETYPES_XML]->styling[6][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_DOUBLESTRING, types[GEANY_FILETYPES_XML]->styling[6][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_SINGLESTRING, types[GEANY_FILETYPES_XML]->styling[7][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_SINGLESTRING, types[GEANY_FILETYPES_XML]->styling[7][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_SINGLESTRING, types[GEANY_FILETYPES_XML]->styling[7][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_OTHER, types[GEANY_FILETYPES_XML]->styling[8][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_OTHER, types[GEANY_FILETYPES_XML]->styling[8][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_OTHER, types[GEANY_FILETYPES_XML]->styling[8][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_COMMENT, types[GEANY_FILETYPES_XML]->styling[9][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_COMMENT, types[GEANY_FILETYPES_XML]->styling[9][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_COMMENT, types[GEANY_FILETYPES_XML]->styling[9][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_ENTITY, types[GEANY_FILETYPES_XML]->styling[10][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_ENTITY, types[GEANY_FILETYPES_XML]->styling[10][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_ENTITY, types[GEANY_FILETYPES_XML]->styling[10][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_TAGEND, types[GEANY_FILETYPES_XML]->styling[11][0]); SSM(sci, SCI_STYLESETBACK, SCE_H_TAGEND, types[GEANY_FILETYPES_XML]->styling[11][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_TAGEND, types[GEANY_FILETYPES_XML]->styling[11][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_XMLSTART, types[GEANY_FILETYPES_XML]->styling[12][0]);// styling[12][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_XMLSTART, types[GEANY_FILETYPES_XML]->styling[12][2]); SSM(sci, SCI_STYLESETEOLFILLED, SCE_H_XMLSTART, 1); SSM(sci, SCI_STYLESETFORE, SCE_H_XMLEND, types[GEANY_FILETYPES_XML]->styling[13][0]);// ?> SSM(sci, SCI_STYLESETBACK, SCE_H_XMLEND, types[GEANY_FILETYPES_XML]->styling[13][1]); SSM(sci, SCI_STYLESETBOLD, SCE_H_XMLEND, types[GEANY_FILETYPES_XML]->styling[13][2]); SSM(sci, SCI_STYLESETFORE, SCE_H_SCRIPT, types[GEANY_FILETYPES_XML]->styling[14][0]);//