diff options
author | intrigeri <intrigeri@boum.org> | 2008-10-05 17:14:30 +0200 |
---|---|---|
committer | intrigeri <intrigeri@boum.org> | 2008-10-18 15:49:07 +0200 |
commit | 75fc44ce2fa43c984a1920f40d97631ace84d4f6 (patch) | |
tree | c931d30ac2f33c3b68eb5ade4262d1106937ece0 /IkiWiki/Plugin | |
parent | 50f1fd43daf98cbd296dbb51bd6519ab7e97ee9a (diff) |
po plugin: factorize most checks into a new match_istranslation PageSpec
Signed-off-by: intrigeri <intrigeri@boum.org>
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/po.pm | 55 |
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 |