File Coverage

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


line stmt bran cond sub pod time code
1             # For Emacs: -*- mode:cperl; eval: (folding-mode 1) -*-
2              
3             package Lingua::AFR::Word2Num;
4             # ABSTRACT: Word 2 number conversion in AFR.
5              
6             # {{{ use block
7              
8 1     1   133402 use 5.16.0;
  1         4  
9 1     1   6 use utf8;
  1         2  
  1         14  
10              
11 1     1   67 use Carp;
  1         2  
  1         100  
12              
13 1     1   617 use Export::Attrs;
  1         12307  
  1         12  
14 1     1   1290 use Parse::RecDescent;
  1         33149  
  1         11  
15              
16             # }}}
17             # {{{ variable declarations
18             our $VERSION = '0.2603230';
19              
20             my $parser = afr_numerals();
21              
22             # }}}
23              
24             # {{{ w2n convert number to text
25              
26             sub w2n :Export {
27 3   50 3 1 214847 my $input = shift // return;
28              
29 3         14 $input =~ s/,//g;
30 3         11 $input =~ s/ //g;
31              
32 3         26 return $parser->numeral($input);
33 1     1   212 }
  1         2  
  1         13  
34             # }}}
35             # {{{ afr_numerals create parser for numerals
36              
37             sub afr_numerals {
38 1     1 1 26 return Parse::RecDescent->new(q{
39            
40              
41             numeral: mega
42             | kOhOd
43             | 'nul' { 0 }
44             | { }
45              
46             number: 'viertien' { 14 }
47             | 'vyftien' { 15 }
48             | 'sestien' { 16 }
49             | 'sewentien' { 17 }
50             | 'agtien' { 18 }
51             | 'negentien' { 19 }
52             | 'een' { 1 }
53             | 'twee' { 2 }
54             | 'drie' { 3 }
55             | 'vier' { 4 }
56             | 'vyf' { 5 }
57             | 'ses' { 6 }
58             | 'sewe' { 7 }
59             | 'agt' { 8 }
60             | 'nege' { 9 }
61             | 'tien' { 10 }
62             | 'elf' { 11 }
63             | 'twaalf' { 12 }
64             | 'dertien' { 13 }
65              
66             tens: 'twintig' { 20 }
67             | 'dertig' { 30 }
68             | 'viertig' { 40 }
69             | 'vyftig' { 50 }
70             | 'sestig' { 60 }
71             | 'sewentig' { 70 }
72             | 'tagtig' { 80 }
73             | 'negentig' { 90 }
74              
75             deca:
76             number 'en' tens { $item[1] + $item[3] }
77             | tens
78             | number
79              
80             hecto: number 'honderd' /(en)?/ deca { $item[1] * 100 + $item[4] }
81             | number 'honderd' { $item[1] * 100 }
82              
83             hOd: hecto
84             | deca
85              
86             kilo: hOd 'duisend' /(en)?/ hOd { $item[1] * 1000 + $item[4] }
87             | hOd 'duisend' { $item[1] * 1000 }
88              
89             kOhOd: kilo
90             | hOd
91              
92             mega: hOd 'miljoen' /(en)?/ kOhOd { $item[1] * 1_000_000 + $item[4] }
93             | hOd 'miljoen' { $item[1] * 1_000_000 }
94             });
95             }
96              
97             # }}}
98              
99             1;
100              
101             __END__