package ActivePerl::DocTools::TOC::tocTab; use strict; use warnings; use base 'ActivePerl::DocTools::TOC'; my($count,$depth,$max_depth); my @index; sub text { my $text = join("\n", @_, ""); return sub { $text }; } # extra info is tedious to collect -- is done in a subclass or something. sub extra { '' }; sub header { '' } # pod sub before_pods { return _page("", "Core Documentation") . library_indent_open(); } sub pod_separator { '' } # XXX? sub pod { my($self, $file) = @_; my $key = $^O eq "darwin" ? "pods::$file" : "Pod::$file"; return _page($self->{pods}->{$key}, $file, $self->extra($file)); } sub after_pods { return library_indent_close() } # scripts sub before_scripts { return _page("", "Programs") . library_indent_open(); } sub script { my($self, $file) = @_; return _page($self->{scripts}->{$file}, $file, $self->extra($file)); } sub after_scripts { return library_indent_close() } # pragmas sub before_pragmas { return _page("", "Pragmas") . library_indent_open(); } sub pragma { my($self, $file) = @_; return _page($self->{pragmas}->{$file}, $file, $self->extra($file)); } sub after_pragmas { return library_indent_close() } # libraries sub before_libraries { return _page("", "Modules") . library_indent_open(); } sub library_indent_open { ++$depth; $max_depth = $depth if $depth > $max_depth; $index[$depth] = 0; return ''; } sub library_indent_close { --$depth; return ''; } sub library_indent_same { '' } sub library { my($self, $file, $showfile, $depth) = @_; return _page($self->{files}->{$file}, $showfile, $self->extra($file)); } sub library_container { my($self, $file, $showfile, $depth) = @_; return _page("", $showfile, $self->extra($file)); # return _folder($showfile); } sub after_libraries { return library_indent_close() } sub footer { my $nCols = $max_depth + 1; return < $text
\n'; } sub _page { my($href, $text, $extra) = @_; die "bad arguments to _page: ($href, $text, $extra)" unless defined $href and defined $text; $extra ||= ''; $extra = " $extra" if $extra; # just to make it EXACTLY identical to the old way. ++$count; ++$index[$depth]; my $level = join(".", @index[0..$depth]); return <