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

foxr foxr at source.lon-capa.org
Sat Feb 4 15:40:15 EST 2012


foxr		Sat Feb  4 20:40:15 2012 EDT

  Modified files:              (Branch: BZ4492)
    /loncom/homework	radiobuttonresponse.pm 
    /loncom/homework/caparesponse	caparesponse.pm 
  Log:
  BZ 4492 - Get survey printing to honor the $direction.
  
  
-------------- next part --------------
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.153.6.8 loncom/homework/radiobuttonresponse.pm:1.153.6.9
--- loncom/homework/radiobuttonresponse.pm:1.153.6.8	Mon Jan 30 11:36:55 2012
+++ loncom/homework/radiobuttonresponse.pm	Sat Feb  4 20:40:07 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # mutliple choice style responses
 #
-# $Id: radiobuttonresponse.pm,v 1.153.6.8 2012/01/30 11:36:55 foxr Exp $
+# $Id: radiobuttonresponse.pm,v 1.153.6.9 2012/02/04 20:40:07 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -247,6 +247,7 @@
     my $part             = $Apache::inputtags::part;
     my $bubbles_per_line = &getbubblesnum( $part, $id );
 
+
     if (   $target eq 'grade'
         || $target eq 'web'
         || $target eq 'answer'
@@ -538,6 +539,99 @@
 
 }
 
+##
+#  Generate LaTeX for surveys.
+#  
+#   @param $names - names of the foils to display.
+#   @param $showanswer - flag that is true to display answers.
+#   @param $lastresponse - Reference to a hash the indicates the last response.
+#   @param $direction    - Orientation of foils ('horiztonal' or otherwise).
+#   @param $venv         - LaTeX name for vertical env.
+#
+#   @return string
+#   @retval LaTeX rendering of the survey question.
+
+sub latex_survey {
+    my ($names, $showanswer, $lastresponse, $direction, $venv) = @_;
+
+    my $result;
+
+	
+ 
+
+    if ($showanswer) {
+	
+	$result .= "\\begin{$venv}";
+	foreach my $name (@{$names}) {
+	    
+	    
+	    $result .= '\item \vskip -2mm ';
+	    
+	    if ( defined( $lastresponse->{$name} ) ) {
+		$result .= '}';
+	    }
+	    $result .= $Apache::response::foilgroup{ $name . '.text' } . ' ';
+	}
+	$result .= "\\end{$venv}";
+
+    } elsif ( $env{'form.pdfFormFields'} eq 'yes'
+	      && $Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
+	$result .= &display_pdf_form($names, $direction, $venv);
+    } else {
+	if ($direction eq 'horizontal') {
+	    my @foil_texts = &get_foil_texts($names);
+	    $result .=  &Apache::caparesponse::make_horizontal_latex_bubbles(
+	    $names, \@foil_texts, '$\bigcirc$');
+	} else {
+	    $result .= "\\begin{$venv}";
+
+	    my $temp = 0;
+	    my $i    = 0;
+	    foreach my $name (@{$names}) {
+
+		$result .= '\item \vskip -2mm ';
+		
+		if ($env{'form.pdfFormFields'} ne 'yes'
+		    or $Apache::inputtags::status[-1] ne 'CAN_ANSWER' )
+		{
+		    $result .=
+			'$\bigcirc$'
+			. $Apache::response::foilgroup{ $name . '.text' }
+		    . '\\\\';    #' stupid emacs
+		}
+		
+		$i++;	    
+		$temp++;
+		
+		$result .= '\vskip 0 mm ';
+	    }
+	    $result .= "\\end{$venv}";
+	}
+	
+	
+    }
+    
+    return $result;
+
+    
+}
+##
+#  Figure out the LaTeX environment in which to wrap the LaTeX vertical output.
+#
+# @return string
+# @retval the environment name.  The LaTeX should be wrapped a 
+#    \begin{retval} \end{retval} pair.
+#
+sub latex_vertical_environment {
+    if ($env{'form.pdfFormFields'} eq 'yes'
+	&& $Apache::inputtags::status[-1] eq 'CAN_ANSWER') {
+	return 'itemize';
+    } else {
+	return 'enumerate';
+    }
+}
+
+
 
 ##
 #
@@ -554,115 +648,37 @@
     my ( $direction, $target ) = @_;
     my $result;
     &Apache::lonxml::debug("survey style display");
+
     my @names;
+
     if ( $Apache::response::foilgroup{'names'} ) {
         @names = @{ $Apache::response::foilgroup{'names'} };
     }
 
