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

albertel lon-capa-cvs@mail.lon-capa.org
Thu, 10 Feb 2005 23:00:10 -0000


This is a MIME encoded message

--albertel1108076410
Content-Type: text/plain

albertel		Thu Feb 10 18:00:10 2005 EDT

  Modified files:              
    /loncom/xml	londefdef.pm 
    /loncom/homework	imageresponse.pm randomlabel.pm 
  Log:
  - trying to make all of the eps image getting gernation etc have a common body of code between <randomlabel>'s bgimg, <img> and <imageresponse>'s <image>
  
  
--albertel1108076410
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20050210180010.txt"

Index: loncom/xml/londefdef.pm
diff -u loncom/xml/londefdef.pm:1.255 loncom/xml/londefdef.pm:1.256
--- loncom/xml/londefdef.pm:1.255	Wed Feb  9 14:51:43 2005
+++ loncom/xml/londefdef.pm	Thu Feb 10 18:00:09 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.255 2005/02/09 19:51:43 albertel Exp $
+# $Id: londefdef.pm,v 1.256 2005/02/10 23:00:09 albertel Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -2491,40 +2491,15 @@
 	}
 	&Apache::lonxml::debug("LaTeX rendering = $latex_rendering");
 
-	my $oldSRC=$src;
-        $oldSRC=~s/\.(gif|jpg|png)$/\.eps/;
-	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
 	#if original gif/jpg/png file exist do following:
+	my ($path,$file) = &get_eps_image($src);
+	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
 	if (-e $src) {
-	    #what is the image size?
-	    my $width_param=&image_width($src,$scaling,$parstack,$safeeval);
-	    my $height_param=&image_height($src,$scaling,$parstack,$safeeval);
-            my ($file,$path)=&file_path($src); 
-	    my $newsrc = $src;
-	    $newsrc =~ s/\.(gif|jpg|png)$/.eps/i;
-	    &Apache::lonnet::repcopy($oldSRC);
-	    $file=~s/\.(gif|jpg|png)$/.eps/i;
-	    #where can we find the picture?
-	    if (-e $newsrc) {
-		#eps counterpart for image exist 
-		if ($path) {
-		    $currentstring .= '\graphicspath{{'.$path.'}}'
-			             .'\includegraphics[width='.$width_param.' mm,height='.$height_param.'mm]{'.$file.'} ';
-		}
-	    } else {
-		#there is no eps counterpart for image - check for ps one
-		$newsrc =~ s/\.eps$/\.ps/;
-		if (-e $newsrc) {
-		    #ps counterpart for image exist 
-		    $file =~ s/\.eps$/\.ps/;
-		    if ($path) {
-			$currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
-		    }
-		} else {
-		    #care about eps dynamical generation
-		    $currentstring.=&eps_generation($src,$file,$width_param);
-		}
-	    }
+	    my ($height_param,$width_param)=
+		&image_size($src,0.3,$parstack,$safeeval);
+	    $currentstring .= '\graphicspath{{'.$path.'}}'
+		.'\includegraphics[width='.$width_param.' mm,height='.$height_param.'mm]{'.$file.'} ';
+
 	    #    If there's an alignment specification we need to honor it here.
 	    #    For the horizontal alignments, we will also honor the
 	    #    value of the latex specfication.  The default is parbox,
@@ -2563,17 +2538,11 @@
 		$alt=&Apache::lonmeta::alttag($Apache::lonxml::pwd[-1],$src);
 	    }
 
-	    if ($alt) {
-		$currentstring .= ' '.$alt.' ';
-	    } else {
-		#<allow> tag will care about replication 
-	    }
+	    if ($alt) { $currentstring .= ' '.$alt.' '; }
 	}
 
 	# And here's where the semi-quote breaks down: allow the user
         # to edit the beast as well by rendering the problem for edit:
-
-
     } elsif ($target eq 'edit') {
 	$currentstring .=&Apache::edit::tag_start($target,$token);
 	$currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).
