]> git.donarmstrong.com Git - ikiwiki_plugins.git/blobdiff - sweavealike.pm
chdir to the source directory before starting R
[ikiwiki_plugins.git] / sweavealike.pm
index 1808090cbc226404ebe083003c40e5064fe55e1f..48c603c63a5f3e38339e0906f0ec377e690d0dd8 100644 (file)
@@ -85,6 +85,7 @@ use IkiWiki '3.00';
 
 use Encode qw(decode);
 use Digest::MD5 qw(md5_hex);
+use Cwd;
 
 my $id = "sweavealike";
 sub import {
@@ -112,8 +113,13 @@ sub preprocess {
     my %param = @_;
 
     if (not defined $pagestate{$param{page}}{$id}{R}) {
+       # I've decided to put R into the src directory instead of the
+       # dest directory
+       my $cur_dir = getcwd;
+       chdir($config{srcdir});
        $pagestate{$param{page}}{$id}{R} = Statistics::R->new(shared => 1)
            or error("Unable to create an R process");
+       chdir($cur_dir);
     }
     # we currently don't bother to support anything but outputing the
     # entire segment of code and its R output
@@ -124,7 +130,7 @@ sub preprocess {
        error("There wasn't any R code supplied");
     }
 
-    my $image_loc
+    my $image_loc = '';
     if (exists $param{fig}) {
        $param{width} = '400' unless exists $param{width} and defined $param{width};
        $param{height} = '400' unless exists $param{height} and defined $param{height};
@@ -141,11 +147,13 @@ sub preprocess {
        my $image_loc_esc = $image_loc;
        $image_loc_esc =~ s/"/\\"/g;
        will_render($param{page},$image_loc);
+       # this makes sure that we can write to the file result
+       writefile($image_loc, $config{destdir}, "");
        eval {
-           $pagestate{$param{page}}{$id}{R}->run(qq{png(filename="$image_loc_esc",width=$param{width},height=$param{height});});
+           $pagestate{$param{page}}{$id}{R}->run(qq|png(filename="$config{destdir}/$image_loc_esc",width=$param{width},height=$param{height});|);
        };
        if ($@) {
-           error("code 'png(filename="$image_loc_esc",width=$param{width},height=$param{height});' (from internal figure handling) produced error '$@'");
+           error(qq|code 'png(filename="$config{destdir}/$image_loc_esc",width=$param{width},height=$param{height});' (from internal figure handling) produced error '$@'|);
        }
     }
     my $code_result;
@@ -176,7 +184,7 @@ sub preprocess {
     }
     if (not exists $param{results} or
        (defined $param{results} and
-        $param{results} !~ /^(hide|false)$/i;)) {
+        $param{results} !~ /^(hide|false)$/i)) {
        $output .= $code_result;
     }
     if (exists $param{echo} or
@@ -204,12 +212,12 @@ sub savestate {
     # make sure we never try to save an R process
     for my $page (keys %pagestate) {
        next unless exists $pagestate{$page}{$id};
-       next unless ;
        if (exists $pagestate{$page}{$id}{R}) {
            if (defined $pagestate{$page}{$id}{R}
                and $pagestate{$page}{$id}{R}->is_started()) {
                $pagestate{$page}{$id}{R}->stop;
            }
+           delete $pagestate{$page}{$id}{R};
        }
        if (exists $pagestate{$page}{$id}{fignum}) {
            delete $pagestate{$page}{$id}{fignum}