po: fix bug with translated pages including templates
authorintrigeri <intrigeri@boum.org>
Fri, 25 Jun 2010 15:14:13 +0000 (17:14 +0200)
committerintrigeri <intrigeri@boum.org>
Fri, 25 Jun 2010 15:14:13 +0000 (17:14 +0200)
The protection against processing loops (i.e. the alreadyfiltered stuff) was
playing against us: the template plugin triggered a filter hooks run with the
very same ($page, $destpage) arguments pair that we use to identify a already
filtered page. Processing an included template could then mark the whole
translation page as already filtered, which prevented po_to_markup to be called
on the PO content.

This commit only runs the whole PO filter logic when our filter hook is run by
IkiWiki::render, which only happens when the full page needs to be filtered.

IkiWiki/Plugin/po.pm

index 3023fd7f938e423bc20b42a579004084f4a6d8a0..0b48726ea91b1c33d13e92d67706f793e8e0b02c 100644 (file)
@@ -243,6 +243,10 @@ sub filter (@) {
        my $page = $params{page};
        my $destpage = $params{destpage};
        my $content = $params{content};
+
+       my @caller = caller(4);
+        return $content unless $caller[3] ne "IkiWiki::render";
+
        if (istranslation($page) && ! alreadyfiltered($page, $destpage)) {
                $content = po_to_markup($page, $content);
                setalreadyfiltered($page, $destpage);