fix bug where first event isn't passed to filter during collect w/out inside
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / Transform.pm
CommitLineData
655965b3 1package HTML::Zoom::Transform;
2
1cf03540 3use strictures 1;
655965b3 4use base qw(HTML::Zoom::SubObject);
a88c1c57 5use HTML::Zoom::TransformedStream;
655965b3 6
7sub new {
8 my ($class, $args) = @_;
9 my $new = $class->SUPER::new($args);
10 $new->{selector} = $args->{selector};
2f0c6a86 11 $new->{match} = $args->{match} if $args->{match};
655965b3 12 $new->{filters} = $args->{filters}||[];
13 $new;
14}
15
16sub selector { shift->{selector} }
17
18sub filters { shift->{filters} }
19
20sub with_filter {
21 my ($self, $filter) = @_;
22 (ref $self)->new({
23 selector => $self->selector,
2f0c6a86 24 ($self->{match} ? (match => $self->{match}) : ()),
655965b3 25 filters => [ @{$self->filters}, $filter ]
26 });
27}
28
2f0c6a86 29sub match {
30 my ($self) = @_;
31 $self->{match} ||=
32 $self->_zconfig
33 ->selector_parser
34 ->parse_selector($self->{selector});
35}
36
655965b3 37sub apply_to_stream {
38 my ($self, $stream) = @_;
a88c1c57 39 HTML::Zoom::TransformedStream->new({
655965b3 40 stream => $stream,
a88c1c57 41 transform => $self,
655965b3 42 zconfig => $self->_zconfig,
43 });
44}
45
46
471;