File Coverage

blib/lib/Convert/CEGH/Transliterate.pm
Criterion Covered Total %
statement 68 86 79.0
branch 9 16 56.2
condition 3 6 50.0
subroutine 10 10 100.0
pod 0 3 0.0
total 90 121 74.3


line stmt bran cond sub pod time code
1             package Convert::CEGH::Transliterate;
2 1     1   149356 use warnings;
  1         2  
  1         65  
3 1     1   6 use strict;
  1         2  
  1         40  
4 1     1   7 use utf8;
  1         3  
  1         5  
5 1     1   691 use Regexp::Ethiopic qw(:forms setForm);
  1         7613  
  1         5  
6              
7             BEGIN
8             {
9 1     1   486 use base qw( Exporter );
  1         2  
  1         138  
10 1     1   8 use vars qw( $COPTIC @EXPORT_OK $VERSION );
  1         3  
  1         135  
11              
12 1     1   5 @EXPORT_OK = qw( transliterate );
13              
14 1         3 $VERSION = "0.07";
15              
16 1         1680 $COPTIC = qr/[ϚCϢϤϦϨϬϮϪ]/;
17             }
18              
19              
20             sub fromIPA
21             {
22 4     4 0 10 my ($string, $script) = @_;
23              
24 4         9 $_ = $string;
25              
26 4 100 66     27 if ( $script =~ /^et/ ) {
    100          
    50          
27 1         3 tr/ʤʧΘv/ztzb/;
28 1         4 s/k'/q/g;
29 1         3 s/p'/P/g;
30 1         4 s/s'/S/g;
31 1         3 s/t'/T/g;
32 1         3 s/d'/D/g;
33 1         4 tr/abgdhwzħTjklmnsʕfSqrʃtξDPp/አበገደሀወዘሐጠየከለመነሠዐፈጸቀረሰተኀፀጰፐ/;
34             }
35             elsif ( $script =~ /^he/ ) {
36 1         3 tr/xfʤʧv/kpztb/;
37 1         4 s/k'/q/g;
38 1         4 s/s'/S/g;
39 1         3 s/d'/d/g;
40 1         4 s/p'/p/g;
41 1         2 s/t'/t/g;
42 1         3 s/ξ/h/g;
43 1         3 tr/abgdhwzħΘjklmnsʕpSqrʃt/אבגדהוזחטיכלמנסעפצקרשת/;
44 1         4 $_ = scalar reverse ( $_ );
45             }
46             elsif ( $script =~ /^el/ || $script =~ /^co/ ) {
47 2         10 tr/ʤʧʕwv/ztabb/;
48 2         5 s/ps/P/g;
49 2         5 s/d'/d/g;
50 2         5 s/p'/p/g;
51 2         4 s/t'/t/g;
52 2         25 s/ξ/h/g;
53 2         8 tr/abgdazaΘaklmnxaprstafʧPa/ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΧΨΩ/;
54             #
55             # this is broken, the coptic extras are missing
56             # and greek isn't mapping the extras, what is "w" is greek?
57             }
58              
59             $_
60 4         14 }
61              
62              
63             sub toIPA
64             {
65              
66 4     4 0 7 $_ = $_[0];
67              
68 4 50 33     46 if ( /$COPTIC/ || /\p{Greek}/ ) {
69 0         0 $_ = uc($_);
70 0         0 tr/ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ/abgdazaΘaklmnKaprstafxPa/;
71 0 0       0 if ( /$COPTIC/ ) {
72 0         0 tr/ϚCϢϤϦϨϪϬ/ssʃfxhʤʧ/;
73 0         0 s/Ϯ/t/g; # really "ti" but we ignore the vowel.
74             }
75 0         0 s/[ϚϜ]/w/g;
76 0         0 s/[ϘϞ]/k'/g;
77 0         0 s/K/kh/g;
78 0         0 s/P/ps/g;
79             }
80 4 50       19 if ( /\p{Ethiopic}/ ) {
81 4         17 s/(.)/setForm($1,$ግዕዝ)/eg;
  12         177  
82 4         65 tr/አበገደሀወዘሐጠየከለመነሠዐፈጸቀረሰተኀፀጰፐ/abgdhwzħTjklmnsʕfSqrʃtξDPp/;
83             #
84             # convert placeholder symbols to multiple symbols:
85             #
86 4         11 s/q/k'/g;
87 4         8 s/P/p'/g;
88 4         9 s/S/s'/g;
89 4         9 s/T/t'/g;
90 4         8 s/C/ʧ'/g;
91 4         7 s/D/d'/g;
92             }
93 4 50       16 if ( /\p{Hebrew}/ ) {
94 0         0 $_ = scalar reverse ( $_ );
95             #
96             # map finals to initials/medials:
97             #
98 0         0 s/ך/כ/g;
99 0         0 s/ץ/צ/g;
100 0         0 s/ף/פ/g;
101 0         0 s/ם/מ/g;
102 0         0 s/ן/נ/g;
103 0         0 tr/אבגדהוזחטיכלמנסעפצקרשת/abgdhwzħΘjklmnsʕpSqrʃt/;
104             #
105             # convert placeholder symbols to multiple symbols:
106             #
107 0         0 s/q/k'/;
108 0         0 s/S/s'/;
109             }
110 4         8 s/(.)a/$1/g; # strip vowels except first
111              
112 4         13 $_;
113             }
114              
115              
116             sub transliterate
117             {
118 4     4 0 187865 my ( $to, @strings ) = @_;
119              
120 4         7 my ( @trans ) = ();
121 4         10 foreach ( @strings ) {
122 4         15 push ( @trans, fromIPA ( toIPA ( $_ ), $to ) );
123             }
124              
125 4 50       18 ( wantarray ) ? @trans : $trans[0] ;
126             }
127              
128              
129             #########################################################
130             # Do not change this, Do not put anything below this.
131             # File must return "true" value at termination
132             1;
133             ##########################################################
134              
135             __END__