|
Revision 5973, 2.1 kB
(checked in by tokuhirom, 4 years ago)
|
|
added cl2html.
|
| Line | |
|---|
| 1 | use strict; |
|---|
| 2 | use warnings; |
|---|
| 3 | use Text::Chalow::Parser; |
|---|
| 4 | use Template; |
|---|
| 5 | use Text::Hatena; |
|---|
| 6 | use DateTime; |
|---|
| 7 | |
|---|
| 8 | my $file = shift @ARGV || die "Usage: $0 ChangeLog"; |
|---|
| 9 | |
|---|
| 10 | &main;exit; |
|---|
| 11 | |
|---|
| 12 | sub main { |
|---|
| 13 | print render(load()); |
|---|
| 14 | } |
|---|
| 15 | |
|---|
| 16 | sub load { |
|---|
| 17 | my $parser = Text::Chalow::Parser->new(); |
|---|
| 18 | open my $fh, '<', $file or die $!; |
|---|
| 19 | $parser->read_file($fh); |
|---|
| 20 | $parser->{all}; |
|---|
| 21 | } |
|---|
| 22 | |
|---|
| 23 | sub render { |
|---|
| 24 | my $data = shift; |
|---|
| 25 | my $tt = Template->new( |
|---|
| 26 | FILTERS => +{ |
|---|
| 27 | hatena => sub { |
|---|
| 28 | Text::Hatena->parse($_[0]) |
|---|
| 29 | }, |
|---|
| 30 | date => sub { |
|---|
| 31 | my ($y, $m, $d) = split /-/, $_[0]; |
|---|
| 32 | DateTime->new(year => $y, month => $m, day => $d)->strftime('%Y-%m-%d(%a)') |
|---|
| 33 | }, |
|---|
| 34 | } |
|---|
| 35 | ); |
|---|
| 36 | $tt->process(\*DATA, {data => $data}, \my $out) or die $tt->error; |
|---|
| 37 | $out |
|---|
| 38 | } |
|---|
| 39 | |
|---|
| 40 | # AUTHOR: Tokuhiro Matsuno |
|---|
| 41 | # LICENSE: Same as Perl. |
|---|
| 42 | |
|---|
| 43 | __END__ |
|---|
| 44 | <html> |
|---|
| 45 | <head> |
|---|
| 46 | <title>changelog</title> |
|---|
| 47 | <style type="text/css"> |
|---|
| 48 | body { |
|---|
| 49 | background-color: black; |
|---|
| 50 | color: green; |
|---|
| 51 | } |
|---|
| 52 | .hfeed { |
|---|
| 53 | margin-left: 100px; |
|---|
| 54 | } |
|---|
| 55 | .hentry { |
|---|
| 56 | margin-left: 20px; |
|---|
| 57 | } |
|---|
| 58 | .entry-content { |
|---|
| 59 | margin-left: 40px; |
|---|
| 60 | } |
|---|
| 61 | </style> |
|---|
| 62 | </head> |
|---|
| 63 | <body> |
|---|
| 64 | <div class="hfeed"> |
|---|
| 65 | [% FOR date IN data.keys.sort.reverse %] |
|---|
| 66 | <h1>[% date | date %]</h1> |
|---|
| 67 | <div class="day"> |
|---|
| 68 | [% FOR id IN data.item(date).keys.sort %] |
|---|
| 69 | [% IF data.item(date).item(id).ho %] |
|---|
| 70 | <div class="hentry"> |
|---|
| 71 | <h2 class="entry-title">[% data.item(date).item(id).ho %] [[% data.item(date).item(id).cat.join(",") %]]</h2> |
|---|
| 72 | <div class="entry-content">[% data.item(date).item(id).co | hatena %]</div> |
|---|
| 73 | <a rel="bookmark" name="#[% date %].[% id %]" style="display: none;">b</a> |
|---|
| 74 | </div> |
|---|
| 75 | [% END %] |
|---|
| 76 | [% END %] |
|---|
| 77 | </div> |
|---|
| 78 | [% END %] |
|---|
| 79 | </div> |
|---|
| 80 | </body> |
|---|
| 81 | </html> |
|---|
| 82 | |
|---|