Commit | Line | Data |
655965b3 |
1 | package HTML::Zoom::Transform; |
2 | |
1cf03540 |
3 | use strictures 1; |
655965b3 |
4 | use base qw(HTML::Zoom::SubObject); |
a88c1c57 |
5 | use HTML::Zoom::TransformedStream; |
655965b3 |
6 | |
7 | sub 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 | |
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, |
2f0c6a86 |
24 | ($self->{match} ? (match => $self->{match}) : ()), |
655965b3 |
25 | filters => [ @{$self->filters}, $filter ] |
26 | }); |
27 | } |
28 | |
2f0c6a86 |
29 | sub match { |
30 | my ($self) = @_; |
31 | $self->{match} ||= |
32 | $self->_zconfig |
33 | ->selector_parser |
34 | ->parse_selector($self->{selector}); |
35 | } |
36 | |
655965b3 |
37 | sub 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 | |
47 | 1; |