[LON-CAPA-cvs] cvs: loncom /homework/caparesponse caparesponse.pm

foxr foxr at source.lon-capa.org
Thu Feb 9 19:25:53 EST 2012


foxr		Fri Feb 10 00:25:53 2012 EDT

  Modified files:              
    /loncom/homework/caparesponse	caparesponse.pm 
  Log:
  BZ4492 - extract horizontal bubble making so that it can be used outside of 
  caparesponse.pm
  
  
  
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.250 loncom/homework/caparesponse/caparesponse.pm:1.251
--- loncom/homework/caparesponse/caparesponse.pm:1.250	Wed Feb  1 17:35:24 2012
+++ loncom/homework/caparesponse/caparesponse.pm	Fri Feb 10 00:25:53 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # caparesponse definition
 #
-# $Id: caparesponse.pm,v 1.250 2012/02/01 17:35:24 www Exp $
+# $Id: caparesponse.pm,v 1.249.8.2 2012/02/04 20:40:15 foxr 
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -36,6 +36,7 @@
 use Apache::lonmsg();
 use Apache::response();
 use Storable qw(dclone);
+use Apache::lonnet;
 
 BEGIN {
     &Apache::lonxml::register('Apache::caparesponse',('numericalresponse','stringresponse','formularesponse'));
@@ -43,6 +44,8 @@
 
 my %answer;
 my @answers;
+my @alphabet=('A'..'Z');
+
 sub get_answer { return %answer; };
 sub push_answer{ push(@answers,dclone(\%answer)); undef(%answer) }
 sub pop_answer { %answer = %{pop(@answers)}; };
@@ -611,7 +614,6 @@
 	    my $number_of_bubbles = scalar(@{ $bubble_values });
 	    my $unit=&Apache::lonxml::get_param_var('unit',$parstack,
 						    $safeeval);
-	    my @alphabet=('A'..'Z');
 	    if ($target eq 'web') {
 		if ($tag eq 'numericalresponse') {
 		    if ($unit=~/\S/) {$result.=' (in '.$unit.')<br /><br />';}
@@ -634,32 +636,8 @@
 		    $result.=' \textit{(in} \verb|'.$unit.'|\textit{)} ';
 		}
 		if ($tag eq 'numericalresponse') {
-		    my ($celllength,$number_of_tables, at table_range)=
-			&get_table_sizes($number_of_bubbles,$bubble_display);
-		    my $j=0;
-		    my $cou=0;
-		    $result.='\vskip 2mm \noindent ';
-		    $result .= '\textbf{'.$Apache::lonxml::counter.'.} \vskip -3mm ';
-
-		    for (my $i=0;$i<$number_of_tables;$i++) {
-			if ($i == 0) {
-			    $result .= '\vskip -1mm ';
-			} else {
-			    $result .= '\vskip 1mm ';
-			}
-			$result.='\noindent \setlength{\tabcolsep}{2 mm}\hskip 2pc\begin{tabular}{';
-			for (my $ind=0;$ind<$table_range[$j];$ind++) {
-			    $result.='p{3 mm}p{'.$celllength.' mm}';
-			}
-			$result.='}';
-			for (my $ind=$cou;$ind<$cou+$table_range[$j];$ind++) {
-			    $result.='\hskip -4 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$ & \hskip -3 mm {\small '.$bubble_display->[$ind].'} ';
-			    if ($ind != $cou+$table_range[$j]-1) {$result.=' & ';}
-			}
-			$cou += $table_range[$j];
-			$j++;
-			$result.='\\\\\end{tabular}\vskip 0 mm ';
-		    }
+		    $result .= &make_horizontal_latex_bubbles($bubble_values, $bubble_display,
+			'$\bigcirc$');
 		} else {
 		    $increment = &Apache::response::repetition();
 		}
@@ -1079,6 +1057,64 @@
     return (\@bubble_values,\@bubble_display,$correct);
 }
 
+##
+# Produce LaTeX bubbles laid out horizontally given a set of bubble values:
+#
+# @param bubble_values  - reference to an array of bubble 'values'
+# @param bubble_display - reference to the array of texts to display to the user
+#                         for each bubble_value (this is mostly for numerical response
+#                         when the displayed value may not be an exact
+#                         representation of the bubble value. 
+# @param bubble_fragment- The LaTeX fragment that will be plugged in to make
+#                         the bubble itself. Note that the code will autonomously
+#                         label each bubble with a lable...and that it's perfectly
+#                         acceptable to use "" for the bubble_fragment.
+# 
+# @return string - the LaTeX fragment that produces the bubbles.
+#
+sub make_horizontal_latex_bubbles {
+    my ($bubble_values, $bubble_display, $bubble_fragment)     = @_;
+    my $result;
+
+    my $number_of_bubbles = scalar(@{$bubble_values}); 
+
+    # Get the number of rows and columns in each row of the bubble
+    # table:
+
+    my ($celllength, $number_of_tables, @table_range) =
+	&get_table_sizes($number_of_bubbles, $bubble_display);
+
+    my $j=0;
+    my $cou=0;
+    $result.='\vskip 2mm \noindent ';
+    $result .= '\textbf{'.$Apache::lonxml::counter.'.} \vskip -3mm ';
+
+    for (my $i=0;$i<$number_of_tables;$i++) {
+	if ($i == 0) {
+	    $result .= '\vskip -1mm ';
+	} else {
+	    $result .= '\vskip 1mm ';
+	}
+	$result.='\noindent \setlength{\tabcolsep}{2 mm}\hskip 2pc\begin{tabular}{';
+	for (my $ind=0;$ind<$table_range[$j];$ind++) {
+	    $result.='p{4 mm}p{'.$celllength.' mm}';
+	}
+	$result.='}';
+	for (my $ind=$cou;$ind<$cou+$table_range[$j];$ind++) {
+	    $result.='\hskip -4 mm {\small \textbf{ '.$alphabet[$ind].'}}'
+		. $bubble_fragment 
+		. '& \hskip -3 mm {\small '.$bubble_display->[$ind].'} ';
+	    if ($ind != $cou+$table_range[$j]-1) {
+		$result.=' & ';
+	    }
+	}
+	$cou += $table_range[$j];
+	$j++;
+	$result.='\\\\\end{tabular}\vskip 0 mm ';
+    }
+    return $result;
+}
+
 sub get_tolrange {
     my ($ans,$tol)=@_;
     my ($high,$low);




More information about the LON-CAPA-cvs mailing list