[LON-CAPA-cvs] cvs: loncom /xml londefdef.pm

sakharuk lon-capa-cvs@mail.lon-capa.org
Tue, 08 Oct 2002 15:35:22 -0000


This is a MIME encoded message

--sakharuk1034091322
Content-Type: text/plain

sakharuk		Tue Oct  8 11:35:22 2002 EDT

  Modified files:              
    /loncom/xml	londefdef.pm 
  Log:
  Corrected <table> to adjust to a variety of courses on s10 (problems with nested tables).
  
  
--sakharuk1034091322
Content-Type: text/plain
Content-Disposition: attachment; filename="sakharuk-20021008113522.txt"

Index: loncom/xml/londefdef.pm
diff -u loncom/xml/londefdef.pm:1.90 loncom/xml/londefdef.pm:1.91
--- loncom/xml/londefdef.pm:1.90	Mon Oct  7 13:57:37 2002
+++ loncom/xml/londefdef.pm	Tue Oct  8 11:35:22 2002
@@ -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 @@
 	   return $currentstring;
 	}
 #-- <table> 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 @@
 		}
                 #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 @@
 			}		 
 		    }
 		}
-                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 @@
             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 @@
             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 @@
 	    } 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'};

--sakharuk1034091322--