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

albertel lon-capa-cvs@mail.lon-capa.org
Wed, 11 Feb 2004 21:58:15 -0000


albertel		Wed Feb 11 16:58:15 2004 EDT

  Modified files:              
    /loncom/homework	randomlabel.pm 
  Log:
  - supports a <bgimg> inside <randomlabel>
  - supports <bgimg><labels> having <gnuplots> inside  (and probably <randomlabel>)
   
  
  
Index: loncom/homework/randomlabel.pm
diff -u loncom/homework/randomlabel.pm:1.56 loncom/homework/randomlabel.pm:1.57
--- loncom/homework/randomlabel.pm:1.56	Thu Jan  8 19:53:19 2004
+++ loncom/homework/randomlabel.pm	Wed Feb 11 16:58:15 2004
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # random labelling tool
 #
-# $Id: randomlabel.pm,v 1.56 2004/01/09 00:53:19 www Exp $
+# $Id: randomlabel.pm,v 1.57 2004/02/11 21:58:15 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -67,7 +67,7 @@
 my $cgi_id;
 
 BEGIN {
-    &Apache::lonxml::register('Apache::randomlabel',('randomlabel','labelgroup','location','label'));
+    &Apache::lonxml::register('Apache::randomlabel',('randomlabel','labelgroup','location','label','bgimg'));
 }
 
 sub check_int {
@@ -93,10 +93,6 @@
 	    $bgimg='/home/httpd/html/adm/lonKaputt/lonlogo_broken.gif';
 	}
     }
-    my $w= &check_int(&Apache::lonxml::get_param('width',$parstack,$safeeval));
-    my $h= &check_int(&Apache::lonxml::get_param('height',$parstack,$safeeval));
-    my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,1));
-    if (!$texwidth) { $texwidth=90; }
     $Apache::randomlabel::tlabel_cnt=0;
     $Apache::randomlabel::ilabel_cnt=0;
     if ($target eq 'web') {
@@ -104,36 +100,11 @@
 	%args=();
 	$args{"cgi.$cgi_id.BGIMG"}=&Apache::lonnet::escape($bgimg);
     } elsif ($target eq 'tex') {
-	my $newbgimg = $bgimg;
-	$bgimg=~s/\.(gif|jpg|png|jpeg)$/\.eps/i;
-	$bgimg= &Apache::lonnet::filelocation($bgimg);
-	$bgimg=~s|http:/[^/]*|/home/httpd/html|;
-	$bgimg=~s|/$||;
-	#if no eps file try to replicate it
-	if (not-e $bgimg) {
-	    if (&Apache::lonnet::repcopy($bgimg) ne OK ) {
-		#if replication failed try to find ps file
-		$bgimg=~s/\.eps$/\.ps/;
-		#if no ps file try to replicate it
-		if (not -e $bgimg &&
-		    &Apache::lonnet::repcopy($bgimg) ne OK) {
-                    #if replication failed try to produce eps file dynamically
-		    $bgimg=~s/\.ps$/\.eps/;
-		    my $temp_file;
-		    my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
-		    $temp_file = Apache::File->new('>>'.$filename);
-		    $newbgimg =~ s|(.*)/res/|/home/httpd/html/res/|;
-		    print $temp_file "$newbgimg\n";
-		    $bgimg=~s|/home/httpd/html/res|/home/httpd/prtspool|;
-		    $bgimg=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
-		}
-	    }
-	}
-	$bgimg=~s|/$||;
-	my $dirtywidth=$texwidth+5;
-	$result.='\vspace*{2mm}\noindent \parbox{'.$dirtywidth.' mm}{  \noindent \epsfxsize='.
-	    $texwidth.' mm \epsffile{'.$bgimg.'}\setlength{\unitlength}{1mm}  \begin{picture}('.
-	    $texwidth.','.$texwidth*$h/$w.')(0,-'.$texwidth*$h/$w.')';
+	my $w= &check_int(&Apache::lonxml::get_param('width',$parstack,$safeeval));
+	my $h= &check_int(&Apache::lonxml::get_param('height',$parstack,$safeeval));
+	my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,1));
+	if (!$texwidth) { $texwidth=90; }
+	$result.=&make_eps_image($bgimg,$texwidth,$h,$w);
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_start($target,$token);
 	$Apache::edit::bgimgsrc=
@@ -184,6 +155,71 @@
     return $result;
 }
 
