--- loncom/homework/response.pm	2006/06/24 01:31:34	1.141
+++ loncom/homework/response.pm	2006/10/17 17:09:44	1.148
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # various response type definitons response definition
 #
-# $Id: response.pm,v 1.141 2006/06/24 01:31:34 albertel Exp $
+# $Id: response.pm,v 1.148 2006/10/17 17:09:44 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -131,8 +131,10 @@ sub setrandomnumber {
 	$id1=&Apache::bridgetask::get_dim_id();
 	if (!$ignore_id2 && ref($Apache::bridgetask::instance{$id1})) {
 	    $id2=$Apache::bridgetask::instance{$id1}[-1];
+	    $shift_amt=scalar(@{$Apache::bridgetask::instance{$id1}});
+	} else {
+	    $shift_amt=0;
 	}
-	$shift_amt=scalar(@{$Apache::bridgetask::instance{$id1}});
     } 
     &Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt");
     if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' ||
@@ -401,8 +403,11 @@ sub end_customresponse {
     my $id=$Apache::inputtags::response[-1];
     if ( $target eq 'grade' && &Apache::response::submitted() ) {
 	my $response = &Apache::response::getresponse();
-	if ( $response =~ /[^\s]/ && 
-	     $Apache::response::custom_answer_type eq 'loncapa/perl') {
+	if ($Apache::lonhomework::type eq 'exam' ||
+	    &Apache::response::submitted('scantron')) {
+	    &Apache::response::scored_response($part,$id);
+	} elsif ( $response =~ /[^\s]/ && 
+		  $Apache::response::custom_answer_type eq 'loncapa/perl') {
 	    if (!$Apache::lonxml::default_homework_loaded) {
 		&Apache::lonxml::default_homework_load($safeeval);
 	    }
@@ -427,6 +432,19 @@ sub end_customresponse {
 		    $error;
 	    }
 	}
+    } elsif ( $target eq 'answer') {
+	$result  = &Apache::response::answer_header('customresponse');
+	my $answer = &Apache::lonxml::get_param('answerdisplay',$parstack,
+						$safeeval);
+	if ($env{'form.answer_output_mode'} ne 'tex') {
+	    $answer = '<b>'.$answer.'</b>';
+	}
+	$result .= &Apache::response::answer_part('customresponse',$answer);
+	$result .= &Apache::response::answer_footer('customresponse');
+    }
+    if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || 
+	$target eq 'tex' || $target eq 'analyze') {
+	&Apache::lonxml::increment_counter(&Apache::response::repetition());
     }
     pop(@Apache::lonxml::namespace);
     &Apache::lonxml::deregister('Apache::response',('answer'));
@@ -668,9 +686,10 @@ sub setup_params {
 
 {
     my @answer_bits;
+    my $need_row_start;
 
 sub answer_header {
-    my ($type,$increment) = @_;
+    my ($type,$increment,$rows) = @_;
     my $result;
     if ($env{'form.answer_output_mode'} eq 'tex') {
 	undef(@answer_bits);
@@ -683,34 +702,58 @@ sub answer_header {
 	}
 	push(@answer_bits,$bit);
     } else {
+	my $td = '<td '.(defined($rows)?'rowspan="'.$rows.'"':'').'>';
 	$result  = '<table border="1"><tr>';
 	if ($Apache::lonhomework::type eq 'exam') {
-	    $result .= '<td>'.($Apache::lonxml::counter+$increment). ')</td>';
+	    $result .= $td.($Apache::lonxml::counter+$increment). ')</td>';
 	} else {
-	    $result .= '<td>Answer for Part:'.$Apache::inputtags::part.'</td>';
+	    $result .= $td.&mt('Answer for Part: [_1]',
+			       $Apache::inputtags::part).'</td>';
 	}
 	$result .= "\n";
+	$need_row_start = 0;
+    }
+    return $result;
+}
+
+sub next_answer {
+    my ($type) = @_;
+    my $result;
+    if ($env{'form.answer_output_mode'} eq 'tex') {
+	# FIXME ... need to do something with tex mode
+    } else {
+	$result .= "</tr>";
+	$need_row_start = 1;
     }
     return $result;
 }
 
 sub answer_part {
-    my ($type,$answer) = @_;
+    my ($type,$answer,$args) = @_;
     my $result;
     if ($env{'form.answer_output_mode'} eq 'tex') {
-	my $to_use='|';
-	foreach my $value (32..126) {
-	    my $char=pack('c',$value);
-	    if ($answer !~ /\Q$char\E/) {
-		$to_use=$char;
-		last;
+	if (!$args->{'no_verbatim'}) {
+	    my $to_use='|';
+	    foreach my $value (32..126) {
+		my $char=pack('c',$value);
+		if ($answer !~ /\Q$char\E/) {
+		    $to_use=$char;
+		    last;
+		}
+	    }
+	    if ($answer ne '') {
+		$answer = '\verb'.$to_use.$answer.$to_use;
 	    }
 	}
 	if ($answer ne '') {
-	    push(@answer_bits,'\verb'.$to_use.$answer.$to_use);
+	    push(@answer_bits,$answer);
 	}
     } else {
-	$result = '<td>'.$answer.'</td>';
+	if ($need_row_start) {
+	    $result .= '<tr>';
+	    $need_row_start = 0;
+	}
+	$result .= '<td>'.$answer.'</td>';
     }
     return $result;
 }
@@ -987,7 +1030,7 @@ sub add_to_gradingqueue {
 # a return of 3 means it after the answer date
 sub check_status {
     my ($id)=@_;
-    if (!$id) {	$id=$Apache::linputtags::part; }
+    if (!defined($id)) { $id=$Apache::inputtags::part; }
     my $curtime=&Apache::lonnet::EXT('system.time');
     my $opendate=&Apache::lonnet::EXT("resource.$id.opendate");
     my $duedate=&Apache::lonnet::EXT("resource.$id.duedate");