diff options
Diffstat (limited to 'lib/Tree/Transform/XSLTish/Transformer.pm')
-rw-r--r-- | lib/Tree/Transform/XSLTish/Transformer.pm | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/Tree/Transform/XSLTish/Transformer.pm b/lib/Tree/Transform/XSLTish/Transformer.pm index 8b06422..c6102a7 100644 --- a/lib/Tree/Transform/XSLTish/Transformer.pm +++ b/lib/Tree/Transform/XSLTish/Transformer.pm @@ -12,7 +12,7 @@ subtype 'Tree::Transform::XSLTish::Engine' => as 'Object' => where { my $object=$_; - for my $meth (qw(findnodes matches exists)) { + for my $meth (qw(findnodes)) { return unless $object->can($meth); } return 1; @@ -164,11 +164,19 @@ sub rule_matches { # XXX check the semantic my $base_node=$node; + + # this is a ugly hack + my $test_sub= ($node->can('isSameNode'))? + sub { grep { $node->isSameNode($_) } @_ } + : + sub { grep { "$node" eq "$_" } @_ }; + while ($base_node) { #warn "# Testing <$path> against @{[ $node ]} based on @{[ $base_node ]}"; - - if ($self->engine->matches($node,$path,$base_node)) { + my @selected_nodes=$self->engine->findnodes($path,$base_node); + #warn "# selected: @selected_nodes\n"; + if ($test_sub->(@selected_nodes)) { return 1; } |