--- loncom/interface/lonprintout.pm 2009/04/17 10:08:42 1.550 +++ loncom/interface/lonprintout.pm 2009/07/14 09:30:20 1.557.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.550 2009/04/17 10:08:42 foxr Exp $ +# $Id: lonprintout.pm,v 1.557.2.1 2009/07/14 09:30:20 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -70,6 +70,10 @@ my $ssi_last_error; # The error text fr my $ssi_retry_count = 5; # Some arbitrary value. +# Font size: + +my $font_size = 'normalsize'; # Default is normalsize... + # Fetch the contents of a resource, uninterpreted. # This is used here to fetch a latex file to be included @@ -114,6 +118,24 @@ sub annotate { return $result; } +# +# Set a global document font size: +# This is done by replacing \begin{document} +# with \begin{document}{\some-font-directive +# and \end{document} with +# }\end{document +# +sub set_font_size { + + my ($text) = @_; + + $text =~ s/\\begin{document}/\\begin{document}{\\$font_size/; + $text =~ s/\\end{document}/}\\end{document}/; + return $text; + + +} + # include_pdf - PDF files are included into the # output as follows: # - The PDF, if necessary, is replicated. @@ -163,7 +185,7 @@ sub include_pdf { $base =~ s/ /\_/g; - my $output = &print_latex_header()."\\begin{document}\n"; + my $output = &print_latex_header(); $output .= '\special{ps: _begin_job_ (' .$base.'.pdf.eps'. ')run _end_job_}'; @@ -921,6 +943,8 @@ sub old_character_chart { $result =~ s/&(ldquo|#8220);/\`\`/g; $result =~ s/&(rdquo|#8221);/\'\'/g; +&Apache::lonnet::logthis("After pass through old character chart: '$result'"); + return $result; } @@ -1284,6 +1308,46 @@ sub unsupported { } +sub print_page_in_course { + my ($helper, $currentURL, $resources) = @_; + my @page_resources = @$resources; + my $mode = $helper->{'VARS'}->{'LATEX_TYPE'}; + my $symb = $helper->{'VARS'}->{'symb'}; + + if ($mode ne '') {$mode='\\'.$mode} + my $result.= &print_latex_header($mode); + if ($currentURL=~m|^(/adm/wrapper/)?ext/|) { + $currentURL=~s|^(/adm/wrapper/)?ext/|http://|; + my $title=&Apache::lonnet::gettitle($symb); + $title = &Apache::lonxml::latex_special_symbols($title); + $result.=' \strut \\\\ '.$title.' \strut \\\\ '.$currentURL.' '; + } else { + $result.=$currentURL; + } + + # First is theo verall page description. This is then followed by the + # components of the page. Each of which must be printed independently. + + my $the_page = shift(@page_resources); + $result .= "URL: $currentURL " .'\\\\'; + + foreach my $resource (@page_resources) { + my $resource_src = $resource->src(); + my $resource_symb = $resource->symb(); + $resource_symb = &Apache::lonnet::clutter($resource_symb); + my $resource_kind = $resource->kind(); + my $resource_title = $resource->title(); + + $result .= &Apache::lonxml::latex_special_symbols("Src: $resource_src symb: $resource_symb "); + $result .= &Apache::lonxml::latex_special_symbols("Kind: $resource_kind Title: $resource_title"); + $result .= '\\\\'; + } + + $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}'; + return $result; +} + + # # List of recently generated print files # @@ -1453,7 +1517,7 @@ sub print_construction_sequence { $result.=$texversion; } elsif ($urlp=~/\.(sequence|page)$/) { - + # header: $result.='\strut\newline\noindent Sequence/page '.$urlp.'\strut\newline\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\newline\noindent '; @@ -1474,7 +1538,18 @@ sub print_construction_sequence { } } elsif ($urlp =~ /\.pdf$/i) { - $result .= &include_pdf($urlp); + my $texversion; + if ($member != 0) { + $texversion .= '\cleardoublepage'; + } + + $texversion .= &include_pdf($urlp); + $texversion = &latex_header_footer_remove($texversion); + if ($member != $#order) { + $texversion .= '\\ \cleardoublepage'; + } + + $result .= $texversion; } } if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;} @@ -1486,6 +1561,7 @@ sub output_data { my %parmhash = %$rparmhash; $ssi_error = 0; # This will be set nonzero by failing ssi's. $resources_printed = ''; + $font_size = $helper->{'VARS'}->{'fontsize'}; my $do_postprocessing = 1; my $js = < @@ -1596,7 +1672,7 @@ ENDPART } $selectionmade = 1; if ($cleanURL!~m|^/adm/| - && $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { + && $cleanURL=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm)$/) { my $rndseed=time; my $texversion=''; if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') { @@ -1689,10 +1765,13 @@ ENDPART ($result,$number_of_columns) = &page_cleanup($result); } } elsif ($cleanURL!~m|^/adm/| - && $currentURL=~/\.sequence$/ && $helper->{'VARS'}->{'construction'} eq '1') { + && $currentURL=~/\.(sequence|page)$/ && $helper->{'VARS'}->{'construction'} eq '1') { #printing content of sequence from the construction space + + &Apache::lonnet::logthis("Printing sequence/page but construction space??"); + $currentURL=~s|\/~([^\/]+)\/|\/home\/$1\/public_html\/|; - $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); +# $result .= &print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); $result .= &print_construction_sequence($currentURL, $helper, %form, $LaTeXwidth); $result .= '\end{document}'; @@ -1725,7 +1804,19 @@ ENDPART } elsif ($cleanURL =~ /\.pdf$/i) { $result .= &include_pdf($cleanURL); + $result .= '\end{document}'; + } elsif ($cleanURL =~ /\.page$/i) { # Print page in non construction space contexts. + &Apache::lonnet::logthis("Printing .page $cleanURL at " . __LINE__); + + # Determine the set of resources in the map of the page: + + my $navmap = Apache::lonnavmaps::navmap->new(); + my @page_resources = $navmap->retrieveResources($cleanURL); + $result .= &print_page_in_course($helper, $cleanURL, \@page_resources); + + } else { + &Apache::lonnet::logthis("Unsupported type handler"); $result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'}, $helper->{'VARS'}->{'symb'}); } @@ -1792,10 +1883,13 @@ ENDPART my $texversion=''; if ($urlp!~m|^/adm/| && $urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { + &Apache::lonnet::logthis("At line 1834 printing $urlp"); $resources_printed .= $urlp.':'; &Apache::lonxml::remember_problem_counter(); $texversion.=&ssi_with_retries($urlp, $ssi_retry_count, %form); if ($urlp=~/\.page$/) { + &Apache::lonnet::logthis("Handling a .page at ". __LINE__); + ($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}/; @@ -1818,6 +1912,7 @@ ENDPART } else { if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library)$/) { $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); + $texversion =~ s/\\begin{document}//; my $title = &Apache::lonnet::gettitle($master_seq[$i]); $title = &Apache::lonxml::latex_special_symbols($title); my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; @@ -1853,6 +1948,7 @@ ENDPART $assignment, $courseidinfo, $name); + if ($numberofcolumns eq '1') { $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{'.$header_text.'}} \vskip 5 mm '; } else { @@ -1962,7 +2058,7 @@ ENDPART my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'}; #loop over students - my $flag_latex_header_remove = 'NO'; + my $flag_latex_header_remove = 'NO'; my %moreenv; $moreenv{'instructor_comments'}='hide'; $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); @@ -2208,6 +2304,11 @@ ENDPART $URLback=~s|^/~|/priv/|; } } + # + # Final adjustment of the font size: + # + + $result = set_font_size($result); #-- writing .tex file in prtspool my $temp_file; @@ -2292,7 +2393,7 @@ ENDPART # If there's been an unrecoverable SSI error, report it to the user if ($ssi_error) { my $helpurl = &Apache::loncommon::top_nav_help('Helpdesk'); - $r->print('

