Commit | Line | Data |
5f74b883 |
1 | package HTML::Zoom::StreamBase; |
2 | |
3 | use strict; |
4 | use warnings FATAL => 'all'; |
97192b02 |
5 | use HTML::Zoom::TransformBuilder; |
d80786d0 |
6 | |
7 | sub _zconfig { shift->{_zconfig} } |
5f74b883 |
8 | |
3cdbc13f |
9 | sub peek { |
10 | my ($self) = @_; |
11 | if (exists $self->{_peeked}) { |
12 | return ($self->{_peeked}); |
13 | } |
b5a48c47 |
14 | if (my ($peeked) = $self->_next) { |
3cdbc13f |
15 | return ($self->{_peeked} = $peeked); |
16 | } |
17 | return; |
18 | } |
19 | |
b5a48c47 |
20 | sub next { |
21 | my ($self) = @_; |
22 | |
23 | # peeked entry so return that |
24 | |
25 | if (exists $self->{_peeked}) { |
26 | return (delete $self->{_peeked}); |
27 | } |
28 | |
29 | $self->_next; |
30 | } |
31 | |
32 | |
3cdbc13f |
33 | sub flatten { |
8a1c87d1 |
34 | my $self = shift; |
35 | require HTML::Zoom::FlattenedStream; |
36 | HTML::Zoom::FlattenedStream->new({ |
37 | source => $self, |
38 | zconfig => $self->_zconfig |
3cdbc13f |
39 | }); |
40 | } |
41 | |
42 | sub map { |
8a1c87d1 |
43 | my ($self, $mapper) = @_; |
44 | require HTML::Zoom::MappedStream; |
45 | HTML::Zoom::MappedStream->new({ |
46 | source => $self, mapper => $mapper, zconfig => $self->_zconfig |
3cdbc13f |
47 | }); |
48 | } |
49 | |
d80786d0 |
50 | sub with_filter { |
51 | my ($self, $selector, $filter) = @_; |
52 | my $match = $self->_parse_selector($selector); |
53 | $self->_zconfig->stream_utils->wrap_with_filter($self, $match, $filter); |
54 | } |
55 | |
97192b02 |
56 | sub with_transform { |
57 | my ($self, $transform) = @_; |
58 | $transform->apply_to_stream($self); |
d80786d0 |
59 | } |
60 | |
97192b02 |
61 | sub select { |
d80786d0 |
62 | my ($self, $selector) = @_; |
97192b02 |
63 | return HTML::Zoom::TransformBuilder->new({ |
64 | zconfig => $self->_zconfig, |
65 | selector => $selector, |
66 | filters => [], |
67 | proto => $self, |
68 | }); |
d80786d0 |
69 | } |
70 | |
1c4455ae |
71 | sub apply { |
72 | my ($self, $code) = @_; |
73 | local $_ = $self; |
74 | $self->$code; |
75 | } |
76 | |
5f74b883 |
77 | 1; |