use strict; use warnings; use Text::Chalow::Parser; use Template; use Text::Hatena; use DateTime; my $file = shift @ARGV || die "Usage: $0 ChangeLog"; &main;exit; sub main { print render(load()); } sub load { my $parser = Text::Chalow::Parser->new(); open my $fh, '<', $file or die $!; $parser->read_file($fh); $parser->{all}; } sub render { my $data = shift; my $tt = Template->new( FILTERS => +{ hatena => sub { Text::Hatena->parse($_[0]) }, date => sub { my ($y, $m, $d) = split /-/, $_[0]; DateTime->new(year => $y, month => $m, day => $d)->strftime('%Y-%m-%d(%a)') }, } ); $tt->process(\*DATA, {data => $data}, \my $out) or die $tt->error; $out } # AUTHOR: Tokuhiro Matsuno # LICENSE: Same as Perl. __END__ changelog
[% FOR date IN data.keys.sort.reverse %]

[% date | date %]

[% FOR id IN data.item(date).keys.sort %] [% IF data.item(date).item(id).ho %]

[% data.item(date).item(id).ho %] [[% data.item(date).item(id).cat.join(",") %]]

[% data.item(date).item(id).co | hatena %]
b
[% END %] [% END %]
[% END %]