$search
00001 #include "cimportplugin.hh" 00002 #include "typelib/pluginmanager.hh" 00003 #include "typelib/importer.hh" 00004 00005 #include <iostream> 00006 00007 #include "utilmm/configfile/configset.hh" 00008 #include "typelib/registry.hh" 00009 00010 using namespace std; 00011 using namespace boost; 00012 using utilmm::config_set; 00013 using Typelib::Registry; 00014 using Typelib::PluginManager; 00015 00016 CImportPlugin::CImportPlugin() 00017 : Plugin("C", "import") {} 00018 00019 list<string> CImportPlugin::getOptions() const 00020 { 00021 static const char* arguments[] = 00022 { "*:include,I=string:include search path", 00023 "*:define,D=string:Define this symbol" }; 00024 return list<string>(arguments, arguments + 2); 00025 } 00026 00027 bool CImportPlugin::apply(const OptionList& remaining, const config_set& options, Registry& registry) 00028 { 00029 if (remaining.empty()) 00030 { 00031 cerr << "No file found on command line. Aborting" << endl; 00032 return false; 00033 } 00034 string const file(remaining.front()); 00035 00036 try 00037 { 00038 auto_ptr<Typelib::Importer> importer(PluginManager::self()->importer("c")); 00039 if (! importer.get()) 00040 { 00041 cerr << "Cannot find the import I/O plugin for C" << std::endl; 00042 return false; 00043 } 00044 00045 importer->load(file, options, registry); 00046 return true; 00047 } 00048 catch(Typelib::RegistryException& e) 00049 { cerr << "error: " << e.toString() << endl; } 00050 catch(Typelib::ImportError e) 00051 { cerr << e.toString() << endl; } 00052 catch(std::exception& e) 00053 { cerr << "Error parsing file " << file << ":\n\t" << typeid(e).name() << endl; } 00054 return false; 00055 } 00056