--- loncom/xml/lonplot.pm 2002/02/27 16:54:58 1.50 +++ loncom/xml/lonplot.pm 2002/03/01 14:03:50 1.54 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.50 2002/02/27 16:54:58 matthew Exp $ +# $Id: lonplot.pm,v 1.54 2002/03/01 14:03:50 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -29,7 +29,7 @@ # 12/17 12/18 12/19 12/20 12/21 12/27 12/28 12/30 12/31 Matthew # 01/01/02 Matthew # 01/02 01/03 01/04 01/07 01/08 01/09 Matthew -# 01/21 02/05 02/06 Matthew +# 01/21 02/05 02/06 2/28Matthew package Apache::lonplot; @@ -413,7 +413,7 @@ sub start_gnuplot { ('title','xlabel','ylabel','key','axis','label','curve', 'xtics','ytics')); push (@Apache::lonxml::namespace,'lonplot'); - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { my $inside = &Apache::lonxml::get_all_text("/gnuplot",$$parser[-1]); $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); &Apache::lonxml::newparser($parser,\$inside); @@ -441,7 +441,7 @@ sub end_gnuplot { &Apache::lonxml::deregister('Apache::lonplot', ('title','xlabel','ylabel','key','axis','label','curve')); my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { &check_inputs(); # Make sure we have all the data we need ## ## Determine filename @@ -449,15 +449,22 @@ sub end_gnuplot { my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. '_'.time.'_'.$$.int(rand(1000)).'_plot.data'; ## Write the plot description to the file - &write_gnuplot_file($tmpdir,$filename); + &write_gnuplot_file($tmpdir,$filename,$target); + $filename = &Apache::lonnet::escape($filename); ## return image tag for the plot - $result .= <<"ENDIMAGE"; -image should be /cgi-bin/plot.gif?$filename ENDIMAGE + } elsif ($target eq 'tex') { + &Apache::lonnet::ssi('cgi-bin/plot.gif?file=$filename'. + '&output=eps'); + $result = "$filename.eps"; + } } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -469,7 +476,7 @@ ENDIMAGE sub start_xtics { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { &get_attributes(\%xtics,\%tic_defaults,$parstack,$safeeval, $tagstack->[-1]); } elsif ($target eq 'edit') { @@ -489,7 +496,7 @@ sub start_xtics { sub end_xtics { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -500,7 +507,7 @@ sub end_xtics { sub start_ytics { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { &get_attributes(\%ytics,\%tic_defaults,$parstack,$safeeval, $tagstack->[-1]); } elsif ($target eq 'edit') { @@ -520,7 +527,7 @@ sub start_ytics { sub end_ytics { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -532,7 +539,7 @@ sub end_ytics { sub start_key { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { &get_attributes(\%key,\%key_defaults,$parstack,$safeeval, $tagstack->[-1]); } elsif ($target eq 'edit') { @@ -551,7 +558,7 @@ sub start_key { sub end_key { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -562,7 +569,7 @@ sub end_key { sub start_title { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { $title = &Apache::lonxml::get_all_text("/title",$$parser[-1]); $title =~ s/\n/ /g; if (length($title) > $max_str_len) { @@ -585,7 +592,7 @@ sub start_title { sub end_title { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -595,7 +602,7 @@ sub end_title { sub start_xlabel { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { $xlabel = &Apache::lonxml::get_all_text("/xlabel",$$parser[-1]); $xlabel =~ s/\n/ /g; if (length($xlabel) > $max_str_len) { @@ -618,7 +625,7 @@ sub start_xlabel { sub end_xlabel { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -629,7 +636,7 @@ sub end_xlabel { sub start_ylabel { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { $ylabel = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]); $ylabel =~ s/\n/ /g; if (length($ylabel) > $max_str_len) { @@ -652,7 +659,7 @@ sub start_ylabel { sub end_ylabel { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -663,7 +670,7 @@ sub end_ylabel { sub start_label { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { my %label; &get_attributes(\%label,\%label_defaults,$parstack,$safeeval, $tagstack->[-1]); @@ -692,7 +699,7 @@ sub start_label { sub end_label { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -705,7 +712,7 @@ sub start_curve { my $result=''; &Apache::lonxml::register('Apache::lonplot',('function','data')); push (@Apache::lonxml::namespace,'curve'); - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { my %curve; &get_attributes(\%curve,\%curve_defaults,$parstack,$safeeval, $tagstack->[-1]); @@ -730,7 +737,7 @@ sub end_curve { my $result = ''; pop @Apache::lonxml::namespace; &Apache::lonxml::deregister('Apache::lonplot',('function','data')); - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } @@ -741,7 +748,7 @@ sub end_curve { sub start_function { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { if (exists($curves[-1]->{'data'})) { &Apache::lonxml::warning('Use of precludes use of . The will be omitted in favor of the declaration.'); delete $curves[-1]->{'data'} ; @@ -765,7 +772,7 @@ sub start_function { sub end_function { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result .= &Apache::edit::end_table(); } @@ -776,7 +783,7 @@ sub end_function { sub start_data { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { if (exists($curves[-1]->{'function'})) { &Apache::lonxml::warning('Use of precludes use of .'. '. The will be omitted in favor of '. @@ -840,7 +847,7 @@ sub start_data { sub end_data { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result .= &Apache::edit::end_table(); } @@ -851,7 +858,7 @@ sub end_data { sub start_axis { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { &get_attributes(\%axis,\%axis_defaults,$parstack,$safeeval, $tagstack->[-1]); } elsif ($target eq 'edit') { @@ -870,7 +877,7 @@ sub start_axis { sub end_axis { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result = ''; - if ($target eq 'web') { + if ($target eq 'web' || $target eq 'tex') { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } elsif ($target eq 'modified') { @@ -916,7 +923,7 @@ sub get_attributes{ ##------------------------------------------------------- write_gnuplot_file sub write_gnuplot_file { - my ($tmpdir,$filename)= @_; + my ($tmpdir,$filename,$target)= @_; my $gnuplot_input = ''; my $curve; # Collect all the colors @@ -930,13 +937,18 @@ sub write_gnuplot_file { $plot{'fgcolor'} ); } # set term - $gnuplot_input .= 'set term gif '; - $gnuplot_input .= 'transparent ' if ($plot{'transparent'} eq 'on'); - $gnuplot_input .= $plot{'font'} . ' '; - $gnuplot_input .= 'size '.$plot{'width'}.','.$plot{'height'}.' '; - $gnuplot_input .= "@Colors\n"; - # set output - $gnuplot_input .= "set output\n"; + if ($target eq 'web') { + $gnuplot_input .= 'set term gif '; + $gnuplot_input .= 'transparent ' if ($plot{'transparent'} eq 'on'); + $gnuplot_input .= $plot{'font'} . ' '; + $gnuplot_input .= 'size '.$plot{'width'}.','.$plot{'height'}.' '; + $gnuplot_input .= "@Colors\n"; + # set output + $gnuplot_input .= "set output\n"; + } elsif ($target eq 'tex') { + $gnuplot_input .= "set term postscript eps monochrome\n"; + $gnuplot_input .= "set output \"$filename.eps\"\n"; + } # grid $gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on'); # border