#303: Typo fixes from mathnerd314
[supertux.git] / tools / miniswig / main.cpp
index 2a5b1ed..17e2c58 100644 (file)
@@ -1,10 +1,14 @@
+#include <config.h>
+
 #include <iostream>
 #include <fstream>
 #include <vector>
 #include <string>
-#include "tree.h"
-#include "globals.h"
-#include "create_wrapper.h"
+#include <cstring>
+#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;
 }
-