← Index
NYTProf Performance Profile   « line view »
For /usr/local/libexec/sympa/task_manager-debug.pl
  Run on Tue Jun 1 22:32:51 2021
Reported on Tue Jun 1 22:35:06 2021

Filename/usr/local/lib/perl5/site_perl/DateTime/Locale/FromData.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
0000s0sDateTime::Locale::FromData::::BEGIN@10DateTime::Locale::FromData::BEGIN@10
0000s0sDateTime::Locale::FromData::::BEGIN@16DateTime::Locale::FromData::BEGIN@16
0000s0sDateTime::Locale::FromData::::BEGIN@3DateTime::Locale::FromData::BEGIN@3
0000s0sDateTime::Locale::FromData::::BEGIN@4DateTime::Locale::FromData::BEGIN@4
0000s0sDateTime::Locale::FromData::::BEGIN@5DateTime::Locale::FromData::BEGIN@5
0000s0sDateTime::Locale::FromData::::BEGIN@7DateTime::Locale::FromData::BEGIN@7
0000s0sDateTime::Locale::FromData::::BEGIN@73DateTime::Locale::FromData::BEGIN@73
0000s0sDateTime::Locale::FromData::::BEGIN@8DateTime::Locale::FromData::BEGIN@8
0000s0sDateTime::Locale::FromData::::BEGIN@9DateTime::Locale::FromData::BEGIN@9
0000s0sDateTime::Locale::FromData::::BEGIN@92DateTime::Locale::FromData::BEGIN@92
0000s0sDateTime::Locale::FromData::::STORABLE_freezeDateTime::Locale::FromData::STORABLE_freeze
0000s0sDateTime::Locale::FromData::::STORABLE_thawDateTime::Locale::FromData::STORABLE_thaw
0000s0sDateTime::Locale::FromData::::__ANON__[:71]DateTime::Locale::FromData::__ANON__[:71]
0000s0sDateTime::Locale::FromData::::__ANON__[:89]DateTime::Locale::FromData::__ANON__[:89]
0000s0sDateTime::Locale::FromData::::_available_formatsDateTime::Locale::FromData::_available_formats
0000s0sDateTime::Locale::FromData::::_make_datetime_formatDateTime::Locale::FromData::_make_datetime_format
0000s0sDateTime::Locale::FromData::::available_formatsDateTime::Locale::FromData::available_formats
0000s0sDateTime::Locale::FromData::::date_format_defaultDateTime::Locale::FromData::date_format_default
0000s0sDateTime::Locale::FromData::::date_formatsDateTime::Locale::FromData::date_formats
0000s0sDateTime::Locale::FromData::::datetime_formatDateTime::Locale::FromData::datetime_format
0000s0sDateTime::Locale::FromData::::datetime_format_defaultDateTime::Locale::FromData::datetime_format_default
0000s0sDateTime::Locale::FromData::::format_forDateTime::Locale::FromData::format_for
0000s0sDateTime::Locale::FromData::::idDateTime::Locale::FromData::id
0000s0sDateTime::Locale::FromData::::language_codeDateTime::Locale::FromData::language_code
0000s0sDateTime::Locale::FromData::::language_idDateTime::Locale::FromData::language_id
0000s0sDateTime::Locale::FromData::::locale_dataDateTime::Locale::FromData::locale_data
0000s0sDateTime::Locale::FromData::::newDateTime::Locale::FromData::new
0000s0sDateTime::Locale::FromData::::prefers_24_hour_timeDateTime::Locale::FromData::prefers_24_hour_time
0000s0sDateTime::Locale::FromData::::script_codeDateTime::Locale::FromData::script_code
0000s0sDateTime::Locale::FromData::::script_idDateTime::Locale::FromData::script_id
0000s0sDateTime::Locale::FromData::::set_default_date_format_lengthDateTime::Locale::FromData::set_default_date_format_length
0000s0sDateTime::Locale::FromData::::set_default_time_format_lengthDateTime::Locale::FromData::set_default_time_format_length
0000s0sDateTime::Locale::FromData::::territory_codeDateTime::Locale::FromData::territory_code
0000s0sDateTime::Locale::FromData::::territory_idDateTime::Locale::FromData::territory_id
0000s0sDateTime::Locale::FromData::::time_format_defaultDateTime::Locale::FromData::time_format_default
0000s0sDateTime::Locale::FromData::::time_formatsDateTime::Locale::FromData::time_formats
0000s0sDateTime::Locale::FromData::::variant_codeDateTime::Locale::FromData::variant_code
0000s0sDateTime::Locale::FromData::::variant_idDateTime::Locale::FromData::variant_id
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package DateTime::Locale::FromData;
2
3use strict;
4use warnings;
5use namespace::autoclean;
6
7use DateTime::Locale::Util qw( parse_locale_code );
8use Params::ValidationCompiler 0.13 qw( validation_for );
9use Specio::Declare;
10use Storable qw( dclone );
11
12our $VERSION = '1.32';
13
14my @FormatLengths;
15
16BEGIN {
17 my @methods = qw(
18 code
19 name
20 language
21 script
22 territory
23 variant
24 native_name
25 native_language
26 native_script
27 native_territory
28 native_variant
29 am_pm_abbreviated
30 date_format_full
31 date_format_long
32 date_format_medium
33 date_format_short
34 time_format_full
35 time_format_long
36 time_format_medium
37 time_format_short
38 day_format_abbreviated
39 day_format_narrow
40 day_format_wide
41 day_stand_alone_abbreviated
42 day_stand_alone_narrow
43 day_stand_alone_wide
44 month_format_abbreviated
45 month_format_narrow
46 month_format_wide
47 month_stand_alone_abbreviated
48 month_stand_alone_narrow
49 month_stand_alone_wide
50 quarter_format_abbreviated
51 quarter_format_narrow
52 quarter_format_wide
53 quarter_stand_alone_abbreviated
54 quarter_stand_alone_narrow
55 quarter_stand_alone_wide
56 era_abbreviated
57 era_narrow
58 era_wide
59 default_date_format_length
60 default_time_format_length
61 first_day_of_week
62 version
63 glibc_datetime_format
64 glibc_date_format
65 glibc_date_1_format
66 glibc_time_format
67 glibc_time_12_format
68 );
69
70 for my $meth (@methods) {
71 my $sub = sub { $_[0]->{$meth} };
72 ## no critic (TestingAndDebugging::ProhibitNoStrict)
73 no strict 'refs';
74 *{$meth} = $sub;
75 }
76
77 @FormatLengths = qw( short medium long full );
78
79 for my $length (@FormatLengths) {
80 my $meth = 'datetime_format_' . $length;
81 my $key = 'computed_' . $meth;
82
83 my $sub = sub {
84 my $self = shift;
85
86 return $self->{$key} if exists $self->{$key};
87
88 return $self->{$key} = $self->_make_datetime_format($length);
89 };
90
91 ## no critic (TestingAndDebugging::ProhibitNoStrict)
92 no strict 'refs';
93 *{$meth} = $sub;
94 }
95}
96
97sub new {
98 my $class = shift;
99 my $data = shift;
100
101 return bless {
102 %{$data},
103 default_date_format_length => 'medium',
104 default_time_format_length => 'medium',
105 locale_data => $data
106 }, $class;
107}
108
109sub date_format_default {
110 return $_[0]->date_format_medium;
111}
112
113sub time_format_default {
114 return $_[0]->time_format_medium;
115}
116
117sub datetime_format {
118 return $_[0]->{datetime_format_medium};
119}
120
121sub datetime_format_default {
122 return $_[0]->datetime_format_medium;
123}
124
125sub _make_datetime_format {
126 my $self = shift;
127 my $length = shift;
128
129 my $dt_key = 'datetime_format_' . $length;
130 my $date_meth = 'date_format_' . $length;
131 my $time_meth = 'time_format_' . $length;
132
133 my $dt_format = $self->{$dt_key};
134 $dt_format =~ s/\{0\}/$self->$time_meth/eg;
135 $dt_format =~ s/\{1\}/$self->$date_meth/eg;
136
137 return $dt_format;
138}
139
140my $length = enum( values => [qw( full long medium short )] );
141my $validator = validation_for(
142 name => '_check_length_parameter',
143 name_is_optional => 1,
144 params => [ { type => $length } ],
145);
146
147sub set_default_date_format_length {
148 my $self = shift;
149 my ($l) = $validator->(@_);
150
151 $self->{default_date_format_length} = lc $l;
152}
153
154sub set_default_time_format_length {
155 my $self = shift;
156 my ($l) = $validator->(@_);
157
158 $self->{default_time_format_length} = lc $l;
159}
160
161sub date_formats {
162 my %formats;
163 for my $length (@FormatLengths) {
164 my $meth = 'date_format_' . $length;
165 $formats{$length} = $_[0]->$meth;
166 }
167 return \%formats;
168}
169
170sub time_formats {
171 my %formats;
172 for my $length (@FormatLengths) {
173 my $meth = 'time_format_' . $length;
174 $formats{$length} = $_[0]->$meth;
175 }
176 return \%formats;
177}
178
179sub available_formats {
180 my $self = shift;
181
182 $self->{computed_available_formats}
183 ||= [ sort keys %{ $self->_available_formats } ];
184
185 return @{ $self->{computed_available_formats} };
186}
187
188sub format_for {
189 my $self = shift;
190 my $for = shift;
191
192 return $self->_available_formats->{$for};
193}
194
195sub _available_formats { $_[0]->{available_formats} }
196
197sub prefers_24_hour_time {
198 my $self = shift;
199
200 return $self->{prefers_24_hour_time}
201 if exists $self->{prefers_24_hour_time};
202
203 $self->{prefers_24_hour_time} = $self->time_format_short =~ /h|K/ ? 0 : 1;
204}
205
206sub language_code {
207 my $self = shift;
208 return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
209 ->{language};
210}
211
212sub script_code {
213 my $self = shift;
214 return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
215 ->{script};
216}
217
218sub territory_code {
219 my $self = shift;
220 return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
221 ->{territory};
222}
223
224sub variant_code {
225 my $self = shift;
226 return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
227 ->{variant};
228}
229
230sub id {
231 $_[0]->code;
232}
233
234sub language_id {
235 $_[0]->language_code;
236}
237
238sub script_id {
239 $_[0]->script_code;
240}
241
242sub territory_id {
243 $_[0]->territory_code;
244}
245
246sub variant_id {
247 $_[0]->variant_code;
248}
249
250sub locale_data {
251 return %{ dclone( $_[0]->{locale_data} ) };
252}
253
254sub STORABLE_freeze {
255 my $self = shift;
256 my $cloning = shift;
257
258 return if $cloning;
259
260 return $self->code;
261}
262
263sub STORABLE_thaw {
264 my $self = shift;
265 shift;
266 my $serialized = shift;
267
268 require DateTime::Locale;
269 my $obj = DateTime::Locale->load($serialized);
270
271 %{$self} = %{$obj};
272
273 return $self;
274}
275
2761;
277
278# ABSTRACT: Class for locale objects instantiated from pre-defined data
279
280__END__