--- loncom/xml/londefdef.pm 2002/10/07 17:57:37 1.90 +++ loncom/xml/londefdef.pm 2002/10/08 15:35:22 1.91 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.90 2002/10/07 17:57:37 sakharuk Exp $ +# $Id: londefdef.pm,v 1.91 2002/10/08 15:35:22 sakharuk Exp $ # # # Copyright Michigan State University Board of Trustees @@ -1291,30 +1291,37 @@ EDITBUTTON return $currentstring; } #-- tag - sub start_table { - my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; - my $currentstring = ''; - if ($target eq 'web') { - $currentstring = $token->[4]; - } elsif ($target eq 'tex') { - my $aa = {}; - push @Apache::londefdef::table, $aa; - $Apache::londefdef::table[-1]{'row_number'} = -1; - $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} '; - my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); - unless (defined $border) { $border = 0; } - if ($border) { - $Apache::londefdef::table[-1]{'hinc'} = '\hline '; - $Apache::londefdef::table[-1]{'vinc'} = '&'; - $Apache::londefdef::table[-1]{'vvinc'} = '|'; - } else { - $Apache::londefdef::table[-1]{'hinc'} = ''; - $Apache::londefdef::table[-1]{'vinc'} = '&'; - $Apache::londefdef::table[-1]{'vvinc'} = ''; - } - } - return $currentstring; +sub start_table { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; + my $currentstring = ''; + if ($target eq 'web') { + $currentstring = $token->[4]; + } elsif ($target eq 'tex') { + my $aa = {}; + push @Apache::londefdef::table, $aa; + $Apache::londefdef::table[-1]{'row_number'} = -1; + $Apache::londefdef::table[-1]{'output'} = ' \noindent \begin{tabular} '; + my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval); + unless (defined $border) { $border = 0; } + if ($border) { + $Apache::londefdef::table[-1]{'hinc'} = '\hline '; + $Apache::londefdef::table[-1]{'vinc'} = '&'; + $Apache::londefdef::table[-1]{'vvinc'} = '|'; + } else { + $Apache::londefdef::table[-1]{'hinc'} = ''; + $Apache::londefdef::table[-1]{'vinc'} = '&'; + $Apache::londefdef::table[-1]{'vvinc'} = ''; + } + my $width; + foreach my $key (keys(%{$token->[2]})) { + if ($key =~ /^width$/i) { + $width = &Apache::lonxml::get_param($key,$parstack,$safeeval); + } } + if (defined($width)) { $Apache::londefdef::table[-1]{'width'}=$width; } + } + return $currentstring; +} sub end_table { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; @@ -1338,28 +1345,9 @@ EDITBUTTON } #define the length of the table cells my @lengthforoutput = split(/,/,$Apache::londefdef::table[-1]{'lengthrow'}[0]); - my $how_many_columns = $#lengthforoutput + 1; - my $filled_columns = 0; - foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) { - my @length = split(/,/,$tempo_length); - my $nfilled_columns = 0; - for (my $ico=0;$ico<$how_many_columns;$ico++) { - if (not $lengthforoutput[$ico]=~m/\s*0\s*/) {$nfilled_columns++;} - } - if ($nfilled_columns > $filled_columns) {$filled_columns=$nfilled_columns;} - } - my $temp_file; - my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.tbl"; - if (-e $filename) { - $temp_file = Apache::File->new($filename); - my @tbl_file_content = <$temp_file>; - my ($one,$two) = split(/,/,$tbl_file_content[0]); - $how_many_columns+=$one-1; - $filled_columns+=$two; - } else { - $temp_file = Apache::File->new('>>'.$filename); - } - print $temp_file "$how_many_columns,$filled_columns\n"; + my $how_many_columns = $#lengthforoutput + 1; #total number of columns in the table + my $filled_columns = 0; #number of columns with information about width + my $available_space = ' '; foreach my $tempo_length (@{ $Apache::londefdef::table[-1]{'lengthrow'} }) { my @length = split(/,/,$tempo_length); for (my $ico=0;$ico<=$#lengthforoutput;$ico++) { @@ -1396,30 +1384,42 @@ EDITBUTTON } } } - my $parboxlength = '(\textwidth'; - for (my $io=0; $io<=$#lengthforoutput;$io++) { - $parboxlength .= ' - '.$lengthforoutput[$io].' '; + for (my $ico=0;$ico<=$#lengthforoutput;$ico++) { + if (not $lengthforoutput[$ico]=~m/^\s*0\s*\w*\s*$/) { + $filled_columns++; + $available_space = $available_space.' - '.$lengthforoutput[$ico]; + } } - $parboxlength .= ')/($GLOBALnumberOFcolumns+1) - 3 mm'; - $output =~ s/\\parbox{}{}/\\parbox{1 mm}{}/g; - $output =~ s/\\parbox{}{(\\textbf{\w?\.?})}/\\parbox{5 mm}{$1}/g; #for stupid tables with empty columns - $output =~ s/\\parbox{}/\\parbox{$parboxlength}/g; - my ($howmanyatall,$howmanyfilled) = (0,0); - + my $temp_file; + my $filename = "/home/httpd/prtspool/$ENV{'user.name'}_$ENV{'user.domain'}_printout.tbl"; + if (-e $filename) { + $temp_file = Apache::File->new($filename); + my @tbl_file_content = <$temp_file>; + my ($one,$two,$three) = split(/,/,$tbl_file_content[0]); + $how_many_columns+=$one-1; + $filled_columns+=$two; + if($three=~/\S/) {$available_space = $available_space.' - '.$three;} + } else { + $temp_file = Apache::File->new('>>'.$filename); + } + print $temp_file "$how_many_columns,$filled_columns,$available_space\n"; + $output =~ s/\\parbox{TOBECHANGEDONNUMBER}{}/\\parbox{1 mm}{}/g; + $output =~ s/\\parbox{TOBECHANGEDONNUMBER}/\\parbox{\$SpacePerColumn}/g; my @tagar = @$tagstack; my $signature = 1; for (my $ico=0;$ico<$#tagar;$ico++) { if ($tagar[$ico] eq 'table') { $signature = 0; } } if ($signature) { - my $totalnumber = $how_many_columns-$filled_columns-1; - $output =~ s/\$GLOBALnumberOFcolumns/$totalnumber/g; - } + my $NumberEmptyLength = $how_many_columns - $filled_columns; + my $SpacePerColumn = '(\textwidth '.$available_space.')/'.$NumberEmptyLength; + $output =~ s/\$SpacePerColumn/$SpacePerColumn/g; + } $Apache::londefdef::table[-1]{'output'} .= $header_of_table.$output.$Apache::londefdef::table[-1]{'hinc'}.'\end{tabular}\vskip 0 mm '; if ($#Apache::londefdef::table > 0) { $inmemory = $Apache::londefdef::table[-1]{'output'}; pop @Apache::londefdef::table; - $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory; + $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}] .= $inmemory } else { $currentstring = $Apache::londefdef::table[-1]{'output'}; $currentstring =~ s/\\\\\s+\\\\/\\\\/g; @@ -1457,7 +1457,6 @@ EDITBUTTON if ($target eq 'web') { $currentstring = $token->[2]; } elsif ($target eq 'tex') { -# $currentstring .= ' START ROW '. $Apache::londefdef::table[-1]{'rowdata'}[$Apache::londefdef::table[-1]{'row_number'}].' END ROW '; push @{ $Apache::londefdef::table[-1]{'lengthrow'} },$Apache::londefdef::table[-1]{'length'}; } @@ -1469,7 +1468,7 @@ EDITBUTTON my $currentstring = ''; if ($target eq 'web') { $currentstring = $token->[4]; - } elsif ($target eq 'tex') { + } elsif ($target eq 'tex') { my $what_to_push = substr(&Apache::lonxml::get_param('align',$parstack,$safeeval),0,1); if ($what_to_push eq '') { $what_to_push = substr($Apache::londefdef::table[-1]{'rows'}[0],0,1);; @@ -1490,16 +1489,16 @@ EDITBUTTON } elsif ($target eq 'tex') { my $current_row = $Apache::londefdef::table[-1]{'row_number'}; my $data=&Apache::lonxml::endredirection(); - if ($data=~m/width\s*=\s*(\d+\.*\d*\s*(mm|cm|in|pc|pt))/) { + if ($data=~m/width\s*=\s*(\d+\.?\d*\s*(mm|cm|in|pc|pt))/) { $Apache::londefdef::table[-1]{'length'} .= $1.','; $tempolen = $1; } else { if (length($data)<5) { - $Apache::londefdef::table[-1]{'length'} .= '7 mm,'; + $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; $tempolen = '5 mm'; } else { $Apache::londefdef::table[-1]{'length'} .= '0 mm,'; - $tempolen = ''; + $tempolen = 'TOBECHANGEDONNUMBER'; } } @{ $Apache::londefdef::table[-1]{'rowdata'} }[$current_row] .= '\parbox{'.$tempolen.'}{'.$data.'} '.$Apache::londefdef::table[-1]{'vinc'};