--- loncom/homework/optionresponse.pm	2002/11/14 17:26:58	1.64
+++ loncom/homework/optionresponse.pm	2003/04/02 18:07:10	1.72
@@ -1,7 +1,7 @@
 # LearningOnline Network with CAPA
 # option list style responses
 #
-# $Id: optionresponse.pm,v 1.64 2002/11/14 17:26:58 albertel Exp $
+# $Id: optionresponse.pm,v 1.72 2003/04/02 18:07:10 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -141,7 +141,7 @@ ENDTABLE
       $result.=')">';
     } # else nothing changed so just use the default mechanism
   }
-  if ($target eq 'tex') {
+  if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {
       $result .= ' \begin{enumerate} ';
   }
   return $result;
@@ -230,7 +230,7 @@ sub end_foilgroup {
   } elsif ($target eq 'edit') {
     $result.=&Apache::edit::end_table();
   }  
-  if ($target eq 'tex') {$result .= '\end{enumerate}';}
+  if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') {$result .= '\end{enumerate}';}
   return $result;
 }
 
@@ -248,6 +248,7 @@ sub whichfoils {
   my ($max,$randomize)=@_;
   $max = &getfoilcounts($max);
   &Apache::lonxml::debug("randomize $randomize");
+  if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}
   my @names = @{ $Apache::response::foilgroup{'names'} };
   my @whichopt =();
   my (%top,@toplist,%bottom,@bottomlist);
