--- loncom/homework/default_homework.lcpm 2014/06/25 15:43:04 1.168 +++ loncom/homework/default_homework.lcpm 2014/06/25 16:50:51 1.169 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # -# $Id: default_homework.lcpm,v 1.168 2014/06/25 15:43:04 raeburn Exp $ +# $Id: default_homework.lcpm,v 1.169 2014/06/25 16:50:51 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1228,7 +1228,7 @@ sub sec { } sub submission { - my ($partid,$responseid,$subnumber,$encode)=@_; + my ($partid,$responseid,$subnumber,$encode,$cleanupnum)=@_; my $sub=''; if ($subnumber) { $sub=$subnumber.':'; } my $output = @@ -1238,11 +1238,17 @@ sub submission { if ($encode) { @items = map { &encode_response($_); } @items; } + if (ref($cleanupnum) eq 'HASH') { + @items = map { &cleanup_numerical_response($cleanupnum,$_); } @items; + } return \@items; } else { if ($encode) { $output = &encode_response($output); } + if (ref($cleanupnum) eq 'HASH') { + $output = &cleanup_numerical_response($cleanupnum,$output); + } return $output; } } @@ -1256,6 +1262,46 @@ sub encode_response { return $value; } +sub cleanup_numerical_response { + my ($cleanupnum,$value) = @_; + if (ref($cleanupnum) eq 'HASH') { + if ($cleanupnum->{exponent}) { + if ($value =~ m{^(.*)[\*xX]\s*10\s*\^\s*(\+|\-)?\s*(\d+)(.*)$}) { + my $pre_exp = $1; + my $sign = $2; + my $exponent = $3; + my $post_exp = $4; + if ($pre_exp !~ /\./) { + $pre_exp .= '.'; + } + if ($sign eq '') { + $sign = '+'; + } + $value = $pre_exp.'E'.$sign.$exponent.$post_exp; + } + } + if ($cleanupnum->{comma}) { + $value =~ s{(\d+),(\d+)}{$1$2}; + } + if ($cleanupnum->{letterforzero}) { + $value =~ s/^\s*o(\.\d+)/0$1/i; + } + if ($cleanupnum->{spaces}) { + $value =~ s{^\s+|\s+$}{}g; + if ($value =~ m{^(.*)\.\s+(\d+)(.*)$}) { + my $pre_pt = $1; + my $decimal = $2; + my $post_dec = $3; + $value = $pre_pt.'.'.$decimal.$post_dec; + } + } + if ($cleanupnum->{format} =~ /^\d+s$/i) { + $value = &format_significant_figures($value,$cleanupnum->{format}); + } + } + return $value; +} + sub currentpart { return $external::part; }