File Coverage

blib/lib/Lingua/Word2Num.pm
Criterion Covered Total %
statement 30 48 62.5
branch 2 14 14.2
condition 3 9 33.3
subroutine 11 12 91.6
pod 4 4 100.0
total 50 87 57.4


line stmt bran cond sub pod time code
1             # For Emacs: -*- mode:cperl; eval: (folding-mode 1) -*-
2              
3             package Lingua::Word2Num;
4             # ABSTRACT: A wrapper for Lingua:XXX::word2num modules Lingua::Word2Num is a module for converting texts in their spoken language representation into numbers.
5              
6             # {{{ use block
7              
8 1     1   140439 use 5.10.1;
  1         4  
9              
10 1     1   7 use strict;
  1         2  
  1         42  
11 1     1   8 use warnings;
  1         1  
  1         1309  
12              
13 1     1   13 use Carp;
  1         2  
  1         141  
14 1     1   753 use Export::Attrs;
  1         13917  
  1         9  
15 1     1   1010 use Readonly;
  1         12865  
  1         672  
16              
17             # }}}
18             # {{{ var block
19              
20             my Readonly::Scalar $COPY = 'Copyright (c) PetaMem, s.r.o. 2004-present';
21             our $VERSION = '0.2603230';
22              
23             # templates for functional and object interface
24              
25             my $template_func = 'use __PACKAGE_WITH_VERSION__ ();'."\n".
26             '$result = __PACKAGE__::__FUNCTION__($word);'."\n";
27              
28             my $template_obj = 'use __PACKAGE_WITH_VERSION__ ();'."\n".
29             'my $tmp_obj = new __PACKAGE__;'."\n".
30             '$result = $tmp_obj->__FUNCTION__("$word");'."\n";
31              
32             our %known = (
33             afr => {
34             package => 'Word2Num',
35             version => '',
36             function =>'w2n',
37             code => $template_func,
38             },
39             ces => {
40             package => 'Word2Num',
41             version => '',
42             function =>'w2n',
43             code => $template_func,
44             },
45             deu => {
46             package => 'Word2Num',
47             version => '',
48             function =>'w2n',
49             code => $template_func,
50             },
51             eng => {
52             package => 'Word2Num',
53             version => '',
54             function =>'w2n',
55             code => $template_func,
56             },
57             eus => {
58             package => 'Word2Num',
59             version => '',
60             function => 'w2n',
61             code => $template_func,
62             },
63             fra => {
64             package => 'Word2Num',
65             version => '',
66             function =>'w2n',
67             code => $template_func,
68             },
69             ind => {
70             package => 'Words2Nums',
71             version => '',
72             function => 'words2nums',
73             code => $template_func,
74             },
75             ita => {
76             package => 'Word2Num',
77             version => '',
78             function =>'w2n',
79             code => $template_func,
80             },
81             jpn => {
82             package => 'Word2Num',
83             version => '',
84             function => 'w2n',
85             code => $template_func,
86             },
87             nld => {
88             package => 'Word2Num',
89             version => '',
90             function => 'w2n',
91             code => $template_func,
92             },
93             nor => {
94             package => 'Word2Num',
95             version => '',
96             function => 'w2n',
97             code => $template_func,
98             },
99             pol => {
100             package => 'Word2Num',
101             version => '',
102             function => 'w2n',
103             code => $template_func,
104             },
105             por => {
106             package => 'Words2Nums',
107             version => '',
108             function => 'word2num',
109             code => $template_func,
110             },
111             rus => {
112             package => 'Word2Num',
113             version => '',
114             function => 'w2n',
115             code => $template_func,
116             },
117             spa => {
118             package => 'Word2Num',
119             version => '',
120             function =>'w2n',
121             code => $template_func,
122             },
123             swe => {
124             package => 'Word2Num',
125             version => '',
126             function => 'w2n',
127             code => $template_func,
128             },
129             zho => {
130             package => 'Word2Num',
131             version => '',
132             function => 'w2n',
133             code => $template_func,
134             },
135             );
136              
137             # }}}
138              
139             # {{{ new constructor
140              
141             sub new {
142 2     2 1 5 return bless {}, shift;
143             }
144              
145             # }}}
146             # {{{ cardinal convert text to number
147              
148             sub cardinal :Export {
149 2 50   2 1 944 my $self = ref($_[0]) ? shift : __PACKAGE__->new();
150 2         3 my $result = '';
151              
152 2   50     13 my $lang = shift // return $result;
153 0   0     0 my $word = shift // return $result;
154              
155 0 0       0 my @langs = ($lang eq '*')
156             ? sort keys %known
157             : (lc $lang)
158             ;
159              
160 0 0       0 return $result if (!defined $known{$langs[0]});
161              
162 0         0 for my $lang (@langs) {
163 0         0 eval $self->preprocess_code($lang); ## no critic 'eval'
164 0 0       0 carp $@ if $@;
165              
166 0 0 0     0 return $result if (defined $result && $result ne '');
167             }
168              
169 0         0 return '';
170 1     1   12 }
  1         2  
  1         10  
171              
172             # }}}
173             # {{{ known_langs list of currently supported languages
174              
175             sub known_langs :Export {
176 0     0 1 0 return [sort keys %known];
177 1     1   6739 }
  1         3  
  1         9  
178              
179             # }}}
180             # {{{ preprocess_code prepare code for evaluation
181              
182             sub preprocess_code {
183 2     2 1 179029 my $self = shift;
184 2   100     9 my $lang = shift // return;
185              
186 1 50       5 return if !defined $known{$lang};
187              
188 0           my $result = $known{$lang}{code};
189 0           my $pkg_name = 'Lingua::' . uc($lang) . '::' . $known{$lang}{package};
190 0 0         my $pkg_name_with_version = $known{$lang}{version} ne ''
191             ? "$pkg_name $known{$lang}{version}" : $pkg_name;
192 0           my $function = $known{$lang}{function};
193              
194 0           $result =~ s/__PACKAGE_WITH_VERSION__/$pkg_name_with_version/g;
195 0           $result =~ s/__PACKAGE__/$pkg_name/g;
196 0           $result =~ s/__FUNCTION__/$function/g;
197 0           $result =~ s/__CHARSET__/$known{$lang}{charset}/g;
198              
199 0           return $result;
200             }
201              
202             # }}}
203              
204             1;
205             __END__