--- loncom/homework/optionresponse.pm	2002/10/01 14:39:45	1.49
+++ loncom/homework/optionresponse.pm	2002/10/24 19:51:49	1.54
@@ -1,7 +1,7 @@
 # LearningOnline Network with CAPA
 # option list style responses
 #
-# $Id: optionresponse.pm,v 1.49 2002/10/01 14:39:45 sakharuk Exp $
+# $Id: optionresponse.pm,v 1.54 2002/10/24 19:51:49 sakharuk Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -321,6 +321,7 @@ sub displayfoils {
 	  $result .=$Apache::response::foilgroup{$name.'.value'}.
 	      ":".$Apache::response::foilgroup{$name.'.text'}."\n";
       } else {
+	  $Apache::response::foilgroup{$name.'.text'}=~s/\\item//;
  	  $result .='\item '.$Apache::response::foilgroup{$name.'.value'}.
 	      ":".$Apache::response::foilgroup{$name.'.text'}."\n";
       }
@@ -354,53 +355,40 @@ sub displayfoils {
 	  $temp++;
       } else {
 	  if ($displayoptionintex == 0) {
-              my $texoptionlist = $optionlist;
-	      $texoptionlist =~ s/<option><\/option>/\\item \[\] The possible answers are:/;
-	      $texoptionlist =~ s/<option>/{\\bf /g;
-	      $texoptionlist =~ s/<option selected="on">/{\\bf /g;
-	      $texoptionlist =~ s/<\/option>/},/g;
-	      $texoptionlist =~ s/,$/\./g;
-	      $texoptionlist =~ s/>/\$>\$/g;
-	      $texoptionlist =~ s/</\$<\$/g;
-	      $texoptionlist =~ s/=/\$=\$/g;
+              my $texoptionlist = &optionlist_correction($optionlist);
+	      if ($Apache::lonhomework::type eq 'exam') {$texoptionlist='';}
 	      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}\.]/;
+		  }
 		  $result.= $texoptionlist.$Apache::response::foilgroup{$name.'.text'};
 	      } else {
-		  $result.= $texoptionlist.'\item '.$Apache::response::foilgroup{$name.'.text'};
-	      }
 		  if ($Apache::lonhomework::type eq 'exam') {
-		      my $number_of_bubbles = $#opt + 1;
-		      $result.= '\vskip 2 mm \noindent \begin{tabular}{|';
-		      for (my $ind=0;$ind<$number_of_bubbles;$ind++) {
-			  $result.='lr|';
-		      }
-		      $result.='}\hline ';
-		      for (my $ind=0;$ind<$number_of_bubbles;$ind++) {
-			  $result.=' '.$alphabet[$ind].': & '.$opt[$ind].' ';
-			  if ($ind != $number_of_bubbles - 1) {$result.=' & ';}
-		      }
-		      $result.='\\\\\hline\end{tabular}\vskip 0 mm ';
+		      $result.= $texoptionlist.'\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'};
+		  } else {
+		      $result.= $texoptionlist.'\item '.$Apache::response::foilgroup{$name.'.text'};
 		  }
+	      }
+	      if ($Apache::lonhomework::type eq 'exam') {
+		  $result.=&bubbles(\@alphabet,\@opt);
+	      }
 	      $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}\.]/;
+		  }
 		  $result.= $Apache::response::foilgroup{$name.'.text'};
 	      } else {
-		  $result.= '\item '.$Apache::response::foilgroup{$name.'.text'};
-	      }
 		  if ($Apache::lonhomework::type eq 'exam') {
-		      my $number_of_bubbles = $#opt + 1;
-		      $result.= '\vskip 2 mm \noindent \begin{tabular}{|';
-		      for (my $ind=0;$ind<$number_of_bubbles;$ind++) {
-			  $result.='lr|';
-		      }
-		      $result.='}\hline ';
-		      for (my $ind=0;$ind<$number_of_bubbles;$ind++) {
-			  $result.=' '.$alphabet[$ind].': & '.$opt[$ind].' ';
-			  if ($ind != $number_of_bubbles - 1) {$result.=' & ';}
-		      }
-		      $result.='\\\\\hline\end{tabular}\vskip 0 mm ';
+		      $result.= '\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'};
+		  } else {
+		      $result.= '\item '.$Apache::response::foilgroup{$name.'.text'};
 		  }
+	      }
+	      if ($Apache::lonhomework::type eq 'exam') {
+		  $result.=&bubbles(\@alphabet,\@opt);
+	      }
 	  }
       } 
     }
@@ -414,6 +402,48 @@ sub displayfoils {
 }
 
 
+sub optionlist_correction {
+
+    my $texoptionlist = shift;
+    $texoptionlist =~ s/<option><\/option>/\\item \[\] Possible answers are:/;
+    $texoptionlist =~ s/<option>/\{\\bf /g;
+    $texoptionlist =~ s/<option selected="on">/\{\\bf /g;
+    $texoptionlist =~ s/<\/option>/\},/g;
+    $texoptionlist =~ s/,$/\./g;
+    $texoptionlist =~ s/>/\$>\$/g;
+    $texoptionlist =~ s/</\$<\$/g;
+    $texoptionlist =~ s/=/\$=\$/g;
+    return $texoptionlist;
+}
+
+
+sub bubbles {
+
+    my ($ralphabit,$ropt) = @_;
+    my @alphabet = @$ralphabit;
+    my @opt = @$ropt;
+    my ($result,$head,$line) =('','','');
+    my $number_of_bubbles = $#opt + 1;
+    my $current_length = 0;
+    for (my $ind=0;$ind<=$number_of_bubbles;$ind++) {
+	$current_length += (length($opt[$ind])+length($alphabet[$ind])+2)*2;
+	if ($current_length<0.9*$ENV{'form.textwidth'} and $ind!=$number_of_bubbles) {
+	    $line.='\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';
+	    $head.='lr';
+	} else {
+	    $line=~s/\&\s*$//;
+	    $result.='\vskip -5 mm\begin{tabular}{'.$head.'}\\\\'.$line.'\\\\\end{tabular}';
+	    $line = '\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';;
+	    $head ='lr';
+	    $current_length = (length($opt[$ind])+length($alphabet[$ind]))*2;
+	}
+
+    }
+    &Apache::lonxml::increment_counter();
+    return $result;
+}
+
+
 sub start_conceptgroup {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   $Apache::optionresponse::conceptgroup=1;
@@ -516,7 +546,7 @@ sub end_foil {
   my $result = '';
   if ($target eq 'web' || $target eq 'tex') { 
       $text=&Apache::lonxml::endredirection;
-      if ($target eq 'tex') { $text = '\item '.$text; }
+      if ($target eq 'tex') { $text = '\item '.$text; 
   }
   if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' 
       || $target eq 'tex' || $target eq 'analyze') {