aboutsummaryrefslogtreecommitdiff
path: root/lib/XML
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2009-08-17 13:48:11 +0200
committerdakkar <dakkar@thenautilus.net>2009-08-17 13:48:11 +0200
commit0aa99246f129a4218464a2ffaecf88aa77dbd22e (patch)
tree75b429fedfb6b8ab39a9d0b41b19f2446989f83b /lib/XML
parentdecode ReST files before parsing (diff)
downloadWebCoso-0aa99246f129a4218464a2ffaecf88aa77dbd22e.tar.gz
WebCoso-0aa99246f129a4218464a2ffaecf88aa77dbd22e.tar.bz2
WebCoso-0aa99246f129a4218464a2ffaecf88aa77dbd22e.zip
some EXSLT functions missing from XML::LibXSLT
untested, and should really be in a separate distribution
Diffstat (limited to 'lib/XML')
-rw-r--r--lib/XML/LibXSLT/EXSLT.pm44
1 files changed, 44 insertions, 0 deletions
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;