--- loncom/interface/lonprintout.pm 2004/08/18 18:56:46 1.326 +++ loncom/interface/lonprintout.pm 2005/08/12 21:33:41 1.381 @@ -1,7 +1,7 @@ -# The LearningOnline Network +# The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.326 2004/08/18 18:56:46 sakharuk Exp $ +# $Id: lonprintout.pm,v 1.381 2005/08/12 21:33:41 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -41,12 +41,66 @@ use Apache::lonnavmaps; use Apache::lonratedt; use POSIX qw(strftime); use Apache::lonlocal; -use GDBM_File; +my $resources_printed = ''; -my %hash; -my $LaTeXwidth = 0; +# Compare two students by name. The students are in the form +# returned by the helper: +# user:domain:section:last, first:status +# This is a helper function for the perl sort built-in therefore: +# Implicit Inputs: +# $a - The first element to compare (global) +# $b - The second element to compare (global) +# Returns: +# -1 - $a < $b +# 0 - $a == $b +# +1 - $a > $b +# Note that the initial comparison is done on the last names with the +# first names only used to break the tie. +# +# +sub compare_names { + # First split the names up into the primary fields. + + my ($u1, $d1, $s1, $n1, $stat1) = split(/:/, $a); + my ($u2, $d2, $s2, $n2, $stat2) = split(/:/, $b); + + # Now split the last name and first name of each n: + # + + my ($l1,$f1) = split(/,/, $n1); + my ($l2,$f2) = split(/,/, $n2); + # We don't bother to remove the leading/trailing whitespace from the + # firstname, unless the last names compare identical. + + if($l1 lt $l2) { + return -1; + } + if($l1 gt $l2) { + return 1; + } + + # Break the tie on the first name, but there are leading (possibly trailing + # whitespaces to get rid of first + # + $f1 =~ s/^\s+//; # Remove leading... + $f1 =~ s/\s+$//; # Trailing spaces from first 1... + + $f2 =~ s/^\s+//; + $f2 =~ s/\s+$//; # And the same for first 2... + + if($f1 lt $f2) { + return -1; + } + if($f1 gt $f2) { + return 1; + } + + # Must be the same name. + + return 0; +} sub latex_header_footer_remove { my $text = shift; @@ -229,7 +283,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 +427,100 @@ sub character_chart { } + #width, height, oddsidemargin, evensidemargin, topmargin +my %page_formats= + ('letter' => { + 'book' => { + '1' => [ '7.1 in','9.8 in', '-0.57 in','-0.57 in','0.7 cm'], + '2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','0.7 cm'] + }, + 'album' => { + '1' => [ '8.8 in', '6.8 in','-40 pt in', '-60 pt','1 cm'], + '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' => ['12 in','7.1 in',,'-0.57 in','-0.57 in','-0.5 in'], + '2' => ['6.0 in','7.1 in','-1 in','-1 in','5 in'] + }, + }, + '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' => ['16 in','9.8 in','-0.57 in','-0.57 in','-0.5 in'], + '2' => ['16 in','4.9 in','-0.57 in','-0.57 in','-0.5 in'] + }, + }, + '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,142 +530,14 @@ 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}}; } sub get_name { my ($uname,$udom)=@_; - if (!defined($uname)) { $uname=$ENV{'user.name'}; } - if (!defined($udom)) { $udom=$ENV{'user.domain'}; } + if (!defined($uname)) { $uname=$env{'user.name'}; } + if (!defined($udom)) { $udom=$env{'user.domain'}; } my $plainname=&Apache::loncommon::plainname($uname,$udom); if ($plainname=~/^\s*$/) { $plainname=$uname.'@'.$udom; } $plainname=&Apache::lonxml::latex_special_symbols($plainname,'header'); @@ -526,8 +546,8 @@ sub get_name { sub get_course { my $courseidinfo; - if (defined($ENV{'request.course.id'})) { - $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($ENV{'course.'.$ENV{'request.course.id'}.'.description'}),'header'); + if (defined($env{'request.course.id'})) { + $courseidinfo = &Apache::lonxml::latex_special_symbols(&Apache::lonnet::unescape($env{'course.'.$env{'request.course.id'}.'.description'}),'header'); } return $courseidinfo; } @@ -553,12 +573,12 @@ sub page_format_transformation { $fancypagestatement="\\rhead{}\\chead{}\\lhead{\\textbf{$name} $courseidinfo \\hfill \\thepage \\\\ \\textit{$assignment}}"; } if ($layout eq 'album') { - $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1} /; + $text =~ s/\\begin{document}/\\setlength{\\oddsidemargin}{$oddoffset}\\setlength{\\evensidemargin}{$evenoffset}$topmargintoinsert\n\\setlength{\\textwidth}{$textwidth}\\setlength{\\textheight}{$textheight}\\setlength{\\textfloatsep}{8pt plus 2\.0pt minus 4\.0pt}\n\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\n\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}\n /; } elsif ($layout eq 'book') { if ($choice ne 'All class print') { - $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\pagestyle{fancy}$fancypagestatement\\begin{document}\\voffset=-0\.8 cm\\setcounter{page}{1}/; + $text =~ s/\\begin{document}/\\textheight $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\n\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\n\\renewcommand{\\ref}{\\keephidden\}\\usepackage{fancyhdr}\\addtolength{\\headheight}{\\baselineskip}\\pagestyle{fancy}$fancypagestatement\\begin{document}\n\\voffset=-0\.8 cm\\setcounter{page}{1}\n/; } else { - $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\\setcounter{page}{1} \\vskip 5 mm /; + $text =~ s/\\pagestyle{fancy}\\rhead{}\\chead{}\s*\\begin{document}/\\textheight = $textheight\\oddsidemargin = $evenoffset\n\\evensidemargin = $evenoffset $topmargintoinsert\\textwidth= $textwidth\\newlength{\\minipagewidth}\n\\setlength{\\minipagewidth}{\\textwidth\/\$number_of_columns-0\.2cm}\\renewcommand{\\ref}{\\keephidden\}\\pagestyle{fancy}\\rhead{}\\chead{}\\begin{document}\\voffset=-0\.8cm\n\\setcounter{page}{1} \\vskip 5 mm\n /; } if ($papersize eq 'a4') { $text =~ s/(\\begin{document})/$1\\special{papersize=210mm,297mm}/; @@ -588,9 +608,11 @@ sub page_cleanup { sub details_for_menu { - - my $name_of_resourse = &Apache::lonnet::gettitle($ENV{'form.postdata'}); - my $symbolic = &Apache::lonnet::symbread($ENV{'form.postdata'}); + my ($helper)=@_; + my $postdata=$env{'form.postdata'}; + if (!$postdata) { $postdata=$helper->{VARS}{'postdata'}; } + my $name_of_resource = &Apache::lonnet::gettitle($postdata); + my $symbolic = &Apache::lonnet::symbread($postdata); my ($map,$id,$resource)=&Apache::lonnet::decode_symb($symbolic); $map=&Apache::lonnet::clutter($map); my $name_of_sequence = &Apache::lonnet::gettitle($map); @@ -598,13 +620,12 @@ sub details_for_menu { $map =~ m|([^/]+)$|; $name_of_sequence = $1; } - my $name_of_map = &Apache::lonnet::gettitle($ENV{'request.course.uri'}); + my $name_of_map = &Apache::lonnet::gettitle($env{'request.course.uri'}); if ($name_of_map =~ /^\s*$/) { - $ENV{'request.course.uri'} =~ m|([^/]+)$|; + $env{'request.course.uri'} =~ m|([^/]+)$|; $name_of_map = $1; } - return ($name_of_resourse,$name_of_sequence,$name_of_map); - + return ($name_of_resource,$name_of_sequence,$name_of_map); } @@ -629,7 +650,8 @@ sub latex_corrections { $first_comment = index($result,'