+sub start_bgimg {
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    my $result='';
+    if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { 
+	&Apache::lonxml::startredirection; 
+    }
+    return $result;
+}
+
+sub end_bgimg {
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    my $result='';
+    if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { 
+	my $bgimg=&Apache::lonxml::endredirection; 
+	&Apache::lonnet::logthis("bgimg is -$bgimg-");
+	if ($target eq 'web') {
+	    $bgimg=&Apache::imageresponse::clean_up_image($bgimg);
+	    $args{"cgi.$cgi_id.BGIMG"}=&Apache::lonnet::escape($bgimg);
+	} elsif ($target eq 'tex') {
+	    my $w=&check_int(&Apache::lonxml::get_param('width',$parstack,$safeeval,-2));
+	    my $h=&check_int(&Apache::lonxml::get_param('height',$parstack,$safeeval,-2));
+	    my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,-2));
+	    if (!$texwidth) { $texwidth=90; }
+	    $result.=&make_eps_image($bgimg,$texwidth,$h,$w);
+	}
+    }
+    return $result;
+}
+
+sub make_eps_image {
+    my ($bgimg,$texwidth,$h,$w)=@_;
+    my $newbgimg = $bgimg;
+    $bgimg=~s/\.(gif|jpg|png|jpeg)$/\.eps/i;
+    $bgimg= &Apache::lonnet::filelocation($bgimg);
+    $bgimg=~s|http:/[^/]*|/home/httpd/html|;
+    $bgimg=~s|/$||;
+    #if no eps file try to replicate it
+    if (not-e $bgimg) {
+	if (&Apache::lonnet::repcopy($bgimg) ne OK ) {
+	    #if replication failed try to find ps file
+	    $bgimg=~s/\.eps$/\.ps/;
+	    #if no ps file try to replicate it
+	    if (not -e $bgimg &&
+		&Apache::lonnet::repcopy($bgimg) ne OK) {
+		#if replication failed try to produce eps file dynamically
+		$bgimg=~s/\.ps$/\.eps/;
+		my $temp_file;
+		my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
+		$temp_file = Apache::File->new('>>'.$filename);
+		$newbgimg =~ s|(.*)/res/|/home/httpd/html/res/|;
+		print $temp_file "$newbgimg\n";
+		$bgimg=~s|/home/httpd/html/res|/home/httpd/prtspool|;
+		$bgimg=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
+	    }
+	}
+    }
+    $bgimg=~s|/$||;
+    my $dirtywidth=$texwidth+5;
+    my $result.='\vspace*{2mm}\noindent \parbox{'.$dirtywidth.
+	' mm}{  \noindent \epsfxsize='.$texwidth.' mm \epsffile{'.$bgimg.
+	'}\setlength{\unitlength}{1mm}  \begin{picture}('.
+	$texwidth.','.$texwidth*$h/$w.')(0,-'.$texwidth*$h/$w.')';
+    return $result;
+}
+
 sub adjust_textwidth {
     my $texwidth=shift; 
     my $pagewidth=$ENV{'form.textwidth'};
@@ -379,18 +415,7 @@
     my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval,-2);
     if ($target eq 'web' || $target eq 'tex' ||
 	$target eq 'grade' || $target eq 'answer' || $target eq 'analyze') {
-	my $ltext=&Apache::lonxml::get_all_text("/label",$parser);
-	$ltext=&Apache::run::evaluate($ltext,$safeeval,$$parstack[-1]);
-	if ($type eq 'image') {
-	    &Apache::lonxml::debug("Turning $ltext, $Apache::lonxml::pwd[-1]");
-	    $ltext=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],
-						 $ltext);
-	    &Apache::lonxml::debug("into $ltext");
-	    my $description = &Apache::lonxml::get_param('description',
-							 $parstack,$safeeval);
-	    push(@Apache::randomlabel::description,$description);
-	}
-	push(@Apache::randomlabel::label_arr,$ltext);
+	&Apache::lonxml::startredirection; 
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_start($target,$token,"$type Label");
 	my $text=&Apache::lonxml::get_all_text("/label",$parser);
@@ -424,7 +449,24 @@
 sub end_label {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my @result;
-    if ($target eq 'edit') { @result=('','no') }
+    if ($target eq 'edit') {
+	@result=('','no') ;
+    } elsif ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
+	     $target eq 'answer' || $target eq 'analyze') {
+	my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval,-2);
+	my $ltext=&Apache::lonxml::endredirection; 
+	if ($type eq 'image') {
+	    &Apache::lonxml::debug("Turning $ltext, $Apache::lonxml::pwd[-1]");
+	    $ltext=&Apache::imageresponse::clean_up_image($ltext);
+#	    $ltext=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],
+#						 $ltext);
+	    &Apache::lonxml::debug("into $ltext");
+	    my $description = &Apache::lonxml::get_param('description',
+							 $parstack,$safeeval);
+	    push(@Apache::randomlabel::description,$description);
+	}
+	push(@Apache::randomlabel::label_arr,$ltext);
+    }
     return @result;
 }