X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/a4d693f659b901557e596c41d3ab48bce804d7f6..23b91e69b02065534e5c57449ec82d7fee9f93e0:/IkiWiki/Plugin/txt.pm diff --git a/IkiWiki/Plugin/txt.pm b/IkiWiki/Plugin/txt.pm index 2670e9b63..fcfb68be9 100644 --- a/IkiWiki/Plugin/txt.pm +++ b/IkiWiki/Plugin/txt.pm @@ -8,13 +8,30 @@ 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 => "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 @@ -23,18 +40,31 @@ sub filter (@) { my %params = @_; my $content = $params{content}; - if ($pagesources{$params{page}} =~ /.txt$/) { - encode_entities($content); - my $finder = URI::Find->new( - sub { + 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|$orig_uri|; }); $finder->find(\$content); - $content = "
" . $content . "
"; } - - return $content; + return "
" . $content . "
"; } # We need this to register the .txt file extension @@ -43,4 +73,16 @@ sub htmlize (@) { return $params{content}; } +sub htmlizeformat ($$) { + my $format=shift; + my $content=shift; + + if ($format eq 'txt') { + return txt2html($content); + } + else { + return; + } +} + 1