627e52a628e22f9b0c10c864951addaec81fc38e
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / Transform.pm
1 package HTML::Zoom::Transform;
2
3 use strict;
4 use warnings FATAL => 'all';
5 use base qw(HTML::Zoom::SubObject);
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::FilterStream->new({
40     stream => $stream,
41     match => $self->match,
42     filters => $self->filters,
43     zconfig => $self->_zconfig,
44   });
45 }
46     
47
48 1;