+#include <config.h>
+
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
-#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();
{
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) {
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();
} 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_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;
}
-