Added rss-comments.xml support.
[gruta.git] / bin / gruta-snapshot
blob2e7a97e61a64363f206c85b5955e0a15a12310b5
1 #!/usr/bin/perl
3 use strict;
4 use warnings;
6 my $VERSION = '0.2';
8 use locale;
9 use POSIX qw (locale_h);
10 setlocale(LC_ALL, 'es_ES.UTF-8');
12 use Gruta;
14 use Gruta::CGI;
15 use Gruta::Source::FS;
16 use Gruta::Renderer::Grutatxt;
17 use Gruta::Renderer::HTML;
18 use Gruta::Renderer::Text;
19 use Gruta::Template::Art5;
21 sub usage() {
22 print "Usage: $0 {src} {folder} {base url}\n";
23 exit 1;
26 sub out {
27 my $g = shift;
28 my $template = shift;
29 my $file = shift;
30 my $args = shift || {};
32 $args->{t} = $template;
33 $g->template->_art5->{xh} = $args;
35 $g->template->_art5->{abort} = 0;
36 $g->template->{search_count} = 0;
38 my $o = $g->template->process($template);
40 if ($g->template->_art5->{abort}) {
41 print ("NOT Creating $file\n");
43 else {
44 printf("Creating $file\n");
45 open F, '>' . $g->{_folder} . '/' . $file or die;
46 print F $o;
47 close F;
51 ############################################################
53 my $index_num = 20;
54 my $topic_num = 20;
56 my $base = shift(@ARGV) or usage();
57 my $folder = shift(@ARGV) or usage();
58 my $url = shift(@ARGV) or usage();
60 $Gruta::VERSION_CODENAME .= " (+ gruta-snapshot $VERSION)";
62 my $g = Gruta->new(
63 id => '',
64 source => Gruta::Source::FS->new( path => "${base}/var"),
65 renderers => [
66 Gruta::Renderer::Grutatxt->new(),
67 Gruta::Renderer::HTML->new(),
68 Gruta::Renderer::HTML->new( valid_tags => undef ),
69 Gruta::Renderer::Text->new(),
71 template => Gruta::Template::Art5->new(lang => 'en'),
72 cgi => Gruta::CGI->new(
73 upload_dirs => [
74 "${base}/img",
75 "${base}/download"
78 args => {
79 base_url => $url,
80 static_urls => 2,
82 _folder => $folder
85 mkdir $folder, 0755;
86 mkdir $folder . '/top/', 0755;
88 out($g, 'INDEX', 'index.html', { num => $index_num } );
90 my @topics = split(/:/, ($g->template->process('cfg_index_topics')));
92 my @all = $g->source->stories_by_date(\@topics);
94 my $max = scalar(@all) - $index_num;
95 my $offset = $index_num;
97 print "$max stories\n";
99 while ($max > 0) {
100 out($g, 'INDEX', "${offset}.html", { num => $index_num, offset => $offset });
101 $offset += $index_num;
102 $max -= $index_num;
105 out($g, 'CSS', 'style.css');
106 out($g, 'RSS', 'rss.xml');
107 out($g, 'RSS_COMMENTS', 'rss-comments.xml');
108 out($g, 'SITEMAP', 'sitemap.xml');
110 foreach my $t (sort $g->source->topics()) {
111 mkdir $folder . '/' . $t, 0755;
113 my @stories = $g->source->stories($t);
115 foreach my $s (sort @stories) {
116 out($g, 'STORY', "$t/$s.html", {
117 topic => $t,
118 id => $s
122 my $story = $g->source->story($t, $s);
124 my $d = $story->date('%y%m%d');
126 mkdir $folder . '/' . $d;
128 out($g, 'SEARCH_BY_DATE', "${d}/index.html", {
129 from => "${d}000000",
130 to => "${d}235959"
135 out($g, 'TOPIC', "$t/index.html", { 'topic' => $t, 'num' => $topic_num });
137 my $max = scalar(@stories) - $topic_num;
138 my $offset = $topic_num;
140 while ($max > 0) {
141 out($g, 'TOPIC', "$t/~${offset}.html", {
142 topic => $t,
143 num => $topic_num,
144 offset => $offset
147 $max -= $topic_num;
148 $offset += $topic_num;
152 mkdir $folder . '/tag/', 0755;
154 out($g, 'TAGS', 'tag/index.html');
156 foreach my $t ($g->source->tags()) {
157 out($g, 'SEARCH_BY_TAG', "tag/$t->[0].html", { tag => $t->[0] });
160 out($g, 'TOP_TEN', 'top/index.html');