--- loncom/xml/londefdef.pm	2005/04/06 06:08:13	1.255.2.1
+++ loncom/xml/londefdef.pm	2005/02/18 23:22:43	1.257
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.255.2.1 2005/04/06 06:08:13 matthew Exp $
+# $Id: londefdef.pm,v 1.257 2005/02/18 23:22:43 albertel Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -106,6 +106,13 @@ sub start_m {
 	    $currentstring=&Apache::run::evaluate($currentstring,$safeeval,$$parstack[-1]);
 	}
 	if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';}
+	# detect simple math mode entry exits, and convert them
+        # to use \ensuremath
+	if ($currentstring=~/^\s*\$[^\$].*[^\$]\$\s*$/) {
+	    $currentstring=~s/^\$//;
+	    $currentstring=~s/\$$//;
+	    $currentstring='\ensuremath{'.$currentstring.'}';
+	}
 	$Apache::lonxml::post_evaluate=0;
     }
     return $currentstring;
@@ -2491,45 +2498,15 @@ sub start_img {
 	}
 	&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) {
-		    my $size;
-		    if ($width_param)  { $size.='width='.$width_param.' mm,'; }
-		    if ($height_param) { $size.='height='.$height_param.' mm]'; }
-		    $size='['.$size;
-		    $size=~s/,$/]/; 
-		    $currentstring .= '\graphicspath{{'.$path.'}}'
-			             .'\includegraphics'.$size.'{'.$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,
@@ -2568,17 +2545,11 @@ sub start_img {
 		$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).
@@ -3785,49 +3756,44 @@ sub image_replication {
 }
 
 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;
 	} else { 
 	    $width_param = $TeXwidth;
 	}
-	if ($TeXheight) {
-	    $height_param = $TeXheight;
-	} elsif ($old_width_param) {
-	    $height_param=$TeXwidth/$old_width_param*$height_param;
-	}
-    } elsif ($TeXheight ne '') {
+	$height_param=$TeXwidth/$old_width_param*$height_param;
+    } elsif ($TeXheight) {
 	$height_param = $TeXheight;
-	if ($height_param) {
-	    $width_param  = $TeXheight/$height_param*$width_param;
-	}
-    } elsif ($width ne '') {
+	$width_param  = $TeXheight/$height_param*$width_param;
+    } elsif ($width) {
 	my $old_width_param=$width_param;
-	$width_param = $width*$scaling;      
-	if ($old_width_param) {
-            $height_param=$width_param/$old_width_param*$height_param;
-	}
+	$width_param = $width*$scaling;
+        $height_param=$width_param/$old_width_param*$height_param;
     }
     if ($width_param > $ENV{'form.textwidth'}) {
         my $old_width_param=$width_param;
 	$width_param =0.95*$ENV{'form.textwidth'};
-	if ($old_width_param) {
-            $height_param=$width_param/$old_width_param*$height_param;
-	}
+        $height_param=$width_param/$old_width_param*$height_param;
     }
     return ($height_param, $width_param);
 }
@@ -3844,6 +3810,34 @@ sub image_height {
     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";