--- loncom/homework/caparesponse/caparesponse.pm 2006/03/09 01:13:16 1.189 +++ loncom/homework/caparesponse/caparesponse.pm 2006/06/13 14:58:14 1.190 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # caparesponse definition # -# $Id: caparesponse.pm,v 1.189 2006/03/09 01:13:16 albertel Exp $ +# $Id: caparesponse.pm,v 1.190 2006/06/13 14:58:14 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -29,11 +29,13 @@ package Apache::caparesponse; use strict; use capa; +use Safe::Hole; +use Apache::lonmaxima(); use Apache::lonlocal; use Apache::lonnet; BEGIN { - &Apache::lonxml::register('Apache::caparesponse',('caparesponse','numericalresponse','stringresponse','formularesponse')); + &Apache::lonxml::register('Apache::caparesponse',('caparesponse','numericalresponse','stringresponse','formularesponse','mathresponse')); } my %answer; @@ -248,6 +250,8 @@ sub check_submission { if ($tag eq 'formularesponse') { $$args_ref{'type'}='fml'; + } elsif ($tag eq 'mathresponse') { + $$args_ref{'type'}='math'; } elsif ($tag eq 'numericalresponse') { $$args_ref{'type'}='float'; } @@ -290,12 +294,15 @@ sub end_numericalresponse { my $partid = $Apache::inputtags::part; my $id = $Apache::inputtags::response[-1]; my $tag; + my $safehole = new Safe::Hole; $safeeval->share_from('capa',['&caparesponse_capa_check_answer']); + $safehole->wrap(\&Apache::lonmaxima::maxima_check,$safeeval,'&maxima_check'); + if (scalar(@$tagstack)) { $tag=$$tagstack[-1]; } if ( $target eq 'grade' && &Apache::response::submitted() ) { &Apache::response::setup_params($tag,$safeeval); if ($Apache::lonhomework::type eq 'exam' && - $tag eq 'formularesponse') { + (($tag eq 'formularesponse') || ($tag eq 'mathresponse'))) { $increment=&Apache::response::scored_response($partid,$id); } else { my $response = &Apache::response::getresponse(); @@ -922,6 +929,23 @@ sub end_formularesponse { 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; __END__