root/lang/perl/misc/cl2html.pl

Revision 5973, 2.1 kB (checked in by tokuhirom, 4 years ago)

added cl2html.

Line 
1use strict;
2use warnings;
3use Text::Chalow::Parser;
4use Template;
5use Text::Hatena;
6use DateTime;
7
8my $file = shift @ARGV || die "Usage: $0 ChangeLog";
9
10&main;exit;
11
12sub main {
13    print render(load());
14}
15
16sub 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
23sub 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
Note: See TracBrowser for help on using the browser.