version 1.171, 2016/12/06 20:51:11
|
version 1.174, 2018/09/12 21:10:44
|
Line 309 sub caparesponse_check_list {
|
Line 309 sub caparesponse_check_list {
|
#for numerical problems split off the unit |
#for numerical problems split off the unit |
my $part1; |
my $part1; |
my $part2; |
my $part2; |
|
my $match_algebra = qr{^(.*[^\s])\s+([^\s]+)$}; |
|
# FIXME: with the above regexp, algebra with spaces will not be evaluated correctly |
|
my $match_numerical_units = qr{^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$}; |
if ($allowalgebra) { |
if ($allowalgebra) { |
($part1,$part2)=($responses->[0][-1]=~ /^(.*[^\s])\s+([^\s]+)$/); |
($part1,$part2) = ($responses->[0][-1] =~ /$match_algebra/); |
} else { |
} else { |
($part1,$part2)=($responses->[0][-1]=~ /^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$/); |
($part1,$part2) = ($responses->[0][-1] =~ /$match_numerical_units/); |
} |
} |
if (defined($part1) && defined($part2)) { |
if (defined($part1) && defined($part2)) { |
$responses->[0][-1]=$part1; |
$responses->[0][-1]=$part1; |
Line 327 sub caparesponse_check_list {
|
Line 330 sub caparesponse_check_list {
|
} |
} |
} |
} |
} |
} |
|
if (scalar(@$responses) > 0 && defined $answerunit) { |
|
# there are several response values, units should be the same for all |
|
$part2 =~ s/^\s+|\s+$//g; |
|
for (my $i=1; $i<scalar(@$responses); $i++) { |
|
my $element = $responses->[$i][-1]; |
|
my ($part1i, $part2i); |
|
if ($allowalgebra) { |
|
($part1i, $part2i) = ($element =~ /$match_algebra/); |
|
} else { |
|
($part1i, $part2i) = ($element =~ /$match_numerical_units/); |
|
} |
|
$part2i =~ s/^\s+|\s+$//g; |
|
if (!defined $part2i) { |
|
return 'NO_UNIT'; |
|
} elsif ($part2i ne $part2) { |
|
return ('UNIT_FAIL', "$part2 $part2i"); |
|
} else { |
|
$responses->[$i][-1] = $part1i; |
|
} |
|
} |
|
} |
} |
} |
} |
} |
$unit=~s/\s//; |
$unit=~s/\s//; |
Line 902 sub chemparse {
|
Line 926 sub chemparse {
|
my $formula = ''; |
my $formula = ''; |
foreach my $token (@tokens) { |
foreach my $token (@tokens) { |
if ($token eq '->' ) { |
if ($token eq '->' ) { |
$formula .= '<m>\ensuremath{\rightarrow}</m> '; |
if ($external::target eq 'web') { |
|
$formula .= '→ '; |
|
} else { |
|
$formula .= '<m>\ensuremath{\rightarrow}</m> '; |
|
} |
next; |
next; |
} |
} |
if ($token eq '<-' ) { |
if ($token eq '<-' ) { |
$formula .= '<m>\ensuremath{\leftarrow}</m> '; |
if ($external::target eq 'web') { |
|
$formula .= '← '; |
|
} else { |
|
$formula .= '<m>\ensuremath{\leftarrow}</m> '; |
|
} |
next; |
next; |
} |
} |
if ($token eq '<=>') { |
if ($token eq '<=>') { |
Line 944 sub chemparse {
|
Line 976 sub chemparse {
|
return &xmlparse($formula); |
return &xmlparse($formula); |
} |
} |
|
|
|
sub convert_engineer_format { |
|
my ($ans,$baseunit)=@_; |
|
my ($value,$answer,$unit); |
|
$baseunit =~ s{[^\w/\-\.]}{}g; |
|
eval { |
|
$value = &number_format_pref($ans); |
|
}; |
|
my ($answer,$prefix) = ($value=~ /^(.+)(\w)$/); |
|
my $unit = $prefix.$baseunit; |
|
return($answer,$unit); |
|
} |
|
|
sub prettyprint { |
sub prettyprint { |
my ($value,$fmt,$target)=@_; |
my ($value,$fmt,$target)=@_; |
my $result; |
my $result; |