@@ -294,6 +295,7 @@ sub whichfoils {
 
 sub displayanswers {
   my ($max,$randomize,@opt)=@_;
+  if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}
   my @names = @{ $Apache::response::foilgroup{'names'} };
   my @whichopt = &whichfoils($max,$randomize);
   my $result=&Apache::response::answer_header('optionresponse');
@@ -307,20 +309,23 @@ sub displayanswers {
 
 sub displayfoils {
   my ($target,$max,$randomize,@opt)=@_;
+  if (!defined(@{ $Apache::response::foilgroup{'names'} })) {return;}
   my @names = @{ $Apache::response::foilgroup{'names'} };
   my @truelist;
   my @falselist;
   my $result;
   my $name;
   my $displayoptionintex=0;
-  my @alphabet = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
-		  'Q','R','S','T','U','V','W','X','Y','Z');
+  my @alphabet = ('A'..'Z');
   my @whichopt = &whichfoils($max,$randomize);
   my $part=$Apache::inputtags::part;
   my $id=$Apache::inputtags::response[-1];
   my $break;
-  if (($Apache::lonhomework::history{"resource.$part.solved"} =~ /^correct/)  || ($Apache::inputtags::status[-1] eq  'SHOW_ANSWER')) {    
-    my $temp=1; ####
+  my $solved=$Apache::lonhomework::history{"resource.$part.solved"};
+  my $status=$Apache::inputtags::status[-1];
+  if (
+      ($target ne 'tex') &&
+      (($solved =~ /^correct/) || ($status eq 'SHOW_ANSWER')) ) {
     foreach $name (@whichopt) {
 	my $text=$Apache::response::foilgroup{$name.'.text'};
 	if ($text!~/^\s*$/) {
@@ -353,7 +358,6 @@ sub displayfoils {
 	  $result.=&bubbles(\@alphabet,\@opt);
         }
       }
-    $temp++;
     }
   } else {
     my $temp=1;
@@ -378,11 +382,13 @@ sub displayfoils {
 	}
       }
       if ($target ne 'tex') {
-	  $optionlist='<select name="HWVAL_'.
+	  if ($Apache::lonhomework::type ne 'exam') {
+	    $optionlist='<select name="HWVAL_'.
 	      $Apache::inputtags::response['-1'].':'.$temp.'">'.
 		  $optionlist."</select>\n";
+	  }
 	  my $text=$Apache::response::foilgroup{$name.'.text'};
-	  if (!($text=~s|<drawoptionlist\s*/>|$optionlist|)) {
+	  if (!($text=~s|<drawoptionlist\s*/>|$optionlist|) && $Apache::lonhomework::type ne 'exam') {
 	      $text=$optionlist.$text;
 	  }
 	  $result.=$break.$text."\n";
@@ -396,7 +402,7 @@ sub displayfoils {
 	      if ($Apache::lonhomework::type eq 'exam') {$texoptionlist='';} #if exam we do not need to show optionlist
 	      if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) {
 		if ($Apache::lonhomework::type eq 'exam') {
-	          $Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/;
+	          $Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\vskip 2 mm/;
 	        }
 	        if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) {
 	          $Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |;
@@ -404,19 +410,19 @@ sub displayfoils {
 		$result.= $texoptionlist.$Apache::response::foilgroup{$name.'.text'};
 	      } else {
 		  if ($Apache::lonhomework::type eq 'exam') {
-		      $result.= $texoptionlist.'\vspace*{-2 mm}\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'};
+		      $result.= $texoptionlist.'  '.$Apache::response::foilgroup{$name.'.text'};
 		  } else {
 		      $result.= $texoptionlist.'\vspace*{-2 mm}\item '.$Apache::response::foilgroup{$name.'.text'};
 		  }
 	      }
 	      if ($Apache::lonhomework::type eq 'exam') {
-		  $result.=&bubbles(\@alphabet,\@opt);
+		  $result.='\vskip -2 mm\parbox{\textwidth}{\begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]\parbox{\textwidth - 5 mm}{'.&bubbles(\@alphabet,\@opt).'}\end{enumerate}} \vskip -9 mm \strut ';
 	      }
 	      $displayoptionintex=1;
 	  } else {
 	      if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) {
 		  if ($Apache::lonhomework::type eq 'exam') {
-		      $Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/;
+		      $Apache::response::foilgroup{$name.'.text'}=~s/\\item//;
 		  }
 	        if ($Apache::response::foilgroup{$name.'.text'}=~/<drawoptionlist\s*\/>/) {
 	          $Apache::response::foilgroup{$name.'.text'}=~s|<drawoptionlist\s*/>| \\makebox\[0\.3in\]\[b\]\{\\hrulefill\} |;
@@ -424,13 +430,13 @@ sub displayfoils {
 		$result.= $Apache::response::foilgroup{$name.'.text'};
 	      } else {
 		  if ($Apache::lonhomework::type eq 'exam') {
-		      $result.= '\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'};
+		      $result.= '  '.$Apache::response::foilgroup{$name.'.text'};
 		  } else {
 		      $result.= '\item '.$Apache::response::foilgroup{$name.'.text'};
 		  }
 	      }
 	      if ($Apache::lonhomework::type eq 'exam') {
-		  $result.=&bubbles(\@alphabet,\@opt);
+		  $result.='\vskip -2 mm \parbox{\textwidth}{\begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]\parbox{\textwidth - 5 mm}{'.&bubbles(\@alphabet,\@opt).'}\end{enumerate}} \vskip -9 mm \strut ';
 	      }
 	  }
       }
@@ -455,6 +461,7 @@ sub optionlist_correction {
     $texoptionlist =~ s/>/\$>\$/g;
     $texoptionlist =~ s/</\$<\$/g;
     $texoptionlist =~ s/=/\$=\$/g;
+    $texoptionlist =~ s/\^(\d+)/<m>\$$1\$<\/m>/g;
     return $texoptionlist;
 }
 
@@ -468,7 +475,8 @@ sub webbubbles {
 	my $number_of_bubbles = $#opt + 1;
 	$result.= '<table border="1"><tr>';
 	for (my $ind=0;$ind<$number_of_bubbles;$ind++) {
-	   $result.='<td>'.$alphabet[$ind].': '.$opt[$ind].'</td>';
+	   $result.='<td><input type="radio" name="HWVAL'.$Apache::inputtags::response['-1'].
+                    '" value='.$opt[$ind].'>'.$alphabet[$ind].': '.$opt[$ind].'</td>';
 	}
 	$result.='</tr></table>';
 	return $result;
@@ -610,7 +618,7 @@ sub end_foil {
   my $result = '';
   if ($target eq 'web' || $target eq 'tex') { 
       $text=&Apache::lonxml::endredirection;
-      if ($target eq 'tex') { $text = '\vspace*{-2 mm}\item '.$text; }
+      if ($target eq 'tex' and $Apache::lonhomework::type ne 'exam') { $text = '\vspace*{-2 mm}\item '.$text; }
   }
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' 
       || $target eq 'tex' || $target eq 'analyze') {
@@ -625,12 +633,28 @@ sub end_foil {
 	   && !&Apache::response::showallfoils() ) {
 	push @{ $Apache::response::conceptgroup{'names'} }, $name;
 	$Apache::response::conceptgroup{"$name.value"} = $value;
-	$Apache::response::conceptgroup{"$name.text"} = $text;
+	if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') {
+	    $Apache::response::conceptgroup{"$name.text"} = '\vskip 4 mm $\triangleright$ '.$text;
+	} else {
+	    if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') {
+		$Apache::response::conceptgroup{"$name.text"} = ' $\triangleright$ '.$text;
+	    } else {
+		$Apache::response::conceptgroup{"$name.text"} = $text;
+	    }
+	}
 	$Apache::response::conceptgroup{"$name.location"} = $location;
       } else {
 	push @{ $Apache::response::foilgroup{'names'} }, $name;
 	$Apache::response::foilgroup{"$name.value"} = $value;
-	$Apache::response::foilgroup{"$name.text"} = $text;
+	if ($Apache::lonhomework::type eq 'exam') {
+	    $Apache::response::foilgroup{"$name.text"} = '\vskip 5 mm $\triangleright$ '.$text;
+	} else {
+	    if ($target eq 'tex' and $Apache::lonhomework::type eq 'exam') {
+		$Apache::response::foilgroup{"$name.text"} = ' $\triangleright$ '.$text;
+	    } else {
+		$Apache::response::foilgroup{"$name.text"} = $text;
+	    }
+	}
 	$Apache::response::foilgroup{"$name.location"} = $location;
       }
     }