line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Path::Maker; |
2
|
7
|
|
|
7
|
|
626016
|
use 5.008005; |
|
7
|
|
|
|
|
25
|
|
|
7
|
|
|
|
|
256
|
|
3
|
7
|
|
|
7
|
|
38
|
use strict; |
|
7
|
|
|
|
|
14
|
|
|
7
|
|
|
|
|
248
|
|
4
|
7
|
|
|
7
|
|
47
|
use warnings; |
|
7
|
|
|
|
|
11
|
|
|
7
|
|
|
|
|
278
|
|
5
|
7
|
|
|
7
|
|
33
|
use Carp qw(croak); |
|
7
|
|
|
|
|
12
|
|
|
7
|
|
|
|
|
462
|
|
6
|
7
|
|
|
7
|
|
36
|
use Cwd qw(getcwd); |
|
7
|
|
|
|
|
13
|
|
|
7
|
|
|
|
|
410
|
|
7
|
7
|
|
|
7
|
|
40
|
use File::Path qw(mkpath); |
|
7
|
|
|
|
|
11
|
|
|
7
|
|
|
|
|
330
|
|
8
|
7
|
|
|
7
|
|
40
|
use File::Basename qw(dirname); |
|
7
|
|
|
|
|
11
|
|
|
7
|
|
|
|
|
581
|
|
9
|
7
|
|
|
7
|
|
1060
|
use File::Spec::Functions qw(catdir catfile file_name_is_absolute); |
|
7
|
|
|
|
|
1168
|
|
|
7
|
|
|
|
|
876
|
|
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
our $VERSION = "0.004"; |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
{ |
14
|
|
|
|
|
|
|
package |
15
|
|
|
|
|
|
|
Text::MicroTemplate::DataSection::WithHeader; |
16
|
7
|
|
|
7
|
|
43
|
use Carp 'croak'; |
|
7
|
|
|
|
|
9
|
|
|
7
|
|
|
|
|
332
|
|
17
|
7
|
|
|
7
|
|
6483
|
use Data::Section::Simple; |
|
7
|
|
|
|
|
4062
|
|
|
7
|
|
|
|
|
320
|
|
18
|
7
|
|
|
7
|
|
40
|
use File::Spec::Functions qw(catfile); |
|
7
|
|
|
|
|
13
|
|
|
7
|
|
|
|
|
304
|
|
19
|
7
|
|
|
7
|
|
985
|
use parent 'Text::MicroTemplate::File'; |
|
7
|
|
|
|
|
361
|
|
|
7
|
|
|
|
|
51
|
|
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
sub new { |
22
|
7
|
|
|
7
|
|
28
|
my ($class, @arg) = @_; |
23
|
7
|
|
|
|
|
89
|
my $self = $class->SUPER::new(@arg); |
24
|
7
|
|
50
|
|
|
480
|
$self->{package} ||= scalar caller; |
25
|
7
|
|
|
|
|
87
|
$self->{section} = Data::Section::Simple->new( $self->{package} ); |
26
|
7
|
|
|
|
|
71
|
$self; |
27
|
|
|
|
|
|
|
} |
28
|
|
|
|
|
|
|
sub _find_data { |
29
|
16
|
|
|
16
|
|
27
|
my ($self, $file) = @_; |
30
|
16
|
100
|
|
|
|
78
|
if (my $data = $self->{section}->get_data_section($file)) { |
|
|
100
|
|
|
|
|
|
31
|
13
|
|
|
|
|
1458
|
$data =~ s{\n{2}$}{\n}; |
32
|
13
|
|
|
|
|
36
|
return $data; |
33
|
|
|
|
|
|
|
} elsif ($self->{template_dir}) { |
34
|
1
|
|
|
|
|
153
|
return $self->_slurp( catfile($self->{template_dir}, $file) ); |
35
|
|
|
|
|
|
|
} else { |
36
|
2
|
|
|
|
|
225
|
return; |
37
|
|
|
|
|
|
|
} |
38
|
|
|
|
|
|
|
} |
39
|
|
|
|
|
|
|
# taken from Text::MicroTemplate::DataSection::build_file() |
40
|
|
|
|
|
|
|
sub build_file { |
41
|
16
|
|
|
16
|
|
99
|
my ($self, $file) = @_; |
42
|
16
|
50
|
|
|
|
61
|
if (my $e = $self->{cache}{$file}) { |
43
|
0
|
|
|
|
|
0
|
return $e; |
44
|
|
|
|
|
|
|
} |
45
|
16
|
|
|
|
|
52
|
my $data = $self->_find_data($file); |
46
|
16
|
100
|
|
|
|
114
|
if (!$data) { |
47
|
2
|
|
|
|
|
5
|
local $Carp::CarpLevel = $Carp::CarpLevel + 1; |
48
|
2
|
50
|
|
|
|
429
|
croak "could not find template file '$file'" |
49
|
|
|
|
|
|
|
. " in __DATA__ section of $self->{package}" |
50
|
|
|
|
|
|
|
. ($self->{template_dir} ? ' nor in ' . $self->{template_dir} : ''); |
51
|
|
|
|
|
|
|
} |
52
|
14
|
100
|
|
|
|
50
|
$data = $self->{template_header} . $data if $self->{template_header}; |
53
|
14
|
|
|
|
|
169
|
$self->parse($data); # XXX assume $data is decoded |
54
|
14
|
|
|
|
|
1994
|
local $Text::MicroTemplate::_mt_setter = 'my $_mt = shift;'; |
55
|
14
|
|
|
|
|
91
|
my $f = $self->build; |
56
|
14
|
50
|
|
|
|
6112
|
$self->{cache}{$file} = $f if $self->{use_cache}; |
57
|
14
|
|
|
|
|
393
|
return $f; |
58
|
|
|
|
|
|
|
} |
59
|
|
|
|
|
|
|
sub _slurp { |
60
|
1
|
|
|
1
|
|
3
|
my (undef, $file) = @_; |
61
|
1
|
50
|
|
|
|
88
|
open my $fh, "<:utf8", $file or return; |
62
|
1
|
|
|
|
|
6
|
local $/; |
63
|
1
|
|
|
|
|
55
|
scalar <$fh>; |
64
|
|
|
|
|
|
|
} |
65
|
|
|
|
|
|
|
} |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
sub new { |
68
|
7
|
|
|
7
|
0
|
6670
|
my $class = shift; |
69
|
7
|
50
|
|
|
|
53
|
my %opt = ref $_[0] ? %{ $_[0] } : @_; |
|
0
|
|
|
|
|
0
|
|
70
|
7
|
|
|
|
|
26
|
my $base_dir = delete $opt{base_dir}; |
71
|
7
|
|
|
|
|
124
|
my $data_section = Text::MicroTemplate::DataSection::WithHeader->new( |
72
|
|
|
|
|
|
|
package => scalar(caller), |
73
|
|
|
|
|
|
|
%opt, |
74
|
|
|
|
|
|
|
); |
75
|
7
|
|
|
|
|
94
|
bless { |
76
|
|
|
|
|
|
|
base_dir => $base_dir, |
77
|
|
|
|
|
|
|
data_section => $data_section |
78
|
|
|
|
|
|
|
}, $class; |
79
|
|
|
|
|
|
|
} |
80
|
|
|
|
|
|
|
|
81
|
|
|
|
|
|
|
sub _abs_path { |
82
|
24
|
|
|
24
|
|
30
|
my ($self, $path) = @_; |
83
|
24
|
100
|
|
|
|
66
|
return $path if file_name_is_absolute $path; |
84
|
12
|
|
66
|
|
|
190
|
return catdir( $self->{base_dir} || getcwd, $path ); |
85
|
|
|
|
|
|
|
} |
86
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
sub render { |
88
|
16
|
|
|
16
|
1
|
6237
|
my ($self, $template_name, @arg) = @_; |
89
|
16
|
|
|
|
|
130
|
$self->{data_section}->render_file($template_name, @arg); |
90
|
|
|
|
|
|
|
} |
91
|
|
|
|
|
|
|
sub chmod : method { |
92
|
2
|
|
|
2
|
1
|
2181
|
my ($self, $path, $mod) = @_; |
93
|
2
|
|
|
|
|
7
|
$path = $self->_abs_path($path); |
94
|
2
|
|
|
|
|
9
|
my $oct_mod = sprintf '%lo', $mod; |
95
|
2
|
50
|
|
|
|
75
|
chmod $mod, $path or croak "chmod $oct_mod $path: $!"; |
96
|
|
|
|
|
|
|
} |
97
|
|
|
|
|
|
|
sub create_dir { |
98
|
8
|
|
|
8
|
1
|
532
|
my ($self, $dir) = @_; |
99
|
8
|
|
|
|
|
29
|
$dir = $self->_abs_path($dir); |
100
|
8
|
100
|
|
|
|
290
|
return if -d $dir; |
101
|
2
|
50
|
|
|
|
336
|
mkpath $dir or croak "mkpath $dir: $!"; |
102
|
|
|
|
|
|
|
} |
103
|
|
|
|
|
|
|
sub render_to_file { |
104
|
6
|
|
|
6
|
1
|
1985
|
my ($self, $template_name, $file, @arg) = @_; |
105
|
6
|
|
|
|
|
20
|
$file = $self->_abs_path($file); |
106
|
6
|
|
|
|
|
278
|
my $dir = dirname $file; |
107
|
6
|
|
|
|
|
22
|
$self->create_dir($dir); |
108
|
6
|
|
|
|
|
20
|
$self->write_file( $file, $self->render($template_name, @arg) ); |
109
|
|
|
|
|
|
|
} |
110
|
|
|
|
|
|
|
sub write_file { |
111
|
8
|
|
|
8
|
1
|
211
|
my ($self, $file, $string) = @_; |
112
|
8
|
|
|
|
|
17
|
$file = $self->_abs_path($file); |
113
|
8
|
50
|
|
|
|
802
|
open my $fh, ">:utf8", $file or croak "open $file: $!"; |
114
|
8
|
|
|
|
|
11
|
print {$fh} $string; |
|
8
|
|
|
|
|
114
|
|
115
|
|
|
|
|
|
|
} |
116
|
|
|
|
|
|
|
|
117
|
|
|
|
|
|
|
1; |
118
|
|
|
|
|
|
|
__END__ |