Catch unmatched "[" in selector parser with a helpful error
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / Transform.pm
1 package HTML::Zoom::Transform;
2
3 use strict;
4 use warnings FATAL => 'all';
5 use base qw(HTML::Zoom::SubObject);
6 use HTML::Zoom::TransformedStream;
7
8 sub new {
9   my ($class, $args) = @_;
10   my $new = $class->SUPER::new($args);
11   $new->{selector} = $args->{selector};
12   $new->{match} = $args->{match} if $args->{match};
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,
25     ($self->{match} ? (match => $self->{match}) : ()),
26     filters => [ @{$self->filters}, $filter ]
27   });
28 }
29
30 sub match {
31   my ($self) = @_;
32   $self->{match} ||=
33     $self->_zconfig
34          ->selector_parser
35          ->parse_selector($self->{selector});
36 }
37
38 sub apply_to_stream {
39   my ($self, $stream) = @_;
40   HTML::Zoom::TransformedStream->new({
41     stream => $stream,
42     transform => $self,
43     zconfig => $self->_zconfig,
44   });
45 }
46     
47
48 1;