line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Lingua::JA::Romaji::Valid::Rule; |
2
|
|
|
|
|
|
|
|
3
|
4
|
|
|
4
|
|
27
|
use strict; |
|
4
|
|
|
|
|
10
|
|
|
4
|
|
|
|
|
139
|
|
4
|
4
|
|
|
4
|
|
25
|
use warnings; |
|
4
|
|
|
|
|
9
|
|
|
4
|
|
|
|
|
109
|
|
5
|
4
|
|
|
4
|
|
2538
|
use Lingua::JA::Romaji::Valid::Filter::Word; |
|
4
|
|
|
|
|
14
|
|
|
4
|
|
|
|
|
132
|
|
6
|
4
|
|
|
4
|
|
2681
|
use Lingua::JA::Romaji::Valid::Filter::Kana; |
|
4
|
|
|
|
|
603
|
|
|
4
|
|
|
|
|
2735
|
|
7
|
|
|
|
|
|
|
|
8
|
|
|
|
|
|
|
my $Verbose; |
9
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
sub new { |
11
|
308
|
|
|
308
|
1
|
394
|
my $class = shift; |
12
|
308
|
|
|
|
|
1711
|
my $self = bless {}, $class; |
13
|
|
|
|
|
|
|
|
14
|
308
|
|
|
|
|
1721
|
my %valid = ( a => 1, e => 1, i => 1, o => 1, u => 1, n => 1 ); |
15
|
308
|
|
|
|
|
740
|
foreach my $c ( $self->valid_consonants ) { |
16
|
8150
|
100
|
100
|
|
|
43008
|
if ( length $c == 2 or $c eq 'j' or $c eq 'y' ) { |
|
|
|
100
|
|
|
|
|
17
|
4213
|
|
|
|
|
5640
|
foreach my $v ( qw( a o u ) ) { |
18
|
12639
|
|
|
|
|
27321
|
$valid{ "$c$v" } = 1; |
19
|
|
|
|
|
|
|
} |
20
|
|
|
|
|
|
|
} |
21
|
|
|
|
|
|
|
else { |
22
|
3937
|
|
|
|
|
5574
|
foreach my $v ( qw( a e i o u ) ) { |
23
|
19685
|
|
|
|
|
48639
|
$valid{ "$c$v" } = 1; |
24
|
|
|
|
|
|
|
} |
25
|
|
|
|
|
|
|
} |
26
|
|
|
|
|
|
|
} |
27
|
308
|
|
|
|
|
1383
|
foreach my $item ( $self->should_delete ) { |
28
|
1160
|
|
|
|
|
2068
|
delete $valid{$item}; |
29
|
|
|
|
|
|
|
} |
30
|
308
|
|
|
|
|
3571
|
foreach my $item ( $self->should_add ) { |
31
|
2759
|
|
|
|
|
5125
|
$valid{$item} = 1; |
32
|
|
|
|
|
|
|
} |
33
|
|
|
|
|
|
|
|
34
|
308
|
|
|
|
|
935
|
$self->{valid} = \%valid; |
35
|
|
|
|
|
|
|
|
36
|
308
|
|
|
|
|
1222
|
$self->{filters} = { |
37
|
|
|
|
|
|
|
word => Lingua::JA::Romaji::Valid::Filter::Word->new, |
38
|
|
|
|
|
|
|
kana => Lingua::JA::Romaji::Valid::Filter::Kana->new, |
39
|
|
|
|
|
|
|
}; |
40
|
|
|
|
|
|
|
|
41
|
308
|
|
|
|
|
1256
|
$self; |
42
|
|
|
|
|
|
|
} |
43
|
|
|
|
|
|
|
|
44
|
328
|
|
|
328
|
1
|
899
|
sub valid_consonants { shift->_value( valid_consonants => @_ ) } |
45
|
328
|
|
|
328
|
1
|
1148
|
sub should_delete { shift->_value( should_delete => @_ ) } |
46
|
328
|
|
|
328
|
1
|
661
|
sub should_add { shift->_value( should_add => @_ ) } |
47
|
1161
|
|
|
1161
|
1
|
2936
|
sub filters { shift->_value( filters => @_ ) } |
48
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
sub _value { |
50
|
2145
|
|
|
2145
|
|
3593
|
my ($self, $name, @data) = @_; |
51
|
2145
|
|
66
|
|
|
6067
|
my $class = ref $self || $self; |
52
|
|
|
|
|
|
|
|
53
|
4
|
|
|
4
|
|
26
|
no strict 'refs'; |
|
4
|
|
|
|
|
8
|
|
|
4
|
|
|
|
|
1553
|
|
54
|
2145
|
100
|
|
|
|
4859
|
if ( @data ) { |
55
|
75
|
|
|
|
|
91
|
@{ "$class\::$name" } = @data; |
|
75
|
|
|
|
|
424
|
|
56
|
|
|
|
|
|
|
} |
57
|
2145
|
|
|
|
|
3271
|
@{ "$class\::$name" }; |
|
2145
|
|
|
|
|
14901
|
|
58
|
|
|
|
|
|
|
} |
59
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
sub _prepare { |
61
|
339
|
|
|
339
|
|
485
|
my ($self, $word_ref, @extra_filters) = @_; |
62
|
|
|
|
|
|
|
|
63
|
339
|
|
|
|
|
625
|
foreach my $filter ( $self->filters, @extra_filters ) { |
64
|
1262
|
100
|
|
|
|
5358
|
next unless $self->{filters}->{word}->can( $filter ); |
65
|
492
|
100
|
|
|
|
2271
|
unless ( $self->{filters}->{word}->$filter( $word_ref ) ) { |
66
|
2
|
50
|
|
|
|
10
|
warn "$filter returned false" if $Verbose; |
67
|
2
|
|
|
|
|
17
|
return; |
68
|
|
|
|
|
|
|
} |
69
|
|
|
|
|
|
|
} |
70
|
337
|
|
|
|
|
1364
|
return 1; |
71
|
|
|
|
|
|
|
} |
72
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
sub is_valid { |
74
|
802
|
|
|
802
|
1
|
1541
|
my ($self, $kana, @extra_filters) = @_; |
75
|
|
|
|
|
|
|
|
76
|
802
|
|
|
|
|
1381
|
foreach my $filter ( $self->filters, @extra_filters ) { |
77
|
3035
|
100
|
|
|
|
11640
|
next unless $self->{filters}->{kana}->can( $filter ); |
78
|
1848
|
100
|
|
|
|
7047
|
unless ( $self->{filters}->{kana}->$filter( \$kana ) ) { |
79
|
7
|
50
|
|
|
|
16
|
warn "$filter returned false" if $Verbose; |
80
|
7
|
|
|
|
|
53
|
return; |
81
|
|
|
|
|
|
|
} |
82
|
|
|
|
|
|
|
} |
83
|
|
|
|
|
|
|
|
84
|
795
|
100
|
|
|
|
2509
|
my $ret = exists $self->{valid}->{$kana} ? 1 : 0; |
85
|
795
|
100
|
|
|
|
1727
|
unless ( $ret ) { |
86
|
127
|
50
|
|
|
|
302
|
warn "$kana is not valid" if $Verbose; |
87
|
|
|
|
|
|
|
} |
88
|
795
|
|
|
|
|
3877
|
return $ret; |
89
|
|
|
|
|
|
|
} |
90
|
|
|
|
|
|
|
|
91
|
322
|
100
|
|
322
|
1
|
332
|
sub verbose { shift; @_ ? $Verbose = shift : $Verbose } |
|
322
|
|
|
|
|
890
|
|
92
|
|
|
|
|
|
|
|
93
|
|
|
|
|
|
|
1; |
94
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
__END__ |