void PluginRegistry::RegisterPlugin(Plugin* plugin) { int event_classes = plugin->GetEventClasses(); if (event_classes & Plugin::EVT_BASIC) basic_plugins.push_back(plugin); if (event_classes & Plugin::EVT_DOCUMENT) document_plugins.push_back(plugin); if (event_classes & Plugin::EVT_ELEMENT) element_plugins.push_back(plugin); }
PluginManager::PluginList PluginManager::getPlugins () { PluginList retval; std::list<PythonPlugin>::iterator it = pythonPlugins_.begin(); std::list<PythonPlugin>::iterator end = pythonPlugins_.end(); for (; it != end; ++it) { retval.push_back (&(*it)); } retval.push_back (&crossref_); retval.push_back (&arxiv_); return retval; }
void PluginRegistry::Impl::get_plugins_from_dir (PluginList& list, std::string const& dir) { list.clear (); #if defined(VISUAL_OS_WIN32) std::string pattern = dir + "/*"; WIN32_FIND_DATA file_data; HANDLE hList = FindFirstFile (pattern.c_str (), &file_data); if (hList == INVALID_HANDLE_VALUE) { FindClose (hList); return; } bool finished = false; while (!finished) { if (!(file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { std::string full_path = dir + "/" + file_data.cFileName; if (str_has_suffix (full_path, ".dll")) { PluginRef* ref = load_plugin_ref (full_path); if (ref) { list.push_back (ref); } } } if (!FindNextFile (hList, &file_data)) { if (GetLastError () == ERROR_NO_MORE_FILES) { finished = true; } } } FindClose (hList); #else // NOTE: This typecast is needed for glibc versions that define // alphasort() as taking const void * arguments typedef int (*ScandirCompareFunc) (const struct dirent **, const struct dirent **); struct dirent **namelist; int n = scandir (dir.c_str (), &namelist, NULL, ScandirCompareFunc (alphasort)); if (n < 0) return; // First two entries are '.' and '..' visual_mem_free (namelist[0]); visual_mem_free (namelist[1]); for (int i = 2; i < n; i++) { std::string full_path = dir + "/" + namelist[i]->d_name; if (str_has_suffix (full_path, ".so")) { PluginRef* ref = load_plugin_ref (full_path); if (ref) { list.push_back (ref); } } visual_mem_free (namelist[i]); } visual_mem_free (namelist); #endif }
bool Session::doAction( Action action, const Plugin* plugin ) { PluginList pl; pl.push_back( plugin ); return doAction( action, pl ); }