File Coverage

blib/lib/Lingua/CES/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; mode:folding; coding:utf-8; -*-
2              
3             package Lingua::CES::Word2Num;
4             # ABSTRACT: Word 2 number conversion in CES.
5              
6             # {{{ use block
7              
8 1     1   131185 use v5.32;
  1         4  
9 1     1   6 use warnings;
  1         3  
  1         79  
10 1     1   7 use utf8;
  1         1  
  1         7  
11              
12 1     1   810 use Export::Attrs;
  1         13008  
  1         12  
13 1     1   1345 use Parse::RecDescent;
  1         58199  
  1         10  
14              
15             # }}}
16             # {{{ var block
17             our $VERSION = '0.2603230';
18             my $parser = ces_numerals();
19              
20             # }}}
21              
22             # {{{ w2n convert number to text
23              
24             sub w2n :Export {
25 6   100 6 1 557596 my $input = shift // return;
26              
27 5         61 return $parser->numeral($input);
28 1     1   163 }
  1         2  
  1         8  
29              
30             # }}}
31             # {{{ ces_numerals create parser for numerals
32              
33             sub ces_numerals {
34 1     1 1 5 return Parse::RecDescent->new(q{
35            
36              
37             numeral: mega
38             | kOhOd
39             | 'nula' { 0 }
40             | { }
41              
42             number: 'dvanáct' { 12 }
43             | 'třináct' { 13 }
44             | 'čtrnáct' { 14 }
45             | 'patnáct' { 15 }
46             | 'šestnáct' { 16 }
47             | 'sedmnáct' { 17 }
48             | 'osmnáct' { 18 }
49             | 'devatenáct' { 19 }
50             | 'jedna' { 1 }
51             | 'dva' { 2 }
52             | 'tři' { 3 }
53             | 'čtyři' { 4 }
54             | 'pět' { 5 }
55             | 'šest' { 6 }
56             | 'sedm' { 7 }
57             | 'osm' { 8 }
58             | 'devět' { 9 }
59             | 'deset' { 10 }
60             | 'jedenáct' { 11 }
61              
62             tens: 'dvacet' { 20 }
63             | 'třicet' { 30 }
64             | 'čtyřicet' { 40 }
65             | 'padesát' { 50 }
66             | 'šedesát' { 60 }
67             | 'sedmdesát' { 70 }
68             | 'osmdesát' { 80 }
69             | 'devadesát' { 90 }
70              
71             deca: tens number { $item[1] + $item[2] }
72             | tens
73             | number
74              
75             hecto: number /(sta|set)/ deca { $item[1] * 100 + $item[3] }
76             | number /(sta|set)/ { $item[1] * 100 }
77             | 'dvě' 'stě' deca { 2 * 100 + $item[3] }
78             | 'dvě' 'stě' { 2 * 100 }
79             | 'sto' deca { 100 + $item[2] }
80             | 'sto' { 100 }
81              
82             hOd: hecto
83             | deca
84              
85             kilo: hOd /tisíce?/ hOd { $item[1] * 1000 + $item[3] }
86             | hOd /tisíce?/ { $item[1] * 1000 }
87             | number /tisíce?/ hOd { $item[1] * 1000 + $item[3] }
88             | number /tisíce?/ { $item[1] * 1000 }
89             | 'tisíc' hOd { 1000 + $item[2] }
90             | 'tisíc' { 1000 }
91             | hOd 'jeden' 'tisíc' hOd { ($item[1] + 1) * 1000 + $item[4] }
92             | hOd 'jeden' 'tisíc' { ($item[1] + 1) * 1000 }
93              
94             kOhOd: kilo
95             | hOd
96              
97             mega: hOd megas kOhOd { $item[1] * 1_000_000 + $item[3] }
98             | hOd megas { $item[1] * 1_000_000 }
99             | 'milion' kOhOd { 1_000_000 + $item[2] }
100             | 'milion' { 1_000_000 }
101             | hOd 'jeden' 'milion' kOhOd { ($item[1] + 1) * 1_000_000 + $item[4] }
102              
103             megas: /milion[yů]/
104             });
105             }
106              
107             # }}}
108              
109             1;
110              
111             __END__