Revision: 2103 http://geany.svn.sourceforge.net/geany/?rev=2103&view=rev Author: eht16 Date: 2007-12-16 03:27:59 -0800 (Sun, 16 Dec 2007)
Log Message: ----------- Use pluginmacros.h (for classbuilder and htmlchars plugins). Add highlighting_get_style(). Add highlighting_get_style() to the plugin API. Rename DocumentFuncs field in GeanyData struct to avoid name clashes.
Modified Paths: -------------- trunk/ChangeLog trunk/plugins/classbuilder.c trunk/plugins/htmlchars.c trunk/plugins/pluginmacros.h trunk/src/highlighting.c trunk/src/highlighting.h trunk/src/plugindata.h trunk/src/plugins.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/ChangeLog 2007-12-16 11:27:59 UTC (rev 2103) @@ -3,6 +3,13 @@ * geany.desktop.in.in: Apply patch from Ubuntu package to match FD.o standards (thanks to Siegfried-Angel Gevatter Pujals). + * plugins/classbuilder.c, plugins/htmlchars.c: + Use pluginmacros.h. + * src/highlighting.c, src/highlighting.h: + Add highlighting_get_style(). + * plugins/pluginmacros.h, src/plugindata.h, src/plugins.c: + Add highlighting_get_style() to the plugin API. + Rename DocumentFuncs field in GeanyData struct to avoid name clashes.
2007-12-14 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/plugins/classbuilder.c =================================================================== --- trunk/plugins/classbuilder.c 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/plugins/classbuilder.c 2007-12-16 11:27:59 UTC (rev 2103) @@ -30,20 +30,13 @@ #include "support.h" #include "filetypes.h" #include "document.h" +#include "pluginmacros.h"
PluginFields *plugin_fields; GeanyData *geany_data;
-#define doc_array geany_data->doc_array -// can't use document as a macro because it's currently a typename -#define documents geany_data->document -#define scintilla geany_data->sci -#define templates geany_data->templates -#define utils geany_data->utils -#define ui geany_data->ui
- VERSION_CHECK(7)
PLUGIN_INFO(_("Class Builder"), _("Creates source files for new class types."), VERSION, @@ -360,7 +353,7 @@ cc_dlg->class_type = type;
cc_dlg->dialog = gtk_dialog_new_with_buttons(_("Create Class"), - GTK_WINDOW(geany_data->app->window), + GTK_WINDOW(app->window), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK,
Modified: trunk/plugins/htmlchars.c =================================================================== --- trunk/plugins/htmlchars.c 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/plugins/htmlchars.c 2007-12-16 11:27:59 UTC (rev 2103) @@ -28,18 +28,13 @@ #include "support.h" #include "plugindata.h" #include "document.h" +#include "pluginmacros.h"
PluginFields *plugin_fields; GeanyData *geany_data;
-#define doc_array geany_data->doc_array -// can't use document as a macro because it's currently a typename -#define documents geany_data->document -#define scintilla geany_data->sci -#define ui geany_data->ui
- VERSION_CHECK(7)
PLUGIN_INFO(_("HTML Characters"), _("Inserts HTML character entities like '&'."), VERSION, @@ -76,7 +71,7 @@ GtkWidget *swin, *vbox, *label;
sc_dialog = gtk_dialog_new_with_buttons( - _("Special Characters"), GTK_WINDOW(geany_data->app->window), + _("Special Characters"), GTK_WINDOW(app->window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, _("_Insert"), GTK_RESPONSE_OK, NULL); vbox = ui->dialog_vbox_new(GTK_DIALOG(sc_dialog));
Modified: trunk/plugins/pluginmacros.h =================================================================== --- trunk/plugins/pluginmacros.h 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/plugins/pluginmacros.h 2007-12-16 11:27:59 UTC (rev 2103) @@ -27,22 +27,23 @@ #ifndef PLUGINMACROS_H #define PLUGINMACROS_H
-#define app geany_data->app -#define doc_array geany_data->doc_array -#define prefs geany_data->prefs -#define project app->project +#define app geany_data->app +#define doc_array geany_data->doc_array +#define prefs geany_data->prefs +#define project app->project
-#define dialogs geany_data->dialogs -#define documents geany_data->document // avoids conflict with document typedef -#define encodings geany_data->encoding // avoids conflict with document::encoding -#define keybindings geany_data->keybindings -#define msgwindow geany_data->msgwindow -#define scintilla geany_data->sci -#define search geany_data->search -#define support geany_data->support -#define templates geany_data->templates -#define tagmanager geany_data->tm // avoids conflict with "struct tm *t" -#define ui geany_data->ui -#define utils geany_data->utils +#define dialogs geany_data->dialogs +#define documents geany_data->documents // avoids conflict with document typedef +#define encodings geany_data->encoding // avoids conflict with document::encoding +#define highlighting geany_data->highlighting +#define keybindings geany_data->keybindings +#define msgwindow geany_data->msgwindow +#define scintilla geany_data->sci +#define search geany_data->search +#define support geany_data->support +#define templates geany_data->templates +#define tagmanager geany_data->tm // avoids conflict with "struct tm *t" +#define ui geany_data->ui +#define utils geany_data->utils
#endif
Modified: trunk/src/highlighting.c =================================================================== --- trunk/src/highlighting.c 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/src/highlighting.c 2007-12-16 11:27:59 UTC (rev 2103) @@ -46,17 +46,9 @@
typedef struct { - gint foreground; - gint background; - gboolean bold:1; - gboolean italic:1; -} Style; - -typedef struct -{ - Style *styling; // array of styles, NULL if not used or uninitialised - gchar **keywords; - gchar *wordchars; // NULL used for style sets with no styles + HighlightingStyle *styling; // array of styles, NULL if not used or uninitialised + gchar **keywords; + gchar *wordchars; // NULL used for style sets with no styles } StyleSet;
// each filetype has a styleset except GEANY_FILETYPE_ALL @@ -88,35 +80,27 @@
static struct { - Style styling[GCS_MAX]; - FoldingStyle folding_style; - gboolean invert_all; - gchar *wordchars; + HighlightingStyle styling[GCS_MAX]; + FoldingStyle folding_style; + gboolean invert_all; + gchar *wordchars; } common_style_set;
// used for default styles typedef struct { - gchar *name; - Style *style; + gchar *name; + HighlightingStyle *style; } StyleEntry;
static void new_style_array(gint file_type_id, gint styling_count) { - style_sets[file_type_id].styling = g_new0(Style, styling_count); + style_sets[file_type_id].styling = g_new0(HighlightingStyle, styling_count); }
-#if 0 -static Style *get_styling(gint file_type_id, gint styling_index) -{ - return &style_sets[file_type_id].styling[styling_index]; -} -#endif - - static void get_keyfile_keywords(GKeyFile *config, GKeyFile *configh, const gchar *section, const gchar *key, gint index, gint pos, const gchar *default_value) { @@ -174,7 +158,7 @@
static void get_keyfile_style(GKeyFile *config, GKeyFile *configh, - const gchar *key_name, const Style *default_style, Style *style) + const gchar *key_name, const HighlightingStyle *default_style, HighlightingStyle *style) { gchar **list; gsize len; @@ -208,7 +192,7 @@ static void get_keyfile_hex(GKeyFile *config, GKeyFile *configh, const gchar *section, const gchar *key, const gchar *foreground, const gchar *background, const gchar *bold, - Style *style) + HighlightingStyle *style) { gchar **list; gsize len; @@ -240,7 +224,7 @@
static void get_keyfile_int(GKeyFile *config, GKeyFile *configh, const gchar *section, const gchar *key, gint fdefault_val, gint sdefault_val, - Style *style) + HighlightingStyle *style) { gchar **list; gchar *end1, *end2; @@ -281,7 +265,7 @@
static void set_sci_style(ScintillaObject *sci, gint style, gint ft, gint styling_index) { - Style *style_ptr; + HighlightingStyle *style_ptr;
if (ft == GEANY_FILETYPES_ALL) style_ptr = &common_style_set.styling[styling_index]; @@ -379,7 +363,7 @@ "0xc0c0c0", "0xffffff", "true", &common_style_set.styling[GCS_WHITE_SPACE]); { // hack because get_keyfile_int uses a Style struct - Style tmp_style; + HighlightingStyle tmp_style; get_keyfile_int(config, config_home, "styling", "folding_style", 1, 1, &tmp_style); common_style_set.folding_style.marker = tmp_style.foreground; @@ -582,26 +566,26 @@ * Ideally these would be used as common styling for all compilable programming * languages (and perhaps partially used for scripting languages too). * Currently only used as default styling for C-like languages. */ -Style gsd_default = {0x000000, 0xffffff, FALSE, FALSE}; -Style gsd_comment = {0xd00000, 0xffffff, FALSE, FALSE}; -Style gsd_comment_doc = {0x3f5fbf, 0xffffff, TRUE, FALSE}; -Style gsd_number = {0x007f00, 0xffffff, FALSE, FALSE}; -Style gsd_reserved_word = {0x00007f, 0xffffff, TRUE, FALSE}; -Style gsd_system_word = {0x991111, 0xffffff, TRUE, FALSE}; -Style gsd_user_word = {0x0000d0, 0xffffff, TRUE, FALSE}; -Style gsd_string = {0xff901e, 0xffffff, FALSE, FALSE}; -Style gsd_pragma = {0x007f7f, 0xffffff, FALSE, FALSE}; -Style gsd_string_eol = {0x000000, 0xe0c0e0, FALSE, FALSE}; +HighlightingStyle gsd_default = {0x000000, 0xffffff, FALSE, FALSE}; +HighlightingStyle gsd_comment = {0xd00000, 0xffffff, FALSE, FALSE}; +HighlightingStyle gsd_comment_doc = {0x3f5fbf, 0xffffff, TRUE, FALSE}; +HighlightingStyle gsd_number = {0x007f00, 0xffffff, FALSE, FALSE}; +HighlightingStyle gsd_reserved_word = {0x00007f, 0xffffff, TRUE, FALSE}; +HighlightingStyle gsd_system_word = {0x991111, 0xffffff, TRUE, FALSE}; +HighlightingStyle gsd_user_word = {0x0000d0, 0xffffff, TRUE, FALSE}; +HighlightingStyle gsd_string = {0xff901e, 0xffffff, FALSE, FALSE}; +HighlightingStyle gsd_pragma = {0x007f7f, 0xffffff, FALSE, FALSE}; +HighlightingStyle gsd_string_eol = {0x000000, 0xe0c0e0, FALSE, FALSE};
// call new_style_array(filetype_idx, >= 20) before using this. static void styleset_c_like_init(GKeyFile *config, GKeyFile *config_home, gint filetype_idx) { - Style uuid = {0x404080, 0xffffff, FALSE, FALSE}; - Style operator = {0x301010, 0xffffff, FALSE, FALSE}; - Style verbatim = {0x301010, 0xffffff, FALSE, FALSE}; - Style regex = {0x105090, 0xffffff, FALSE, FALSE}; + HighlightingStyle uuid = {0x404080, 0xffffff, FALSE, FALSE}; + HighlightingStyle operator = {0x301010, 0xffffff, FALSE, FALSE}; + HighlightingStyle verbatim = {0x301010, 0xffffff, FALSE, FALSE}; + HighlightingStyle regex = {0x105090, 0xffffff, FALSE, FALSE};
StyleEntry entries[] = { @@ -3001,3 +2985,21 @@ styleset_case(GEANY_FILETYPES_ALL, none); } } + + +/* Retrieve a style style_id for the filetype ft_id. If the style was not already initialised + * (e.g. by by opening a file of this type), it will be initialised. The returned pointer is + * owned by Geany and must not be freed. + * style_id is a Scintilla lexer style, see scintilla/SciLexer.h */ +const HighlightingStyle *highlighting_get_style(gint ft_id, gint style_id) +{ + if (ft_id < 0 || ft_id > GEANY_MAX_FILE_TYPES) + return NULL; + + if (style_sets[ft_id].styling == NULL) + filetypes_load_config(ft_id); + + /// TODO style_id might not be the real array index (Scintilla styles are not always synced + /// with array indices) + return (const HighlightingStyle*) &style_sets[ft_id].styling[style_id]; +}
Modified: trunk/src/highlighting.h =================================================================== --- trunk/src/highlighting.h 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/src/highlighting.h 2007-12-16 11:27:59 UTC (rev 2103) @@ -29,10 +29,21 @@ #include "ScintillaWidget.h"
+typedef struct HighlightingStyle +{ + gint foreground; + gint background; + gboolean bold:1; + gboolean italic:1; +} HighlightingStyle; + + void highlighting_init_styles(gint filetype_idx, GKeyFile *config, GKeyFile *configh);
void highlighting_set_styles(ScintillaObject *sci, gint filetype_idx);
+const HighlightingStyle *highlighting_get_style(gint ft_id, gint style_id); + void highlighting_free_styles(void);
#endif
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/src/plugindata.h 2007-12-16 11:27:59 UTC (rev 2103) @@ -93,7 +93,7 @@
/* The API version should be incremented whenever any plugin data types below are * modified or appended to. */ -static const gint api_version = 34; +static const gint api_version = 35;
/* The ABI version should be incremented whenever existing fields in the plugin * data types below have to be changed or reordered. It should stay the same if fields @@ -184,18 +184,19 @@ struct EditorPrefs *editor_prefs; struct BuildInfo *build_info;
- struct DocumentFuncs *document; - struct ScintillaFuncs *sci; - struct TemplateFuncs *templates; - struct UtilsFuncs *utils; - struct UIUtilsFuncs *ui; - struct SupportFuncs *support; - struct DialogFuncs *dialogs; - struct MsgWinFuncs *msgwindow; - struct EncodingFuncs *encoding; - struct KeybindingFuncs *keybindings; - struct TagManagerFuncs *tm; - struct SearchFuncs *search; + struct DocumentFuncs *documents; + struct ScintillaFuncs *sci; + struct TemplateFuncs *templates; + struct UtilsFuncs *utils; + struct UIUtilsFuncs *ui; + struct SupportFuncs *support; + struct DialogFuncs *dialogs; + struct MsgWinFuncs *msgwindow; + struct EncodingFuncs *encoding; + struct KeybindingFuncs *keybindings; + struct TagManagerFuncs *tm; + struct SearchFuncs *search; + struct HighlightingFuncs *highlighting; } GeanyData;
@@ -205,7 +206,6 @@ /* For more info about these functions, see the main source code. * E.g. for GeanyData::document->new_file(), see document_new_file() in document.[hc]. */
-struct filetype;
typedef struct DocumentFuncs { @@ -338,6 +338,13 @@ KeybindingFuncs;
+typedef struct HighlightingFuncs +{ + const struct HighlightingStyle* (*get_style) (gint ft_id, gint style_id); +} +HighlightingFuncs; + + typedef struct SearchFuncs { void (*show_find_in_files_dialog) (const gchar *dir);
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2007-12-16 11:07:20 UTC (rev 2102) +++ trunk/src/plugins.c 2007-12-16 11:27:59 UTC (rev 2103) @@ -51,6 +51,7 @@ #include "build.h" #include "encodings.h" #include "search.h" +#include "highlighting.h"
void keybindings_cmd(gint cmd_id); // don't require keybindings.h enum in plugindata.h
@@ -188,7 +189,11 @@ &search_show_find_in_files_dialog };
+static HighlightingFuncs highlighting_funcs = { + &highlighting_get_style +};
+ static GeanyData geany_data = { NULL, NULL, @@ -210,6 +215,7 @@ &keybindings_funcs, &tagmanager_funcs, &search_funcs, + &highlighting_funcs };
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.