Revert "po_slave_languages can now be a hash, if order matters."
authorJoey Hess <joey@kitenet.net>
Mon, 19 Jul 2010 00:03:04 +0000 (20:03 -0400)
committerJoey Hess <joey@kitenet.net>
Mon, 19 Jul 2010 00:04:39 +0000 (20:04 -0400)
This reverts commit 4cf185e781a5f94373b30ec9a0e10dfb626b6d86.

That commit broke t/po.t (probably the test case only is testing too
close the the old implementation and needs correcting).

Also, we have not decided how to want to represent it yet, so I'm not
ready for this change.

Conflicts:

IkiWiki/Plugin/po.pm
doc/plugins/po.mdwn

IkiWiki/Plugin/po.pm
doc/plugins/po.mdwn

index dc73c73c3159e519fea03de11f5bb20b6df5eb57..2244126761a8323a7269786724558ffe56c350b4 100644 (file)
@@ -28,7 +28,6 @@ use UNIVERSAL;
 my %translations;
 my @origneedsbuild;
 my %origsubs;
-my @slavelanguages; # ordered as in config po_slave_languages
 
 memoize("istranslatable");
 memoize("_istranslation");
@@ -105,11 +104,11 @@ sub getsetup () {
                },
                po_slave_languages => {
                        type => "string",
-                       example => [
+                       example => {
                                'fr' => 'Français',
                                'es' => 'Español',
                                'de' => 'Deutsch'
-                       ],
+                       },
                        description => "slave languages (PO files)",
                        safe => 1,
                        rebuild => 1,
@@ -138,24 +137,6 @@ sub checkconfig () {
                                      $field, 'po'));
                }
        }
-
-       if (ref $config{po_slave_languages} eq 'ARRAY') {
-               my %slaves;
-               if (@{$config{po_slave_languages}} % 2 != 0) {
-                       error(sprintf(gettext("The %s field is invalid."), 'po_slave_languages'));
-                }
-               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];
-                }
-               $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}};;
 
        map {
@@ -216,7 +197,7 @@ sub needsbuild () {
 
        # make existing translations depend on the corresponding master page
        foreach my $master (keys %translations) {
-               map add_depends($_, $master), values %{otherlanguages_pages($master)};
+               map add_depends($_, $master), values %{otherlanguages($master)};
        }
 }
 
@@ -248,7 +229,7 @@ sub scan (@) {
                                # make sure any destpage's translations has
                                # $page in its backlinks
                                push @{$links{$page}},
-                                       values %{otherlanguages_pages($destpage)};
+                                       values %{otherlanguages($destpage)};
                        }
                }
        }
@@ -306,7 +287,7 @@ sub pagetemplate (@) {
        }
        if ($template->query(name => "otherlanguages")) {
                $template->param(otherlanguages => [otherlanguagesloop($page)]);
-               map add_depends($page, $_), (values %{otherlanguages_pages($page)});
+               map add_depends($page, $_), (values %{otherlanguages($page)});
        }
        if ($config{discussion} && istranslation($page)) {
                if ($page !~ /.*\/\Q$config{discussionpage}\E$/i &&
@@ -359,12 +340,12 @@ sub renamepages (@) {
        return () unless istranslatable($torename{src});
 
        my @ret;
-       my %otherpages=%{otherlanguages_pages($torename{src})};
+       my %otherpages=%{otherlanguages($torename{src})};
        while (my ($lang, $otherpage) = each %otherpages) {
                push @ret, {
                        src => $otherpage,
                        srcfile => $pagesources{$otherpage},
-                       dest => otherlanguage_page($torename{dest}, $lang),
+                       dest => otherlanguage($torename{dest}, $lang),
                        destfile => $torename{dest}.".".$lang.".po",
                        required => 0,
                };
@@ -831,7 +812,7 @@ sub islanguagecode ($) {
        return $code =~ /^[a-z]{2}$/;
 }
 
-sub otherlanguage_page ($$) {
+sub otherlanguage ($$) {
        my $page=shift;
        my $code=shift;
 
@@ -839,31 +820,17 @@ sub otherlanguage_page ($$) {
        return masterpage($page) . '.' . $code;
 }
 
-# Returns the list of other languages codes: the master language comes first,
-# then the codes are ordered the same way as in po_slave_languages, if it is
-# an array, or in the language name lexical order, if it is a hash.
-sub otherlanguages_codes ($) {
+sub otherlanguages ($) {
        my $page=shift;
 
-       my @ret;
-       return \@ret unless istranslation($page) || istranslatable($page);
+       my %ret;
+       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;
+               $ret{$lang}=otherlanguage($page, $lang);
        }
-       return \@ret;
-}
-
-sub otherlanguages_pages ($) {
-       my $page=shift;
-
-        my %ret;
-       map {
-               $ret{$_} = otherlanguage_page($page, $_)
-       } @{otherlanguages_codes($page)};
-
        return \%ret;
 }
 
@@ -1014,25 +981,30 @@ sub otherlanguagesloop ($) {
        my $page=shift;
 
        my @ret;
-       if (istranslation($page)) {
-               push @ret, {
-                       url => urlto_with_orig_beautiful_urlpath(masterpage($page), $page),
-                       code => $config{po_master_language}{code},
-                       language => $config{po_master_language}{name},
-                       master => 1,
-               };
-       }
-       foreach my $lang (@{otherlanguages_codes($page)}) {
-               next if $lang eq $config{po_master_language}{code};
-               my $otherpage = otherlanguage_page($page, $lang);
-               push @ret, {
-                       url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
-                       code => $lang,
-                       language => languagename($lang),
-                       percent => percenttranslated($otherpage),
+       my %otherpages=%{otherlanguages($page)};
+       while (my ($lang, $otherpage) = each %otherpages) {
+               if (istranslation($page) && masterpage($page) eq $otherpage) {
+                       push @ret, {
+                               url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
+                               code => $lang,
+                               language => languagename($lang),
+                               master => 1,
+                       };
+               }
+               elsif (istranslation($otherpage)) {
+                       push @ret, {
+                               url => urlto_with_orig_beautiful_urlpath($otherpage, $page),
+                               code => $lang,
+                               language => languagename($lang),
+                               percent => percenttranslated($otherpage),
+                       }
                }
        }
-       return @ret;
+       return sort {
+               return -1 if $a->{code} eq $config{po_master_language}{code};
+               return 1 if $b->{code} eq $config{po_master_language}{code};
+               return $a->{language} cmp $b->{language};
+       } @ret;
 }
 
 sub homepageurl (;$) {
index d6f82912c63a27e0a2ecd7b04703206ea2942ee5..53327c1dae94ef5896119cc874133a9a3c1a9b4e 100644 (file)
@@ -54,10 +54,10 @@ Supported languages
 `po_slave_languages` is used to set the list of supported "slave"
 languages, such as:
 
-        po_slave_languages => [ 'fr' => 'Français',
+        po_slave_languages => { 'fr' => 'Français',
                                 'es' => 'Español',
                                 'de' => 'Deutsch',
-        ]
+        }
 
 Decide which pages are translatable
 -----------------------------------