]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/po.pm
whitespace fixes and a typo
[ikiwiki.git] / IkiWiki / Plugin / po.pm
index 29945da335a3cfc653591347ec8ca9bea869ba10..ad3fe9da86566acf9f067e5a116192fc7ce34770 100644 (file)
@@ -28,7 +28,7 @@ use UNIVERSAL;
 my %translations;
 my @origneedsbuild;
 my %origsubs;
-my @slavelanguages; # orderer as in config po_slave_languages
+my @slavelanguages; # language codes ordered as in config po_slave_languages
 
 memoize("istranslatable");
 memoize("_istranslation");
@@ -106,9 +106,9 @@ sub getsetup () {
                po_slave_languages => {
                        type => "string",
                        example => [
-                               'fr' => 'Français',
-                               'es' => 'Español',
-                               'de' => 'Deutsch'
+                               'fr|Français',
+                               'es|Español',
+                               'de|Deutsch'
                        ],
                        description => "slave languages (PO files)",
                        safe => 1,
@@ -141,17 +141,23 @@ sub checkconfig () {
 
        if (ref $config{po_slave_languages} eq 'ARRAY') {
                my %slaves;
-               for (my $i=0; $i<@{$config{po_slave_languages}}; $i = $i + 2) {
-                       $slaves{$config{po_slave_languages}->[$i]} = $config{po_slave_languages}->[$i + 1];
-                       push @slavelanguages, $config{po_slave_languages}->[$i];
-                }
+               foreach my $pair (@{$config{po_slave_languages}}) {
+                       my ($code, $name) = ( $pair =~ /^([a-z]{2})\|(.+)$/ );
+                       if (!defined $code || !defined $name) {
+                               error(sprintf(gettext("%s has invalid syntax: must use CODE|NAME"),
+                                             $pair));
+                       }
+                       $slaves{$code} = $name;
+                       push @slavelanguages, $code;
+
+               }
                $config{po_slave_languages} = \%slaves;
-        }
+       }
        elsif (ref $config{po_slave_languages} eq 'HASH') {
                @slavelanguages = sort {
                        $config{po_slave_languages}->{$a} cmp $config{po_slave_languages}->{$b};
                } keys %{$config{po_slave_languages}};
-        }
+       }
 
        delete $config{po_slave_languages}{$config{po_master_language}{code}};;
 
@@ -259,12 +265,6 @@ sub filter (@) {
        my $page = $params{page};
        my $destpage = $params{destpage};
        my $content = $params{content};
-       my $fullpage = $params{fullpage};
-
-       unless ($fullpage) {
-               return $content;
-       }
-
        if (istranslation($page) && ! alreadyfiltered($page, $destpage)) {
                $content = po_to_markup($page, $content);
                setalreadyfiltered($page, $destpage);
@@ -558,7 +558,7 @@ sub formbuilder (@) {
        # This cannot be done in the formbuilder_setup hook as the list of types is
        # computed later.
        if ($form->field("do") eq "create") {
-               foreach my $field ($form->field) {
+               foreach my $field ($form->field) {
                        next unless "$field" eq "type";
                        next unless $field->type eq 'select';
                        my $orig_value = $field->value;
@@ -706,7 +706,7 @@ sub myisselflink ($$) {
        return 1 if $origsubs{'isselflink'}->($page, $link);
        if (istranslation($page)) {
                return $origsubs{'isselflink'}->(masterpage($page), $link);
-        }
+       }
        return;
 }
 
@@ -852,7 +852,7 @@ sub otherlanguages_codes ($) {
        return \@ret unless istranslation($page) || istranslatable($page);
        my $curlang=lang($page);
        foreach my $lang
-               ($config{po_master_language}{code}, @slavelanguages) {
+               ($config{po_master_language}{code}, keys %{$config{po_slave_languages}}) {
                next if $lang eq $curlang;
                push @ret, $lang;
        }
@@ -862,7 +862,7 @@ sub otherlanguages_codes ($) {
 sub otherlanguages_pages ($) {
        my $page=shift;
 
-        my %ret;
+       my %ret;
        map {
                $ret{$_} = otherlanguage_page($page, $_)
        } @{otherlanguages_codes($page)};
@@ -1194,7 +1194,7 @@ sub isvalidpo ($) {
        unlink $infile;
 
        if ($res) {
-           return IkiWiki::SuccessReason->new("valid gettext data");
+               return IkiWiki::SuccessReason->new("valid gettext data");
        }
        return IkiWiki::FailReason->new(gettext("invalid gettext data, go back ".
                                        "to previous page to continue edit"));
@@ -1206,7 +1206,7 @@ sub po4a_type ($) {
        my $pagetype = pagetype($file);
        if ($pagetype eq 'html') {
                return 'xhtml';
-        }
+       }
        return 'text';
 }
 
@@ -1220,13 +1220,13 @@ sub po4a_options($) {
                # how to disable options is not consistent across po4a modules
                $options{includessi} = '';
                $options{includeexternal} = 0;
-        }
+       }
        elsif ($pagetype eq 'mdwn') {
                $options{markdown} = 1;
-        }
-        else {
+       }
+       else {
                $options{markdown} = 0;
-        }
+       }
 
        return %options;
 }
@@ -1293,16 +1293,29 @@ sub match_currentlang ($$;@) {
 
 sub match_needstranslation ($$;@) {
        my $page=shift;
+       my $wanted=shift;
+
+       if (defined $wanted && $wanted ne "") {
+               if ($wanted !~ /^\d+$/) {
+                       return IkiWiki::FailReason->new("parameter is not an integer");
+               }
+               elsif ($wanted > 100) {
+                       return IkiWiki::FailReason->new("parameter is greater than 100");
+               }
+       }
+       else {
+               $wanted=100;
+       }
 
        my $percenttranslated=IkiWiki::Plugin::po::percenttranslated($page);
        if ($percenttranslated eq 'N/A') {
-               return IkiWiki::FailReason->new("file is not a translation page");
+               return IkiWiki::FailReason->new("file is not a translatable page");
        }
-       elsif ($percenttranslated < 100) {
+       elsif ($percenttranslated < $wanted) {
                return IkiWiki::SuccessReason->new("file has $percenttranslated translated");
-        }
+       }
        else {
-               return IkiWiki::FailReason->new("file is fully translated");
+               return IkiWiki::FailReason->new("file is translated enough");
        }
 }