diff options
author | Adrian Kummerländer | 2014-06-04 21:22:18 +0200 |
---|---|---|
committer | Adrian Kummerländer | 2014-06-04 21:22:18 +0200 |
commit | 11355181c0b5f8377774daefcc17bb5e6bc20f61 (patch) | |
tree | 8760a5f00d7931c1479e3b07dbd62720189a58fd /ixslt.cc | |
parent | 7c15531b60e4e792d1137d5ceb66d3047848a422 (diff) | |
download | InputXSLT-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.cc | 103 |
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; + } +} |