]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/Plugin/po.pm
bugfix: Avoid generating po files for files that are not httmlizable
[ikiwiki.git] / IkiWiki / Plugin / po.pm
index f25beba7236c69c742686d0f7ade6daa0f24a25d..3d358b3e2a18137d244f6ea4c995433aec05b3c9 100644 (file)
@@ -32,7 +32,7 @@ sub import {
        hook(type => "getsetup", id => "po", call => \&getsetup);
        hook(type => "checkconfig", id => "po", call => \&checkconfig);
        hook(type => "needsbuild", id => "po", call => \&needsbuild);
-       hook(type => "scan", id => "po", call => \&scan, last =>1);
+       hook(type => "scan", id => "po", call => \&scan, last => 1);
        hook(type => "filter", id => "po", call => \&filter);
        hook(type => "htmlize", id => "po", call => \&htmlize);
        hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
@@ -141,9 +141,7 @@ sub checkconfig () {
            ! defined $config{po_link_to}) {
                $config{po_link_to}='default';
        }
-       elsif (! grep {
-                       $config{po_link_to} eq $_
-               } ('default', 'current', 'negotiated')) {
+       elsif ($config{po_link_to} !~ /^(default|current|negotiated)$/) {
                warn(sprintf(gettext('%s is not a valid value for po_link_to, falling back to po_link_to=default'),
                             $config{po_link_to}));
                $config{po_link_to}='default';
@@ -180,8 +178,6 @@ sub scan (@) {
        my $page=$params{page};
        my $content=$params{content};
 
-       return unless UNIVERSAL::can("IkiWiki::Plugin::link", "import");
-
        if (istranslation($page)) {
                foreach my $destpage (@{$links{$page}}) {
                        if (istranslatable($destpage)) {
@@ -264,22 +260,20 @@ sub pagetemplate (@) {
                $template->param(otherlanguages => [otherlanguagesloop($page)]);
                map add_depends($page, $_), (values %{otherlanguages($page)});
        }
-       # Rely on IkiWiki::Render's genpage() to decide wether
-       # a discussion link should appear on $page; this is not
-       # totally accurate, though: some broken links may be generated
-       # when cgiurl is disabled.
-       # This compromise avoids some code duplication, and will probably
-       # prevent future breakage when ikiwiki internals change.
-       # Known limitations are preferred to future random bugs.
-       if ($template->param('discussionlink') && istranslation($page)) {
-               $template->param('discussionlink' => htmllink(
-                       $page,
-                       $destpage,
-                       $masterpage . '/' . gettext("Discussion"),
-                       noimageinline => 1,
-                       forcesubpage => 0,
-                       linktext => gettext("Discussion"),
+       if ($config{discussion} && istranslation($page)) {
+               my $discussionlink=gettext("discussion");
+               if ($page !~ /.*\/\Q$discussionlink\E$/i &&
+                  (length $config{cgiurl} ||
+                   exists $links{$masterpage."/".$discussionlink})) {
+                       $template->param('discussionlink' => htmllink(
+                               $page,
+                               $destpage,
+                               $masterpage . '/' . gettext("Discussion"),
+                               noimageinline => 1,
+                               forcesubpage => 0,
+                               linktext => gettext("Discussion"),
                ));
+               }
        }
        # Remove broken parentlink to ./index.html on home page's translations.
        # It works because this hook has the "last" parameter set, to ensure it
@@ -292,7 +286,7 @@ sub pagetemplate (@) {
 } # }}}
 
 # Add the renamed page translations to the list of to-be-renamed pages.
-sub renamepages(@) {
+sub renamepages (@) {
        my %params = @_;
 
        my %torename = %{$params{torename}};
@@ -328,13 +322,13 @@ sub renamepages(@) {
        return @ret;
 }
 
-sub mydelete(@) {
+sub mydelete (@) {
        my @deleted=@_;
 
        map { deletetranslations($_) } grep istranslatablefile($_), @deleted;
 }
 
-sub change(@) {
+sub change (@) {
        my @rendered=@_;
 
        # All meta titles are first extracted at scan time, i.e. before we turn
@@ -342,14 +336,14 @@ sub change(@) {
        # PO files breaks the meta plugin's parsing enough to save ugly titles
        # to %pagestate at this time.
        #
-       # Then, at render time, every page's passes on row through the Great
+       # Then, at render time, every page passes in turn through the Great
        # Rendering Chain (filter->preprocess->linkify->htmlize), and the meta
        # plugin's preprocess hook is this time in a position to correctly
        # extract the titles from slave pages.
        #
-       # This is, unfortunately, too late: if the page A, linking to the page B,
-       # is rendered before B, it will display the wrongly-extracted meta title
-       # as the link text to B.
+       # This is, unfortunately, too late: if the page A, linking to the page
+       # B, is rendered before B, it will display the wrongly-extracted meta
+       # title as the link text to B.
        #
        # On the one hand, such a corner case only happens on rebuild: on
        # refresh, every rendered page is fixed to contain correct meta titles.
@@ -662,7 +656,8 @@ sub istranslatablefile ($) {
        my $file=shift;
 
        return 0 unless defined $file;
-       return 0 if defined pagetype($file) && pagetype($file) eq 'po';
+       my $type=pagetype($file);
+       return 0 if ! defined $type || $type eq 'po';
        return 0 if $file =~ /\.pot$/;
        return 0 unless -e "$config{srcdir}/$file"; # underlay dirs may be read-only
        return 1 if pagespec_match(pagename($file), $config{po_translatable_pages});
@@ -788,9 +783,10 @@ sub refreshpot ($) {
        $doc->{TT}{file_in_charset} = 'utf-8';
        $doc->{TT}{file_out_charset} = 'utf-8';
        $doc->read($masterfile);
-       # let's cheat a bit to force porefs option to be passed to Locale::Po4a::Po;
-       # this is undocument use of internal Locale::Po4a::TransTractor's data,
-       # compulsory since this module prevents us from using the porefs option.
+       # let's cheat a bit to force porefs option to be passed to
+       # Locale::Po4a::Po; this is undocument use of internal
+       # Locale::Po4a::TransTractor's data, compulsory since this module
+       # prevents us from using the porefs option.
        $doc->{TT}{po_out}=Locale::Po4a::Po->new({ 'porefs' => 'none' });
        $doc->{TT}{po_out}->set_charset('utf-8');
        # do the actual work