version 1.170, 2014/12/14 02:43:59
|
version 1.173, 2017/02/07 21:24:29
|
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 1458 sub proper_path {
|
Line 1490 sub proper_path {
|
} |
} |
} |
} |
|
|
|
sub input_id { |
|
my ($part_id, $response_id, $textline_id) = @_; |
|
return 'HWVAL_'.$part_id.'_'.$response_id.'_'.$textline_id; |
|
} |
|
|