'.&mt('An unrecoverable network error occurred:').'

'. + $r->print('

'.&mt('An unrecoverable network error occurred:').'

'. &mt('At least one of the resources you chose to print could not be rendered due to an unrecoverable error when communicating with a server:'). '
'.$ssi_last_error_resource.'
'.$ssi_last_error. '

'.&mt('You can continue using the link provided below, but make sure to carefully inspect your output file! The errors will be marked in the file.').'
'. @@ -2377,7 +2478,7 @@ sub print_resources { if ($res_url!~m|^ext/| && $res_url=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) { $printed .= $curresline.':'; - + &Apache::lonnet::logthis("At line 2427 printing $curresline"); &Apache::lonxml::remember_problem_counter(); my $rendered = &get_student_view_with_retries($curresline,$ssi_retry_count,$username,$userdomain,$env{'request.course.id'},'tex',$moreenv); @@ -2399,6 +2500,7 @@ sub print_resources { my $header =&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'}); + $header =~ s/\\begin{document}//; #<<<<< my $title = &Apache::lonnet::gettitle($curresline); $title = &Apache::lonxml::latex_special_symbols($title); my $body ='\vskip 0 mm \noindent\textbf{'.$title.'}\vskip 0 mm '; @@ -2434,7 +2536,13 @@ sub print_resources { $rendered =~ s/\\end{document}//; } $current_output .= $rendered.'\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\strut \vskip 0 mm \strut '; - + } elsif($res_url = ~/\.pdf$/) { + my $url = &Apache::lonnet::clutter($res_url); + my $rendered = &include_pdf($url); + if ($remove_latex_header ne 'NO') { + $rendered = &latex_header_footer_remove($rendered); + } + $current_output .= $rendered; } else { my $rendered = &unsupported($res_url,$helper->{'VARS'}->{'LATEX_TYPE'},$curresline); if ($remove_latex_header ne 'NO') { @@ -2449,6 +2557,8 @@ sub print_resources { } if (&Apache::loncommon::connection_aborted($r)) { last; } } + + my $courseidinfo = &get_course(); my $currentassignment=&Apache::lonxml::latex_special_symbols($helper->{VARS}->{'assignment'},'header'); my $header_line = @@ -2457,7 +2567,6 @@ sub print_resources { my $header_start = ($columns_in_format == 1) ? '\lhead' : '\fancyhead[LO]'; $header_line = $header_start.'{'.$header_line.'}'; - if ($current_output=~/\\documentclass/) { $current_output =~ s/\\begin{document}/\\setlength{\\topmargin}{1cm} \\begin{document}\\noindent\\parbox{\\minipagewidth}{\\noindent$header_line$namepostfix}\\vskip 5 mm /; } else { @@ -3136,7 +3245,6 @@ CHOOSE_ANON2 )) && $helper->{VARS}->{'assignment'} eq "" ) { - my $pretty_dir = &Apache::lonnet::hreflocation($subdir); push @{$printChoices}, [&mt('Selected [_1]Problems[_2] from current subdirectory [_3]','','',''.$pretty_dir.'','',''), 'problems_from_directory', 'CHOOSE_FROM_SUBDIR']; my $xmlfrag = <' .'

'.&mt('Print Options').'

' .&Apache::lonhtmlcommon::start_pick_box() -# .&Apache::lonhtmlcommon::row_headline() -# .'

'.&mt('Print Options').'

' -# .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title( '