make then() work on streams and fix up replace_content on in_place_close elements
[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);
a88c1c57 6use HTML::Zoom::TransformedStream;
655965b3 7
8sub 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
17sub selector { shift->{selector} }
18
19sub filters { shift->{filters} }
20
21sub 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 30sub match {
31 my ($self) = @_;
32 $self->{match} ||=
33 $self->_zconfig
34 ->selector_parser
35 ->parse_selector($self->{selector});
36}
37
655965b3 38sub 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
481;