<feed xmlns='http://www.w3.org/2005/Atom'>
<title>InputXSLT/src/support, branch master</title>
<subtitle>XSLT extensions for static site generation</subtitle>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/'/>
<entry>
<title>Fix std::unique_ptr custom deleter issue</title>
<updated>2020-04-25T18:42:08+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2020-04-25T18:42:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=6d353960542e5c95f29d45b9359db25945a414a4'/>
<id>6d353960542e5c95f29d45b9359db25945a414a4</id>
<content type='text'>
Somehow the previous custom deleter for xercesc::DOMDocument fails
invokable assertions planet a compiler update. A lambda function
with the same signature wors for some reason…
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Somehow the previous custom deleter for xercesc::DOMDocument fails
invokable assertions planet a compiler update. A lambda function
with the same signature wors for some reason…
</pre>
</div>
</content>
</entry>
<entry>
<title>Replaced custom `Sequence` implementation with C++14 `std::integer_sequence`</title>
<updated>2014-11-13T17:44:33+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-11-13T17:44:33+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=b9d62d5ce1e3f92a8ab34239c6e4044ad57180df'/>
<id>b9d62d5ce1e3f92a8ab34239c6e4044ad57180df</id>
<content type='text'>
* both the `Sequence` and `IndexSequence` helper templates were developed prior to C++14
* as the new standard covers exactly the functionality provided by these templates they should be replaced
** they are used as indexes to the _Xalan_ parameter array in `FunctionBase`
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* both the `Sequence` and `IndexSequence` helper templates were developed prior to C++14
* as the new standard covers exactly the functionality provided by these templates they should be replaced
** they are used as indexes to the _Xalan_ parameter array in `FunctionBase`
</pre>
</div>
</content>
</entry>
<entry>
<title>Removed unnecessary `inline` declarations</title>
<updated>2014-11-09T11:00:22+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-11-09T11:00:22+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=aa7afee1047a2de790a70dceda9079c8d5d01850'/>
<id>aa7afee1047a2de790a70dceda9079c8d5d01850</id>
<content type='text'>
* e.g. member functions defined in the class definition are implicitly marked `inline`
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* e.g. member functions defined in the class definition are implicitly marked `inline`
</pre>
</div>
</content>
</entry>
<entry>
<title>Changed FunctionBase FilesystemContext base to working directory</title>
<updated>2014-10-11T21:18:05+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-10-11T21:18:05+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=3c166ed07051b78bfcd40c7cabc376060cd96eb9'/>
<id>3c166ed07051b78bfcd40c7cabc376060cd96eb9</id>
<content type='text'>
* this changes filesystem context resolution for external function execution to be relative to the working directory
** this was changed to enable module support in BuildXSLT
*** ... which is in turn required as a foundation for extracting the detail transformations into a separate "StaticXSLT" application
* added parameter-less FilesystemContext constructor which defaults to the working directory
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* this changes filesystem context resolution for external function execution to be relative to the working directory
** this was changed to enable module support in BuildXSLT
*** ... which is in turn required as a foundation for extracting the detail transformations into a separate "StaticXSLT" application
* added parameter-less FilesystemContext constructor which defaults to the working directory
</pre>
</div>
</content>
</entry>
<entry>
<title>Switched member initialization to std::make_unique</title>
<updated>2014-09-14T17:49:15+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-09-14T17:49:15+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=8ebea90f5cee70654ab9f1c19ed4f89dfc8ffb25'/>
<id>8ebea90f5cee70654ab9f1c19ed4f89dfc8ffb25</id>
<content type='text'>
* i.e. InputXSLT now requires a C++14 supporting compiler / standard library implementation
* this was done while enabling the StreamInputSource to handle all kinds of streams
** this in turn is required to enable e.g. stdin as transformation source while preserving the correct filesystem context
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* i.e. InputXSLT now requires a C++14 supporting compiler / standard library implementation
* this was done while enabling the StreamInputSource to handle all kinds of streams
** this in turn is required to enable e.g. stdin as transformation source while preserving the correct filesystem context
</pre>
</div>
</content>
</entry>
<entry>
<title>Added prefix to system ID of node-based XSLTInputSource instances</title>
<updated>2014-09-04T21:32:10+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-09-04T21:32:10+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=216fcea2c8b52a5657d879628a27a76cb1fef2e3'/>
<id>216fcea2c8b52a5657d879628a27a76cb1fef2e3</id>
<content type='text'>
* otherwise include entity resolution fails for node-based xalan::XSLTInputSource instances instantiated by the XObjectValue class
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* otherwise include entity resolution fails for node-based xalan::XSLTInputSource instances instantiated by the XObjectValue class
</pre>
</div>
</content>
</entry>
<entry>
<title>Replaced FunctionTransform by making the target of FunctionGenerate optional</title>
<updated>2014-08-22T22:19:09+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-08-22T22:19:09+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=5a54b5b8150d8bf1ac5db3ac688479b3aca6486d'/>
<id>5a54b5b8150d8bf1ac5db3ac688479b3aca6486d</id>
<content type='text'>
* if the target parameter is not provided FunctionGenerate now performs exactly the same functionality as FunctionTransform
* added "boost::optional&lt;boost::filesystem::path&gt;" specialization to the XObjectValue class
* modified test cases accordingly
* modified README.md accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* if the target parameter is not provided FunctionGenerate now performs exactly the same functionality as FunctionTransform
* added "boost::optional&lt;boost::filesystem::path&gt;" specialization to the XObjectValue class
* modified test cases accordingly
* modified README.md accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Setting the correct work directory in FunctionExternalCommand</title>
<updated>2014-08-20T20:28:15+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-08-20T20:28:15+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=2c89112141530617b51af8c41211c2507ec8c738'/>
<id>2c89112141530617b51af8c41211c2507ec8c738</id>
<content type='text'>
* changed the XObjectValue constructor to accept a pointer to FilesystemContext instead of instantiating the context by itself
* the FilesystemContext is now instantiated in the "callConstructDocument" member method of "FunctionBase"
** a const reference to FilesystemContext is passed to all "constructDocument" member method implementations
* the FilesystemContext is currently only used by FunctionExternal command to set the correct work directory in "boost::process::context"
** this is required so calling external commands from inside a stylesheet works as expected
*** i.e. from inside the directory the stylesheet is located in
* modified all remaining external function implementations accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* changed the XObjectValue constructor to accept a pointer to FilesystemContext instead of instantiating the context by itself
* the FilesystemContext is now instantiated in the "callConstructDocument" member method of "FunctionBase"
** a const reference to FilesystemContext is passed to all "constructDocument" member method implementations
* the FilesystemContext is currently only used by FunctionExternal command to set the correct work directory in "boost::process::context"
** this is required so calling external commands from inside a stylesheet works as expected
*** i.e. from inside the directory the stylesheet is located in
* modified all remaining external function implementations accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed minimum parameter count calculation</title>
<updated>2014-08-17T11:32:22+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-08-17T11:32:22+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=8ed33c3e9e2648a5a0150c05e06c228336e9e9d6'/>
<id>8ed33c3e9e2648a5a0150c05e06c228336e9e9d6</id>
<content type='text'>
* the minimum count of parameters to a external function is the maximum parameter count minus all optional parameters
* updated error message of "FunctionBase" member method "getError" to reflect the newly implemented possibility of optional parameters
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* the minimum count of parameters to a external function is the maximum parameter count minus all optional parameters
* updated error message of "FunctionBase" member method "getError" to reflect the newly implemented possibility of optional parameters
</pre>
</div>
</content>
</entry>
<entry>
<title>Implemented primitive optional parameter support for external functions</title>
<updated>2014-08-16T21:30:36+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-08-16T21:30:36+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=f6ff54c492df81018cf48da039ee681508f88e46'/>
<id>f6ff54c492df81018cf48da039ee681508f88e46</id>
<content type='text'>
* renamed FunctionExternalTextFormatter into FunctionExternalCommand
** the goal is to provide a general interface to a variety of external commands
*** e.g. not just text formatters but system utilities for file management and so on
** this requires the stdin parameter to be optional as not all external commands require stdin input
* implemented "filter_derived" helper template to determine amount of optional parameters
** optional parameters are defined as "boost::optional" specializations
*** they in turn can be detected by checking if "boost::optional_detail::optional_tag" is a base class
* "callConstructDocument" member method of "FunctionBase" performs additional bounds checking of parameter vector
* "boost::optional&lt;std::string&gt;" specific member overload was added to "XObjectValue" helper class
** we will have to provide full specializations for all optional types as C++ prohibits partial member function template specialization
* renamed the external function in "PlattformGuard"
* changed README.md and test cases accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* renamed FunctionExternalTextFormatter into FunctionExternalCommand
** the goal is to provide a general interface to a variety of external commands
*** e.g. not just text formatters but system utilities for file management and so on
** this requires the stdin parameter to be optional as not all external commands require stdin input
* implemented "filter_derived" helper template to determine amount of optional parameters
** optional parameters are defined as "boost::optional" specializations
*** they in turn can be detected by checking if "boost::optional_detail::optional_tag" is a base class
* "callConstructDocument" member method of "FunctionBase" performs additional bounds checking of parameter vector
* "boost::optional&lt;std::string&gt;" specific member overload was added to "XObjectValue" helper class
** we will have to provide full specializations for all optional types as C++ prohibits partial member function template specialization
* renamed the external function in "PlattformGuard"
* changed README.md and test cases accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Reduced FilesystemContext's determination to resolve into absolute paths</title>
<updated>2014-08-09T11:47:39+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-08-09T11:47:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=97b17caeeb8512e2af332d7095fca4cad160a980'/>
<id>97b17caeeb8512e2af332d7095fca4cad160a980</id>
<content type='text'>
* FilesystemContext was returning absolute paths in nearly every situation
** even when a path relative to the current working directory might be easier on the eyes
* new _soft_ base path resolution logic is implemented in a local "determineBasePath" method
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* FilesystemContext was returning absolute paths in nearly every situation
** even when a path relative to the current working directory might be easier on the eyes
* new _soft_ base path resolution logic is implemented in a local "determineBasePath" method
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed node list iteration in ResultNodeFacade</title>
<updated>2014-08-06T20:59:54+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-08-06T20:59:54+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=5a38b9e11236c71245ca0609b54157630347e393'/>
<id>5a38b9e11236c71245ca0609b54157630347e393</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Set SystemId for node based xalan::XSLTInputSource parameters</title>
<updated>2014-07-18T21:57:17+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-18T21:57:17+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=dfa53577fcf7345e67485e71ecc20ec82f9dd521'/>
<id>dfa53577fcf7345e67485e71ecc20ec82f9dd521</id>
<content type='text'>
* entities in transformations passed by DOM to FunctionGenerate or FunctionTransform require a valid system id as a FilesystemContext base to be resolved
* added getBase member method to FilesystemContext
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* entities in transformations passed by DOM to FunctionGenerate or FunctionTransform require a valid system id as a FilesystemContext base to be resolved
* added getBase member method to FilesystemContext
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed base path resolution of include path entities</title>
<updated>2014-07-13T19:47:16+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-13T19:47:16+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=f69c1e4e774ee6db9c9551ec7a6a32c840686f18'/>
<id>f69c1e4e774ee6db9c9551ec7a6a32c840686f18</id>
<content type='text'>
* the base path of entities resolved through square bracket include paths was not resolved correctly due to missing extraction
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* the base path of entities resolved through square bracket include paths was not resolved correctly due to missing extraction
</pre>
</div>
</content>
</entry>
<entry>
<title>Added DomDocumentCache::createDocument overload enabling document naming</title>
<updated>2014-07-09T17:59:32+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-09T17:59:32+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=1fbf6a39784b57925ab19df579f487a338e22ba5'/>
<id>1fbf6a39784b57925ab19df579f487a338e22ba5</id>
<content type='text'>
* previous createDocument method used default name "content"
** this led to problems when using xalan::XalanNode as transformation input
** the parameter-less createDocument overload now creates a unnamed xercesc::DOMDocument
* changed external function implementations accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* previous createDocument method used default name "content"
** this led to problems when using xalan::XalanNode as transformation input
** the parameter-less createDocument overload now creates a unnamed xercesc::DOMDocument
* changed external function implementations accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed entity resolution bug concerning non-include paths</title>
<updated>2014-07-08T13:05:25+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-08T13:05:25+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=fcc2f8ee41d6793411a2321e6b0ac46cb5ba23ee'/>
<id>fcc2f8ee41d6793411a2321e6b0ac46cb5ba23ee</id>
<content type='text'>
* paths that can not be resolved against the include-path vector were passed on as they were instead of first removing the "file://" prefix
* this caused all normal entity paths passed to "xsl:import" and "xsl:include" statements to be unresolvable
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* paths that can not be resolved against the include-path vector were passed on as they were instead of first removing the "file://" prefix
* this caused all normal entity paths passed to "xsl:import" and "xsl:include" statements to be unresolvable
</pre>
</div>
</content>
</entry>
<entry>
<title>Added ResultNodeFacade constructor overload for root nodes</title>
<updated>2014-07-08T12:06:47+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-08T12:06:47+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=716958c6acb77f4f63cc6f99d741fe0a901a25ba'/>
<id>716958c6acb77f4f63cc6f99d741fe0a901a25ba</id>
<content type='text'>
* the common use case of ResultNodeFacade inside external function implementations is managing the result root node
** this root node can be fetched through the xercesc::DOMDocument instance
** the new alias overload automatically fetches the root node pointer and as such doesn't require a root node parameter
* changed external function implementations accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* the common use case of ResultNodeFacade inside external function implementations is managing the result root node
** this root node can be fetched through the xercesc::DOMDocument instance
** the new alias overload automatically fetches the root node pointer and as such doesn't require a root node parameter
* changed external function implementations accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Implemented custom xercesc::DOMDocument deleter</title>
<updated>2014-07-07T20:25:03+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-07T20:25:03+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=8f05c7de54336daefb214a754de35367098b6510'/>
<id>8f05c7de54336daefb214a754de35367098b6510</id>
<content type='text'>
* pointers to xercesc::DOMDocument were manually released
** this is now solved using a custom deleter for the appropriate std::unqiue_ptr template specialization
* added matching factory method to DomDocumentCache
* updated external function implementations accordingly
** "constructDocument" is now expected to return a DomDocumentCache::document_ptr instance
* updated TransformerFacade accordingly
* this change was implemented to get rid of the manual memory management required by xalan / xerces
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* pointers to xercesc::DOMDocument were manually released
** this is now solved using a custom deleter for the appropriate std::unqiue_ptr template specialization
* added matching factory method to DomDocumentCache
* updated external function implementations accordingly
** "constructDocument" is now expected to return a DomDocumentCache::document_ptr instance
* updated TransformerFacade accordingly
* this change was implemented to get rid of the manual memory management required by xalan / xerces
</pre>
</div>
</content>
</entry>
<entry>
<title>Revamped implementation to support FunctionTransform XalanNode input</title>
<updated>2014-07-05T19:55:48+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-05T19:55:48+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2'/>
<id>a02dce3c8e6086acbfe9c57c3ee4bb386bfbebc2</id>
<content type='text'>
* FunctionTransform now accepts xalan::XalanNode base xalan::XSLTInputSource instances as input parameter
** such xalan::XSLTInputSource instances were already supported for the stylesheet parameter but not for the input parameter
** e.g. it is now possible to generate a DOM inside a transformation, pass the DOM into a embedded transformation as input, modifiy the output of that transformation, pass this modified DOM into another transformation and so on... you get the point
* this required a revamp of TransformationFacade
** it is now a transformation independent wrapper for xalan::XalanTransformer
*** as such is was renamed to TransformerFacade
** removed error catching template factory method "try_create" as it is not needed anymore
** "std::basic_ostream&lt;char&gt;&amp;" taking "generate" member method overloads were removed
** the set of "generate" member overloads was reduced to two methods accepting xalan::XSLTInputSource and xalan::FormatterListener as parameters
* the core problem first documented in 299d0f6 was solved by transforming the input parameter into a xerces DOM and wrapping this DOM inside a xalan::XercesDOMWrapperParsedSource instance
* serialization of the transformation result for file / std::cout output is now performed directly by the ixslt frontend
* removed 'stylesheet parameter' parameter from FunctionTransform
** the functionality provided by this is easily replicated using the now possible DOM input parameter
** this was done to simplify the interface and reduce unnecessary feature duplication
* updated FunctionTransform test case accordingly
* added "generate" template function to ixslt frontend
** wraps TransformerFacade and manages ist input arguments
** handles serialization to stream
* this commit marks a important milestone towards the goals defined in 741a70f
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* FunctionTransform now accepts xalan::XalanNode base xalan::XSLTInputSource instances as input parameter
** such xalan::XSLTInputSource instances were already supported for the stylesheet parameter but not for the input parameter
** e.g. it is now possible to generate a DOM inside a transformation, pass the DOM into a embedded transformation as input, modifiy the output of that transformation, pass this modified DOM into another transformation and so on... you get the point
* this required a revamp of TransformationFacade
** it is now a transformation independent wrapper for xalan::XalanTransformer
*** as such is was renamed to TransformerFacade
** removed error catching template factory method "try_create" as it is not needed anymore
** "std::basic_ostream&lt;char&gt;&amp;" taking "generate" member method overloads were removed
** the set of "generate" member overloads was reduced to two methods accepting xalan::XSLTInputSource and xalan::FormatterListener as parameters
* the core problem first documented in 299d0f6 was solved by transforming the input parameter into a xerces DOM and wrapping this DOM inside a xalan::XercesDOMWrapperParsedSource instance
* serialization of the transformation result for file / std::cout output is now performed directly by the ixslt frontend
* removed 'stylesheet parameter' parameter from FunctionTransform
** the functionality provided by this is easily replicated using the now possible DOM input parameter
** this was done to simplify the interface and reduce unnecessary feature duplication
* updated FunctionTransform test case accordingly
* added "generate" template function to ixslt frontend
** wraps TransformerFacade and manages ist input arguments
** handles serialization to stream
* this commit marks a important milestone towards the goals defined in 741a70f
</pre>
</div>
</content>
</entry>
<entry>
<title>Changed FunctionTransform result type to node-set</title>
<updated>2014-07-04T20:41:17+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-07-04T20:41:17+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=f05e742b88e3ebf7401c252332022f1a2f7eb8b0'/>
<id>f05e742b88e3ebf7401c252332022f1a2f7eb8b0</id>
<content type='text'>
* using xalan::FormatterToXercesDOM internally
** this required changes to the TransformationFacade::generate member method overloads
* TransformationFacade::generate now accepts references to xalan::FormatterListener instances
** "generate(std::basic_ostream&lt;char&gt;&amp;..." instantiates a xalan::FormatterToXML and passes it to the actual generate member method
* changed ResultNodeFacade's "getNode" method into a "getResultElement" method
** xalan::FormatterToXercesDOM requires a xercesc::DOMElement instance instead of the previously available xercesc::DOMNode instance
** changed FunctionReadDirectory accordingly
* adapted FunctionTransform test case accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* using xalan::FormatterToXercesDOM internally
** this required changes to the TransformationFacade::generate member method overloads
* TransformationFacade::generate now accepts references to xalan::FormatterListener instances
** "generate(std::basic_ostream&lt;char&gt;&amp;..." instantiates a xalan::FormatterToXML and passes it to the actual generate member method
* changed ResultNodeFacade's "getNode" method into a "getResultElement" method
** xalan::FormatterToXercesDOM requires a xercesc::DOMElement instance instead of the previously available xercesc::DOMNode instance
** changed FunctionReadDirectory accordingly
* adapted FunctionTransform test case accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Switched FunctionWriteFile content parameter to xalan::XalanNode pointer</title>
<updated>2014-06-29T18:36:28+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-06-29T18:36:28+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=bd39d49464dbd17eb3d4cdbb5784431e43e56fbf'/>
<id>bd39d49464dbd17eb3d4cdbb5784431e43e56fbf</id>
<content type='text'>
* i.e. "write-file" now supports the serialization of given DOM structures
** this will be needed e.g. if FunctionTransform returns the result as a DOM tree instead of as a plain string
** enables the creation of multiple XML documents from within a single transformation
*** i.e. backports the functionality provided in XSLT 2.0 by "xsl:result-document" to xalan's XSLT 1.0
* changed test cases accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* i.e. "write-file" now supports the serialization of given DOM structures
** this will be needed e.g. if FunctionTransform returns the result as a DOM tree instead of as a plain string
** enables the creation of multiple XML documents from within a single transformation
*** i.e. backports the functionality provided in XSLT 2.0 by "xsl:result-document" to xalan's XSLT 1.0
* changed test cases accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Added support for resolving non-existing paths</title>
<updated>2014-06-25T18:23:35+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-06-25T18:23:35+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=7b872121000d4db4026d0c90fcb95a10f1e43694'/>
<id>7b872121000d4db4026d0c90fcb95a10f1e43694</id>
<content type='text'>
* previous logic for resolving boost::filesystem::path parameters in the XObjectValue class actively tried to resolve existing files
** this contradicts the planned introduction of e.g. a external "write-file" function
* callers of external functions with path arguments now have to enclose them in square brackets if include path resolution is required
** analog to the usage of the "xsl:import" tag
* moved "getPathFromSystemId" from compilation local method into static method of IncludeEntityResolver
* changed test cases accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* previous logic for resolving boost::filesystem::path parameters in the XObjectValue class actively tried to resolve existing files
** this contradicts the planned introduction of e.g. a external "write-file" function
* callers of external functions with path arguments now have to enclose them in square brackets if include path resolution is required
** analog to the usage of the "xsl:import" tag
* moved "getPathFromSystemId" from compilation local method into static method of IncludeEntityResolver
* changed test cases accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Added context awareness to XObjectValue casting logic</title>
<updated>2014-06-17T19:28:04+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-06-17T19:28:04+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=0d670478b51c55e44f57995fe3ca8a4585723a6c'/>
<id>0d670478b51c55e44f57995fe3ca8a4585723a6c</id>
<content type='text'>
* added support for defining boost::filesystem::path as a external function parameter
** boost::filesystem::path parameters are resolved against the appropriate FilesystemContext and IncludeEntityResolver instances
* xalan::XSLTInputSource parameter source paths are also resolved
* removed need for passing a reference FilesystemContext to "constructDocument" methods
** they now only accept the parameters of the external function implemented by them
** all path resolution logic is wrapped by the newly created XObjectValue class
* converted XObjectValue namespace into class
** the "get" template method is now a template member method
** this was needed to enable value casting logic to access the appropriate FilesystemContext and IncludeEntityResolver instances
* this commit marks the next step towards the goals defined in 741a70f
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* added support for defining boost::filesystem::path as a external function parameter
** boost::filesystem::path parameters are resolved against the appropriate FilesystemContext and IncludeEntityResolver instances
* xalan::XSLTInputSource parameter source paths are also resolved
* removed need for passing a reference FilesystemContext to "constructDocument" methods
** they now only accept the parameters of the external function implemented by them
** all path resolution logic is wrapped by the newly created XObjectValue class
* converted XObjectValue namespace into class
** the "get" template method is now a template member method
** this was needed to enable value casting logic to access the appropriate FilesystemContext and IncludeEntityResolver instances
* this commit marks the next step towards the goals defined in 741a70f
</pre>
</div>
</content>
</entry>
<entry>
<title>Prepared TransformationFacade and FunctionTransform for parameter change</title>
<updated>2014-06-16T21:01:23+00:00</updated>
<author>
<name>Adrian Kummerlaender</name>
</author>
<published>2014-06-16T21:01:23+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=741a70f5fecc38033832728f4ecc62a6abe328b2'/>
<id>741a70f5fecc38033832728f4ecc62a6abe328b2</id>
<content type='text'>
* FunctionTransform was adapted to support passing the transformation as either a string path or directly as a node-set / result-tree
** this in turn required changes to the TransformationFacade
** the implementation of a xalan::XSLTInputSource specialization for the XObjectValue::get template method was also required
* changed ixslt executable to match TransformationFacade constructor changes
* these changes were implemented in preparation for a restructuring of how the separate external functions provided by InputXSLT operate and work together
** the approach up until now was to provide non-combinable external functions for distinct task such as "read a file" and "transform that transformation using these parameters into that file"
** if you think about the areas of operations of these functions are overlapping quite a bit
*** e.g. FunctionTransform reads files, transforms DOM structures and writes files instead of only transforming things
** the new approach will be to limit the feature set of each function in the attempt of making the clearer and increasing their combinability
*** e.g. FunctionTransform won't read or write files but expect both the input-DOM and the transformation-DOM as node-sets or result trees and return the transformed document as a node-set to be written using FunctionWriteFile (to be implemented)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* FunctionTransform was adapted to support passing the transformation as either a string path or directly as a node-set / result-tree
** this in turn required changes to the TransformationFacade
** the implementation of a xalan::XSLTInputSource specialization for the XObjectValue::get template method was also required
* changed ixslt executable to match TransformationFacade constructor changes
* these changes were implemented in preparation for a restructuring of how the separate external functions provided by InputXSLT operate and work together
** the approach up until now was to provide non-combinable external functions for distinct task such as "read a file" and "transform that transformation using these parameters into that file"
** if you think about the areas of operations of these functions are overlapping quite a bit
*** e.g. FunctionTransform reads files, transforms DOM structures and writes files instead of only transforming things
** the new approach will be to limit the feature set of each function in the attempt of making the clearer and increasing their combinability
*** e.g. FunctionTransform won't read or write files but expect both the input-DOM and the transformation-DOM as node-sets or result trees and return the transformed document as a node-set to be written using FunctionWriteFile (to be implemented)
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed include entity resolution logic</title>
<updated>2014-06-11T16:33:15+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-06-11T16:33:15+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=2b484dc0d93e7577ceb153fb8c6114aaaa03d79a'/>
<id>2b484dc0d93e7577ceb153fb8c6114aaaa03d79a</id>
<content type='text'>
* if a square bracket enclosed path can be extracted but not resolved against the include path vector we should return at least the extracted path and not the raw path
* otherwise the system has no chance of correctly resolving things
** additionally error messages were showing the square bracket syntax instead of the actual path
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* if a square bracket enclosed path can be extracted but not resolved against the include path vector we should return at least the extracted path and not the raw path
* otherwise the system has no chance of correctly resolving things
** additionally error messages were showing the square bracket syntax instead of the actual path
</pre>
</div>
</content>
</entry>
<entry>
<title>Added include path resolution to FilesystemContext constructor</title>
<updated>2014-06-09T12:24:26+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-06-09T12:24:26+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=516ff636f760458c33676458fc88892faab9d376'/>
<id>516ff636f760458c33676458fc88892faab9d376</id>
<content type='text'>
* extracted system id handling into separate "resolve" method overload of "IncludeEntityResolver" class
* paths to be resolved against the include path vector are enclosed by square brackets
** FilesystemContext for external functions was instantiated using the unmodified systemId provided by xalan::Locator
** this commit adds include path resolution to that step
*** exceptions were thrown as the program tried to instantiate a FilesystemContext instance without resolving the square bracket syntax
* changed FunctionTransform "target" attribute content to the target path filename instead of the full path
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* extracted system id handling into separate "resolve" method overload of "IncludeEntityResolver" class
* paths to be resolved against the include path vector are enclosed by square brackets
** FilesystemContext for external functions was instantiated using the unmodified systemId provided by xalan::Locator
** this commit adds include path resolution to that step
*** exceptions were thrown as the program tried to instantiate a FilesystemContext instance without resolving the square bracket syntax
* changed FunctionTransform "target" attribute content to the target path filename instead of the full path
</pre>
</div>
</content>
</entry>
<entry>
<title>Provided previously missing Sequence template implementation</title>
<updated>2014-06-07T15:38:53+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-06-07T15:38:53+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=49e2010b489ab6d5516a9abd896c67738e0dc1cc'/>
<id>49e2010b489ab6d5516a9abd896c67738e0dc1cc</id>
<content type='text'>
* implemented for commit 5f6fc45 but not included into that commit
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* implemented for commit 5f6fc45 but not included into that commit
</pre>
</div>
</content>
</entry>
<entry>
<title>Improved FunctionBase constructDocument parameter propagation</title>
<updated>2014-06-07T15:24:44+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-06-07T15:24:44+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=5f6fc45749b99e9013f04c95a525f2d627db01bf'/>
<id>5f6fc45749b99e9013f04c95a525f2d627db01bf</id>
<content type='text'>
* replaced std::tuple constructing Mapper template methods with direct XObjectArgVectorType unpacking
** XObjectValue::get template method is applied directly using parameter pack unpacking
* implemented custom IndexSequence / Sequence type to provide vector indexes
* modified all external functions to provide matching constructDocument overloads
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* replaced std::tuple constructing Mapper template methods with direct XObjectArgVectorType unpacking
** XObjectValue::get template method is applied directly using parameter pack unpacking
* implemented custom IndexSequence / Sequence type to provide vector indexes
* modified all external functions to provide matching constructDocument overloads
</pre>
</div>
</content>
</entry>
<entry>
<title>Implemented WarningCapacitor as a counterpart to ErrorCapacitor</title>
<updated>2014-06-06T20:00:39+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-06-06T20:00:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=272b34c1a4639cd0f909bfb52d30339c93b0c42b'/>
<id>272b34c1a4639cd0f909bfb52d30339c93b0c42b</id>
<content type='text'>
* in difference to ErrorCapacitor this class doesn't throw an exception on "discharge" but returns the gathered warnings
* adapted FunctionTransform and frontend error handling to include warnings
* added static "try_create" method to TransformationFacade
** wraps construction error handling
** custom logic may be embedded using the std::function argument
*** this was implemented to prevent unneccessary code duplication for handling both construction and generation errors
* adapted FunctionTransform to return warning as "warning" nodes in the result tree
** added functional lambda expression factory method "handleErrors"
*** returns a error handling lambda expression for a given ResultNodeFacade
* implemented WarningGuard class in frontend executable
** guarantees warnings to be printed to std::cerr independent of any exceptions
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* in difference to ErrorCapacitor this class doesn't throw an exception on "discharge" but returns the gathered warnings
* adapted FunctionTransform and frontend error handling to include warnings
* added static "try_create" method to TransformationFacade
** wraps construction error handling
** custom logic may be embedded using the std::function argument
*** this was implemented to prevent unneccessary code duplication for handling both construction and generation errors
* adapted FunctionTransform to return warning as "warning" nodes in the result tree
** added functional lambda expression factory method "handleErrors"
*** returns a error handling lambda expression for a given ResultNodeFacade
* implemented WarningGuard class in frontend executable
** guarantees warnings to be printed to std::cerr independent of any exceptions
</pre>
</div>
</content>
</entry>
<entry>
<title>Implemented ErrorMultiplexer as primary error handler</title>
<updated>2014-06-05T18:44:26+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-06-05T18:44:26+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=78bb3387b15d15d766fb5d17a99612f0480f2bee'/>
<id>78bb3387b15d15d766fb5d17a99612f0480f2bee</id>
<content type='text'>
* ErrorMultiplexer is derived from both xercesc::ErrorHandler and xalan::ProblemListener
* registers itself as XalanTransformer's ErrorHandler and ProblemListener
* distributes captured errors and warnings to all registered ErrorMultiplexer::Receiver instances
** ErrorCapacitor implements the ErrorMultiplexer::Receiver interface and as such registers itself in a given ErrorMultiplexer instance
** ErrorMultiplexer reduces the different xalan and xercesc internal error classifications into either warnings or errors
* this was implemented to make it possible to easily differentiate between warnings and errors
** previously warnings were treated as errors
** ErrorCapacitor ignores warnings and only captures errors
** WarningCapacitor will be implemented to handle warnings during XSLT processing
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* ErrorMultiplexer is derived from both xercesc::ErrorHandler and xalan::ProblemListener
* registers itself as XalanTransformer's ErrorHandler and ProblemListener
* distributes captured errors and warnings to all registered ErrorMultiplexer::Receiver instances
** ErrorCapacitor implements the ErrorMultiplexer::Receiver interface and as such registers itself in a given ErrorMultiplexer instance
** ErrorMultiplexer reduces the different xalan and xercesc internal error classifications into either warnings or errors
* this was implemented to make it possible to easily differentiate between warnings and errors
** previously warnings were treated as errors
** ErrorCapacitor ignores warnings and only captures errors
** WarningCapacitor will be implemented to handle warnings during XSLT processing
</pre>
</div>
</content>
</entry>
<entry>
<title>Expanded ErrorCapacitor error message generation</title>
<updated>2014-06-02T20:28:39+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-06-02T20:28:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=533ebc587ee2b4e8e3c77b8ecd10056670483754'/>
<id>533ebc587ee2b4e8e3c77b8ecd10056670483754</id>
<content type='text'>
* added entity, line and column information
* formatting analog to ErrorCapacitor warning messages
** i.e. this commit implements functionality similar to "xalanc::ProblemListenerBase::defaultFormat" for "xercesc::ErrorHandler" exceptions
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* added entity, line and column information
* formatting analog to ErrorCapacitor warning messages
** i.e. this commit implements functionality similar to "xalanc::ProblemListenerBase::defaultFormat" for "xercesc::ErrorHandler" exceptions
</pre>
</div>
</content>
</entry>
<entry>
<title>Revamped external function result trees</title>
<updated>2014-05-31T12:18:48+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-31T12:18:48+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=1a744712426c9c19019b8ebebdd0c703aae204a6'/>
<id>1a744712426c9c19019b8ebebdd0c703aae204a6</id>
<content type='text'>
* the root node of the result tree of each function is a domain element
** i.e. the root node of "read-xml-file" is "file", the root node of "read-directory" is "directory"
* the root node contains the result state of the function call encoded in a "result" attribute
** possible values are "success" and "error"
** the root node may contain additional attributes such as the target path of a called transformation
* the actual function result is contained within the child nodes of the function root node
** i.e. the XML file tree returned by "read-xml-file" is a child of the function root node
** if specific errors occured they are also returned as child nodes of the function root node
*** this is currently only the case for "transform" where transformation errors are returned as "error" value node childs of the function root node
* updated test cases accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* the root node of the result tree of each function is a domain element
** i.e. the root node of "read-xml-file" is "file", the root node of "read-directory" is "directory"
* the root node contains the result state of the function call encoded in a "result" attribute
** possible values are "success" and "error"
** the root node may contain additional attributes such as the target path of a called transformation
* the actual function result is contained within the child nodes of the function root node
** i.e. the XML file tree returned by "read-xml-file" is a child of the function root node
** if specific errors occured they are also returned as child nodes of the function root node
*** this is currently only the case for "transform" where transformation errors are returned as "error" value node childs of the function root node
* updated test cases accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Using xalan::ProblemListenerBase formatting functionality in ErrorCapacitor</title>
<updated>2014-05-31T08:44:23+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-31T08:44:23+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=d5367d268e8f2be9dd519b3b90f7baa64d6d50b7'/>
<id>d5367d268e8f2be9dd519b3b90f7baa64d6d50b7</id>
<content type='text'>
* xalan::ProblemListenerBase provides a static member method called "defaultFormat"
** this method provides formatting of problem messages into xalan::XalanDOMString instances when combined with xalan::DOMStringPrintWriter
* there is no need for implementing custom message formatting
** the only reason why ErrorCapacitor exists is so we are able to capture and print messages at our own volition
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* xalan::ProblemListenerBase provides a static member method called "defaultFormat"
** this method provides formatting of problem messages into xalan::XalanDOMString instances when combined with xalan::DOMStringPrintWriter
* there is no need for implementing custom message formatting
** the only reason why ErrorCapacitor exists is so we are able to capture and print messages at our own volition
</pre>
</div>
</content>
</entry>
<entry>
<title>Rewrote error handling based on exceptions</title>
<updated>2014-05-30T20:19:32+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-30T20:19:32+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=79d3e2bdfd441d6eba2f22af78d5bea5e488daf1'/>
<id>79d3e2bdfd441d6eba2f22af78d5bea5e488daf1</id>
<content type='text'>
* ErrorHandler is replaced by ErrorCapacitor
** temporarily registers itself as both the ProblemListener and ErrorHandler of a given XalanTransformer instance
** deregisters itself on destruction
** collects all problems and errors during its lifetime inside a internal std::vector&lt;std::string&gt; instance
** if this instance is not empty it is thrown contained within a ErrorCapacitor::exception by the member method ErrorCapacitor::discharge
* this enables using the same code for handling transformation compilation and generation errors and problems
* updated test frontend accordingly
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* ErrorHandler is replaced by ErrorCapacitor
** temporarily registers itself as both the ProblemListener and ErrorHandler of a given XalanTransformer instance
** deregisters itself on destruction
** collects all problems and errors during its lifetime inside a internal std::vector&lt;std::string&gt; instance
** if this instance is not empty it is thrown contained within a ErrorCapacitor::exception by the member method ErrorCapacitor::discharge
* this enables using the same code for handling transformation compilation and generation errors and problems
* updated test frontend accordingly
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixed error handling of invalid XSL transformations</title>
<updated>2014-05-29T21:01:36+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-29T21:01:36+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=e402a092a5e2fbf624947896b013d405efb75049'/>
<id>e402a092a5e2fbf624947896b013d405efb75049</id>
<content type='text'>
* xalan is segfaulting in XalanDOMString constructor when the static member "XalanLocator::getSystemId" is returning null-pointer
** this should seemingly be handled by passing a pointer to the static constant m_dummy but this sadly fails to prevent the segfault
** the patch provided by this commit fixes the problem for now but I cannot guarantee that this wont cause any side effects in a other context
* Adapted TransformationFacade to handle errors during transformation compilation
** errors generated during transformation compilation are returned through the generate member method
** throwing an exeception during TransformationFacade construction would require additional error handling in the calling code
* Added xalan::ProblemListener functionality to the ErrorHandler class
** XSLT problems passed to the ProblemListener are returned alongside to and treated as all other transformation errors
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* xalan is segfaulting in XalanDOMString constructor when the static member "XalanLocator::getSystemId" is returning null-pointer
** this should seemingly be handled by passing a pointer to the static constant m_dummy but this sadly fails to prevent the segfault
** the patch provided by this commit fixes the problem for now but I cannot guarantee that this wont cause any side effects in a other context
* Adapted TransformationFacade to handle errors during transformation compilation
** errors generated during transformation compilation are returned through the generate member method
** throwing an exeception during TransformationFacade construction would require additional error handling in the calling code
* Added xalan::ProblemListener functionality to the ErrorHandler class
** XSLT problems passed to the ProblemListener are returned alongside to and treated as all other transformation errors
</pre>
</div>
</content>
</entry>
<entry>
<title>Improved TransformationFacade error handling</title>
<updated>2014-05-29T11:26:37+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-29T11:26:37+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=3bc793d95293d40dbab62c593ce4ceaa86fae25b'/>
<id>3bc793d95293d40dbab62c593ce4ceaa86fae25b</id>
<content type='text'>
* ErrorHandler class created in 5859cb6 now caches all errors instead of pushing them to std::cerr
** cached errors are retrieved by TransformationFacade's "generate" member method
* test frontend pushes all errors to std::cerr
* FunctionTransform returns errors to the calling template as XML
** FunctionTransform test case demonstrates how one may test for successful transformation
* "generate" member method returns std::string vector wrapped in a std::unique_ptr
** this is used as a kind of optional pointer, as the std::unique_ptr instance only wraps a vector if errors where actually generated
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* ErrorHandler class created in 5859cb6 now caches all errors instead of pushing them to std::cerr
** cached errors are retrieved by TransformationFacade's "generate" member method
* test frontend pushes all errors to std::cerr
* FunctionTransform returns errors to the calling template as XML
** FunctionTransform test case demonstrates how one may test for successful transformation
* "generate" member method returns std::string vector wrapped in a std::unique_ptr
** this is used as a kind of optional pointer, as the std::unique_ptr instance only wraps a vector if errors where actually generated
</pre>
</div>
</content>
</entry>
<entry>
<title>Moved input trimming into XObjectValue namespace</title>
<updated>2014-05-28T20:09:50+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-28T20:09:50+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=52b60c1a8c23f11ab18fad06e0957490c7436e0a'/>
<id>52b60c1a8c23f11ab18fad06e0957490c7436e0a</id>
<content type='text'>
* std::string specialization of "get" template method
* replaces FunctionTransform local input trimming implemented in 5859cb6
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* std::string specialization of "get" template method
* replaces FunctionTransform local input trimming implemented in 5859cb6
</pre>
</div>
</content>
</entry>
<entry>
<title>Implemented basic ErrorHandler</title>
<updated>2014-05-28T19:51:39+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-28T19:51:39+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=5859cb6af4a5136a96971c47e41e6195007ef944'/>
<id>5859cb6af4a5136a96971c47e41e6195007ef944</id>
<content type='text'>
* InputXSLT::ErrorHandler is derived from xercesc::ErrorHandler and enables contextual printing of transformation errors
** currently this means that the error messages passed to std::cerr contain the full path of the offending transformation
* added input trimming to the external transform function
** calls to this function from inside a transformation may contain unnecessary whitespace characters which disrupt further processing
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* InputXSLT::ErrorHandler is derived from xercesc::ErrorHandler and enables contextual printing of transformation errors
** currently this means that the error messages passed to std::cerr contain the full path of the offending transformation
* added input trimming to the external transform function
** calls to this function from inside a transformation may contain unnecessary whitespace characters which disrupt further processing
</pre>
</div>
</content>
</entry>
<entry>
<title>Prevented FilesystemContext from resolving absolute paths</title>
<updated>2014-05-24T14:14:08+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-24T14:14:08+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=bf88fb942d624f40218716d375744aa14b3406a8'/>
<id>bf88fb942d624f40218716d375744aa14b3406a8</id>
<content type='text'>
* there are situations where one may pass absolute paths to external functions which should not be resolved against the context path
** for example when reading files found by "read-directory" through its "full" value node
* this could be checked by the external functions themself
** but as this check is required by all of them it is better implemented in the FilesystemContext
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* there are situations where one may pass absolute paths to external functions which should not be resolved against the context path
** for example when reading files found by "read-directory" through its "full" value node
* this could be checked by the external functions themself
** but as this check is required by all of them it is better implemented in the FilesystemContext
</pre>
</div>
</content>
</entry>
<entry>
<title>Implemented ResultNodeFacade as a DOM node construction helper</title>
<updated>2014-05-24T11:59:42+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-24T11:59:42+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=085935ddd577b0c65b4330318b5ba20492d93126'/>
<id>085935ddd577b0c65b4330318b5ba20492d93126</id>
<content type='text'>
* wraps result node construction and appends it to root node on destruction
* offers a simpler interface for common node construction patterns
* simplifies result node construction in all external function implementations
** most noticeable in FunctionReadDirectory
* expanded FunctionReadDirectory result nodes by name, extension, and full-path nodes
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* wraps result node construction and appends it to root node on destruction
* offers a simpler interface for common node construction patterns
* simplifies result node construction in all external function implementations
** most noticeable in FunctionReadDirectory
* expanded FunctionReadDirectory result nodes by name, extension, and full-path nodes
</pre>
</div>
</content>
</entry>
<entry>
<title>Changed iterate functor parameter to const reference</title>
<updated>2014-05-23T18:13:42+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-23T18:13:42+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=afc8eb29c22447fe2bf71a503a5f2d25b4f8a7c7'/>
<id>afc8eb29c22447fe2bf71a503a5f2d25b4f8a7c7</id>
<content type='text'>
* replaced ranged for loop with more appropriate std::for_each
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* replaced ranged for loop with more appropriate std::for_each
</pre>
</div>
</content>
</entry>
<entry>
<title>Simplified IncludeEntityResolver constructor and improved constness</title>
<updated>2014-05-23T15:08:16+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-23T15:08:16+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=6ede83ca2c50353bb9f97260f0ef04234041e73b'/>
<id>6ede83ca2c50353bb9f97260f0ef04234041e73b</id>
<content type='text'>
* std::vector&lt;FilesystemContext&gt; instance is now const
** this required a constructor change
* marked resolve member method as const as it doesn't need to modify anything
** this is also true for the overloaded resolveEntity member method
** the base class xercesc::EntityResolver prevents us from marking it as such
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* std::vector&lt;FilesystemContext&gt; instance is now const
** this required a constructor change
* marked resolve member method as const as it doesn't need to modify anything
** this is also true for the overloaded resolveEntity member method
** the base class xercesc::EntityResolver prevents us from marking it as such
</pre>
</div>
</content>
</entry>
<entry>
<title>Replaced std::pair&lt;bool, *&gt; with the more convenient boost::optional&lt;*&gt;</title>
<updated>2014-05-22T19:07:16+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-22T19:07:16+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=2c358ced7ca10ab37a382477d8b55fdb4e353f44'/>
<id>2c358ced7ca10ab37a382477d8b55fdb4e353f44</id>
<content type='text'>
* InputXSLT is dependent on boost anyway, so there is no argument to be made to emulate boost::optional using std::pair
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* InputXSLT is dependent on boost anyway, so there is no argument to be made to emulate boost::optional using std::pair
</pre>
</div>
</content>
</entry>
<entry>
<title>Moved include path resolution into separate member method</title>
<updated>2014-05-21T19:16:43+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-21T19:16:43+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=bbe16940e7a6f97128e99ad7642b964e48ecde2e'/>
<id>bbe16940e7a6f97128e99ad7642b964e48ecde2e</id>
<content type='text'>
* enables access to include path resolution from external functions
** this will be useful to enable reading files from the include path using the external read-file or read-xml-file functions
* moved file path extraction into a function local to the compilation unit
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* enables access to include path resolution from external functions
** this will be useful to enable reading files from the include path using the external read-file or read-xml-file functions
* moved file path extraction into a function local to the compilation unit
</pre>
</div>
</content>
</entry>
<entry>
<title>Replaced FunctionResolveInclude with IncludeEntityResolver</title>
<updated>2014-05-20T19:17:10+00:00</updated>
<author>
<name>Adrian Kummerländer</name>
</author>
<published>2014-05-20T19:17:10+00:00</published>
<link rel='alternate' type='text/html' href='https://code.kummerlaender.eu/InputXSLT/commit/?id=35334241ce4b76b1b1a66219ce938f27fdf39031'/>
<id>35334241ce4b76b1b1a66219ce938f27fdf39031</id>
<content type='text'>
* xalan / xerces offers the possibility of implementing custom entity resolvers which are called upon by "&lt;xsl:include..."
** such a custom resolver was implemented to resolve include path entities
* this is a much better way