--- loncom/xml/londefdef.pm	2003/10/21 13:36:32	1.184
+++ loncom/xml/londefdef.pm	2004/01/28 20:41:15	1.196
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.184 2003/10/21 13:36:32 sakharuk Exp $
+# $Id: londefdef.pm,v 1.196 2004/01/28 20:41:15 albertel Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -50,8 +50,8 @@ use Apache::File();
 use Image::Magick;
 use Apache::lonmenu();
 use Apache::lonmeta();
+use Apache::Constants qw(:common);
 
-$Apache::londefdef::TD_redirection=0;
 
 BEGIN {
 
@@ -59,6 +59,15 @@ BEGIN {
 
 }
 
+sub initialize_londefdef {
+    $Apache::londefdef::TD_redirection=0;
+    @Apache::londefdef::table = ();
+    $Apache::londefdef::select=0;
+    @Apache::londefdef::description=();
+    $Apache::londefdef::DD_redirection=0;
+    $Apache::londefdef::DT_redirection=0;
+}
+
 #======================= TAG SUBROUTINES =====================
 #-- <output>
 sub start_output {
@@ -73,11 +82,11 @@ sub end_output {
 }
 #-- <m> tag
 sub start_m {
-    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
     my $currentstring = '';
-    if ($target eq 'web') {
+    my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
+    if ($target eq 'web' || $target eq 'analyze') {
 	$Apache::lonxml::prevent_entity_encode++;
-	my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
 	$inside ='\\documentstyle{article}'.$inside;
 	&Apache::lonxml::debug("M is starting with:$inside:");
 	my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval);
@@ -94,15 +103,13 @@ sub start_m {
 	#&Apache::lonxml::debug("M is ends with:$currentstring:");
 	$Apache::lonxml::post_evaluate=0;
     } elsif ($target eq 'tex') {
-	$currentstring = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
+	$currentstring = $inside;
 	my $eval=&Apache::lonxml::get_param('eval',$parstack,$safeeval);
 	if ($eval eq 'on') {
 	    $currentstring=&Apache::run::evaluate($currentstring,$safeeval,$$parstack[-1]);
 	}
 	if ($currentstring=~/^(\s*\\\\\s*)*$/) {$currentstring = ' \vskip 0 mm ';}
 	$Apache::lonxml::post_evaluate=0;
-    } else {
-	my $inside = &Apache::lonxml::get_all_text_unbalanced("/m",$parser);
     }
     return $currentstring;
 }
@@ -144,22 +151,9 @@ sub end_tthoption {
 sub start_html {
     my ($target,$token) = @_;
     my $currentstring = '';
-    if ($ENV{'browser.mathml'}) {
-	&tth::ttminit();
-	if ($ENV{'browser.unicode'}) {
-	    &tth::ttmoptions('-L -u1');
-	} else {
-	    &tth::ttmoptions('-L -u0');
-	}
-    } else {
-	&tth::tthinit();
-	if ($ENV{'browser.unicode'}) {
-	    &tth::tthoptions('-L -u1');
-	} else {
-	    &tth::tthoptions('-L -u0');
-	}
-    }
-    if ($target eq 'web') {
+    my $options=$ENV{'course.'.$ENV{'request.course.id'}.'.tthoptions'};
+    &Apache::lontexconvert::init_tth();
+    if ($target eq 'web' || $target eq 'edit') {
 	$currentstring = &Apache::lonxml::xmlbegin().
 	    &Apache::lonxml::fontsettings();     
     } elsif ($target eq 'tex') {
@@ -344,7 +338,7 @@ sub start_title {
     }
     if ($target eq 'meta') {
 	$currentstring='<title>';
-	&start_output();
+	&start_output($target);
     }
     return $currentstring;
 }
@@ -358,7 +352,7 @@ sub end_title {
 	$currentstring .= '}';
     }  
     if ($target eq 'meta') {
-	&end_output();
+	&end_output($target);
 	$currentstring='</title>';
     } 
     return $currentstring;
@@ -654,7 +648,7 @@ sub start_h1 {
 	$currentstring .= $pre.'{\\'.$TeXsize.' \textbf{'; 
     } elsif ($target eq 'meta') {
 	$currentstring='<subject>';
-	&start_output();
+	&start_output($target);
     }
     return $currentstring;
 }
@@ -676,7 +670,7 @@ sub end_h1 {
 	}
 	$currentstring .= '}}'.$post;
     } elsif ($target eq 'meta') {
-	&end_output();
+	&end_output($target);
 	$currentstring='</subject>';
     } 
     return $currentstring;
@@ -2084,6 +2078,11 @@ sub start_img {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $src = &Apache::lonxml::get_param('src',$parstack,$safeeval,
 					 undef,1);
+    if (not $src and ($target eq 'web' or $target eq 'tex')) { 
+	my $inside = &Apache::lonxml::get_all_text("/img",$parser);
+	&Apache::lonnet::logthis("inside was $inside");
+	return '';
+    }
     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=$src;
     my $currentstring = '';
     my $width_param = '';
@@ -2101,11 +2100,13 @@ sub start_img {
 	    }
 	    $currentstring.='[IMAGE: '.$alttag.']';
 	}
+	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+	&image_replication($src);
     } elsif ($target eq 'tex') {
 	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
 	&image_replication($src);
 	#if original gif/jpg/png file exist do following:
-	if (-e $src) {          
+	if (-e $src) {
 	    #defines the default size of image
 	    my $image = Image::Magick->new;
 	    my $current_figure = $image->Read($src);
@@ -2154,14 +2155,8 @@ sub start_img {
 			$currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
 		    }
 		} else {
-		    #there aren't eps or ps - so create eps 
-		    my $temp_file;
-		    my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.dat";
-		    $temp_file = Apache::File->new('>>'.$filename); 
-		    print $temp_file "$src\n";
-		    $newsrc=~s/\/home\/httpd\/html\/res//;
-		    $newsrc=~s/\/([^\/]+)\.(ps|eps)/\//;
-		    $currentstring .= '\vskip 1 mm \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+		    #care about eps dynamical generation
+		    $currentstring.='\vskip 1 mm '.&eps_generation($src,$file,$width_param);
 		}
 	    }
 	} else {
@@ -2178,6 +2173,45 @@ sub start_img {
 		#<allow> tag will care about replication 
 	    }
 	}
+    } elsif ($target eq 'edit') {
+	$currentstring .=&Apache::edit::tag_start($target,$token);
+	$currentstring .=&Apache::edit::text_arg('Image Url:','src',$token,70).
+	    &Apache::edit::browse('src',undef,'alt').' '.
+	    &Apache::edit::search('src',undef,'alt').'<br />';
+	$currentstring .=&Apache::edit::text_arg('Description:','alt',$token,70).'<br />';
+	$currentstring .=&Apache::edit::text_arg('width (pixel):','width',$token,5);
+	$currentstring .=&Apache::edit::text_arg('height (pixel):','height',$token,5).'<br />';
+	$currentstring .=&Apache::edit::text_arg('TeXwidth (mm):','TeXwidth',$token,5);
+	$currentstring .=&Apache::edit::text_arg('TeXheight (mm):','TeXheight',$token,5);
+	$currentstring .=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
+	my $src=&Apache::lonxml::get_param('src',$parstack,$safeeval);
+	my $alt=&Apache::lonxml::get_param('alt',$parstack,$safeeval);
+	my $width=&Apache::lonxml::get_param('width',$parstack,$safeeval);
+	my $height=&Apache::lonxml::get_param('height',$parstack,$safeeval);
+	$currentstring .= '<img src="'.$src.'" alt="'.$alt.'" ';
+	if ($width) { $currentstring.=' width="'.$width.'" '; }
+	if ($height) { $currentstring.=' height="'.$height.'" '; }
+	$currentstring .= ' />';
+    } elsif ($target eq 'modified') {
+	my $constructtag=&Apache::edit::get_new_args($token,$parstack,
+						     $safeeval,'src','alt',
+						     'TeXwidth','TeXheight',
+						     'width','height');
+	$src=$token->[2]{'src'};
+	if (!$token->[2]{'width'} && !$token->[2]{'height'}) {
+	    $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
+	    &image_replication($src);
+	    if (-e $src) {
+		my $image = Image::Magick->new;
+		my ($width, $height, $size, $format) = $image->Ping($src);
+		if ($width && $height) {
+		    $token->[2]{'width'} =$width;
+		    $token->[2]{'height'}=$height;
+		    $constructtag=1;
+		}
+	    }
+	}
+	if ($constructtag) {$currentstring=&Apache::edit::rebuild_tag($token);}
     }
     return $currentstring;
 }
@@ -3294,22 +3328,32 @@ sub end_hideweboutput {
 
 sub image_replication {
     my $src = shift;
-    if (not -e $src) {
-	#replicates image itself
-	&Apache::lonnet::repcopy($src);
-	#replicates eps or ps 
-	my $newsrc = $src;
-	$newsrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i;
-	if (not -e $newsrc) {
-	    if (&Apache::lonnet::repcopy($newsrc) ne 'OK') {
-		$newsrc =~ s/\.eps$/\.ps/;
-		&Apache::lonnet::repcopy($newsrc);
-	    }
-	}
+    if (not -e $src) { &Apache::lonnet::repcopy($src); }
+    #replicates eps or ps 
+    my $epssrc = my $pssrc = $src;
+    $epssrc =~ s/\.(gif|jpg|jpeg|png)$/.eps/i;
+    $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); }
     }
     return '';
 }
 
+sub eps_generation {
+    my ($src,$file,$width_param) = @_;	     
+    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;
+    $newsrc =~ s/(\.gif|\.jpg|\.jpeg)$/\.eps/i;
+    $newsrc=~s/\/home\/httpd\/html\/res//;
+    $newsrc=~s/\/home\/([^\/]*)\/public_html\//\/$1\//;
+    $newsrc=~s/\/\.\//\//;
+    $newsrc=~s/\/([^\/]+)\.(ps|eps)/\//;
+    return ' \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+}
+
 sub recalc {
     my $argument = shift;
     if (not $argument=~/(mm|cm|in|pc|pt)/) {return $argument.' mm';}