File Coverage

blib/lib/Lingua/SRD/Word2Num.pm
Criterion Covered Total %
statement 23 23 100.0
branch n/a
condition 2 2 100.0
subroutine 8 8 100.0
pod 2 2 100.0
total 35 35 100.0


line stmt bran cond sub pod time code
1             # For Emacs: -*- mode:cperl; eval: (folding-mode 1); coding:utf-8 -*-
2              
3             package Lingua::SRD::Word2Num;
4             # ABSTRACT: Word to number conversion in Sardinian (Logudorese)
5              
6 1     1   101034 use 5.16.0;
  1         3  
7 1     1   4 use utf8;
  1         5  
  1         8  
8 1     1   19 use warnings;
  1         2  
  1         50  
9              
10             # {{{ use block
11              
12 1     1   1300 use Parse::RecDescent;
  1         36664  
  1         6  
13 1     1   632 use Export::Attrs;
  1         8807  
  1         8  
14              
15             # }}}
16             # {{{ var block
17             our $VERSION = '0.2603300';
18             my $parser = srd_numerals();
19              
20             # }}}
21              
22             # {{{ w2n convert text to number
23              
24             sub w2n :Export {
25 21   100 21 1 850175 my $input = shift // return;
26              
27 20         54 $input = lc $input;
28 20         114 $input =~ s/\s+/ /g;
29 20         107 $input =~ s/^\s+|\s+$//g;
30              
31 20         233 return $parser->numeral($input);
32 1     1   195 }
  1         5  
  1         5  
33             # }}}
34             # {{{ srd_numerals create parser for numerals
35              
36             sub srd_numerals {
37 1     1 1 7 return Parse::RecDescent->new(q{
38            
39            
40              
41             numeral: mega
42             | kOhOd
43             | 'zeru' { 0 }
44             | { }
45              
46             number: 'deghesete' { 17 }
47             | 'degheoto' { 18 }
48             | 'deghenoe' { 19 }
49             | 'undighi' { 11 }
50             | 'doighi' { 12 }
51             | 'treighi' { 13 }
52             | 'batordighi' { 14 }
53             | 'bindighi' { 15 }
54             | 'seighi' { 16 }
55             | 'deghe' { 10 }
56             | 'bintunu' { 21 }
57             | 'bintiduos' { 22 }
58             | 'bintitres' { 23 }
59             | 'bintibàtoro' { 24 }
60             | 'bintichimbe' { 25 }
61             | 'bintises' { 26 }
62             | 'bintisete' { 27 }
63             | 'bintioto' { 28 }
64             | 'bintinoe' { 29 }
65             | 'binti' { 20 }
66             | 'trintunu' { 31 }
67             | 'trintatres' { 33 }
68             | 'barantunu' { 41 }
69             | 'barantaduos' { 42 }
70             | 'chinbantunu' { 51 }
71             | 'sessantunu' { 61 }
72             | 'setantunu' { 71 }
73             | 'otantunu' { 81 }
74             | 'nonantunu' { 91 }
75             | 'chimbe' { 5 }
76             | 'sete' { 7 }
77             | 'ses' { 6 }
78             | 'oto' { 8 }
79             | 'noe' { 9 }
80             | 'unu' { 1 }
81             | 'duos' { 2 }
82             | 'tres' { 3 }
83             | 'bàtoro' { 4 }
84              
85             tens: 'trinta' { 30 }
86             | 'baranta' { 40 }
87             | 'chinbanta' { 50 }
88             | 'sessanta' { 60 }
89             | 'setanta' { 70 }
90             | 'otanta' { 80 }
91             | 'nonanta' { 90 }
92              
93             hundreds: 'nobi' /chentos?/ { 900 }
94             | 'oto' /chentos?/ { 800 }
95             | 'sete' /chentos?/ { 700 }
96             | 'ses' /chentos?/ { 600 }
97             | 'chinbi' /chentos?/ { 500 }
98             | 'bator' /chentos?/ { 400 }
99             | 'tre' /chentos?/ { 300 }
100             | 'du' /chentos?/ { 200 }
101             | /chentu/ { 100 }
102              
103             deca: tens number { $item[1] + $item[2] }
104             | tens
105             | number
106              
107             hecto: hundreds deca { $item[1] + $item[2] }
108             | hundreds
109              
110             hOd: hecto
111             | deca
112              
113             kilo: 'duamiza' hOd { 2000 + $item[2] }
114             | 'duamiza' { 2000 }
115             | hOd 'miza' hOd { $item[1] * 1000 + $item[3] }
116             | hOd 'miza' { $item[1] * 1000 }
117             | hOd milnotmeg hOd { $item[1] * 1000 + $item[3] }
118             | hOd milnotmeg { $item[1] * 1000 }
119             | milnotmeg hOd { 1000 + $item[2] }
120             | milnotmeg { 1000 }
121              
122             milnotmeg: ...!'milione' ...!'miliones' 'milli'
123              
124             kOhOd: kilo
125             | hOd
126              
127             mega: hOd 'miliones' kOhOd { $item[1] * 1_000_000 + $item[3] }
128             | hOd 'miliones' { $item[1] * 1_000_000 }
129             | number 'milione' kOhOd { $item[1] * 1_000_000 + $item[3] }
130             | number 'milione' { $item[1] * 1_000_000 }
131             });
132             }
133              
134             # }}}
135              
136             1;
137              
138             __END__