From 11355181c0b5f8377774daefcc17bb5e6bc20f61 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Wed, 4 Jun 2014 21:22:18 +0200 Subject: 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 --- ixslt.cc | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 ixslt.cc (limited to 'ixslt.cc') 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 +#include +#include + +boost::optional input( + int argc, + char** argv +) { + boost::program_options::options_description optionDescription( + "Supported options" + ); + + optionDescription.add_options() + ( + "transformation", + boost::program_options::value()->required(), + "transformation file" + ) + ( + "target", + boost::program_options::value(), + "target file" + ) + ( + "include", + boost::program_options::value>(), + "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(); + } + + return boost::make_optional(variables); +} + +bool process(const boost::program_options::variables_map& variables) { + std::vector includePath; + + if ( variables.count("include") ) { + includePath = variables["include"].as>(); + }; + + InputXSLT::PlattformGuard plattform(includePath); + + try { + InputXSLT::TransformationFacade transformation( + variables["transformation"].as(), + plattform.getEntityResolver() + ); + + if ( variables.count("target") ) { + transformation.generate( + variables["target"].as() + ); + } 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; + } +} -- cgit v1.2.3