X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sweavealike.pm;h=4747b18c98e65e1fa8d6d46dfcf3212be1d5c479;hb=4ed794890c1071b0b9b521948a932cc48550d9e6;hp=c98c07304a463384fdc4e19f41efd571ac2d4e26;hpb=cf1231554134a1038649d30a04e617abb063d545;p=ikiwiki_plugins.git diff --git a/sweavealike.pm b/sweavealike.pm index c98c073..4747b18 100644 --- a/sweavealike.pm +++ b/sweavealike.pm @@ -32,27 +32,35 @@ use IkiWiki '3.00'; my $id = "sweavealike"; sub import { + hook(type => "getsetup", id => $id, call => \&getsetup); hook(type => "preprocess", id => $id, call => \&preprocess); - hook(type => "preprocess", id => $id, call => \&preprocess_scan, scan => 1); hook(type => "htmlize", id => $id, call => \&htmlize); hook(type => "savestate", id => $id, call => \&savestate); } -sub preprocess_scan { - my %param = @_; - # start the R process here for this page - if (not defined $pagestate{$param{page}}{$id}{R}) { - $pagestate{$param{page}}{$id}{R} = Statistics::R->new(shared => 1) or error("Unable to create an R process"); - } +sub getsetup { + return(plugin => {safe => 1, + rebuild => 1, + section => "misc", + link => "http://git.donarmstrong.com/?p=ikiwiki_plugins.git;a=blob;f=sweavealike.pm;hb=HEAD", + description => "sweavealike plugin", + }, + ); } sub preprocess { my %param = @_; + if (not defined $pagestate{$param{page}}{$id}{R}) { + $pagestate{$param{page}}{$id}{R} = Statistics::R->new(shared => 1) + or error("Unable to create an R process"); + } # we currently don't bother to support anything but outputing the # entire segment of code and its R output - if (not exists $param{code} or not defined $param{code}) { + if (not exists $param{code} + or not defined $param{code} + or not length $param{code}) { error("There wasn't any R code supplied"); } my $code_result; @@ -60,14 +68,14 @@ sub preprocess { $code_result = $pagestate{$param{page}}{$id}{R}->run($param{code}); }; if ($@) { - error($@); + error("code '$param{code}' produced error '$@'"); } my $output; - if ($param{verbatim}) { + if (exists $param{verbatim}) { $output = $param{code}; $output =~ s/^/> /mg; } - $output .= $code_result; + $output .= "\n".$code_result; $output =~ s/^/ /mg; return($output); } @@ -92,7 +100,7 @@ sub savestate { next unless exists $pagestate{$page}{$id}; next unless exists $pagestate{$page}{$id}{R}; if (defined $pagestate{$page}{$id}{R} - and $pagestate{$param{page}}{$id}{R}->is_started()) { + and $pagestate{$page}{$id}{R}->is_started()) { $pagestate{$page}{$id}{R}->stop; } delete $pagestate{$page}{$id}{R};