1 #include <sng2html/sng2html/Project.hpp>
2 #include <soulng/cppcode/InitDone.hpp>
3 #include <soulng/util/InitDone.hpp>
4 #include <sngxml/xpath/InitDone.hpp>
5 #include <soulng/util/TextUtils.hpp>
6 #include <iostream>
7 #include <stdexcept>
8
9 struct Initializer
10 {
11 Initializer()
12 {
13 soulng::util::Init();
14 soulng::cppcode::Init();
15 sngxml::xpath::Init();
16 }
17 ~Initializer()
18 {
19 sngxml::xpath::Done();
20 soulng::cppcode::Done();
21 soulng::util::Done();
22 }
23 };
24
25 using namespace soulng::util;
26
27 int main(int argc, const char** argv)
28 {
29 Initializer initializer;
30 try
31 {
32 bool verbose = false;
33 std::vector<std::string> xmlFilePaths;
34 for (int i = 1; i < argc; ++i)
35 {
36 std::string arg = argv[i];
37 if (StartsWith(arg, "--"))
38 {
39 if (arg == "--verbose")
40 {
41 verbose = true;
42 }
43 else
44 {
45 throw std::runtime_error("unknown option '" + arg + "'");
46 }
47 }
48 else if (StartsWith(arg, "-"))
49 {
50 std::string options = arg.substr(1);
51 for (char o : options)
52 {
53 if (o == 'v')
54 {
55 verbose = true;
56 }
57 else
58 {
59 throw std::runtime_error("unknown option '-" + std::string(1, o) + "'");
60 }
61 }
62 }
63 else
64 {
65 xmlFilePaths.push_back(arg);
66 }
67 }
68 for (const std::string& xmlFilePath : xmlFilePaths)
69 {
70 sng2html::sng2html::Project project(verbose, xmlFilePath);
71 project.Process();
72 }
73 }
74 catch (const std::exception& ex;)
75 {
76 std::cerr << ex.what() << std::endl;
77 return 1;
78 }
79 return 0;
80 }