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;
$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);
}
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};