diff options
author | intrigeri <intrigeri@boum.org> | 2008-10-11 03:41:12 +0200 |
---|---|---|
committer | intrigeri <intrigeri@boum.org> | 2008-10-18 15:49:10 +0200 |
commit | 08df9dcef78a38ceaa12d5b93442b77df4d63573 (patch) | |
tree | 90cbf5a88e4578ee53d579dbd1b4ef7a241ad234 | |
parent | 1e874b3f0a396ba99ebf7ab8bad3d7eed1a846f2 (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.pm | 26 |
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; |