X-Git-Url: http://git.shiar.net/perl/list-index.git/blobdiff_plain/ab9917512865cf7070b364a1b0f07f32a3b49e3f..f201c1cafae5e0a87e562961316c7650b0e2231a:/lib/List/Index.pm diff --git a/lib/List/Index.pm b/lib/List/Index.pm index 47ef0da..3663c24 100644 --- a/lib/List/Index.pm +++ b/lib/List/Index.pm @@ -23,8 +23,8 @@ sub ranges { my $pages = $options->{pages } || 1 + int $#$self / $pagesize; $pagesize = @$self / $pages; - my $offset = 0; - my @links; + my $offset = $pagesize; + my @links = (''); while ($offset < @$self) { my $link = substr $self->[$offset], 0, $length; if ($context) { @@ -57,19 +57,19 @@ sub ranges { } } - push @links, [$link]; + push @links, $link; $offset += $pagesize; } + use List::MoreUtils 'uniq'; + @links = uniq @links; for my $i (0 .. $#links - 1) { - my ($link, $lastchar) = $links[$i + 1]->[0] =~ /(.*)(.)/; - $link .= $lastchar eq 'a' ? '.' : chr( ord($lastchar) - 1 ) - unless $lastchar eq '.'; - next if $link eq $links[$i]->[0] and $i; - $links[$i]->[1] = $link; + my ($link, $lastchar) = $links[$i + 1] =~ /(.*)(.)/; + $link .= $lastchar le 'a' ? '.' : chr( ord($lastchar) - 1 ); + next if $link eq $links[$i] and $i; + $links[$i] .= '-'.$link; } - $links[-1]->[1] = ''; - $links[0]->[0] = ''; + $links[-1] .= '-'; return \@links; } @@ -92,6 +92,7 @@ sub rangematch { my $next = $char; $next = chr( ord($char) + 1 ) if length $s1 > $i + 1; my $last = 'z'; + next if $next gt $last; if (length $s2 > $i) { if ($s2 =~ /^\Q$prefix/) { $last = substr $s2, $i, 1;