[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