<%PERL>
my @found;
File::Find::find(
    { untaint => 1,
      wanted => sub {
        return unless /(\w+)\.(?:pm|pod)$/;
        my $name = $File::Find::name;
        $name =~ s/.*lib\b.//;
        $name =~ s!\.(?:pm|pod)!!i;
        $name =~ s!\W!::!g;
        push @found, $name;
    },follow => ($^O ne 'MSWin32') },
    Jifty::Util->app_root ."/lib",
);
File::Find::find(
    { untaint => 1,
      wanted => sub {
        return unless $File::Find::name =~ /^(?:.*?)(Jifty.*?\.(?:pm|pod))$/;
        my $name = $1;
        $name =~ s/.*lib\b.//;
        $name =~ s!\.(?:pm|pod)!!i;
        $name =~ s!\/!::!g;
        push @found, $name;
    },follow => ($^O ne 'MSWin32') },
    Jifty::Util->jifty_root,
);
my $indent = 0;
my $prev = '';
foreach my $file (sort @found) {
    my ($parent, $name) = ($1, $2) if $file =~ /(?:(.*)::)?(\w+)$/;
    $parent = '' unless defined $parent;
    if ($file =~ /^$prev\::(.*)/) {
        my $foo = $1;
        while ($foo =~ s/(\w+):://) {
            $indent++;
            $m->print(('   ' x $indent));
            $m->print("$1
");
        }
        $indent++;
    } elsif ($prev !~ /^$parent\::/) {
        $indent = 0 unless length $parent;
        while ($parent =~ s/(\w+)//) {
            next if $prev =~ s/\b$1:://;
            while ($prev =~ s/:://) {
                $indent--;
            }
            $m->print(('   ' x $indent));
            $m->print("$1
");
            $indent++;
        }
    } elsif ($prev =~ /^$parent\::(.*::)/) {
        my $foo = $1;
        while ($foo =~ s/:://) {
            $indent--;
        }
    }
    $m->print( ( '   ' x $indent )
      . '' . $name
      . '
' ."\n" );
    $prev = $file;
}
%PERL>