File Coverage

blib/lib/Regexp/Ethiopic/Amharic.pm
Criterion Covered Total %
statement 62 77 80.5
branch 9 20 45.0
condition n/a
subroutine 9 10 90.0
pod 0 2 0.0
total 80 109 73.3


line stmt bran cond sub pod time code
1             package Regexp::Ethiopic::Amharic;
2 1     1   97998 use base qw(Regexp::Ethiopic); # this might be more useful later,
  1         2  
  1         447  
3             # we at least get "Exporter" for free.
4              
5 1     1   6 use utf8;
  1         1  
  1         8  
6             BEGIN
7             {
8 1     1   25 use strict;
  1         1  
  1         14  
9 1     1   2 use warnings;
  1         3  
  1         46  
10 1     1   7 use vars qw($VERSION @EXPORT_OK %AmharicEquivalence %AmharicClassEquivalence);
  1         2  
  1         675  
11              
12              
13 1     1   3 $VERSION = "0.21";
14            
15 1         2 @EXPORT_OK = qw(%AmharicEquivalence %AmharicClassEquivalence);
16              
17              
18             #
19             # Amharic Rules Orthography Equivalence
20             #
21 1         15 %AmharicEquivalence =(
22             ሀ => "ሀሃሐሓኀኃኻ",
23             ሁ => "ሁሑኁኹ",
24             ሂ => "ሂሒኂኺ",
25             ሄ => "ሄሔኄኼ",
26             ህ => "ህሕኅኽ",
27             ሆ => "ሆሖኆኈኾዀ",
28              
29             ኋ => "ሗኋዃ",
30              
31             ሰ => "ሰሠ",
32             ሱ => "ሱሡ",
33             ሲ => "ሲሢ",
34             ሳ => "ሳሣ",
35             ሴ => "ሴሤ",
36             ስ => "ስሥ",
37             ሶ => "ሶሦ",
38             ሷ => "ሷሧ",
39              
40             ቁ => "ቁቍ",
41             ቆ => "ቆቈ",
42              
43             አ => "አዓዐኣ",
44             ኡ => "ኡዑ",
45             ኢ => "ኢዒ",
46             ኤ => "ኤዔ",
47             እ => "እዕ",
48             ኦ => "ኦዖ",
49              
50             ኮ => "ኮኰ",
51             ጎ => "ጎጐ",
52              
53             ጸ => "ጸፀ",
54             ጹ => "ጹፁ",
55             ጺ => "ጺፂ",
56             ጻ => "ጻፃ",
57             ጼ => "ጼፄ",
58             ጽ => "ጽፅ",
59             ጾ => "ጾፆ",
60             );
61              
62 1         4 foreach (ord('ሀ')..ord('ሆ')) {
63 7         10 my $key = chr($_);
64             # print "KEY $key / $AmharicEquivalence{$key}\n";
65 7 100       9 next if ( $key eq 'ሃ' );
66 6         11 my @values = split (//, $AmharicEquivalence{$key});
67 6         7 foreach (@values) {
68             # print " VALUE: $_\n";
69             $AmharicEquivalence{$_}
70 29         47 = $AmharicEquivalence{$key}
71             ;
72             }
73             }
74             $AmharicEquivalence{'ሗ'}
75             = $AmharicEquivalence{'ዃ'}
76 1         3 = $AmharicEquivalence{'ኋ'}
77             ;
78 1         1 foreach (ord('ሰ')..ord('ሷ')) {
79 8         8 my $key = chr($_);
80 8         19 $AmharicEquivalence{$key} =~ /(\w)$/;
81             $AmharicEquivalence{$1}
82 8         13 = $AmharicEquivalence{$key}
83             ;
84             }
85             $AmharicEquivalence{'ቍ'}
86 1         1 = $AmharicEquivalence{'ቁ'}
87             ;
88             $AmharicEquivalence{'ቈ'}
89 1         2 = $AmharicEquivalence{'ቆ'}
90             ;
91             $AmharicEquivalence{'ኰ'}
92 1         1 = $AmharicEquivalence{'ኮ'}
93             ;
94             $AmharicEquivalence{'ጐ'}
95 1         2 = $AmharicEquivalence{'ጎ'}
96             ;
97 1         1 foreach (ord('አ')..ord('ኦ')) {
98 7         8 my $key = chr($_);
99 7 100       9 next if ( $key eq 'ኣ' );
100 6         9 my @values = split (//, $AmharicEquivalence{$key});
101 6         6 foreach (@values) {
102             $AmharicEquivalence{$_}
103 14         18 = $AmharicEquivalence{$key}
104             ;
105             }
106             }
107 1         1 foreach (ord('ጸ')..ord('ጾ')) {
108 7         8 my $key = chr($_);
109 7         12 $AmharicEquivalence{$key} =~ /(\w)$/;
110             $AmharicEquivalence{$1}
111 7         9 = $AmharicEquivalence{$key}
112             ;
113             }
114              
115              
116             #
117             # Family Eqivalence
118             #
119             %AmharicClassEquivalence =(
120 1         3 ሀ => "ሀ-ሆሐ-ሗኀ-ኆኈ-ኍኸ-ኾዀ-ዅ",
121             ሰ => "ሰ-ሷሠ-ሧ",
122             አ => "አ-ኧዐ-ዖ",
123             ጸ => "ጸ-ጿፀ-ፆ"
124             );
125             $AmharicClassEquivalence{'ሐ'}
126             = $AmharicClassEquivalence{'ኀ'}
127             = $AmharicClassEquivalence{'ኸ'}
128 1         2 = $AmharicClassEquivalence{'ሀ'}
129             ;
130             $AmharicClassEquivalence{'ሠ'}
131 1         1 = $AmharicClassEquivalence{'ሰ'}
132             ;
133             $AmharicClassEquivalence{'ዐ'}
134 1         2 = $AmharicClassEquivalence{'አ'}
135             ;
136             $AmharicClassEquivalence{'ፀ'}
137 1         53 = $AmharicClassEquivalence{'ጸ'}
138             ;
139             }
140              
141              
142             sub import
143             {
144              
145 1     1   8 my @args = ( shift ); # package
146 1         3 foreach (@_) {
147 1 50       5 if ( /overload/o ) {
    0          
148 1     1   5 use overload;
  1         8  
  1         3  
149 1         4 overload::constant 'qr' => \&getRe;
150             }
151             elsif ( /EthiopicClasses|(sub|[gs]et)Form|:forms|:utils/ ) {
152 0         0 Regexp::Ethiopic->export_to_level (1, "Regexp::Ethiopic", $_);
153             }
154             else {
155 0         0 push (@args, $_);
156             }
157             }
158 1 50       54 if ($#args) {
159 0         0 Regexp::Ethiopic::Amharic->export_to_level (1, @args);
160             }
161              
162             }
163              
164              
165             #
166             # move into Regexp::Ethiopic later...
167             #
168             sub getFamilyEquivalent
169             {
170 0     0 0 0 my ($chars) = @_;
171              
172              
173 0 0       0 return $chars if ( length($chars) == 1 );
174              
175 0         0 $chars =~ s/(\w)(?=\w)/$1,/og;
176 0         0 my @Chars = split ( /,/, $chars );
177 0         0 my $return;
178 0         0 foreach (@Chars) {
179 0         0 $char = $_;
180 0         0 foreach ( keys %AmharicClassEquivalence ) {
181 0 0       0 $return .= $_ if ( $AmharicClassEquivalence{$char} eq $AmharicClassEquivalence{$_} );
182             }
183             }
184              
185 0         0 $return;
186             }
187              
188              
189             sub getRe
190             {
191 7 100   7 0 140005 $_ = ($#_) ? $_[1] : $_[0];
192              
193              
194 7 50       33 s/\[=(\p{Ethiopic})=\]/($AmharicEquivalence{$1}) ? "[$AmharicEquivalence{$1}]" : $1/eog;
  9         38  
195 7 0       11 s/\[=#(\p{Ethiopic})#=\]/($AmharicClassEquivalence{$1}) ? "[$AmharicClassEquivalence{$1}]" : $1/eog;
  0         0  
196 7         13 s/\[=#([\p{Ethiopic}]+)#=\]/Regexp::Ethiopic::setRange(getFamilyEquivalent($1),"all")/eog;
  0         0  
197              
198 7         19 Regexp::Ethiopic::getRe ( $_ );
199             }
200              
201              
202              
203             #########################################################
204             # Do not change this, Do not put anything below this.
205             # File must return "true" value at termination
206             1;
207             ##########################################################
208              
209              
210             __END__