[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