diff options
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/po.pm | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm new file mode 100644 index 000000000..58e184b9b --- /dev/null +++ b/IkiWiki/Plugin/po.pm @@ -0,0 +1,71 @@ +#!/usr/bin/perl +# .po as a wiki page type +package IkiWiki::Plugin::po; + +use warnings; +use strict; +use IkiWiki 2.00; +use Encode; + +sub import { + hook(type => "getsetup", id => "po", call => \&getsetup); + hook(type => "targetpage", id => "po", call => \&targetpage); + hook(type => "filter", id => "po", call => \&filter); + hook(type => "htmlize", id => "po", call => \&htmlize); +} + +sub getsetup () { #{{{ + return + plugin => { + safe => 0, + rebuild => 1, # format plugin + }, + po_supported_languages => { + type => "string", + example => { 'fr' => { 'name' => 'Français' }, + 'es' => { 'name' => 'Castellano' }, + 'de' => { 'name' => 'Deutsch' }, + }, + safe => 1, + rebuild => 1, + }, +} #}}} + +sub targetpage (@) { #{{{ + my %params = @_; + my $page=$params{page}; + my $ext=$params{ext}; + + my ($origpage, $lang) = ($page =~ /(.*)[.]([a-z]{2}$)/); + + if (defined $origpage && defined $lang + && (length($origpage) > 0) && (length($lang) > 0) + && defined $config{po_supported_languages}{$lang}) { + if (! $config{usedirs} || $page eq 'index') { + return $origpage.".".$ext.".".$lang; + } + else { + return $origpage."/index.".$ext.".".$lang; + } + } +} #}}} + +# We use filter to convert PO to HTML, since the other plugins might do harm to it. +sub filter (@) { #{{{ + my %params = @_; + my $content = decode_utf8(encode_utf8($params{content})); + + if (defined $pagesources{$params{page}} && $pagesources{$params{page}} =~ /\.po$/) { + $content = "<pre>" . $content . "</pre>"; + } + + return $content; +} #}}} + +# We need this to register the .po file extension +sub htmlize (@) { #{{{ + my %params=@_; + return $params{content}; +} #}}} + +1 |