From bb22e8c4a6324f20eb8987e291541556d24783b1 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 20 Jul 2010 02:26:23 +0200 Subject: po: optimization No need to use "keys %{$config{po_slave_languages}}" repeatedly: the slave languages codes list is already cached in @slavelanguages. --- IkiWiki/Plugin/po.pm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 1f3ff252e..0af47aad5 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -164,7 +164,7 @@ sub checkconfig () { map { islanguagecode($_) or error(sprintf(gettext("%s is not a valid language code"), $_)); - } ($config{po_master_language}{code}, keys %{$config{po_slave_languages}}); + } ($config{po_master_language}{code}, @slavelanguages); if (! exists $config{po_translatable_pages} || ! defined $config{po_translatable_pages}) { @@ -193,7 +193,7 @@ sub checkconfig () { next if $underlay=~/^locale\//; # Underlays containing the po files for slave languages. - foreach my $ll (keys %{$config{po_slave_languages}}) { + foreach my $ll (@slavelanguages) { add_underlay("po/$ll/$underlay") if -d "$config{underlaydirbase}/po/$ll/$underlay"; } @@ -615,7 +615,7 @@ sub mybeautify_urlpath ($) { $res =~ s!/\Qindex.$config{htmlext}\E$!/!; map { $res =~ s!/\Qindex.$_.$config{htmlext}\E$!/!; - } (keys %{$config{po_slave_languages}}); + } @slavelanguages; } return $res; } @@ -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}, keys %{$config{po_slave_languages}}) { + ($config{po_master_language}{code}, @slavelanguages) { next if $lang eq $curlang; push @ret, $lang; } @@ -890,7 +890,7 @@ sub pofile ($$) { sub pofiles ($) { my $masterfile=shift; - return map pofile($masterfile, $_), (keys %{$config{po_slave_languages}}); + return map pofile($masterfile, $_), @slavelanguages; } sub refreshpot ($) { @@ -1048,7 +1048,7 @@ sub ishomepage ($) { my $page = shift; return 1 if $page eq 'index'; - map { return 1 if $page eq 'index.'.$_ } keys %{$config{po_slave_languages}}; + map { return 1 if $page eq 'index.'.$_ } @slavelanguages; return undef; } @@ -1063,7 +1063,7 @@ sub deletetranslations ($) { if (-e $absfile && ! -l $absfile && ! -d $absfile) { push @todelete, $file; } - } keys %{$config{po_slave_languages}}; + } @slavelanguages; map { if ($config{rcs}) { -- cgit v1.2.3 From 38014f0cad580c9f2468c1b72475b876209fb3e6 Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 20 Jul 2010 13:24:25 +0200 Subject: Run checkconfig after loading the po plugin, else state is not populated. The pofiles function relies on @slavelanguages to have been populated by po's checkconfig hook. --- t/po.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/t/po.t b/t/po.t index b6885a37e..495eef6b2 100755 --- a/t/po.t +++ b/t/po.t @@ -42,8 +42,8 @@ $config{po_slave_languages} = { $config{po_translatable_pages}='index or test1 or test2 or translatable'; $config{po_link_to}='negotiated'; IkiWiki::loadplugins(); -IkiWiki::checkconfig(); ok(IkiWiki::loadplugin('po'), "po plugin loaded"); +IkiWiki::checkconfig(); ### seed %pagesources and %pagecase $pagesources{'index'}='index.mdwn'; -- cgit v1.2.3 From c66fae8b16099fa8b0c3c86d38de0733b561d13f Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 20 Jul 2010 13:39:47 +0200 Subject: Added tests for po::pofiles. --- t/po.t | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/t/po.t b/t/po.t index 495eef6b2..de5ace3a0 100755 --- a/t/po.t +++ b/t/po.t @@ -17,7 +17,7 @@ BEGIN { } } -use Test::More tests => 65; +use Test::More tests => 68; BEGIN { use_ok("IkiWiki"); } @@ -91,6 +91,13 @@ ok(! IkiWiki::Plugin::po::istranslatable('test3'), "test3 is not translatable"); ok(! IkiWiki::Plugin::po::istranslation('test3'), "test3 is not a translation"); } +### pofiles + +my @pofiles = IkiWiki::Plugin::po::pofiles(srcfile("index.mdwn")); +ok( @pofiles, "pofiles is defined"); +ok( @pofiles == 2, "pofiles has correct size"); +is_deeply(\@pofiles, ["$config{srcdir}/index.es.po", "$config{srcdir}/index.fr.po"], "pofiles content is correct"); + ### links require IkiWiki::Render; -- cgit v1.2.3 From d98296d1db02febfa7cc4fbe7f304ca2a9858fef Mon Sep 17 00:00:00 2001 From: intrigeri Date: Tue, 20 Jul 2010 13:40:34 +0200 Subject: po.t: fix expected results As index.{es,fr} don't exist, po::refreshpofiles copies them from the basewiki underlay before running msgmerge. msgmerge marks as obsolete the translation strings that came from the basewiki po files, but the link plugin does not make the difference between obsolete and up-to-date links. $links{'index.fr'} and $links{'index.es'} are therefore expected to contain SandBox and ikiwiki. --- t/po.t | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/t/po.t b/t/po.t index de5ace3a0..a52611935 100755 --- a/t/po.t +++ b/t/po.t @@ -118,8 +118,8 @@ $config{po_link_to}='negotiated'; $msgprefix="links (po_link_to=negotiated)"; refresh_n_scan('index.mdwn', 'translatable.mdwn', 'nontranslatable.mdwn'); is_deeply(\@{$links{'index'}}, ['translatable', 'nontranslatable'], "$msgprefix index"); -is_deeply(\@{$links{'index.es'}}, ['translatable.es', 'nontranslatable'], "$msgprefix index.es"); -is_deeply(\@{$links{'index.fr'}}, ['translatable.fr', 'nontranslatable'], "$msgprefix index.fr"); +is_deeply(\@{$links{'index.es'}}, ['translatable.es', 'nontranslatable', 'SandBox', 'ikiwiki'], "$msgprefix index.es"); +is_deeply(\@{$links{'index.fr'}}, ['translatable.fr', 'nontranslatable', 'SandBox', 'ikiwiki'], "$msgprefix index.fr"); is_deeply(\@{$links{'translatable'}}, ['nontranslatable'], "$msgprefix translatable"); is_deeply(\@{$links{'translatable.es'}}, ['nontranslatable'], "$msgprefix translatable.es"); is_deeply(\@{$links{'translatable.fr'}}, ['nontranslatable'], "$msgprefix translatable.fr"); @@ -129,8 +129,8 @@ $config{po_link_to}='current'; $msgprefix="links (po_link_to=current)"; refresh_n_scan('index.mdwn', 'translatable.mdwn', 'nontranslatable.mdwn'); is_deeply(\@{$links{'index'}}, ['translatable', 'nontranslatable'], "$msgprefix index"); -is_deeply(\@{$links{'index.es'}}, [ map bestlink('index.es', $_), ('translatable.es', 'nontranslatable')], "$msgprefix index.es"); -is_deeply(\@{$links{'index.fr'}}, [ map bestlink('index.fr', $_), ('translatable.fr', 'nontranslatable')], "$msgprefix index.fr"); +is_deeply(\@{$links{'index.es'}}, [ (map bestlink('index.es', $_), ('translatable.es', 'nontranslatable')), 'SandBox', 'ikiwiki'], "$msgprefix index.es"); +is_deeply(\@{$links{'index.fr'}}, [ (map bestlink('index.fr', $_), ('translatable.fr', 'nontranslatable')), 'SandBox', 'ikiwiki'], "$msgprefix index.fr"); is_deeply(\@{$links{'translatable'}}, [bestlink('translatable', 'nontranslatable')], "$msgprefix translatable"); is_deeply(\@{$links{'translatable.es'}}, ['nontranslatable'], "$msgprefix translatable.es"); is_deeply(\@{$links{'translatable.fr'}}, ['nontranslatable'], "$msgprefix translatable.fr"); -- cgit v1.2.3