use 5.014000;
use strict;
use warnings;
-use parent qw/Exporter/;
-our @EXPORT_OK = qw/generate _generate/;
use Fcntl qw/:flock/;
use File::Basename qw/fileparse/;
use File::Path qw/make_path/;
-use File::Slurp qw/write_file/;
+use File::Slurp qw/read_file write_file/;
use IO::Compress::Gzip qw/gzip/;
use IO::File;
-use Gruntmaster::Data qw/PUBLISH/;
+use Gruntmaster::Data;
our $VERSION = '0.001';
our @generators;
{
my $component = qr'[^/]+';
my $contest = qr,(?:ct/$component/)?,;
- declaregen Index => qr,^index$,;
- declaregen Learn => qr,^learn$,;
- declaregen Account => qr,^account$,;
declaregen Us => qr,^us/index$,;
declaregen 'Us::Entry' => qr,^us/$component$,;
declaregen Ct => qr,^ct/index$,;
declaregen 'Ct::Entry' => qr,^ct/$component/index$,;
- declaregen St => qr,^ct/$component/log/st$,;
+ declaregen St => qr,^${contest}log/st$,;
declaregen Log => qr,^${contest}log/(?:\d+|index)$,;
declaregen 'Log::Entry' => qr,^${contest}log/job/$component$,;
declaregen Submit => qr,^${contest}submit$,;
declaregen 'Pb::Entry' => qr,^${contest}pb/$component$,;
}
-sub _generate{
- my ($path) = @_;
+sub generate{
+ my ($path, $topic) = @_;
my ($path_noext, $ext) = $path =~ m/^(.*)\.(.*)$/;
my ($basename, $directories) = fileparse $path_noext;
make_path $directories;
flock my $lockfh = IO::File->new("<$path_noext.var"), LOCK_EX;
open my $typemap, ">$path_noext.var.new";
say $typemap "URI: $basename\n";
- for my $gen (@generators) {
- my ($regex, $generator) = @$gen;
- next unless $path_noext =~ $regex;
+
+ my $fill_typemap = sub {
for my $lang (@{LANGUAGES()}) {
- my $page = $generator->generate($path, $lang);
+ my $page = $_[0]->($lang);
write_file "$path_noext.$lang.$ext.new", $page;
say $typemap "URI: $basename.$lang.$ext\nContent-Language: $lang\nContent-Type: " . CONTENT_TYPES->{$ext} . "\n";
gzip \$page => "$path_noext.$lang.gz.$ext.new", Minimal => 1;
say $typemap "URI: $basename.$lang.gz.$ext\nContent-Language: $lang\nContent-Encoding: gzip\nContent-Type: " . CONTENT_TYPES->{$ext} . "\n";
}
- last
+ };
+
+ if ($topic eq 'genpage') {
+ for my $gen (@generators) {
+ my ($regex, $generator) = @$gen;
+ next unless $path_noext =~ $regex;
+ $fill_typemap->(sub { $generator->generate($path, $_[0]) });
+ last
+ }
+ } else {
+ my $get_article = sub {
+ my $article = read_file "$ENV{GRUNTMASTER_ARTICLE_ROOT}/$basename.$_[0]";
+ my $title = read_file "$ENV{GRUNTMASTER_ARTICLE_ROOT}/$basename.$_[0].title";
+ Gruntmaster::Page::Base::header($_[0], $title) . $article . Gruntmaster::Page::Base::footer($_[0])
+ };
+
+ $fill_typemap->($get_article);
}
for my $lang (@{LANGUAGES()}) {
close $typemap;
}
-sub generate{
- PUBLISH 'genpage', shift;
+sub gensrc{
+ my ($job) = @_;
+ my $ext = job_extension $job;
+ make_path "log/src/";
+ write_file "log/src/$job.$ext", job_inmeta($job)->{files}{prog}{content};
}
1;