diff options
author | intrigeri <intrigeri@boum.org> | 2008-10-05 04:11:02 +0200 |
---|---|---|
committer | intrigeri <intrigeri@boum.org> | 2008-10-18 15:49:07 +0200 |
commit | 50f1fd43daf98cbd296dbb51bd6519ab7e97ee9a (patch) | |
tree | 7608437faa1cf529c2e08987b56d4ee852d104a2 | |
parent | fc299df955879bf958aa78338ba64d56a7df17a9 (diff) | |
download | ikiwiki-50f1fd43daf98cbd296dbb51bd6519ab7e97ee9a.tar ikiwiki-50f1fd43daf98cbd296dbb51bd6519ab7e97ee9a.tar.gz |
po plugin: initial work
- .po is a new supported wiki page type
- PO files are rendered verbatim into HTML
- override targetpage to ease Content Negotiation
Signed-off-by: intrigeri <intrigeri@boum.org>
-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 |