aboutsummaryrefslogtreecommitdiff
path: root/src/support/error_capacitor.cc
diff options
context:
space:
mode:
authorAdrian Kummerländer2014-06-05 20:44:26 +0200
committerAdrian Kummerländer2014-06-05 20:44:26 +0200
commit78bb3387b15d15d766fb5d17a99612f0480f2bee (patch)
treec87a2516f56d7f6317a704b91b340bc14cabfd28 /src/support/error_capacitor.cc
parent11355181c0b5f8377774daefcc17bb5e6bc20f61 (diff)
downloadInputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar
InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.gz
InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.bz2
InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.lz
InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.xz
InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.tar.zst
InputXSLT-78bb3387b15d15d766fb5d17a99612f0480f2bee.zip
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
Diffstat (limited to 'src/support/error_capacitor.cc')
-rw-r--r--src/support/error_capacitor.cc133
1 files changed, 0 insertions, 133 deletions
diff --git a/src/support/error_capacitor.cc b/src/support/error_capacitor.cc
deleted file mode 100644
index e624cd1..0000000
--- a/src/support/error_capacitor.cc
+++ /dev/null
@@ -1,133 +0,0 @@
-#include "error_capacitor.h"
-
-#include <xercesc/sax/SAXParseException.hpp>
-
-#include <xalanc/PlatformSupport/DOMStringPrintWriter.hpp>
-
-#include <iostream>
-
-#include "support/xalan_string.h"
-#include "support/xerces_string_guard.h"
-
-namespace {
-
-using InputXSLT::XercesStringGuard;
-
-inline std::string getMessage(const xercesc::SAXParseException& exception) {
- return (
- std::string(*XercesStringGuard<char>(exception.getMessage()))
- + ". (Occurred in entity '"
- + std::string(*XercesStringGuard<char>(exception.getSystemId()))
- + "', at line "
- + std::to_string(exception.getLineNumber())
- + ", column "
- + std::to_string(exception.getColumnNumber())
- + ".)"
- );
-}
-
-}
-
-namespace InputXSLT {
-
-ErrorCapacitor::ErrorCapacitor(xalan::XalanTransformer* transformer):
- transformer_(transformer),
- error_cache_(new error_cache()) {
- this->transformer_->setErrorHandler(this);
- this->transformer_->setProblemListener(this);
-}
-
-ErrorCapacitor::~ErrorCapacitor() {
- this->transformer_->setErrorHandler(nullptr);
- this->transformer_->setProblemListener(nullptr);
-}
-
-void ErrorCapacitor::discharge() {
- if ( !this->error_cache_->empty() ) {
- throw exception(std::move(this->error_cache_));
- }
-}
-
-void ErrorCapacitor::warning(const xercesc::SAXParseException& exception) {
- this->error_cache_->emplace_back(
- "Warning: " + getMessage(exception)
- );
-}
-
-void ErrorCapacitor::error(const xercesc::SAXParseException& exception) {
- this->error_cache_->emplace_back(
- "Error: " + getMessage(exception)
- );
-}
-
-void ErrorCapacitor::fatalError(const xercesc::SAXParseException& exception) {
- this->error_cache_->emplace_back(
- "Fatal error: " + getMessage(exception)
- );
-}
-
-void ErrorCapacitor::resetErrors() { }
-
-void ErrorCapacitor::problem(
- xalan::ProblemListenerBase::eSource source,
- xalan::ProblemListenerBase::eClassification classification,
- const xalan::XalanDOMString& message,
- const xalan::Locator* locator,
- const xalan::XalanNode* node
-) {
- xalan::XalanDOMString problemSummary;
- xalan::DOMStringPrintWriter writer(problemSummary);
-
- defaultFormat(
- writer,
- source,
- classification,
- message,
- locator,
- node
- );
-
- this->error_cache_->emplace_back(toString(problemSummary));
-}
-
-void ErrorCapacitor::problem(
- xalan::ProblemListenerBase::eSource source,
- xalan::ProblemListenerBase::eClassification classification,
- const xalan::XalanDOMString& message,
- const xalan::XalanNode* node
-) {
- xalan::XalanDOMString problemSummary;
- xalan::DOMStringPrintWriter writer(problemSummary);
-
- defaultFormat(
- writer,
- source,
- classification,
- message,
- node
- );
-
- this->error_cache_->emplace_back(toString(problemSummary));
-}
-
-void ErrorCapacitor::problem(
- xalan::ProblemListenerBase::eSource,
- xalan::ProblemListenerBase::eClassification,
- const xalan::XalanNode*,
- const xalan::ElemTemplateElement*,
- const xalan::XalanDOMString&,
- const xalan::XalanDOMChar*,
- xalan::XalanFileLoc,
- xalan::XalanFileLoc
-) { }
-
-void ErrorCapacitor::setPrintWriter(xalan::PrintWriter*) { }
-
-ErrorCapacitor::exception::exception(error_cache_ptr ptr):
- error_cache_(std::move(ptr)) { }
-
-auto ErrorCapacitor::exception::getCachedErrors() const -> const error_cache* {
- return this->error_cache_.get();
-}
-
-}