1 package HTML::Zoom::StreamBase;
4 use HTML::Zoom::TransformBuilder;
6 sub _zconfig { shift->{_zconfig} }
10 if (exists $self->{_peeked}) {
11 return ($self->{_peeked});
13 if (my ($peeked) = $self->_next(1)) {
14 return ($self->{_peeked} = $peeked);
22 # peeked entry so return that
24 if (exists $self->{_peeked}) {
25 if (my $peeked_from = delete $self->{_peeked_from}) {
28 return (delete $self->{_peeked});
37 require HTML::Zoom::FlattenedStream;
38 HTML::Zoom::FlattenedStream->new({
40 zconfig => $self->_zconfig
45 my ($self, $mapper) = @_;
46 require HTML::Zoom::MappedStream;
47 HTML::Zoom::MappedStream->new({
48 source => $self, mapper => $mapper, zconfig => $self->_zconfig
53 my ($self, $selector, $filter) = @_;
54 my $match = $self->_parse_selector($selector);
55 $self->_zconfig->stream_utils->wrap_with_filter($self, $match, $filter);
59 my ($self, $transform) = @_;
60 $transform->apply_to_stream($self);
64 my ($self, $selector) = @_;
65 return HTML::Zoom::TransformBuilder->new({
66 zconfig => $self->_zconfig,
67 selector => $selector,
75 # see notes in HTML/Zoom.pm for why this needs to be fixed
76 $self->select($self->transform->selector);
80 my ($self, $code) = @_;
86 my ($self, $predicate, $code) = @_;
98 $self->_zconfig->producer->html_from_stream($self);
102 my ($self, $selector, @args) = @_;
103 my $sel = $self->select($selector);
104 my $meth = our $AUTOLOAD;
106 if (ref($selector) eq 'HASH') {
108 $ret = $ret->_do($_, $meth, @{$selector->{$_}}) for keys %$selector;
111 $self->_do($selector, $meth, @args);
116 my ($self, $selector, $meth, @args) = @_;
117 return $self->select($selector)->$meth(@args);