--- loncom/xml/lonplot.pm 2002/02/27 16:54:58 1.50
+++ loncom/xml/lonplot.pm 2002/02/28 21:04:10 1.53
@@ -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.53 2002/02/28 21:04:10 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,21 @@ 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);
## return image tag for the plot
- $result .= <<"ENDIMAGE";
-
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 +475,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 +495,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 +506,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 +526,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 +538,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 +557,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 +568,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 +591,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 +601,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 +624,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 +635,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 +658,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 +669,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 +698,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 +711,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 +736,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 +747,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 +771,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 +782,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 +846,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 +857,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 +876,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 +922,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 +936,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