File Coverage

blib/lib/Lingua/UIG/Word2Num.pm
Criterion Covered Total %
statement 22 22 100.0
branch n/a
condition 2 2 100.0
subroutine 8 8 100.0
pod 2 2 100.0
total 34 34 100.0


line stmt bran cond sub pod time code
1             # For Emacs: -*- mode:cperl; eval: (folding-mode 1); coding:utf-8 -*-
2             package Lingua::UIG::Word2Num;
3             # ABSTRACT: Word to number conversion in Uyghur
4              
5 1     1   133212 use 5.16.0;
  1         3  
6 1     1   7 use utf8;
  1         2  
  1         17  
7 1     1   24 use warnings;
  1         1  
  1         55  
8              
9             # {{{ use block
10              
11 1     1   505 use Export::Attrs;
  1         11591  
  1         7  
12 1     1   1489 use Parse::RecDescent;
  1         36374  
  1         8  
13              
14             # }}}
15             # {{{ var block
16             our $VERSION = '0.2603300';
17             my $parser = uig_numerals();
18              
19             # }}}
20              
21             # {{{ w2n convert text to number
22              
23             sub w2n :Export {
24 2   100 2 1 279412 my $input = shift // return;
25              
26 1         6 $input =~ s/\s+/ /g;
27 1         24 $input =~ s/^\s+|\s+$//g;
28              
29 1         23 return $parser->numeral($input);
30 1     1   152 }
  1         2  
  1         8  
31              
32             # }}}
33             # {{{ uig_numerals create parser for uyghur numerals
34              
35             sub uig_numerals {
36 1     1 1 4 return Parse::RecDescent->new(q{
37            
38              
39             numeral: mega
40             | kOhOd
41             | { }
42              
43             number: /نۆل/ { 0 }
44             | /بىر/ { 1 }
45             | /ئىككى/ { 2 }
46             | /ئۈچ/ { 3 }
47             | /تۆت/ { 4 }
48             | /بەش/ { 5 }
49             | /ئالتە/ { 6 }
50             | /يەتتە/ { 7 }
51             | /سەككىز/ { 8 }
52             | /توققۇز/ { 9 }
53              
54             tens: /ئون/ { 10 }
55             | /يىگىرمە/ { 20 }
56             | /ئوتتۇز/ { 30 }
57             | /قىرىق/ { 40 }
58             | /ئەللىك/ { 50 }
59             | /ئاتمىش/ { 60 }
60             | /يەتمىش/ { 70 }
61             | /سەكسەن/ { 80 }
62             | /توقسان/ { 90 }
63              
64             deca: tens number { $item[1] + $item[2] }
65             | tens
66             | number
67              
68             hecto: number /يۈز/ deca { $item[1] * 100 + $item[3] }
69             | number /يۈز/ { $item[1] * 100 }
70             | /يۈز/ deca { 100 + $item[2] }
71             | /يۈز/ { 100 }
72              
73             hOd: hecto
74             | deca
75              
76             kilo: hOd /مىڭ/ hOd { $item[1] * 1000 + $item[3] }
77             | hOd /مىڭ/ { $item[1] * 1000 }
78             | /مىڭ/ hOd { 1000 + $item[2] }
79             | /مىڭ/ { 1000 }
80              
81             kOhOd: kilo
82             | hOd
83              
84             mega: hOd /مىليون/ kOhOd { $item[1] * 1_000_000 + $item[3] }
85             | hOd /مىليون/ { $item[1] * 1_000_000 }
86             });
87             }
88              
89             # }}}
90              
91             1;
92              
93             __END__