--- loncom/xml/lonplot.pm 2001/12/20 22:36:35 1.12 +++ loncom/xml/lonplot.pm 2001/12/21 15:27:29 1.13 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.12 2001/12/20 22:36:35 matthew Exp $ +# $Id: lonplot.pm,v 1.13 2001/12/21 15:27:29 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -116,9 +116,9 @@ my %axis_defaults = my %curve_defaults = ( - color => {default => 'x000000', test => $color_test }, - name => {default => 'x000000', test => sub {1} },#sub {$_[0]=~/^[\w ]*$/} }, - linestyle => {default => 'lines', test => $linestyle_test } + color => {default => 'x000000', test => $color_test }, + name => {default => '', test => $words_test }, + linestyle => {default => 'lines', test => $linestyle_test } ); ## @@ -155,11 +155,21 @@ sub end_plot { ('title','xlabel','ylabel','key','axis','label','curve')); my $result = ''; if ($target eq 'web') { - ## Determine filename -- Need to use the 'id' thingy that Gerd - ## mentioned. + ## + ## Make sure we have all the input we need: + if (! defined(%plot )) { &set_defaults(\%plot,\%plot_defaults); } + if (! defined(%key )) {} # No key for this plot + if (! defined(%axis )) { &set_defaults(\%axis,\%axis_defaults); } + if (! defined($title )) {} # No title for this plot + if (! defined($xlabel)) {} # No xlabel for this plot + if (! defined($ylabel)) {} # No ylabel for this plot + if ($#labels < 0) { } # No labels for this plot + if ($#curves < 0) { } # This is an error + ## + ## Determine filename my $tmpdir = '/home/httpd/perl/tmp/'; my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. - '_plot.data'; + '_'.time.'_'.$$.'_plot.data'; ## Write the plot description to the file my $fh=Apache::File->new(">$tmpdir$filename"); $result .= '
';
@@ -394,6 +404,16 @@ sub end_axis {
     return $result;
 }
 
+##----------------------------------------------------------- set_defaults
+sub set_defaults {
+    my $var      = shift;
+    my $defaults = shift;
+    my $key;
+    foreach $key (keys %$defaults) {
+	$var->{$key} = $defaults->{$key}->{'default'};
+    }
+}
+
 ##------------------------------------------------------------------- misc
 sub get_attributes{
     my $values   = shift;
@@ -427,12 +447,12 @@ sub write_gnuplot_file {
     my @Colors;
     push @Colors, $plot{'bgcolor'};
     push @Colors, $plot{'fgcolor'}; 
-    push @Colors, $axis{'color'};
-    push @Colors, $axis{'color'}; 
+    push @Colors, (defined($axis{'color'})?$axis{'color'}:$plot{'fgcolor'});
+    push @Colors, $Colors[-1];  # Redundancy
     foreach $curve (@curves) {
 	push @Colors, ($curve->{'color'} ne '' ? 
 		       $curve->{'color'}       : 
-		       $plot{'fgcolor'}      );
+		       $plot{'fgcolor'}        );
     }
     # set term
     $gnuplot_input .= 'set term gif ';
@@ -446,18 +466,16 @@ sub write_gnuplot_file {
     $gnuplot_input .= ($plot{'border'} eq 'on'?
 		       'set border'.$/           :
 		       'set noborder'.$/         );    # title, xlabel, ylabel
-    {
-    $gnuplot_input .= <<"ENDLABELS";
-set output 
-set title  "$title"
-set xlabel "$xlabel"
-set ylabel "$ylabel"
-set xrange \[$axis{'xmin'}:$axis{'xmax'}\]
-set yrange \[$axis{'ymin'}:$axis{'ymax'}\]
-ENDLABELS
+    $gnuplot_input .= "set output\n";
+    $gnuplot_input .= "set title  \"$title\"\n"  if (defined($title)) ;
+    $gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel));
+    $gnuplot_input .= "set ylabel \"$ylabel\"\n" if (defined($ylabel));
+    if (defined(%axis)) {
+	$gnuplot_input .= "set xrange \[$axis{'xmin'}:$axis{'xmax'}\]\n";
+	$gnuplot_input .= "set yrange \[$axis{'ymin'}:$axis{'ymax'}\]\n";
     }
     # Key
-    if (defined($key{'pos'})) {
+    if (defined(%key)) {
 	$gnuplot_input .= 'set key '.$key{'pos'}.' ';
 	if ($key{'title'} ne '') {
 	    $gnuplot_input .= 'title "'.$key{'title'}.'" ';
@@ -465,7 +483,7 @@ ENDLABELS
 	$gnuplot_input .= ($key{'box'} eq 'on' ? 'box ' : 'nobox ').$/;
     } else {
 	$gnuplot_input .= 'set nokey'.$/;
-    }    
+    }
     # labels
     my $label;
     foreach $label (@labels) {