summaryrefslogtreecommitdiff
path: root/lib/Tree/Transform/XSLTish
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Tree/Transform/XSLTish')
-rw-r--r--lib/Tree/Transform/XSLTish/Transformer.pm15
-rw-r--r--lib/Tree/Transform/XSLTish/Utils.pm12
2 files changed, 26 insertions, 1 deletions
diff --git a/lib/Tree/Transform/XSLTish/Transformer.pm b/lib/Tree/Transform/XSLTish/Transformer.pm
index c6102a7..fd61ea6 100644
--- a/lib/Tree/Transform/XSLTish/Transformer.pm
+++ b/lib/Tree/Transform/XSLTish/Transformer.pm
@@ -36,9 +36,22 @@ has 'context_stack' => (
has 'engine' => (
is => 'ro',
isa => 'Tree::Transform::XSLTish::Engine',
- default => sub { Tree::XPathEngine->new() },
+ lazy => 1,
+ builder => '_build_engine',
);
+sub _build_engine {
+ my ($self)=@_;
+
+ if ($self->rules_package) {
+ my $factory=Tree::Transform::XSLTish::Utils::_engine_factory($self->rules_package);
+ if ($$factory) {
+ return $$factory->();
+ }
+ }
+ return Tree::XPathEngine->new();
+}
+
sub it { $_[0]->context->current_node }
sub transform {
diff --git a/lib/Tree/Transform/XSLTish/Utils.pm b/lib/Tree/Transform/XSLTish/Utils.pm
index 11a25cb..bed1167 100644
--- a/lib/Tree/Transform/XSLTish/Utils.pm
+++ b/lib/Tree/Transform/XSLTish/Utils.pm
@@ -14,6 +14,18 @@ sub _rules_store {
return $pack->get_package_symbol($RULES_NAME);
}
+my $ENGINE_FACTORY_NAME='$_tree_transform_engine_factory';
+
+sub _engine_factory {
+ my $pack=Class::MOP::Class->initialize($_[0]);
+
+ if (! $pack->has_package_symbol($ENGINE_FACTORY_NAME) ) {
+ $pack->add_package_symbol($ENGINE_FACTORY_NAME,undef);
+ }
+ return $pack->get_package_symbol($ENGINE_FACTORY_NAME);
+}
+
+
sub _get_inheritance {
return Class::MOP::Class->initialize($_[0])->class_precedence_list;
}