package HTML::Template::Documentation;
use base qw( HTML::Template );
use strict;
#use warnings;
#use diagnostics;
sub documentation {
my $self = shift;
my $template = __PACKAGE__->new( filehandle => *main::DATA );
$template->param( title => $self->{ options }->{ filepath } || 'HTML::Template' );
my $content = { VAR => [], LOOP => [] };
for my $param ( sort {
$self->query( name => $b ) cmp $self->query( name => $a )
|| $a cmp $b
} $self->param ) {
my $type = $self->query( name => $param );
push @{ $content->{ $type } }, +{ name => $param } if $type eq 'VAR';
$self->_query_loops( $content->{ LOOP }, $param, 2 ) if $type eq 'LOOP';
}
$template->param( %$content );
return $template->output;
}
sub _query_loops {
my( $self, $loops, $name, $level, $chain ) = @_;
my @path = $name;
unshift @path, @$chain if $chain;
push @{ $loops }, +{ name => $name, level => $level, VAR => [] };
for my $param ( sort {
$self->query( name => [ @path, $b ] ) cmp
$self->query( name => [ @path, $a ] ) ||
$a cmp $b
} $self->query( loop => \@path ) ) {
my $type = $self->query( name => [ @path, $param ] );
push @{ $loops->[ $#{ $loops } ]->{ $type } }, { name => $param } if $type eq 'VAR';
$self->_query_loops( $loops, $param, $level + 1, \@path ) if $type eq 'LOOP';
}
}
package main;
print HTML::Template::Documentation->new( filename => shift )->documentation;
__DATA__
=head1 NAME
- Template Documentation
=head1 DESCRIPTION
The following is auto-generated documention for the supplied HTML::Template
data.
=head1 VARIABLES
=over 4
=item *
=back
=head1 LOOPS
=head
=over 4
=item *
=back