diff options
-rw-r--r-- | src/transformation_facade.cc | 28 | ||||
-rw-r--r-- | src/transformation_facade.h | 2 | ||||
-rw-r--r-- | test.cc | 5 | ||||
-rw-r--r-- | test/default_params/reference.xml | 7 | ||||
-rw-r--r-- | test/default_params/transformation.xsl | 32 | ||||
-rw-r--r-- | test/read_directory/reference.xml | 1 |
6 files changed, 63 insertions, 12 deletions
diff --git a/src/transformation_facade.cc b/src/transformation_facade.cc index 91d761d..b411b38 100644 --- a/src/transformation_facade.cc +++ b/src/transformation_facade.cc @@ -3,6 +3,8 @@ #include <xalanc/XSLT/XSLTInputSource.hpp> #include <xalanc/XalanTransformer/XalanCompiledStylesheet.hpp> +#include "boost/filesystem.hpp" + #include <sstream> #include <iostream> @@ -24,11 +26,19 @@ TransformationFacade::~TransformationFacade() { } int TransformationFacade::generate(const std::string& target) { + const boost::filesystem::path targetFilePath( + boost::filesystem::absolute(target) + ); + + this->setParameters({ + { "target-file", targetFilePath.filename().string() }, + { "parent-directory", targetFilePath.parent_path().filename().string() } + }); + std::stringstream emptyStream("<dummy/>"); xalan::XSLTInputSource inputSource(emptyStream); xalan::XSLTResultTarget outputTarget(target.data()); - const int resultCode = this->transformer_.transform( inputSource, this->transformation_, @@ -39,6 +49,8 @@ int TransformationFacade::generate(const std::string& target) { std::cerr << this->transformer_.getLastError() << std::endl; } + this->transformer_.clearStylesheetParams(); + return resultCode; } @@ -46,18 +58,18 @@ int TransformationFacade::generate( const std::string& target, const parameter_map& parameters ) { + this->setParameters(parameters); + + return this->generate(target); +} + +void TransformationFacade::setParameters(const parameter_map& parameters) { for ( auto&& parameter : parameters ) { this->transformer_.setStylesheetParam( parameter.first.data(), - parameter.second.data() + std::string("'" + parameter.second + "'").data() ); } - - const int resultCode = this->generate(target); - - this->transformer_.clearStylesheetParams(); - - return resultCode; } } diff --git a/src/transformation_facade.h b/src/transformation_facade.h index 833016d..4dc087b 100644 --- a/src/transformation_facade.h +++ b/src/transformation_facade.h @@ -25,6 +25,8 @@ class TransformationFacade { xalan::XalanTransformer transformer_; + void setParameters(const parameter_map&); + }; } @@ -40,10 +40,7 @@ int main(int ac, char** av) { ); return transformation.generate( - variables["target"].as<std::string>(), - { - {"test", "42"} - } + variables["target"].as<std::string>() ); } else { std::cout << optionDescription << std::endl; diff --git a/test/default_params/reference.xml b/test/default_params/reference.xml new file mode 100644 index 0000000..fcdbacf --- /dev/null +++ b/test/default_params/reference.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<test_case> +<default_params> +<target_file>actual.xml</target_file> +<parent_directory>default_params</parent_directory> +</default_params> +</test_case> diff --git a/test/default_params/transformation.xsl b/test/default_params/transformation.xsl new file mode 100644 index 0000000..1bbddef --- /dev/null +++ b/test/default_params/transformation.xsl @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet + version="1.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:InputXSLT="function.inputxslt.application" + exclude-result-prefixes="InputXSLT" +> + +<xsl:output + method="xml" + omit-xml-declaration="no" + encoding="UTF-8" + indent="yes" +/> + +<xsl:param name="target-file"/> +<xsl:param name="parent-directory"/> + +<xsl:template match="/"> +<test_case> + <default_params> + <target_file> + <xsl:value-of select="$target-file"/> + </target_file> + <parent_directory> + <xsl:value-of select="$parent-directory"/> + </parent_directory> + </default_params> +</test_case> +</xsl:template> + +</xsl:stylesheet> diff --git a/test/read_directory/reference.xml b/test/read_directory/reference.xml index 7e83460..76fb84f 100644 --- a/test/read_directory/reference.xml +++ b/test/read_directory/reference.xml @@ -5,5 +5,6 @@ <item>read_xml_file</item> <item>common</item> <item>read_file</item> +<item>default_params</item> </function_read_directory> </test_case> |