1 #ifndef _STARDICT_PLUG_MANAGER_H_
2 #define _STARDICT_PLUG_MANAGER_H_
5 #include "virtualdictplugin.h"
6 #include "netdictplugin.h"
7 #include "specialdictplugin.h"
9 #include "parsedata_plugin.h"
17 struct StarDictPluginBaseObject {
18 StarDictPluginBaseObject(const char *filename, GModule *module_, plugin_configure_func_t configure_func_);
19 std::string plugin_filename;
21 plugin_configure_func_t configure_func;
24 class StarDictPluginBase {
26 StarDictPluginBase(StarDictPluginBaseObject *baseobj_);
27 ~StarDictPluginBase();
28 const char *get_filename();
31 StarDictPluginBaseObject *baseobj;
34 class StarDictVirtualDictPlugin : public StarDictPluginBase {
36 StarDictVirtualDictPlugin(StarDictPluginBaseObject *baseobj, StarDictVirtualDictPlugInObject *virtualdict_plugin_obj);
37 ~StarDictVirtualDictPlugin();
38 void lookup(const char *word, char ***pppWord, char ****ppppWordData);
39 const char *dict_name();
40 const char *dict_id();
42 StarDictVirtualDictPlugInObject *obj;
45 class StarDictVirtualDictPlugins {
47 StarDictVirtualDictPlugins();
48 ~StarDictVirtualDictPlugins();
49 void add(StarDictPluginBaseObject *baseobj, StarDictVirtualDictPlugInObject *virtualdict_plugin_obj);
50 void lookup(size_t iPlugin, const gchar *word, char ***pppWord, char ****ppppWordData);
51 size_t ndicts() { return oPlugins.size(); }
52 const char *dict_name(size_t iPlugin);
53 const char *dict_id(size_t iPlugin);
54 bool find_dict_by_id(const char *id, size_t &iPlugin);
55 void unload_plugin(const char *filename);
56 void configure_plugin(const char *filename);
57 void reorder(const std::list<std::string>& order_list);
59 std::vector<StarDictVirtualDictPlugin *> oPlugins;
62 class StarDictNetDictPlugin : public StarDictPluginBase {
64 StarDictNetDictPlugin(StarDictPluginBaseObject *baseobj, StarDictNetDictPlugInObject *netdict_plugin_obj);
65 ~StarDictNetDictPlugin();
66 void lookup(const char *word, bool ismainwin);
67 const char *dict_name();
68 const char *dict_id();
69 const char *dict_cacheid();
71 StarDictNetDictPlugInObject *obj;
74 class StarDictNetDictPlugins {
76 StarDictNetDictPlugins();
77 ~StarDictNetDictPlugins();
78 void add(StarDictPluginBaseObject *baseobj, StarDictNetDictPlugInObject *netdict_plugin_obj);
79 void lookup(size_t iPlugin, const gchar *word, bool ismainwin);
80 size_t ndicts() { return oPlugins.size(); }
81 const char *dict_name(size_t iPlugin);
82 const char *dict_id(size_t iPlugin);
83 const char *dict_cacheid(size_t iPlugin);
84 bool find_dict_by_id(const char *id, size_t &iPlugin);
85 void unload_plugin(const char *filename);
86 void configure_plugin(const char *filename);
87 void reorder(const std::list<std::string>& order_list);
89 std::vector<StarDictNetDictPlugin *> oPlugins;
92 class StarDictSpecialDictPlugin : public StarDictPluginBase {
94 StarDictSpecialDictPlugin(StarDictPluginBaseObject *baseobj, StarDictSpecialDictPlugInObject *speicaldict_plugin_obj);
95 ~StarDictSpecialDictPlugin();
96 void render_widget(bool ismainwin, size_t dictid, const gchar *orig_word, gchar **Word, gchar ***WordData, GtkWidget **widget);
97 const char *dict_type();
99 StarDictSpecialDictPlugInObject *obj;
102 class StarDictSpecialDictPlugins {
104 StarDictSpecialDictPlugins();
105 ~StarDictSpecialDictPlugins();
106 void add(StarDictPluginBaseObject *baseobj, StarDictSpecialDictPlugInObject *specialdict_plugin_obj);
107 void render_widget(size_t iPlugin, bool ismainwin, size_t dictid, const gchar *orig_word, gchar **Word, gchar ***WordData, GtkWidget **widget);
108 size_t nplugins() { return oPlugins.size(); }
109 const char *dict_type(size_t iPlugin);
110 void unload_plugin(const char *filename);
111 void configure_plugin(const char *filename);
112 void reorder(const std::list<std::string>& order_list);
114 std::vector<StarDictSpecialDictPlugin *> oPlugins;
117 class StarDictTtsPlugin : public StarDictPluginBase {
119 StarDictTtsPlugin(StarDictPluginBaseObject *baseobj, StarDictTtsPlugInObject *tts_plugin_obj);
120 ~StarDictTtsPlugin();
121 void saytext(const gchar *text);
122 const char *tts_name();
124 StarDictTtsPlugInObject *obj;
127 class StarDictTtsPlugins {
129 StarDictTtsPlugins();
130 ~StarDictTtsPlugins();
131 void add(StarDictPluginBaseObject *baseobj, StarDictTtsPlugInObject *tts_plugin_obj);
132 void saytext(size_t iPlugin, const gchar *text);
133 const char* tts_name(size_t iPlugin);
134 size_t nplugins() { return oPlugins.size(); }
135 void unload_plugin(const char *filename);
136 void configure_plugin(const char *filename);
137 void reorder(const std::list<std::string>& order_list);
139 std::vector<StarDictTtsPlugin *> oPlugins;
142 class StarDictParseDataPlugin : public StarDictPluginBase {
144 StarDictParseDataPlugin(StarDictPluginBaseObject *baseobj, StarDictParseDataPlugInObject *parsedata_plugin_obj);
145 ~StarDictParseDataPlugin();
146 bool parse(const char *p, unsigned int *parsed_size, ParseResult &result, const char *oword);
148 StarDictParseDataPlugInObject *obj;
151 class StarDictParseDataPlugins {
153 StarDictParseDataPlugins();
154 ~StarDictParseDataPlugins();
155 void add(StarDictPluginBaseObject *baseobj, StarDictParseDataPlugInObject *parsedata_plugin_obj);
156 bool parse(size_t iPlugin, const char *p, unsigned int *parsed_size, ParseResult &result, const char *oword);
157 size_t nplugins() { return oPlugins.size(); }
158 void unload_plugin(const char *filename);
159 void configure_plugin(const char *filename);
160 void reorder(const std::list<std::string>& order_list);
162 std::vector<StarDictParseDataPlugin *> oPlugins;
165 class StarDictMiscPlugin : public StarDictPluginBase {
167 StarDictMiscPlugin(StarDictPluginBaseObject *baseobj);
168 ~StarDictMiscPlugin();
171 class StarDictMiscPlugins {
173 StarDictMiscPlugins();
174 ~StarDictMiscPlugins();
175 void add(StarDictPluginBaseObject *baseobj);
176 void unload_plugin(const char *filename);
177 void configure_plugin(const char *filename);
178 void reorder(const std::list<std::string>& order_list);
180 std::vector<StarDictMiscPlugin *> oPlugins;
183 struct StarDictPluginInfo {
184 std::string filename;
185 StarDictPlugInType plugin_type;
186 std::string info_xml;
190 class StarDictPlugins {
192 StarDictPlugins(const char *dirpath, const std::list<std::string>& order_list, const std::list<std::string>& disable_list);
194 void get_plugin_list(const std::list<std::string>& order_list, std::list<std::pair<StarDictPlugInType, std::list<StarDictPluginInfo> > > &plugin_list);
195 bool get_loaded(const char *filename);
196 void load_plugin(const char *filename);
197 void configure_plugin(const char *filename, StarDictPlugInType plugin_type);
198 void unload_plugin(const char *filename, StarDictPlugInType plugin_type);
199 void reorder(const std::list<std::string>& order_list);
200 StarDictVirtualDictPlugins VirtualDictPlugins;
201 StarDictNetDictPlugins NetDictPlugins;
202 StarDictSpecialDictPlugins SpecialDictPlugins;
203 StarDictTtsPlugins TtsPlugins;
204 StarDictParseDataPlugins ParseDataPlugins;
206 StarDictMiscPlugins MiscPlugins;
207 std::string plugindirpath;
208 std::list<std::string> loaded_plugin_list;
209 void load(const char *dirpath, const std::list<std::string>& order_list, const std::list<std::string>& disable_list);
210 void get_plugin_info(const char *filename, StarDictPlugInType &plugin_type, std::string &info_xml, bool &can_configure);
211 friend class PluginLoader;
212 friend class PluginInfoLoader;