-    # Figure out how to bracket the list of foils for
-    # the TeX target:
-    #
-
-    my $begin_environment;
-    my $end_environment;
-    
-    if ($target eq 'tex') {
-
-	# Decide how to bracket the list of foils:
-
 
-        if (   $env{'form.pdfFormFields'} eq 'yes'
-            && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
-        {
-            $begin_environment = '\begin{itemize}';
-	    $end_environment   = '\end{itemize}';
-        }
-        else {
-            $begin_environment = '\begin{enumerate}';
-	    $end_environment   = '\end{enumerate}';
-        }	
-	$result .= $begin_environment;
-    }
-
-    my $temp = 0;
-    my $i    = 0;
     my $id   = $Apache::inputtags::response['-1'];
     my $part = $Apache::inputtags::part;
-    my $showanswer;
-    my $lastresponse;
-    $showanswer = &Apache::response::show_answer();
-
+    
+    my $showanswer = &Apache::response::show_answer();
     my $lastresponse = &get_last_survey_response($part, $showanswer, $id);
-
     my $used_names = &remove_unused(\@names);
 
 
     if ($target ne 'tex') {
-	$result .= &display_survey_html($used_names, $part, $showanswer, $lastresponse, $direction);
-    } else {
+	$result .= &display_survey_html(
+	    $used_names, $part, $showanswer, $lastresponse, $direction
+	);
+    } else {	
+
+	my $vertical_env = &latex_vertical_environment();
+	$result .= &latex_survey(
+	    $used_names, $showanswer, $lastresponse, $direction, $vertical_env
+	);
 
-	if ($showanswer) {
-	    foreach my $name (@{$used_names}) {
-		if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )
-		{
-		    
-		    $result .= '\item \vskip -2mm ';
-		    
-		    if ( defined( $lastresponse->{$name} ) ) {
-			$result .= '}';
-		    }
-		    $result .= $Apache::response::foilgroup{ $name . '.text' };
-		}
-	    }
-	} else {
-	    foreach my $name (@{$used_names}) {
-		if ( $Apache::response::foilgroup{ $name . '.value' } ne 'unused' )
-		{
-		    if (   $env{'form.pdfFormFields'} eq 'yes'
-			   && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
-		    {
-			my $fieldname =
-			    $env{'request.symb'} 
-			. '&part_'
-			    . $Apache::inputtags::part
-			    . '&radiobuttonresponse'
-			    . '&HWVAL_'
-			    . $Apache::inputtags::response['-1'];
-			$result .= '\item[{'
-			    . &Apache::lonxml::print_pdf_radiobutton(
-			    $fieldname, $temp )
-			    . '}]'
-			    . $Apache::response::foilgroup{ $name . '.text' }
-			. "\n";
-		    }
-		    else {
-			$result .= '\item \vskip -2mm ';
-		    }
-		    
-		    if (   $env{'form.pdfFormFields'} ne 'yes'
-			   or $Apache::inputtags::status[-1] ne 'CAN_ANSWER' )
-		    {
-			$result .=
-			    '$\bigcirc$'
-			    . $Apache::response::foilgroup{ $name . '.text' }
-			. '\\\\';    #' stupid emacs
-		    }
-		    $i++;
-
-		    $temp++;
-		    
-		    $result .= '\vskip 0 mm ';
-		}
-	    }
-	}
     }
 
 
-    # Close tex bracketing:
 
-    if ($target eq 'tex') {
-	$result .= $end_environment;
-    }
     return $result;
 }
 
@@ -1084,15 +1100,14 @@
 # @param $whichfoils       - Reference to an array that contains the foil names to display
 # @param $bubbles_per_line - Number of bubbles on a line.
 # @param $direction        - Rendering direction 'horizontal' is what we're looking for.
-# @param $vbegin           - Start latex fragment in vertical rendering.
-# @param $vend             - End latex fragmentin vertical rendering.
+# @param $venv             - Name of LaTeX environment to use for vertical rendering.
 #
 # @return string
 # @return the latex rendering of the exam problem.
 #
 #
 sub display_latex_exam {
-    my ($whichfoils, $bubbles_per_line, $direction, $vbegin, $vend) = @_;
+    my ($whichfoils, $bubbles_per_line, $direction, $venv) = @_;
     my $result;
     my $numlines;
     my $bubble_number = 0;
@@ -1111,7 +1126,7 @@
 
 
     } else {
-	$result .= $vbegin;
+	$result .= "\\begin{$venv}";
 	
 	# This section puts out the prefix that tells the user
 	# (if necessary) to only choose one bubble in the next n lines
@@ -1165,7 +1180,7 @@
 	    $i++;
 	    $bubble_number++;
 	}
-	$result .= $vend
+	$result .= "\\end{$venv}";
 
     }	
 
@@ -1178,14 +1193,14 @@
 #
 #  @param $whichfoils - The foils to display
 #  @param $direction  - Display direction ('horizontal' is what matters to us).
