All pastes #1409360 Raw Edit

Something

public text v1 · immutable
#1409360 ·published 2009-05-01 11:36 UTC
rendered paste body
sub mk_bar
{
	my ($width, $map) = @_;
	return '<div class="' . $map->[1] . '" style="width: ' . $width . '%;"></div>';
} ## end sub mk_bar

sub mk_completion_bar
{
	my ($map, $desc) = @_;

	my $out;

	my @data = @$map;
	my $len  = @data;
	if ($len==0) { return; }

	# Currently percentage, change this to however many segments you want
	# and change mk_bar above to match.
	my $barwidth = 100;

	my $err = int($len / 2);
	my $w = 0;
	my $state = undef;
	my $cur = 0;

	for (my $i = 0; $i < $len; $i++)
	{
		$cur = ($data[$i] > $cur) ? $data[$i] : $cur;
		$err -= $barwidth;
		if ($err < 0)
		{
			if (!defined($state) || $state != $cur)
			{
				if ($w > 0)
				{
					$out .= mk_bar($w, $desc->{$state});
				}
				$w = 0;
				$state = $cur;
			}
			while ($err < 0)
			{
				$w++;
				$err += $len;
			}
			$cur = 0;
		}
	}
	if ($w > 0)
	{
		$out .= mk_bar($w, $desc->{$state});
	}

	return $out;
} ## end sub mk_completion_bar