ikiwiki/IkiWiki/Plugin/po.pm

72 lines
1.6 KiB
Perl
Raw Normal View History

#!/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