X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=tools%2Fminiswig%2Fmain.cpp;h=46c5fa047a55a99fd7386400a2fdbc773108e621;hb=d2ed7a7f170e1a1ef9d1548e8b14292d175e0c33;hp=f28e3f73172d3203a5b8cda2672405480cf7a335;hpb=f1e15f44f709d6b4fa45e858dc12d7d701ae8ddc;p=supertux.git diff --git a/tools/miniswig/main.cpp b/tools/miniswig/main.cpp index f28e3f731..46c5fa047 100644 --- a/tools/miniswig/main.cpp +++ b/tools/miniswig/main.cpp @@ -1,10 +1,13 @@ +#include + #include #include #include #include -#include "tree.h" -#include "globals.h" -#include "create_wrapper.h" +#include "tree.hpp" +#include "globals.hpp" +#include "create_wrapper.hpp" +#include "create_docu.hpp" extern int yyparse(); extern int yylex(); @@ -25,6 +28,7 @@ int main(int argc, char** argv) { std::string outputcpp; std::string outputhpp; + std::string output_doc; for(int i = 0; i < argc; ++i) { if(strcmp(argv[i], "--module") == 0) { if(i+1 >= argc) { @@ -61,6 +65,13 @@ int main(int argc, char** argv) return 1; } selected_namespace = argv[++i]; + } else if(strcmp(argv[i], "--output-doc") == 0) { + if(i+1 >= argc) { + std::cerr << "Need to specify document xml file.\n"; + usage(); + return 1; + } + output_doc = argv[++i]; } else if(argv[i][0] == '-') { std::cerr << "Unknown option '" << argv[i] << "'.\n"; usage(); @@ -68,50 +79,67 @@ int main(int argc, char** argv) } else { } } - if(inputfile == "" || outputcpp == "" || outputhpp == "") { + if( inputfile == "" || ( + (outputcpp == "" || outputhpp == "") && output_doc == "")) { std::cerr << "Not all options specified.\n"; usage(); return 1; } - + try { input = new std::ifstream(inputfile.c_str()); if(!input->good()) { std::cerr << "Couldn't open file '" << input << "' for reading.\n"; return 1; } + current_file = inputfile; unit = new CompilationUnit(); Namespace* std_namespace = new Namespace(); std_namespace->name = "std"; std_namespace->types.push_back(new StringType()); unit->namespaces.push_back(std_namespace); unit->types.push_back(new HSQUIRRELVMType()); - - yyparse(); + unit->types.push_back(new SQIntegerType()); - std::ofstream cppout(outputcpp.c_str()); - if(!cppout.good()) { - std::cerr << "Couldn't open file '" << outputcpp << "' for writing.\n"; - return 1; - } - std::ofstream hppout(outputhpp.c_str()); - if(!hppout.good()) { - std::cerr << "Couldn't open file '" << outputhpp << "' for writing.\n"; - return 1; - } + yyparse(); Namespace* ns = unit; if(selected_namespace != "") { ns = ns->findNamespace(selected_namespace); } - WrapperCreator creator(cppout, hppout); - creator.create_wrapper(ns); + if(outputcpp != "") { + std::ofstream cppout(outputcpp.c_str()); + if(!cppout.good()) { + std::cerr << "Couldn't open file '" + << outputcpp << "' for writing.\n"; + return 1; + } + std::ofstream hppout(outputhpp.c_str()); + if(!hppout.good()) { + std::cerr << "Couldn't open file '" << outputhpp + << "' for writing.\n"; + return 1; + } + + WrapperCreator creator(cppout, hppout); + creator.create_wrapper(ns); + } + + if(output_doc != "") { + std::ofstream dout(output_doc.c_str()); + if(!dout.good()) { + std::cerr << "Couldn't open file '" + << output_doc << "' for writing.\n"; + return 1; + } + DocuCreator creator(dout); + creator.create_docu(ns); + } } catch(std::exception& e) { - std::cerr << e.what() << "\n"; + std::cerr << "Exception: " << e.what() << "\n"; return 1; } return 0; } -