Commit | Line | Data |
655965b3 |
1 | package HTML::Zoom::Transform; |
2 | |
3 | use strict; |
4 | use warnings FATAL => 'all'; |
5 | use base qw(HTML::Zoom::SubObject); |
a88c1c57 |
6 | use HTML::Zoom::TransformedStream; |
655965b3 |
7 | |
8 | sub new { |
9 | my ($class, $args) = @_; |
10 | my $new = $class->SUPER::new($args); |
11 | $new->{selector} = $args->{selector}; |
2f0c6a86 |
12 | $new->{match} = $args->{match} if $args->{match}; |
655965b3 |
13 | $new->{filters} = $args->{filters}||[]; |
14 | $new; |
15 | } |
16 | |
17 | sub selector { shift->{selector} } |
18 | |
19 | sub filters { shift->{filters} } |
20 | |
21 | sub with_filter { |
22 | my ($self, $filter) = @_; |
23 | (ref $self)->new({ |
24 | selector => $self->selector, |
2f0c6a86 |
25 | ($self->{match} ? (match => $self->{match}) : ()), |
655965b3 |
26 | filters => [ @{$self->filters}, $filter ] |
27 | }); |
28 | } |
29 | |
2f0c6a86 |
30 | sub match { |
31 | my ($self) = @_; |
32 | $self->{match} ||= |
33 | $self->_zconfig |
34 | ->selector_parser |
35 | ->parse_selector($self->{selector}); |
36 | } |
37 | |
655965b3 |
38 | sub apply_to_stream { |
39 | my ($self, $stream) = @_; |
a88c1c57 |
40 | HTML::Zoom::TransformedStream->new({ |
655965b3 |
41 | stream => $stream, |
a88c1c57 |
42 | transform => $self, |
655965b3 |
43 | zconfig => $self->_zconfig, |
44 | }); |
45 | } |
46 | |
47 | |
48 | 1; |