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 | } |
12bfb3b7 |
14 | if (my ($peeked) = $self->_next(1)) { |
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}) { |
12bfb3b7 |
26 | if (my $peeked_from = delete $self->{_peeked_from}) { |
27 | $peeked_from->next; |
28 | } |
b5a48c47 |
29 | return (delete $self->{_peeked}); |
30 | } |
31 | |
32 | $self->_next; |
33 | } |
34 | |
35 | |
3cdbc13f |
36 | sub flatten { |
8a1c87d1 |
37 | my $self = shift; |
38 | require HTML::Zoom::FlattenedStream; |
39 | HTML::Zoom::FlattenedStream->new({ |
40 | source => $self, |
41 | zconfig => $self->_zconfig |
3cdbc13f |
42 | }); |
43 | } |
44 | |
45 | sub map { |
8a1c87d1 |
46 | my ($self, $mapper) = @_; |
47 | require HTML::Zoom::MappedStream; |
48 | HTML::Zoom::MappedStream->new({ |
49 | source => $self, mapper => $mapper, zconfig => $self->_zconfig |
3cdbc13f |
50 | }); |
51 | } |
52 | |
d80786d0 |
53 | sub with_filter { |
54 | my ($self, $selector, $filter) = @_; |
55 | my $match = $self->_parse_selector($selector); |
56 | $self->_zconfig->stream_utils->wrap_with_filter($self, $match, $filter); |
57 | } |
58 | |
97192b02 |
59 | sub with_transform { |
60 | my ($self, $transform) = @_; |
61 | $transform->apply_to_stream($self); |
d80786d0 |
62 | } |
63 | |
97192b02 |
64 | sub select { |
d80786d0 |
65 | my ($self, $selector) = @_; |
97192b02 |
66 | return HTML::Zoom::TransformBuilder->new({ |
67 | zconfig => $self->_zconfig, |
68 | selector => $selector, |
69 | filters => [], |
70 | proto => $self, |
71 | }); |
d80786d0 |
72 | } |
73 | |
a88c1c57 |
74 | sub then { |
75 | my ($self) = @_; |
76 | # see notes in HTML/Zoom.pm for why this needs to be fixed |
77 | $self->select($self->transform->selector); |
78 | } |
79 | |
1c4455ae |
80 | sub apply { |
81 | my ($self, $code) = @_; |
82 | local $_ = $self; |
83 | $self->$code; |
84 | } |
85 | |
12bfb3b7 |
86 | sub to_html { |
87 | my ($self) = @_; |
88 | $self->_zconfig->producer->html_from_stream($self); |
89 | } |
90 | |
5f74b883 |
91 | 1; |