--- loncom/interface/lonprintout.pm 2004/08/18 18:56:46 1.326 +++ loncom/interface/lonprintout.pm 2004/10/26 15:03:57 1.333 @@ -1,7 +1,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.326 2004/08/18 18:56:46 sakharuk Exp $ +# $Id: lonprintout.pm,v 1.333 2004/10/26 15:03:57 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,10 +41,7 @@ use Apache::lonnavmaps; use Apache::lonratedt; use POSIX qw(strftime); use Apache::lonlocal; -use GDBM_File; - -my %hash; my $LaTeXwidth = 0; @@ -229,7 +226,7 @@ sub character_chart { $result =~ s/&(\#219|Ucirc);/\\^{U}/g; $result =~ s/&(\#220|Uuml);/\\\"{U}/g; $result =~ s/&(\#221|Yacute);/\\\'{Y}/g; - $result =~ s/&(\#223|szlig);/\\ss/g; + $result =~ s/&(\#223|szlig);/{\\ss}/g; $result =~ s/&(\#224|agrave);/\\\`{a}/g; $result =~ s/&(\#225|aacute);/\\\'{a}/g; $result =~ s/&(\#226|acirc);/\\^{a}/g; @@ -373,6 +370,100 @@ sub character_chart { } + #width, height, oddsidemargin, evensidemargin, topmargin +my %page_formats= + ('letter' => { + 'book' => { + '1' => [ '7.1 in','10.2 in', '-0.57 in','-0.57 in','0 in'], + '2' => ['3.66 in','10.2 in', '-0.57 in','-0.57 in','0 in'] + }, + 'album' => { + '1' => [ '8.8 in', '6.8 in','-40 pt in', '-60 pt','0 in'], + '2' => [ '4.4 in', '6.8 in','-0.5 in', '-1.5 in','3.5 in'] + }, + }, + 'legal' => { + 'book' => { + '1' => ['7.1 in','13 in',,'-0.57 in','-0.57 in','-0.5 in'], + '2' => ['3.16 in','13 in','-0.57 in','-0.57 in','-0.5 in'] + }, + 'album' => { + '1' => [], + '2' => [] + }, + }, + 'tabloid' => { + 'book' => { + '1' => ['9.8 in','16 in','-0.57 in','-0.57 in','-0.5 in'], + '2' => ['4.9 in','16 in','-0.57 in','-0.57 in','-0.5 in'] + }, + 'album' => { + '1' => [], + '2' => [] + }, + }, + 'executive' => { + 'book' => { + '1' => ['6.8 in','9 in','-0.57 in','-0.57 in','1.2 in'], + '2' => ['3.1 in','9 in','-0.57 in','-0.57 in','1.2 in'] + }, + 'album' => { + '1' => [], + '2' => [] + }, + }, + 'a2' => { + 'book' => { + '1' => [], + '2' => [] + }, + 'album' => { + '1' => [], + '2' => [] + }, + }, + 'a3' => { + 'book' => { + '1' => [], + '2' => [] + }, + 'album' => { + '1' => [], + '2' => [] + }, + }, + 'a4' => { + 'book' => { + '1' => ['176 mm','272 mm','-40 pt in','-60 pt','-0.5 in'], + '2' => [ '91 mm','272 mm','-40 pt in','-60 pt','-0.5 in'] + }, + 'album' => { + '1' => ['8.5 in','7.7 in','-40 pt in','-60 pt','0 in'], + '2' => ['3.9 in','7.7 in','-40 pt in','-60 pt','0 in'] + }, + }, + 'a5' => { + 'book' => { + '1' => [], + '2' => [] + }, + 'album' => { + '1' => [], + '2' => [] + }, + }, + 'a6' => { + 'book' => { + '1' => [], + '2' => [] + }, + 'album' => { + '1' => [], + '2' => [] + }, + }, + ); + sub page_format { # #Supported paper format: "Letter [8 1/2x11 in]", "Legal [8 1/2x14 in]", @@ -382,135 +473,7 @@ sub page_format { # "A6 [105x148 mm]" # my ($papersize,$layout,$numberofcolumns) = @_; - my ($textwidth,$textheight,$oddoffset,$evenoffset,$topmargin) = (0,0,0,0,0); - my $page_formats={'book'=>{ - '1'=>{'letter'=>{'width'=>'7.1 in','height'=>'10.2 in','topmargin'=>'0 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - }, - 'legal'=>{'width'=>'7.1 in','height'=>'13 in','topmargin'=>'-0.5 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - }, - 'tabloid'=>{'width'=>'9.8 in','height'=>'16 in','topmargin'=>'-0.5 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - }, - 'exacutive'=>{'width'=>'6.8 in','height'=>'9 in','topmargin'=>'1.2 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - }, - 'a2'=>{ - - }, - 'a3'=>{ - - }, - 'a4'=>{'width'=>'176 mm','height'=>'272 mm','topmargin'=>'-0.5 in', - 'oddsidemargin'=>'-40 pt in','evensidemargin'=>'-60 pt', - - }, - 'a5'=>{ - - }, - 'a6'=>{ - - }, - }, - '2'=>{'letter'=>{'width'=>'3.66 in','height'=>'10.2 in','topmargin'=>'0 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - }, - 'legal'=>{'width'=>'3.16 in','height'=>'13 in','topmargin'=>'-0.5 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - }, - 'tabloid'=>{'width'=>'4.9 in','height'=>'16 in','topmargin'=>'-0.5 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - - }, - 'exacutive'=>{'width'=>'3.1 in','height'=>'9 in','topmargin'=>'1.2 in', - 'oddsidemargin'=>'-0.57 in','evensidemargin'=>'-0.57 in', - }, - 'a2'=>{ - - }, - 'a3'=>{ - - }, - 'a4'=>{'width'=>'91 mm','height'=>'272 mm','topmargin'=>'-0.5 in', - 'oddsidemargin'=>'-40 pt in','evensidemargin'=>'-60 pt', - - }, - 'a5'=>{ - - }, - 'a6'=>{ - - }, - - }, - },'album'=>{ - '1'=>{'letter'=>{'width'=>'8.8 in','height'=>'6.8 in','topmargin'=>'0 in', - 'oddsidemargin'=>'-40 pt in','evensidemargin'=>'-60 pt', - }, - 'legal'=>{ - - }, - 'tabloid'=>{ - - }, - 'exacutive'=>{ - - }, - 'a2'=>{ - - }, - 'a3'=>{ - - }, - 'a4'=>{'width'=>'8.5 in','height'=>'7.7 in','topmargin'=>'0 in', - 'oddsidemargin'=>'-40 pt in','evensidemargin'=>'-60 pt', - - }, - 'a5'=>{ - - }, - 'a6'=>{ - - }, - }, - '2'=>{'letter'=>{'width'=>'4.4 in','height'=>'6.8 in','topmargin'=>'3.5 in', - 'oddsidemargin'=>'-0.5 in','evensidemargin'=>'-1.5 in', - }, - 'legal'=>{ - - }, - 'tabloid'=>{ - - }, - 'exacutive'=>{ - - }, - 'a2'=>{ - - }, - 'a3'=>{ - - }, - 'a4'=>{'width'=>'3.9 in','height'=>'7.7 in','topmargin'=>'0 in', - 'oddsidemargin'=>'-40 pt in','evensidemargin'=>'-60 pt', - - }, - 'a5'=>{ - - }, - 'a6'=>{ - - }, - - }, - }, - }; - return $page_formats->{$layout}->{$numberofcolumns}->{$papersize}->{'width'}, - $page_formats->{$layout}->{$numberofcolumns}->{$papersize}->{'height'}, - $page_formats->{$layout}->{$numberofcolumns}->{$papersize}->{'oddmargin'}, - $page_formats->{$layout}->{$numberofcolumns}->{$papersize}->{'evensidemargin'}, - $page_formats->{$layout}->{$numberofcolumns}->{$papersize}->{'topmargin'}; + return @{$page_formats{$papersize}->{$layout}->{$numberofcolumns}}; } @@ -699,24 +662,21 @@ sub print_latex_header { } sub path_to_problem { - my ($urlp,$LaTeXwidth)=@_; + my ($urlp,$colwidth)=@_; my $newurlp = ''; - $LaTeXwidth=~s/\s*mm\s*$//; - my $HowMany = length($urlp)*2; - if ($HowMany > $LaTeXwidth) { - my @temporrary = split '/',$urlp; - my $HowManyNew = 0; - for (my $ii=0;$ii<=$#temporrary;$ii++) { - if ($temporrary[$ii] ne '') { - $HowManyNew += length($temporrary[$ii])*2; - if ($HowManyNew < $LaTeXwidth ) { - $newurlp .= '/'.$temporrary[$ii]; - } else { - $HowManyNew = 0; - $newurlp .= '|\vskip -1 mm \noindent \verb|'; - $ii--; - } + $colwidth=~s/\s*mm\s*$//; +#characters average about 2 mm in width + if (length($urlp)*2 > $LaTeXwidth) { + my @elements = split '/',$urlp; + my $curlength=0; + foreach my $element (@elements) { + if ($curlength+(length($element)*2) > $colwidth) { + $newurlp .= '|\vskip -1 mm \noindent \verb|'; + $curlength=0; + } else { + $curlength+=length($element)*2; } + $newurlp.='/'.$element; } } else { $newurlp=$urlp; @@ -1080,6 +1040,7 @@ ENDPART $result .= $texversion; $flag_latex_header_remove = 'YES'; } + if (&Apache::loncommon::connection_aborted($r)) { last; } } &Apache::lonnet::delenv('form.counter'); if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;} @@ -1104,6 +1065,7 @@ ENDPART #loop over students my $flag_latex_header_remove = 'NO'; my %moreenv; + $moreenv{'instructor_comments'}='hide'; $moreenv{'textwidth'}=&get_textwidth($helper,$LaTeXwidth); $moreenv{'print_discussions'}=$helper->{'VARS'}->{'PRINT_DISCUSSIONS'}; if ($helper->{'VARS'}->{'PRINT_DISCUSSIONS'} eq 'yes') {$moreenv{'problem_split'}='yes';} @@ -1122,6 +1084,7 @@ ENDPART $student_names[$i].=$person.':'.$fullname.'_END_'; &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,&mt('last student').' '.$fullname); $flag_latex_header_remove = 'YES'; + if (&Apache::loncommon::connection_aborted($r)) { last; } } &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); $result .= $print_array[0].' \end{document}'; @@ -1171,6 +1134,7 @@ ENDPART &mt('last assignment').' '.$fullname); $flag_latex_header_remove = 'YES'; $count++; + if (&Apache::loncommon::connection_aborted($r)) { last; } } &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); $result .= $print_array[0].' \end{document}'; @@ -1320,9 +1284,6 @@ ENDPART } } - &Apache::lonnet::logthis("SSSSSSS: $filename,$laystyle,$papersize,$numberofcolumns,$selectionmade,$helper->{'VARS'}->{'TABLE_CONTENTS'},$helper->{'VARS'}->{'TABLE_INDEX'},$ENV{'request.role.adv'},$#print_array,$student_names,$URLback"); - - &Apache::lonnet::appenv('cgi.'.$identifier.'.file' => $filename, 'cgi.'.$identifier.'.layout' => $laystyle, 'cgi.'.$identifier.'.numcol' => $numberofcolumns, @@ -1395,10 +1356,9 @@ sub print_resources { my $current_counter=$ENV{'form.counter'}; if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { - my %form; - $form{'answer_output_mode'}='tex'; - $form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; - my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$ENV{'request.course.id'},%form); + $moreenv->{'answer_output_mode'}='tex'; + $moreenv->{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; + my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$ENV{'request.course.id'},%{$moreenv}); &Apache::lonnet::appenv(('form.counter' => $current_counter)); if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { $rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; @@ -1441,6 +1401,7 @@ sub print_resources { } $remove_latex_header = 'YES'; } + if (&Apache::loncommon::connection_aborted($r)) { last; } } my $courseidinfo = &get_course(); if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo } @@ -1510,11 +1471,6 @@ use Data::Dumper; sub printHelper { my $r = shift; - if ($ENV{'request.course.id'}) { - my $fn=$ENV{'request.course.fn'}; - tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640); - } - if ($r->header_only) { if ($ENV{'browser.mathml'}) { &Apache::loncommon::content_type($r,'text/xml'); @@ -1999,9 +1955,7 @@ RNDSEED $r->print($helper->display()); - Apache::lonhelper::unregisterHelperTags(); - - untie %hash; + &Apache::lonhelper::unregisterHelperTags(); return OK; } @@ -2043,7 +1997,7 @@ use Apache::lonlocal; my $maxColumns = 2; my @paperSize = ("letter [8 1/2x11 in]", "legal [8 1/2x14 in]", - "tabloid (ladger) [11x17 in]", "executive [7 1/2x10 in]", + "tabloid (ledger) [11x17 in]", "executive [7 1/2x10 in]", "a2 [420x594 mm]", "a3 [297x420 mm]", "a4 [210x297 mm]", "a5 [148x210 mm]", "a6 [105x148 mm]" );