From 42b4abee1d14fe1c571b2324f86e283d3db4d7e6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 5 Nov 2008 01:38:36 -0500 Subject: use error for two messages --- IkiWiki/Plugin/inline.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 1b1ca2ce2..7fe5a4dcf 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -201,7 +201,7 @@ sub preprocess_inline (@) { #{{{ @list=sort { $pagectime{$b} <=> $pagectime{$a} } @list; } else { - return sprintf(gettext("unknown sort type %s"), $params{sort}); + error sprintf(gettext("unknown sort type %s"), $params{sort}); } if (yesno($params{reverse})) { @@ -298,7 +298,7 @@ sub preprocess_inline (@) { #{{{ require HTML::Template; my @params=IkiWiki::template_params($params{template}.".tmpl", blind_cache => 1); if (! @params) { - return sprintf(gettext("nonexistant template %s"), $params{template}); + error sprintf(gettext("nonexistant template %s"), $params{template}); } my $template=HTML::Template->new(@params) unless $raw; -- cgit v1.2.3 From 9bedf53c0ffee098cea02c7acc2c430db18b7841 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 5 Nov 2008 13:57:48 -0500 Subject: another reason to require rebuilds (and not be marked safe) the plugin changes html filenames, so requiring a manual transition to enable --- IkiWiki/Plugin/po.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 9dda8c0db..35eed6118 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -47,7 +47,7 @@ sub getsetup () { #{{{ return plugin => { safe => 0, - rebuild => 1, # format plugin + rebuild => 1, # format plugin & changes html filenames }, po_master_language => { type => "string", -- cgit v1.2.3 From 7e95723dadfe2a11fcd2463f2e8adf579fdc64db Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 5 Nov 2008 14:45:45 -0500 Subject: avoid hitting the shell with system() --- IkiWiki/Plugin/po.pm | 3 +-- doc/plugins/po.mdwn | 10 +++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 35eed6118..b8c218c5a 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -149,8 +149,7 @@ sub refreshpofiles ($@) { #{{{ foreach my $pofile (@pofiles) { if (-e $pofile) { - my $cmd = "msgmerge -U --backup=none $pofile $potfile"; - system ($cmd) == 0 + system("msgmerge", "-U", "--backup=none", $pofile, $potfile) == 0 or error("[po/refreshpofiles:$pofile] failed to update"); } else { diff --git a/doc/plugins/po.mdwn b/doc/plugins/po.mdwn index 2463680f5..7ac1b3f0f 100644 --- a/doc/plugins/po.mdwn +++ b/doc/plugins/po.mdwn @@ -205,7 +205,7 @@ Translating One can edit the PO files using ikiwiki's CGI (a message-by-message interface could also be implemented at some point). -If [[tips/untrusted_git_push]] is setup, one can edit the PO files in her +If [[tips/untrusted_git_push]] is setup, one can edit the PO files in one's preferred `$EDITOR`, without needing to be online. TODO @@ -267,6 +267,14 @@ by something like [[todo/using_meta_titles_for_parentlinks]]. Which configuration settings are safe enough for websetup? +> I see no problems with `po_master_language` and `po_slave_languages` +> (assuming websetup handles the hashes correctly). Would not hurt to check +> that the values of these are legal language codes, in `checkconfig`. +> `po_translatable_pages` seems entirely safe. `po_link_to` w/o usedirs +> causes ikiwiki to error out. If it were changed to fall back to a safe +> setting in this case rather than error, it would be safe. +> --[[Joey]] + ### parentlinks When the wiki home page is translatable, the parentlinks plugin sets -- cgit v1.2.3 From 9b16e7f148c36c61e511bcc787d3192b7bb1c3c5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 5 Nov 2008 15:09:04 -0500 Subject: minor layout changes --- IkiWiki/Plugin/po.pm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index b8c218c5a..4bac37656 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -31,7 +31,7 @@ $origsubs{'bestlink'}=\&IkiWiki::bestlink; $origsubs{'beautify_urlpath'}=\&IkiWiki::beautify_urlpath; $origsubs{'targetpage'}=\&IkiWiki::targetpage; -sub import { +sub import { #{{{ hook(type => "getsetup", id => "po", call => \&getsetup); hook(type => "checkconfig", id => "po", call => \&checkconfig); hook(type => "needsbuild", id => "po", call => \&needsbuild); @@ -41,7 +41,7 @@ sub import { inject(name => "IkiWiki::bestlink", call => \&mybestlink); inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath); inject(name => "IkiWiki::targetpage", call => \&mytargetpage); -} +} #}}} sub getsetup () { #{{{ return @@ -289,8 +289,8 @@ sub filter (@) { #{{{ my $destpage = $params{destpage}; my $content = decode_utf8(encode_utf8($params{content})); - # decide if this is a PO file that should be converted into a translated document, - # and perform various sanity checks + # decide if this is a PO file that should be converted into a + # translated document, and perform various sanity checks if (! istranslation($page) || $filtered{$page}{$destpage}) { return $content; } -- cgit v1.2.3 From ae37bca0e2593f18ed7f6ecb129e2d5bb3c113cc Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 5 Nov 2008 15:09:54 -0500 Subject: backup refs to injected subs later In case two plugins both inject replacements for these subs, backup the ref just before injecting to make sure the most recent version is seen. --- IkiWiki/Plugin/po.pm | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 4bac37656..466ffd0b8 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -27,9 +27,6 @@ memoize("percenttranslated"); # backup references to subs that will be overriden my %origsubs; -$origsubs{'bestlink'}=\&IkiWiki::bestlink; -$origsubs{'beautify_urlpath'}=\&IkiWiki::beautify_urlpath; -$origsubs{'targetpage'}=\&IkiWiki::targetpage; sub import { #{{{ hook(type => "getsetup", id => "po", call => \&getsetup); @@ -38,8 +35,12 @@ sub import { #{{{ hook(type => "filter", id => "po", call => \&filter); hook(type => "htmlize", id => "po", call => \&htmlize); hook(type => "pagetemplate", id => "po", call => \&pagetemplate); + + $origsubs{'bestlink'}=\&IkiWiki::bestlink; inject(name => "IkiWiki::bestlink", call => \&mybestlink); + $origsubs{'beautify_urlpath'}=\&IkiWiki::beautify_urlpath; inject(name => "IkiWiki::beautify_urlpath", call => \&mybeautify_urlpath); + $origsubs{'targetpage'}=\&IkiWiki::targetpage; inject(name => "IkiWiki::targetpage", call => \&mytargetpage); } #}}} -- cgit v1.2.3 From 17bd930bc9f4192e084a223cf57af94680741853 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 5 Nov 2008 15:18:07 -0500 Subject: first pass over code Only change of note is quoting some strings in a regexp, just in case (also avoids the . matching any character!) Mostly whitespace changes of no consequence. --- IkiWiki/Plugin/po.pm | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'IkiWiki/Plugin') diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm index 466ffd0b8..ac56041cf 100644 --- a/IkiWiki/Plugin/po.pm +++ b/IkiWiki/Plugin/po.pm @@ -96,11 +96,11 @@ sub checkconfig () { #{{{ } if (! exists $config{po_link_to} || ! defined $config{po_link_to}) { - $config{po_link_to}="default"; + $config{po_link_to}="default"; } if (! exists $config{po_translatable_pages} || ! defined $config{po_translatable_pages}) { - $config{po_translatable_pages}=""; + $config{po_translatable_pages}=""; } if ($config{po_link_to} eq "negotiated" && ! $config{usedirs}) { error(gettext("po_link_to=negotiated requires usedirs to be set")); @@ -110,6 +110,7 @@ sub checkconfig () { #{{{ sub potfile ($) { #{{{ my $masterfile=shift; + (my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/); return File::Spec->catfile($dir, $name . ".pot"); } #}}} @@ -117,12 +118,14 @@ sub potfile ($) { #{{{ sub pofile ($$) { #{{{ my $masterfile=shift; my $lang=shift; + (my $name, my $dir, my $suffix) = fileparse($masterfile, qr/\.[^.]*/); return File::Spec->catfile($dir, $name . "." . $lang . ".po"); } #}}} sub refreshpot ($) { #{{{ my $masterfile=shift; + my $potfile=potfile($masterfile); my %options = ("markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0); my $doc=Locale::Po4a::Chooser::new('text',%options); @@ -211,7 +214,6 @@ sub needsbuild () { #{{{ } } - # make existing translations depend on the corresponding master page foreach my $master (keys %translations) { foreach my $slave (values %{$translations{$master}}) { @@ -246,9 +248,10 @@ sub mytargetpage ($$) { #{{{ sub mybeautify_urlpath ($) { #{{{ my $url=shift; + my $res=$origsubs{'beautify_urlpath'}->($url); if ($config{po_link_to} eq "negotiated") { - $res =~ s!/index.$config{po_master_language}{code}.$config{htmlext}$!/!; + $res =~ s!/\Qindex.$config{po_master_language}{code}.$config{htmlext}\E$!/!; } return $res; } #}}} @@ -267,6 +270,7 @@ sub urlto_with_orig_beautiful_urlpath($$) { #{{{ sub mybestlink ($$) { #{{{ my $page=shift; my $link=shift; + my $res=$origsubs{'bestlink'}->($page, $link); if (length $res) { if ($config{po_link_to} eq "current" @@ -286,6 +290,7 @@ sub mybestlink ($$) { #{{{ # since other plugins should not work on PO files sub filter (@) { #{{{ my %params = @_; + my $page = $params{page}; my $destpage = $params{destpage}; my $content = decode_utf8(encode_utf8($params{content})); @@ -303,8 +308,8 @@ sub filter (@) { #{{{ push @pos,$file; push @masters,$masterfile; my %options = ( - "markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0, - ); + "markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0, + ); my $doc=Locale::Po4a::Chooser::new('text',%options); $doc->process( 'po_in_name' => \@pos, @@ -314,6 +319,7 @@ sub filter (@) { #{{{ ) or error("[po/filter:$file]: failed to translate"); my $tmpfh = File::Temp->new(TEMPLATE => "/tmp/ikiwiki-po-filter-out.XXXXXXXXXX"); my $tmpout = $tmpfh->filename; + # XXX is there any way to avoid the useless write to a temp file? --Joey $doc->write($tmpout) or error("[po/filter:$file] could not write $tmpout"); $content = readfile($tmpout) or error("[po/filter:$file] could not read $tmpout"); $filtered{$page}{$destpage}=1; @@ -322,6 +328,7 @@ sub filter (@) { #{{{ sub htmlize (@) { #{{{ my %params=@_; + my $page = $params{page}; my $content = $params{content}; my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/); @@ -333,7 +340,8 @@ sub htmlize (@) { #{{{ sub percenttranslated ($) { #{{{ my $page=shift; - return "N/A" unless (istranslation($page)); + + return gettext("N/A") unless (istranslation($page)); my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/); my $file=srcfile($pagesources{$page}); my $masterfile = srcfile($pagesources{$masterpage}); @@ -341,8 +349,8 @@ sub percenttranslated ($) { #{{{ push @pos,$file; push @masters,$masterfile; my %options = ( - "markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0, - ); + "markdown" => (pagetype($masterfile) eq 'mdwn') ? 1 : 0, + ); my $doc=Locale::Po4a::Chooser::new('text',%options); $doc->process( 'po_in_name' => \@pos, @@ -356,6 +364,7 @@ sub percenttranslated ($) { #{{{ sub otherlanguages ($) { #{{{ my $page=shift; + my @ret; if (istranslatable($page)) { foreach my $lang (sort keys %{$translations{$page}}) { @@ -391,6 +400,7 @@ sub otherlanguages ($) { #{{{ sub pagetemplate (@) { #{{{ my %params=@_; my $page=$params{page}; + my $destpage=$params{destpage}; my $template=$params{template}; @@ -440,6 +450,7 @@ sub pagetemplate (@) { #{{{ sub istranslatable ($) { #{{{ my $page=shift; + my $file=$pagesources{$page}; if (! defined $file @@ -452,6 +463,7 @@ sub istranslatable ($) { #{{{ sub _istranslation ($) { #{{{ my $page=shift; + my $file=$pagesources{$page}; if (! defined $file) { return IkiWiki::FailReason->new("no file specified"); @@ -477,6 +489,7 @@ sub _istranslation ($) { #{{{ sub istranslation ($) { #{{{ my $page=shift; + if (_istranslation($page)) { my ($masterpage, $lang) = ($page =~ /(.*)[.]([a-z]{2})$/); $translations{$masterpage}{$lang}=$page unless exists $translations{$masterpage}{$lang}; @@ -492,6 +505,7 @@ use IkiWiki 2.00; sub match_istranslation ($;@) { #{{{ my $page=shift; + if (IkiWiki::Plugin::po::istranslation($page)) { return IkiWiki::SuccessReason->new("is a translation page"); } @@ -502,6 +516,7 @@ sub match_istranslation ($;@) { #{{{ sub match_istranslatable ($;@) { #{{{ my $page=shift; + if (IkiWiki::Plugin::po::istranslatable($page)) { return IkiWiki::SuccessReason->new("is set as translatable in po_translatable_pages"); } @@ -513,6 +528,7 @@ sub match_istranslatable ($;@) { #{{{ sub match_lang ($$;@) { #{{{ my $page=shift; my $wanted=shift; + my $regexp=IkiWiki::glob2re($wanted); my $lang; my $masterpage; @@ -534,6 +550,7 @@ sub match_lang ($$;@) { #{{{ sub match_currentlang ($$;@) { #{{{ my $page=shift; + shift; my %params=@_; my ($currentmasterpage, $currentlang, $masterpage, $lang); -- cgit v1.2.3