po plugin: initial work
authorintrigeri <intrigeri@boum.org>
Sun, 5 Oct 2008 02:11:02 +0000 (04:11 +0200)
committerintrigeri <intrigeri@boum.org>
Sat, 18 Oct 2008 13:49:07 +0000 (15:49 +0200)
- .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>
IkiWiki/Plugin/po.pm [new file with mode: 0644]

diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
new file mode 100644 (file)
index 0000000..58e184b
--- /dev/null
@@ -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