summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/po.pm38
-rw-r--r--doc/plugins/po.mdwn7
2 files changed, 39 insertions, 6 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 643621a91..acc133042 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -17,6 +17,7 @@ use File::Copy;
use File::Spec;
use File::Temp;
use Memoize;
+use UNIVERSAL;
my %translations;
my @origneedsbuild;
@@ -36,6 +37,7 @@ 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 => "scan", id => "po", call => \&scan, last =>1);
hook(type => "filter", id => "po", call => \&filter);
hook(type => "htmlize", id => "po", call => \&htmlize);
hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
@@ -218,6 +220,42 @@ sub needsbuild () { #{{{
}
} #}}}
+sub scan (@) { #{{{
+ my %params=@_;
+ my $page=$params{page};
+ my $content=$params{content};
+
+ return unless UNIVERSAL::can("IkiWiki::Plugin::link", "import");
+ return unless $config{'po_link_to'} eq 'negotiated';
+
+ if (istranslation($page)) {
+ my ($masterpage, $curlang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+ foreach my $destpage (@{$links{$page}}) {
+ if (istranslatable($destpage)) {
+ # replace one occurence of $destpage in $links{$page}
+ # (we only want to replace the one that was added by
+ # IkiWiki::Plugin::link::scan, other occurences may be
+ # there for other reasons)
+ for (my $i=0; $i<@{$links{$page}}; $i++) {
+ if (@{$links{$page}}[$i] eq $destpage) {
+ @{$links{$page}}[$i] = $destpage . '.' . $curlang;
+ last;
+ }
+ }
+ }
+ }
+ }
+ elsif (! istranslatable($page) && ! istranslation($page)) {
+ foreach my $destpage (@{$links{$page}}) {
+ if (istranslatable($destpage)) {
+ map {
+ push @{$links{$page}}, $destpage . '.' . $_;
+ } (keys %{$config{po_slave_languages}});
+ }
+ }
+ }
+} #}}}
+
sub mytargetpage ($$) { #{{{
my $page=shift;
my $ext=shift;
diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn
index 4f6212ff4..a010dbb7e 100644
--- a/doc/plugins/po.mdwn
+++ b/doc/plugins/po.mdwn
@@ -249,12 +249,7 @@ be fixed by something like [[todo/using_meta_titles_for_parentlinks]].
#### `po_link_to = negotiated`
-If a given translatable `sourcepage.mdwn` links to \[[destpage]],
-`sourcepage.LL.po` also link to \[[destpage]], and the latter has the
-master page *and* all its translations listed in the backlinks. On the
-other hand, translations of `destpage` get none of these backlinks.
-What would be nice is:
-
+This is now implemented:
- if a translatable page links to another translatable page: the
master destpage gets a backlink to the master sourcepage, and every
slave destpage gets a backlink to the corresponding slave sourcepage