From 7bd543e220c806177d805a8f4fbc13e951fe5788 Mon Sep 17 00:00:00 2001 From: Adrian Kummerländer Date: Fri, 16 May 2014 22:25:39 +0200 Subject: Added XObjectPtr parameter to FunctionTransform * the given XObject is passed to the called transformation ** this was done to enable templates to pass information to each other ** this should support any type usable in a XPath context to be passed as an argument * expanded FunctionTransform test case accordingly --- src/function/base.h | 2 +- src/function/transform.cc | 3 ++- src/function/transform.h | 3 ++- src/support/stylesheet_parameter_guard.cc | 10 ++++++++++ src/support/stylesheet_parameter_guard.h | 2 ++ src/support/tuple/mapper.h | 2 +- src/support/tuple/xobject_value.cc | 5 +++++ src/transformation_facade.cc | 10 ++++++++++ src/transformation_facade.h | 6 ++---- 9 files changed, 35 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/function/base.h b/src/function/base.h index b74a7d8..8145924 100644 --- a/src/function/base.h +++ b/src/function/base.h @@ -81,7 +81,7 @@ class FunctionBase : public xalan::Function { result.assign(std::string( "The function expects " + std::to_string(std::tuple_size::value) + - " argument(s) of type string." + " argument(s)" ).data()); return result; diff --git a/src/function/transform.cc b/src/function/transform.cc index be06037..4f9aecc 100644 --- a/src/function/transform.cc +++ b/src/function/transform.cc @@ -38,7 +38,8 @@ xercesc::DOMDocument* FunctionTransform::constructDocument( ); const int result = transformation.generate( - targetPath.string() + targetPath.string(), + std::get<2>(arguments) ); if ( result == 0 ) { diff --git a/src/function/transform.h b/src/function/transform.h index 2be8925..f010596 100644 --- a/src/function/transform.h +++ b/src/function/transform.h @@ -8,7 +8,8 @@ namespace InputXSLT { class FunctionTransform : public FunctionBase< FunctionTransform, std::string, - std::string + std::string, + xalan::XObjectPtr > { public: using FunctionBase::FunctionBase; diff --git a/src/support/stylesheet_parameter_guard.cc b/src/support/stylesheet_parameter_guard.cc index f82c2d5..399bccb 100644 --- a/src/support/stylesheet_parameter_guard.cc +++ b/src/support/stylesheet_parameter_guard.cc @@ -33,4 +33,14 @@ void StylesheetParameterGuard::set( ); } +void StylesheetParameterGuard::set( + const std::string& key, + const xalan::XObjectPtr& value +) { + this->transformer_.setStylesheetParam( + key.data(), + value + ); +} + } diff --git a/src/support/stylesheet_parameter_guard.h b/src/support/stylesheet_parameter_guard.h index f0622ad..7fa425e 100644 --- a/src/support/stylesheet_parameter_guard.h +++ b/src/support/stylesheet_parameter_guard.h @@ -2,6 +2,7 @@ #define INPUTXSLT_SRC_SUPPORT_STYLESHEET_PARAMETER_GUARD_H_ #include +#include #include #include @@ -24,6 +25,7 @@ class StylesheetParameterGuard { void set(const map&); void set(const std::string&, const std::string&); + void set(const std::string&, const xalan::XObjectPtr&); private: xalan::XalanTransformer& transformer_; diff --git a/src/support/tuple/mapper.h b/src/support/tuple/mapper.h index c95365e..28c5f3b 100644 --- a/src/support/tuple/mapper.h +++ b/src/support/tuple/mapper.h @@ -55,7 +55,7 @@ namespace Mapper { ) ); } -}; +} } diff --git a/src/support/tuple/xobject_value.cc b/src/support/tuple/xobject_value.cc index 3883436..fac4d96 100644 --- a/src/support/tuple/xobject_value.cc +++ b/src/support/tuple/xobject_value.cc @@ -13,6 +13,11 @@ std::string get(const xalan::XObjectPtr& ptr) { return toString(ptr->str()); } +template <> +xalan::XObjectPtr get(const xalan::XObjectPtr& ptr) { + return ptr; +} + } } diff --git a/src/transformation_facade.cc b/src/transformation_facade.cc index 698cdb1..8e99179 100644 --- a/src/transformation_facade.cc +++ b/src/transformation_facade.cc @@ -40,6 +40,16 @@ int TransformationFacade::generate( return this->generate(target, guard); } +int TransformationFacade::generate( + const std::string& target, + const xalan::XObjectPtr& argument +) { + StylesheetParameterGuard guard(this->transformer_); + guard.set("arguments", argument); + + return this->generate(target, guard); +} + int TransformationFacade::generate( const std::string& target, StylesheetParameterGuard& parameters diff --git a/src/transformation_facade.h b/src/transformation_facade.h index 3172daa..be06d07 100644 --- a/src/transformation_facade.h +++ b/src/transformation_facade.h @@ -16,10 +16,8 @@ class TransformationFacade { ~TransformationFacade(); int generate(const std::string&); - int generate( - const std::string&, - const StylesheetParameterGuard::map& - ); + int generate(const std::string&, const StylesheetParameterGuard::map&); + int generate(const std::string&, const xalan::XObjectPtr&); private: const xalan::XalanCompiledStylesheet* transformation_; -- cgit v1.2.3