[LON-CAPA-cvs] cvs: loncom /interface lonprintout.pm

sakharuk lon-capa-cvs@mail.lon-capa.org
Thu, 19 Sep 2002 18:33:20 -0000


sakharuk		Thu Sep 19 14:33:20 2002 EDT

  Modified files:              
    /loncom/interface	lonprintout.pm 
  Log:
  1. Primary sequence now can be printed if it has pages inside. I included
     this possibility in the third item of the main menu "All problems
     plus any pages or html/xml files from "Title"". The reason of this -
     page can contain any html or xml documents inside. But I still do not
     understand - either I have to include printing pages in the second item
     of the main menu "All problems from "Title"", because page can be
     constructed from the problems only.
  2. I removed any possibilities for infinite loop from the printing of primary
     sequences (second and third items of the main menu). The same I'll do for
     the printing of the assignments for the students and for the printing of the    whole course. 
  
  
Index: loncom/interface/lonprintout.pm
diff -u loncom/interface/lonprintout.pm:1.70 loncom/interface/lonprintout.pm:1.71
--- loncom/interface/lonprintout.pm:1.70	Wed Sep 18 16:40:32 2002
+++ loncom/interface/lonprintout.pm	Thu Sep 19 14:33:20 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.70 2002/09/18 20:40:32 albertel Exp $
+# $Id: lonprintout.pm,v 1.71 2002/09/19 18:33:20 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -93,7 +93,7 @@
     if ((not $ENV{'request.role'}=~m/^au\./) and (not $ENV{'request.role'}=~m/^ca\./)) {
 	$r->print(<<ENDMENUOUT2);
 <input type="radio" name="choice" value="Standard LaTeX output for the primary sequence">  All problems from <b>$title_for_sequence</b><br />
-<input type="radio" name="choice" value="Standard LaTeX output for whole primary sequence">  All problems plus any html/xml files from <b>$title_for_sequence</b><br />
+<input type="radio" name="choice" value="Standard LaTeX output for whole primary sequence">  All problems plus any pages or html/xml files from <b>$title_for_sequence</b><br />
 ENDMENUOUT2
     }
     if ($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) { 
@@ -345,7 +345,7 @@
     my $numberofcolumns = $ENV{'form.numberofcolumns'};               
     my $laystyle = 'book';
     my $result = '';
-    my $number_of_columns = 1;
+    my $number_of_columns = 1; #used only for pages to determine the width of the cell
     my $selectionmade = '';
  
     if ($choice eq 'Standard LaTeX output for current document') {
@@ -363,8 +363,6 @@
       $result .= $texversion;
       if ($ENV{'form.url'}=~m/\.page\s*$/) {
 	  ($result,$number_of_columns) = &page_cleanup($result);
-      } else {
-	  $result = &additional_cleanup($result);
       }
     } elsif ($choice eq 'Standard LaTeX output for the primary sequence' or 
              $choice eq 'Standard LaTeX output for whole primary sequence') {
@@ -375,6 +373,8 @@
 	my $primary_sequence = '/res/'.$1;    
 	my @master_seq = &coming_from_hash($primary_sequence);
         #-- produce an output string
+	my $flag_latex_header_remove = 'NO';
+	my $flag_page_in_sequence = 'NO';
 	for (my $i=0;$i<=$#master_seq;$i++) {
             my ($urlp,$symb) = split /&&/, $master_seq[$i];		
 	    if ($choice eq 'Standard LaTeX output for the primary sequence') {
@@ -385,7 +385,13 @@
 		    &Apache::lonnet::appenv(%moreenv);
 		    my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
 		    &Apache::lonnet::delenv('form.grade_target');
+		    if ($flag_latex_header_remove ne 'NO') {
+			$texversion = &latex_header_footer_remove($texversion);
+		    } else {
+			$texversion =~ s/\\end{document}//;
+		    }
 		    $result .= $texversion;        
+		    $flag_latex_header_remove = 'YES';
 		}
 	    } elsif ($urlp =~ /\S+/) {
 		$selectionmade = 3;
@@ -394,10 +400,23 @@
 		&Apache::lonnet::appenv(%moreenv);
 		my $texversion=&Apache::lonnet::ssi($urlp,('symb'=>$symb));
 		&Apache::lonnet::delenv('form.grade_target');
-		$result .= $texversion;    
+		if ($urlp =~ m/\.page/) {
+		    ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
+		    if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} 
+		    $texversion =~ s/\\end{document}\d*/\\end{document}/;
+		    $flag_page_in_sequence = 'YES';
+		} 
+		if ($flag_latex_header_remove ne 'NO') {
+		    $texversion = &latex_header_footer_remove($texversion);
+		} else {
+		    $texversion =~ s/\\end{document}//;
+		}
+		$result .= $texversion;         
+		$flag_latex_header_remove = 'YES';   
 	    }
-	}	
-	$result = &additional_cleanup($result);
+	}		
+	if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}	
+	$result .= '\end{document}';
     }  elsif ($choice eq 'Standard LaTeX output for the top level sequence') {
         # where is the main sequence of the course?
 	$selectionmade = 4;
@@ -612,6 +631,14 @@
 }
 
 
+sub latex_header_footer_remove {
+    my $text = shift;
+    $text =~ s/\\end{document}//;
+    $text =~ s/\\documentclass([^&]*)\\begin{document}//;
+    return $text;
+}
+
+
 sub character_chart {
     my $result = shift;	
     $result =~ s/&#0?0?7;//g;
@@ -946,6 +973,7 @@
     while ($first_app != -1) {
 	my $second_app = index($result,'begin{document}',$first_app);
 	$first_app = rindex($result,'\end{document}',$first_app);
+	if ($first_app == -1) {last;}
 	substr($result,$first_app,$second_app-$first_app+15) = '\vskip 3 mm';
 	$first_app = index($result,'\documentclass',$first_app+5);
     }