File Coverage

blib/lib/Encode/Arabic/Franco.pm
Criterion Covered Total %
statement 13 15 86.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 20 90.0


line stmt bran cond sub pod time code
1             package Encode::Arabic::Franco;
2 5     5   78330 use parent qw(Encode::Encoding);
  5         1306  
  5         23  
3 5     5   43085 use strict;
  5         9  
  5         83  
4 5     5   17 use warnings;
  5         15  
  5         99  
5 5     5   25 use utf8;
  5         5  
  5         25  
6 5     5   971 use Lingua::AR::Tashkeel;
  0            
  0            
7             use Unicode::Normalize;
8             use charnames ':full';
9              
10             use Carp;
11              
12             __PACKAGE__->Define(qw(Franco-Arabic Arabizy));
13              
14             # ABSTRACT: Does transliteration from chat Arabic
15             our $VERSION = '0.006'; # VERSION
16              
17             sub import { # imports Encode
18             require Encode;
19             push @Encode::ISA, 'Exporter' unless Encode->can('export_to_level');
20             Encode->export_to_level(1, @_);
21             }
22              
23             sub decode($$;$){
24             my ($obj, $orig, $chk) = @_;
25              
26             my $str = NFC $orig;
27              
28             # Alefs
29             $str =~ s/\b[ae]l(?!e)(?=..)/ال\N{ARABIC SUKUN}/g;
30             $str =~ s/(2|\b)e(?!e)/إ\N{ARABIC KASRA}/g;
31             $str =~ s/e2a(?=h?\b)/\N{ARABIC KASRA}ئ\N{ARABIC FATHA}a/g;
32             $str =~ s/e2(?=.\b)/\N{ARABIC KASRA}ئ\N{ARABIC SUKUN}/g;
33             $str =~ s/\B2(?=e)\B/ئ\N{ARABIC KASRA}/g;
34             $str =~ s/a2a(?=.\b)/ائ\N{ARABIC FATHA}/g;
35             $str =~ s/a2e(?=.\b)/ائ\N{ARABIC KASRA}/g;
36             $str =~ s/a2[ou](?=.\b)/ائ\N{ARABIC DAMMA}/g;
37             #$str =~ s/a2\B/\N{ARABIC FATHA}أ/g;
38             $str =~ s/o2o/ؤ\N{ARABIC DAMMA}/g;
39             $str =~ s/o2/ؤ\N{ARABIC SUKUN}/g;
40             $str =~ s/\b2?[ou]/أ\N{ARABIC DAMMA}/g;
41             $str =~ s/\b2a/آ/g;
42             $str =~ s/\ba|2a|\b2/أ\N{ARABIC FATHA}/g;
43             $str =~ s/([^aoyei])2/$1ء/g;
44              
45             # Digraphs
46             $str =~ s/3'/غ/g;
47             $str =~ s/7'/خ/g;
48             $str =~ s/kh/خ/g;
49             $str =~ s/gh/غ/g;
50             $str =~ s/sh/ش/g;
51             $str =~ s/ah\b/ة/g;
52             $str =~ s/ss/ص/g;
53             $str =~ s/ee/\N{ARABIC KASRA}ي/g;
54             $str =~ s/th/ث/g;
55             $str =~ s/oo/\N{ARABIC DAMMA}و/g;
56             $str =~ s/zz|6'/ظ/g;
57              
58             # Vowelize
59             #$str =~ s/aأ|[aا]2/ائ\N{ARABIC FATHA}/g;
60             $str =~ s/2\b/ء/g;
61             $str =~ s/yأ/يئ/g;
62             #print $str if $orig =~ /
63             $str =~ s/(?=أ|)h\b/ة/g;
64             $str =~ s/ءo|2و|ء(?=\N{ARABIC DAMMA}و)/ؤ/g;
65             $str =~ s/aأ|[aا]2/\N{ARABIC FATHA}أ/g;
66             $str =~ s/(?<=ائ\N{ARABIC FATHA})a//g;
67             $str =~ s/e/\N{ARABIC KASRA}/g;
68             $str =~ s/aإ/ائ\N{ARABIC KASRA}/g;
69             $str =~ s/aإ/ائ\N{ARABIC KASRA}/g;
70             #return $str if $orig =~ /22emah/;
71             $str =~ s/(?<=أ\N{ARABIC FATHA})إ/ئ/g;
72              
73              
74             # Fix Alefs
75             $str =~ s/أإ/أئ\N{ARABIC KASRA}/g;
76             #$str =~ s/(?=.)ائ(..)/أ$1/g;
77             #$str =~ s/(?!a)ء/ئ/g;
78             $str =~ s/ئ(?=\N{ARABIC DAMMA})/ؤ/g;
79             $str =~ s/(?=ئَ)a//g;
80             #$str =~ s/\b(.)ئ(..)\b/$1أ$2/g;
81             #return $str if $orig =~ /ma2mn/;
82              
83              
84             $str =~ s/'//g;
85              
86             $str =~ tr
87             { 3 4 5 6 7 8 9 }
88             { ع ش خ ط ح غ ق };
89              
90             $str =~ tr
91             { a b c d e f g h i j k l m n o p q r s t u v w x y z }
92             { ا ب c د e ف ج ه ي ج ك ل م ن و پ ق ر س ت و ڤ و x ي ز };
93            
94             $str =~ tr
95             { , ; ? }
96             { ، ؛ ؟ };
97              
98             #$str =~ s/\w//ga; # strip untranslated characters
99              
100             $str = Lingua::AR::Tashkeel->strip($str);
101              
102             $_[1] = '' if $chk;
103             return $str;
104             }
105             1;
106              
107             __END__