[LON-CAPA-cvs] cvs: loncom /homework randomlabel.pm

foxr lon-capa-cvs@mail.lon-capa.org
Tue, 31 May 2005 22:14:33 -0000


foxr		Tue May 31 18:14:33 2005 EDT

  Modified files:              
    /loncom/homework	randomlabel.pm 
  Log:
  Use gnuplot callbacks to determine if the bkg image was gnuplot.
  This is more reliable than attempting to decode the produced stuff (I hope).
  
  
Index: loncom/homework/randomlabel.pm
diff -u loncom/homework/randomlabel.pm:1.75 loncom/homework/randomlabel.pm:1.76
--- loncom/homework/randomlabel.pm:1.75	Tue May 24 06:10:16 2005
+++ loncom/homework/randomlabel.pm	Tue May 31 18:14:32 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # random labelling tool
 #
-# $Id: randomlabel.pm,v 1.75 2005/05/24 10:10:16 foxr Exp $
+# $Id: randomlabel.pm,v 1.76 2005/05/31 22:14:32 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -67,10 +67,19 @@
 my $scale_factor;		# image scale factor.
 my $label_xscale;                # Label scale factor (needed for gnuplot).
 my $label_yscale;
+my $gnuplot_background;		# This will be true if a gnuplot backgound
+
+
 BEGIN {
     &Apache::lonxml::register('Apache::randomlabel',('randomlabel','labelgroup','location','label','bgimg'));
 }
 
+# Gnuplot calback called if a </gnuplot> tag is encountered:
+#
+sub gnuplot_handler {
+    $gnuplot_background = 1;
+}
+
 sub check_int {
     # utility function to do error checking on a integer.
     my ($num,$default) = @_;
@@ -85,7 +94,10 @@
 
 my ($height_param,$width_param);
 sub start_randomlabel {
+
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    $gnuplot_background = 0;
+    &Apache::lonplot::register_callback(\&gnuplot_handler);
     my $result='';
     push (@Apache::lonxml::namespace,'randomlabel');
     ($height_param,$width_param)=(0,0);
@@ -147,6 +159,7 @@
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::end_table;
     }
+    &Apache::lonplot::clear_callback();
     return $result;
 }
 
@@ -170,8 +183,7 @@
 	    #    If it's a gnuplot the uncleaned image will have
 	    #    the text "dynamically generated plot"
 	    #    and "cgi-bin/plot.gif?"
-	    if ( ($bgimg =~ /dynamically generated plot/) &&
-		 ($bgimg =~ /cgi-bin\/plot.gif\?/) ) {
+	    if ( $gnuplot_background) {
 		&Apache::lonxml::debug("Gnuplot image!");
 		my $plot_x = $Apache::lonplot::plot{'width'};
 		my $plot_y = $Apache::lonplot::plot{'height'};
@@ -195,7 +207,7 @@
 	    $src =~ s/^\s+//s;
 	    
 
-	    if ($src =~ /^\\graphicspath/) {
+	    if ($gnuplot_background) {
 	        $height_param = $Apache::lonplot::plot{'height'};
 		my $initial_width= $Apache::lonplot::plot{'width'};
 		$width_param  = $Apache::lonplot::plot{'texwidth'};