92 lines
2.0 KiB
Perl
92 lines
2.0 KiB
Perl
#!/usr/bin/perl
|
|
package IkiWiki::Plugin::prettydate;
|
|
use IkiWiki;
|
|
use warnings;
|
|
no warnings 'redefine';
|
|
use strict;
|
|
|
|
# Blanks duplicate the time before.
|
|
my $default_timetable=[
|
|
"late at night on", # 12
|
|
"", # 1
|
|
"in the wee hours of", # 2
|
|
"", # 3
|
|
"", # 4
|
|
"terribly early in the morning of", # 5
|
|
"", # 6
|
|
"in early morning on", # 7
|
|
"", # 8
|
|
"", # 9
|
|
"in mid-morning of", # 10
|
|
"in late morning of", # 11
|
|
"at lunch time on", # 12
|
|
"", # 1
|
|
"in the afternoon of", # 2
|
|
"", # 3
|
|
"", # 4
|
|
"in late afternoon of", # 5
|
|
"in the evening of", # 6
|
|
"", # 7
|
|
"in late evening on", # 8
|
|
"", # 9
|
|
"at night on", # 10
|
|
"", # 11
|
|
];
|
|
|
|
sub import { #{{{
|
|
hook(type => "checkconfig", id => "skeleton", call => \&checkconfig);
|
|
} # }}}
|
|
|
|
sub checkconfig () { #{{{
|
|
if (! defined $config{prettydateformat} ||
|
|
$config{prettydateformat} eq '%c') {
|
|
$config{prettydateformat}='%X %B %o, %Y';
|
|
}
|
|
|
|
if (! ref $config{timetable}) {
|
|
$config{timetable}=$default_timetable;
|
|
}
|
|
|
|
# Fill in the blanks.
|
|
for (my $h=0; $h < 24; $h++) {
|
|
if (! length $config{timetable}[$h]) {
|
|
$config{timetable}[$h] = $config{timetable}[$h - 1];
|
|
}
|
|
}
|
|
} #}}}
|
|
|
|
sub IkiWiki::displaytime ($) { #{{{
|
|
my $time=shift;
|
|
|
|
my @t=localtime($time);
|
|
my ($h, $m)=@t[2, 1];
|
|
if ($h == 16 && $m < 30) {
|
|
$time = "at teatime on";
|
|
}
|
|
elsif (($h == 0 && $m < 30) || ($h == 23 && $m > 50)) {
|
|
# well, at 40 minutes it's more like the martian timeslip..
|
|
$time = "at midnight on";
|
|
}
|
|
elsif (($h == 12 && $m < 15) || ($h == 11 && $m > 50)) {
|
|
$time = "at noon on";
|
|
}
|
|
# TODO: sunrise and sunset, but to be right I need to do it based on
|
|
# lat and long, and calculate the appropriate one for the actual
|
|
# time of year using Astro::Sunrise. Not tonight, it's wee hours
|
|
# already..
|
|
else {
|
|
$time = $config{timetable}[$h];
|
|
if (! length $time) {
|
|
$time = "sometime";
|
|
}
|
|
}
|
|
|
|
eval q{use Date::Format};
|
|
error($@) if $@;
|
|
my $format=$config{prettydateformat};
|
|
$format=~s/\%X/$time/g;
|
|
return strftime($format, \@t);
|
|
} #}}}
|
|
|
|
1
|