Group
Extension

Time-C/lib/Time/C/Util.pm

use strict;
use warnings;
package Time::C::Util;
$Time::C::Util::VERSION = '0.024';
# ABSTRACT: Utility functions for Time::C and friends.

use Carp qw/ croak /;
use Data::Munge qw/ slurp /;
use File::Share qw/ dist_file /;
use Function::Parameters qw/ :strict /;
use Exporter qw/ import /;
use JSON::MaybeXS;

our @EXPORT_OK = qw/ get_fmt_tok get_locale /;

my $loc_db;

fun get_fmt_tok ($fmt, $pos) {
    return undef if $pos >= length $fmt;

    my $tok_len = substr($fmt, $pos, 1) eq '%' ? 2 : 1;

    my $tok = substr $fmt, $pos, $tok_len;

    while (($tok eq '%O') or ($tok eq '%E') or ($tok eq '%-')) {
        $tok .= substr($fmt, $pos + $tok_len, 1); $tok_len++;
    }

    $_[1] = $pos + $tok_len;
    return $tok;
}

fun get_locale($type, $locale) {
    if (not defined $loc_db) {
        my $fn = dist_file('Time-C', 'locale.db');
        open my $fh, '<', $fn
          or croak "Could not open $fn: $!";
        $loc_db = decode_json slurp $fh;
    }

    my $ret;
    if ($type eq 'weekdays') {
        $ret = $loc_db->{days}->{$locale};
    } elsif ($type eq 'weekdays_abbr') {
        $ret = $loc_db->{days_abbr}->{$locale};
    } elsif ($type eq 'months') {
        $ret = $loc_db->{months}->{$locale};
    } elsif ($type eq 'months_abbr') {
        $ret = $loc_db->{months_abbr}->{$locale};
    } elsif ($type eq 'am_pm') {
        $ret = $loc_db->{am_pm}->{$locale};
    } elsif ($type eq 'datetime') {
        $ret = $loc_db->{d_t_fmt}->{$locale};
    } elsif ($type eq 'date') {
        $ret = $loc_db->{d_fmt}->{$locale};
    } elsif ($type eq 'time') {
        $ret = $loc_db->{t_fmt}->{$locale};
    } elsif ($type eq 'time_ampm') {
        $ret = $loc_db->{r_fmt}->{$locale};
    } elsif ($type eq 'era') {
        $ret = $loc_db->{era}->{$locale} // [];
    } elsif ($type eq 'era_datetime') {
        $ret = $loc_db->{era_d_t_fmt}->{$locale} // $loc_db->{d_t_fmt}->{$locale};
    } elsif ($type eq 'era_time') {
        $ret = $loc_db->{era_t_fmt}->{$locale} // $loc_db->{t_fmt}->{$locale};
    } elsif ($type eq 'era_date') {
        $ret = $loc_db->{era_d_fmt}->{$locale} // $loc_db->{d_fmt}->{$locale};
    } elsif ($type eq 'digits') {
        $ret = $loc_db->{alt_digits}->{$locale} // [];
    } else { croak "Unknown locale type: $type."; }

    croak "Value for locale type $type in locale $locale is undefined."
      if not defined $ret;

    return $ret;
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Time::C::Util - Utility functions for Time::C and friends.

=head1 VERSION

version 0.024

=head1 AUTHOR

Andreas Guldstrand <andreas.guldstrand@gmail.com>

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2016 by Andreas Guldstrand.

This is free software, licensed under:

  The MIT (X11) License

=cut


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.