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

sakharuk lon-capa-cvs@mail.lon-capa.org
Thu, 04 Apr 2002 19:20:34 -0000


sakharuk		Thu Apr  4 14:20:34 2002 EDT

  Modified files:              
    /loncom/xml	londefdef.pm 
  Log:
  All tables without COLSPAN and ROWSPAN attributes can be printed correctly.
  
  
Index: loncom/xml/londefdef.pm
diff -u loncom/xml/londefdef.pm:1.49 loncom/xml/londefdef.pm:1.50
--- loncom/xml/londefdef.pm:1.49	Fri Mar 22 12:52:20 2002
+++ loncom/xml/londefdef.pm	Thu Apr  4 14:20:33 2002
@@ -2,7 +2,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.49 2002/03/22 17:52:20 albertel Exp $
+# $Id: londefdef.pm,v 1.50 2002/04/04 19:20:33 sakharuk Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -50,7 +50,7 @@
 
 BEGIN {
 
-    &Apache::lonxml::register('Apache::londefdef',('m','html','head','map','select','option','input','textarea','form','meta','title','body','center','b','strong','table','dt','h1','h2','h3','h4','h5','h6','cite','i','address','dd','dl','dir','ol','ul','menu','dfn','kbd','tt','code','em','q','p','br','big','small','basefont','font','s','sub','strike','sup','hr','a','li','u','output','param','applet','img','embed','tr','td','allow','frameset','pre','insert','externallink'));
+    &Apache::lonxml::register('Apache::londefdef',('m','html','head','map','select','option','input','textarea','form','meta','title','body','center','b','strong','dt','h1','h2','h3','h4','h5','h6','cite','i','address','dd','dl','dir','ol','ul','menu','dfn','kbd','tt','code','em','q','p','br','big','small','basefont','font','s','sub','strike','sup','hr','a','li','u','output','param','applet','img','embed','allow','frameset','pre','insert','externallink','table'));
 
 }
 
@@ -1259,12 +1259,71 @@
 	}
 #-- <table> tag
         sub start_table {
-	    my ($target,$token) = @_;
+	    my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_;
             my $currentstring = '';
             if ($target eq 'web') {
               $currentstring = $token->[4];     
 	    } elsif ($target eq 'tex') {
-              $currentstring = '';  
+		my $border = &Apache::lonxml::get_param('border',$parstack,$safeeval);
+		my $tabletext=&Apache::lonxml::get_all_text("/table",$$parser[$#$parser]);
+		my %mystyle;
+		$tabletext = &Apache::lonxml::xmlparse('tex',$tabletext,'',%mystyle);       
+		unless (defined $border) { $border = 0; }
+		my $hinc = '';
+                my $vinc = '';   
+		my $vvinc = '';
+		if ($border) { $hinc = '\hline '; $vinc =  '&'; $vvinc =  '|';}
+		my @raws = ();
+		my @columns = ();
+		my $counter_columns;
+#serch row
+		$_ = $tabletext;
+		while (m/<tr\s*([^>]*)>/) {
+		    push @raws,$1;
+                    $tabletext =~ s/<tr\s*([^>]*)>/$hinc/;
+#serch and convert column
+		    my $boundary = index($tabletext,'</tr>',0);
+		    my $textchunk = substr($tabletext,0,$boundary); 
+		    $_ = $textchunk;
+		    $counter_columns = 0;
+		    while (m/<td\s*([^>]*)>/) {
+			push @columns,$1;
+			$counter_columns++;
+			$textchunk =~ s/<\/td>\s*<td\s*([^>]*)>/$vinc/;
+			$textchunk =~ s/<td\s*([^>]*)>//;
+			$textchunk =~ s/<\/td>//;
+			$_ = $textchunk;
+		    }			
+		    substr($tabletext,0,$boundary) = $textchunk;
+#convert row
+		    $tabletext =~ s/<\/tr>/\\\\/;
+		    $_ = $tabletext;
+		}
+		my $default_value = '';
+		if ($raws[1] eq 'left') {
+		    $default_value = 'l';
+		} elsif ($raws[1] eq 'center') {
+		    $default_value = 'c';
+		} elsif ($raws[1] eq 'right') {
+		    $default_value = 'r';
+		} else {
+		     $default_value = 'c';
+		}
+		my $header_of_table = '{'.$vvinc;
+		my $in;
+		for ($in=0;$in<=$counter_columns;$in++) {
+		    if ($columns[$in] eq 'left') {
+			$header_of_table .= 'l'.$vvinc;
+		    } elsif ($columns[$in] eq 'center') {
+			$header_of_table .= 'c'.$vvinc;
+		    } elsif ($columns[$in] eq 'right') {
+			$header_of_table .= 'r'.$vvinc;
+		    } else {
+		       $header_of_table .= $default_value.$vvinc;
+		    }
+		}
+		$header_of_table .= '}';
+		$currentstring .= '\begin{tabular}'.$header_of_table.$tabletext.$hinc.'\end{tabular}';
 	    } 
 	   return $currentstring;
 	}
@@ -1273,50 +1332,6 @@
             my $currentstring = '';
             if ($target eq 'web') {
               $currentstring = $token->[2];     
-	    } elsif ($target eq 'tex') {
-              $currentstring = '';  
-	    } 
-	   return $currentstring;
-	}
-#-- <tr> tag
-        sub start_tr {
-	    my ($target,$token) = @_;
-            my $currentstring = '';
-            if ($target eq 'web') {
-              $currentstring = $token->[4];     
-	    } elsif ($target eq 'tex') {
-	      $currentstring = '';
-	    } 
-	   return $currentstring;
-	}
-        sub end_tr {
-	    my ($target,$token) = @_;
-            my $currentstring = '';
-            if ($target eq 'web') {
-              $currentstring = $token->[2];     
-	    } elsif ($target eq 'tex') {
-              $currentstring = '';  
-	    } 
-	   return $currentstring;
-	}
-#-- <td> tag
-        sub start_td {
-	    my ($target,$token) = @_;
-            my $currentstring = '';
-            if ($target eq 'web') {
-              $currentstring = $token->[4];
-	    } elsif ($target eq 'tex') {
-	      $currentstring = '';
-	    } 
-	   return $currentstring;
-	}
-        sub end_td {
-	    my ($target,$token) = @_;
-            my $currentstring = '';
-            if ($target eq 'web') {
-              $currentstring = $token->[2];
-	    } elsif ($target eq 'tex') {
-              $currentstring = '';
 	    }
 	   return $currentstring;
 	}