- my ($path) = @_;
- my ($path_noext, $ext) = $path =~ m/^(.*)\.(.*)$/;
- my $basename = fileparse $path_noext;
-
- IO::File->new(">$path_noext.var")->close unless -f "$path_noext.var";
- 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 ($path, $topic) = @_;
+ my ($path_noext, $ext) = $path =~ m/^(.*)\.(.*)$/;
+ my ($basename, $directories) = fileparse $path_noext;
+ make_path $directories;
+
+ IO::File->new(">$path_noext.var")->close unless -f "$path_noext.var";
+ flock my $lockfh = IO::File->new("<$path_noext.var"), LOCK_EX;
+ open my $typemap, ">$path_noext.var.new";
+ say $typemap "URI: $basename\n";
+
+ my $fill_typemap = sub {
+ for my $lang (@{LANGUAGES()}) {
+ 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";
+ }
+ };
+
+ 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);
+ }
+