po: implemented linking/backlinks specification for po_link_to=negotiated

Signed-off-by: intrigeri <intrigeri@boum.org>
master
intrigeri 2008-11-07 21:27:00 +01:00
parent 14415a2b67
commit 34ab884242
2 changed files with 39 additions and 6 deletions

View File

@ -17,6 +17,7 @@ use File::Copy;
use File::Spec; use File::Spec;
use File::Temp; use File::Temp;
use Memoize; use Memoize;
use UNIVERSAL;
my %translations; my %translations;
my @origneedsbuild; my @origneedsbuild;
@ -36,6 +37,7 @@ sub import { #{{{
hook(type => "getsetup", id => "po", call => \&getsetup); hook(type => "getsetup", id => "po", call => \&getsetup);
hook(type => "checkconfig", id => "po", call => \&checkconfig); hook(type => "checkconfig", id => "po", call => \&checkconfig);
hook(type => "needsbuild", id => "po", call => \&needsbuild); 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 => "filter", id => "po", call => \&filter);
hook(type => "htmlize", id => "po", call => \&htmlize); hook(type => "htmlize", id => "po", call => \&htmlize);
hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1); 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 ($$) { #{{{ sub mytargetpage ($$) { #{{{
my $page=shift; my $page=shift;
my $ext=shift; my $ext=shift;

View File

@ -249,12 +249,7 @@ be fixed by something like [[todo/using_meta_titles_for_parentlinks]].
#### `po_link_to = negotiated` #### `po_link_to = negotiated`
If a given translatable `sourcepage.mdwn` links to \[[destpage]], This is now implemented:
`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:
- if a translatable page links to another translatable page: the - if a translatable page links to another translatable page: the
master destpage gets a backlink to the master sourcepage, and every master destpage gets a backlink to the master sourcepage, and every
slave destpage gets a backlink to the corresponding slave sourcepage slave destpage gets a backlink to the corresponding slave sourcepage