summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2008-10-11 03:02:43 +0200
committerintrigeri <intrigeri@boum.org>2008-10-18 15:49:10 +0200
commit1e874b3f0a396ba99ebf7ab8bad3d7eed1a846f2 (patch)
treec372b33b837d4a8df63ac7cbbb85421b7953551f
parent52728bb6eaf71057a1b6bddc551ada1da1ea4ec4 (diff)
po plugin[filter]: avoid converting more than once per destfile
Only the first filter function call on a given {page,destpage} must convert it from the PO file, subsequent calls must leave the passed $content unmodified. Else, preprocessing loops are the rule. Signed-off-by: intrigeri <intrigeri@boum.org>
-rw-r--r--IkiWiki/Plugin/po.pm5
1 files changed, 4 insertions, 1 deletions
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index d3ccd37e1..0698b2488 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -140,16 +140,18 @@ sub tweakbestlink ($$) { #{{{
return $link;
} #}}}
+our %filtered;
# We use filter to convert PO to the master page's type,
# 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}));
# decide if this is a PO file that should be converted into a translated document,
# and perform various sanity checks
- if (! istranslation($page)) {
+ if (! istranslation($page) || $filtered{$page}{$destpage}) {
return $content;
}
@@ -174,6 +176,7 @@ sub filter (@) { #{{{
my $tmpout = $tmpfh->filename;
$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;
return $content;
} #}}}