]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/po.pm
po plugin: replace tweakbestlink hook with a wrapper function
[git.ikiwiki.info.git] / IkiWiki / Plugin / po.pm
index f535ebd397d73b23042b522e1aa8cd2b8178e31c..fa250f3a4991c4b56798a9f775130324f9b68088 100644 (file)
@@ -18,7 +18,10 @@ use Memoize;
 
 my %translations;
 our %filtered;
-memoize("istranslatable");
+my $origbestlink=\&bestlink;
+## 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");
 
@@ -28,10 +31,10 @@ sub import {
        hook(type => "needsbuild", id => "po", call => \&needsbuild);
        hook(type => "targetpage", id => "po", call => \&targetpage);
        hook(type => "tweakurlpath", id => "po", call => \&tweakurlpath);
-       hook(type => "tweakbestlink", id => "po", call => \&tweakbestlink);
        hook(type => "filter", id => "po", call => \&filter);
        hook(type => "htmlize", id => "po", call => \&htmlize);
        hook(type => "pagetemplate", id => "po", call => \&pagetemplate);
+       inject(name => "IkiWiki::bestlink", call => \&mybestlink);
 }
 
 sub getsetup () { #{{{
@@ -244,17 +247,22 @@ sub tweakurlpath ($) { #{{{
        return $url;
 } #}}}
 
-sub tweakbestlink ($$) { #{{{
-       my %params = @_;
-       my $page=$params{page};
-       my $link=$params{link};
-       if ($config{po_link_to} eq "current"
-           && istranslatable($link)
-           && istranslation($page)) {
-               my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
-               return $link . "." . $curlang;
+sub mybestlink ($$) { #{{{
+       my $page=shift;
+       my $link=shift;
+       my $res=$origbestlink->($page, $link);
+       if (length $res) {
+               if ($config{po_link_to} eq "current"
+                   && istranslatable($res)
+                   && istranslation($page)) {
+                       my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+                       return $res . "." . $curlang;
+               }
+               else {
+                       return $res;
+               }
        }
-       return $link;
+       return "";
 } #}}}
 
 # We use filter to convert PO to the master page's type,