X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/0d1593a201f8492b6aea74e74d6b163c1ec70c3f..776be85a229dd951e99de519b38ba22dace260b8:/IkiWiki/Plugin/po.pm diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index a8d9b9cd9..1212181ca 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -262,10 +262,14 @@ sub htmlize (@) { #{{{ my $page = $params{page}; my $content = $params{content}; - my $masterfile = srcfile($pagesources{masterpage($page)}); + + # ignore PO files this plugin did not create + return $content unless istranslation($page); # force content to be htmlize'd as if it was the same type as the master page - return IkiWiki::htmlize($page, $page, pagetype($masterfile), $content); + return IkiWiki::htmlize($page, $page, + pagetype(srcfile($pagesources{masterpage($page)})), + $content); } #}}} sub pagetemplate (@) { #{{{ @@ -385,14 +389,14 @@ sub editcontent () { #{{{ # | Injected functions # `---- -# Implement po_link_to=current +# Implement po_link_to 'current' and 'negotiated' settings. sub mybestlink ($$) { #{{{ my $page=shift; my $link=shift; - my $res=$origsubs{'bestlink'}->($page, $link); + my $res=$origsubs{'bestlink'}->(masterpage($page), $link); if (length $res - && $config{po_link_to} eq "current" + && ($config{po_link_to} eq "current" || $config{po_link_to} eq "negotiated") && istranslatable($res) && istranslation($page)) { return $res . "." . lang($page); @@ -406,6 +410,10 @@ sub mybeautify_urlpath ($) { #{{{ my $res=$origsubs{'beautify_urlpath'}->($url); if ($config{po_link_to} eq "negotiated") { $res =~ s!/\Qindex.$config{po_master_language}{code}.$config{htmlext}\E$!/!; + $res =~ s!/\Qindex.$config{htmlext}\E$!/!; + map { + $res =~ s!/\Qindex.$_.$config{htmlext}\E$!/!; + } (keys %{$config{po_slave_languages}}); } return $res; } #}}} @@ -482,9 +490,18 @@ sub myurlto ($$;$) { #{{{ # | Helper functions # `---- +sub maybe_add_leading_slash ($;$) { #{{{ + my $str=shift; + my $add=shift; + $add=1 unless defined $add; + return '/' . $str if $add; + return $str; +} #}}} + sub istranslatable ($) { #{{{ my $page=shift; + $page=~s#^/##; my $file=$pagesources{$page}; return 0 unless defined $file; @@ -496,8 +513,8 @@ sub istranslatable ($) { #{{{ sub _istranslation ($) { #{{{ my $page=shift; + my $hasleadingslash = ($page=~s#^/##); my $file=$pagesources{$page}; - return 0 unless (defined $file && defined pagetype($file) && pagetype($file) eq 'po'); @@ -509,15 +526,18 @@ sub _istranslation ($) { #{{{ && defined $pagesources{$masterpage} && defined $config{po_slave_languages}{$lang}); - return ($masterpage, $lang) if istranslatable($masterpage); + return (maybe_add_leading_slash($masterpage, $hasleadingslash), $lang) + if istranslatable($masterpage); } #}}} sub istranslation ($) { #{{{ my $page=shift; if (1 < (my ($masterpage, $lang) = _istranslation($page))) { + my $hasleadingslash = ($masterpage=~s#^/##); $translations{$masterpage}{$lang}=$page unless exists $translations{$masterpage}{$lang}; - return ($masterpage, $lang); + return (maybe_add_leading_slash($masterpage, $hasleadingslash), $lang) + if istranslatable($masterpage); } return; } #}}} @@ -551,7 +571,7 @@ sub otherlanguages($) { #{{{ my %ret; if (istranslatable($page)) { - %ret = %{$translations{$page}}; + %ret = %{$translations{$page}} if defined $translations{$page}; } elsif (istranslation($page)) { my $masterpage = masterpage($page); @@ -698,7 +718,7 @@ sub otherlanguagesloop ($) { #{{{ } else { push @ret, { - url => urlto($otherpage, $page), + url => urlto_with_orig_beautiful_urlpath($otherpage, $page), code => $lang, language => languagename($lang), percent => percenttranslated($otherpage),