]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/txt.pm
Merge branch 'ready/comments'
[git.ikiwiki.info.git] / IkiWiki / Plugin / txt.pm
index a4df54b553590a475f9ba19ed15d88cb9d2a471c..fcfb68be90891fca4a46ef512b43548362ffb9e1 100644 (file)
@@ -8,38 +8,81 @@ package IkiWiki::Plugin::txt;
 
 use warnings;
 use strict;
-use IkiWiki 2.00;
+use IkiWiki 3.00;
 use HTML::Entities;
-require URI::Find;
+
+my $findurl=0;
 
 sub import {
-        hook(type => "filter",  id => "txt", call => \&filter);
-        hook(type => "htmlize", id => "txt", call => \&htmlize);
+       hook(type => "getsetup", id => "txt", call => \&getsetup);
+       hook(type => "filter", id => "txt", call => \&filter);
+       hook(type => "htmlize", id => "txt", call => \&htmlize);
+       hook(type => "htmlizeformat", id => "txt", call => \&htmlizeformat);
+
+       eval q{use URI::Find};
+       if (! $@) {
+               $findurl=1;
+       }
+}
+
+sub getsetup () {
+       return
+               plugin => {
+                       safe => 1,
+                       rebuild => 1, # format plugin
+                       section => "format",
+               },
 }
 
 # We use filter to convert raw text to HTML
 # (htmlize is called after other plugins insert HTML)
 sub filter (@) {
-    my %params = @_;
-    my $content = $params{content};
-
-    if ($pagesources{$params{page}} =~ /.txt$/) {
-        encode_entities($content);
-        my $finder = URI::Find->new(
-            sub {
-                my($uri, $orig_uri) = @_;
-                return qq|<a href="$uri">$orig_uri</a>|;
-            });
-        $finder->find(\$content);
-        $content = "<pre>" . $content . "</pre>";
-    }
-    return $content;
+       my %params = @_;
+       my $content = $params{content};
+
+       if (defined $pagesources{$params{page}} &&
+           $pagesources{$params{page}} =~ /\.txt$/) {
+               if ($pagesources{$params{page}} eq 'robots.txt' &&
+                   $params{page} eq $params{destpage}) {
+                       will_render($params{page}, 'robots.txt');
+                       writefile('robots.txt', $config{destdir}, $content);
+               }
+               return txt2html($content);
+       }
+
+       return $content;
+}
+
+sub txt2html ($) {
+       my $content=shift;
+       
+       encode_entities($content, "<>&");
+       if ($findurl) {
+               my $finder = URI::Find->new(sub {
+                       my ($uri, $orig_uri) = @_;
+                       return qq|<a href="$uri">$orig_uri</a>|;
+               });
+               $finder->find(\$content);
+       }
+       return "<pre>" . $content . "</pre>";
 }
 
 # We need this to register the .txt file extension
 sub htmlize (@) {
-    my %params=@_;
-    return $params{content};
+       my %params=@_;
+       return $params{content};
+}
+
+sub htmlizeformat ($$) {
+       my $format=shift;
+       my $content=shift;
+
+       if ($format eq 'txt') {
+               return txt2html($content);
+       }
+       else {
+               return;
+       }
 }
 
 1