X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/1e874b3f0a396ba99ebf7ab8bad3d7eed1a846f2..08df9dcef78a38ceaa12d5b93442b77df4d63573:/IkiWiki/Plugin/po.pm diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 0698b2488..f29ad7a79 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -10,11 +10,15 @@ use IkiWiki 2.00; use Encode; use Locale::Po4a::Chooser; use File::Temp; +use Memoize; + +my %translations; +memoize("istranslatable"); +memoize("_istranslation"); sub import { hook(type => "getsetup", id => "po", call => \&getsetup); hook(type => "checkconfig", id => "po", call => \&checkconfig); - hook(type => "scan", id => "po", call => \&scan); hook(type => "targetpage", id => "po", call => \&targetpage); hook(type => "tweakurlpath", id => "po", call => \&tweakurlpath); hook(type => "tweakbestlink", id => "po", call => \&tweakbestlink); @@ -85,14 +89,6 @@ sub checkconfig () { #{{{ push @{$config{wiki_file_prune_regexps}}, qr/\.pot$/; } #}}} -sub scan (@) { #{{{ - my %params=@_; - my $page=$params{page}; - - # FIXME: cache (or memoize) the list of translatable/translation pages, - # and/or istranslation/istranslated results -} #}}} - sub targetpage (@) { #{{{ my %params = @_; my $page=$params{page}; @@ -203,7 +199,7 @@ sub istranslatable ($) { #{{{ return pagespec_match($page, $config{po_translatable_pages}); } #}}} -sub istranslation ($) { #{{{ +sub _istranslation ($) { #{{{ my $page=shift; my $file=$pagesources{$page}; if (! defined $file) { @@ -228,6 +224,16 @@ sub istranslation ($) { #{{{ return istranslatable($masterpage); } #}}} +sub istranslation ($) { #{{{ + my $page=shift; + if (_istranslation($page)) { + my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/); + $translations{$masterpage}{$lang}=$page unless exists $translations{$masterpage}{$lang}; + return 1; + } + return 0; +} #}}} + package IkiWiki::PageSpec; use warnings;