@@ -3780,20 +3749,25 @@
 }
 
 sub image_size {
-    my ($src,$scaling,$parstack,$safeeval)=@_;
+    my ($src,$scaling,$parstack,$safeeval,$depth,$cis)=@_;
     #size of image from gif/jpg/jpeg/png 
+    $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
     my $image = Image::Magick->new;
     my $current_figure = $image->Read($src);
     my $width_param = $image->Get('width') * $scaling;;
     my $height_param = $image->Get('height') * $scaling;;
-    undef $image;
+    undef($image);
     #do we have any specified LaTeX size of the picture?
-    my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval);
-    my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval);
+    my $toget='TeXwidth'; if ($cis) { $toget=lc($toget); }
+    my $TeXwidth = &Apache::lonxml::get_param($toget,$parstack,
+					      $safeeval,$depth,$cis);
+    $toget='TeXheight'; if ($cis) { $toget=lc($toget); }
+    my $TeXheight = &Apache::lonxml::get_param($toget,$parstack,
+					       $safeeval,$depth,$cis);
     #do we have any specified web size of the picture?
     my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval,
-					   undef,1);
-    if ($TeXwidth ne '') {  
+					   $depth,1);
+    if ($TeXwidth) { 
 	my $old_width_param=$width_param;
 	if ($TeXwidth=~/(\d+)\s*\%/) {
 	    $width_param = $1*$ENV{'form.textwidth'}/100;
@@ -3801,12 +3775,12 @@
 	    $width_param = $TeXwidth;
 	}
 	$height_param=$TeXwidth/$old_width_param*$height_param;
-    } elsif ($TeXheight ne '') {
+    } elsif ($TeXheight) {
 	$height_param = $TeXheight;
 	$width_param  = $TeXheight/$height_param*$width_param;
-    } elsif ($width ne '') {
+    } elsif ($width) {
 	my $old_width_param=$width_param;
-	$width_param = $width*$scaling;      
+	$width_param = $width*$scaling;
         $height_param=$width_param/$old_width_param*$height_param;
     }
     if ($width_param > $ENV{'form.textwidth'}) {
@@ -3829,6 +3803,34 @@
     return $height;
 }
 
