| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package App::week; |
|
2
|
|
|
|
|
|
|
our $VERSION = "1.0302"; |
|
3
|
|
|
|
|
|
|
|
|
4
|
1
|
|
|
1
|
|
691
|
use v5.14; |
|
|
1
|
|
|
|
|
3
|
|
|
5
|
1
|
|
|
1
|
|
5
|
use warnings; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
29
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
1
|
|
|
1
|
|
643
|
use utf8; |
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
5
|
|
|
8
|
1
|
|
|
1
|
|
592
|
use Encode; |
|
|
1
|
|
|
|
|
10305
|
|
|
|
1
|
|
|
|
|
71
|
|
|
9
|
1
|
|
|
1
|
|
470
|
use Time::localtime; |
|
|
1
|
|
|
|
|
4908
|
|
|
|
1
|
|
|
|
|
62
|
|
|
10
|
1
|
|
|
1
|
|
6
|
use List::Util qw(min max); |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
126
|
|
|
11
|
1
|
|
|
1
|
|
529
|
use Hash::Util qw(lock_keys); |
|
|
1
|
|
|
|
|
2980
|
|
|
|
1
|
|
|
|
|
6
|
|
|
12
|
1
|
|
|
1
|
|
660
|
use Pod::Usage; |
|
|
1
|
|
|
|
|
39190
|
|
|
|
1
|
|
|
|
|
145
|
|
|
13
|
1
|
|
|
1
|
|
651
|
use Data::Dumper; |
|
|
1
|
|
|
|
|
6189
|
|
|
|
1
|
|
|
|
|
70
|
|
|
14
|
1
|
|
|
1
|
|
626
|
use open IO => ':utf8', ':std'; |
|
|
1
|
|
|
|
|
1263
|
|
|
|
1
|
|
|
|
|
6
|
|
|
15
|
1
|
|
|
1
|
|
640
|
use Getopt::EX::Colormap; |
|
|
1
|
|
|
|
|
22481
|
|
|
|
1
|
|
|
|
|
53
|
|
|
16
|
|
|
|
|
|
|
|
|
17
|
1
|
|
|
1
|
|
536
|
use App::week::Util; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
44
|
|
|
18
|
1
|
|
|
1
|
|
516
|
use App::week::CalYear qw(@calyear); |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
161
|
|
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
my @DOW_LABELS = qw( |
|
21
|
|
|
|
|
|
|
DOW_SU |
|
22
|
|
|
|
|
|
|
DOW_MO |
|
23
|
|
|
|
|
|
|
DOW_TU |
|
24
|
|
|
|
|
|
|
DOW_WE |
|
25
|
|
|
|
|
|
|
DOW_TH |
|
26
|
|
|
|
|
|
|
DOW_FR |
|
27
|
|
|
|
|
|
|
DOW_SA |
|
28
|
|
|
|
|
|
|
DOW_CW |
|
29
|
|
|
|
|
|
|
); |
|
30
|
|
|
|
|
|
|
|
|
31
|
|
|
|
|
|
|
my %DEFAULT_COLORMAP = ( |
|
32
|
|
|
|
|
|
|
(), DAYS => "L05/335", |
|
33
|
|
|
|
|
|
|
(), WEEK => "L05/445", |
|
34
|
|
|
|
|
|
|
(), FRAME => "L05/445", |
|
35
|
|
|
|
|
|
|
(), MONTH => "L05/335", |
|
36
|
|
|
|
|
|
|
(), THISDAY => "522/113", |
|
37
|
|
|
|
|
|
|
(), THISDAYS => "555/113", |
|
38
|
|
|
|
|
|
|
(), THISWEEK => "L05/445", |
|
39
|
|
|
|
|
|
|
(), THISMONTH => "555/113", |
|
40
|
|
|
|
|
|
|
map { $_ => "" } @DOW_LABELS, |
|
41
|
|
|
|
|
|
|
); |
|
42
|
|
|
|
|
|
|
|
|
43
|
1
|
|
|
1
|
|
611
|
use Getopt::EX::Hashed; { |
|
|
1
|
|
|
|
|
3778
|
|
|
|
1
|
|
|
|
|
6
|
|
|
44
|
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
Getopt::EX::Hashed->configure(DEFAULT => [ is => 'rw' ]); |
|
46
|
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
has ARGV => default => []; |
|
48
|
|
|
|
|
|
|
has COLORMAP => ; |
|
49
|
|
|
|
|
|
|
has CM => ; |
|
50
|
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
my($sec, $min, $hour, $mday, $mon, $year) = CORE::localtime(time); |
|
52
|
|
|
|
|
|
|
has year => default => $year + 1900; |
|
53
|
|
|
|
|
|
|
has mday => default => $mday; |
|
54
|
|
|
|
|
|
|
has mon => default => $mon + 1; |
|
55
|
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
has cell_width => default => undef; |
|
57
|
|
|
|
|
|
|
has frame => default => ' '; |
|
58
|
|
|
|
|
|
|
has frame_height => default => 1; |
|
59
|
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
# option params |
|
61
|
|
|
|
|
|
|
has help => ' h ' ; |
|
62
|
|
|
|
|
|
|
has version => ' v ' ; |
|
63
|
|
|
|
|
|
|
has months => ' m =i ' , default => 0; |
|
64
|
|
|
|
|
|
|
has after => ' A :1 ' , min => 0; |
|
65
|
|
|
|
|
|
|
has before => ' B :1 ' , min => 0, default => 1; |
|
66
|
|
|
|
|
|
|
has center => ' C :4 ' , min => 0; |
|
67
|
|
|
|
|
|
|
has column => ' c =i ' , min => 1, default => 3; |
|
68
|
|
|
|
|
|
|
has colordump => ' ' ; |
|
69
|
|
|
|
|
|
|
has colormap => ' =s@ cm ' , default => []; |
|
70
|
|
|
|
|
|
|
has show_year => ' y ' ; |
|
71
|
|
|
|
|
|
|
has years => ' Y :1 ' , max => 100; |
|
72
|
|
|
|
|
|
|
has rgb24 => ' ! ' ; |
|
73
|
|
|
|
|
|
|
has year_on_all => ' P ' ; |
|
74
|
|
|
|
|
|
|
has year_on => ' p =i ' , min => 0, max => 12; |
|
75
|
|
|
|
|
|
|
has config => ' =s% ' , default => {}; |
|
76
|
|
|
|
|
|
|
has weeknumber => ' W :1 ' ; |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
has '+center' => sub { |
|
79
|
|
|
|
|
|
|
$_->after = $_->before = $_[1]; |
|
80
|
|
|
|
|
|
|
}; |
|
81
|
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
has '+weeknumber' => sub { |
|
83
|
|
|
|
|
|
|
App::week::CalYear::Configure $_[0] => $_[1]; |
|
84
|
|
|
|
|
|
|
}; |
|
85
|
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
has '+rgb24' => sub { |
|
87
|
|
|
|
|
|
|
$Getopt::EX::Colormap::RGB24 = !!$_[1]; |
|
88
|
|
|
|
|
|
|
}; |
|
89
|
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
has '+config' => sub { |
|
91
|
|
|
|
|
|
|
App::week::CalYear::Configure $_[1] => $_[2]; |
|
92
|
|
|
|
|
|
|
}; |
|
93
|
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
has '+help' => sub { |
|
95
|
|
|
|
|
|
|
pod2usage |
|
96
|
|
|
|
|
|
|
-verbose => 99, |
|
97
|
|
|
|
|
|
|
-sections => [ qw(SYNOPSIS VERSION) ]; |
|
98
|
|
|
|
|
|
|
}; |
|
99
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
has '+version' => sub { |
|
101
|
|
|
|
|
|
|
print "Version: $VERSION\n"; |
|
102
|
|
|
|
|
|
|
exit; |
|
103
|
|
|
|
|
|
|
}; |
|
104
|
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
has "<>" => sub { |
|
106
|
|
|
|
|
|
|
my $obj = $_; |
|
107
|
|
|
|
|
|
|
local $_ = $_[0]; |
|
108
|
|
|
|
|
|
|
if (/^-+([0-9]+)$/) { |
|
109
|
|
|
|
|
|
|
$obj->months = $1; |
|
110
|
|
|
|
|
|
|
} elsif (/^-/) { |
|
111
|
|
|
|
|
|
|
die "$_: Option error\n"; |
|
112
|
|
|
|
|
|
|
} else { |
|
113
|
|
|
|
|
|
|
push @{$obj->ARGV}, $_; |
|
114
|
|
|
|
|
|
|
} |
|
115
|
|
|
|
|
|
|
}; |
|
116
|
|
|
|
|
|
|
|
|
117
|
1
|
|
|
1
|
|
701
|
} no Getopt::EX::Hashed; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
4
|
|
|
118
|
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
sub color { |
|
120
|
0
|
|
|
0
|
0
|
|
(+shift)->CM->color(@_); |
|
121
|
|
|
|
|
|
|
} |
|
122
|
|
|
|
|
|
|
|
|
123
|
|
|
|
|
|
|
sub usage { |
|
124
|
0
|
|
|
0
|
0
|
|
pod2usage(-verbose => 0, -exitval => "NOEXIT"); |
|
125
|
0
|
|
|
|
|
|
print "Version: $VERSION\n"; |
|
126
|
0
|
|
|
|
|
|
exit 2; |
|
127
|
|
|
|
|
|
|
} |
|
128
|
|
|
|
|
|
|
|
|
129
|
|
|
|
|
|
|
sub run { |
|
130
|
0
|
|
|
0
|
0
|
|
my $app = shift; |
|
131
|
0
|
|
|
|
|
|
local @ARGV = decode_argv @_; |
|
132
|
|
|
|
|
|
|
|
|
133
|
0
|
|
|
|
|
|
$app->read_option() |
|
134
|
|
|
|
|
|
|
->argv() |
|
135
|
|
|
|
|
|
|
->deal_option() |
|
136
|
|
|
|
|
|
|
->prepare() |
|
137
|
|
|
|
|
|
|
->show(); |
|
138
|
|
|
|
|
|
|
|
|
139
|
0
|
|
|
|
|
|
return 0; |
|
140
|
|
|
|
|
|
|
} |
|
141
|
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
sub read_option { |
|
143
|
0
|
|
|
0
|
0
|
|
my $app = shift; |
|
144
|
1
|
|
|
1
|
|
694
|
use Getopt::EX::Long qw(:DEFAULT Configure ExConfigure); |
|
|
1
|
|
|
|
|
16764
|
|
|
|
1
|
|
|
|
|
741
|
|
|
145
|
0
|
|
|
|
|
|
ExConfigure BASECLASS => [ "App::week", "Getopt::EX", "" ]; |
|
146
|
0
|
|
|
|
|
|
Configure qw(bundling no_getopt_compat no_ignore_case pass_through); |
|
147
|
0
|
0
|
|
|
|
|
$app->getopt || usage; |
|
148
|
0
|
|
|
|
|
|
return $app; |
|
149
|
|
|
|
|
|
|
} |
|
150
|
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
sub argv { |
|
152
|
0
|
|
|
0
|
0
|
|
my $app = shift; |
|
153
|
0
|
|
|
|
|
|
for (@{$app->ARGV}) { |
|
|
0
|
|
|
|
|
|
|
|
154
|
0
|
|
|
|
|
|
call \&guess_date, |
|
155
|
|
|
|
|
|
|
for => $app, |
|
156
|
|
|
|
|
|
|
with => [ qw(year mon mday show_year) ]; |
|
157
|
|
|
|
|
|
|
} |
|
158
|
0
|
|
|
|
|
|
return $app; |
|
159
|
|
|
|
|
|
|
} |
|
160
|
|
|
|
|
|
|
|
|
161
|
|
|
|
|
|
|
sub deal_option { |
|
162
|
0
|
|
|
0
|
0
|
|
my $app = shift; |
|
163
|
|
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
# load --colormap option |
|
165
|
0
|
|
|
|
|
|
my %colormap = %DEFAULT_COLORMAP; |
|
166
|
0
|
|
|
|
|
|
$app->COLORMAP(\%colormap); |
|
167
|
|
|
|
|
|
|
$app->CM(Getopt::EX::Colormap->new(HASH => \%colormap) |
|
168
|
0
|
|
|
|
|
|
->load_params(@{$app->colormap})); |
|
|
0
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
# --colordump |
|
171
|
0
|
0
|
|
|
|
|
if ($app->colordump) { |
|
172
|
0
|
|
|
|
|
|
print $app->CM->colormap( |
|
173
|
|
|
|
|
|
|
name => '--changeme', |
|
174
|
|
|
|
|
|
|
option => '--colormap'); |
|
175
|
0
|
|
|
|
|
|
exit; |
|
176
|
|
|
|
|
|
|
} |
|
177
|
|
|
|
|
|
|
|
|
178
|
|
|
|
|
|
|
# -p, -P |
|
179
|
0
|
0
|
0
|
|
|
|
$app->year_on //= $app->mon if $app->mday; |
|
180
|
0
|
0
|
|
|
|
|
if ($app->year_on_all) { |
|
|
|
0
|
|
|
|
|
|
|
181
|
0
|
|
|
|
|
|
App::week::CalYear::Configure show_year => [ 1..12 ]; |
|
182
|
|
|
|
|
|
|
} |
|
183
|
|
|
|
|
|
|
elsif (defined(my $m = $app->year_on)) { |
|
184
|
0
|
0
|
0
|
|
|
|
if ($m < 0 or 12 < $m) { |
|
185
|
0
|
|
|
|
|
|
die "$m: Month must be within 0 to 12\n"; |
|
186
|
|
|
|
|
|
|
} |
|
187
|
|
|
|
|
|
|
App::week::CalYear::Configure |
|
188
|
0
|
|
|
|
|
|
show_year => { $app->year => $m, '*' => 1 }; |
|
189
|
|
|
|
|
|
|
} else { |
|
190
|
0
|
|
|
|
|
|
App::week::CalYear::Configure show_year => 1; |
|
191
|
|
|
|
|
|
|
} |
|
192
|
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
# -y, -Y |
|
194
|
0
|
0
|
0
|
|
|
|
$app->years //= 1 if $app->show_year; |
|
195
|
|
|
|
|
|
|
|
|
196
|
0
|
|
|
|
|
|
return $app; |
|
197
|
|
|
|
|
|
|
} |
|
198
|
|
|
|
|
|
|
|
|
199
|
|
|
|
|
|
|
sub prepare { |
|
200
|
0
|
|
|
0
|
0
|
|
my $app = shift; |
|
201
|
0
|
|
|
|
|
|
call \&_prepare, |
|
202
|
|
|
|
|
|
|
for => $app, |
|
203
|
|
|
|
|
|
|
with => [ qw(years months before after year mon column) ]; |
|
204
|
0
|
|
|
|
|
|
return $app; |
|
205
|
|
|
|
|
|
|
} |
|
206
|
|
|
|
|
|
|
|
|
207
|
|
|
|
|
|
|
sub _prepare { |
|
208
|
0
|
|
|
0
|
|
|
my @args = \( |
|
209
|
|
|
|
|
|
|
my($years, $months, $before, $after, $year, $mon, $column) = @_ |
|
210
|
|
|
|
|
|
|
); |
|
211
|
|
|
|
|
|
|
|
|
212
|
1
|
|
|
1
|
|
8
|
use integer; |
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
9
|
|
|
213
|
0
|
0
|
|
|
|
|
if ($months == 1) { |
|
|
|
0
|
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
214
|
0
|
|
|
|
|
|
$before = $after = 0; |
|
215
|
|
|
|
|
|
|
} |
|
216
|
|
|
|
|
|
|
elsif ($months > 1) { |
|
217
|
0
|
0
|
|
|
|
|
if (defined $before) { |
|
|
|
0
|
|
|
|
|
|
|
218
|
0
|
|
|
|
|
|
$after = $months - $before - 1; |
|
219
|
|
|
|
|
|
|
} elsif (defined $after) { |
|
220
|
0
|
|
|
|
|
|
$before = $months - $after - 1; |
|
221
|
|
|
|
|
|
|
} else { |
|
222
|
0
|
|
|
|
|
|
$before = ($months - 1) / 2; |
|
223
|
0
|
|
|
|
|
|
$after = $months - $before - 1; |
|
224
|
|
|
|
|
|
|
} |
|
225
|
|
|
|
|
|
|
} |
|
226
|
|
|
|
|
|
|
elsif ($years) { |
|
227
|
0
|
|
0
|
|
|
|
$months = 12 * ($years // 1); |
|
228
|
0
|
|
|
|
|
|
$before = $mon - 1; |
|
229
|
0
|
|
|
|
|
|
$after = $months - $mon; |
|
230
|
|
|
|
|
|
|
} |
|
231
|
|
|
|
|
|
|
else { |
|
232
|
0
|
|
0
|
|
|
|
$before //= 1; |
|
233
|
0
|
|
0
|
|
|
|
$after //= max(0, $column - $before - 1); |
|
234
|
0
|
|
|
|
|
|
$months = $before + $after + 1; |
|
235
|
|
|
|
|
|
|
} |
|
236
|
|
|
|
|
|
|
|
|
237
|
0
|
|
0
|
|
|
|
$before //= 1; |
|
238
|
0
|
|
0
|
|
|
|
$after //= 1; |
|
239
|
|
|
|
|
|
|
|
|
240
|
0
|
0
|
|
|
|
|
$year += $year < 50 ? 2000 : $year < 100 ? 1900 : 0; |
|
|
|
0
|
|
|
|
|
|
|
241
|
|
|
|
|
|
|
|
|
242
|
0
|
|
|
|
|
|
map ${$_}, @args; |
|
|
0
|
|
|
|
|
|
|
|
243
|
|
|
|
|
|
|
} |
|
244
|
|
|
|
|
|
|
|
|
245
|
|
|
|
|
|
|
sub show { |
|
246
|
0
|
|
|
0
|
0
|
|
my $app = shift; |
|
247
|
|
|
|
|
|
|
$app->display( |
|
248
|
|
|
|
|
|
|
map { |
|
249
|
0
|
0
|
|
|
|
|
$app->cell( $app->year, |
|
|
0
|
|
|
|
|
|
|
|
250
|
|
|
|
|
|
|
$app->mon + $_, |
|
251
|
|
|
|
|
|
|
$_ ? () : $app->mday ) |
|
252
|
|
|
|
|
|
|
} -$app->before .. $app->after |
|
253
|
|
|
|
|
|
|
); |
|
254
|
0
|
|
|
|
|
|
return $app; |
|
255
|
|
|
|
|
|
|
} |
|
256
|
|
|
|
|
|
|
|
|
257
|
|
|
|
|
|
|
###################################################################### |
|
258
|
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
sub display { |
|
260
|
0
|
|
|
0
|
0
|
|
my $obj = shift; |
|
261
|
0
|
0
|
|
|
|
|
@_ or return; |
|
262
|
0
|
|
|
|
|
|
$obj->h_rule(min($obj->column, int @_)); |
|
263
|
0
|
|
|
|
|
|
while (@_) { |
|
264
|
0
|
|
|
|
|
|
my @cell = splice @_, 0, $obj->column; |
|
265
|
0
|
|
|
|
|
|
for my $row (transpose @cell) { |
|
266
|
0
|
|
|
|
|
|
$obj->h_line(@{$row}); |
|
|
0
|
|
|
|
|
|
|
|
267
|
|
|
|
|
|
|
} |
|
268
|
0
|
|
|
|
|
|
$obj->h_rule(int @cell); |
|
269
|
|
|
|
|
|
|
} |
|
270
|
|
|
|
|
|
|
} |
|
271
|
|
|
|
|
|
|
|
|
272
|
|
|
|
|
|
|
sub h_rule { |
|
273
|
0
|
|
|
0
|
0
|
|
my $obj = shift; |
|
274
|
0
|
|
|
|
|
|
my $column = shift; |
|
275
|
0
|
|
|
|
|
|
my $hr1 = " " x $obj->cell_width; |
|
276
|
0
|
|
|
|
|
|
my $s = join($obj->frame, '', ($hr1) x $column, ''); |
|
277
|
0
|
|
|
|
|
|
my $rule = $obj->color(FRAME => $s) . "\n"; |
|
278
|
0
|
|
|
|
|
|
print $rule x $obj->frame_height; |
|
279
|
|
|
|
|
|
|
} |
|
280
|
|
|
|
|
|
|
|
|
281
|
|
|
|
|
|
|
sub h_line { |
|
282
|
0
|
|
|
0
|
0
|
|
my $obj = shift; |
|
283
|
0
|
|
|
|
|
|
my $frame = $obj->color(FRAME => $obj->frame); |
|
284
|
0
|
|
|
|
|
|
print join($frame, '', @_, '') . "\n"; |
|
285
|
|
|
|
|
|
|
} |
|
286
|
|
|
|
|
|
|
|
|
287
|
|
|
|
|
|
|
sub cell { |
|
288
|
0
|
|
|
0
|
0
|
|
my $obj = shift; |
|
289
|
0
|
|
|
|
|
|
my($y, $m, $d) = @_; |
|
290
|
|
|
|
|
|
|
|
|
291
|
0
|
|
|
|
|
|
while ($m > 12) { $y += 1; $m -= 12 } |
|
|
0
|
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
292
|
0
|
|
|
|
|
|
while ($m <= 0) { $y -= 1; $m += 12 } |
|
|
0
|
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
293
|
|
|
|
|
|
|
|
|
294
|
0
|
|
|
|
|
|
my @cal = @{$calyear[$y][$m]}; |
|
|
0
|
|
|
|
|
|
|
|
295
|
|
|
|
|
|
|
|
|
296
|
|
|
|
|
|
|
# XXX this is not the best place to initialize... |
|
297
|
0
|
|
0
|
|
|
|
$obj->cell_width //= length $cal[2]; |
|
298
|
|
|
|
|
|
|
|
|
299
|
0
|
|
|
|
|
|
my %label; |
|
300
|
0
|
0
|
|
|
|
|
@label{qw(month week days)} = $d |
|
301
|
|
|
|
|
|
|
? qw(THISMONTH THISWEEK THISDAYS) |
|
302
|
|
|
|
|
|
|
: qw( MONTH WEEK DAYS); |
|
303
|
|
|
|
|
|
|
|
|
304
|
0
|
|
|
|
|
|
$cal[0] = $obj->color($label{month}, $cal[0]); |
|
305
|
|
|
|
|
|
|
$cal[1] = $obj->color($label{week}, |
|
306
|
0
|
|
|
|
|
|
state $week = $obj->week_line($cal[1])); |
|
307
|
0
|
0
|
|
|
|
|
my $day_re = $d ? qr/^(?: [ \d]{2}){0,6} \K(${\(sprintf '%2d', $d)})\b/ : undef; |
|
|
0
|
|
|
|
|
|
|
|
308
|
0
|
|
|
|
|
|
for (@cal[ 2 .. $#cal ]) { |
|
309
|
0
|
0
|
|
|
|
|
s/$day_re/$obj->color("THISDAY", $1)/e if $day_re; |
|
|
0
|
|
|
|
|
|
|
|
310
|
0
|
|
|
|
|
|
$_ = $obj->color($label{days}, $_); |
|
311
|
|
|
|
|
|
|
} |
|
312
|
|
|
|
|
|
|
|
|
313
|
0
|
|
|
|
|
|
return \@cal; |
|
314
|
|
|
|
|
|
|
} |
|
315
|
|
|
|
|
|
|
|
|
316
|
|
|
|
|
|
|
sub week_line { |
|
317
|
0
|
|
|
0
|
0
|
|
my $obj = shift; |
|
318
|
0
|
|
|
|
|
|
my $week = shift; |
|
319
|
0
|
|
|
|
|
|
my @week = split_week $week; |
|
320
|
0
|
|
|
|
|
|
for (0..7) { |
|
321
|
0
|
0
|
|
|
|
|
if (my $color = $obj->COLORMAP->{$DOW_LABELS[$_]}) { |
|
322
|
0
|
|
|
|
|
|
my $i = $_ * 2 + 1; |
|
323
|
0
|
0
|
|
|
|
|
$i > $#week and last; |
|
324
|
0
|
|
|
|
|
|
$week[$i] = $obj->color($color, $week[$i]); |
|
325
|
|
|
|
|
|
|
} |
|
326
|
|
|
|
|
|
|
} |
|
327
|
0
|
|
|
|
|
|
join '', @week; |
|
328
|
|
|
|
|
|
|
} |
|
329
|
|
|
|
|
|
|
|
|
330
|
|
|
|
|
|
|
1; |
|
331
|
|
|
|
|
|
|
|
|
332
|
|
|
|
|
|
|
__END__ |