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