--- loncom/xml/londefdef.pm 2005/12/01 18:46:17 1.299
+++ 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.299 2005/12/01 18:46:17 albertel 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 = ();
@@ -595,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}'; }
#--
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 .= ¢er_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 .= ¢er_correction();
+ }
}
return $currentstring;
}
@@ -1184,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 = ¢er_correction().$currentstring;
+ $closing_string .= ¢er_correction();
+ }
} elsif ($align eq 'right') {
$currentstring.='\makebox['.$env{'form.textwidth'}.']{\hfill\llap{';
$closing_string= '}}';
@@ -1525,6 +1537,10 @@ sub start_div {
if ($align eq 'center') {
$currentstring .= '\begin{center}';
$endstring = '\end{center}';
+ if (&is_inside_of($tagstack, "table")) {
+ $currentstring = ¢er_correction().$currentstring;
+ $endstring .= ¢er_correction();
+ }
}
elsif ($align eq 'right') {
$currentstring .= '\begin{flushright}';
@@ -1947,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;
}
@@ -2189,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.=¢er_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}'.¢er_correction();
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
$output.='} ';
}
@@ -2218,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:
@@ -2262,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'}}, [];
@@ -2281,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'};
+ }
@@ -2416,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 {
@@ -2621,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.