From 0aa99246f129a4218464a2ffaecf88aa77dbd22e Mon Sep 17 00:00:00 2001 From: dakkar Date: Mon, 17 Aug 2009 13:48:11 +0200 Subject: some EXSLT functions missing from XML::LibXSLT untested, and should really be in a separate distribution --- lib/XML/LibXSLT/EXSLT.pm | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 lib/XML/LibXSLT/EXSLT.pm (limited to 'lib/XML') diff --git a/lib/XML/LibXSLT/EXSLT.pm b/lib/XML/LibXSLT/EXSLT.pm new file mode 100644 index 0000000..fce93e9 --- /dev/null +++ b/lib/XML/LibXSLT/EXSLT.pm @@ -0,0 +1,44 @@ +package XML::LibXSLT::EXSLT; +use strict; +use warnings; +use XML::LibXML; + +my $STRING_NS='http://exslt.org/strings'; + +my @funcs=( + [$STRING_NS,'split',\&estr_split], +); + +sub apply_to { + my (undef,$xslt)=@_; + + for my $f (@funcs) { + my ($ns,$name,$code)=@$f; + $xslt->register_function($ns,$name,$code); + } + return; +} + +sub estr_split { + my ($string,$sep)=@_; + + if (defined $sep) { + $sep="$sep"; + } + else { + $sep=' '; + } + + my @tokens=split /\Q$sep/,"$string"; + my $doc=XML::LibXML::DocumentFragment->new(); + + for my $t (@tokens) { + my $e=XML::LibXML::Element->new('token'); + $e->appendTextNode($t); + $doc->appendChild($e); + } + + return $doc; +} + +1; -- cgit v1.2.3