+sub get_eps_image {
+    my ($src)=@_;
+    my $orig_src=$src;
+    $src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i;
+    $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+    if (! -e $src) {
+	if (&Apache::lonnet::repcopy($src) ne OK ) {
+	    #if replication failed try to find ps file
+	    $src=~s/\.eps$/\.ps/;
+	    #if no ps file try to replicate it
+	    if (not -e $src &&
+		&Apache::lonnet::repcopy($src) ne OK) {
+		#if replication failed try to produce eps file dynamically
+		$src=~s/\.ps$/\.eps/;
+		my $temp_file;
+		open(FILE,">>/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat");
+		my $newsrc=$orig_src;
+		$newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;
+		print FILE "$newsrc\n";
+		$src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
+		$src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
+	    }
+	}
+    }
+    my ($path,$file)=($src=~m|(.*)/([^/]*)$|);
+    return ($path.'/',$file);
+}
+
 sub eps_generation {
     my ($src,$file,$width_param) = @_;	     
     my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
Index: loncom/homework/imageresponse.pm
diff -u loncom/homework/imageresponse.pm:1.61 loncom/homework/imageresponse.pm:1.62
--- loncom/homework/imageresponse.pm:1.61	Mon Jan 31 18:09:55 2005
+++ loncom/homework/imageresponse.pm	Thu Feb 10 18:00:10 2005
@@ -2,7 +2,7 @@
 # The LearningOnline Network with CAPA
 # image click response style
 #
-# $Id: imageresponse.pm,v 1.61 2005/01/31 23:09:55 albertel Exp $
+# $Id: imageresponse.pm,v 1.62 2005/02/10 23:00:10 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -433,7 +433,7 @@
     my $result;
     my $name = $Apache::imageresponse::curname;
     if ($target eq 'web') {
-	my $image = &Apache::lonxml::endredirection;
+	my $image = &Apache::lonxml::endredirection();
 	&Apache::lonxml::debug("original image is $image");
 	if ( $Apache::imageresponse::conceptgroup
 	     #&& !&Apache::response::showallfoils()
@@ -443,7 +443,7 @@
 	    $Apache::response::foilgroup{"$name.image"} = $image;
 	}
     } elsif ($target eq 'analyze') {
-	my $image = &Apache::lonxml::endredirection;
+	my $image = &Apache::lonxml::endredirection();
 	if ( $Apache::imageresponse::conceptgroup
 	     #&& !&Apache::response::showallfoils()
 	     ) {
@@ -454,75 +454,11 @@
     } elsif ($target eq 'edit') {
 	$result=&Apache::edit::end_table();
     } elsif ($target eq 'tex') {
-	my $src = &Apache::lonxml::endredirection;
-	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
-	my $width_param = '';
-	my $height_param = '';
-	my $scaling = .3;
-	my $image = Image::Magick->new;
-	my $current_figure = $image->Read($src);
-	$width_param = $image->Get('width') * $scaling;;
-	$height_param = $image->Get('height') * $scaling;;
-	undef $image;
-	my $epssrc = $src;
-	$epssrc =~ s/(\.gif|\.jpg)$/\.eps/i;
-	if (not -e $epssrc) {
-	    my $localfile = $epssrc;
-	    $localfile =~ s/.*(\/res)/$1/;	
-	    my $file;
-	    my $path;	
-	    if ($localfile =~ m!(.*)/([^/]*)$!) {
-		$file = $2;
-		$path = $1.'/'; 
-	    }	
-	    my $signal_eps = 0;
-	    my @content_directory = &Apache::lonnet::dirlist($path);
-	    for (my $iy=0;$iy<=$#content_directory;$iy++) {
-		my @tempo_array = split(/&/,$content_directory[$iy]);
-		$content_directory[$iy] = $tempo_array[0];
-		if ($file eq $tempo_array[0]) {
-		    $signal_eps = 1;
-		    last;
-		}
-	    }
-	    if ($signal_eps) {
-		my $eps_file = &Apache::lonnet::getfile($localfile);
-	    } else {
-		$localfile = $src;
-		$localfile =~ s/.*(\/res)/$1/;	
-		my $as = &Apache::lonnet::getfile($src);		      
-	    }
-	}
-	my $file;
-	my $path;	
-	if ($src =~ m!(.*)/([^/]*)$!) {
-	    $file = $2;
-	    $path = $1.'/'; 
-	}
-	my $newsrc = $src;
-	$newsrc =~ s/(\.gif|\.jpg|\.jpeg)$/\.eps/i;
-	$file=~s/(\.gif|\.jpg|\.jpeg)$/\.eps/i;
-	#do we have any specified size of the picture?
-	my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval); 
-	my $TeXheight = &Apache::lonxml::get_param('TeXheight',$parstack,$safeeval); 
-	my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval);
-	if ($TeXwidth ne '') { 
-	    $width_param = $TeXwidth; 
-	} elsif ($TeXheight ne '') { 
-	    $width_param = $TeXheight/$height_param*$width_param;
-	} elsif ($width ne '') {
-	    $width_param = $width*$scaling;      
-	}
-	$width_param=&Apache::randomlabel::adjust_textwidth($width_param);
-	#where can we find the picture?
-	if (-e $newsrc) {
-	    if ($path) {
-		$Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
-	    }
-	} else {
-	    #care about eps dynamical generation
-	    $Apache::response::foilgroup{"$name.image"}='\vskip 0 mm '.&Apache::londefdef::eps_generation($src,$file,$width_param);
-	}
+	my $src = &Apache::lonxml::endredirection();
+	my ($path,$file) = &Apache::londefdef::get_eps_image($src);
+	my ($height_param,$width_param)=
+	    &Apache::londefdef::image_size($src,0.3,$parstack,$safeeval);
+	$Apache::response::foilgroup{"$name.image"} ='\vskip 0 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
     } 
     return $result;
 }
Index: loncom/homework/randomlabel.pm
diff -u loncom/homework/randomlabel.pm:1.63 loncom/homework/randomlabel.pm:1.64
--- loncom/homework/randomlabel.pm:1.63	Fri Dec  3 20:15:41 2004
+++ loncom/homework/randomlabel.pm	Thu Feb 10 18:00:10 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # random labelling tool
 #
-# $Id: randomlabel.pm,v 1.63 2004/12/04 01:15:41 albertel Exp $
+# $Id: randomlabel.pm,v 1.64 2005/02/10 23:00:10 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -82,10 +82,12 @@
     return $num;
 }
 
