move transform usage a layer out
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / Transform.pm
index b604c2d..627e52a 100644 (file)
@@ -8,6 +8,7 @@ sub new {
   my ($class, $args) = @_;
   my $new = $class->SUPER::new($args);
   $new->{selector} = $args->{selector};
+  $new->{match} = $args->{match} if $args->{match};
   $new->{filters} = $args->{filters}||[];
   $new;
 }
@@ -20,15 +21,24 @@ sub with_filter {
   my ($self, $filter) = @_;
   (ref $self)->new({
     selector => $self->selector,
+    ($self->{match} ? (match => $self->{match}) : ()),
     filters => [ @{$self->filters}, $filter ]
   });
 }
 
+sub match {
+  my ($self) = @_;
+  $self->{match} ||=
+    $self->_zconfig
+         ->selector_parser
+         ->parse_selector($self->{selector});
+}
+
 sub apply_to_stream {
   my ($self, $stream) = @_;
   HTML::Zoom::FilterStream->new({
     stream => $stream,
-    match => $self->selector,
+    match => $self->match,
     filters => $self->filters,
     zconfig => $self->_zconfig,
   });