--- loncom/xml/londefdef.pm	2005/11/29 00:08:10	1.298
+++ loncom/xml/londefdef.pm	2006/01/04 23:15:52	1.302.2.1
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.298 2005/11/29 00:08:10 foxr Exp $
+# $Id: londefdef.pm,v 1.302.2.1 2006/01/04 23:15:52 albertel Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -48,7 +48,7 @@ use Apache::lonmenu();
 use Apache::lonmeta();
 use Apache::Constants qw(:common);
 use File::Basename;
-#use Data::Dumper;
+# use Data::Dumper;
 
 BEGIN {
 
@@ -71,7 +71,6 @@ BEGIN {
 #
 #    }
 #}
-
 sub initialize_londefdef {
     $Apache::londefdef::TD_redirection=0;
     @Apache::londefdef::table = ();
@@ -145,10 +144,11 @@ sub end_m {
 }
 
 sub start_tthoption {
-    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
     my $result;
     if ($target eq 'web') {
-	my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser);
+	my $inside = &Apache::lonxml::get_all_text("/tthoption",$parser,
+						   $style);
 	$inside=~s/^\s*//;
 	if ($env{'browser.mathml'}) {
 	    &tth::ttmoptions($inside);
@@ -385,13 +385,13 @@ sub end_title {
 
 #-- <meta> tag (end tag forbidden)
 sub start_meta {
-    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
     my $currentstring = '';
     if ($target eq 'web') {
 	my $args='';
 	if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
 	if ($args eq '') {
-	    &Apache::lonxml::get_all_text("/meta",$parser);
+	    &Apache::lonxml::get_all_text("/meta",$parser,$style);
 	} else {
 	    $currentstring = $token->[4];
 	}
@@ -454,7 +454,7 @@ sub end_meta {
 
 # accessrule
 sub start_accessrule {
-    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
     my $currentstring = '';
     my $eff=&Apache::lonxml::get_param
 	('effect',$parstack,$safeeval,undef,1);
@@ -473,7 +473,7 @@ sub start_accessrule {
 	my $args='';
 	if ( $#$parstack > -1 ) { $args=$$parstack[$#$parstack]; }
 	if ($args eq '') {
-	    &Apache::lonxml::get_all_text("/accessrule",$parser);
+	    &Apache::lonxml::get_all_text("/accessrule",$parser,$style);
 	} else {
 	    $currentstring = $token->[4];
 	}
@@ -594,25 +594,34 @@ sub end_body {
     return $currentstring;
 }
 
+# \begin{center} causes a new paragprah spacing that looks odd inside 
+# of a table cell
+sub center_correction { return '\vspace*{-6 mm}'; }
 #-- <center> tag (end tag required)
 sub start_center {
-    my ($target,$token) = @_;
+    my ($target,$token,$tagstack) = @_;
     my $currentstring = &end_p();	# Close off any prior para.
     if ($target eq 'web') {
 	$currentstring .= $token->[4];     
     } elsif ($target eq 'tex') {
+	if (&is_inside_of($tagstack, "table")) {
+	    $currentstring .= &center_correction();
+	}
 	$currentstring .= '\begin{center}';  
     }
     return $currentstring;
 }
 
 sub end_center {
-    my ($target,$token) = @_;
+    my ($target,$token,$tagstack) = @_;
     my $currentstring = '';
     if ($target eq 'web') {
 	$currentstring = $token->[2];     
     } elsif ($target eq 'tex') {
 	$currentstring = '\end{center}';  
+	if (&is_inside_of($tagstack, "table")) {
+	    $currentstring .= &center_correction();
+	}
     }
     return $currentstring;
 }
@@ -1183,6 +1192,10 @@ sub start_p {
 	if ($align eq 'center') {
 	    $currentstring .='\begin{center}\par';
 	    $closing_string = '\end{center}';
+	    if (&is_inside_of($tagstack, "table")) {
+		$currentstring = &center_correction().$currentstring;
+		$closing_string .= &center_correction();
+	    }
 	} elsif ($align eq 'right') {
 	    $currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{';
 	    $closing_string= '}}';
@@ -1524,6 +1537,10 @@ sub start_div {
 	if ($align eq 'center') {
 	    $currentstring .= '\begin{center}';
 	    $endstring      = '\end{center}';
+	    if (&is_inside_of($tagstack, "table")) {
+		$currentstring = &center_correction().$currentstring;
+		$endstring .= &center_correction();
+	    }
 	}
 	elsif ($align eq 'right') {
 	    $currentstring .= '\begin{flushright}';
@@ -1946,9 +1963,9 @@ sub start_table {
 	# in either case it can be a percentage or absolute width.
 
 	my $TeXwidth = &Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
-	if (not defined $TeXwidth) {
+	if (!defined($TeXwidth)) {
 	    $TeXwidth = &Apache::lonxml::get_param('width',$parstack,$safeeval,undef,1);
-
+	    if (!defined($TeXwidth)) { $TeXwidth = $textwidth; }
 	} else {
 	    $Apache::londefdef::table[-1]{'forcedtablewidth'} = 1;
 	}
@@ -2188,15 +2205,13 @@ sub end_table {
 	for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
 	    for (my $jn=0;$jn<=$#fwidth;$jn++) {
 		if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
-		    # $output.='\vspace*{-6 mm}\begin{center}';
-		    $output.='\begin{center}';
+		    $output.=&center_correction().'\begin{center}';
 		} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
 		    $output.=' \hfill \llap{'
 		}
 		$output.=$Apache::londefdef::table[-1]{'content'}[$in][$jn];
 		if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
-		    # $output.='\end{center}\vspace*{-6 mm}';
-		    $output.='\end{center}';
+		    $output.='\end{center}'.&center_correction();
 		} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
 		    $output.='} ';
 		}
@@ -2217,9 +2232,9 @@ sub end_table {
 	    my $min_nested_width = 0;
 	    my $max_nested_width = 0;
 	    for (my $col = 0; $col <= $Apache::londefdef::table[-1]{'counter_columns'}; $col++) {
-		
 		$min_nested_width +=  $min_len[$col];
 		$max_nested_width +=  $max_len[$col];
+		
 	    }
 	    # Fudge in an extra 5 mm for borders etc:
 	    
@@ -2261,6 +2276,10 @@ sub start_tr {
 	    push @ {$Apache::londefdef::table[-1]{'rows'} }, 'l';
 	}
 	push ( @{ $Apache::londefdef::table[-1]{'rowdata'} }, $Apache::londefdef::table[-1]{'hinc'});
+	#
+	#  Need to save the number of table columns to preserve the max # columns.
+	#
+	$Apache::londefdef::table[-1]{'prior_columns'}   = $Apache::londefdef::table[-1]{'counter_columns'};
 	$Apache::londefdef::table[-1]{'counter_columns'} = -1;
 	push @ {$Apache::londefdef::table[-1]{'TeXlen'}}, [];
 	push @ {$Apache::londefdef::table[-1]{'objectlen'}}, [];
@@ -2280,6 +2299,11 @@ sub end_tr {
 	if ($Apache::londefdef::TD_redirection) {
 	    &end_td_tex($parstack,$parser,$safeeval);    
 	}
+	# Counter columns must be the maximum number of columns seen
+	# in the table so far so:
+	if ($Apache::londefdef::table[-1]{'prior_columns'} > $Apache::londefdef::table[-1]{'counter_columns'}) {
+	    $Apache::londefdef::table[-1]{'counter_columns'} = $Apache::londefdef::table[-1]{'prior_columns'};
+	}
 
 
 	
@@ -2415,16 +2439,20 @@ sub end_td_tex {
 	    push @ {$Apache::londefdef::table[-1]{'minlen'}[$Apache::londefdef::table[-1]{'row_number'}] },$min_length;
 	}        
     }
-	for (my $in=0; $in<=$#{$Apache::londefdef::table[-1]{'include'}};$in++) {    
-	    my $nested = $Apache::londefdef::table[-1]{'include'}[$in];
-	    &Apache::lonnet::logthis("Nested: $nested");
-	    $nested =~ s/\\end\{tabular\}\\strut\\\\/\\end\{tabular\}/;
-	    &Apache::lonnet::logthis("After sub: $nested");
-	   # $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/;
-	    $data =~ s/\\keephidden\{NEW TABLE ENTRY\}/$nested/;
-	}
+    # Substitute all of the tables nested in this cell in their appropriate places.
+
+
+    my $nested_count = $#{$Apache::londefdef::table[-1]{'include'}}; # This one is constant...
+    for (my $in=0; $in<=$nested_count; $in++) {    
+	my $nested = shift @{$Apache::londefdef::table[-1]{'include'}};
+	$nested =~ s/\\end\{tabular\}\\strut\\\\/\\end\{tabular\}/;
+	# $data=~s/\\keephidden\{NEW TABLE ENTRY\}/$Apache::londefdef::table[-1]{'include'}[$in]/;
+	$data =~ s/\\keephidden\{NEW TABLE ENTRY\}/$nested/;
+
+    }
+    # Should be be killing off the 'include' elements as they're used up?
     push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data;
-    return'';
+    return '';
 }
 
 sub end_td {
@@ -2580,11 +2608,11 @@ sub end_th {
 #         (Note there seems to also be support for this as a % of page size)
 #      
 sub start_img {
-    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style) = @_;
     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);
+	my $inside = &Apache::lonxml::get_all_text("/img",$parser,$style);
 	return '';
     }
     &Apache::lonxml::extlink($src);
@@ -2620,7 +2648,8 @@ sub start_img {
 						  $safeeval,
 						  undef,1));
 	if(!$align) {
-	    if (&is_inside_of($tagstack, "table")) {
+	    # disabled for now see BUG#4535
+	    if (0 && &is_inside_of($tagstack, "table")) {
 		$align = "right";      # Force wraptext use. 
 	    } else {
 		$align = "bottom";	# This is html's default so it's ours too.