summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/po.pm
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2008-10-05 04:11:02 +0200
committerintrigeri <intrigeri@boum.org>2008-10-18 15:49:07 +0200
commit50f1fd43daf98cbd296dbb51bd6519ab7e97ee9a (patch)
tree7608437faa1cf529c2e08987b56d4ee852d104a2 /IkiWiki/Plugin/po.pm
parentfc299df955879bf958aa78338ba64d56a7df17a9 (diff)
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>
Diffstat (limited to 'IkiWiki/Plugin/po.pm')
-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