--- loncom/xml/londefdef.pm	2005/03/02 22:26:36	1.260
+++ loncom/xml/londefdef.pm	2005/04/29 21:22:33	1.269
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.260 2005/03/02 22:26:36 raeburn Exp $
+# $Id: londefdef.pm,v 1.269 2005/04/29 21:22:33 albertel Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -39,7 +39,7 @@
 
 package Apache::londefdef; 
 
-use Apache::lonnet();
+use Apache::lonnet;
 use strict;
 use Apache::lonxml;
 use Apache::File();
@@ -132,7 +132,7 @@ sub start_tthoption {
     if ($target eq 'web') {
 	my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser);
 	$inside=~s/^\s*//;
-	if ($ENV{'browser.mathml'}) {
+	if ($env{'browser.mathml'}) {
 	    &tth::ttmoptions($inside);
 	} else {
 	    &tth::tthoptions($inside);
@@ -151,15 +151,14 @@ sub end_tthoption {
 sub start_html {
     my ($target,$token) = @_;
     my $currentstring = '';
-    my $options=$ENV{'course.'.$ENV{'request.course.id'}.'.tthoptions'};
+    my $options=$env{'course.'.$env{'request.course.id'}.'.tthoptions'};
     &Apache::lontexconvert::init_tth();
-    if ($target eq 'web' || $target eq 'edit') {
+    if ($target eq 'web' || $target eq 'edit' || $target eq 'webgrade' ) {
 	$currentstring = &Apache::lonxml::xmlbegin();
     } elsif ($target eq 'tex') {
-	@Apache::londefdef::table = ();
 	$currentstring .= '\documentclass[letterpaper]{article}';
-	if (($ENV{'form.latex_type'}=~'batchmode') ||
-            (!$ENV{'request.role.adv'})) {$currentstring .='\batchmode';} 
+	if (($env{'form.latex_type'}=~'batchmode') ||
+            (!$env{'request.role.adv'})) {$currentstring .='\batchmode';} 
 	$currentstring .= '\newcommand{\keephidden}[1]{}'.
                           '\renewcommand{\deg}{$^{\circ}$}'.
                           '\usepackage{longtable}'.
@@ -202,7 +201,7 @@ sub start_head {
 sub end_head {
     my ($target,$token) = @_;
     my $currentstring = '';
-    if ($target eq 'web' && $ENV{'request.state'} eq 'published') {
+    if ($target eq 'web' && $env{'request.state'} eq 'published') {
 	$currentstring = &Apache::lonmenu::registerurl(undef,$target).
 	    $token->[2];    
     } 
@@ -490,15 +489,15 @@ sub start_body {
 	    return '';
 	}
 	if (!$Apache::lonxml::registered && 
-	    $ENV{'request.state'} eq 'published') {
+	    $env{'request.state'} eq 'published') {
 	    $currentstring.='<head>'.
 		&Apache::lonmenu::registerurl(undef,$target).'</head>';
 	}
 # Accessibility
-	if ($ENV{'browser.imagesuppress'} eq 'on') {
+	if ($env{'browser.imagesuppress'} eq 'on') {
 	    delete($token->[2]->{'background'});
 	}
-	if ($ENV{'browser.fontenhance'} eq 'on') {
+	if ($env{'browser.fontenhance'} eq 'on') {
 	    my $style='';
 	    foreach my $key (keys(%{$token->[2]})) {
 		if ($key =~ /^style$/i) {
@@ -508,7 +507,7 @@ sub start_body {
 	    }
 	    $token->[2]->{'style'}=$style.'; font-size: x-large;';
 	}
-	if ($ENV{'browser.blackwhite'} eq 'on') {
+	if ($env{'browser.blackwhite'} eq 'on') {
 	    delete($token->[2]->{'font'});
 	    delete($token->[2]->{'link'});
 	    delete($token->[2]->{'alink'});
@@ -535,17 +534,17 @@ sub start_body {
 	$token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents().
 	    ';'.$onUnload;
 	
-	if ($ENV{'request.state'} ne 'construct') {
+	if ($env{'request.state'} ne 'construct') {
 	    $currentstring .= '<'.$token->[1];
 	}
 	foreach (keys %{$token->[2]}) {
 	    $currentstring.=' '.$_.'="'.$token->[2]->{$_}.'"';
 	}
-	if ($ENV{'request.state'} ne 'construct') {
+	if ($env{'request.state'} ne 'construct') {
 	    $currentstring.='>';
 	}
-	if ($ENV{'request.state'} ne 'published') {
-	    my $remote=($ENV{'environment.remote'} ne 'off');
+	if ($env{'request.state'} ne 'published') {
+	    my $remote=($env{'environment.remote'} ne 'off');
 	    $currentstring=&Apache::loncommon::bodytag(undef,undef,
 						       $currentstring,$remote);
 	    $currentstring.=(<<EDITBUTTON);
@@ -1126,9 +1125,9 @@ sub start_p {
 	if ($align eq 'center') {
 	    $currentstring='\begin{center}\par';
 	} elsif ($align eq 'right') {
-	    $currentstring='\makebox['.$ENV{'form.textwidth'}.']{\hfill\llap{';
+	    $currentstring='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{';
 	} elsif ($align eq 'left') {
-	    $currentstring='\noindent\makebox['.$ENV{'form.textwidth'}.']{\rlap{';
+	    $currentstring='\noindent\makebox['.$env{'form.textwidth'}.']{\rlap{';
 	} else {
             $currentstring='\par ';
         }
@@ -1277,8 +1276,8 @@ sub start_font {
     if ($target eq 'web') {
 	my $face=&Apache::lonxml::get_param('face',$parstack,$safeeval);
 	if ($face!~/symbol/i) {
-	    if (($ENV{'browser.fontenhance'} eq 'on') || 
-		($ENV{'browser.blackwhite'} eq 'on')) { return ''; }
+	    if (($env{'browser.fontenhance'} eq 'on') || 
+		($env{'browser.blackwhite'} eq 'on')) { return ''; }
 	}
 	$currentstring = $token->[4];     
     }  elsif ($target eq 'tex') {
@@ -1826,7 +1825,7 @@ sub start_table {
 	$Apache::londefdef::table[-1]{'row_number'} = -1;
         #maximum table's width (default coincides with text line length)
 	if ($#Apache::londefdef::table==0) {
-	    $textwidth=&recalc($ENV{'form.textwidth'}); #result is always in mm
+	    $textwidth=&recalc($env{'form.textwidth'}); #result is always in mm
 	    $textwidth=~/(\d+\.?\d*)/;
 	    $textwidth=0.95*$1; #accounts "internal" LaTeX space for table frame
 	} else {
@@ -2450,7 +2449,7 @@ sub start_img {
    # Render unto browsers that which are the browser's...
 
     if ($target eq 'web') {
-	if ($ENV{'browser.imagesuppress'} ne 'on') {
+	if ($env{'browser.imagesuppress'} ne 'on') {
 	    $currentstring.=&Apache::lonenc::encrypt_ref($token,{'src'=>$src});
 	} else {
 	    my $alttag= &Apache::lonxml::get_param
@@ -2495,16 +2494,28 @@ sub start_img {
 	if(!$latex_rendering) {
 	    $latex_rendering = "parbox";
 	}
-	&Apache::lonxml::debug("LaTeX rendering = $latex_rendering");
+	&Apache::lonxml::debug("LaTeX rendering = $latex_rendering image file: $src");
 
 	#if original gif/jpg/png file exist do following:
+	my $origsrc=$src;
 	my ($path,$file) = &get_eps_image($src);
 	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+	&Apache::lonxml::debug("path = $path file = $file src = $src");
 	if (-e $src) {
+	    &Apache::lonxml::debug("$src exists");
 	    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.'} ';
+		&image_size($origsrc,0.3,$parstack,$safeeval);
+	    my $destpath = $path;
+	    $destpath    =~ s/ /\_/g; # Spaces in path cause LaTex to vomit.
+	    my $destfile = $file;
+	    $destfile    =~ s/ /\_/g;
+	    my $size;
+	    if ($width_param)  { $size.='width='.$width_param.' mm,'; }
+	    if ($height_param) { $size.='height='.$height_param.' mm]'; }
+	    $size='['.$size;
+	    $size=~s/,$/]/; 
+	    $currentstring .= '\graphicspath{{'.$destpath.'}}'
+		.'\includegraphics'.$size.'{'.$destfile.'} ';
 
 	    #    If there's an alignment specification we need to honor it here.
 	    #    For the horizontal alignments, we will also honor the
@@ -2537,6 +2548,7 @@ sub start_img {
 		# $currentstring = '\raisebox{'.$height_param.'mm}{'.$currentstring.'}';
 	    }
 	} else {
+	    &Apache::lonxml::debug("$src does not exist");
 	    #original image file doesn't exist so check the alt attribute
 	    my $alt = 
 		&Apache::lonxml::get_param('alt',$parstack,$safeeval,undef,1);
@@ -2615,6 +2627,7 @@ sub start_img {
 	}
 	if ($ctag) {$currentstring=&Apache::edit::rebuild_tag($token);}
     }
+
     return $currentstring;
 }
 
@@ -2642,7 +2655,7 @@ sub start_applet {
     
     my $currentstring = '';
     if ($target eq 'web') {
-	if ($ENV{'browser.appletsuppress'} ne 'on') {
+	if ($env{'browser.appletsuppress'} ne 'on') {
 	    $currentstring = &Apache::lonenc::encrypt_ref($token,
 							  {'code'=>$code,
 							   'archive'=>$archive}
@@ -2688,7 +2701,7 @@ sub start_embed {
     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
     my $currentstring = '';
     if ($target eq 'web') {
-	if ($ENV{'browser.embedsuppress'} ne 'on') {
+	if ($env{'browser.embedsuppress'} ne 'on') {
 	    $currentstring=&Apache::lonenc::encrypt_ref($token,{'src'=>$src});
 	} else {
 	    my $alttag=&Apache::lonxml::get_param
@@ -2784,7 +2797,7 @@ sub start_frameset {
     my $currentstring = '';
     if ($target eq 'web') { 
 	if (!$Apache::lonxml::registered &&
-	    $ENV{'request.state'} eq 'published') {
+	    $env{'request.state'} eq 'published') {
 	    $currentstring.='<head>'.
 		&Apache::lonmenu::registerurl(undef,$target).'</head>';
 	}
@@ -3749,22 +3762,30 @@ sub image_replication {
     $pssrc  =~ s/\.(gif|jpg|jpeg|png)$/.ps/i;
     if (not -e $epssrc && not -e $pssrc) {
 	my $result=&Apache::lonnet::repcopy($epssrc);
-	if ($result ne 'OK') { &Apache::lonnet::repcopy($pssrc); }
+	if ($result ne 'ok') { &Apache::lonnet::repcopy($pssrc); }
     }
     return '';
 }
 
 sub image_size {
     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 $ressrc=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+    if (-e $ressrc) {
+	$src = $ressrc;
+    }
     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;;
+    my $height_param = $image->Get('height') * $scaling;
+    &Apache::lonxml::debug("Image magick says: $src :  Height = $height_param width = $width_param");
     undef($image);
     #do we have any specified LaTeX size of the picture?
-    my $toget='TeXwidth'; if ($cis) { $toget=lc($toget); }
+    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); }
@@ -3776,23 +3797,33 @@ sub image_size {
     if ($TeXwidth) { 
 	my $old_width_param=$width_param;
 	if ($TeXwidth=~/(\d+)\s*\%/) {
-	    $width_param = $1*$ENV{'form.textwidth'}/100;
+	    $width_param = $1*$env{'form.textwidth'}/100;
 	} else { 
 	    $width_param = $TeXwidth;
 	}
-	$height_param=$TeXwidth/$old_width_param*$height_param;
+	if ($TeXheight) {
+	    $height_param = $TeXheight;
+	} elsif ($old_width_param) {
+	    $height_param=$TeXwidth/$old_width_param*$height_param;
+	}
     } elsif ($TeXheight) {
 	$height_param = $TeXheight;
-	$width_param  = $TeXheight/$height_param*$width_param;
+	if ($height_param) {
+	    $width_param  = $TeXheight/$height_param*$width_param;
+	}
     } elsif ($width) {
 	my $old_width_param=$width_param;
 	$width_param = $width*$scaling;
-        $height_param=$width_param/$old_width_param*$height_param;
+	if ($old_width_param) {
+	    $height_param=$width_param/$old_width_param*$height_param;
+	}
     }
-    if ($width_param > $ENV{'form.textwidth'}) {
+    if ($width_param > $env{'form.textwidth'}) {
         my $old_width_param=$width_param;
-	$width_param =0.95*$ENV{'form.textwidth'};
-        $height_param=$width_param/$old_width_param*$height_param;
+	$width_param =0.95*$env{'form.textwidth'};
+	if ($old_width_param) {
+	    $height_param=$width_param/$old_width_param*$height_param;
+	}
     }
     return ($height_param, $width_param);
 }
@@ -3811,35 +3842,45 @@ sub image_height {
 
 sub get_eps_image {
     my ($src)=@_;
-    my $orig_src=$src;
+    my $orig_src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1], $src);
+    &Apache::lonxml::debug("get_eps_image: Original image: $orig_src<BR />");
     $src=~s/\.(gif|png|jpg|jpeg)$/\.eps/i;
     $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+    &Apache::lonxml::debug("Filelocation gives; $src <BR />");
     if (! -e $src) {
-	if (&Apache::lonnet::repcopy($src) ne 'OK' ) {
+	&Apache::lonxml::debug("$src does not exist");
+	if (&Apache::lonnet::repcopy($src) ne 'ok' ) {
+	    &Apache::lonxml::debug("Repcopy of $src failed (1)");
 	    #if replication failed try to find ps file
 	    $src=~s/\.eps$/\.ps/;
+	    &Apache::lonxml::debug("Now looking for $src");
 	    #if no ps file try to replicate it
-	    if (not -e $src &&
-		&Apache::lonnet::repcopy($src) ne 'OK') {
+	    if (not -e $src ||
+		&Apache::lonnet::repcopy($src) ne 'ok') {
+		&Apache::lonxml::debug("Failed to find or replicate $src");
+
 		#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");
+		open(FILE,">>/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat");
 		my $newsrc=$orig_src;
 		$newsrc =~ s|(.*)/res/|/home/httpd/html/res/|;
+		&Apache::lonxml::debug("queueing $newsrc for dynamic eps production. <BR/>");
 		print FILE "$newsrc\n";
+		close FILE;
 		$src=~s|/home/httpd/html/res|/home/httpd/prtspool|;
 		$src=~s|/home/([^/]*)/public_html/|/home/httpd/prtspool/$1/|;
 	    }
 	}
     }
     my ($path,$file)=($src=~m|(.*)/([^/]*)$|);
+    &Apache::lonxml::debug("get_eps_image returning: $path / $file<BR />");
     return ($path.'/',$file);
 }
 
 sub eps_generation {
     my ($src,$file,$width_param) = @_;	     
-    my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
+    my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout.dat";
     my $temp_file = Apache::File->new('>>'.$filename); 
     print $temp_file "$src\n";
     my $newsrc = $src;