#!/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 = "
" . $content . "
"; } return $content; } #}}} # We need this to register the .po file extension sub htmlize (@) { #{{{ my %params=@_; return $params{content}; } #}}} 1