aboutsummaryrefslogtreecommitdiff
path: root/src/transformation_facade.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/transformation_facade.cc')
-rw-r--r--src/transformation_facade.cc26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/transformation_facade.cc b/src/transformation_facade.cc
index 6d7b7a3..3c94bdd 100644
--- a/src/transformation_facade.cc
+++ b/src/transformation_facade.cc
@@ -7,17 +7,33 @@
#include <sstream>
-#include "support/error/error_capacitor.h"
-
namespace InputXSLT {
+auto TransformationFacade::try_create(
+ const std::string& transformation,
+ IncludeEntityResolver* resolver,
+ const std::function<void(const ErrorCapacitor::error_cache&)>& handleErrors
+) -> ptr{
+ try {
+ return ptr(
+ new InputXSLT::TransformationFacade(transformation, resolver)
+ );
+ }
+ catch (const ErrorCapacitor::exception& exception) {
+ handleErrors(*exception);
+
+ return ptr();
+ }
+}
+
TransformationFacade::TransformationFacade(
const std::string& transformation,
IncludeEntityResolver* resolver
):
transformation_{},
transformer_(),
- error_multiplexer_(&transformer_) {
+ error_multiplexer_(&transformer_),
+ warning_capacitor_(&error_multiplexer_) {
this->transformer_.setEntityResolver(resolver);
ErrorCapacitor errorCapacitor(&this->error_multiplexer_);
@@ -36,6 +52,10 @@ TransformationFacade::~TransformationFacade() {
);
}
+WarningCapacitor::warning_cache_ptr TransformationFacade::getCachedWarnings() {
+ return this->warning_capacitor_.discharge();
+}
+
void TransformationFacade::generate(
const std::string& targetPath,
StylesheetParameterGuard& parameters