--- loncom/interface/lonprintout.pm 2006/10/20 17:37:20 1.488 +++ loncom/interface/lonprintout.pm 2006/11/02 21:06:06 1.491 @@ -2,7 +2,7 @@ # The LearningOnline Network # Printout # -# $Id: lonprintout.pm,v 1.488 2006/10/20 17:37:20 albertel Exp $ +# $Id: lonprintout.pm,v 1.491 2006/11/02 21:06:06 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,11 +38,10 @@ 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; @@ -61,19 +60,38 @@ my $resources_printed; # sub printf_style_subst { my ($item, $format_string, $repl) = @_; - - while ($format_string =~m/\G[^%]*(%(\d*)\Q$item\E)/g) { + my $result = ""; + while ($format_string =~ /(%)(\d*)\Q$item\E/g ) { my $fmt = $1; my $size = $2; my $subst = $repl; if ($size ne "") { $subst = substr($subst, 0, $size); + + # 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 $newpos = pos($format_string) + length($subst) - length($fmt); - $format_string =~ s/\Q$fmt\E\G/$subst/; - pos($format_string)=$newpos; + 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; } @@ -128,6 +146,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!!! + + } @@ -151,7 +175,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; @@ -1141,12 +1165,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;