line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
# For Emacs: -*- mode:cperl; mode:folding; -*- |
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
package Lingua::SWE::Num2Word; |
4
|
|
|
|
|
|
|
# ABSTRACT: Number 2 word conversion in SWE. |
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
# {{{ use block |
7
|
|
|
|
|
|
|
|
8
|
1
|
|
|
1
|
|
20956
|
use 5.10.1; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
37
|
|
9
|
|
|
|
|
|
|
|
10
|
1
|
|
|
1
|
|
4
|
use strict; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
33
|
|
11
|
1
|
|
|
1
|
|
4
|
use warnings; |
|
1
|
|
|
|
|
5
|
|
|
1
|
|
|
|
|
23
|
|
12
|
|
|
|
|
|
|
|
13
|
1
|
|
|
1
|
|
821
|
use Perl6::Export::Attrs; |
|
1
|
|
|
|
|
9714
|
|
|
1
|
|
|
|
|
7
|
|
14
|
1
|
|
|
1
|
|
323656
|
use encoding 'utf8'; |
|
1
|
|
|
|
|
31184
|
|
|
1
|
|
|
|
|
8
|
|
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
# }}} |
17
|
|
|
|
|
|
|
# {{{ variables declaration |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
our $VERSION = 0.0682; |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
# }}} |
22
|
|
|
|
|
|
|
# {{{ num2sv_cardinal convert number to text |
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
sub num2sv_cardinal :Export { |
25
|
8
|
|
100
|
8
|
1
|
1781
|
my $positive = shift // return 'noll'; |
26
|
|
|
|
|
|
|
|
27
|
7
|
50
|
|
|
|
18
|
return if ($positive < 0); |
28
|
|
|
|
|
|
|
|
29
|
7
|
|
|
|
|
7
|
my $out; |
30
|
7
|
|
|
|
|
30
|
my @tokens1 = qw(noll ett två tre fyra fem sex sju åtta nio tio elva |
31
|
|
|
|
|
|
|
tolv tretton fjorton femton sexton sjutton arton nitton); # 0-19 Cardinals |
32
|
7
|
|
|
|
|
17
|
my @tokens2 = qw(tjugo trettio fyrtio femtio sextio sjutio åttio nittio); # 20-90 Cardinals (end with zero) |
33
|
|
|
|
|
|
|
|
34
|
7
|
100
|
|
|
|
19
|
return $tokens1[$positive] if($positive < 20); # interval 0 - 19 |
35
|
|
|
|
|
|
|
|
36
|
5
|
50
|
|
|
|
16
|
if($positive < 100) { # interval 20 - 99 |
|
|
100
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
37
|
0
|
|
|
|
|
0
|
my @num = split '',$positive; |
38
|
|
|
|
|
|
|
|
39
|
0
|
|
|
|
|
0
|
$out = $tokens2[$num[0]-2]; |
40
|
0
|
0
|
|
|
|
0
|
$out .= $tokens1[$num[1]] if ($num[1]); |
41
|
|
|
|
|
|
|
} elsif($positive < 1000) { # interval 100 - 999 |
42
|
3
|
|
|
|
|
8
|
my @num = split '',$positive; |
43
|
|
|
|
|
|
|
|
44
|
3
|
|
|
|
|
7
|
$out = $tokens1[$num[0]].'hundra'; |
45
|
|
|
|
|
|
|
|
46
|
3
|
50
|
33
|
|
|
10
|
if ((int $num[1].$num[2]) < 20 && (int $num[1].$num[2])>0 ) { |
47
|
0
|
|
|
|
|
0
|
$out .= &num2sv_cardinal(int $num[1].$num[2]); |
48
|
|
|
|
|
|
|
} else { |
49
|
3
|
50
|
|
|
|
17
|
$out .= $tokens2[$num[1]-2] if($num[1]); |
50
|
3
|
50
|
|
|
|
10
|
$out .= $tokens1[$num[2]] if($num[2]); |
51
|
|
|
|
|
|
|
} |
52
|
|
|
|
|
|
|
} elsif($positive < 1000_000) { # interval 1000 - 999_999 |
53
|
2
|
|
|
|
|
9
|
my @num = split '',$positive; |
54
|
2
|
|
|
|
|
6
|
my @sub = splice @num,-3; |
55
|
|
|
|
|
|
|
|
56
|
2
|
|
|
|
|
15
|
$out = &num2sv_cardinal(int join '',@num); |
57
|
2
|
|
|
|
|
4
|
$out .= 'tusen'; |
58
|
2
|
50
|
|
|
|
10
|
$out .= &num2sv_cardinal(int join '',@sub) if (int(join "",@sub) >0); |
59
|
|
|
|
|
|
|
} elsif($positive < 1_000_000_000) { # interval 1_000_000 - 999_999_999 |
60
|
0
|
|
|
|
|
0
|
my @num = split '',$positive; |
61
|
0
|
|
|
|
|
0
|
my @sub = splice @num,-6; |
62
|
|
|
|
|
|
|
|
63
|
0
|
|
|
|
|
0
|
$out = &num2sv_cardinal(int join '',@num); |
64
|
0
|
|
|
|
|
0
|
$out .= ' miljoner '; |
65
|
0
|
0
|
|
|
|
0
|
$out .= &num2sv_cardinal(int join '',@sub) if (int(join "",@sub) >0); |
66
|
|
|
|
|
|
|
} |
67
|
|
|
|
|
|
|
|
68
|
5
|
|
|
|
|
17
|
return $out; |
69
|
1
|
|
|
1
|
|
1354
|
} |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
9
|
|
70
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
# }}} |
72
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
1; |
74
|
|
|
|
|
|
|
|
75
|
|
|
|
|
|
|
__END__ |