summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/po.pm71
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