| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Locale::Msgfmt::po; |
|
2
|
|
|
|
|
|
|
|
|
3
|
4
|
|
|
4
|
|
63
|
use 5.008005; |
|
|
4
|
|
|
|
|
12
|
|
|
|
4
|
|
|
|
|
160
|
|
|
4
|
4
|
|
|
4
|
|
18
|
use strict; |
|
|
4
|
|
|
|
|
6
|
|
|
|
4
|
|
|
|
|
128
|
|
|
5
|
4
|
|
|
4
|
|
25
|
use warnings; |
|
|
4
|
|
|
|
|
10
|
|
|
|
4
|
|
|
|
|
151
|
|
|
6
|
4
|
|
|
4
|
|
23
|
use Locale::Msgfmt::Utils (); |
|
|
4
|
|
|
|
|
6
|
|
|
|
4
|
|
|
|
|
3901
|
|
|
7
|
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
our $VERSION = '0.15'; |
|
9
|
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
sub new { |
|
11
|
15
|
|
|
15
|
0
|
26
|
my $class = shift; |
|
12
|
15
|
|
50
|
|
|
62
|
return bless shift || {}, $class; |
|
13
|
|
|
|
|
|
|
} |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
sub cleanup_string { |
|
16
|
893
|
|
|
893
|
0
|
1220
|
my $str = shift; |
|
17
|
893
|
|
|
|
|
1137
|
$str =~ s/\\n/\n/g; |
|
18
|
893
|
|
|
|
|
969
|
$str =~ s/\\r/\r/g; |
|
19
|
893
|
|
|
|
|
1213
|
$str =~ s/\\t/\t/g; |
|
20
|
893
|
|
|
|
|
945
|
$str =~ s/\\"/"/g; |
|
21
|
893
|
|
|
|
|
994
|
$str =~ s/\\\\/\\/g; |
|
22
|
893
|
|
|
|
|
2874
|
return $str; |
|
23
|
|
|
|
|
|
|
} |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
sub add_string { |
|
26
|
468
|
|
|
468
|
0
|
679
|
my $self = shift; |
|
27
|
468
|
|
|
|
|
484
|
my $hash = shift; |
|
28
|
468
|
|
|
|
|
454
|
my %h = %{$hash}; |
|
|
468
|
|
|
|
|
1448
|
|
|
29
|
468
|
100
|
66
|
|
|
2247
|
return if !( defined( $h{msgid} ) && defined( $h{msgstr} ) ); |
|
30
|
462
|
100
|
100
|
|
|
1110
|
return if ( $h{fuzzy} && !$self->{fuzzy} && length( $h{msgid} ) > 0 ); |
|
|
|
|
66
|
|
|
|
|
|
31
|
453
|
|
|
|
|
1086
|
my $msgstr = join Locale::Msgfmt::Utils::null(), @{ $h{msgstr} }; |
|
|
453
|
|
|
|
|
1008
|
|
|
32
|
453
|
100
|
|
|
|
1055
|
return if ( $msgstr eq "" ); |
|
33
|
445
|
|
|
|
|
423
|
my $context; |
|
34
|
|
|
|
|
|
|
my $plural; |
|
35
|
|
|
|
|
|
|
|
|
36
|
445
|
100
|
|
|
|
670
|
if ( $h{msgctxt} ) { |
|
37
|
2
|
|
|
|
|
6
|
$context = cleanup_string( $h{msgctxt} ) . Locale::Msgfmt::Utils::eot(); |
|
38
|
|
|
|
|
|
|
} else { |
|
39
|
443
|
|
|
|
|
516
|
$context = ""; |
|
40
|
|
|
|
|
|
|
} |
|
41
|
445
|
100
|
|
|
|
684
|
if ( $h{msgid_plural} ) { |
|
42
|
1
|
|
|
|
|
4
|
$plural = Locale::Msgfmt::Utils::null() . cleanup_string( $h{msgid_plural} ); |
|
43
|
|
|
|
|
|
|
} else { |
|
44
|
444
|
|
|
|
|
479
|
$plural = ""; |
|
45
|
|
|
|
|
|
|
} |
|
46
|
445
|
|
|
|
|
926
|
$self->{mo}->add_string( $context . cleanup_string( $h{msgid} ) . $plural, cleanup_string($msgstr) ); |
|
47
|
|
|
|
|
|
|
} |
|
48
|
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
sub read_po { |
|
50
|
15
|
|
|
15
|
0
|
19
|
my $self = shift; |
|
51
|
15
|
|
|
|
|
18
|
my $pofile = shift; |
|
52
|
15
|
|
|
|
|
23
|
my $mo = $self->{mo}; |
|
53
|
15
|
50
|
|
|
|
584
|
open my $F, '<', $pofile or die "Could not open ($pofile) $!"; |
|
54
|
15
|
|
|
|
|
28
|
my %h = (); |
|
55
|
15
|
|
|
|
|
17
|
my $type; |
|
56
|
15
|
|
|
|
|
271
|
while (<$F>) { |
|
57
|
1962
|
|
|
|
|
2382
|
s/\r\n/\n/; |
|
58
|
1962
|
100
|
|
|
|
9374
|
if (/^(msgid(?:|_plural)|msgctxt) +"(.*)" *$/) { |
|
|
|
100
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
59
|
465
|
|
|
|
|
845
|
$type = $1; |
|
60
|
465
|
50
|
|
|
|
900
|
if ( defined( $h{$type} ) ) { |
|
61
|
0
|
|
|
|
|
0
|
$self->add_string( \%h ); |
|
62
|
0
|
|
|
|
|
0
|
%h = (); |
|
63
|
|
|
|
|
|
|
} |
|
64
|
465
|
|
|
|
|
2224
|
$h{$type} = $2; |
|
65
|
|
|
|
|
|
|
} elsif (/^msgstr(?:\[(\d*)\])? +"(.*)" *$/) { |
|
66
|
463
|
|
|
|
|
566
|
$type = "msgstr"; |
|
67
|
463
|
100
|
|
|
|
920
|
if ( !$h{$type} ) { |
|
68
|
462
|
|
|
|
|
452
|
@{ $h{$type} } = (); |
|
|
462
|
|
|
|
|
1210
|
|
|
69
|
|
|
|
|
|
|
} |
|
70
|
463
|
|
|
|
|
532
|
push @{ $h{$type} }, $2; |
|
|
463
|
|
|
|
|
2286
|
|
|
71
|
|
|
|
|
|
|
} elsif (/^"(.*)" *$/) { |
|
72
|
60
|
100
|
|
|
|
95
|
if ( $type eq "msgstr" ) { |
|
73
|
34
|
|
|
|
|
31
|
@{ $h{$type} }[ scalar( @{ $h{$type} } ) - 1 ] .= $1; |
|
|
34
|
|
|
|
|
180
|
|
|
|
34
|
|
|
|
|
58
|
|
|
74
|
|
|
|
|
|
|
} else { |
|
75
|
26
|
|
|
|
|
142
|
$h{$type} .= $1; |
|
76
|
|
|
|
|
|
|
} |
|
77
|
|
|
|
|
|
|
} elsif (/^ *$/) { |
|
78
|
453
|
|
|
|
|
999
|
$self->add_string( \%h ); |
|
79
|
453
|
|
|
|
|
1251
|
%h = (); |
|
80
|
453
|
|
|
|
|
1807
|
$type = undef; |
|
81
|
|
|
|
|
|
|
} elsif (/^#/) { |
|
82
|
521
|
100
|
|
|
|
1876
|
if (/^#, fuzzy/) { |
|
|
|
100
|
|
|
|
|
|
|
83
|
12
|
|
|
|
|
40
|
$h{fuzzy} = 1; |
|
84
|
|
|
|
|
|
|
} elsif (/^#:/) { |
|
85
|
454
|
50
|
|
|
|
2050
|
if ( defined( $h{msgid} ) ) { |
|
86
|
0
|
|
|
|
|
0
|
$self->add_string( \%h ); |
|
87
|
0
|
|
|
|
|
0
|
%h = (); |
|
88
|
0
|
|
|
|
|
0
|
$type = undef; |
|
89
|
|
|
|
|
|
|
} |
|
90
|
|
|
|
|
|
|
} |
|
91
|
|
|
|
|
|
|
} else { |
|
92
|
0
|
|
|
|
|
0
|
die( "unknown line: " . $_ ); |
|
93
|
|
|
|
|
|
|
} |
|
94
|
|
|
|
|
|
|
} |
|
95
|
15
|
|
|
|
|
39
|
$self->add_string( \%h ); |
|
96
|
15
|
|
|
|
|
256
|
close $F; |
|
97
|
|
|
|
|
|
|
} |
|
98
|
|
|
|
|
|
|
|
|
99
|
|
|
|
|
|
|
sub parse { |
|
100
|
15
|
|
|
15
|
0
|
21
|
my $self = shift; |
|
101
|
15
|
|
|
|
|
23
|
my ( $pofile, $mo ) = @_; |
|
102
|
15
|
|
|
|
|
35
|
$self->{mo} = $mo; |
|
103
|
15
|
|
|
|
|
38
|
$self->read_po($pofile); |
|
104
|
|
|
|
|
|
|
} |
|
105
|
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
1; |
|
107
|
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
__END__ |