[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