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

foxr foxr at source.lon-capa.org
Mon Jan 16 06:54:38 EST 2012


foxr		Mon Jan 16 11:54:38 2012 EDT

  Modified files:              (Branch: BZ4492)
    /loncom/homework/caparesponse	caparesponse.pm 
  Log:
  BZ 4492 Factor out horizontal bubble generation so that other modules
  can use it.  NOTE:
   - has some log spew to still remove.
   - probably should disentangle the horiztonal buble generation from 
   - caparesponse.pm and put it somewhere else.
  
  
  
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.249 loncom/homework/caparesponse/caparesponse.pm:1.249.4.1
--- loncom/homework/caparesponse/caparesponse.pm:1.249	Mon Nov 14 03:08:05 2011
+++ loncom/homework/caparesponse/caparesponse.pm	Mon Jan 16 11:54:37 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # caparesponse definition
 #
-# $Id: caparesponse.pm,v 1.249 2011/11/14 03:08:05 raeburn Exp $
+# $Id: caparesponse.pm,v 1.249.4.1 2012/01/16 11:54:37 foxr Exp $
 #
 # 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,7 @@
 		    $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_latex_bubbles($bubble_values, $bubble_display);
 		} else {
 		    $increment = &Apache::response::repetition();
 		}
@@ -917,6 +894,7 @@
     my ($number_of_bubbles,$rbubble_values)=@_;
     my $scale=2; #mm for one digit
     my $cell_width=0;
+    &Apache::lonnet::logthis("textwidth envvar: " . $env{'form.textwidth'});
     foreach my $member (@$rbubble_values) {
 	my $cell_width_real=0;
 	if ($member=~/(\+|-)?(\d*)\.?(\d*)\s*\$?\\times\s*10\^{(\+|-)?(\d+)}\$?/) {
@@ -1079,6 +1057,56 @@
     return (\@bubble_values,\@bubble_display,$correct);
 }
 
+##
+# Produce LaTeX bubbles 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. 
+# 
+# @return string - the LaTeX fragment that produces the bubbles.
+#
+sub make_latex_bubbles {
+    my ($bubble_values, $bubble_display)     = @_;
+    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{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 ';
+    }
+    return $result;
+}
+
 sub get_tolrange {
     my ($ans,$tol)=@_;
     my ($high,$low);




More information about the LON-CAPA-cvs mailing list