--- loncom/interface/lonprintout.pm 2006/10/17 09:56:16 1.487
+++ loncom/interface/lonprintout.pm 2007/04/20 20:13:58 1.498
@@ -2,7 +2,7 @@
# The LearningOnline Network
# Printout
#
-# $Id: lonprintout.pm,v 1.487 2006/10/17 09:56:16 foxr Exp $
+# $Id: lonprintout.pm,v 1.498 2007/04/20 20:13:58 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -38,17 +38,44 @@ use Apache::grades;
use Apache::edit;
use Apache::File();
use Apache::lonnavmaps;
-use Apache::lonratedt;
+use LONCAPA::map();
use POSIX qw(strftime);
use Apache::lonlocal;
use Carp;
-use lib '/home/httpd/lib/perl/';
use LONCAPA;
my %perm;
my %parmhash;
my $resources_printed;
+# Fetch the contents of a resource, uninterpreted.
+# This is used here to fetch a latex file to be included
+# verbatim into the printout<
+# NOTE: Ask Guy if there is a lonnet function similar to this?
+#
+# Parameters:
+# URL of the file
+#
+sub fetch_raw_resource {
+ my ($url) = @_;
+
+ my $filename = &Apache::lonnet::filelocation("", $url);
+ #
+ # fetch if needed:
+ #
+ if (! -e $filename) {
+ my $repcopy_result = &Apache::lonnet::repcopy($filename);
+
+ if ($repcopy_result ne 'ok') {
+ return "File open failed for $filename"; # This will bomb the print.
+ }
+ }
+ my $contents = &Apache::lonnet::readfile($filename);
+
+ return $contents;
+
+}
+
#
# printf_style_subst item format_string repl
#
@@ -61,26 +88,38 @@ my $resources_printed;
#
sub printf_style_subst {
my ($item, $format_string, $repl) = @_;
-
- while ($format_string =~ /%\d*\Q$item\E/) {
- my $start = $-[0];
- my $end = $+[0];
- my $len = $end - $start;
-
- # see if we need to truncate:
-
+ my $result = "";
+ while ($format_string =~ /(%)(\d*)\Q$item\E/g ) {
+ my $fmt = $1;
+ my $size = $2;
my $subst = $repl;
- my $fmt = substr($format_string, $start, $len);
- my $size = $fmt;
- $size =~ s/%(\d*)\Q$item\E/$1/;
if ($size ne "") {
$subst = substr($subst, 0, $size);
- }
- $format_string =~ s/%(\d*)\Q$item\E/$subst/;
+
+ # Here's a nice edge case.. supose the end of the
+ # substring is a \. In that case may have just
+ # chopped off a TeX escape... in that case, we append
+ # " " for the trailing character, and let the field
+ # spill over a bit (sigh).
+ # We don't just chop off the last character in order to deal
+ # with one last pathology, and that would be if substr had
+ # trimmed us to e.g. \\\
+
+ if ($subst =~ /\\$/) {
+ $subst .= " ";
+ }
+ }
+ my $item_pos = pos($format_string);
+ $result .= substr($format_string, 0, $item_pos - length($size) -2) . $subst;
+ $format_string = substr($format_string, pos($format_string));
}
- return $format_string;
+ # Put the residual format string into the result:
+
+ $result .= $format_string;
+
+ return $result;
}
@@ -135,6 +174,12 @@ sub format_page_header {
$format = &printf_style_subst("a", $format, $assignment);
$format = &printf_style_subst("c", $format, $course);
$format = &printf_style_subst("n", $format, $student);
+
+ # If the user put %'s in the format string, they must be escaped
+ # to \% else LaTeX will think they are comments and terminate
+ # the line.. which is bad!!!
+
+
}
@@ -158,7 +203,7 @@ sub num_to_letters {
sub letters_to_num {
my ($letters) = @_;
my @letters = split('', uc($letters));
- my %substitution;
+ my %substitution;
my $digit = 0;
foreach my $letter ('A'..'J') {
$substitution{$letter} = $digit;
@@ -473,7 +518,7 @@ sub character_chart {
$result =~ s/&\#147;/\`\`/g;
$result =~ s/&\#148;/\'\'/g;
$result =~ s/&\#149;/\\ensuremath\{\\bullet\}/g;
- $result =~ s/&\#150;/--/g;
+ $result =~ s/&(\#150|\#8211);/--/g;
$result =~ s/&\#151;/---/g;
$result =~ s/&\#152;/\\ensuremath\{\\sim\}/g;
$result =~ s/&\#153;/\\texttrademark /g;
@@ -680,6 +725,20 @@ sub character_chart {
$result =~ s/&(clubs|\#9827);/\\ensuremath\{\\clubsuit\}/g;
$result =~ s/&(hearts|\#9829);/\\ensuremath\{\\heartsuit\}/g;
$result =~ s/&(diams|\#9830);/\\ensuremath\{\\diamondsuit\}/g;
+# Chemically useful 'things' contributed by Hon Kie (bug 4652).
+ $result =~ s/&\#8636;/\\ensuremath\{\\leftharpoonup\}/g;
+ $result =~ s/&\#8637;/\\ensuremath\{\\leftharpoondown\}/g;
+ $result =~ s/&\#8640;/\\ensuremath\{\\rightharpoonup\}/g;
+ $result =~ s/&\#8641;/\\ensuremath\{\\rightharpoondown\}/g;
+ $result =~ s/&\#8652;/\\ensuremath\{\\rightleftharpoons\}/g;
+ $result =~ s/&\#8605;/\\ensuremath\{\\leadsto\}/g;
+ $result =~ s/&\#8617;/\\ensuremath\{\\hookleftarrow\}/g;
+ $result =~ s/&\#8618;/\\ensuremath\{\\hookrightarrow\}/g;
+ $result =~ s/&\#8614;/\\ensuremath\{\\mapsto\}/g;
+ $result =~ s/&\#8599;/\\ensuremath\{\\nearrow\}/g;
+ $result =~ s/&\#8600;/\\ensuremath\{\\searrow\}/g;
+ $result =~ s/&\#8601;/\\ensuremath\{\\swarrow\}/g;
+ $result =~ s/&\#8598;/\\ensuremath\{\\nwarrow\}/g;
return $result;
}
@@ -688,11 +747,11 @@ sub character_chart {
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']
+ '1' => [ '7.1 in','9.8 in', '-0.57 in','-0.57 in','0.275 in'],
+ '2' => ['3.66 in','9.8 in', '-0.57 in','-0.57 in','0.275 in']
},
'album' => {
- '1' => [ '8.8 in', '6.8 in','-0.55 in', '-0.55 in','1 cm'],
+ '1' => [ '8.8 in', '6.8 in','-0.55 in', '-0.55 in','0.394 in'],
'2' => [ '4.8 in', '6.8 in','-0.5 in', '-1.0 in','3.5 in']
},
},
@@ -748,12 +807,12 @@ my %page_formats=
},
'a4' => {
'book' => {
- '1' => ['17.6 cm','27.2 cm','-0.55 in','-0.83 in','-0.5 in'],
- '2' => [ '9.1 cm','27.2 cm','-0.55 in','-0.83 in','-0.5 in']
+ '1' => ['17.6 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm'],
+ '2' => [ '9.1 cm','27.2 cm','-1.397 cm','-2.11 cm','-1.27 cm']
},
'album' => {
- '1' => ['8.5 in','7.7 in','-0.55 in','-0.83 in','0 in'],
- '2' => ['3.9 in','7.7 in','-0.55 in','-0.83 in','0 in']
+ '1' => ['21.59 cm','19.558 cm','-1.397cm','-2.11 cm','0 cm'],
+ '2' => ['9.91 cm','19.558 cm','-1.397 cm','-2.11 cm','0 cm']
},
},
'a5' => {
@@ -1148,12 +1207,12 @@ sub print_construction_sequence {
if ($helper->{'VARS'}->{'curseed'}) {
$rndseed=$helper->{'VARS'}->{'curseed'};
}
- my $errtext=&Apache::lonratedt::mapread($currentURL);
+ my $errtext=&LONCAPA::map::mapread($currentURL);
#
# These make this all support recursing for subsequences.
#
- my @order = @Apache::lonratedt::order;
- my @resources = @Apache::lonratedt::resources;
+ my @order = @LONCAPA::map::order;
+ my @resources = @LONCAPA::map::resources;
for (my $member=0;$member<=$#order;$member++) {
$resources[$order[$member]]=~/^([^:]*):([^:]*):/;
my $urlp=$2;
@@ -1424,6 +1483,13 @@ ENDPART
$resources_printed .= $currentURL.':';
my $texversion=&Apache::lonnet::ssi($currentURL,%form);
$result .= $texversion;
+ } elsif ($cleanURL =~/.tex$/) {
+ # For this sort of print of a single LaTeX file,
+ # We can just print the LaTeX file as it is uninterpreted in any way:
+ #
+
+ $result = &fetch_raw_resource($currentURL);
+
} else {
$result.=&unsupported($currentURL,$helper->{'VARS'}->{'LATEX_TYPE'},
$helper->{'VARS'}->{'symb'});
@@ -1962,9 +2028,9 @@ sub print_resources {
my $printed = '';
my ($username,$userdomain,$usersection) = split /:/,$person;
my $fullname = &get_name($username,$userdomain);
- my $namepostfix;
+ my $namepostfix = "\\\\"; # Both anon and not anon should get the same vspace.
if ($person =~ 'anon') {
- $namepostfix="\\\\Name: ";
+ $namepostfix .="Name: ";
$fullname = "CODE - ".$moreenv->{'CODE'};
}
# Fullname may have special latex characters that need \ prefixing:
@@ -2767,7 +2833,10 @@ CHOOSE_FROM_ANY_SEQUENCE
if (($perm{'pav'} and &Apache::lonnet::allowed('vgr',$env{'request.course.id'})) or
($helper->{VARS}->{'construction'} eq '1')) {
- addMessage("