#!/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