--- loncom/xml/londefdef.pm	2004/08/25 20:16:44	1.231.2.2
+++ loncom/xml/londefdef.pm	2004/11/13 08:56:53	1.244
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.231.2.2 2004/08/25 20:16:44 albertel Exp $
+# $Id: londefdef.pm,v 1.244 2004/11/13 08:56:53 albertel Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -63,9 +63,10 @@ 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;
+    undef(@Apache::londefdef::description);
+    @Apache::londefdef::DD=(0);
+    @Apache::londefdef::DT=(0);
+    @Apache::londefdef::seenDT=(0);
     $Apache::londefdef::list_index=0;
 }
 
@@ -151,11 +152,10 @@ sub start_html {
     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();     
+	$currentstring = &Apache::lonxml::xmlbegin();
     } elsif ($target eq 'tex') {
 	@Apache::londefdef::table = ();
-	$currentstring .= '\documentclass[letterpaper]{article}';
+	$currentstring .= '\documentclass[letterpaper]{book}';
 	if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';} 
 	$currentstring .= '\newcommand{\keephidden}[1]{}'.
                           '\renewcommand{\deg}{$^{\circ}$}'.
@@ -177,10 +177,10 @@ sub start_html {
 }
 
 sub end_html {
-    my ($target,$token) = @_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $currentstring = '';
     if ($target eq 'web') {
-	$currentstring = &Apache::lonxml::xmlend();
+	$currentstring = &Apache::lonxml::xmlend($target,$parser);
     }
     return $currentstring;
 }
@@ -190,7 +190,7 @@ sub start_head {
     my ($target,$token) = @_;
     my $currentstring = '';
     if ($target eq 'web') {
-	$currentstring = $token->[4];     
+	$currentstring = $token->[4].&Apache::lonxml::fontsettings();
     } 
     return $currentstring;
 }
@@ -479,6 +479,7 @@ sub end_accessrule {
 sub start_body {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
     my $currentstring = '';
+
     if ($target eq 'web') {
 	if ($Apache::lonhomework::parsing_a_problem) {
 	    &Apache::lonxml::warning("<body> tag found inside of <problem> tag this can cause problems.");
@@ -1698,9 +1699,11 @@ sub start_dl {
 	$currentstring = $token->[4];     
     } elsif ($target eq 'tex') {
 	$currentstring = '\begin{description}';
-	@Apache::londefdef::description=();
-	$Apache::londefdef::DD_redirection=0;
-	$Apache::londefdef::DT_redirection=0;
+	$Apache::londefdef::DL++;
+	push(@Apache::londefdef::description,[]);
+	$Apache::londefdef::DD[$Apache::londefdef::DL]=0;
+	$Apache::londefdef::DT[$Apache::londefdef::DL]=0;
+	$Apache::londefdef::seenDT[$Apache::londefdef::DL]=0;
     } 
     return $currentstring;
 }
@@ -1711,18 +1714,17 @@ sub end_dl {
     if ($target eq 'web') {
 	$currentstring = $token->[2];     
     } elsif ($target eq 'tex') {
-	if ($Apache::londefdef::DT_redirection) {
-	    my $data=&item_cleanup;
-	    push @Apache::londefdef::description,'\item['.$data.']';
-	    $Apache::londefdef::DT_redirection=0;
-	} elsif ($Apache::londefdef::DD_redirection) {
-	    $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
-	}
-	foreach my $element (@Apache::londefdef::description) {
+	if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
+	if ($Apache::londefdef::DD[-1]) { &end_dd(@_); }
+	foreach my $element (@{$Apache::londefdef::description[-1]}) {
 	    $currentstring.=' '.$element.' ';
 	}
-	@Apache::londefdef::description=();
+	pop(@Apache::londefdef::description);
 	$currentstring.='\end{description}';  
+	delete($Apache::londefdef::DD[$Apache::londefdef::DL]);
+	delete($Apache::londefdef::DT[$Apache::londefdef::DL]);
+	delete($Apache::londefdef::seenDT[$Apache::londefdef::DL]);
+	$Apache::londefdef::DL--;
     } 
     return $currentstring;
 }
@@ -1734,16 +1736,11 @@ sub start_dt {
     if ($target eq 'web') {
 	$currentstring = $token->[4];     
     } elsif ($target eq 'tex') {
-	if ($Apache::londefdef::DT_redirection) {
-	    my $data=&item_cleanup;
-	    push @Apache::londefdef::description,'\item['.$data.']';
-	    $Apache::londefdef::DT_redirection=0;
-	} elsif ($Apache::londefdef::DD_redirection) {
-	    $Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
-	    $Apache::londefdef::DD_redirection=0;
-	}
+	if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
+	if ($Apache::londefdef::DD[-1]) { &end_dd(@_); }
 	&Apache::lonxml::startredirection();
-	$Apache::londefdef::DT_redirection=1;
+	$Apache::londefdef::DT[-1]++;
+	$Apache::londefdef::seenDT[-1]=1;
     } 
     return $currentstring;
 }
@@ -1754,9 +1751,11 @@ sub end_dt {
     if ($target eq 'web') {
 	$currentstring = $token->[2];    
     } elsif ($target eq 'tex') {
-	my $data=&item_cleanup;
-	push @Apache::londefdef::description,'\item['.$data.']';
-	$Apache::londefdef::DT_redirection=0;
+	if ($Apache::londefdef::DT[-1]) {
+	    my $data=&item_cleanup();
+	    push(@{$Apache::londefdef::description[-1]},'\item['.$data.'] \strut \vskip 0mm');
+	    $Apache::londefdef::DT[-1]--;
+	}
     } 
     return $currentstring;
 }
@@ -1775,12 +1774,14 @@ sub start_dd {
     if ($target eq 'web') {
 	$currentstring = $token->[4];     
     } elsif ($target eq 'tex') {
-	if ($Apache::londefdef::DT_redirection) {
-	    my $data=&item_cleanup;
-	    push @Apache::londefdef::description,'\item['.$data.']';
-	    $Apache::londefdef::DT_redirection=0;
-	}
-	$Apache::londefdef::DD_redirection=1;
+	if ($Apache::londefdef::DT[-1]) { &end_dt(@_); }
+	if ($Apache::londefdef::DD[-1]) { &end_dd(@_);}
+	if (!$Apache::londefdef::seenDT[-1]) {
+	    push(@{$Apache::londefdef::description[-1]},'\item[\strut] \strut \vskip 0mm ');
+	}
+	push(@{$Apache::londefdef::description[-1]},'');
+	$Apache::londefdef::description[-1]->[-1].=' \strut ';
+	$Apache::londefdef::DD[-1]++;
 	&Apache::lonxml::startredirection();
     } 
     return $currentstring;
@@ -1792,8 +1793,9 @@ sub end_dd {
     if ($target eq 'web') {
 	$currentstring = $token->[2];    
     }  elsif ($target eq 'tex') {
-	$Apache::londefdef::description[-1].=&Apache::lonxml::endredirection();
-	$Apache::londefdef::DD_redirection=0;
+	$Apache::londefdef::description[-1]->[-1].=
+	    &Apache::lonxml::endredirection().' \vskip 0mm ';
+	$Apache::londefdef::DD[-1]--;
     }
     return $currentstring;
 }
@@ -2434,13 +2436,9 @@ sub start_img {
 	    $currentstring.='[IMAGE: '.$alttag.']';
 	}
     } elsif ($target eq 'tex') {
+	my $oldSRC=$src;
+        $oldSRC=~s/\.(gif|jpg|png)$/\.eps/;
 	$src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
-        #if uploaded restore the path
-	if ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/simplepage\/([^\/]+)$/) {
-	    $src=&Apache::loncommon::propath($1,$2).'/userfiles/simplepage/'.$3;
-	} elsif ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/aboutme\/([^\/]+)$/) {
-	    $src=&Apache::loncommon::propath($1,$2).'/userfiles/aboutme/'.$3;
-	}
 	#if original gif/jpg/png file exist do following:
 	if (-e $src) {
 	    #what is the image size?
@@ -2448,6 +2446,7 @@ sub start_img {
             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) {
@@ -2493,6 +2492,8 @@ sub start_img {
 	$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::select_arg('Alignment:','align',
+						   ['','bottom','middle','top','left','right'],$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);
@@ -2506,7 +2507,7 @@ sub start_img {
 	my ($osrc,$owidth,$oheight)=
 	    ($token->[2]{'src'},$token->[2]{'width'},$token->[2]{'height'});
 	my $ctag=&Apache::edit::get_new_args($token,$parstack,
-					     $safeeval,'src','alt',
+					     $safeeval,'src','alt','align',
 					     'TeXwidth','TeXheight',
 					     'width','height');
 	my ($nsrc,$nwidth,$nheight)=
@@ -2673,7 +2674,7 @@ sub start_allow {
     $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src);
     $Apache::lonxml::extlinks[$#Apache::lonxml::extlinks+1]=
 	&Apache::lonnet::clutter($src);
-    &image_replication($src);
+    if ($target eq 'tex') { &image_replication($src); }
     my $result;
     if ($target eq 'edit') {
 	$result .=&Apache::edit::tag_start($target,$token);
@@ -3714,7 +3715,11 @@ sub eps_generation {
 	$newsrc=~s/\/home\/httpd\/lonUsers//;
 	$newsrc=~s/\/([^\/]+)\/(\w)\/(\w)\/(\w)\//\/$1\//;
     }
-    return ' \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+    if ($newsrc=~/\/userfiles\//) {
+	return ' \graphicspath{{'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+    } else {
+	return ' \graphicspath{{/home/httpd/prtspool'.$newsrc.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+    }
 }
 
 sub file_path {