CLDR-Number
view release on metacpan or search on metacpan
lib/CLDR/Number/Role/Format.pm view on Meta::CPAN
croak "minimum_fraction_digits '$_[0]' is invalid"
if defined $_[0] && !looks_like_number $_[0];
},
trigger => sub {
my ($self, $min) = @_;
return unless defined $self->maximum_fraction_digits;
return if $min <= $self->maximum_fraction_digits;
$self->{maximum_fraction_digits} = $min;
},
);
has maximum_fraction_digits => (
is => 'rw',
isa => sub {
croak "maximum_fraction_digits '$_[0]' is invalid"
if defined $_[0] && !looks_like_number $_[0];
},
trigger => sub {
my ($self, $max) = @_;
return unless defined $self->minimum_fraction_digits;
return if $max >= $self->minimum_fraction_digits;
$self->{minimum_fraction_digits} = $max;
},
);
has primary_grouping_size => (
is => 'rw',
isa => sub {
croak "primary_grouping_size '$_[0]' is invalid"
if defined $_[0] && !looks_like_number $_[0];
},
);
has secondary_grouping_size => (
is => 'rw',
isa => sub {
croak "secondary_grouping_size '$_[0]' is invalid"
if defined $_[0] && !looks_like_number $_[0];
},
);
has rounding_increment => (
is => 'rw',
isa => sub {
croak "rounding_increment '$_[0]' is invalid"
if defined $_[0] && !looks_like_number $_[0];
},
);
has _positive_pattern => (
is => 'rw',
);
has _negative_pattern => (
is => 'rw',
);
before BUILD => sub {
my ($self) = @_;
return if $self->_has_init_arg('locale');
$self->_build_pattern;
};
after _trigger_locale => sub {
my ($self) = @_;
$self->_build_pattern;
};
sub _build_pattern {
my ($self) = @_;
$self->_set_unless_init_arg(
pattern => $self->_get_data(pattern => $self->_pattern_type)
);
}
sub _trigger_pattern {
my ($self, $input_pattern) = @_;
my $cache = $CLDR::Number::Data::Base::CACHE;
if (my $attributes
= $cache->{attribute}{$input_pattern}
|| $cache->{pattern}{$input_pattern}
&& $cache->{attribute}{ $cache->{pattern}{$input_pattern}[0] }) {
while (my ($attribute, $value) = each %$attributes) {
$self->_set_unless_init_arg($attribute => $value);
}
my $pattern = $cache->{pattern}{$input_pattern};
$self->_positive_pattern(
$pattern && $pattern->[1] || $N
);
$self->_negative_pattern(
$pattern && $pattern->[2] || $M . $self->_positive_pattern
);
return;
}
# temporarily replace escaped quotes
$input_pattern =~ s{''}{$Q}g;
my $internal_pattern = '';
my $canonical_pattern = '';
my $num_subpattern;
while ($input_pattern =~ m{
\G (?:
( [^']+ ) # non-quoted text
|
' ( [^']+ ) (?: ' | $ ) # quoted text (trailing quote optional)
)
}xg) {
my $nonquoted = $1;
my $quoted = $2;
if (defined $nonquoted) {
if (!defined $num_subpattern && $nonquoted =~ m{
^ ( .*? ) # preânumber pattern
( (?: \* \X )? [@#0-9,.]+ ) # number pattern
( run in 0.595 second using v1.01-cache-2.11-cpan-ceb78f64989 )