Diff for /loncom/homework/caparesponse/caparesponse.pm between versions 1.184 and 1.190

version 1.184, 2005/12/06 10:01:57 version 1.190, 2006/06/13 14:58:14
Line 29 Line 29
 package Apache::caparesponse;  package Apache::caparesponse;
 use strict;  use strict;
 use capa;  use capa;
   use Safe::Hole;
   use Apache::lonmaxima();
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::caparesponse',('caparesponse','numericalresponse','stringresponse','formularesponse'));      &Apache::lonxml::register('Apache::caparesponse',('caparesponse','numericalresponse','stringresponse','formularesponse','mathresponse'));
 }  }
   
 my %answer;  my %answer;
Line 191  sub start_numericalresponse { Line 193  sub start_numericalresponse {
     $safeeval);      $safeeval);
     for (my $i=0; $i <= $#answers; $i++) {      for (my $i=0; $i <= $#answers; $i++) {
  my $answer=$answers[$i];   my $answer=$answers[$i];
  my $format;   if ( scalar(@$tagstack)
  if ($#formats > 0) {       && $tagstack->[-1] ne 'numericalresponse') {
     $format=$formats[$i];      $answertxt.=$answer.',';
  } else {   } else {
     $format=$formats[0];      my $format;
       if ($#formats > 0) {
    $format=$formats[$i];
       } else {
    $format=$formats[0];
       }
       if ($unit=~/\$/) { $format="\$".$format; $unit=~s/\$//g; }
       if ($unit=~/\,/) { $format="\,".$format; $unit=~s/\,//g; }
       my $formatted=&format_number($answer,$format,$target,
    $safeeval);
       $answertxt.=$formatted.',';
  }   }
  if ($unit=~/\$/) { $format="\$".$format; $unit=~s/\$//g; }  
  if ($unit=~/\,/) { $format="\,".$format; $unit=~s/\,//g; }  
  my $formatted=&format_number($answer,$format,$target,  
      $safeeval);  
  $answertxt.=$formatted.',';  
     }      }
     chop $answertxt;      chop $answertxt;
     if ($target eq 'web') {      if ($target eq 'web') {
Line 243  sub check_submission { Line 250  sub check_submission {
           
     if ($tag eq 'formularesponse') {      if ($tag eq 'formularesponse') {
  $$args_ref{'type'}='fml';   $$args_ref{'type'}='fml';
       } elsif ($tag eq 'mathresponse') {
           $$args_ref{'type'}='math';
     } elsif ($tag eq 'numericalresponse') {      } elsif ($tag eq 'numericalresponse') {
  $$args_ref{'type'}='float';   $$args_ref{'type'}='float';
     }      }
Line 285  sub end_numericalresponse { Line 294  sub end_numericalresponse {
     my $partid = $Apache::inputtags::part;      my $partid = $Apache::inputtags::part;
     my $id = $Apache::inputtags::response[-1];      my $id = $Apache::inputtags::response[-1];
     my $tag;      my $tag;
       my $safehole = new Safe::Hole;
     $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);      $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);
       $safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check');
   
     if (scalar(@$tagstack)) { $tag=$$tagstack[-1]; }      if (scalar(@$tagstack)) { $tag=$$tagstack[-1]; }
     if ( $target eq 'grade' && &Apache::response::submitted() ) {      if ( $target eq 'grade' && &Apache::response::submitted() ) {
  &Apache::response::setup_params($tag,$safeeval);   &Apache::response::setup_params($tag,$safeeval);
  if ($Apache::lonhomework::type eq 'exam' &&    if ($Apache::lonhomework::type eq 'exam' && 
     $tag eq 'formularesponse') {      (($tag eq 'formularesponse') || ($tag eq 'mathresponse'))) {
     $increment=&Apache::response::scored_response($partid,$id);      $increment=&Apache::response::scored_response($partid,$id);
  } else {   } else {
     my $response = &Apache::response::getresponse();      my $response = &Apache::response::getresponse();
Line 357  sub end_numericalresponse { Line 369  sub end_numericalresponse {
     $bubble_display->[$ind].'</td>';      $bubble_display->[$ind].'</td>';
     }      }
     $result.='</tr></table>';      $result.='</tr></table>';
  } elsif ($tag eq 'formularesponse') {  
     $result.= '<br /><br /><font color="red">  
                            <textarea name="HWVAL_'.$id.'" rows="4" cols="50">  
                            </textarea></font> <br /><br />';  
  }   }
     } elsif ($target eq 'tex') {      } elsif ($target eq 'tex') {
  if ((defined $unit) and ($unit=~/\S/) and ($Apache::lonhomework::type eq 'exam')) {   if ((defined $unit) and ($unit=~/\S/) and ($Apache::lonhomework::type eq 'exam')) {
Line 388  sub end_numericalresponse { Line 396  sub end_numericalresponse {
     }      }
     $result.='\end{enumerate}';      $result.='\end{enumerate}';
  } else {   } else {
     $result.='\fbox{\fbox{\parbox{\textwidth-5mm}{\strut\\\\\strut\\\\\strut\\\\\strut\\\\}}}';      $increment = &Apache::response::repetition();
     my $repetition = &Apache::response::repetition();  
     $result.='\begin{enumerate}';  
     for (my $i=0;$i<$repetition;$i++) {  
  $result.='\item[\textbf{'.($Apache::lonxml::counter+$i).'}.]\textit{Leave blank on scoring form}\vskip 0 mm';  
     }  
     $increment=$repetition;  
     $result.= '\end{enumerate}';  
  }   }
     }      }
  }   }
Line 422  sub end_numericalresponse { Line 423  sub end_numericalresponse {
   
  if ($target eq 'answer') {   if ($target eq 'answer') {
     $result.=&Apache::response::answer_header($tag);      $result.=&Apache::response::answer_header($tag);
     if ($Apache::lonhomework::type eq 'exam') {      if ($tag eq 'numericalresponse'
    && $Apache::lonhomework::type eq 'exam') {
  my ($bubble_values,undef,$correct) = &make_numerical_bubbles($partid,   my ($bubble_values,undef,$correct) = &make_numerical_bubbles($partid,
      $id,$target,$parstack,$safeeval);       $id,$target,$parstack,$safeeval);
  $result.=&Apache::response::answer_part($tag,$correct);   $result.=&Apache::response::answer_part($tag,$correct);
Line 603  sub format_number { Line 605  sub format_number {
     my $ans;      my $ans;
     if ($format eq '') {      if ($format eq '') {
  #What is the number? (integer,decimal,floating point)   #What is the number? (integer,decimal,floating point)
  if ($number=~/^(\d*\.?\d*)(E|e)(\d*)$/) {   if ($number=~/^(\d*\.?\d*)(E|e)[+\-]?(\d*)$/) {
     $format = '3e';      $format = '3e';
  } elsif ($number=~/^(\d*)\.(\d*)$/) {   } elsif ($number=~/^(\d*)\.(\d*)$/) {
     $format = '4f';      $format = '4f';
Line 781  sub start_stringresponse { Line 783  sub start_stringresponse {
   
 sub end_stringresponse {  sub end_stringresponse {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;      my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $increment=1;  
     my $result = '';      my $result = '';
     my $part=$Apache::inputtags::part;      my $part=$Apache::inputtags::part;
     my $id=$Apache::inputtags::response[-1];      my $id=$Apache::inputtags::response[-1];
Line 797  sub end_stringresponse { Line 799  sub end_stringresponse {
  $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);   $safeeval->share_from('capa',['&caparesponse_capa_check_answer']);
  if ($Apache::lonhomework::type eq 'exam' ||   if ($Apache::lonhomework::type eq 'exam' ||
     &Apache::response::submitted('scantron')) {      &Apache::response::submitted('scantron')) {
     $increment=&Apache::response::scored_response($part,$id);      &Apache::response::scored_response($part,$id);
   
  } else {   } else {
     my $response = &Apache::response::getresponse();      my $response = &Apache::response::getresponse();
     if ( $response =~ /[^\s]/) {      if ( $response =~ /[^\s]/) {
Line 850  sub end_stringresponse { Line 853  sub end_stringresponse {
  $Apache::lonhomework::results{"resource.$part.$id.awardmsg"}=$msg;   $Apache::lonhomework::results{"resource.$part.$id.awardmsg"}=$msg;
     }      }
  }   }
     } elsif ($target eq 'web' || $target eq 'tex') {  
  my $award = $Apache::lonhomework::history{"resource.$Apache::inputtags::part.solved"};  
  my $status = $Apache::inputtags::status['-1'];  
  if ($Apache::lonhomework::type eq 'exam' && $target eq 'tex') {  
     $result.='\fbox{\fbox{\parbox{\textwidth-5mm}{\strut\\\\\strut\\\\\strut\\\\\strut\\\\}}}';  
     $increment = &Apache::response::repetition();  
     $result.='\begin{enumerate}';  
     for (my $i=0;$i<$increment;$i++) {  
  $result.='\item[\textbf{'.($Apache::lonxml::counter+$i).  
     '}.]\textit{Leave blank on scoring form}\vskip 0 mm';  
     }  
     $result.= '\end{enumerate}';  
  }  
     } elsif ($target eq 'answer' || $target eq 'analyze') {      } elsif ($target eq 'answer' || $target eq 'analyze') {
  if ($target eq 'analyze') {   if ($target eq 'analyze') {
     push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id");      push (@{ $Apache::lonhomework::analyze{"parts"} },"$part.$id");
Line 916  sub end_stringresponse { Line 906  sub end_stringresponse {
     }      }
     if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||       if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || 
  $target eq 'tex' || $target eq 'analyze') {   $target eq 'tex' || $target eq 'analyze') {
  &Apache::lonxml::increment_counter($increment);   &Apache::lonxml::increment_counter(&Apache::response::repetition());
     }      }
     &Apache::response::end_response;      &Apache::response::end_response;
     return $result;      return $result;
Line 939  sub end_formularesponse { Line 929  sub end_formularesponse {
     return end_numericalresponse(@_);      return end_numericalresponse(@_);
 }  }
   
   sub start_mathresponse {
       my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
       my $result;
       if ($target eq 'meta') {
           &Apache::response::start_response($parstack,$safeeval);
           $result=&Apache::response::meta_package_write('mathresponse');
           &Apache::response::end_response();
       } else {
           $result.=&start_numericalresponse(@_);
       }
       return $result;
   }
   
   sub end_mathresponse {
       return end_numericalresponse(@_);
   }
   
 1;  1;
 __END__  __END__
   

Removed from v.1.184  
changed lines
  Added in v.1.190


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>