version 1.369, 2007/06/22 00:11:32
|
version 1.372, 2007/07/04 14:02:14
|
Line 2066 sub end_table {
|
Line 2066 sub end_table {
|
if ($target eq 'web' || $target eq 'webgrade') { |
if ($target eq 'web' || $target eq 'webgrade') { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} elsif ($target eq 'tex') { |
} elsif ($target eq 'tex') { |
|
my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); |
my $inmemory = ''; |
my $inmemory = ''; |
my $output = ''; |
my $output = ''; |
my $WARNING=''; |
my $WARNING=''; |
Line 2162 sub end_table {
|
Line 2163 sub end_table {
|
my @fwidth=@{$Apache::londefdef::table[-1]{'TeXlen'}[0]};#final width array |
my @fwidth=@{$Apache::londefdef::table[-1]{'TeXlen'}[0]};#final width array |
my @adjust=(); |
my @adjust=(); |
#step 1. adjustment by maximum value |
#step 1. adjustment by maximum value |
my $space_neeeded=0; |
my $space_needed=0; |
for (my $jn=0;$jn<=$#max_len;$jn++) { |
for (my $jn=0;$jn<=$#max_len;$jn++) { |
$space_neeeded=$space_neeeded+$max_len[$jn]; |
$space_needed=$space_needed+$max_len[$jn]; |
} |
} |
if ($space_neeeded<=$available_space) { |
if ($space_needed<=$available_space) { |
|
|
for (my $jn=0;$jn<=$#max_len;$jn++) { |
for (my $jn=0;$jn<=$#max_len;$jn++) { |
if ($fwidth[$jn]==0) { |
if ($fwidth[$jn]==0) { |
Line 2175 sub end_table {
|
Line 2176 sub end_table {
|
} |
} |
} else { |
} else { |
#step 2. adjustment by minimum value (estimation) |
#step 2. adjustment by minimum value (estimation) |
$space_neeeded=0; |
$space_needed=0; |
for (my $jn=0;$jn<=$#min_len;$jn++) { |
for (my $jn=0;$jn<=$#min_len;$jn++) { |
$space_neeeded+=$min_len[$jn]; |
$space_needed+=$min_len[$jn]; |
} |
} |
if ($space_neeeded>$available_space) { |
if ($space_needed>$available_space) { |
$WARNING=' \textbf{NOT ENOUGH SPACE FOR TABLE} '; |
$WARNING=' \textbf{NOT ENOUGH SPACE FOR TABLE} '; |
for (my $jn=0;$jn<=$#max_len;$jn++) { |
for (my $jn=0;$jn<=$#max_len;$jn++) { |
if ($fwidth[$jn]==0) { |
if ($fwidth[$jn]==0) { |
Line 2196 sub end_table {
|
Line 2197 sub end_table {
|
} |
} |
} |
} |
if ($how_many_to_scale>0) { |
if ($how_many_to_scale>0) { |
my $space_to_adjust=($space_neeeded-$available_space)/$how_many_to_scale; |
my $space_to_adjust=($space_needed-$available_space)/$how_many_to_scale; |
foreach my $jn (@to_scale) { |
foreach my $jn (@to_scale) { |
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { |
for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) { |
$Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/; |
$Apache::londefdef::table[-1]{'content'}[$in][$jn]=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt)*)/; |
Line 2218 sub end_table {
|
Line 2219 sub end_table {
|
} |
} |
} else { |
} else { |
#step 3. adjustment over minimal + corrections |
#step 3. adjustment over minimal + corrections |
my $enlarge_coef=$available_space/$space_neeeded; |
my $enlarge_coef=$available_space/$space_needed; |
my $acsessive=0; |
my $acsessive=0; |
for (my $jn=0;$jn<=$#min_len;$jn++) { |
for (my $jn=0;$jn<=$#min_len;$jn++) { |
$adjust[$jn]=$min_len[$jn]*$enlarge_coef; |
$adjust[$jn]=$min_len[$jn]*$enlarge_coef; |
Line 2258 sub end_table {
|
Line 2259 sub end_table {
|
for (my $i=0;$i<=$#fwidth;$i++) { |
for (my $i=0;$i<=$#fwidth;$i++) { |
$current+=$fwidth[$i]; |
$current+=$fwidth[$i]; |
} |
} |
|
if ($current == 0) { |
|
$current = $Apache::londefdef::table[-1]{'width'}; |
|
} |
my $coef=$Apache::londefdef::table[-1]{'width'}/$current; |
my $coef=$Apache::londefdef::table[-1]{'width'}/$current; |
for (my $i=0;$i<=$#fwidth;$i++) { |
for (my $i=0;$i<=$#fwidth;$i++) { |
$fwidth[$i]*=$coef; |
$fwidth[$i]*=$coef; |
Line 2310 sub end_table {
|
Line 2314 sub end_table {
|
# Do the appropriate magic if this has a colspan |
# Do the appropriate magic if this has a colspan |
# |
# |
|
|
|
my $border_char = ""; |
|
if ($border) { |
|
$border_char = "|"; |
|
} |
my $spanwidth = 0; |
my $spanwidth = 0; |
if ($colspan > 1) { |
if ($colspan > 1) { |
for (my $spancol = $jn; $spancol < $jn + $colspan; $spancol++) { |
for (my $spancol = $jn; $spancol < $jn + $colspan; $spancol++) { |
Line 2319 sub end_table {
|
Line 2327 sub end_table {
|
$colspan |
$colspan |
."}"; |
."}"; |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
$output .= '{|c|}{'; |
$output .= '{'.$border_char.'c'.$border_char.'}{'; |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
$output .= '{|r|}{'; |
$output .= '{'.$border_char.'r'.$border_char.'}{'; |
} |
} |
else { |
else { |
$output .= "{|p{$spanwidth mm}|}{"; |
$output .= '{'.$border_char."p{$spanwidth mm}".$border_char.'}{'; |
} |
} |
|
|
} else { |
} else { |
Line 2340 sub end_table {
|
Line 2348 sub end_table {
|
if ($rowspan > 1) { |
if ($rowspan > 1) { |
if ($colspan == 1) { |
if ($colspan == 1) { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
$output .= '\multicolumn{1}{|c|}{'; |
$output .= '\multicolumn{1}{'.$border_char.'c'.$border_char.'}{'; |
$multirow_aligned = 1; |
$multirow_aligned = 1; |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
$output .= '\multicolumn{1}{|r|}{'; |
$output .= '\multicolumn{1}{'.$border_char.'r'.$border_char.'}{'; |
$multirow_aligned = 1; |
$multirow_aligned = 1; |
} |
} |
} |
} |
Line 2380 sub end_table {
|
Line 2388 sub end_table {
|
# |
# |
if ($colspan == 1 && $rowspan == 1) { |
if ($colspan == 1 && $rowspan == 1) { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') { |
$output .= '\multicolumn{1}{|c|}{'; |
$output .= '\multicolumn{1}{'.$border_char.'c'.$border_char.'}{'; |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') { |
$output .= '\multicolumn{1}{|r|}{'; |
$output .= '\multicolumn{1}{'.$border_char.'r'.$border_char.'}{'; |
} |
} |
} |
} |
|
|