--- loncom/xml/lonplot.pm	2002/03/22 20:05:19	1.63
+++ loncom/xml/lonplot.pm	2002/04/25 20:39:50	1.72
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Dynamic plot
 #
-# $Id: lonplot.pm,v 1.63 2002/03/22 20:05:19 albertel Exp $
+# $Id: lonplot.pm,v 1.72 2002/04/25 20:39:50 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -104,7 +104,7 @@ my $onoff_test     = sub {$_[0]=~/^(on|o
 my $key_pos_test   = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/};
 my $sml_test       = sub {$_[0]=~/^(small|medium|large)$/};
 my $linestyle_test = sub {exists($linestyles{$_[0]})};
-my $words_test     = sub {$_[0]=~s/\s+/ /g;$_[0]=~/^([\w\(\)]+ ?)+$/};
+my $words_test     = sub {$_[0]=~s/\s+/ /g;$_[0]=~/^([\w~!\@\#\$\%^&\*\(\)-=_\+\[\]\{\}:\;\'<>,\.\/\?\\]+ ?)+$/};
 
 ###################################################################
 ##                                                               ##
@@ -112,7 +112,7 @@ my $words_test     = sub {$_[0]=~s/\s+/
 ##                                                               ##
 ###################################################################
 my @gnuplot_edit_order = 
-    qw/bgcolor fgcolor height width font transparent grid border align/;
+    qw/alttag bgcolor fgcolor height width font transparent grid border align/;
 
 my $gnuplot_help_text = <<"ENDPLOTHELP";
 <p>
@@ -148,15 +148,22 @@ ENDPLOTHELP
 
 my %gnuplot_defaults = 
     (
+     alttag       => {
+	 default     => 'dynamically generated plot',
+	 test        => $words_test,
+	 description => 'brief description of the plot',
+      	 edit_type   => 'entry',
+	 size        => '40'
+	 },
      height       => {
-	 default     => 200,
+	 default     => 300,
 	 test        => $int_test,
 	 description => 'height of image (pixels)',
       	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      width        => {
-	 default     => 200,
+	 default     => 400,
 	 test        => $int_test,
 	 description => 'width of image (pixels)',
 	 edit_type   => 'entry',
@@ -183,7 +190,7 @@ my %gnuplot_defaults =
 	 edit_type   => 'onoff'
 	 },
      grid         => {
-	 default     => 'off',
+	 default     => 'on',
 	 test        => $onoff_test, 
 	 description => 'Display grid',
 	 edit_type   => 'onoff'
@@ -202,7 +209,7 @@ my %gnuplot_defaults =
 	 choices     => ['small','medium','large']
 	 },
      align        => {
-	 default     => 'left',
+	 default     => 'center',
 	 test        => sub {$_[0]=~/^(left|right|center)$/},
 	 description => 'alignment for image in html',
 	 edit_type   => 'choice',
@@ -299,6 +306,7 @@ my %tic_defaults =
 	 },
      );
 
+my @axis_edit_order = ('color','xmin','xmax','ymin','ymax');
 my %axis_defaults = 
     (
      color   => {
@@ -476,23 +484,22 @@ sub end_gnuplot {
 	## Determine filename
 	my $tmpdir = '/home/httpd/perl/tmp/';
 	my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}.
-	    '_'.time.'_'.$$.$randnumber.'_plot.data';
+	    '_'.time.'_'.$$.$randnumber.'_plot';
 	## Write the plot description to the file
 	&write_gnuplot_file($tmpdir,$filename,$target);
 	$filename = &Apache::lonnet::escape($filename);
 	## return image tag for the plot
 	if ($target eq 'web') {
 	    $result .= <<"ENDIMAGE";
-<img src    = "/cgi-bin/plot.gif?file=$filename&output=gif" 
-     width  = "$plot{'width'}" 
+<img src    = "/cgi-bin/plot.gif?file=$filename.data&output=gif" 
+     width  = "$plot{'width'}"
      height = "$plot{'height'}"
      align  = "$plot{'align'}"
-     alt    = "image should be /cgi-bin/plot.gif?$filename" />
+     alt    = "$plot{'alttag'}" />
 ENDIMAGE
         } elsif ($target eq 'tex') {
-	    &Apache::lonnet::ssi('cgi-bin/plot.gif?file=$filename'.
-				 '&output=eps');
-	    $result = "$filename.eps";
+	    &Apache::lonnet::ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps");
+	    $result = '\\\\ \graphicspath{/home/httpd/perl/tmp/}\fbox{\includegraphics[width=9.0 cm]{'.&Apache::lonnet::unescape($filename).'.eps}} \\\\';
 	}
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_end($target,$token);
@@ -899,7 +906,8 @@ sub start_axis {
 			$tagstack->[-1]);
     } elsif ($target eq 'edit') {
 	$result .= &Apache::edit::tag_start($target,$token,'Plot Axes');
-	$result .= &edit_attributes($target,$token,\%axis_defaults);
+	$result .= &edit_attributes($target,$token,\%axis_defaults,
+				    \@axis_edit_order);
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
 	    ($token,$parstack,$safeeval,keys(%axis_defaults));
@@ -983,14 +991,16 @@ sub write_gnuplot_file {
 	$gnuplot_input .= "set output\n";
     } elsif ($target eq 'tex') {
 	$gnuplot_input .= "set term postscript eps monochrome\n";
-	$gnuplot_input .= "set output \"$filename.eps\"\n";
+	$gnuplot_input .= "set output \"/home/httpd/perl/tmp/".
+	    &Apache::lonnet::unescape($filename).".eps\"\n";
     }
     # grid
     $gnuplot_input .= 'set grid'.$/ if ($plot{'grid'} eq 'on');
     # border
     $gnuplot_input .= ($plot{'border'} eq 'on'?
 		       'set border'.$/           :
-		       'set noborder'.$/         );    # title, xlabel, ylabel
+		       'set noborder'.$/         );
+    # title, xlabel, ylabel
     # titles
     $gnuplot_input .= "set title  \"$title\"\n"  if (defined($title)) ;
     $gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel));
@@ -1019,7 +1029,7 @@ sub write_gnuplot_file {
     if (%key) {
 	$gnuplot_input .= 'set key '.$key{'pos'}.' ';
 	if ($key{'title'} ne '') {
-	    $gnuplot_input .= 'title " '.$key{'title'}.'" ';
+	    $gnuplot_input .= 'title "'.$key{'title'}.'" ';
 	} 
 	$gnuplot_input .= ($key{'box'} eq 'on' ? 'box ' : 'nobox ').$/;
     } else {
@@ -1040,11 +1050,8 @@ sub write_gnuplot_file {
 	    $gnuplot_input.= 
 		$curve->{'function'}.' title "'.
 		$curve->{'name'}.'" with '.
-		$curve->{'linestyle'};
-#
-# gnuplot's term=gif driver does not handle linewidths :(
-# . ' linewidth '. $curve->{'linewidth'};
-#
+                $curve->{'linestyle'};
+            $gnuplot_input.= ' linewidth 2 ' if ($target eq 'tex');
             if (($curve->{'linestyle'} eq 'points')      ||
                 ($curve->{'linestyle'} eq 'linespoints') ||
                 ($curve->{'linestyle'} eq 'errorbars')   ||
@@ -1058,7 +1065,7 @@ sub write_gnuplot_file {
 	    # Store data values in $datatext
 	    my $datatext = '';
 	    #   get new filename
-	    my $datafilename = "$tmpdir/$filename.$i";
+	    my $datafilename = "$tmpdir/$filename.data.$i";
 	    my $fh=Apache::File->new(">$datafilename");
 	    # Compile data
 	    my @Data = @{$curve->{'data'}};
@@ -1077,6 +1084,7 @@ sub write_gnuplot_file {
 	    $gnuplot_input.= '"'.$datafilename.'" title "'.
 		$curve->{'name'}.'" with '.
 		$curve->{'linestyle'};
+            $gnuplot_input.= ' linewidth 2 ' if ($target eq 'tex');
             if (($curve->{'linestyle'} eq 'points')      ||
                 ($curve->{'linestyle'} eq 'linespoints') ||
                 ($curve->{'linestyle'} eq 'errorbars')   ||
@@ -1089,7 +1097,7 @@ sub write_gnuplot_file {
 	}
     }
     # Write the output to a file.
-    my $fh=Apache::File->new(">$tmpdir$filename");
+    my $fh=Apache::File->new(">$tmpdir$filename.data");
     print $fh $gnuplot_input;
     close($fh);
     # That's all folks.