File Coverage

blib/lib/Pod/L10N/Model.pm
Criterion Covered Total %
statement 58 58 100.0
branch 19 22 86.3
condition 3 3 100.0
subroutine 3 3 100.0
pod 0 2 0.0
total 83 88 94.3


line stmt bran cond sub pod time code
1             package Pod::L10N::Model;
2              
3 21     21   171 use Carp;
  21         48  
  21         10858  
4              
5             sub decode_file {
6 28     28 0 68 my $fn = shift;
7 28 50       1463 open my $f1, '<', $fn or die "$!";
8 28         1029 my @slurp = (<$f1>);
9 28         318 close $f1;
10 28         227 my $sl = join '', @slurp;
11 28         135 return decode($sl);
12             }
13              
14             sub decode {
15 31     31 0 2492 my $ss = $_[0];
16 31         166 $ss =~ s/\n{3,}/\n\n/g;
17 31         395 $ss =~ s/\n$//;
18 31         301 my @sp = split /\n\n/, $ss;
19            
20 31         85 my @enjp = ();
21 31         73 my $f = 0;
22 31         88 my $en;
23             my $jp;
24 31         77 my $c = 0;
25 31         77 my $com;
26            
27 31         116 for (@sp){
28 366         1213 s/^\n*//;
29              
30 366 100       783 if($f == 10){
31 93 100       380 if(/^[(].+[)]$/){ #
32 5         36 push @enjp, [$com, $_];
33 5         11 $f = 0;
34 5         14 next;
35             } else {
36 88         234 push @enjp, [$com, undef];
37 88         138 $f = 0;
38             }
39             }
40              
41 361 100       673 if(/^=begin original/){
42 1         2 $f = 1;
43 1         2 $c = 0;
44 1         3 next;
45             }
46 360 100       615 if (/^=end original/){
47 2         5 $f = 2;
48 2 100       5 if($c == 0){
49 1         2 my ($en1, $jp1) = @{pop @enjp};
  1         2  
50 1         22 croak "end without begin\n$en1\n--\n$jp1\n";
51             }
52 1         2 next;
53             }
54 358 100 100     1637 if (/^=head/ || /^=item/){
55 93         171 $f = 10;
56 93         149 $com = $_;
57 93         223 next;
58             }
59            
60 265 100       496 if($f == 1){
61 1         2 $en .= $_;
62 1         2 $c++;
63 1         2 next;
64             }
65            
66 264 100       475 if($f == 2){
67 1         2 $jp .= $_;
68 1         3 $c--;
69 1 50       4 if($c == 0){
70 1         3 push @enjp, [$en, $jp];
71 1         3 $en = '';
72 1         2 $jp = '';
73 1         3 $f = 0;
74             }
75 1         1 next;
76             }
77            
78 263 50       450 if($f == 0){
79 263         668 push @enjp, [$_, undef];
80             }
81             }
82              
83 30         334 return \@enjp;
84             }
85              
86             1;
87