| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Convert::Number::Coptic; |
|
2
|
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
13838
|
use utf8; # can't find a way to conditionally load this with |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
6
|
|
|
4
|
|
|
|
|
|
|
# the scope applying throughout |
|
5
|
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
BEGIN |
|
7
|
|
|
|
|
|
|
{ |
|
8
|
1
|
|
|
1
|
|
63
|
use strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
33
|
|
|
9
|
1
|
|
|
1
|
|
7
|
use warnings; |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
75
|
|
|
10
|
1
|
|
|
1
|
|
8
|
use vars qw($VERSION @CNumbers %CNumbers); |
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
346
|
|
|
11
|
|
|
|
|
|
|
|
|
12
|
1
|
|
|
1
|
|
6
|
$VERSION = "0.15"; |
|
13
|
|
|
|
|
|
|
|
|
14
|
1
|
|
|
|
|
18
|
require 5.000; |
|
15
|
|
|
|
|
|
|
|
|
16
|
1
|
|
|
|
|
10
|
@CNumbers =( |
|
17
|
|
|
|
|
|
|
["α", "β", "γ", "δ", "ε", "ϛ", "ζ", "η", "θ"], |
|
18
|
|
|
|
|
|
|
["ι", "κ", "λ", "μ", "ν", "ξ", "ο", "π", "ϥ"], |
|
19
|
|
|
|
|
|
|
["ρ", "ϲ", "τ", "υ", "φ", "χ", "ψ", "ω", "ϣ"] |
|
20
|
|
|
|
|
|
|
); |
|
21
|
1
|
|
|
|
|
1165
|
%CNumbers =( |
|
22
|
|
|
|
|
|
|
'α' => 1, |
|
23
|
|
|
|
|
|
|
'β' => 2, |
|
24
|
|
|
|
|
|
|
'γ' => 3, |
|
25
|
|
|
|
|
|
|
'δ' => 4, |
|
26
|
|
|
|
|
|
|
'ε' => 5, |
|
27
|
|
|
|
|
|
|
'ϛ' => 6, |
|
28
|
|
|
|
|
|
|
'ζ' => 7, |
|
29
|
|
|
|
|
|
|
'η' => 8, |
|
30
|
|
|
|
|
|
|
'θ' => 9, |
|
31
|
|
|
|
|
|
|
'ι' => 10, |
|
32
|
|
|
|
|
|
|
'κ' => 20, |
|
33
|
|
|
|
|
|
|
'λ' => 30, |
|
34
|
|
|
|
|
|
|
'μ' => 40, |
|
35
|
|
|
|
|
|
|
'ν' => 50, |
|
36
|
|
|
|
|
|
|
'ξ' => 60, |
|
37
|
|
|
|
|
|
|
'ο' => 70, |
|
38
|
|
|
|
|
|
|
'π' => 80, |
|
39
|
|
|
|
|
|
|
'ϥ' => 90, |
|
40
|
|
|
|
|
|
|
'ρ' => 100, |
|
41
|
|
|
|
|
|
|
'ϲ' => 200, |
|
42
|
|
|
|
|
|
|
'τ' => 300, |
|
43
|
|
|
|
|
|
|
'υ' => 400, |
|
44
|
|
|
|
|
|
|
'φ' => 500, |
|
45
|
|
|
|
|
|
|
'χ' => 600, |
|
46
|
|
|
|
|
|
|
'ψ' => 700, |
|
47
|
|
|
|
|
|
|
'ω' => 800, |
|
48
|
|
|
|
|
|
|
'ϣ' => 900 |
|
49
|
|
|
|
|
|
|
); |
|
50
|
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
} |
|
52
|
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
sub _setArgs |
|
55
|
|
|
|
|
|
|
{ |
|
56
|
190
|
|
|
190
|
|
259
|
my $self = shift; |
|
57
|
|
|
|
|
|
|
|
|
58
|
190
|
50
|
|
|
|
432
|
if ( $#_ ) { |
|
59
|
0
|
|
|
|
|
0
|
warn ( "too many arguments." ); |
|
60
|
0
|
|
|
|
|
0
|
return; |
|
61
|
|
|
|
|
|
|
} |
|
62
|
190
|
|
|
|
|
321
|
my $number = shift; |
|
63
|
190
|
50
|
66
|
|
|
1337
|
unless ( ($number =~ /^\d+$/) || ($number =~ /([α-ρς-ωϛϲ])/) ) { |
|
64
|
0
|
|
|
|
|
0
|
warn ( "$number is not a number." ); |
|
65
|
0
|
|
|
|
|
0
|
return; |
|
66
|
|
|
|
|
|
|
} |
|
67
|
|
|
|
|
|
|
|
|
68
|
190
|
|
|
|
|
408
|
$self->{number} = $number; |
|
69
|
|
|
|
|
|
|
|
|
70
|
190
|
|
|
|
|
423
|
1; |
|
71
|
|
|
|
|
|
|
} |
|
72
|
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
sub new |
|
75
|
|
|
|
|
|
|
{ |
|
76
|
1
|
|
|
1
|
0
|
201233
|
my $class = shift; |
|
77
|
1
|
|
|
|
|
3
|
my $self = {}; |
|
78
|
|
|
|
|
|
|
|
|
79
|
1
|
|
|
|
|
4
|
my $blessing = bless ( $self, $class ); |
|
80
|
|
|
|
|
|
|
|
|
81
|
1
|
|
|
|
|
6
|
$self->{number} = undef; |
|
82
|
|
|
|
|
|
|
|
|
83
|
1
|
50
|
0
|
|
|
8
|
$self->_setArgs ( @_ ) || return if ( @_ ); |
|
84
|
|
|
|
|
|
|
|
|
85
|
1
|
|
|
|
|
4
|
$blessing; |
|
86
|
|
|
|
|
|
|
} |
|
87
|
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
sub _fromCoptic |
|
90
|
|
|
|
|
|
|
{ |
|
91
|
95
|
|
|
95
|
|
175
|
$_ = $_[0]->{number}; |
|
92
|
95
|
|
|
|
|
370
|
s/̄//og; |
|
93
|
95
|
|
|
|
|
290
|
s/̱/000/og; |
|
94
|
95
|
|
|
|
|
240
|
s/͇/000000/og; |
|
95
|
95
|
|
|
|
|
989
|
s/([α-ρς-ωϛϲ])/$CNumbers{$1}/og; |
|
96
|
|
|
|
|
|
|
|
|
97
|
95
|
|
|
|
|
190
|
my $out = 0; |
|
98
|
95
|
|
|
|
|
505
|
s/(\d0+)/$out += $1/oge; |
|
|
252
|
|
|
|
|
1064
|
|
|
99
|
95
|
|
|
|
|
314
|
s/(\d)$/$out += $1/oe; |
|
|
95
|
|
|
|
|
248
|
|
|
100
|
|
|
|
|
|
|
|
|
101
|
95
|
|
|
|
|
259
|
$out; |
|
102
|
|
|
|
|
|
|
} |
|
103
|
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
sub toCoptic |
|
106
|
|
|
|
|
|
|
{ |
|
107
|
95
|
|
|
95
|
0
|
166
|
my $number = $_[0]->{number}; |
|
108
|
|
|
|
|
|
|
|
|
109
|
95
|
|
|
|
|
159
|
my $n = length ( $number ) - 1; |
|
110
|
|
|
|
|
|
|
|
|
111
|
|
|
|
|
|
|
# map and return a single digit number |
|
112
|
|
|
|
|
|
|
# don't waste time with the loop: |
|
113
|
95
|
100
|
|
|
|
227
|
return ( "$CNumbers[0][$number-1]̄" ) unless ( $n ); |
|
114
|
|
|
|
|
|
|
|
|
115
|
|
|
|
|
|
|
|
|
116
|
91
|
|
|
|
|
322
|
my @aNumberString = split ( //, $number ); |
|
117
|
91
|
|
|
|
|
164
|
my $cNumberString = ""; |
|
118
|
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
# |
|
121
|
|
|
|
|
|
|
# read number from most to least significant digits: |
|
122
|
|
|
|
|
|
|
# |
|
123
|
91
|
|
|
|
|
232
|
for ( my $place = $n; $place >= 0; $place-- ) { |
|
124
|
|
|
|
|
|
|
|
|
125
|
582
|
|
|
|
|
904
|
my $pos = $place % 3; |
|
126
|
582
|
|
|
|
|
937
|
my $cycles = int $place / 3; |
|
127
|
|
|
|
|
|
|
|
|
128
|
582
|
|
|
|
|
881
|
my $aNum = $aNumberString[$n-$place]; |
|
129
|
582
|
100
|
|
|
|
1259
|
next unless ( $aNum ); |
|
130
|
305
|
|
|
|
|
634
|
$cNumberString .= $CNumbers[$pos][$aNum-1]; |
|
131
|
|
|
|
|
|
|
|
|
132
|
305
|
100
|
|
|
|
534
|
if ( $cycles ) { |
|
133
|
|
|
|
|
|
|
# |
|
134
|
|
|
|
|
|
|
# add an even number of = symbols |
|
135
|
|
|
|
|
|
|
# |
|
136
|
171
|
|
|
|
|
440
|
for ( my $i = 0; $i<(int $cycles/2); $i++ ) { |
|
137
|
75
|
|
|
|
|
175
|
$cNumberString .= "͇"; |
|
138
|
|
|
|
|
|
|
} |
|
139
|
171
|
100
|
|
|
|
520
|
$cNumberString .= "̱" if ( $cycles % 2 ); # if odd |
|
140
|
|
|
|
|
|
|
} |
|
141
|
|
|
|
|
|
|
else { |
|
142
|
134
|
|
|
|
|
310
|
$cNumberString .= "̄"; |
|
143
|
|
|
|
|
|
|
} |
|
144
|
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
} |
|
146
|
|
|
|
|
|
|
|
|
147
|
91
|
|
|
|
|
404
|
$cNumberString; |
|
148
|
|
|
|
|
|
|
} |
|
149
|
|
|
|
|
|
|
|
|
150
|
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
sub convert |
|
152
|
|
|
|
|
|
|
{ |
|
153
|
190
|
|
|
190
|
0
|
667
|
my $self = shift; |
|
154
|
|
|
|
|
|
|
|
|
155
|
|
|
|
|
|
|
# |
|
156
|
|
|
|
|
|
|
# reset string if we've been passed one: |
|
157
|
|
|
|
|
|
|
# |
|
158
|
190
|
100
|
|
|
|
484
|
$self->number ( @_ ) if ( @_ ); |
|
159
|
|
|
|
|
|
|
|
|
160
|
190
|
100
|
|
|
|
321
|
( $self->number =~ /^[0-9]+$/ ) |
|
161
|
|
|
|
|
|
|
? $self->toCoptic |
|
162
|
|
|
|
|
|
|
: $self->_fromCoptic |
|
163
|
|
|
|
|
|
|
; |
|
164
|
|
|
|
|
|
|
} |
|
165
|
|
|
|
|
|
|
|
|
166
|
|
|
|
|
|
|
|
|
167
|
|
|
|
|
|
|
sub number |
|
168
|
|
|
|
|
|
|
{ |
|
169
|
380
|
|
|
380
|
0
|
7184
|
my $self = shift; |
|
170
|
|
|
|
|
|
|
|
|
171
|
380
|
100
|
50
|
|
|
920
|
$self->_setArgs ( @_ ) || return |
|
172
|
|
|
|
|
|
|
if ( @_ ); |
|
173
|
|
|
|
|
|
|
|
|
174
|
380
|
|
|
|
|
1173
|
$self->{number}; |
|
175
|
|
|
|
|
|
|
} |
|
176
|
|
|
|
|
|
|
|
|
177
|
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
######################################################### |
|
179
|
|
|
|
|
|
|
# Do not change this, Do not put anything below this. |
|
180
|
|
|
|
|
|
|
# File must return "true" value at termination |
|
181
|
|
|
|
|
|
|
1; |
|
182
|
|
|
|
|
|
|
########################################################## |
|
183
|
|
|
|
|
|
|
|
|
184
|
|
|
|
|
|
|
|
|
185
|
|
|
|
|
|
|
__END__ |