diff options
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/editpage.pm | 2 | ||||
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 4 | ||||
-rw-r--r-- | IkiWiki/Plugin/po.pm | 114 | ||||
-rw-r--r-- | IkiWiki/Plugin/sidebar.pm | 2 | ||||
-rw-r--r-- | IkiWiki/Render.pm | 4 |
5 files changed, 85 insertions, 41 deletions
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm index 1a04a72b5..706630203 100644 --- a/IkiWiki/Plugin/editpage.pm +++ b/IkiWiki/Plugin/editpage.pm @@ -187,7 +187,7 @@ sub cgi_editpage ($$) { my $preview=htmlize($page, $page, $type, linkify($page, $page, preprocess($page, $page, - filter($page, $page, $content), 0, 1))); + filter($page, $page, $content, 'fullpage'), 0, 1))); run_hooks(format => sub { $preview=shift->( page => $page, diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 715a3d652..a04dd6630 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -403,7 +403,7 @@ sub preprocess_inline (@) { linkify($page, $params{destpage}, preprocess($page, $params{destpage}, filter($page, $params{destpage}, - readfile(srcfile($file))))); + readfile(srcfile($file)), 'fullpage'))); } else { $ret.="\n". @@ -474,7 +474,7 @@ sub get_inline_content ($$) { linkify($page, $destpage, preprocess($page, $destpage, filter($page, $destpage, - readfile(srcfile($file)))))); + readfile(srcfile($file)), 'fullpage')))); $nested--; if (isinternal($page)) { # make inlined text of internal pages searchable diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 4e6eff94f..cadc13ba1 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -28,6 +28,7 @@ use UNIVERSAL; my %translations; my @origneedsbuild; my %origsubs; +my @slavelanguages; # orderer as in config po_slave_languages memoize("istranslatable"); memoize("_istranslation"); @@ -64,6 +65,8 @@ sub import { inject(name => "IkiWiki::cgiurl", call => \&mycgiurl); $origsubs{'rootpage'}=\&IkiWiki::rootpage; inject(name => "IkiWiki::rootpage", call => \&myrootpage); + $origsubs{'isselflink'}=\&IkiWiki::isselflink; + inject(name => "IkiWiki::isselflink", call => \&myisselflink); } } @@ -102,11 +105,11 @@ sub getsetup () { }, po_slave_languages => { type => "string", - example => { + example => [ 'fr' => 'Français', 'es' => 'Español', 'de' => 'Deutsch' - }, + ], description => "slave languages (PO files)", safe => 1, rebuild => 1, @@ -135,6 +138,21 @@ sub checkconfig () { $field, 'po')); } } + + if (ref $config{po_slave_languages} eq 'ARRAY') { + my %slaves; + for (my $i=0; $i<@{$config{po_slave_languages}}; $i = $i + 2) { + $slaves{$config{po_slave_languages}->[$i]} = $config{po_slave_languages}->[$i + 1]; + push @slavelanguages, $config{po_slave_languages}->[$i]; + } + $config{po_slave_languages} = \%slaves; + } + elsif (ref $config{po_slave_languages} eq 'HASH') { + @slavelanguages = sort { + $config{po_slave_languages}->{$a} cmp $config{po_slave_languages}->{$b}; + } keys %{$config{po_slave_languages}}; + } + delete $config{po_slave_languages}{$config{po_master_language}{code}};; map { @@ -195,7 +213,7 @@ sub needsbuild () { # make existing translations depend on the corresponding master page foreach my $master (keys %translations) { - map add_depends($_, $master), values %{otherlanguages($master)}; + map add_depends($_, $master), values %{otherlanguages_pages($master)}; } } @@ -227,7 +245,7 @@ sub scan (@) { # make sure any destpage's translations has # $page in its backlinks push @{$links{$page}}, - values %{otherlanguages($destpage)}; + values %{otherlanguages_pages($destpage)}; } } } @@ -241,6 +259,12 @@ sub filter (@) { my $page = $params{page}; my $destpage = $params{destpage}; my $content = $params{content}; + my $fullpage = $params{fullpage}; + + unless ($fullpage) { + return $content; + } + if (istranslation($page) && ! alreadyfiltered($page, $destpage)) { $content = po_to_markup($page, $content); setalreadyfiltered($page, $destpage); @@ -285,7 +309,7 @@ sub pagetemplate (@) { } if ($template->query(name => "otherlanguages")) { $template->param(otherlanguages => [otherlanguagesloop($page)]); - map add_depends($page, $_), (values %{otherlanguages($page)}); + map add_depends($page, $_), (values %{otherlanguages_pages($page)}); } if ($config{discussion} && istranslation($page)) { if ($page !~ /.*\/\Q$config{discussionpage}\E$/i && @@ -338,12 +362,12 @@ sub renamepages (@) { return () unless istranslatable($torename{src}); my @ret; - my %otherpages=%{otherlanguages($torename{src})}; + my %otherpages=%{otherlanguages_pages($torename{src})}; while (my ($lang, $otherpage) = each %otherpages) { push @ret, { src => $otherpage, srcfile => $pagesources{$otherpage}, - dest => otherlanguage($torename{dest}, $lang), + dest => otherlanguage_page($torename{dest}, $lang), destfile => $torename{dest}.".".$lang.".po", required => 0, }; @@ -675,6 +699,17 @@ sub myrootpage (@) { return $rootpage; } +sub myisselflink ($$) { + my $page=shift; + my $link=shift; + + return 1 if $origsubs{'isselflink'}->($page, $link); + if (istranslation($page)) { + return $origsubs{'isselflink'}->(masterpage($page), $link); + } + return; +} + # ,---- # | Blackboxes for private data # `---- @@ -799,7 +834,7 @@ sub islanguagecode ($) { return $code =~ /^[a-z]{2}$/; } -sub otherlanguage ($$) { +sub otherlanguage_page ($$) { my $page=shift; my $code=shift; @@ -807,17 +842,31 @@ sub otherlanguage ($$) { return masterpage($page) . '.' . $code; } -sub otherlanguages ($) { +# Returns the list of other languages codes: the master language comes first, +# then the codes are ordered the same way as in po_slave_languages, if it is +# an array, or in the language name lexical order, if it is a hash. +sub otherlanguages_codes ($) { my $page=shift; - my %ret; - return \%ret unless istranslation($page) || istranslatable($page); + my @ret; + return \@ret unless istranslation($page) || istranslatable($page); my $curlang=lang($page); foreach my $lang - ($config{po_master_language}{code}, keys %{$config{po_slave_languages}}) { + ($config{po_master_language}{code}, @slavelanguages) { next if $lang eq $curlang; - $ret{$lang}=otherlanguage($page, $lang); + push @ret, $lang; } + return \@ret; +} + +sub otherlanguages_pages ($) { + my $page=shift; + + my %ret; + map { + $ret{$_} = otherlanguage_page($page, $_) + } @{otherlanguages_codes($page)}; + return \%ret; } @@ -968,30 +1017,25 @@ sub otherlanguagesloop ($) { my $page=shift; my @ret; - my %otherpages=%{otherlanguages($page)}; - while (my ($lang, $otherpage) = each %otherpages) { - if (istranslation($page) && masterpage($page) eq $otherpage) { - push @ret, { - url => urlto_with_orig_beautiful_urlpath($otherpage, $page), - code => $lang, - language => languagename($lang), - master => 1, - }; - } - elsif (istranslation($otherpage)) { - push @ret, { - url => urlto_with_orig_beautiful_urlpath($otherpage, $page), - code => $lang, - language => languagename($lang), - percent => percenttranslated($otherpage), - } + if (istranslation($page)) { + push @ret, { + url => urlto_with_orig_beautiful_urlpath(masterpage($page), $page), + code => $config{po_master_language}{code}, + language => $config{po_master_language}{name}, + master => 1, + }; + } + foreach my $lang (@{otherlanguages_codes($page)}) { + next if $lang eq $config{po_master_language}{code}; + my $otherpage = otherlanguage_page($page, $lang); + push @ret, { + url => urlto_with_orig_beautiful_urlpath($otherpage, $page), + code => $lang, + language => languagename($lang), + percent => percenttranslated($otherpage), } } - return sort { - return -1 if $a->{code} eq $config{po_master_language}{code}; - return 1 if $b->{code} eq $config{po_master_language}{code}; - return $a->{language} cmp $b->{language}; - } @ret; + return @ret; } sub homepageurl (;$) { diff --git a/IkiWiki/Plugin/sidebar.pm b/IkiWiki/Plugin/sidebar.pm index 2d495db2c..100015cee 100644 --- a/IkiWiki/Plugin/sidebar.pm +++ b/IkiWiki/Plugin/sidebar.pm @@ -89,7 +89,7 @@ sub sidebar_content ($) { return IkiWiki::htmlize($sidebar_page, $page, $sidebar_type, IkiWiki::linkify($sidebar_page, $page, IkiWiki::preprocess($sidebar_page, $page, - IkiWiki::filter($sidebar_page, $page, $content)))); + IkiWiki::filter($sidebar_page, $page, $content, 'fullpage')))); } } diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index a653ab2da..233d093ed 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -232,7 +232,7 @@ sub render ($$) { linkify($page, $page, preprocess($page, $page, filter($page, $page, - readfile($srcfile))))); + readfile($srcfile), 'fullpage')))); my $output=htmlpage($page); writefile($output, $config{destdir}, genpage($page, $content)); @@ -837,7 +837,7 @@ sub commandline_render () { my $content=readfile($srcfile); my $page=pagename($file); $pagesources{$page}=$file; - $content=filter($page, $page, $content); + $content=filter($page, $page, $content, 'fullpage'); $content=preprocess($page, $page, $content); $content=linkify($page, $page, $content); $content=htmlize($page, $page, $type, $content); |