#!/usr/local/bin/perl -w

my (@block, %blockVals, $blockdepth, $blockname);
while (<>) {
  if (/^((?:\|   )*)([^=]+) \= .+?\: ([A-Z\d]+) \((\d+)\.0(?:\/[\d.]+)?\)$/) {
    my ($pipes, $name, $val, $num) = ($1, $2, $3, $4);
    my $depth = (length $pipes) / 4;
    if (@block && $depth != $blockdepth) {  #don't think this can happen...
      procBlock();
      @block = ($_);
      %blockVals = ($val, 1);
    } else {
      $blockname = $name;
      push @block, $_;
      $blockVals{$val} += $num;
    }
    $blockdepth = $depth;
    $blockname = $name;
  } else {
    if (@block) {
      procBlock();
    }
    print;
  }
}

sub procBlock {
  print "|   " x $blockdepth, $blockname, " = ... :";
  my $total = 0;
  foreach my $val (sort keys %blockVals) {
    $total += $blockVals{$val};
  }
  ++$total if $total == 0;
  foreach my $val (sort keys %blockVals) {
    printf " %s (%s)", $val, printPerc($blockVals{$val}/$total);
  }
  print "\n";
  @block = ();
  %blockVals = ();
}

sub printPerc {
  my $frac = shift;
  my $str = sprintf "%.2f", $frac * 100;
  $str =~ s/0+$//;
  $str =~ s/\.$//;
  $str .= "%";
  return $str;
}
