diff options
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | dummy/transform.xsl | 4 | ||||
-rw-r--r-- | src/common.h | 6 | ||||
-rw-r--r-- | src/function/read_file.cc | 20 | ||||
-rw-r--r-- | src/function/read_file.h | 8 | ||||
-rw-r--r-- | src/function/read_xml_file.cc | 11 | ||||
-rw-r--r-- | src/function/read_xml_file.h | 7 | ||||
-rw-r--r-- | src/plattform_guard.h | 4 | ||||
-rw-r--r-- | src/transformer_facade.cc (renamed from src/transformer_guard.cc) | 11 | ||||
-rw-r--r-- | src/transformer_facade.h (renamed from src/transformer_guard.h) | 13 | ||||
-rw-r--r-- | test.cc | 8 |
11 files changed, 61 insertions, 33 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 26ff8d1..4421841 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ add_executable( test test.cc src/utility.cc - src/transformer_guard.cc + src/transformer_facade.cc src/function/read_file.cc src/function/read_xml_file.cc ) diff --git a/dummy/transform.xsl b/dummy/transform.xsl index 08d005b..803e0f6 100644 --- a/dummy/transform.xsl +++ b/dummy/transform.xsl @@ -16,10 +16,10 @@ </head> <body> <div id="raw"> - <xsl:value-of select="external:read-file('../dummy/test.txt')" /> + <xsl:value-of select="external:read-file('test.txt')" /> </div> <ul> - <xsl:for-each select="external:read-xml-file('../dummy/test.txt')/tester/eintrag"> + <xsl:for-each select="external:read-xml-file('test.txt')/tester/eintrag"> <li><xsl:value-of select="."/></li> </xsl:for-each> </ul> diff --git a/src/common.h b/src/common.h new file mode 100644 index 0000000..8643eef --- /dev/null +++ b/src/common.h @@ -0,0 +1,6 @@ +#ifndef INPUTXSLT_SRC_COMMON_H_ +#define INPUTXSLT_SRC_COMMON_H_ + +namespace xalan = xalanc_1_11; + +#endif // INPUTXSLT_SRC_COMMON_H_ diff --git a/src/function/read_file.cc b/src/function/read_file.cc index efc1f61..dcbff25 100644 --- a/src/function/read_file.cc +++ b/src/function/read_file.cc @@ -1,7 +1,12 @@ #include "read_file.h" +#include "utility.h" + namespace InputXSLT { +FunctionReadFile::FunctionReadFile(const std::string& path): + path_(path) { } + xalan::XObjectPtr FunctionReadFile::execute( xalan::XPathExecutionContext& executionContext, xalan::XalanNode* context, @@ -16,20 +21,21 @@ xalan::XObjectPtr FunctionReadFile::execute( generalError(executionContext, context, locator); } - xalan::CharVectorType fileNameVector; - std::string fileNameString; + xalan::CharVectorType castHelper; + arguments[0]->str().transcode(castHelper); - arguments[0]->str().transcode(fileNameVector); + std::string fileName(this->path_); + fileName.reserve(fileName.size() + castHelper.size()); std::move( - fileNameVector.begin(), - fileNameVector.end(), - fileNameString.begin() + castHelper.begin(), + castHelper.end(), + fileName.end() ); return executionContext.getXObjectFactory().createString( xalan::XalanDOMString( - InputXSLT::readFile(fileNameString).data() + InputXSLT::readFile(fileName).data() ) ); } diff --git a/src/function/read_file.h b/src/function/read_file.h index dbcf3d6..f800c37 100644 --- a/src/function/read_file.h +++ b/src/function/read_file.h @@ -8,12 +8,16 @@ #include <xalanc/XPath/Function.hpp> #include <xalanc/XPath/XObject.hpp> -#include "utility.h" +#include <string> + +#include "common.h" namespace InputXSLT { class FunctionReadFile : public xalan::Function { public: + FunctionReadFile(const std::string&); + virtual xalan::XObjectPtr execute( xalan::XPathExecutionContext&, xalan::XalanNode*, @@ -27,6 +31,8 @@ class FunctionReadFile : public xalan::Function { bool operator==(const FunctionReadFile&) const = delete; private: + const std::string path_; + const xalan::XalanDOMString& getError(xalan::XalanDOMString&) const; }; diff --git a/src/function/read_xml_file.cc b/src/function/read_xml_file.cc index 616d189..be091a0 100644 --- a/src/function/read_xml_file.cc +++ b/src/function/read_xml_file.cc @@ -2,10 +2,12 @@ namespace InputXSLT { -FunctionReadXmlFile::FunctionReadXmlFile(): +FunctionReadXmlFile::FunctionReadXmlFile(const std::string& path): + path_(path), parser_() { } -FunctionReadXmlFile::FunctionReadXmlFile(const FunctionReadXmlFile&): +FunctionReadXmlFile::FunctionReadXmlFile(const FunctionReadXmlFile& src): + path_(src.path_), parser_() { } xalan::XObjectPtr FunctionReadXmlFile::execute( @@ -22,9 +24,12 @@ xalan::XObjectPtr FunctionReadXmlFile::execute( generalError(executionContext, context, locator); } + xalan::XalanDOMString fileName(this->path_.data()); + fileName.append(arguments[0]->str()); + return executionContext.getXObjectFactory().createNodeSet( this->parser_.parseXMLStream( - xalan::XSLTInputSource(arguments[0]->str()) + xalan::XSLTInputSource(fileName) ) ); } diff --git a/src/function/read_xml_file.h b/src/function/read_xml_file.h index 1556764..c755852 100644 --- a/src/function/read_xml_file.h +++ b/src/function/read_xml_file.h @@ -9,13 +9,15 @@ #include <xalanc/XPath/XObject.hpp> #include <xalanc/XercesParserLiaison/XercesParserLiaison.hpp> -#include "utility.h" +#include <string> + +#include "common.h" namespace InputXSLT { class FunctionReadXmlFile : public xalan::Function { public: - FunctionReadXmlFile(); + FunctionReadXmlFile(const std::string&); FunctionReadXmlFile(const FunctionReadXmlFile&); virtual xalan::XObjectPtr execute( @@ -31,6 +33,7 @@ class FunctionReadXmlFile : public xalan::Function { bool operator==(const FunctionReadXmlFile&) const = delete; private: + const std::string path_; mutable xalan::XercesParserLiaison parser_; const xalan::XalanDOMString& getError(xalan::XalanDOMString& result) const; diff --git a/src/plattform_guard.h b/src/plattform_guard.h index 9e99fdc..fe8b954 100644 --- a/src/plattform_guard.h +++ b/src/plattform_guard.h @@ -2,9 +2,11 @@ #define INPUTXSLT_SRC_PLATTFORM_GUARD_H_ #include <xalanc/Include/PlatformDefinitions.hpp> +#include <xalanc/XalanTransformer/XalanTransformer.hpp> + #include <xercesc/util/PlatformUtils.hpp> -namespace xalan = xalanc_1_11; +#include "common.h" namespace InputXSLT { diff --git a/src/transformer_guard.cc b/src/transformer_facade.cc index 73bcea2..be2a6a2 100644 --- a/src/transformer_guard.cc +++ b/src/transformer_facade.cc @@ -1,4 +1,4 @@ -#include "transformer_guard.h" +#include "transformer_facade.h" #include <xalanc/Include/PlatformDefinitions.hpp> #include <xercesc/util/PlatformUtils.hpp> @@ -16,8 +16,7 @@ namespace InputXSLT { -TransformerGuard::TransformerGuard(): - plattform_(), +TransformerFacade::TransformerFacade(const std::string& path): parser_(), transformer_() { const xalan::XalanDOMString customNamespace( @@ -27,18 +26,18 @@ TransformerGuard::TransformerGuard(): this->transformer_.installExternalFunction( customNamespace, xalan::XalanDOMString("read-file"), - InputXSLT::FunctionReadFile() + InputXSLT::FunctionReadFile(path) ); this->transformer_.installExternalFunction( customNamespace, xalan::XalanDOMString("read-xml-file"), - InputXSLT::FunctionReadXmlFile() + InputXSLT::FunctionReadXmlFile(path) ); } -int TransformerGuard::execute( +int TransformerFacade::execute( const std::string& transformation, const std::string& target ) { diff --git a/src/transformer_guard.h b/src/transformer_facade.h index 381fb94..c11fa78 100644 --- a/src/transformer_guard.h +++ b/src/transformer_facade.h @@ -1,23 +1,22 @@ -#ifndef INPUTXSLT_SRC_TRANSFORMER_GUARD_H_ -#define INPUTXSLT_SRC_TRANSFORMER_GUARD_H_ +#ifndef INPUTXSLT_SRC_TRANSFORMER_FACADE_H_ +#define INPUTXSLT_SRC_TRANSFORMER_FACADE_H_ #include <string> #include <xalanc/XalanTransformer/XalanTransformer.hpp> #include <xalanc/XercesParserLiaison/XercesParserLiaison.hpp> -#include "plattform_guard.h" +#include "common.h" namespace InputXSLT { -class TransformerGuard { +class TransformerFacade { public: - TransformerGuard(); + TransformerFacade(const std::string&); int execute(const std::string&, const std::string&); private: - const PlattformGuard plattform_; mutable xalan::XercesParserLiaison parser_; xalan::XalanTransformer transformer_; @@ -26,4 +25,4 @@ class TransformerGuard { } -#endif // INPUTXSLT_SRC_TRANSFORMER_GUARD_H_ +#endif // INPUTXSLT_SRC_TRANSFORMER_FACADE_H_ @@ -1,9 +1,11 @@ -#include "transformer_guard.h" +#include "plattform_guard.h" +#include "transformer_facade.h" int main() { - InputXSLT::TransformerGuard guard; + InputXSLT::PlattformGuard plattform; + InputXSLT::TransformerFacade transformer("../dummy/"); - return guard.execute( + return transformer.execute( "../dummy/transform.xsl", "out.xml" ); |