[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?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);
}