--- loncom/interface/lonprintout.pm 2002/09/18 20:40:32 1.70 +++ loncom/interface/lonprintout.pm 2002/09/20 20:32:42 1.73 @@ -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.73 2002/09/20 20:32:42 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -93,7 +93,7 @@ ENDMENUOUT1 if ((not $ENV{'request.role'}=~m/^au\./) and (not $ENV{'request.role'}=~m/^ca\./)) { $r->print(< All problems from $title_for_sequence
- All problems plus any html/xml files from $title_for_sequence
+ All problems plus any pages or html/xml files from $title_for_sequence
ENDMENUOUT2 } if ($ENV{'request.role'}=~m/^cc\./ or $ENV{'request.role'}=~m/^in\./ or $ENV{'request.role'}=~m/^ta\./) { @@ -316,7 +316,7 @@ sub additional_print_menu { -Define page layout parameters:
+Define one column layout parameters:
Width:
Height:
Left margin:
@@ -345,7 +345,7 @@ ENDPART 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 @@ ENDPART $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') { @@ -372,12 +370,16 @@ ENDPART #-- where is the primary sequence containing file? my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'}); $symbolic =~ m/([^_]+)_/; - my $primary_sequence = '/res/'.$1; - my @master_seq = &coming_from_hash($primary_sequence); + my $primary_sequence = '/res/'.$1; + $symbolic =~ m/^([^_]+__)/; + my @master_seq = &coming_from_hash($primary_sequence,$1); #-- 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') { + #prints only problems $selectionmade = 2; if ($urlp =~ m/\.(problem|exam|quiz|assess|survey|form|library)/) { my %moreenv; @@ -385,24 +387,45 @@ ENDPART &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+/) { + #prints problems, pages and any html/xml files $selectionmade = 3; my %moreenv; $moreenv{'form.grade_target'}='tex'; &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; my $main_seq = '/res/'.$ENV{'request.course.uri'}; my @file_seq = &coming_from_hash($main_seq); + my $flag_latex_header_remove = 'NO'; #-- produce an output string for (my $i=0;$i<=$#file_seq;$i++) { my ($urlp,$symb) = split /&&/, $file_seq[$i]; @@ -412,15 +435,21 @@ ENDPART $moreenv{'form.grade_target'}='tex'; &Apache::lonnet::appenv(%moreenv); my $texversion=&Apache::lonnet::ssi($urlp); - &Apache::lonnet::delenv('form.grade_target'); + &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'; } - $result = &additional_cleanup($result); + $result .= '\end{document}'; } elsif ($choice eq 'All class print') { #-- prints assignments for whole class or for selected students $selectionmade = 5; - my (@students,@st_output) = ((),()); + my @students = (); for (my $i=0; $i<$ENV{'form.numberofstudents'};$i++) { if ($ENV{'form.whomtoprint'.$i}=~/:/) { push @students,$ENV{'form.whomtoprint'.$i}; @@ -429,31 +458,41 @@ ENDPART #where is the primary sequence containing current resource (the same for all students)? my $symbolic = &Apache::lonnet::symbread($ENV{'form.url'}); $symbolic =~ m/([^_]+)_/; - my $primary_sequence = '/res/'.$1; - my @master_seq = &coming_from_hash($primary_sequence); - #loop over students + my $primary_sequence = '/res/'.$1; + $symbolic =~ m/^([^_]+__)/; + my @master_seq = &coming_from_hash($primary_sequence,$1); + #loop over students + my $flag_latex_header_remove = 'NO'; foreach my $person (@students) { my $current_output = ''; my ($usersection,$username,$userdomain) = split /:/,$person; my $fullname = &Apache::grades::get_fullname($username,$userdomain); - #goes through all resources, checks if they are available for current student, and produces output + #goes through all resources, checks if they are available for current student, and produces output foreach my $curresline (@master_seq) { my ($curres,$symb) = split /&&/, $curresline; - $curres =~ s/^"//; - $curres =~ s/"$//; - if ($curres=~/\w+/) { + if ($curres=~ m/\.(problem|exam|quiz|assess|survey|form|library)/) { my ($map,$id,$res_url) = split(/___/,$symb); if (&Apache::lonnet::allowed('bre',$res_url)) { my $rendered = &Apache::loncommon::get_student_view($symb,$username,$userdomain, $ENV{'request.course.id'},'tex'); + if ($flag_latex_header_remove eq 'YES') { + $rendered = &latex_header_footer_remove($rendered); + } else { + $rendered =~ s/\\end{document}//; + } $current_output .= $rendered; } + $flag_latex_header_remove = 'YES'; } } - $current_output =~ s/\\begin{document}/\\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$fullname}}\\hskip 1\.4in } \\vskip 5 mm /; + if ($current_output=~/\\documentclass/) { + $current_output =~ s/\\begin{document}/\\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent\\fbox{\\textbf{$fullname}}\\hskip 1\.4in } \\vskip 5 mm /; + } else { + $current_output = '\\vskip 3mm\noindent\parbox{\minipagewidth}{\noindent\fbox{\textbf{'.$fullname.'}}\hskip 1.4in } \vskip 5 mm '.$current_output; + } $result .= $current_output; } - $result = &additional_cleanup($result); + $result .= '\end{document}'; } elsif ($choice eq 'Subdirectory print') { #prints selected problems from the subdirectory $selectionmade = 6; @@ -462,7 +501,8 @@ ENDPART if ($ENV{'form.whattoprint'.$i}=~/^\//) { push @list_of_files,$ENV{'form.whattoprint'.$i}; } - } + } + my $flag_latex_header_remove = 'NO'; for (my $i=0;$i<=$#list_of_files;$i++) { my $urlp = $list_of_files[$i]; if ($urlp=~/\//) { @@ -475,10 +515,16 @@ ENDPART my $texversion=&Apache::lonnet::ssi($urlp); &Apache::lonnet::delenv('form.grade_target'); $texversion =~ s/(\\begin{document})/$1 {\\tiny\\begin{verbatim}$urlp\\end{verbatim}}/; + 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); + $result .= '\end{document}'; } #-- corrections for the different page formats if ($layout eq 'CBI' and $numberofcolumns eq '1') { @@ -553,14 +599,35 @@ FINALEND } -sub coming_from_hash { +sub coming_from_hash_whole { my $mainsequence = shift; my @resourcelist = (); my $mapid = $hash{'map_pc_'.$mainsequence}; my $mapstart = $hash{'map_start_'.$mainsequence}; my $mapfinish = $hash{'map_finish_'.$mainsequence}; - my $symb = &Apache::lonnet::symbread($hash{'src_'.$mapstart}); + my $current_resource = $mapstart; + while ($current_resource ne $mapfinish) { + if ($hash{'src_'.$current_resource}=~/\.sequence$/) { + + } else { + + } + } + + + push @resourcelist,$mapid,$mapstart,$mapfinish; + return @resourcelist; +} + + +sub coming_from_hash { + + my ($mainsequence,$symb) = @_; + my @resourcelist = (); + my $mapid = $hash{'map_pc_'.$mainsequence}; + my $mapstart = $hash{'map_start_'.$mainsequence}; + my $mapfinish = $hash{'map_finish_'.$mainsequence}; my ($presymb) = split(/___/,$symb); $presymb = $presymb.'___'; my $current_resource = $mapstart; @@ -612,6 +679,14 @@ sub coming_from_hash { } +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; @@ -939,19 +1014,6 @@ sub character_chart { #'"` -sub additional_cleanup { - my $result = shift; - my $first_app = index($result,'\documentclass',0); - $first_app = index($result,'\documentclass',$first_app+5); - while ($first_app != -1) { - my $second_app = index($result,'begin{document}',$first_app); - $first_app = rindex($result,'\end{document}',$first_app); - substr($result,$first_app,$second_app-$first_app+15) = '\vskip 3 mm'; - $first_app = index($result,'\documentclass',$first_app+5); - } - return $result; -} - sub page_cleanup { my $result = shift; @@ -1044,12 +1106,3 @@ sub handler { 1; __END__ - - - -#### Test block -# my $ere; -# foreach $ere (%ENV) { -# $result .= ' SS '.$ere.' => '.$ENV{$ere}.' FF '."\n\n"; -# } -####