use HTML::Zoom::ZConfig;
use HTML::Zoom::MatchWithoutFilter;
use HTML::Zoom::ReadFH;
+use HTML::Zoom::Transform;
sub new {
my ($class, $args) = @_;
my $sutils = $self->zconfig->stream_utils;
my $stream = $sutils->stream_from_array(@{$self->{initial_events}});
foreach my $filter_spec (@{$self->{filters}||[]}) {
- $stream = $sutils->wrap_with_filter($stream, @{$filter_spec});
+ $stream = HTML::Zoom::Transform->new({
+ selector => $filter_spec->[0],
+ filters => [ $filter_spec->[1] ],
+ zconfig => $self->zconfig,
+ })->apply_to_stream($stream);
+ #$stream = $sutils->wrap_with_filter($stream, @{$filter_spec});
}
$stream
}
sub new {
my ($class, $args) = @_;
+ if ($args->{filters}) {
+ die "Single filter please (XXX FIXME)"
+ unless @{$args->{filters}} == 1;
+ $args->{filter} = $args->{filters}[0];
+ }
bless(
{
_stream => $args->{stream},
--- /dev/null
+package HTML::Zoom::Transform;
+
+use strict;
+use warnings FATAL => 'all';
+use base qw(HTML::Zoom::SubObject);
+
+sub new {
+ my ($class, $args) = @_;
+ my $new = $class->SUPER::new($args);
+ $new->{selector} = $args->{selector};
+ $new->{filters} = $args->{filters}||[];
+ $new;
+}
+
+sub selector { shift->{selector} }
+
+sub filters { shift->{filters} }
+
+sub with_filter {
+ my ($self, $filter) = @_;
+ (ref $self)->new({
+ selector => $self->selector,
+ filters => [ @{$self->filters}, $filter ]
+ });
+}
+
+sub apply_to_stream {
+ my ($self, $stream) = @_;
+ HTML::Zoom::FilterStream->new({
+ stream => $stream,
+ match => $self->selector,
+ filters => $self->filters,
+ zconfig => $self->_zconfig,
+ });
+}
+
+
+1;