X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=tools%2Fminiswig%2Fmain.cpp;h=17e2c58f185c6dd314bfe43bda49d0fdbf7ef93c;hb=78bbf9473d795d9ea9221e38829a9bacfce00fa5;hp=2a5b1ed4dbbd6c2a7d0f5bbbb0c3890e379ad724;hpb=1f0faf6a86dbece62970f10bc4aa9c297097c476;p=supertux.git diff --git a/tools/miniswig/main.cpp b/tools/miniswig/main.cpp index 2a5b1ed4d..17e2c58f1 100644 --- a/tools/miniswig/main.cpp +++ b/tools/miniswig/main.cpp @@ -1,10 +1,14 @@ +#include + #include #include #include #include -#include "tree.h" -#include "globals.h" -#include "create_wrapper.h" +#include +#include "tree.hpp" +#include "globals.hpp" +#include "create_wrapper.hpp" +#include "create_docu.hpp" extern int yyparse(); extern int yylex(); @@ -25,6 +29,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) { @@ -42,7 +47,7 @@ int main(int argc, char** argv) inputfile = argv[++i]; } else if(strcmp(argv[i], "--output-cpp") == 0) { if(i+1 >= argc) { - std::cerr << "Need to specifiy output cpp name.\n"; + std::cerr << "Need to specify output cpp name.\n"; usage(); return 1; } @@ -61,6 +66,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,12 +80,13 @@ 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()) { @@ -87,32 +100,47 @@ int main(int argc, char** argv) 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; } -