-#  @param $vbegin     - Begin the vertical environment being used.
+#  @param $venv       - Vertical env. to use for vertical rendering.
 #  @param  $vend      - End the vertical environment being used.
 #
 #  @return string
 #  @retval - The LaTeX rendering of the resource.'
 #
 sub display_latex {
-    my ($whichfoils, $direction, $vbegin, $vend) = @_;
+    my ($whichfoils, $direction, $venv) = @_;
     my $result;
 
     # how we render depends on the direction.
@@ -1199,13 +1214,13 @@
 	$result .= &Apache::caparesponse::make_horizontal_latex_bubbles(
 	    $whichfoils, \@foil_texts, '');
     } else {
-	$result .= $vbegin;
+	$result .= "\\begin{$venv}";
 	foreach my $name (@{$whichfoils}) {
 	    $result .=  '\vspace*{-2 mm}\item '
 		. $Apache::response::foilgroup{ $name . '.text' };
 	}
 	
-	$result .= $vend;
+	$result .= "\\end{$venv}";
     }
     return $result;
 }
@@ -1220,15 +1235,19 @@
 #                     they should be displayed.
 # @param $direction  - Rendering direction.  'horiztonal' means inputs are laid out
 #                      horizontally otherwise they are stacked vertically.
+# @param $venv       - Vertical environment in which to wrap the foils.
 #
 # @return string
 # @retval String containing the rendering of the resource.
 #
+# TODO: Take into account direction!!!
+#
 sub display_pdf_form {
-    my ($whichfoils) = @_;
+    my ($whichfoils, $direction, $venv) = @_;
     my $temp = 0;
     my $result;
 
+    $result .= "\\begin{$venv}";
     foreach my $name ( @{$whichfoils} ) {
 	
 	my $fieldname =
@@ -1247,6 +1266,7 @@
 	
 	$temp++;
     }
+    $result .= "\\end{$venv}";
 
     return $result;
 }
@@ -1290,40 +1310,21 @@
        # LaTeX rendering:
     } else {
 
-        my $i             = 0;
-        my $bubble_number = 0;
-        my $line          = 0;
-        my $temp          = 0;
+
         my $id            = $Apache::inputtags::response['-1'];
         my $part          = $Apache::inputtags::part;
-
-	
-	
 	my $numlines;
 	
 	# Decide how to bracket the list of foils:
 
-	my $begin_environment;
-	my $end_environment;
+	my $vertical_env = &latex_vertical_environment();
 
-        if (   $env{'form.pdfFormFields'} eq 'yes'
-            && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
-        {
-            $begin_environment = '\begin{itemize}';
-	    $end_environment   = '\end{itemize}';
-        }
-        else {
-            $begin_environment = '\begin{enumerate}';
-	    $end_environment   = '\end{enumerate}';
-        }	
-	
 	# Rendering for latex exams.
 	
 	if ( ( $Apache::lonhomework::type eq 'exam' ) )
 	{
 	    $result .= &display_latex_exam(
-		$whichfoils, $bubbles_per_line, $direction, $begin_environment, 
-		$end_environment);
+		$whichfoils, $bubbles_per_line, $direction, $vertical_env);
 
 	    $result .= '\vskip 0mm ';
 	    
@@ -1336,13 +1337,9 @@
 	    if ( ($env{'form.pdfFormFields'} eq 'yes')
 		    && ($Apache::inputtags::status[-1] eq 'CAN_ANSWER'))
 	    {
-		$result .= $begin_environment;
-		$result .= &display_pdf_form($whichfoils, $direction);
-		$result .= $end_environment;
+		$result .= &display_pdf_form($whichfoils, $direction, $vertical_env);
 	    } else {
-		$result .= &display_latex(
-		     $whichfoils,  $direction, $begin_environment, $end_environment
-		    );
+		$result .= &display_latex($whichfoils,  $direction, $vertical_env );
 	    }
 	    $result .= '\vskip 0 mm '; 
        
Index: loncom/homework/caparesponse/caparesponse.pm
diff -u loncom/homework/caparesponse/caparesponse.pm:1.249.8.1 loncom/homework/caparesponse/caparesponse.pm:1.249.8.2
--- loncom/homework/caparesponse/caparesponse.pm:1.249.8.1	Fri Jan 20 10:12:09 2012
+++ loncom/homework/caparesponse/caparesponse.pm	Sat Feb  4 20:40:15 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # caparesponse definition
 #
-# $Id: caparesponse.pm,v 1.249.8.1 2012/01/20 10:12:09 foxr Exp $
+# $Id: caparesponse.pm,v 1.249.8.2 2012/02/04 20:40:15 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -895,7 +895,6 @@
     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+)}\$?/) {
@@ -1098,11 +1097,11 @@
 	}
 	$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.='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].'}}'
+	    $result.='\hskip -4 mm {\small \textbf{ '.$alphabet[$ind].'}}'
 		. $bubble_fragment 
 		. '& \hskip -3 mm {\small '.$bubble_display->[$ind].'} ';
 	    if ($ind != $cou+$table_range[$j]-1) {


More information about the LON-CAPA-cvs mailing list