Revision: 2599 http://geany.svn.sourceforge.net/geany/?rev=2599&view=rev Author: ntrel Date: 2008-05-19 05:35:35 -0700 (Mon, 19 May 2008)
Log Message: ----------- Note: this breaks the plugin API. Split GeanyFunctions out of GeanyData so data pointers can be appended before the function pointer structs without breaking the ABI. Rename GeanyFunctions fields with a p_ prefix to avoid name conflicts. Add new plugin symbol geany_functions. Nearly all plugins will now need to declare the following: 'GeanyFunctions *geany_functions;', which is now used by pluginmacros.h. Add doxygen examples for geany_data and geany_functions. Move deprecated document and filetype typedefs to src/plugindata.h, as plugins aren't required to use pluginmacros.h. Initialize geany_data by copying a stack struct so the compiler can check for any missing field initializers. Rename plugin macro p_encoding to p_encodings to follow the core function encodings_ prefix.
Modified Paths: -------------- trunk/ChangeLog trunk/doc/plugin-symbols.c trunk/plugins/autosave.c trunk/plugins/classbuilder.c trunk/plugins/demoplugin.c trunk/plugins/export.c trunk/plugins/filebrowser.c trunk/plugins/htmlchars.c trunk/plugins/pluginmacros.h trunk/plugins/vcdiff.c trunk/src/plugindata.h trunk/src/plugins.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/ChangeLog 2008-05-19 12:35:35 UTC (rev 2599) @@ -1,3 +1,28 @@ +2008-05-19 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * src/plugindata.h, src/plugins.c, doc/plugin-symbols.c, + plugins/export.c, plugins/vcdiff.c, plugins/demoplugin.c, + plugins/filebrowser.c, plugins/htmlchars.c, plugins/autosave.c, + plugins/pluginmacros.h, plugins/classbuilder.c: + Note: this breaks the plugin API. + Split GeanyFunctions out of GeanyData so data pointers can be + appended before the function pointer structs without breaking the + ABI. + Rename GeanyFunctions fields with a p_ prefix to avoid name + conflicts. + Add new plugin symbol geany_functions. + Nearly all plugins will now need to declare the following: + 'GeanyFunctions *geany_functions;', which is now used by + pluginmacros.h. + Add doxygen examples for geany_data and geany_functions. + Move deprecated document and filetype typedefs to src/plugindata.h, + as plugins aren't required to use pluginmacros.h. + Initialize geany_data by copying a stack struct so the compiler can + check for any missing field initializers. + Rename plugin macro p_encoding to p_encodings to follow the core + function encodings_ prefix. + + 2008-05-18 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/document.c:
Modified: trunk/doc/plugin-symbols.c =================================================================== --- trunk/doc/plugin-symbols.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/doc/plugin-symbols.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -40,9 +40,14 @@ /** Use the PLUGIN_INFO() macro to define it. Required by Geany. */ PluginInfo* info();
-/** Geany owned fields and functions. */ +/** Geany owned data pointers. + * Example: @c assert(geany_data->app->configdir != NULL); */ GeanyData* geany_data;
+/** Geany owned function pointers, split into groups. + * Example: @c geany_functions->p_document->new_file(NULL, NULL, NULL); */ +GeanyFunctions* geany_functions; + /** Plugin owned fields, including flags. */ PluginFields* plugin_fields;
Modified: trunk/plugins/autosave.c =================================================================== --- trunk/plugins/autosave.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/autosave.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -33,6 +33,7 @@
PluginFields *plugin_fields; GeanyData *geany_data; +GeanyFunctions *geany_functions;
PLUGIN_VERSION_CHECK(32)
Modified: trunk/plugins/classbuilder.c =================================================================== --- trunk/plugins/classbuilder.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/classbuilder.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -35,6 +35,7 @@
PluginFields *plugin_fields; GeanyData *geany_data; +GeanyFunctions *geany_functions;
PLUGIN_VERSION_CHECK(7)
Modified: trunk/plugins/demoplugin.c =================================================================== --- trunk/plugins/demoplugin.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/demoplugin.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -45,6 +45,7 @@ /* These items are set by Geany before init() is called. */ PluginFields *plugin_fields; GeanyData *geany_data; +GeanyFunctions *geany_functions;
/* Check that Geany supports plugin API version 7 or later, and check
Modified: trunk/plugins/export.c =================================================================== --- trunk/plugins/export.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/export.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -40,6 +40,7 @@
PluginFields *plugin_fields; GeanyData *geany_data; +GeanyFunctions *geany_functions;
PLUGIN_VERSION_CHECK(20) PLUGIN_INFO(_("Export"), _("Exports the current file into different formats."), VERSION,
Modified: trunk/plugins/filebrowser.c =================================================================== --- trunk/plugins/filebrowser.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/filebrowser.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -42,6 +42,7 @@
PluginFields *plugin_fields; GeanyData *geany_data; +GeanyFunctions *geany_functions;
PLUGIN_VERSION_CHECK(26)
Modified: trunk/plugins/htmlchars.c =================================================================== --- trunk/plugins/htmlchars.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/htmlchars.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -34,6 +34,7 @@
PluginFields *plugin_fields; GeanyData *geany_data; +GeanyFunctions *geany_functions;
PLUGIN_VERSION_CHECK(48)
Modified: trunk/plugins/pluginmacros.h =================================================================== --- trunk/plugins/pluginmacros.h 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/pluginmacros.h 2008-05-19 12:35:35 UTC (rev 2599) @@ -22,11 +22,12 @@ * $Id$ */
-/* Useful macros to avoid typing geany_data so often. */ +/* Useful macros to avoid typing geany_data-> or geany_functions-> so often. */
#ifndef PLUGINMACROS_H #define PLUGINMACROS_H
+/* common data structs */ #define app geany_data->app #define doc_array geany_data->doc_array /* Allows use of doc_list[] macro */ #define filetypes_array geany_data->filetypes_array /* Allows use of filetypes[] macro */ @@ -37,31 +38,33 @@ /* These macros are named the same as the first word in the core function name, * but with a 'p_' prefix to prevent conflicts with other tag names. * Example: document_open_file() -> p_document->open_file() */ -#define p_filetypes geany_data->filetype -#define p_navqueue geany_data->navqueue -#define p_editor geany_data->editor +/* New macros should be added here */ +#define p_filetypes geany_functions->p_filetypes +#define p_navqueue geany_functions->p_navqueue +#define p_editor geany_functions->p_editor
+ #ifdef GEANY_DISABLE_DEPRECATED
-#define p_dialogs geany_data->dialogs -#define p_document geany_data->documents -#define p_encoding geany_data->encoding -#define p_highlighting geany_data->highlighting -#define p_keybindings geany_data->keybindings -#define p_msgwindow geany_data->msgwindow -#define p_sci geany_data->sci -#define p_search geany_data->search -#define p_support geany_data->support -#define p_templates geany_data->templates -#define p_tm geany_data->tm -#define p_ui geany_data->ui -#define p_utils geany_data->utils +#define p_dialogs geany_functions->p_dialogs +#define p_document geany_functions->p_document +#define p_encodings geany_functions->p_encodings +#define p_highlighting geany_functions->p_highlighting +#define p_keybindings geany_functions->p_keybindings +#define p_msgwindow geany_functions->p_msgwindow +#define p_sci geany_functions->p_sci +#define p_search geany_functions->p_search +#define p_support geany_functions->p_support +#define p_templates geany_functions->p_templates +#define p_tm geany_functions->p_tm +#define p_ui geany_functions->p_ui +#define p_utils geany_functions->p_utils
#else
#define p_dialogs dialogs #define p_document documents -#define p_encoding encodings +#define p_encodings encodings #define p_highlighting highlighting #define p_keybindings keybindings #define p_msgwindow msgwindow @@ -74,24 +77,21 @@ #define p_utils utils
-/* Temporary source compatibility macros - do not use these in new code. */ -#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 +/* Temporary source compatibility macros - do not use these in new code, they may get removed. */ +#define dialogs geany_functions->p_dialogs +#define documents geany_functions->p_document +#define encodings geany_functions->p_encodings +#define highlighting geany_functions->p_highlighting +#define keybindings geany_functions->p_keybindings +#define msgwindow geany_functions->p_msgwindow +#define scintilla geany_functions->p_sci +#define search geany_functions->p_search +#define support geany_functions->p_support +#define templates geany_functions->p_templates +#define tagmanager geany_functions->p_tm +#define ui geany_functions->p_ui +#define utils geany_functions->p_utils
-typedef struct _GeanyDocument document; -typedef struct _GeanyFiletype filetype; - #endif
#endif
Modified: trunk/plugins/vcdiff.c =================================================================== --- trunk/plugins/vcdiff.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/plugins/vcdiff.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -39,6 +39,7 @@
PluginFields *plugin_fields; GeanyData *geany_data; +GeanyFunctions *geany_functions;
PLUGIN_VERSION_CHECK(27) @@ -274,12 +275,12 @@ * UTF-8 because internally Geany always needs UTF-8 */ if (force_encoding) { - text = p_encoding->convert_to_utf8_from_charset( + text = p_encodings->convert_to_utf8_from_charset( std_output, (gsize)-1, force_encoding, TRUE); } else { - text = p_encoding->convert_to_utf8(std_output, (gsize)-1, &detect_enc); + text = p_encodings->convert_to_utf8(std_output, (gsize)-1, &detect_enc); } if (text) {
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/src/plugindata.h 2008-05-19 12:35:35 UTC (rev 2599) @@ -35,12 +35,12 @@
/* The API version should be incremented whenever any plugin data types below are * modified or appended to. */ -static const gint api_version = 59; +static const gint api_version = 60;
/* 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 * are only appended, as this doesn't affect existing fields. */ -static const gint abi_version = 29; +static const gint abi_version = 30;
/** Check the plugin can be loaded by Geany. * This performs runtime checks that try to ensure: @@ -149,48 +149,56 @@ PluginFields;
-/** This contains pointers to global variables and functions owned by Geany for plugins to use. - * Variables and functions will be appended when needed by plugin authors. */ +/** This contains pointers to global variables owned by Geany for plugins to use. + * Core variable pointers can be appended when needed by plugin authors, if appropriate. */ typedef struct GeanyData { - GeanyApp *app; /**< Geany application data fields */ - GtkWidget *tools_menu; /**< Most plugins should add menu items to the Tools menu only */ - GArray *doc_array; /**< Dynamic array of document structs */ - GPtrArray *filetypes_array; /**< Dynamic array of filetype pointers */ - struct GeanyPrefs *prefs; /**< General settings */ - struct GeanyInterfacePrefs *interface_prefs; /**< Interface settings */ - struct GeanyToolbarPrefs *toolbar_prefs; /**< Toolbar settings */ - struct GeanyEditorPrefs *editor_prefs; /**< Editor settings */ - struct GeanyFilePrefs *file_prefs; /**< File-related settings */ - struct GeanySearchPrefs *search_prefs; /**< Search-related settings */ - struct GeanyToolPrefs *tool_prefs; /**< Tool settings */ - struct GeanyTemplatePrefs *template_prefs; /**< Template settings */ - struct GeanyBuildInfo *build_info; /**< Current build information */ - - struct DocumentFuncs *documents; /**< See document.h */ - struct ScintillaFuncs *sci; /**< See sciwrappers.h */ - struct TemplateFuncs *templates; /**< See templates.h */ - struct UtilsFuncs *utils; /**< See utils.h */ - struct UIUtilsFuncs *ui; /**< See ui_utils.h */ - struct SupportFuncs *support; /**< See support.h */ - struct DialogFuncs *dialogs; /**< See dialogs.h */ - struct MsgWinFuncs *msgwindow; /**< See msgwindow.h */ - struct EncodingFuncs *encoding; /**< See encodings.h */ - struct KeybindingFuncs *keybindings; /**< See keybindings.h */ - struct TagManagerFuncs *tm; /**< See tagmanager/include */ - struct SearchFuncs *search; /**< See search.h */ - struct HighlightingFuncs *highlighting; /**< See highlighting.h */ - struct FiletypeFuncs *filetype; /**< See filetypes.h */ - struct NavQueueFuncs *navqueue; /**< See navqueue.h */ - struct EditorFuncs *editor; /**< See editor.h */ + GeanyApp *app; /**< Geany application data fields */ + GtkWidget *tools_menu; /**< Most plugins should add menu items to the Tools menu only */ + GArray *doc_array; /**< Dynamic array of document structs */ + GPtrArray *filetypes_array; /**< Dynamic array of filetype pointers */ + struct GeanyPrefs *prefs; /**< General settings */ + struct GeanyInterfacePrefs *interface_prefs; /**< Interface settings */ + struct GeanyToolbarPrefs *toolbar_prefs; /**< Toolbar settings */ + struct GeanyEditorPrefs *editor_prefs; /**< Editor settings */ + struct GeanyFilePrefs *file_prefs; /**< File-related settings */ + struct GeanySearchPrefs *search_prefs; /**< Search-related settings */ + struct GeanyToolPrefs *tool_prefs; /**< Tool settings */ + struct GeanyTemplatePrefs *template_prefs; /**< Template settings */ + struct GeanyBuildInfo *build_info; /**< Current build information */ } GeanyData;
-/* For more info about these functions, see the main source code. - * E.g. for GeanyData::documents->new_file(), see document_new_file() in document.c. */ +/** This contains pointers to functions owned by Geany for plugins to use. + * Functions from the core can be appended when needed by plugin authors, but may + * require some changes. */ +typedef struct GeanyFunctions +{ + struct DocumentFuncs *p_document; /**< See document.h */ + struct ScintillaFuncs *p_sci; /**< See sciwrappers.h */ + struct TemplateFuncs *p_templates; /**< See templates.h */ + struct UtilsFuncs *p_utils; /**< See utils.h */ + struct UIUtilsFuncs *p_ui; /**< See ui_utils.h */ + struct SupportFuncs *p_support; /**< See support.h */ + struct DialogFuncs *p_dialogs; /**< See dialogs.h */ + struct MsgWinFuncs *p_msgwindow; /**< See msgwindow.h */ + struct EncodingFuncs *p_encodings; /**< See encodings.h */ + struct KeybindingFuncs *p_keybindings; /**< See keybindings.h */ + struct TagManagerFuncs *p_tm; /**< See tagmanager/include */ + struct SearchFuncs *p_search; /**< See search.h */ + struct HighlightingFuncs *p_highlighting; /**< See highlighting.h */ + struct FiletypeFuncs *p_filetypes; /**< See filetypes.h */ + struct NavQueueFuncs *p_navqueue; /**< See navqueue.h */ + struct EditorFuncs *p_editor; /**< See editor.h */ +} +GeanyFunctions;
+/* For more information about these functions, see the main source code. + * E.g. for p_document->new_file(), see document_new_file() in document.c. */ + + /* See document.h */ typedef struct DocumentFuncs { @@ -438,6 +446,9 @@ #define GEANY_FILETYPES_ALL \ GEANY_FILETYPES_NONE
+typedef struct _GeanyDocument document; +typedef struct _GeanyFiletype filetype; + #endif /* GEANY_DISABLE_DEPRECATED */
#endif
Modified: trunk/src/plugins.c =================================================================== --- trunk/src/plugins.c 2008-05-18 16:27:08 UTC (rev 2598) +++ trunk/src/plugins.c 2008-05-19 12:35:35 UTC (rev 2599) @@ -244,21 +244,7 @@ &navqueue_goto_line };
-static GeanyData geany_data = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - +static GeanyFunctions geany_functions = { &doc_funcs, &sci_funcs, &template_funcs, @@ -277,23 +263,28 @@ &editor_funcs };
+static GeanyData geany_data;
+ static void geany_data_init(void) { - geany_data.app = app; - geany_data.tools_menu = lookup_widget(app->window, "tools1_menu"); - geany_data.doc_array = doc_array; - geany_data.filetypes_array = filetypes_array; - geany_data.prefs = &prefs; - geany_data.interface_prefs = &interface_prefs; - geany_data.toolbar_prefs = &toolbar_prefs; - geany_data.editor_prefs = &editor_prefs; - geany_data.file_prefs = &file_prefs; - geany_data.search_prefs = &search_prefs; - geany_data.tool_prefs = &tool_prefs; - geany_data.template_prefs = &template_prefs; - geany_data.build_info = &build_info; + GeanyData gd = { + app, + lookup_widget(app->window, "tools1_menu"), + doc_array, + filetypes_array, + &prefs, + &interface_prefs, + &toolbar_prefs, + &editor_prefs, + &file_prefs, + &search_prefs, + &tool_prefs, + &template_prefs, + &build_info + }; + memcpy(&geany_data, &gd, sizeof(GeanyData)); }
@@ -477,6 +468,7 @@ PluginInfo* (*info)(void); PluginFields **plugin_fields; GeanyData **p_geany_data; + GeanyFunctions **p_geany_functions;
g_return_val_if_fail(fname, NULL); g_return_val_if_fail(g_module_supported(), NULL); @@ -539,6 +531,9 @@ g_module_symbol(module, "geany_data", (void *) &p_geany_data); if (p_geany_data) *p_geany_data = &geany_data; + g_module_symbol(module, "geany_functions", (void *) &p_geany_functions); + if (p_geany_functions) + *p_geany_functions = &geany_functions; g_module_symbol(module, "plugin_fields", (void *) &plugin_fields); if (plugin_fields) *plugin_fields = &plugin->fields;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.