X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FHTML%2FZoom%2FStreamBase.pm;h=0cc1d144171ab63119212d059ddf76f6073471a6;hb=8de323e143a33ad6e4ac70dbd2a37610c81b1206;hp=e9bee1c08492acd9063f5e8a5c2e9453e14887d4;hpb=a88c1c57d4d91cc32c4cdf779a1b737482244322;p=catagits%2FHTML-Zoom.git diff --git a/lib/HTML/Zoom/StreamBase.pm b/lib/HTML/Zoom/StreamBase.pm index e9bee1c..0cc1d14 100644 --- a/lib/HTML/Zoom/StreamBase.pm +++ b/lib/HTML/Zoom/StreamBase.pm @@ -1,7 +1,6 @@ package HTML::Zoom::StreamBase; -use strict; -use warnings FATAL => 'all'; +use strictures 1; use HTML::Zoom::TransformBuilder; sub _zconfig { shift->{_zconfig} } @@ -11,7 +10,7 @@ sub peek { if (exists $self->{_peeked}) { return ($self->{_peeked}); } - if (my ($peeked) = $self->_next) { + if (my ($peeked) = $self->_next(1)) { return ($self->{_peeked} = $peeked); } return; @@ -23,6 +22,9 @@ sub next { # peeked entry so return that if (exists $self->{_peeked}) { + if (my $peeked_from = delete $self->{_peeked_from}) { + $peeked_from->next; + } return (delete $self->{_peeked}); } @@ -80,4 +82,41 @@ sub apply { $self->$code; } +sub apply_if { + my ($self, $predicate, $code) = @_; + if($predicate) { + local $_ = $self; + $self->$code; + } + else { + $self; + } +} + +sub to_html { + my ($self) = @_; + $self->_zconfig->producer->html_from_stream($self); +} + +sub AUTOLOAD { + my ($self, $selector, @args) = @_; + my $sel = $self->select($selector); + my $meth = our $AUTOLOAD; + $meth =~ s/.*:://; + if (ref($selector) eq 'HASH') { + my $ret = $self; + $ret = $ret->_do($_, $meth, @{$selector->{$_}}) for keys %$selector; + $ret; + } else { + $self->_do($selector, $meth, @args); + } +} + +sub _do { + my ($self, $selector, $meth, @args) = @_; + return $self->select($selector)->$meth(@args); +} + +sub DESTROY {} + 1;