--- loncom/homework/response.pm 2006/12/11 22:02:13 1.154 +++ loncom/homework/response.pm 2006/12/15 22:11:43 1.156 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.154 2006/12/11 22:02:13 www Exp $ +# $Id: response.pm,v 1.156 2006/12/15 22:11:43 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -488,16 +488,6 @@ sub start_mathresponse { } } elsif ($target eq 'answer' || $target eq 'grade') { &Apache::response::reset_params(); - my $args_ref= \%{$safeeval->varglob('LONCAPA::mathresponse_args')}; - undef(%{ $args_ref }); - $$args_ref{'cas'}=$token->[2]{'cas'}; - if ($token->[2]{'args'}=~/\$/) { - $$args_ref{'args'}=&Apache::run::run($token->[2]{'args'},$safeeval); - } elsif ($token->[2]{'args'}=~/\@/) { - $$args_ref{'args'}=&Apache::run::run('join(",",'.$token->[2]{'args'}.')',$safeeval); - } else { - $$args_ref{'args'}=$token->[2]{'args'}; - } } elsif ($target eq 'meta') { $result .= &Apache::response::meta_package_write('mathresponse'); } @@ -520,11 +510,12 @@ sub end_mathresponse { $Apache::lonhomework::results{"resource.$part.$id.submission"}= $response; my $error; - my $args_ref= \%{$safeeval->varglob('LONCAPA::mathresponse_args')}; - my $award; - if ($$args_ref{'cas'} eq 'maxima') { - $award=&Apache::lonmaxima::maxima_run($Apache::response::custom_answer,$response,$$args_ref{'args'}); - } + my $award; + my $cas = &Apache::lonxml::get_param('cas',$parstack,$safeeval); + if ($cas eq 'maxima') { + my $args = [&Apache::lonxml::get_param_var('args',$parstack,$safeeval)]; + $award=&Apache::lonmaxima::maxima_run($Apache::response::custom_answer,$response,$args); + } if (!&Apache::inputtags::valid_award($award)) { $error = $award; $award = 'ERROR'; @@ -544,6 +535,28 @@ sub end_mathresponse { return $result; } +sub implicit_multiplication { + my ($expression)=@_; +# Escape scientific notation, so 3e8 does not become 3*e*8 +# 3e8 -> 3&8; 3e-8 -> 3&-8; 3E+8 -> e&+8 + $expression=~s/(\d+)e([\+\-]*\d+)/$1\&\($2\)/gsi; +# 3x10^8 -> 3&8; 3*10^-8 -> 3&-8 + $expression=~s/(\d+)(?:x|\*)10(?:\^|\*\*)([\+\-]*\d+)/$1\&\($2\)/gsi; +# Fill in multiplication signs +# a b -> a*b;3 b -> 3*b;3 4 -> 3*4 + $expression=~s/(\w)\s+(\w)/$1\*$2/gs; +# )( -> )*(; ) ( -> )*( + $expression=~s/\)\s*\(/\)\*\(/gs; +# 3a -> 3*a; 3( -> 3*(; 3 ( -> 3*(; 3A -> 3*A + $expression=~s/(\d)\s*([a-zA-Z\(])/$1\*$2/gs; +# a ( -> a*( + $expression=~s/(\w)\s+\(/$1\*\(/gs; +# )a -> )*a; )3 -> )*3; ) 3 -> )*3 + $expression=~s/\)\s*(\w)/\)\*$1/gs; +# 3&8 -> 3e8; 3&-4 -> 3e-4 + $expression=~s/(\d+)\&\(([\+\-]*\d+)\)/$1e$2/gs; + return $expression; +} sub start_answer { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;