File Coverage

blib/lib/Lingua/AFR/Word2Num.pm
Criterion Covered Total %
statement 25 25 100.0
branch n/a
condition 1 2 50.0
subroutine 9 9 100.0
pod 2 2 100.0
total 37 38 97.3


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