--- loncom/xml/londefdef.pm	2004/08/23 15:23:53	1.236
+++ loncom/xml/londefdef.pm	2004/10/18 22:02:02	1.243
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.236 2004/08/23 15:23:53 sakharuk Exp $
+# $Id: londefdef.pm,v 1.243 2004/10/18 22:02:02 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::list_index=0;
 }
 
 #======================= TAG SUBROUTINES =====================
@@ -150,8 +151,7 @@ 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}';
@@ -189,7 +189,7 @@ sub start_head {
     my ($target,$token) = @_;
     my $currentstring = '';
     if ($target eq 'web') {
-	$currentstring = $token->[4];     
+	$currentstring = $token->[4].&Apache::lonxml::fontsettings();
     } 
     return $currentstring;
 }
@@ -1485,17 +1485,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 +1553,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 +1642,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 +1697,10 @@ 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;
     } 
     return $currentstring;
 }
@@ -1697,18 +1711,16 @@ 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]);
+	$Apache::londefdef::DL--;
     } 
     return $currentstring;
 }
@@ -1720,16 +1732,10 @@ 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]++;
     } 
     return $currentstring;
 }
@@ -1740,9 +1746,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.']');
+	    $Apache::londefdef::DT[-1]--;
+	}
     } 
     return $currentstring;
 }
@@ -1761,12 +1769,11 @@ 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(@_);}
+	push(@{$Apache::londefdef::description[-1]},'');
+	$Apache::londefdef::description[-1]->[-1].=' \strut ';
+	$Apache::londefdef::DD[-1]++;
 	&Apache::lonxml::startredirection();
     } 
     return $currentstring;
@@ -1778,8 +1785,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,6 +2428,8 @@ 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 original gif/jpg/png file exist do following:
 	if (-e $src) {
@@ -2428,6 +2438,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) {
@@ -2655,7 +2666,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);
@@ -3696,7 +3707,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 {