File Coverage

blib/lib/Lingua/MON/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::MON::Word2Num;
3             # ABSTRACT: Word to number conversion in Mongolian
4              
5 1     1   144530 use 5.16.0;
  1         5  
6 1     1   7 use utf8;
  1         3  
  1         17  
7 1     1   60 use warnings;
  1         3  
  1         83  
8              
9             # {{{ use block
10              
11 1     1   708 use Export::Attrs;
  1         13740  
  1         9  
12 1     1   1388 use Parse::RecDescent;
  1         68608  
  1         11  
13              
14             # }}}
15             # {{{ var block
16             our $VERSION = '0.2603300';
17             my $parser = mon_numerals();
18              
19             # }}}
20              
21             # {{{ w2n convert text to number
22              
23             sub w2n :Export {
24 5   100 5 1 262626 my $input = shift // return;
25              
26 4         39 return $parser->numeral($input);
27 1     1   163 }
  1         8  
  1         10  
28              
29             # }}}
30             # {{{ mon_numerals create parser for mongolian numerals
31              
32             sub mon_numerals {
33 1     1 1 9 return Parse::RecDescent->new(q{
34            
35              
36             numeral: mega
37             | kOhOd
38             | { }
39              
40             number: /тэг/ { 0 }
41             | /нэг/ { 1 }
42             | /хоёр/ { 2 }
43             | /гурав/ { 3 }
44             | /дөрөв/ { 4 }
45             | /тав/ { 5 }
46             | /зургаа/ { 6 }
47             | /долоо/ { 7 }
48             | /найм/ { 8 }
49             | /ес/ { 9 }
50             | /арав/ { 10 }
51              
52             tens: /арван/ { 10 }
53             | /хорин/ { 20 }
54             | /хорь/ { 20 }
55             | /гучин/ { 30 }
56             | /гуч(?!и)/ { 30 }
57             | /дөчин/ { 40 }
58             | /дөч(?!и)/ { 40 }
59             | /тавин/ { 50 }
60             | /тави(?!н)/ { 50 }
61             | /жаран/ { 60 }
62             | /жар(?!а)/ { 60 }
63             | /далан/ { 70 }
64             | /дал(?!а)/ { 70 }
65             | /наян/ { 80 }
66             | /ная(?!н)/ { 80 }
67             | /ерэн/ { 90 }
68             | /ер(?!э)/ { 90 }
69              
70             deca: tens number { $item[1] + $item[2] }
71             | tens
72             | number
73              
74             cnum: /нэг/ { 1 }
75             | /хоёр/ { 2 }
76             | /гурван/ { 3 }
77             | /дөрвөн/ { 4 }
78             | /таван/ { 5 }
79             | /зургаан/ { 6 }
80             | /долоон/ { 7 }
81             | /найман/ { 8 }
82             | /есөн/ { 9 }
83              
84             hecto: cnum /зуун/ deca { $item[1] * 100 + $item[3] }
85             | cnum /зуун?/ { $item[1] * 100 }
86             | /зуун/ deca { 100 + $item[2] }
87             | /зуун?/ { 100 }
88              
89             hOd: hecto
90             | deca
91              
92             kilo: hOd /мянга(н)?/ hOd { $item[1] * 1000 + $item[3] }
93             | hOd /мянга(н)?/ { $item[1] * 1000 }
94             | /мянга(н)?/ hOd { 1000 + $item[2] }
95             | /мянга(н)?/ { 1000 }
96              
97             kOhOd: kilo
98             | hOd
99              
100             mega: hOd /сая/ kOhOd { $item[1] * 1_000_000 + $item[3] }
101             | hOd /сая/ { $item[1] * 1_000_000 }
102             });
103             }
104              
105             # }}}
106              
107             1;
108              
109             __END__