X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FHTML%2FZoom%2FFilterBuilder.pm;h=316d56c6a1214ecdd04b00e12c328cbfde8c3e1a;hb=6d0f20a655ed2cb8581f7ab27433febba6c44cbd;hp=bdfb9205e9f1a77d750a63ccfa71aaa8c5933939;hpb=bf5a23d02e1ab37136d70e736014a81ecfcfe15c;p=catagits%2FHTML-Zoom.git diff --git a/lib/HTML/Zoom/FilterBuilder.pm b/lib/HTML/Zoom/FilterBuilder.pm index bdfb920..316d56c 100644 --- a/lib/HTML/Zoom/FilterBuilder.pm +++ b/lib/HTML/Zoom/FilterBuilder.pm @@ -21,6 +21,10 @@ sub _stream_concat { shift->_zconfig->stream_utils->stream_concat(@_) } +sub _flatten_stream_of_streams { + shift->_zconfig->stream_utils->flatten_stream_of_streams(@_) +} + sub set_attribute { my ($self, $args) = @_; my ($name, $value) = @{$args}{qw(name value)}; @@ -211,23 +215,23 @@ sub repeat { # hasn't been populated yet - but we can test @between in the # map routine because it has been by then and that saves us doing # the extra stream construction if we don't need it. - if ($repeat_between) { - $s->map(sub { - local $_ = $self->_stream_from_array(@into); - (@between && $s->peek) - ? $self->_stream_concat( - $_[0]->($_), $self->_stream_from_array(@between) - ) - : $_[0]->($_) - }) - ->flatten; - } else { - $s->map(sub { - local $_ = $self->_stream_from_array(@into); - $_[0]->($_) + $self->_flatten_stream_of_streams(do { + if ($repeat_between) { + $s->map(sub { + local $_ = $self->_stream_from_array(@into); + (@between && $s->peek) + ? $self->_stream_concat( + $_[0]->($_), $self->_stream_from_array(@between) + ) + : $_[0]->($_) + }) + } else { + $s->map(sub { + local $_ = $self->_stream_from_array(@into); + $_[0]->($_) }) - ->flatten; - } + } + }) }; $self->replace($repeater, $options); }