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

foxr foxr at source.lon-capa.org
Mon Jan 23 07:00:13 EST 2012


foxr		Mon Jan 23 12:00:13 2012 EDT

  Modified files:              (Branch: BZ4492)
    /loncom/homework	radiobuttonresponse.pm 
  Log:
  BZ 4492 More refactoring prior to implementing latex direction rendering
          selection.
  
  
-------------- next part --------------
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.153.6.3 loncom/homework/radiobuttonresponse.pm:1.153.6.4
--- loncom/homework/radiobuttonresponse.pm:1.153.6.3	Sat Jan 21 21:40:41 2012
+++ loncom/homework/radiobuttonresponse.pm	Mon Jan 23 12:00:13 2012
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # mutliple choice style responses
 #
-# $Id: radiobuttonresponse.pm,v 1.153.6.3 2012/01/21 21:40:41 foxr Exp $
+# $Id: radiobuttonresponse.pm,v 1.153.6.4 2012/01/23 12:00:13 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -121,14 +121,7 @@
         else {
             $result .= ' \renewcommand{\labelenumi}{\Alph{enumi}.}';
         }
-        if (   $env{'form.pdfFormFields'} eq 'yes'
-            && $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
-        {
-            $result .= '\begin{itemize}';
-        }
-        else {
-            $result .= '\begin{enumerate}';
-        }
+
     }
     elsif ( $target eq 'analyze' ) {
         my $part_id = "$Apache::inputtags::part.$id";
@@ -143,16 +136,7 @@
       @_;
     my $result;
     if ( $target eq 'edit' ) { $result = &Apache::edit::end_table(); }
-    if ( $target eq 'tex' ) {
-        if (    $env{'form.pdfFormFields'} eq 'yes'
-            and $Apache::inputtags::status[-1] eq 'CAN_ANSWER' )
-        {
-            $result .= '\end{itemize}';
-        }
-        else {
-            $result .= '\end{enumerate}';
-        }
-    }
+
     &Apache::response::end_response;
     pop @Apache::lonxml::namespace;
     &Apache::lonxml::deregister( 'Apache::radiobuttonresponse',
@@ -947,6 +931,108 @@
 
     return $result;
 }
+##
+#  Display foils in exam mode for latex
+#
+# @param $whichfoils - Reference to an array that contains the foil names to display
+# @param $bubbles_per_line - Number of bubbles on a line.
+#
+# @return string
+# @return the latex rendering of the exam problem.
+#
+# @note The direction is not honored for exams.   The lines reflect the number of
+#       bubbles on an exam sheet.
+#
+sub display_latex_exam {
+    my ($whichfoils, $bubbles_per_line) = @_;
+    my $result;
+    my $numlines;
+    my $bubble_number = 0;
+    my $line          = 0;
+    my $i             = 0;
+
+    # This section puts out the prefix that tells the user
+    # (if necessary) to only choose one bubble in the next n lines
+    # for problems with more than one line worth of bubbles in the grid sheet:
+
+    my $numitems = scalar( @{$whichfoils} );
+    $numlines = int( $numitems / $bubbles_per_line );
+    if ( ( $numitems % $bubbles_per_line ) != 0 ) {
+	$numlines++;
+    }
+    if ( $numlines < 1 ) {
+	$numlines = 1;
+    }
+    if ( $numlines > 1 ) {
+	my $linetext;
+	for ( my $i = 0 ; $i < $numlines ; $i++ ) {
+	    $linetext .= $Apache::lonxml::counter + $i . ', ';
+	}
+	$linetext =~ s/,\s$//;
+	$result .=
+	    '\item[\small {\textbf{'
+	    . $linetext . '}}]'
+	    . ' {\footnotesize '
+	    . &mt( '(Bubble once in [_1] lines)', $numlines )
+	    . '} \hspace*{\fill} \\\\';
+    }
+    else {
+	$result .= '\item[\textbf{' . $Apache::lonxml::counter . '}.]';
+    }
+
+    # Now output the bubbles themselves:
+
+    foreach my $name (@{$whichfoils}) {
+	if ( $bubble_number >= $bubbles_per_line ) {
+	    $line++;
+	    $i             = 0;
+	    $bubble_number = 0;
+	}
+	my $identifier;
+	if ( $numlines > 1 ) {
+	    $identifier = $Apache::lonxml::counter + $line;
+	}
+	$result .=
+	    '{\small \textbf{'
+	    . $identifier
+	    . $alphabet[$i]
+	    . '}}$\bigcirc$'
+	    . $Apache::response::foilgroup{ $name . '.text' }
+	. '\\\\';    #' stupid emacs -- it thinks it needs that apostrophe to close the quote
+
+	$i++;
+	$bubble_number++;
+    }
+    
+    return $result;
+
+}
+
+##
+#  Display latex when exam mode is not on.
+#
+#  @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  $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 $result;
+
+    $result .= $vbegin;
+    foreach my $name (@{$whichfoils}) {
+	$result .=  '\vspace*{-2 mm}\item '
+	    . $Apache::response::foilgroup{ $name . '.text' };
+    }
+
+    $result .= $vend;
+	
+    return $result;
+}
 
 
 ##
