diff options
author | intrigeri <intrigeri@boum.org> | 2008-11-02 20:15:21 +0100 |
---|---|---|
committer | intrigeri <intrigeri@boum.org> | 2008-11-02 20:15:21 +0100 |
commit | 7b28deb171455a207e536b8abebbca67242a4588 (patch) | |
tree | 09d6933412129bbf110abd253d056bf374f400bd /IkiWiki/Plugin/po.pm | |
parent | b6a4da775945856b07fdc8f1330a86f67e329ac9 (diff) | |
parent | 2ebc0bb82dd907b6c0eaa39441378cb3bd8152d5 (diff) | |
download | ikiwiki-7b28deb171455a207e536b8abebbca67242a4588.tar ikiwiki-7b28deb171455a207e536b8abebbca67242a4588.tar.gz |
Merge branch 'prv/po' into pub/po
Diffstat (limited to 'IkiWiki/Plugin/po.pm')
-rw-r--r-- | IkiWiki/Plugin/po.pm | 76 |
1 files changed, 50 insertions, 26 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index f535ebd39..0902322e3 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -18,20 +18,29 @@ use Memoize; my %translations; our %filtered; -memoize("istranslatable"); + +## 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"); +# backup references to subs that will be overriden +my %origsubs; +$origsubs{'bestlink'}=\&IkiWiki::bestlink; +$origsubs{'beautify_urlpath'}=\&IkiWiki::beautify_urlpath; +$origsubs{'targetpage'}=\&IkiWiki::targetpage; + sub import { hook(type => "getsetup", id => "po", call => \&getsetup); hook(type => "checkconfig", id => "po", call => \&checkconfig); 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); + inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath); + inject(name => "IkiWiki::targetpage", call => \&mytargetpage); } sub getsetup () { #{{{ @@ -210,14 +219,13 @@ sub needsbuild () { #{{{ } } #}}} -sub targetpage (@) { #{{{ - my %params = @_; - my $page=$params{page}; - my $ext=$params{ext}; +sub mytargetpage ($$) { #{{{ + my $page=shift; + my $ext=shift; if (istranslation($page)) { my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/); - if (! $config{usedirs} || $page eq 'index') { + if (! $config{usedirs} || $masterpage eq 'index') { return $masterpage . "." . $lang . "." . $ext; } else { @@ -232,29 +240,45 @@ sub targetpage (@) { #{{{ return $page . "/index." . $config{po_master_language}{code} . "." . $ext; } } - return; + return $origsubs{'targetpage'}->($page, $ext); } #}}} -sub tweakurlpath ($) { #{{{ - my %params = @_; - my $url=$params{url}; +sub mybeautify_urlpath ($) { #{{{ + my $url=shift; + my $res=$origsubs{'beautify_urlpath'}->($url); if ($config{po_link_to} eq "negotiated") { - $url =~ s!/index.$config{po_master_language}{code}.$config{htmlext}$!/!; + $res =~ s!/index.$config{po_master_language}{code}.$config{htmlext}$!/!; } - return $url; + return $res; } #}}} -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 urlto_with_orig_beautiful_urlpath($$) { #{{{ + my $to=shift; + my $from=shift; + + inject(name => "IkiWiki::beautify_urlpath", call => $origsubs{'beautify_urlpath'}); + my $res=urlto($to, $from); + inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath); + + return $res; +} #}}} + +sub mybestlink ($$) { #{{{ + my $page=shift; + my $link=shift; + my $res=$origsubs{'bestlink'}->($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, @@ -346,7 +370,7 @@ sub otherlanguages ($) { #{{{ elsif (istranslation($page)) { my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/); push @ret, { - url => urlto($masterpage, $page), + url => urlto_with_orig_beautiful_urlpath($masterpage, $page), code => $config{po_master_language}{code}, language => $config{po_master_language}{name}, master => 1, |