From 78bb3387b15d15d766fb5d17a99612f0480f2bee Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Thu, 5 Jun 2014 20:44:26 +0200 Subject: Implemented ErrorMultiplexer as primary error handler * ErrorMultiplexer is derived from both xercesc::ErrorHandler and xalan::ProblemListener * registers itself as XalanTransformer's ErrorHandler and ProblemListener * distributes captured errors and warnings to all registered ErrorMultiplexer::Receiver instances ** ErrorCapacitor implements the ErrorMultiplexer::Receiver interface and as such registers itself in a given ErrorMultiplexer instance ** ErrorMultiplexer reduces the different xalan and xercesc internal error classifications into either warnings or errors * this was implemented to make it possible to easily differentiate between warnings and errors ** previously warnings were treated as errors ** ErrorCapacitor ignores warnings and only captures errors ** WarningCapacitor will be implemented to handle warnings during XSLT processing --- src/support/error/error_capacitor.h | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/support/error/error_capacitor.h (limited to 'src/support/error/error_capacitor.h') diff --git a/src/support/error/error_capacitor.h b/src/support/error/error_capacitor.h new file mode 100644 index 0000000..6017cb4 --- /dev/null +++ b/src/support/error/error_capacitor.h @@ -0,0 +1,46 @@ +#ifndef INPUTXSLT_SRC_SUPPORT_ERROR_ERROR_CAPACITOR_H_ +#define INPUTXSLT_SRC_SUPPORT_ERROR_ERROR_CAPACITOR_H_ + +#include + +#include "error_multiplexer.h" + +namespace InputXSLT { + +class ErrorCapacitor : public ErrorMultiplexer::Receiver { + public: + class exception; + + typedef std::vector error_cache; + typedef std::unique_ptr error_cache_ptr; + + ErrorCapacitor(ErrorMultiplexer*); + ~ErrorCapacitor(); + + void discharge(); + + virtual void receive( + const ErrorMultiplexer::ErrorType, + const std::string& + ); + + private: + ErrorMultiplexer* const multiplexer_; + error_cache_ptr error_cache_; + +}; + +class ErrorCapacitor::exception { + public: + exception(error_cache_ptr); + + const error_cache* getCachedErrors() const; + + private: + error_cache_ptr error_cache_; + +}; + +} + +#endif // INPUTXSLT_SRC_SUPPORT_ERROR_ERROR_CAPACITOR_H_ -- cgit v1.2.3