[LON-CAPA-cvs] cvs: loncom /xml lonplot.pm

matthew lon-capa-cvs@mail.lon-capa.org
Wed, 27 Feb 2002 22:10:23 -0000


This is a MIME encoded message

--matthew1014847823
Content-Type: text/plain

matthew		Wed Feb 27 17:10:23 2002 EDT

  Modified files:              
    /loncom/xml	lonplot.pm 
  Log:
  First stab at printing.  I don't guarantee printing works yet, but at least
  $target eq 'web' will work.  Note: The only place information is returned
  to the parser is in &end_gnuplot, for both 'web' and 'tex' targets.  For
  $target eq 'tex' the name of the eps file is returned.  Currently this file
  is not actually created, but that'll be fixed in the next commit.  Trust me.
  
  
--matthew1014847823
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20020227171023.txt"

Index: loncom/xml/lonplot.pm
diff -u loncom/xml/lonplot.pm:1.50 loncom/xml/lonplot.pm:1.51
--- loncom/xml/lonplot.pm:1.50	Wed Feb 27 11:54:58 2002
+++ loncom/xml/lonplot.pm	Wed Feb 27 17:10:23 2002
@@ -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.51 2002/02/27 22:10:23 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -413,7 +413,7 @@
 	     ('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 @@
     &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,19 @@
 	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";
+	if ($target eq 'web') {
+	    $result .= <<"ENDIMAGE";
 <img src    = "/cgi-bin/plot.gif?$filename" 
      width  = "$plot{'width'}" 
      height = "$plot{'height'}"
      align  = "$plot{'align'}"
      alt    = "image should be /cgi-bin/plot.gif?$filename" />
 ENDIMAGE
+        } elsif ($target eq 'tex') {
+	    $result = "$filename.eps";
+	}
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_end($target,$token);
     }
@@ -469,7 +473,7 @@
 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 +493,7 @@
 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 +504,7 @@
 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 +524,7 @@
 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 +536,7 @@
 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 +555,7 @@
 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 +566,7 @@
 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 +589,7 @@
 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 +599,7 @@
 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 +622,7 @@
 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 +633,7 @@
 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 +656,7 @@
 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 +667,7 @@
 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 +696,7 @@
 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 +709,7 @@
     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 +734,7 @@
     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 +745,7 @@
 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 <function> precludes use of <data>.  The <data> will be omitted in favor of the <function> declaration.');
 	    delete $curves[-1]->{'data'} ;
@@ -765,7 +769,7 @@
 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 +780,7 @@
 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 <data> precludes use of .'.
 	    '<function>.  The <function> will be omitted in favor of '.
@@ -840,7 +844,7 @@
 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 +855,7 @@
 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 +874,7 @@
 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 +920,7 @@
 
 ##------------------------------------------------------- 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 +934,18 @@
 		       $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

--matthew1014847823--