File Coverage

blib/lib/Lingua/SQI/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::SQI::Word2Num;
3             # ABSTRACT: Word to number conversion in Albanian
4              
5 1     1   136476 use 5.16.0;
  1         4  
6 1     1   6 use utf8;
  1         4  
  1         14  
7 1     1   34 use warnings;
  1         4  
  1         77  
8              
9             # {{{ use block
10              
11 1     1   760 use Export::Attrs;
  1         13390  
  1         60  
12 1     1   1472 use Parse::RecDescent;
  1         52604  
  1         8  
13              
14             # }}}
15             # {{{ var block
16             our $VERSION = '0.2603300';
17             my $parser = sqi_numerals();
18              
19             # }}}
20              
21             # {{{ w2n convert text to number
22              
23             sub w2n :Export {
24 8   100 8 1 376195 my $input = shift // return;
25              
26 7         38 $input =~ s{\A\s+}{}xms;
27 7         62 $input =~ s{\s+\z}{}xms;
28              
29 7         88 return $parser->numeral($input);
30 1     1   151 }
  1         1  
  1         10  
31              
32             # }}}
33             # {{{ sqi_numerals create parser for Albanian numerals
34              
35             sub sqi_numerals {
36 1     1 1 7 return Parse::RecDescent->new(q{
37            
38              
39             numeral: mega
40             | kOhOd
41             | { }
42              
43             number: 'njëmbëdhjetë' { 11 }
44             | 'dymbëdhjetë' { 12 }
45             | 'trembëdhjetë' { 13 }
46             | 'katërmbëdhjetë' { 14 }
47             | 'pesëmbëdhjetë' { 15 }
48             | 'gjashtëmbëdhjetë' { 16 }
49             | 'shtatëmbëdhjetë' { 17 }
50             | 'tetëmbëdhjetë' { 18 }
51             | 'nëntëmbëdhjetë' { 19 }
52             | 'zero' { 0 }
53             | 'një' { 1 }
54             | 'dy' { 2 }
55             | /tre|tri/ { 3 }
56             | 'katër' { 4 }
57             | 'pesë' { 5 }
58             | 'gjashtë' { 6 }
59             | 'shtatë' { 7 }
60             | 'tetë' { 8 }
61             | 'nëntë' { 9 }
62             | 'dhjetë' { 10 }
63              
64             tens: 'njëzet' { 20 }
65             | 'tridhjetë' { 30 }
66             | 'dyzet' { 40 }
67             | 'pesëdhjetë' { 50 }
68             | 'gjashtëdhjetë' { 60 }
69             | 'shtatëdhjetë' { 70 }
70             | 'tetëdhjetë' { 80 }
71             | 'nëntëdhjetë' { 90 }
72              
73             deca: tens 'e' number { $item[1] + $item[3] }
74             | tens
75             | number
76              
77             hecto: number 'qind' 'e' deca { $item[1] * 100 + $item[4] }
78             | number 'qind' { $item[1] * 100 }
79             | /njëqind/ { 100 }
80              
81             hOd: hecto
82             | deca
83              
84             kilo: hOd 'mijë' 'e' hOd { $item[1] * 1000 + $item[4] }
85             | hOd 'mijë' { $item[1] * 1000 }
86              
87             kOhOd: kilo
88             | hOd
89              
90             mega: hOd /milionë?/ 'e' kOhOd { $item[1] * 1_000_000 + $item[4] }
91             | hOd /milionë?/ { $item[1] * 1_000_000 }
92             });
93             }
94              
95             # }}}
96              
97             1;
98              
99             __END__