summaryrefslogtreecommitdiff
path: root/lib/Tree/Transform/XSLTish/Transformer.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Tree/Transform/XSLTish/Transformer.pm')
-rw-r--r--lib/Tree/Transform/XSLTish/Transformer.pm14
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;
}