add strictures commit (out of order)
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / Transform.pm
1 package HTML::Zoom::Transform;
2
3 use strictures 1;
4 use base qw(HTML::Zoom::SubObject);
5 use HTML::Zoom::TransformedStream;
6
7 sub new {
8   my ($class, $args) = @_;
9   my $new = $class->SUPER::new($args);
10   $new->{selector} = $args->{selector};
11   $new->{match} = $args->{match} if $args->{match};
12   $new->{filters} = $args->{filters}||[];
13   $new;
14 }
15
16 sub selector { shift->{selector} }
17
18 sub filters { shift->{filters} }
19
20 sub with_filter {
21   my ($self, $filter) = @_;
22   (ref $self)->new({
23     selector => $self->selector,
24     ($self->{match} ? (match => $self->{match}) : ()),
25     filters => [ @{$self->filters}, $filter ]
26   });
27 }
28
29 sub match {
30   my ($self) = @_;
31   $self->{match} ||=
32     $self->_zconfig
33          ->selector_parser
34          ->parse_selector($self->{selector});
35 }
36
37 sub apply_to_stream {
38   my ($self, $stream) = @_;
39   HTML::Zoom::TransformedStream->new({
40     stream => $stream,
41     transform => $self,
42     zconfig => $self->_zconfig,
43   });
44 }
45     
46
47 1;