diff options
author | Adrian Kummerländer | 2014-05-16 22:25:39 +0200 |
---|---|---|
committer | Adrian Kummerländer | 2014-05-16 22:25:39 +0200 |
commit | 7bd543e220c806177d805a8f4fbc13e951fe5788 (patch) | |
tree | 0fe8746d3ae922340a8fed56db7e112cd63dc811 /src | |
parent | ec6abad74348e9b577e1dd63b41d65263bb0334a (diff) | |
download | InputXSLT-7bd543e220c806177d805a8f4fbc13e951fe5788.tar InputXSLT-7bd543e220c806177d805a8f4fbc13e951fe5788.tar.gz InputXSLT-7bd543e220c806177d805a8f4fbc13e951fe5788.tar.bz2 InputXSLT-7bd543e220c806177d805a8f4fbc13e951fe5788.tar.lz InputXSLT-7bd543e220c806177d805a8f4fbc13e951fe5788.tar.xz InputXSLT-7bd543e220c806177d805a8f4fbc13e951fe5788.tar.zst InputXSLT-7bd543e220c806177d805a8f4fbc13e951fe5788.zip |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/function/base.h | 2 | ||||
-rw-r--r-- | src/function/transform.cc | 3 | ||||
-rw-r--r-- | src/function/transform.h | 3 | ||||
-rw-r--r-- | src/support/stylesheet_parameter_guard.cc | 10 | ||||
-rw-r--r-- | src/support/stylesheet_parameter_guard.h | 2 | ||||
-rw-r--r-- | src/support/tuple/mapper.h | 2 | ||||
-rw-r--r-- | src/support/tuple/xobject_value.cc | 5 | ||||
-rw-r--r-- | src/transformation_facade.cc | 10 | ||||
-rw-r--r-- | src/transformation_facade.h | 6 |
9 files changed, 35 insertions, 8 deletions
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<argument_tuple>::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 <xalanc/XalanTransformer/XalanTransformer.hpp> +#include <xalanc/XPath/XObject.hpp> #include <string> #include <unordered_map> @@ -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<std::string>(const xalan::XObjectPtr& ptr) { return toString(ptr->str()); } +template <> +xalan::XObjectPtr get<xalan::XObjectPtr>(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 @@ -42,6 +42,16 @@ int TransformationFacade::generate( 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 ) { const boost::filesystem::path targetFilePath( 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_; |