version 1.376, 2005/06/04 20:52:37
|
version 1.381.2.1, 2005/09/01 18:39:47
|
Line 390 sub character_chart {
|
Line 390 sub character_chart {
|
$result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g; |
$result =~ s/&(prod|\#8719);/\\ensuremath\{\\prod\}/g; |
$result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g; |
$result =~ s/&(sum|\#8721);/\\ensuremath\{\\sum\}/g; |
$result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g; |
$result =~ s/&(minus|\#8722);/\\ensuremath\{-\}/g; |
|
$result =~ s/–/\\ensuremath\{-\}/g; |
$result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g; |
$result =~ s/&(lowast|\#8727);/\\ensuremath\{*\}/g; |
$result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g; |
$result =~ s/&(radic|\#8730);/\\ensuremath\{\\surd\}/g; |
$result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g; |
$result =~ s/&(prop|\#8733);/\\ensuremath\{\\propto\}/g; |
Line 650 sub latex_corrections {
|
Line 651 sub latex_corrections {
|
$first_comment = index($result,'<!--',$first_comment); |
$first_comment = index($result,'<!--',$first_comment); |
} |
} |
$result =~ s/^\s+$//gm; #remove empty lines |
$result =~ s/^\s+$//gm; #remove empty lines |
$result =~ s/(\s)(\s+)/$1/g; #removes more than one empty space |
#removes more than one empty space |
|
$result =~ s|(\s\s+)|($1=~/[\n\r]/)?"\n":" "|ge; |
$result =~ s/\\\\\s*\\vskip/\\vskip/gm; |
$result =~ s/\\\\\s*\\vskip/\\vskip/gm; |
$result =~ s/\\\\\s*\\noindent\s*(\\\\)+/\\\\\\noindent /g; |
$result =~ s/\\\\\s*\\noindent\s*(\\\\)+/\\\\\\noindent /g; |
$result =~ s/{\\par }\s*\\\\/\\\\/gm; |
$result =~ s/{\\par }\s*\\\\/\\\\/gm; |
Line 997 ENDPART
|
Line 999 ENDPART
|
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if((($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) && |
($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) { |
($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page)$/)) { |
$form{'grade_target'}='answer'; |
# Don't permanently modify %$form... |
$form{'answer_output_mode'}='tex'; |
my %answerform = %form; |
$form{'rndseed'}=$rndseed; |
$answerform{'grade_target'}='answer'; |
$form{'problem_split'}=$parmhash{'problem_stream_switch'}; |
$answerform{'answer_output_mode'}='tex'; |
|
$answerform{'rndseed'}=$rndseed; |
|
$answerform{'problem_split'}=$parmhash{'problem_stream_switch'}; |
if ($urlp=~/\/res\//) {$env{'request.state'}='published';} |
if ($urlp=~/\/res\//) {$env{'request.state'}='published';} |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $answer=&Apache::lonnet::ssi($urlp,%form); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
Line 1104 ENDPART
|
Line 1108 ENDPART
|
my $current_counter=$env{'form.counter'}; |
my $current_counter=$env{'form.counter'}; |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
$form{'grade_target'}='answer'; |
# Don't permanently pervert the %form hash |
$form{'answer_output_mode'}='tex'; |
my %answerform = %form; |
|
$answerform{'grade_target'}='answer'; |
|
$answerform{'answer_output_mode'}='tex'; |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $answer=&Apache::lonnet::ssi($urlp,%form); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
Line 1239 ENDPART
|
Line 1245 ENDPART
|
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'}; |
my $num_todo=$helper->{'VARS'}->{'NUMBER_TO_PRINT_TOTAL'}; |
my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'}; |
my $code_name=$helper->{'VARS'}->{'ANON_CODE_STORAGE_NAME'}; |
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'}; |
my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'}; |
|
|
|
my $code_option=$helper->{'VARS'}->{'CODE_OPTION'}; |
|
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
|
my ($code_type,$code_length)=('letter',6); |
|
foreach my $line (<FH>) { |
|
my ($name,$type,$length) = (split(/:/,$line))[0,2,4]; |
|
if ($name eq $code_option) { |
|
$code_length=$length; |
|
if ($type eq 'number') { $code_type = 'number'; } |
|
} |
|
} |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth)); |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
$moreenv{'problem_split'} = $parmhash{'problem_stream_switch'}; |
my $seed=time+($$<<16)+($$); |
my $seed=time+($$<<16)+($$); |
my @allcodes; |
my @allcodes; |
if ($old_name) { |
if ($old_name) { |
my %result=&Apache::lonnet::get('CODEs',[$old_name],$cdom,$cnum); |
my %result=&Apache::lonnet::get('CODEs', |
|
[$old_name,"type\0$old_name"], |
|
$cdom,$cnum); |
|
$code_type=$result{"type\0$old_name"}; |
@allcodes=split(',',$result{$old_name}); |
@allcodes=split(',',$result{$old_name}); |
$num_todo=scalar(@allcodes); |
$num_todo=scalar(@allcodes); |
} else { |
} else { |
my %allcodes; |
my %allcodes; |
srand($seed); |
srand($seed); |
for (my $i=0;$i<$num_todo;$i++) { |
for (my $i=0;$i<$num_todo;$i++) { |
$moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,'6'); |
$moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,$code_length, |
|
$code_type); |
} |
} |
if ($code_name) { |
if ($code_name) { |
&Apache::lonnet::put('CODEs', |
&Apache::lonnet::put('CODEs', |
{$code_name =>join(',',keys(%allcodes))}, |
{ |
|
$code_name =>join(',',keys(%allcodes)), |
|
"type\0$code_name" => $code_type |
|
}, |
$cdom,$cnum); |
$cdom,$cnum); |
} |
} |
@allcodes=keys(%allcodes); |
@allcodes=keys(%allcodes); |
Line 1271 ENDPART
|
Line 1295 ENDPART
|
my $count=0; |
my $count=0; |
foreach my $code (sort(@allcodes)) { |
foreach my $code (sort(@allcodes)) { |
my $file_num=int($count/$number_per_page); |
my $file_num=int($count/$number_per_page); |
$moreenv{'CODE'}=&num_to_letters($code); |
if ($code_type eq 'number') { |
|
$moreenv{'CODE'}=$code; |
|
} else { |
|
$moreenv{'CODE'}=&num_to_letters($code); |
|
} |
my ($output,$fullname, $printed)= |
my ($output,$fullname, $printed)= |
&print_resources($r,$helper,'anonymous',$type,\%moreenv, |
&print_resources($r,$helper,'anonymous',$type,\%moreenv, |
\@master_seq,$flag_latex_header_remove, |
\@master_seq,$flag_latex_header_remove, |
Line 1311 ENDPART
|
Line 1339 ENDPART
|
my $texversion=&Apache::lonnet::ssi($urlp,%form); |
my $texversion=&Apache::lonnet::ssi($urlp,%form); |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
$form{'grade_target'}='answer'; |
# Don't permanently pervert %form: |
$form{'answer_output_mode'}='tex'; |
my %answerform = %form; |
$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
$answerform{'grade_target'}='answer'; |
$form{'rndseed'}=$rndseed; |
$answerform{'answer_output_mode'}='tex'; |
|
$answerform{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
|
$answerform{'rndseed'}=$rndseed; |
$resources_printed .= $urlp.':'; |
$resources_printed .= $urlp.':'; |
my $answer=&Apache::lonnet::ssi($urlp,%form); |
my $answer=&Apache::lonnet::ssi($urlp,%answerform); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/; |
} else { |
} else { |
Line 1372 ENDPART
|
Line 1402 ENDPART
|
#-- writing .tex file in prtspool |
#-- writing .tex file in prtspool |
my $temp_file; |
my $temp_file; |
my $identifier = &Apache::loncommon::get_cgi_id(); |
my $identifier = &Apache::loncommon::get_cgi_id(); |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_".$identifier.".tex"; |
my $filename = "/home/httpd/prtspool/$env{'user.name'}_$env{'user.domain'}_printout_$identifier.tex"; |
if (!($#print_array>0)) { |
if (!($#print_array>0)) { |
unless ($temp_file = Apache::File->new('>'.$filename)) { |
unless ($temp_file = Apache::File->new('>'.$filename)) { |
$r->log_error("Couldn't open $filename for output $!"); |
$r->log_error("Couldn't open $filename for output $!"); |
Line 1395 ENDPART
|
Line 1425 ENDPART
|
my $temp_file; |
my $temp_file; |
my $newfilename=$filename; |
my $newfilename=$filename; |
my $num=$i+1; |
my $num=$i+1; |
$newfilename =~s/\.tex$/_$num\.tex/; |
$newfilename =~s/\.tex$//; |
|
$newfilename=sprintf("%s_%03d.tex",$newfilename, $num); |
unless ($temp_file = Apache::File->new('>'.$newfilename)) { |
unless ($temp_file = Apache::File->new('>'.$newfilename)) { |
$r->log_error("Couldn't open $newfilename for output $!"); |
$r->log_error("Couldn't open $newfilename for output $!"); |
return SERVER_ERROR; |
return SERVER_ERROR; |
Line 1471 sub num_to_letters {
|
Line 1502 sub num_to_letters {
|
} |
} |
|
|
sub get_CODE { |
sub get_CODE { |
my ($all_codes,$num,$seed,$size)=@_; |
my ($all_codes,$num,$seed,$size,$type)=@_; |
my $max='1'.'0'x$size; |
my $max='1'.'0'x$size; |
my $newcode; |
my $newcode; |
while(1) { |
while(1) { |
$newcode=sprintf("%06d",int(rand($max))); |
$newcode=sprintf("%06d",int(rand($max))); |
if (!exists($$all_codes{$newcode})) { |
if (!exists($$all_codes{$newcode})) { |
$$all_codes{$newcode}=1; |
$$all_codes{$newcode}=1; |
return &num_to_letters($newcode); |
if ($type eq 'number' ) { |
|
return $newcode; |
|
} else { |
|
return &num_to_letters($newcode); |
|
} |
} |
} |
} |
} |
} |
} |
Line 1525 sub print_resources {
|
Line 1560 sub print_resources {
|
my $current_counter=$env{'form.counter'}; |
my $current_counter=$env{'form.counter'}; |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') || |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) { |
$moreenv->{'answer_output_mode'}='tex'; |
# Use a copy of the hash so we don't pervert it on future loop passes. |
$moreenv->{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
my %answerenv = %{$moreenv}; |
my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%{$moreenv}); |
$answerenv{'answer_output_mode'}='tex'; |
|
$answerenv{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'}; |
|
my $ansrendered = &Apache::loncommon::get_student_answers($curresline,$username,$userdomain,$env{'request.course.id'},%answerenv); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
&Apache::lonnet::appenv(('form.counter' => $current_counter)); |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') { |
$rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; |
$rendered=~s/(\\keephidden{ENDOFPROBLEM})/$ansrendered$1/; |
Line 1929 CHOOSE_STUDENTS
|
Line 1966 CHOOSE_STUDENTS
|
my $namechoice='<choice></choice>'; |
my $namechoice='<choice></choice>'; |
foreach my $name (sort {uc($a) cmp uc($b)} @names) { |
foreach my $name (sort {uc($a) cmp uc($b)} @names) { |
if ($name =~ /^error: 2 /) { next; } |
if ($name =~ /^error: 2 /) { next; } |
|
if ($name =~ /^type\0/) { next; } |
$namechoice.='<choice computer="'.$name.'">'.$name.'</choice>'; |
$namechoice.='<choice computer="'.$name.'">'.$name.'</choice>'; |
} |
} |
|
open(FH,$Apache::lonnet::perlvar{'lonTabDir'}.'/scantronformat.tab'); |
|
my $codechoice=''; |
|
foreach my $line (<FH>) { |
|
my ($name,$description,$code_type,$code_length)= |
|
(split(/:/,$line))[0,1,2,4]; |
|
if ($code_length > 0 && |
|
$code_type =~/^(letter|number|-1)/) { |
|
$codechoice.='<choice computer="'.$name.'">'.$description.'</choice>'; |
|
} |
|
} |
|
if ($codechoice eq '') { |
|
$codechoice='<choice computer="default">Default</choice>'; |
|
} |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1); |
&Apache::lonxml::xmlparse($r, 'helper', <<CHOOSE_ANON1); |
<state name="CHOOSE_ANON1" title="Select Students and Resources"> |
<state name="CHOOSE_ANON1" title="Select Students and Resources"> |
<nextstate>PAGESIZE</nextstate> |
<nextstate>PAGESIZE</nextstate> |
Line 1949 CHOOSE_STUDENTS
|
Line 2000 CHOOSE_STUDENTS
|
<message><b>Names to store the CODEs under for later:</b></message> |
<message><b>Names to store the CODEs under for later:</b></message> |
<message></td><td></message> |
<message></td><td></message> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Bubble sheet type:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_OPTION" multichoice="0" allowempty="0"> |
|
$codechoice |
|
</dropdown> |
<message></td></tr></table></message> |
<message></td></tr></table></message> |
<message><hr width='33%' /></message> |
<message><hr width='33%' /></message> |
<message><b>Reprint a set of saved CODEs:</b></message> |
<message><b>Reprint a set of saved CODEs:</b></message> |
Line 2016 CHOOSE_STUDENTS1
|
Line 2073 CHOOSE_STUDENTS1
|
<message><b>Names to store the CODEs under for later:</b></message> |
<message><b>Names to store the CODEs under for later:</b></message> |
<message></td><td></message> |
<message></td><td></message> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
<string variable="ANON_CODE_STORAGE_NAME" maxlength="50" size="20" /> |
|
<message></td></tr><tr><td></message> |
|
<message><b>Bubble sheet type:</b></message> |
|
<message></td><td></message> |
|
<dropdown variable="CODE_OPTION" multichoice="0" allowempty="0"> |
|
$codechoice |
|
</dropdown> |
<message></td></tr></table></message> |
<message></td></tr></table></message> |
<message><hr width='33%' /></message> |
<message><hr width='33%' /></message> |
<message><b>Reprint a set of saved CODEs:</b></message> |
<message><b>Reprint a set of saved CODEs:</b></message> |
Line 2191 CHOOSE_FROM_ANY_SEQUENCE
|
Line 2254 CHOOSE_FROM_ANY_SEQUENCE
|
</defaultvalue> |
</defaultvalue> |
</string> |
</string> |
<message></td></tr><tr><td align="right">Use style file:</td><td></message> |
<message></td></tr><tr><td align="right">Use style file:</td><td></message> |
<message><input type="text" size="40" name="style_file_value" value="$stylevalue" /> <a href="javascript:openbrowser('helpform','style_file','sty')">Select style file</a> </td><td></message> |
<message><input type="text" size="40" name="style_file_value" value="$stylevalue" /> <a href="javascript:openbrowser('helpform','style_file','sty')">Select style file</a> </td><tr><td></message> |
<message></td></tr></message> |
|
<choices allowempty="1" multichoice="true" variable="showallfoils"> |
<choices allowempty="1" multichoice="true" variable="showallfoils"> |
<choice computer="1">Show all foils?</choice> |
<choice computer="1">Show all foils?</choice> |
</choices> |
</choices> |
|
<message></td></tr></message> |
RNDSEED |
RNDSEED |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
&Apache::lonxml::xmlparse($r, 'helper', $xmlfrag); |
$helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'}; |
$helper->{'VARS'}->{'style_file'}=$env{'form.style_file_value'}; |