Add initial 'num' to INDEX.
[gruta.git] / bin / gruta-snapshot
blobc2cf6ead995f5c0e760be39b3c4d736993359375
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, 'SITEMAP', 'sitemap.xml');
109 foreach my $t (sort $g->source->topics()) {
110 mkdir $folder . '/' . $t, 0755;
112 my @stories = $g->source->stories($t);
114 foreach my $s (sort @stories) {
115 out($g, 'STORY', "$t/$s.html", {
116 topic => $t,
117 id => $s
121 my $story = $g->source->story($t, $s);
123 my $d = $story->date('%y%m%d');
125 mkdir $folder . '/' . $d;
127 out($g, 'SEARCH_BY_DATE', "${d}/index.html", {
128 from => "${d}000000",
129 to => "${d}235959"
134 out($g, 'TOPIC', "$t/index.html", { 'topic' => $t, 'num' => $topic_num });
136 my $max = scalar(@stories) - $topic_num;
137 my $offset = $topic_num;
139 while ($max > 0) {
140 out($g, 'TOPIC', "$t/~${offset}.html", {
141 topic => $t,
142 num => $topic_num,
143 offset => $offset
146 $max -= $topic_num;
147 $offset += $topic_num;
151 mkdir $folder . '/tag/', 0755;
153 out($g, 'TAGS', 'tag/index.html');
155 foreach my $t ($g->source->tags()) {
156 out($g, 'SEARCH_BY_TAG', "tag/$t->[0].html", { tag => $t->[0] });
159 out($g, 'TOP_TEN', 'top/index.html');