From 79d3e2bdfd441d6eba2f22af78d5bea5e488daf1 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Fri, 30 May 2014 22:19:32 +0200 Subject: Rewrote error handling based on exceptions * ErrorHandler is replaced by ErrorCapacitor ** temporarily registers itself as both the ProblemListener and ErrorHandler of a given XalanTransformer instance ** deregisters itself on destruction ** collects all problems and errors during its lifetime inside a internal std::vector instance ** if this instance is not empty it is thrown contained within a ErrorCapacitor::exception by the member method ErrorCapacitor::discharge * this enables using the same code for handling transformation compilation and generation errors and problems * updated test frontend accordingly --- test.cc | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) (limited to 'test.cc') diff --git a/test.cc b/test.cc index 0c5e4b2..6874fd5 100644 --- a/test.cc +++ b/test.cc @@ -43,25 +43,28 @@ int main(int ac, char** av) { InputXSLT::PlattformGuard plattform(includePath); - InputXSLT::TransformationFacade transformation( - variables["transformation"].as(), - plattform.getEntityResolver() - ); - - InputXSLT::TransformationFacade::return_type errors{}; - - if ( variables.count("target") ) { - errors = transformation.generate( - variables["target"].as() + try { + InputXSLT::TransformationFacade transformation( + variables["transformation"].as(), + plattform.getEntityResolver() ); - } else { - errors = transformation.generate(std::cout); - } - if ( errors ) { - for ( auto&& error : *errors ) { + if ( variables.count("target") ) { + transformation.generate( + variables["target"].as() + ); + } else { + transformation.generate(std::cout); + } + + return 0; + } + catch (const InputXSLT::ErrorCapacitor::exception& exception) { + for ( auto&& error : *(exception.getCachedErrors()) ) { std::cerr << error << std::endl; } + + return 1; } } else { std::cout << optionDescription << std::endl; -- cgit v1.2.3