root/lang/perl/DateTime-Lite/trunk/tools/lib/DateTime/Lite/Tool/Locale/Generator.pm @ 24516

Revision 24516, 2.7 kB (checked in by daisuke, 5 years ago)

skeleton for tool

  • Property svn:keywords set to Id
Line 
1# $Id$
2
3package DateTime::Lite::Tool::Locale::Generator;
4use Moose;
5use Moose::Util::TypeConstraints;
6use MooseX::Types::Path::Class qw(Dir);
7use DateTime::Lite::Tool::Locale::LDML;
8use File::chdir;
9use File::Temp ();
10use LWP::UserAgent;
11
12use LWP::UserAgent;
13
14with 'MooseX::Getopt';
15
16subtype 'DateTime::Lite::Tool::Locale::Generator::Version'
17    => as 'Str'
18    => where {
19        /^\d+\.\d+\.\d+$/
20    }
21;
22
23has 'verbose' => (
24    is => 'rw',
25    isa => 'Bool',
26    default => 1
27);
28
29has 'version' => (
30    is => 'rw',
31    isa => 'DateTime::Lite::Tool::Locale::Generator::Version',
32    required => 1,
33);
34
35has 'dest' => (
36    is => 'rw',
37    isa => Dir,
38    coerce => 1,
39    default => sub { Path::Class::Dir->new(File::Temp::tempdir( CLEANUP => 1 )) }
40);
41
42__PACKAGE__->meta->make_immutable;
43
44no Moose;
45no Moose::Util::TypeConstraints;
46
47sub run {
48    my $self = shift;
49
50    my $ua   = LWP::UserAgent->new();
51    $ua->mirror(
52        sprintf("http://unicode.org/Public/cldr/%s/core.zip", $self->version),
53        $self->dest->file("core.zip")
54    );
55   
56    local $CWD = $self->dest->stringify;
57    system("unzip", "core.zip") and die $!;
58
59    my @files = $self->read_all_files($self->dest->subdir("main"));
60    $self->generate_dat_files(@files);
61}
62
63sub read_all_files {
64    my $self = shift;
65    my $dir = Path::Class::Dir->new($_[0]);
66
67    my @ldml;
68    while ( my $file = $dir->next() ) {
69        next unless -f $file;
70        next unless $file->basename() =~ /\.xml$/;
71#        next if $opts{file} && $opts{file} ne $file->basename();
72
73        print "Reading $file\n" if $self->verbose;
74
75        my $ldml = DateTime::Lite::Tool::Locale::LDML->new_from_file($file);
76
77        # Any locale without this cannot be registered by
78        # DateTime::Locale.
79        next unless defined $ldml->en_language();
80
81        push @ldml, $ldml;
82    }
83
84    return sort { $a->id() cmp $b->id() } @ldml;
85}
86
87sub generate_dat_files {
88    my ($self, @ldml) = @_;
89
90    print "\nGenerating PM files\n" if $self->verbose;
91
92    for my $ldml ( sort @ldml ) {
93        if ( $self->verbose )
94        {
95            print sprintf( <<"EOF", $ldml->id(), $ldml->parent_id(), $ldml->version(), $ldml->generation_date() );
96  %s
97    parent_id:       %s
98    version:         %s
99    generation date: %s
100
101EOF
102        }
103
104        $self->generate_dat_file($ldml);
105    }
106}
107
108sub generate_dat_file {
109    my $ldml = shift;
110
111    my $dat_file = file( qw( misc locale ), $ldml->id() . q{.dat} );
112#    write_to_manifest($dat_file);
113
114    open my $fh, '>:utf8', $dat_file
115        or die "Cannot write to $dat_file: $!";
116
117    write_pm_header( $fh, $ldml );
118    write_pm_inheritance( $fh, $ldml );
119    write_pm_cldr_version( $fh );
120    write_pm_subs( $fh, $ldml );
121    write_pm_footer( $fh, $ldml );
122}
123
1241;
Note: See TracBrowser for help on using the browser.