summaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Plugin/po.pm55
1 files changed, 44 insertions, 11 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index 58e184b9b..fb4741cd4 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -36,17 +36,16 @@ sub targetpage (@) { #{{{
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;
- }
+ if (! IkiWiki::PageSpec::match_istranslation($page, $page)) {
+ return;
+ }
+
+ my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+ if (! $config{usedirs} || $page eq 'index') {
+ return $masterpage.".".$ext.".".$lang;
+ }
+ else {
+ return $masterpage."/index.".$ext.".".$lang;
}
} #}}}
@@ -68,4 +67,38 @@ sub htmlize (@) { #{{{
return $params{content};
} #}}}
+package IkiWiki::PageSpec;
+
+sub match_istranslation ($;@) { #{{{
+ my $page=shift;
+ my $wanted=shift;
+
+ my %params=@_;
+ my $file=exists $params{file} ? $params{file} : $IkiWiki::pagesources{$page};
+ if (! defined $file) {
+ return IkiWiki::FailReason->new("no file specified");
+ }
+
+ if (! IkiWiki::pagetype($page) eq 'po') {
+ return IkiWiki::FailReason->new("is not a PO file");
+ }
+
+ my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/);
+ if (! defined $masterpage || ! defined $lang
+ || ! (length($masterpage) > 0) || ! (length($lang) > 0)) {
+ return IkiWiki::FailReason->new("is not named like a translation file");
+ }
+
+ if (! defined $IkiWiki::pagesources{$masterpage}) {
+ return IkiWiki::FailReason->new("the master page does not exist");
+ }
+
+ if (! defined $IkiWiki::config{po_supported_languages}{$lang}) {
+ return IkiWiki::FailReason->new("language $lang is not supported");
+ }
+
+ return IkiWiki::SuccessReason->new("page $page is a translation");
+
+} #}}}
+
1