File Coverage

blib/lib/Lingua/DEU/Word2Num.pm
Criterion Covered Total %
statement 20 20 100.0
branch n/a
condition 2 2 100.0
subroutine 8 8 100.0
pod 2 2 100.0
total 32 32 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::DEU::Word2Num;
3             # ABSTRACT: Word 2 Number conversion in DEU.
4              
5 1     1   152510 use 5.16.0;
  1         4  
6 1     1   5 use utf8;
  1         3  
  1         31  
7 1     1   32 use warnings;
  1         3  
  1         74  
8              
9             # {{{ use block
10              
11 1     1   896 use Export::Attrs;
  1         21155  
  1         9  
12 1     1   1349 use Parse::RecDescent;
  1         51231  
  1         9  
13              
14             # }}}
15             # {{{ var block
16             our $VERSION = '0.2603250';
17             my $parser = deu_numerals();
18              
19             # }}}
20              
21             # {{{ w2n convert number to text
22              
23             sub w2n :Export {
24 4   100 4 1 351670 my $input = shift // return;
25              
26 3         56 return $parser->numeral($input);
27 1     1   136 }
  1         8  
  1         10  
28              
29             # }}}
30             # {{{ deu_numerals create parser for german numerals
31              
32             sub deu_numerals {
33 1     1 1 5 return Parse::RecDescent->new(q{
34            
35              
36             numeral: mega
37             | kOhOd
38             | { }
39              
40             number: 'dreizehn' { 13 }
41             | 'vierzehn' { 14 }
42             | 'fünfzehn' { 15 }
43             | 'sechzehn' { 16 }
44             | 'siebzehn' { 17 }
45             | 'achtzehn' { 18 }
46             | 'neunzehn' { 19 }
47             | 'null' { 0 }
48             | /eine?/ { 1 }
49             | 'zwei' { 2 }
50             | 'drei' { 3 }
51             | 'vier' { 4 }
52             | 'fünf' { 5 }
53             | 'sechs' { 6 }
54             | 'sieben' { 7 }
55             | 'acht' { 8 }
56             | 'neun' { 9 }
57             | 'zehn' { 10 }
58             | 'elf' { 11 }
59             | 'zwölf' { 12 }
60              
61             tens: 'zwanzig' { 20 }
62             | 'dreissig' { 30 }
63             | 'vierzig' { 40 }
64             | 'fünfzig' { 50 }
65             | 'sechzig' { 60 }
66             | 'siebzig' { 70 }
67             | 'achtzig' { 80 }
68             | 'neunzig' { 90 }
69              
70             deca: 'und' deca { $item[2] }
71             | number 'und' tens { $item[1] + $item[3] }
72             | tens
73             | number
74              
75             hecto: number 'hundert' deca { $item[1] * 100 + $item[3] }
76             | number 'hundert' { $item[1] * 100 }
77             | 'hundert' { 100 }
78              
79             hOd: hecto
80             | deca
81              
82             kilo: hOd 'tausend' hOd { $item[1] * 1000 + $item[3] }
83             | hOd 'tausend' { $item[1] * 1000 }
84              
85             kOhOd: kilo
86             | hOd
87              
88             mega: hOd /million(en)?/ kOhOd { $item[1] * 1_000_000 + $item[3] }
89             | hOd /million(en)?/ { $item[1] * 1_000_000 }
90             });
91             }
92              
93             # }}}
94              
95             1;
96              
97             __END__