File Coverage

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