File Coverage

blib/lib/Lingua/HYE/Word2Num.pm
Criterion Covered Total %
statement 20 21 95.2
branch n/a
condition 2 2 100.0
subroutine 8 9 88.8
pod 3 3 100.0
total 33 35 94.2


line stmt bran cond sub pod time code
1             # For Emacs: -*- mode:cperl; eval: (folding-mode 1); coding:utf-8 -*-
2             package Lingua::HYE::Word2Num;
3             # ABSTRACT: Word to number conversion in Armenian
4              
5 1     1   99598 use 5.16.0;
  1         3  
6 1     1   3 use utf8;
  1         2  
  1         9  
7 1     1   21 use warnings;
  1         1  
  1         56  
8              
9             # {{{ use block
10              
11 1     1   477 use Export::Attrs;
  1         9043  
  1         8  
12 1     1   1280 use Parse::RecDescent;
  1         47339  
  1         9  
13              
14             # }}}
15             # {{{ var block
16             our $VERSION = '0.2603300';
17             my $parser = hye_numerals();
18              
19             # }}}
20              
21             # {{{ w2n convert text to number
22              
23             sub w2n :Export {
24 6   100 6 1 416879 my $input = shift // return;
25              
26 5         65 return $parser->numeral($input);
27 1     1   154 }
  1         2  
  1         10  
28              
29             # }}}
30             # {{{ hye_numerals create parser for Armenian numerals
31              
32             sub hye_numerals {
33 1     1 1 6 return Parse::RecDescent->new(q{
34            
35              
36             numeral: mega
37             | kOhOd
38             | { }
39              
40             number: 'տասնմեկ' { 11 }
41             | 'տասներկու' { 12 }
42             | 'տասներեք' { 13 }
43             | 'տասնչորս' { 14 }
44             | 'տասնհինգ' { 15 }
45             | 'տասնվեց' { 16 }
46             | 'տասնյոթ' { 17 }
47             | 'տասնութ' { 18 }
48             | 'տասնինը' { 19 }
49             | 'զրո' { 0 }
50             | 'մեկ' { 1 }
51             | 'երկու' { 2 }
52             | 'երեք' { 3 }
53             | 'չորս' { 4 }
54             | 'հինգ' { 5 }
55             | 'վեց' { 6 }
56             | 'յոթ' { 7 }
57             | 'ութ' { 8 }
58             | 'ինը' { 9 }
59             | 'տաս' { 10 }
60              
61             tens: 'քսան' { 20 }
62             | 'երեսուն' { 30 }
63             | 'քառասուն' { 40 }
64             | 'հիսուն' { 50 }
65             | 'վաթսուն' { 60 }
66             | 'յոթանասուն' { 70 }
67             | 'ութսուն' { 80 }
68             | 'իննսուն' { 90 }
69              
70             deca: tens number { $item[1] + $item[2] }
71             | tens
72             | number
73              
74             hecto: number 'հարյուր' deca { $item[1] * 100 + $item[3] }
75             | number 'հարյուր' { $item[1] * 100 }
76             | 'հարյուր' deca { 100 + $item[2] }
77             | 'հարյուր' { 100 }
78              
79             hOd: hecto
80             | deca
81              
82             kilo: hOd 'հազար' hOd { $item[1] * 1000 + $item[3] }
83             | hOd 'հազար' { $item[1] * 1000 }
84             | 'հազար' hOd { 1000 + $item[2] }
85             | 'հազար' { 1000 }
86              
87             kOhOd: kilo
88             | hOd
89              
90             mega: hOd 'միլիոն' kOhOd { $item[1] * 1_000_000 + $item[3] }
91             | hOd 'միլիոն' { $item[1] * 1_000_000 }
92             });
93             }
94              
95             # }}}
96              
97             # {{{ capabilities declare supported features
98              
99             sub capabilities {
100             return {
101 0     0 1   cardinal => 1,
102             ordinal => 0,
103             };
104             }
105              
106             # }}}
107              
108             1;
109              
110             __END__