Added apply_if to only run an apply block if a predicate is true
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / StreamBase.pm
index e9bee1c..e063c48 100644 (file)
@@ -11,7 +11,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 +23,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 +83,20 @@ 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);
+}
+
 1;