@@ -957,14 +1043,24 @@
 
     my $part   = $Apache::inputtags::part;
     my $solved = $Apache::lonhomework::history{"resource.$part.solved"};
+
+    # Show answers html.
+
     if ( ( $target ne 'tex' )
         && &Apache::response::show_answer() )
     {
 
 	$result = &display_foils_html(
 	    $whichfoils, $target, $direction, $part, $solved, 1);
+	
+	# other html
+    }  elsif ($target ne 'tex') {
+	    $result = &display_foils_html($whichfoils, $target, $direction, $part,
+					  0, 0);
+
+       # LaTeX rendering:
+    } else {
 
-    }  else {
         my $i             = 0;
         my $bubble_number = 0;
         my $line          = 0;
@@ -972,100 +1068,74 @@
         my $id            = $Apache::inputtags::response['-1'];
         my $part          = $Apache::inputtags::part;
 
-	if ($target ne 'tex') {
-	    $result = &display_foils_html($whichfoils, $target, $direction, $part,
-				0, 0);
-	} else {
+	
+	
+	my $numlines;
+	
+	# Decide how to bracket the list of foils:
 
+	my $begin_environment;
+	my $end_environment;
 
-	    my $numlines;
-	    
-	    
-	    
-	    # Rendering for latex exams.
+        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 .= $begin_environment;
+	    $result .= &display_latex_exam($whichfoils, $bubbles_per_line);
+	    $result .= $end_environment;
+	    $result .= '\vskip 0mm ';
 	    
-	    if ( ( $Apache::lonhomework::type eq 'exam' ) )
+	} else {	    
+
+	    # Different rendering for PDF form than for a
+	    # 'regular' answer direction is honored in both of those
+	    #
+
+	    if ( ($env{'form.pdfFormFields'} eq 'yes')
+		    && ($Apache::inputtags::status[-1] eq 'CAN_ANSWER'))
 	    {
-		my $numitems = scalar( @{$whichfoils} );
-		$numlines = int( $numitems / $bubbles_per_line );
-		if ( ( $numitems % $bubbles_per_line ) != 0 ) {
-		    $numlines++;
-		}
-		if ( $numlines < 1 ) {
-		    $numlines = 1;
-		}
-		if ( $numlines > 1 ) {
-		    my $linetext;
-		    for ( my $i = 0 ; $i < $numlines ; $i++ ) {
-			$linetext .= $Apache::lonxml::counter + $i . ', ';
-		    }
-		    $linetext =~ s/,\s$//;
-		    $result .=
-			'\item[\small {\textbf{'
-			. $linetext . '}}]'
-			. ' {\footnotesize '
-			. &mt( '(Bubble once in [_1] lines)', $numlines )
-			. '} \hspace*{\fill} \\\\';
-		}
-		else {
-		    $result .= '\item[\textbf{' . $Apache::lonxml::counter . '}.]';
-		}
-	    }			# tex/exam
-	    
-	    
-	    foreach my $name ( @{$whichfoils} ) {
-		
-		
-		if ( $Apache::lonhomework::type eq 'exam' ) {
-		    if ( $bubble_number >= $bubbles_per_line ) {
-			$line++;
-			$i             = 0;
-			$bubble_number = 0;
-		    }
-		    my $identifier;
-		    if ( $numlines > 1 ) {
-			$identifier = $Apache::lonxml::counter + $line;
-		    }
-		    $result .=
-			'{\small \textbf{'
-			. $identifier
-			. $alphabet[$i]
-			. '}}$\bigcirc$'
+		$result .= $begin_environment;
+		foreach my $name ( @{$whichfoils} ) {
+		    
+		    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' }
-		    . '\\\\';    #' stupid emacs
-		    $i++;
-		    $bubble_number++;
-		}
-		else {
-		    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 .= '\vspace*{-2 mm}\item '
-			    . $Apache::response::foilgroup{ $name . '.text' };
-		    }
+		    . "\n";
+		    
+		    $temp++;
 		}
-		
-		$temp++;
-	    }
-	    if ($target eq 'tex') {
-		$result .= '\vskip 0 mm '; 
+		$result .= $end_environment;
+	    } else {
+		$result .= &display_latex(
+		     $whichfoils,  $direction, $begin_environment, $end_environment
+		    );
 	    }
+	    $result .= '\vskip 0 mm '; 
+       
 	}
+
+
     }
     return $result;
 }


More information about the LON-CAPA-cvs mailing list