po: implemented linking/backlinks specification for po_link_to=negotiated
Signed-off-by: intrigeri <intrigeri@boum.org>master
parent
14415a2b67
commit
34ab884242
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue