diff options
author | Gianni Ceccarelli <dakkar@dechirico.(none)> | 2009-03-25 16:48:14 +0100 |
---|---|---|
committer | Gianni Ceccarelli <dakkar@dechirico.(none)> | 2009-03-25 16:48:14 +0100 |
commit | 1a2822c8b182b19d70fd116a3a0bcf038caa6aef (patch) | |
tree | 82ec103c12ab95c939980974a33be10279531649 /lib/Tree/Transform/XSLTish | |
parent | doc tweak (diff) | |
download | Tree-Transform-XSLTish-1a2822c8b182b19d70fd116a3a0bcf038caa6aef.tar.gz Tree-Transform-XSLTish-1a2822c8b182b19d70fd116a3a0bcf038caa6aef.tar.bz2 Tree-Transform-XSLTish-1a2822c8b182b19d70fd116a3a0bcf038caa6aef.zip |
now you can specify the engine in the transfor class
Diffstat (limited to 'lib/Tree/Transform/XSLTish')
-rw-r--r-- | lib/Tree/Transform/XSLTish/Transformer.pm | 15 | ||||
-rw-r--r-- | lib/Tree/Transform/XSLTish/Utils.pm | 12 |
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; } |