File Coverage

blib/lib/Lingua/IN/TGC.pm
Criterion Covered Total %
statement 94 94 100.0
branch 25 50 50.0
condition 2 3 66.6
subroutine 24 24 100.0
pod n/a
total 145 171 84.8


line stmt bran cond sub pod time code
1              
2             package Lingua::IN::TGC;
3              
4 5     5   296538 use Mouse;
  5         124743  
  5         21  
5 5     5   7206 use Regexp::Grammars;
  5         113033  
  5         32  
6 5     5   2811 use Kavorka -all;
  5         62675  
  5         38  
7 5     5   1405925 use utf8;
  5         11  
  5         41  
8              
9             our $VERSION = '2.03';
10              
11             my @result = ();
12              
13 5 50   5   7461 method IN::String::X() {
  5 50   5   12  
  5         801  
  5         24  
  5         20  
  5         8  
14 5         11 for my $element ( @{ $self->{Tgc} } ) {
  5         19  
15 58         108 $element->X();
16             }
17             }
18              
19 5 50   5   5375 method IN::Tgc::X() {
  5 50   58   10  
  5         673  
  58         103  
  58         115  
  58         63  
20             ( $self->{S}
21             || $self->{Vm}
22             || $self->{CH}
23             || $self->{CHCvm}
24             || $self->{N}
25             || $self->{Other}
26 58   66     408 || $self->{NT} )->X();
27             }
28              
29 5 50   5   5246 method IN::S::X() {
  5 50   6   24  
  5         535  
  6         12  
  6         10  
  6         8  
30 6         15 push @result, $self->{''};
31             }
32              
33 5 50   5   5044 method IN::Vm::X() {
  5 50   3   11  
  5         608  
  3         10  
  3         8  
  3         5  
34 3         13 push @result, $self->{V}{''} . $self->{m_}{''};
35             }
36              
37 5 50   5   5159 method IN::CH::X() {
  5 50   1   11  
  5         500  
  1         4  
  1         4  
  1         2  
38 1         4 push @result, $self->{''};
39             }
40              
41 5 50   5   5107 method IN::CHCvm::X() {
  5 50   22   10  
  5         648  
  22         44  
  22         47  
  22         26  
42             push @result,
43 22         94 $self->{CH__}{''} . $self->{C}{''} . $self->{v_}{''} . $self->{m_}{''};
44             }
45              
46 5 50   5   5091 method IN::N::X() {
  5 50   1   18  
  5         504  
  1         4  
  1         4  
  1         2  
47 1         3 push @result, $self->{''};
48             }
49              
50 5 50   5   5380 method IN::Other::X() {
  5 50   2   9  
  5         583  
  2         6  
  2         5  
  2         3  
51 2         7 push @result, $self->{''};
52             }
53              
54 5 50   5   5178 method IN::NT::X() {
  5 50   23   10  
  5         688  
  23         40  
  23         36  
  23         28  
55 23         63 push @result, $self->{''};
56             }
57              
58             qr {
59             <grammar: Lingua::IN::TGC::TE>
60              
61             <objrule: IN::Tgc> <ws: (\s++)*> <S> | <Vm> | <CH> | <CHCvm> | <N> | <Other> | <NT>
62             <objrule: IN::Vm> <V><m_>
63             <objrule: IN::CHCvm> <CH__><C><v_><m_>
64             <objtoken: IN::CH> ([à°•-హౘ-ౚ])(్\b)
65             <objtoken: IN::V> [à°…-ఔౠ-ౡ]
66             <objtoken: IN::m_> [à°€-ఄఽౕౖ]?
67             <objtoken: IN::CH__> (([à°•-హౘ-ౚ])(్))*
68             <objtoken: IN::C> [à°•-హౘ-ౚ]
69             <objtoken: IN::v_> [à°¾-ౌౢౣ]?
70             <objtoken: IN::N> [à°¾-ౌౢౣఀ-ఄఽౕౖ]
71             <objtoken: IN::S> [ ]
72             <objtoken: IN::Other> [à°€-౿]
73             <objtoken: IN::NT> [^à°€-౿]
74             }xms;
75              
76             qr {
77             <grammar: Lingua::IN::TGC::DE>
78              
79             <objrule: IN::Tgc> <ws: (\s++)*> <S> | <Vm> | <CH> | <CHCvm> | <N> | <Other> | <NT>
80             <objrule: IN::Vm> <V><m_>
81             <objrule: IN::CHCvm> <CH__><C><v_><m_>
82             <objtoken: IN::CH> ([क-ह])(्\b)
83             <objtoken: IN::V> [ऄ-औॲ-ॷ]
84             <objtoken: IN::m_> [ऀ-ःऽ़]?
85             <objtoken: IN::CH__> (([क-ह])(्))*
86             <objtoken: IN::C> [क-ह]
87             <objtoken: IN::v_> [ा-ौॎॏॕॖॗ]?
88             <objtoken: IN::N> [ा-ौॎॏॕॖॗऀ-ःऽ़]
89             <objtoken: IN::S> [ ]
90             <objtoken: IN::Other> [ऀ-ॿ]
91             <objtoken: IN::NT> [^ऀ-ॿ]
92             }xms;
93              
94             qr {
95             <grammar: Lingua::IN::TGC::TA>
96              
97             <objrule: IN::Tgc> <ws: (\s++)*> <S> | <Vm> | <CH> | <CHCvm> | <N> | <Other> | <NT>
98             <objrule: IN::Vm> <V><m_>
99             <objrule: IN::CHCvm> <CH__><C><v_><m_>
100             <objtoken: IN::CH> ([க-ஹ])(்\b)
101             <objtoken: IN::V> [à®…-à®”]
102             <objtoken: IN::m_> [ஂ-ஃௗ]?
103             <objtoken: IN::CH__> (([க-ஹ])(்))*
104             <objtoken: IN::C> [க-ஹ]
105             <objtoken: IN::v_> [ா-ை]?
106             <objtoken: IN::N> [ா-ைஂ-ஃௗ]
107             <objtoken: IN::S> [ ]
108             <objtoken: IN::Other> [ஂ-௺]
109             <objtoken: IN::NT> [^ஂ-௺]
110             }xms;
111              
112             qr {
113             <grammar: Lingua::IN::TGC::KN>
114              
115             <objrule: IN::Tgc> <ws: (\s++)*> <S> | <Vm> | <CH> | <CHCvm> | <N> | <Other> | <NT>
116             <objrule: IN::Vm> <V><m_>
117             <objrule: IN::CHCvm> <CH__><C><v_><m_>
118             <objtoken: IN::CH> ([ಕ-ಹೞ])(್\b)
119             <objtoken: IN::V> [ಅ-ಔೠ-ೡ]
120             <objtoken: IN::m_> [ಀ-಄಼ಽೕೖ]?
121             <objtoken: IN::CH__> (([ಕ-ಹೞ])(್))*
122             <objtoken: IN::C> [ಕ-ಹೞ]
123             <objtoken: IN::v_> [ಾ-ೌೢೣ]?
124             <objtoken: IN::N> [ಾ-ೌೢೣఽಀ-಄಼ಽೕೖ]
125             <objtoken: IN::S> [ ]
126             <objtoken: IN::Other> [ಀ-à³²]
127             <objtoken: IN::NT> [^ಀ-à³²]
128             }xms;
129              
130             qr {
131             <grammar: Lingua::IN::TGC::OR>
132              
133             <objrule: IN::Tgc> <ws: (\s++)*> <S> | <Vm> | <CH> | <CHCvm> | <N> | <Other> | <NT>
134             <objrule: IN::Vm> <V><m_>
135             <objrule: IN::CHCvm> <CH__><C><v_><m_>
136             <objtoken: IN::CH> ([କ-ହଡ଼-à­Ÿ])(୍\b)
137             <objtoken: IN::V> [ଅ-ଔୠୡ]
138             <objtoken: IN::m_> [ଁ-ଃ଼ଽୖୗ]?
139             <objtoken: IN::CH__> (([କ-ହଡ଼-à­Ÿ])(୍))*
140             <objtoken: IN::C> [କ-ହଡ଼-à­Ÿ]
141             <objtoken: IN::v_> [ା-ୈୋୌୢୣ]?
142             <objtoken: IN::N> [ା-ୈୋୌୢୣଁ-ଃ଼ଽୖୗ]
143             <objtoken: IN::S> [ ]
144             <objtoken: IN::Other> [ଁ-à­·]
145             <objtoken: IN::NT> [^ଁ-à­·]
146             }xms;
147              
148             qr {
149             <grammar: Lingua::IN::TGC::OR>
150              
151             <objrule: IN::Tgc> <ws: (\s++)*> <S> | <Vm> | <CH> | <CHCvm> | <N> | <Other> | <NT>
152             <objrule: IN::Vm> <V><m_>
153             <objrule: IN::CHCvm> <CH__><C><v_><m_>
154             <objtoken: IN::CH> ([କ-ହଡ଼-à­Ÿ])(୍\b)
155             <objtoken: IN::V> [ଅ-ଔୠୡ]
156             <objtoken: IN::m_> [ଁ-ଃ଼ଽୖୗ]?
157             <objtoken: IN::CH__> (([କ-ହଡ଼-à­Ÿ])(୍))*
158             <objtoken: IN::C> [କ-ହଡ଼-à­Ÿ]
159             <objtoken: IN::v_> [ା-ୈୋୌୢୣ]?
160             <objtoken: IN::N> [ା-ୈୋୌୢୣଁ-ଃ଼ଽୖୗ]
161             <objtoken: IN::S> [ ]
162             <objtoken: IN::Other> [ଁ-à­·]
163             <objtoken: IN::NT> [^ଁ-à­·]
164             }xms;
165              
166             qr {
167             <grammar: Lingua::IN::TGC::GU>
168              
169             <objrule: IN::Tgc> <ws: (\s++)*> <S> | <Vm> | <CH> | <CHCvm> | <N> | <Other> | <NT>
170             <objrule: IN::Vm> <V><m_>
171             <objrule: IN::CHCvm> <CH__><C><v_><m_>
172             <objtoken: IN::CH> ([à°•-హౘ-ౚ])(్\b)
173             <objtoken: IN::V> [à°…-ఔౠ-ౡ]
174             <objtoken: IN::m_> [à°€-ఄఽౕౖ]?
175             <objtoken: IN::CH__> (([à°•-హౘ-ౚ])(్))*
176             <objtoken: IN::C> [à°•-హౘ-ౚ]
177             <objtoken: IN::v_> [à°¾-ౌౢౣ]?
178             <objtoken: IN::N> [à°¾-ౌౢౣఀ-ఄఽౕౖ]
179             <objtoken: IN::S> [ ]
180             <objtoken: IN::Other> [à°€-౿]
181             <objtoken: IN::NT> [^à°€-౿]
182             }xms;
183              
184 5 50   5   87098 method TGC( Str $lang, Str $string ) {
  5 50   5   11  
  5 50       1090  
  5 50       816  
  5 50       36  
  5 50       21  
  5         21  
  5         77  
  5         217  
  5         24  
  5         21  
  5         27  
185 5         16 my $lang_code = "Lingua::IN::TGC::" . $lang;
186 5         146 my $parser = qr {
187             <extends: $lang_code>
188             <nocontext:>
189             <String>
190             <objrule: IN::String> <[Tgc]>+
191             }xms;
192              
193 5 50       224 if ( $string =~ $parser ) {
194 5         31 $/{String}->X();
195             }
196 5         69 return @result;
197             }
198              
199             1;
200             __END__
201             =encoding utf-8
202              
203             =head1 NAME
204              
205             Lingua::IN::TGC - Tailored grapheme clusters for Indic scripts.
206              
207             =head1 SYNOPSIS
208              
209             use Lingua::IN::TGC;
210             use utf8;
211             binmode STDOUT, ":encoding(UTF-8)";
212              
213             my $tgc = Lingua::IN::TGC->new();
214             my @result = $tgc->TGC("TE", "రాజ్కుమార్రెడ్డి");
215             print $result[1], "\n";
216              
217              
218             =head1 DESCRIPTION
219              
220             This module provides one function, TGC.
221             This function takes two arguments. First argument is language code and second argument is a string.
222              
223              
224             =head1 LANGUAGE CODES
225              
226             TE - Telugu
227             DE - Devanagari
228             TA - Tamil
229             KN - Kannada
230             OR - Oriya
231              
232              
233             =head1 TODO
234              
235             Add support for bengali, malayalam, gujarati, punjabi
236              
237             =head1 API CHANGE
238              
239             This 2.xx version is reimplementation of 1.xx module. If you are using 1.xx version please know that newer version api is changed.
240              
241              
242             =head1 BUGS
243              
244             Please send me email, if you find any bugs
245              
246              
247             =head1 AUTHOR
248              
249             Rajkumar Reddy, mesg.raj@outlook.com
250              
251              
252             =head1 COPYRIGHT AND LICENSE
253              
254             Copyright (C) 2019 by Rajkumar Reddy
255              
256             This library is free software; you can redistribute it and/or modify
257             it under the same terms as Perl itself, either Perl version 5.26.1 or,
258             at your option, any later version of Perl 5 you may have available.
259              
260              
261             =cut