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

foxr lon-capa-cvs@mail.lon-capa.org
Tue, 20 Dec 2005 23:12:06 -0000


foxr		Tue Dec 20 18:12:06 2005 EDT

  Modified files:              
    /loncom/xml	londefdef.pm 
  Log:
  Bug 4494 - Implement colspan attribute of the <td> tag  note this bug remains
  open as rowspan needs implementation too.
  
  
Index: loncom/xml/londefdef.pm
diff -u loncom/xml/londefdef.pm:1.303 loncom/xml/londefdef.pm:1.304
--- loncom/xml/londefdef.pm:1.303	Mon Dec 19 18:27:33 2005
+++ loncom/xml/londefdef.pm	Tue Dec 20 18:12:03 2005
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.303 2005/12/19 23:27:33 foxr Exp $
+# $Id: londefdef.pm,v 1.304 2005/12/20 23:12:03 foxr Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -2187,6 +2187,15 @@
 	#fill the table
 	for (my $in=0;$in<=$Apache::londefdef::table[-1]{'row_number'};$in++) {
 	    for (my $jn=0;$jn<=$#fwidth;$jn++) {
+		#
+		#  Do the appropriate magic if this has a colspan
+		# 
+		my $colspan = $Apache::londefdef::table[-1]{'colspan'}[$in][$jn];
+		if ($colspan > 1) {
+		    $output .= '\multicolumn{'.
+			$colspan
+			.'}{|l|}{';
+		}
 		if ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'c') {
 		    # $output.='\vspace*{-6 mm}\begin{center}';
 		    $output.='\begin{center}';
@@ -2200,6 +2209,12 @@
 		} elsif ($Apache::londefdef::table[-1]{'align'}[$in][$jn] eq 'r') {
 		    $output.='} ';
 		}
+		#  Close off the colspan...
+		#
+		if ($colspan > 1)  {
+		    $output .= '}';
+		    $jn += $colspan-1; # Adjust for number of rows really left.
+		}
                 if ($jn!=$#fwidth) {$output.=' '.$Apache::londefdef::table[-1]{'vinc'};}
 	    }
 	    $output.=' \\\\ '.$Apache::londefdef::table[-1]{'hinc'}.' ';
@@ -2346,16 +2361,13 @@
 
 sub end_td_tex {
     my ($parstack,$parser,$safeeval) = @_;
-    my $current_row = $Apache::londefdef::table[-1]{'row_number'};
+    my $current_row    = $Apache::londefdef::table[-1]{'row_number'};
+    my $current_column = $Apache::londefdef::table[-1]{'counter_columns'}; 
     my $data = &Apache::lonxml::endredirection();
 
-    # Get the column and row spans.
-    # Colspan can be done via \multicolumn if I can figure out the data structs.
-    # Rowspan, can be done using the multirow package which adds similar stuff to rowspanning.
 
-    my $colspan = &Apache::lonxml::get_param('colspan', $parstack, $safeeval, undef, 0);
-    my $rowspan = &Apache::lonxml::get_param('rowspan', $parstack, $safeeval, undef, 0);
     
+
     my $TeXwidth=&Apache::lonxml::get_param('TeXwidth',$parstack,$safeeval,undef,0);
     if (defined $TeXwidth) {		
 	push @ {$Apache::londefdef::table[-1]{'objectlen'}[$Apache::londefdef::table[-1]{'row_number'}] },'0';
@@ -2445,6 +2457,33 @@
     }
     # Should be be killing off the 'include' elements as they're used up?
     push @ {$Apache::londefdef::table[-1]{'content'}[-1] },$data;
+    # Get the column and row spans.
+    # Colspan can be done via \multicolumn if I can figure out the data structs.
+    # Rowspan, can be done using the multirow package which adds similar stuff to rowspanning.
+
+    my $colspan = &Apache::lonxml::get_param('colspan', $parstack, $safeeval, undef, 0);
+    if (!$colspan) {
+	$colspan = 1;
+    }
+    my $rowspan = &Apache::lonxml::get_param('rowspan', $parstack, $safeeval, undef, 0);
+
+
+    #  the colspan array will indicate how many columns will be spanned by this
+    #  cell..this requires that counter_columns also be adjusted accordingly
+    #  so that the next bunch of text goes in the right cell.  Note that since
+    #  counter_columns is incremented in the start_td_tex, we adjust by colspan-1.
+    #
+
+    $Apache::londefdef::table[-1]{'colspan'}[$current_row][$current_column] = $colspan;
+    $Apache::londefdef::table[-1]{'counter_columns'} += $colspan -1;
+
+    # Put empty text in spanned cols.
+
+    for (my $i = 0; $i < ($colspan -1); $i++) {
+	push @ {$Apache::londefdef::table[-1]{'content'}[-1] },'';
+    }
+
+
     return '';
 }