--- loncom/xml/lonplot.pm	2003/09/10 13:50:29	1.88
+++ loncom/xml/lonplot.pm	2003/10/30 20:52:54	1.93
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Dynamic plot
 #
-# $Id: lonplot.pm,v 1.88 2003/09/10 13:50:29 sakharuk Exp $
+# $Id: lonplot.pm,v 1.93 2003/10/30 20:52:54 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -34,6 +34,8 @@
 package Apache::lonplot;
 
 use strict;
+use warnings FATAL=>'all';
+no warnings 'uninitialized';
 use Apache::File;
 use Apache::response;
 use Apache::lonxml;
@@ -113,7 +115,7 @@ my $words_test     = sub {$_[0]=~s/\s+/
 ###################################################################
 my @gnuplot_edit_order = 
     qw/alttag bgcolor fgcolor height width font transparent grid samples 
-    border align texwidth plottype/;
+    border align texwidth texfont plottype/;
 
 my $gnuplot_help_text = <<"ENDPLOTHELP";
 <p>
@@ -230,6 +232,13 @@ my %gnuplot_defaults =
          edit_type   => 'entry',
          size        => '5'
          },
+     texfont     => {
+         default     => '22',
+         test        => $int_test,
+         description => 'Font size to use in TeX output (pts):',
+         edit_type   => 'choice',
+         choices     => [qw/10 12 14 16 18 20 22 24 26 28 30 32 34 36/],
+         },
      plottype  => {
 	 default     => 'Cartesian',
 	 test        => sub {$_[0]=~/^(Polar|Cartesian)$/},
@@ -289,43 +298,51 @@ my %label_defaults =
      }
      );
 
-my @tic_edit_order = ('location','mirror','start','increment','end');
+my @tic_edit_order = ('location','mirror','start','increment','end',
+                      'minorfreq');
 my %tic_defaults =
     (
      location => {
 	 default => 'border', 
 	 test => sub {$_[0]=~/^(border|axis)$/},
-	 description => 'Location of tick marks',
+	 description => 'Location of major tic marks',
 	 edit_type   => 'choice',
 	 choices     => ['border','axis']
 	 },
      mirror => {
 	 default => 'on', 
 	 test => $onoff_test,
-	 description => 'mirror ticks on opposite axis?',
+	 description => 'mirror tics on opposite axis?',
 	 edit_type   => 'onoff'
 	 },
      start => {
 	 default => '-10.0',
 	 test => $real_test,
-	 description => 'Start ticks at',
+	 description => 'Start major tics at',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      increment => {
 	 default => '1.0',
 	 test => $real_test,
-	 description => 'Place a tick every',
+	 description => 'Place a major tic every',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      end => {
 	 default => ' 10.0',
 	 test => $real_test,
-	 description => 'Stop ticks at ',
+	 description => 'Stop major tics at ',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
+     minorfreq => {
+	 default => '0',
+	 test => $int_test,
+	 description => 'Number of minor tics between major tic marks',
+	 edit_type   => 'entry',
+	 size        => '10'
+	 },         
      );
 
 my @axis_edit_order = ('color','xmin','xmax','ymin','ymax');
@@ -456,10 +473,10 @@ my %curve_defaults =
 my (%plot,%key,%axis,$title,$xlabel,$ylabel,@labels,@curves,%xtics,%ytics);
 
 sub start_gnuplot {
-    %plot    = ();      %key     = ();      %axis   = (); 
-    $title   = undef;   $xlabel  = undef;   $ylabel = undef;
-    $#labels = -1;      $#curves = -1;
-    %xtics    = ();      %ytics    = ();
+    undef(%plot);   undef(%key);    undef(%axis);
+    undef($title);  undef($xlabel); undef($ylabel);
+    undef(@labels); undef(@curves);
+    undef(%xtics);  undef(%ytics);
     #
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
@@ -520,8 +537,8 @@ sub end_gnuplot {
      alt    = "$plot{'alttag'}" />
 ENDIMAGE
         } elsif ($target eq 'tex') {
-	    &Apache::lonnet::ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps");
-
+	    #might be inside the safe space, register the URL for later
+	    &Apache::lonxml::register_ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps");
 	    $result = '\graphicspath{{/home/httpd/perl/tmp/}}\includegraphics[width='.$plot{'texwidth'}.' mm]{'.&Apache::lonnet::unescape($filename).'.eps}';
 	}
     } elsif ($target eq 'edit') {
@@ -642,9 +659,8 @@ sub start_title {
 	    &Apache::edit::start_spanning_row().
 	    &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
-	my $text=$$parser[-1]->get_text("/title");
 	$result.=&Apache::edit::rebuild_tag($token);
-	$result.=&Apache::edit::modifiedfield($token);
+	$result.=&Apache::edit::modifiedfield("/title",$parser);
     }
     return $result;
 }
@@ -676,9 +692,8 @@ sub start_xlabel {
 	    &Apache::edit::start_spanning_row().
 	    &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
-	my $text=$$parser[-1]->get_text("/xlabel");
 	$result.=&Apache::edit::rebuild_tag($token);	
-	$result.=&Apache::edit::modifiedfield($token);
+	$result.=&Apache::edit::modifiedfield("/xlabel",$parser);
     }
     return $result;
 }
@@ -711,9 +726,8 @@ sub start_ylabel {
 	    &Apache::edit::start_spanning_row().
 	    &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
-	my $text=$$parser[-1]->get_text("/ylabel");
 	$result.=&Apache::edit::rebuild_tag($token);
-	$result.=&Apache::edit::modifiedfield($token);
+	$result.=&Apache::edit::modifiedfield("/ylabel",$parser);
     }
     return $result;
 }
@@ -753,8 +767,7 @@ sub start_label {
 	&Apache::edit::get_new_args
 	    ($token,$parstack,$safeeval,keys(%label_defaults));
 	$result.=&Apache::edit::rebuild_tag($token);
-	my $text=$$parser[-1]->get_text("/label");
-	$result.=&Apache::edit::modifiedfield($token);
+	$result.=&Apache::edit::modifiedfield("/label",$parser);
     }
     return $result;
 }
