my %translations;
our %filtered;
-## FIXME: makes some test cases cry once every two tries; this may be
-## related to the artificial way the testsuite is run, or not.
-# memoize("istranslatable");
memoize("_istranslation");
memoize("percenttranslated");
+# FIXME: memoizing istranslatable() makes some test cases fail once every
+# two tries; this may be related to the artificial way the testsuite is
+# run, or not.
+# memoize("istranslatable");
# backup references to subs that will be overriden
my %origsubs;
hook(type => "needsbuild", id => "po", call => \&needsbuild);
hook(type => "filter", id => "po", call => \&filter);
hook(type => "htmlize", id => "po", call => \&htmlize);
- hook(type => "pagetemplate", id => "po", call => \&pagetemplate);
+ hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
hook(type => "editcontent", id => "po", call => \&editcontent);
inject(name => "IkiWiki::bestlink", call => \&mybestlink);
inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath);
sub potfile ($) { #{{{
my $masterfile=shift;
(my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/);
- return File::Spec->catfile($dir, $name . ".pot");
+ $dir='' if $dir eq './';
+ return File::Spec->catpath('', $dir, $name . ".pot");
} #}}}
sub pofile ($$) { #{{{
my $masterfile=shift;
my $lang=shift;
(my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/);
- return File::Spec->catfile($dir, $name . "." . $lang . ".po");
+ $dir='' if $dir eq './';
+ return File::Spec->catpath('', $dir, $name . "." . $lang . ".po");
} #}}}
sub refreshpot ($) { #{{{
# refresh/create POT and PO files as needed
my $updated_po_files=0;
foreach my $page (keys %pagesources) {
- my $pageneedsbuild = grep { $_ eq $pagesources{$page} } @$needsbuild;
if (istranslatable($page)) {
+ my $pageneedsbuild = grep { $_ eq $pagesources{$page} } @$needsbuild;
+ my $updated_pot_file=0;
my $file=srcfile($pagesources{$page});
if ($pageneedsbuild || ! -e potfile($file)) {
refreshpot($file);
+ $updated_pot_file=1;
}
my @pofiles;
foreach my $lang (keys %{$config{po_slave_languages}}) {
my $pofile=pofile($file, $lang);
- if ($pageneedsbuild || ! -e $pofile) {
+ my $pofile_rel=pofile($pagesources{$page}, $lang);
+ if ($pageneedsbuild || $updated_pot_file || ! -e $pofile) {
push @pofiles, $pofile;
+ push @$needsbuild, $pofile_rel
+ unless grep { $_ eq $pofile_rel } @$needsbuild;
}
}
if (@pofiles) {
}
}
- # check staged changes in and trigger a wiki refresh.
+ # check staged changes in
if ($updated_po_files) {
if ($config{rcs}) {
IkiWiki::disable_commit_hook();
IkiWiki::enable_commit_hook();
IkiWiki::rcs_update();
}
- IkiWiki::refresh();
- IkiWiki::saveindex();
# refresh module's private variables
undef %filtered;
undef %translations;
}
}
-
# make existing translations depend on the corresponding master page
foreach my $master (keys %translations) {
foreach my $slave (values %{$translations{$master}}) {
sub pagetemplate (@) { #{{{
my %params=@_;
- my $page=$params{page};
- my $destpage=$params{destpage};
- my $template=$params{template};
+ my $page=$params{page};
+ my $destpage=$params{destpage};
+ my $template=$params{template};
+ my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/) if istranslation($page);
if (istranslation($page) && $template->query(name => "percenttranslated")) {
$template->param(percenttranslated => percenttranslated($page));
}
}
elsif (istranslation($page)) {
- my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
add_depends($page, $masterpage);
foreach my $translation (values %{$translations{$masterpage}}) {
add_depends($page, $translation);
# prevent future breakage when ikiwiki internals change.
# Known limitations are preferred to future random bugs.
if ($template->param('discussionlink') && istranslation($page)) {
- my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/);
$template->param('discussionlink' => htmllink(
$page,
$destpage,
linktext => gettext("Discussion"),
));
}
+ # remove broken parentlink to ./index.html on home page's translations
+ if ($template->param('parentlinks')
+ && istranslation($page)
+ && $masterpage eq "index") {
+ $template->param('parentlinks' => []);
+ }
} # }}}
sub editcontent () { #{{{