aboutsummaryrefslogtreecommitdiff
path: root/ixslt.cc
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-06-04 21:22:18 +0200
committerAdrian Kummerländer2014-06-04 21:22:18 +0200
commit11355181c0b5f8377774daefcc17bb5e6bc20f61 (patch)
tree8760a5f00d7931c1479e3b07dbd62720189a58fd /ixslt.cc
parent7c15531b60e4e792d1137d5ceb66d3047848a422 (diff)
downloadInputXSLT-11355181c0b5f8377774daefcc17bb5e6bc20f61.tar
InputXSLT-11355181c0b5f8377774daefcc17bb5e6bc20f61.tar.gz
InputXSLT-11355181c0b5f8377774daefcc17bb5e6bc20f61.tar.bz2
InputXSLT-11355181c0b5f8377774daefcc17bb5e6bc20f61.tar.lz
InputXSLT-11355181c0b5f8377774daefcc17bb5e6bc20f61.tar.xz
InputXSLT-11355181c0b5f8377774daefcc17bb5e6bc20f61.tar.zst
InputXSLT-11355181c0b5f8377774daefcc17bb5e6bc20f61.zip
Renamed "test" executable to "ixslt"
* improved "ixslt" frontend code structure ** extracted input, process and output logic into separate methods ** removed manual "--transformation" parameter check as it is defined as required
Diffstat (limited to 'ixslt.cc')
-rw-r--r--ixslt.cc103
1 files changed, 103 insertions, 0 deletions
diff --git a/ixslt.cc b/ixslt.cc
new file mode 100644
index 0000000..76c35d3
--- /dev/null
+++ b/ixslt.cc
@@ -0,0 +1,103 @@
+#include "plattform_guard.h"
+#include "transformation_facade.h"
+
+#include "boost/optional.hpp"
+#include "boost/program_options.hpp"
+
+#include <string>
+#include <vector>
+#include <iostream>
+
+boost::optional<boost::program_options::variables_map> input(
+ int argc,
+ char** argv
+) {
+ boost::program_options::options_description optionDescription(
+ "Supported options"
+ );
+
+ optionDescription.add_options()
+ (
+ "transformation",
+ boost::program_options::value<std::string>()->required(),
+ "transformation file"
+ )
+ (
+ "target",
+ boost::program_options::value<std::string>(),
+ "target file"
+ )
+ (
+ "include",
+ boost::program_options::value<std::vector<std::string>>(),
+ "include paths"
+ )
+ ;
+
+ boost::program_options::variables_map variables;
+
+ try {
+ boost::program_options::store(
+ boost::program_options::parse_command_line(
+ argc, argv, optionDescription
+ ),
+ variables
+ );
+
+ boost::program_options::notify(variables);
+ }
+ catch ( const std::exception& exception ) {
+ std::cerr << exception.what() << std::endl;
+ std::cout << optionDescription << std::endl;
+
+ return boost::optional<boost::program_options::variables_map>();
+ }
+
+ return boost::make_optional(variables);
+}
+
+bool process(const boost::program_options::variables_map& variables) {
+ std::vector<std::string> includePath;
+
+ if ( variables.count("include") ) {
+ includePath = variables["include"].as<std::vector<std::string>>();
+ };
+
+ InputXSLT::PlattformGuard plattform(includePath);
+
+ try {
+ InputXSLT::TransformationFacade transformation(
+ variables["transformation"].as<std::string>(),
+ plattform.getEntityResolver()
+ );
+
+ if ( variables.count("target") ) {
+ transformation.generate(
+ variables["target"].as<std::string>()
+ );
+ } else {
+ transformation.generate(std::cout);
+ }
+
+ return true;
+ }
+ catch (const InputXSLT::ErrorCapacitor::exception& exception) {
+ for ( auto&& error : *(exception.getCachedErrors()) ) {
+ std::cerr << error << std::endl;
+ }
+
+ return false;
+ }
+}
+
+int main(int argc, char** argv) {
+ if ( auto variables = input(argc, argv) ) {
+ if ( process(*variables) ) {
+ return 0;
+ } else {
+ return 1;
+ }
+ } else {
+ return 1;
+ }
+}