@@ -832,8 +845,7 @@ sub start_function {
 	    &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
 	$result.=&Apache::edit::rebuild_tag($token);
-	my $text=$$parser[-1]->get_text("/function");
-	$result.=&Apache::edit::modifiedfield($token);
+	$result.=&Apache::edit::modifiedfield("/function",$parser);
     }
     return $result;
 }
@@ -910,8 +922,7 @@ sub start_data {
 	    &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
 	$result.=&Apache::edit::rebuild_tag($token);
-	my $text=$$parser[-1]->get_text("/data");
-	$result.=&Apache::edit::modifiedfield($token);
+	$result.=&Apache::edit::modifiedfield("/data",$parser);
     }
     return $result;
 }
@@ -977,7 +988,7 @@ sub set_defaults {
 sub get_attributes{
     my ($values,$defaults,$parstack,$safeeval,$tag) = @_;
     foreach my $attr (keys(%{$defaults})) {
-	if ($attr eq 'texwidth') {
+	if ($attr eq 'texwidth' || $attr eq 'texfont') {
 	    $values->{$attr} = 
 		&Apache::lonxml::get_param($attr,$parstack,$safeeval,undef,1);
 	} else {
@@ -1004,6 +1015,7 @@ sub write_gnuplot_file {
     my ($tmpdir,$filename,$target)= @_;
     my $gnuplot_input = '';
     my $curve;
+    my $pt = $plot{'texfont'};
     # Collect all the colors
     my @Colors;
     push @Colors, $plot{'bgcolor'};
@@ -1024,7 +1036,7 @@ sub write_gnuplot_file {
 	# set output
 	$gnuplot_input .= "set output\n";
     } elsif ($target eq 'tex') {
-	$gnuplot_input .= "set term postscript eps monochrome solid \"Helvetica\" 25 \n";
+	$gnuplot_input .= "set term postscript eps monochrome solid \"Helvetica\" $pt \n";
 	$gnuplot_input .= "set output \"/home/httpd/perl/tmp/".
 	    &Apache::lonnet::unescape($filename).".eps\"\n";
     }
@@ -1044,9 +1056,15 @@ sub write_gnuplot_file {
     $gnuplot_input .= "set samples $plot{'samples'}\n";
     # title, xlabel, ylabel
     # titles
-    $gnuplot_input .= "set title  \"$title\" font \"Helvetica,25pt\"\n"  if (defined($title)) ;
-    $gnuplot_input .= "set xlabel \"$xlabel\" font \"Helvetica,25pt\" \n" if (defined($xlabel));
-    $gnuplot_input .= "set ylabel \"$ylabel\" font \"Helvetica,25pt\"\n" if (defined($ylabel));
+    if ($target eq 'tex') {
+        $gnuplot_input .= "set title  \"$title\" font \"Helvetica,".$pt."pt\"\n"  if (defined($title)) ;
+        $gnuplot_input .= "set xlabel \"$xlabel\" font \"Helvetica,".$pt."pt\" \n" if (defined($xlabel));
+        $gnuplot_input .= "set ylabel \"$ylabel\" font \"Helvetica,".$pt."pt\"\n" if (defined($ylabel));
+    } else {
+        $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));
+    }
     # tics
     if (%xtics) {    
 	$gnuplot_input .= "set xtics $xtics{'location'} ";
@@ -1054,6 +1072,9 @@ sub write_gnuplot_file {
 	$gnuplot_input .= "$xtics{'start'}, ";
 	$gnuplot_input .= "$xtics{'increment'}, ";
 	$gnuplot_input .= "$xtics{'end'}\n";
+        if ($xtics{'minorfreq'} != 0) {
+            $gnuplot_input .= "set mxtics ".$xtics{'minorfreq'}."\n";
+        } 
     }
     if (%ytics) {    
 	$gnuplot_input .= "set ytics $ytics{'location'} ";
@@ -1061,6 +1082,9 @@ sub write_gnuplot_file {
 	$gnuplot_input .= "$ytics{'start'}, ";
 	$gnuplot_input .= "$ytics{'increment'}, ";
         $gnuplot_input .= "$ytics{'end'}\n";
+        if ($ytics{'minorfreq'} != 0) {
+            $gnuplot_input .= "set mytics ".$ytics{'minorfreq'}."\n";
+        } 
     }
     # axis
     if (%axis) {
@@ -1081,7 +1105,7 @@ sub write_gnuplot_file {
     my $label;
     foreach $label (@labels) {
 	$gnuplot_input .= 'set label "'.$label->{'text'}.'" at '.
-	    $label->{'xpos'}.','.$label->{'ypos'}.' '.$label->{'justify'}.' font "Helvetica,25pt"'.$/ ;
+	    $label->{'xpos'}.','.$label->{'ypos'}.' '.$label->{'justify'}.' font "Helvetica,'.$pt.'pt"'.$/ ;
     }
     if ($target eq 'tex') {
         $gnuplot_input .="set size 1,".$plot{'height'}/$plot{'width'}*1.38;