# Blosxom Plugin: utime # エントリの更新時刻をエントリ内で指定した値に変更する # 指定の仕方: # Author(s): Fukazawa Tsuyoshi # Version: 2004-10-31 package utime; use strict; use CGI qw/:standard/; use FileHandle; use Time::Local; # --------------------------------------------------------------------- sub start { # オプションでutimeが指定されていなければ何もしない return param("utime") ? 1 : 0; } sub filter { my ($pkg, $files_ref) = @_; my $fn; my $fh = new FileHandle; foreach $fn (keys %$files_ref) { # このファイルの中身を読んで、utimeプラグイン向け記述があるか調べる $fh->open($fn); my @data = <$fh>; $fh->close(); my $utime = getutime(join "", @data); # あったら日付を書き換える if ($utime) { utime(time, $utime, $fn); $files_ref->{$fn} = $utime; } } 1; } # --------------------------------------------------------------------- sub getutime { my $text = shift; my $ret = undef; $text =~ //; $ret = parseDate($1) if ($1); return $ret; } # --------------------------------------------------------------------- # dc:date をいいかげんに解析して time値を返す sub parseDate { my $dcdate = shift; my ($yy, $d1, $mm, $d2, $dd, $d3, $hh, $d4, $mi, $d5, $ss, $d6, $tz) = unpack("A4A1A2A1A2A1A2A1A2A1A2A1A2", $dcdate); warn "utime > parseDate> $dcdate"; return timelocal($ss, $mi, $hh, $dd, $mm - 1, $yy); } 1;