summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2008-10-11 03:41:12 +0200
committerintrigeri <intrigeri@boum.org>2008-10-18 15:49:10 +0200
commit08df9dcef78a38ceaa12d5b93442b77df4d63573 (patch)
tree90cbf5a88e4578ee53d579dbd1b4ef7a241ad234
parent1e874b3f0a396ba99ebf7ab8bad3d7eed1a846f2 (diff)
po plugin: memoize istranslatable and _istranslation
Both functions are called very often, and: - istranslatable has no side effect - _istranslation is the helper function, without any side effect, for the istranslation function Signed-off-by: intrigeri <intrigeri@boum.org>
-rw-r--r--IkiWiki/Plugin/po.pm26
1 files changed, 16 insertions, 10 deletions
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;