--- loncom/xml/londefdef.pm	2004/08/20 18:43:36	1.235
+++ loncom/xml/londefdef.pm	2004/11/19 21:17:56	1.246
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.235 2004/08/20 18:43:36 sakharuk Exp $
+# $Id: londefdef.pm,v 1.246 2004/11/19 21:17:56 albertel Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -63,9 +63,11 @@ 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;
 }
 
 #======================= TAG SUBROUTINES =====================
@@ -150,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]{book}';
+	$currentstring .= '\documentclass[letterpaper]{article}';
 	if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';} 
 	$currentstring .= '\newcommand{\keephidden}[1]{}'.
                           '\renewcommand{\deg}{$^{\circ}$}'.
@@ -189,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;
 }
@@ -478,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.");
@@ -1485,17 +1487,28 @@ sub start_li {
     if ($target eq 'web') {
 	$currentstring = $token->[4];     
     } elsif ($target eq 'tex') {
-	my  $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,1);
-	if ($type=~/circle/) {
-	    $currentstring .= ' \item[o] ';
+	my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
+	my $value=&Apache::lonxml::get_param('value',$parstack,$safeeval,undef,0);
+	#FIXME need to support types i and I 
+	if ($type=~/disc/) {
+	    $currentstring .= ' \item[$\bullet$] ';
+	} elsif ($type=~/circle/) {
+	    $currentstring .= ' \item[$\circ$] ';
 	} elsif ($type=~/square/) {
-	    $currentstring .= ' \item[$\Box$] ';
-	} elsif ($type ne '') { 
-	    $currentstring .= ' \item['.$type.'] ';
+	    $currentstring .= ' \item[$\diamond$] ';
+	} elsif ($type eq '1') {
+	    $currentstring .= ' \item['.($Apache::londefdef::list_index+1).'.]';
+	} elsif ($type eq 'A') {
+	    $currentstring .= ' \item['.('A'..'Z')[$Apache::londefdef::list_index].'.]';
+	} elsif ($type eq 'a') {
+	    $currentstring .= ' \item['.('a'..'z')[$Apache::londefdef::list_index].'.]';
+	} elsif ($value ne '') {
+	    $currentstring .= ' \item['.$value.'] ';
 	} else {
 	    $currentstring .= ' \item ';
 	}  
-    } 
+	$Apache::londefdef::list_index++;
+    }
     return $currentstring;
 }
 
@@ -1542,6 +1555,7 @@ sub start_ul {
 	$currentstring = $token->[4];     
     } elsif ($target eq 'tex') {
 	my $TeXtype=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
+	$Apache::londefdef::list_index=0;
 	if ($TeXtype eq 'disc') {
 	    $currentstring .= '\renewcommand{\labelitemi}{$\bullet$}'.
                               '\renewcommand{\labelitemii}{$\bullet$}'. 
@@ -1630,6 +1644,7 @@ sub start_ol {
     if ($target eq 'web') {
 	$currentstring = $token->[4];     
     } elsif ($target eq 'tex') {
+	$Apache::londefdef::list_index=0;
 	my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval,undef,0);
 	if ($type eq '1') {
 	    $currentstring .= '\renewcommand{\labelenumi}{\arabic{enumi}.}'.
@@ -1684,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;
 }
@@ -1697,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;
 }
@@ -1720,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;
 }
@@ -1740,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;
 }
@@ -1761,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;
@@ -1778,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;
 }
@@ -2420,18 +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
-	my $old_src=$src;
-	if ($src=~/^\/uploaded\/([^\/]+)\/([^\/]+)\/simplepage\/([^\/]+)$/) {
-	    $src=&Apache::loncommon::propath($1,$2).'/userfiles/simplepage/'.$3;
-	    if (not -e $src) {
-		$old_src=~/^\/uploaded\/(.*)$/;
-		$src=$Apache::lonnet::perlvar{'lonDocRoot'}.'/userfiles/'.$1;
-	    }
-	} 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?
@@ -2439,12 +2446,13 @@ 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) {
 		#eps counterpart for image exist 
 		if ($path) {
-		    $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+		    $currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
 		}
 	    } else {
 		#there is no eps counterpart for image - check for ps one
@@ -2453,11 +2461,11 @@ sub start_img {
 		    #ps counterpart for image exist 
 		    $file =~ s/\.eps$/\.ps/;
 		    if ($path) {
-			$currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
+			$currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} ';
 		    }
 		} else {
 		    #care about eps dynamical generation
-		    $currentstring.='\vskip 1 mm '.&eps_generation($src,$file,$width_param);
+		    $currentstring.=&eps_generation($src,$file,$width_param);
 		}
 	    }
 	} else {
@@ -2666,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);
@@ -3707,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 {