1package Pod::ProjectDocs::Template;
2use strict;
3use warnings;
4use Template;
5use File::Basename;
6use File::Spec;
7
8sub new {
9    my $class = shift;
10    my $self  = bless { }, $class;
11    $self->_init(@_);
12    return $self;
13}
14
15sub _init {
16    my $self = shift;
17    $self->{_curpath} = '';
18    $self->{_tt} = Template->new( {
19        FILTERS => {
20            relpath => sub {
21                my $path = shift;
22                my $curpath = $self->{_curpath};
23                my($name, $dir) = fileparse $curpath, qr/\.html/;
24                return File::Spec->abs2rel($path, $dir);
25            },
26            return2br => sub {
27                my $text = shift;
28                $text =~ s!\r\n!<br />!g;
29                $text =~ s!\n!<br />!g;
30                return $text;
31            }
32        },
33    } );
34}
35
36sub process {
37    my($self, $doc, $data, $output) = @_;
38    $self->{_curpath} = $doc->get_output_path;
39    $self->{_tt}->process(\$data, $output, \my $text)
40        or $self->_croak($self->{_tt}->error);
41    $self->{_curpath} = '';
42    return $text;
43}
44
45sub _croak {
46    my($self, $msg) = @_;
47    require Carp;
48    Carp::croak($msg);
49}
50
511;
52__END__
53
54