File Coverage

blib/lib/Lingua/POR/Words2Nums.pm
Criterion Covered Total %
statement 36 45 80.0
branch 7 10 70.0
condition 5 5 100.0
subroutine 6 6 100.0
pod 1 1 100.0
total 55 67 82.0


line stmt bran cond sub pod time code
1             # For Emacs: -*- mode:cperl; eval: (folding-mode 1); coding:utf-8; -*-
2              
3             package Lingua::POR::Words2Nums;
4             # ABSTRACT: Word 2 number conversion in POR.
5              
6             # {{{ use block
7              
8 1     1   116938 use 5.16.0;
  1         3  
9 1     1   5 use utf8;
  1         1  
  1         12  
10              
11 1     1   652 use Export::Attrs;
  1         9238  
  1         6  
12              
13             # }}}
14             # {{{ var block
15             our $VERSION = '0.2603230';
16              
17             my (%values,@values,%bigvalues,@bigvalues);
18              
19             BEGIN {
20 1     1   228 %values = (
21             mil => 1000,
22              
23             novecentos => 900,
24             oitocentos => 800,
25             setecentos => 700,
26             seiscentos => 600,
27             quinhentos => 500,
28             quatrocentos => 400,
29             trezentos => 300,
30             duzentos => 200,
31             cem => 100,
32              
33             cento => 100,
34              
35             noventa => 90,
36             oitenta => 80,
37             setenta => 70,
38             sessenta => 60,
39             cinquenta => 50,
40             quarenta => 40,
41             trinta => 30,
42             vinte => 20,
43              
44             dezanove => 19,
45             dezoito => 18,
46             dezassete => 17,
47             dezasseis => 16,
48             quinze => 15,
49             catorze => 14,
50             treze => 13,
51             doze => 12,
52             onze => 11,
53             dez => 10,
54              
55             nove => 9,
56             oito => 8,
57             sete => 7,
58             seis => 6,
59             cinco => 5,
60             quatro => 4,
61             'três' => 3,
62             dois => 2,
63             um => 1,
64             zero => 0,
65             );
66              
67 1         10 @values = sort {$values{$b} <=> $values{$a}} keys %values;
  159         170  
68              
69 1         5 %bigvalues = (
70             bili => 1000000000000,
71             milh => 1000000,
72             );
73              
74 1         3 @bigvalues = sort {$bigvalues{$b} <=> $bigvalues{$a}} keys %bigvalues;
  1         412  
75              
76             }
77              
78             # }}}
79              
80             # {{{ word2num
81              
82             sub word2num :Export {
83 5   100 5 1 152808 $_ = shift // return;
84 4         12 my $task = $_;
85 4         9 my $result = 0;
86              
87 4         7 for my $val (@bigvalues) {
88 8         19 my $expr = "${val}ões|${val}ão";
89 8 50       351 if (s/(.+)mil(?=.*(?:$expr))//) {
90 0         0 my $big = $1;
91 0         0 for my $value (@values) {
92 0         0 $big =~ s/$value/
93 0         0 $result += ($values{$value} * $bigvalues{$val} * 1000)/e;
94             }
95             }
96 8 50       174 if (s/(.+)(?:$expr)//) {
97 0         0 my $sma = $1;
98 0         0 for my $value (@values) {
99 0         0 $sma =~ s/$value/
100 0         0 $result += ($values{$value} * $bigvalues{$val})/e;
101             }
102             }
103             }
104              
105 4 100       20 if (s/(.+?)mil//) {
106 2         6 my $thousands = $1;
107 2 50       11 if ($thousands =~ /^\s*e?\s*$/) {
108 0         0 $result += 1000;
109             }
110             else {
111 2         3 for my $value (@values) {
112 78         313 $thousands =~ s/$value/$result += ($values{$value} * 1000)/e;
  2         10  
113             }
114             }
115             }
116              
117 4         11 for my $value (@values) {
118 156         760 s/$value/$result += $values{$value}/e;
  6         21  
119             }
120              
121 4 100 100     21 if ($result == 0 && $task !~ m{\Azero\z}xms ) {
122 1         3 $result = undef;
123             }
124              
125 4         11 return $result;
126 1     1   11 }
  1         2  
  1         7  
127              
128             # }}}
129              
130             1;
131              
132             __END__