+my ($height_param,$width_param);
 sub start_randomlabel {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     push (@Apache::lonxml::namespace,'randomlabel');
+    ($height_param,$width_param)=(0,0);
     my $bgimg= &Apache::lonxml::get_param('bgimg',$parstack,$safeeval);
     if ( defined($bgimg) && $bgimg !~ /^http:/ ) {
 	$bgimg=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$bgimg);
@@ -98,12 +100,8 @@
 	$cgi_id=&Apache::loncommon::get_cgi_id();
 	%args=();
 	$args{"cgi.$cgi_id.BGIMG"}=&Apache::lonnet::escape($bgimg);
-    } elsif ($target eq 'tex') {
-	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 'tex' && defined($bgimg)) {
+	$result.=&make_eps_image($bgimg,$parstack,$safeeval);
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_start($target,$token);
 	$Apache::edit::bgimgsrc=
@@ -140,13 +138,7 @@
 	&Apache::lonnet::appenv(%args);
     } elsif ($target eq 'tex') {
 	$result='\end{picture}\\\\';
-	my $height=&Apache::lonxml::get_param('height',$parstack,$safeeval);
-	my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval);
-	my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,1));
-        if (!$texwidth) { $texwidth=90; }
-	# what if width is undefined?
-	my $howtoskipback = $texwidth*$height/$width;
-	$result.= ' \vskip -'.$howtoskipback.' mm }  \\\\ ';
+	$result.= ' \vskip -'.$height_param.' mm }  \\\\ ';
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::end_table;
     }
@@ -157,7 +149,7 @@
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
     if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { 
-	&Apache::lonxml::startredirection; 
+	&Apache::lonxml::startredirection(); 
     }
     return $result;
 }
@@ -166,65 +158,32 @@
     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; 
+	my $bgimg=&Apache::lonxml::endredirection(); 
 	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);
+	    $result.=&make_eps_image($bgimg,$parstack,$safeeval,-2);
 	}
     }
     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 ($bgimg,$parstack,$safeeval,$depth)=@_;
+    my ($path,$file) = &Apache::londefdef::get_eps_image($bgimg);
+    ($height_param,$width_param)=
+	&Apache::londefdef::image_size($bgimg,0.3,$parstack,$safeeval,
+				       $depth,1);
+    my $dirtywidth=$width_param+5;
     my $result.='\vspace*{2mm}\noindent \parbox{'.$dirtywidth.
-	' mm}{  \noindent \epsfxsize='.$texwidth.' mm \epsffile{'.$bgimg.
+	' mm}{  \noindent \epsfxsize='.$width_param.
+	' mm \epsffile{'.$path.$file.
 	'}\setlength{\unitlength}{1mm}  \begin{picture}('.
-	$texwidth.','.$texwidth*$h/$w.')(0,-'.$texwidth*$h/$w.')';
+	$width_param.','.$height_param.')(0,-'.$height_param.')';
     return $result;
 }
 
-sub adjust_textwidth {
-    my $texwidth=shift; 
-    my $pagewidth=$ENV{'form.textwidth'};
-    $pagewidth=~s/\s*mm\s*$//;
-    if ($texwidth>$pagewidth) {$texwidth=$pagewidth;}
-    return $texwidth;
-}
-
 sub start_labelgroup {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
@@ -325,11 +284,8 @@
 	my $WY1=0; #  Web y-coord. of (ULC)
 	my $wwidth=&Apache::lonxml::get_param('width',$parstack,$safeeval,-2);
 	my $wheight=&Apache::lonxml::get_param('height',$parstack,$safeeval,-2);
-	my $texwidth=&adjust_textwidth(&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,-2,1));
 	my $TeXsize=&Apache::lonxml::get_param('TeXsize',$parstack,$safeeval);
 	if (!defined($TeXsize)) { $TeXsize='\\normalsize'; }
-	if (!$texwidth) { $texwidth=90; }
-	my $texheight=$texwidth*($wheight/$wwidth);
 	
 	my @idx_arr = (0 .. $#Apache::randomlabel::label_arr);
 	&Apache::structuretags::shuffle(\@idx_arr);
@@ -342,10 +298,10 @@
 	    my $y = $Apache::randomlabel::ycoord[$i]-3.5;
 	    my $value = $Apache::randomlabel::value[$i];
 	    #x latex coordinate
-	    my $tcX=($x)*($texwidth/$wwidth);
+	    my $tcX=($x)*($width_param/$wwidth);
 	    #y latex coordinate
             #      my $ratio=($wwidth > 0 ? $wheight/$wwidth : 1 );
-	    my $tcY=$texheight-$y*($texheight/$wheight);
+	    my $tcY=$height_param-$y*($height_param/$wheight);
 	    $tcX=sprintf('%.2f',$tcX);
 	    $tcY=sprintf('%.2f',$tcY);
 	    $result.='\put('.$tcX.','.$tcY.'){'.$TeXsize.' \bf '.$label.'}'."\n";

--albertel1108076410--