move transform usage a layer out
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / Transform.pm
CommitLineData
655965b3 1package HTML::Zoom::Transform;
2
3use strict;
4use warnings FATAL => 'all';
5use base qw(HTML::Zoom::SubObject);
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) = @_;
39 HTML::Zoom::FilterStream->new({
40 stream => $stream,
2f0c6a86 41 match => $self->match,
655965b3 42 filters => $self->filters,
43 zconfig => $self->_zconfig,
44 });
45}
46
47
481;