aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/transformation_facade.cc28
-rw-r--r--src/transformation_facade.h2
-rw-r--r--test.cc5
-rw-r--r--test/default_params/reference.xml7
-rw-r--r--test/default_params/transformation.xsl32
-rw-r--r--test/read_directory/reference.xml1
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&);
+
};
}
diff --git a/test.cc b/test.cc
index 9b978da..68b8d92 100644
--- a/test.cc
+++ b/test.cc
@@ -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>