aboutsummaryrefslogtreecommitdiff
path: root/lib/XML
diff options
context:
space:
mode:
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;