--- loncom/interface/lonprintout.pm 2006/10/17 09:56:16 1.487 +++ loncom/interface/lonprintout.pm 2006/11/20 11:01:50 1.492 @@ -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.492 2006/11/20 11:01:50 foxr 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,26 +60,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 +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!!! + + } @@ -158,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; @@ -1148,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; @@ -1962,9 +1979,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: