--- loncom/homework/optionresponse.pm 2002/10/01 14:39:45 1.49 +++ loncom/homework/optionresponse.pm 2002/10/24 19:51:49 1.54 @@ -1,7 +1,7 @@ # LearningOnline Network with CAPA # option list style responses # -# $Id: optionresponse.pm,v 1.49 2002/10/01 14:39:45 sakharuk Exp $ +# $Id: optionresponse.pm,v 1.54 2002/10/24 19:51:49 sakharuk Exp $ # # Copyright Michigan State University Board of Trustees # @@ -321,6 +321,7 @@ sub displayfoils { $result .=$Apache::response::foilgroup{$name.'.value'}. ":".$Apache::response::foilgroup{$name.'.text'}."\n"; } else { + $Apache::response::foilgroup{$name.'.text'}=~s/\\item//; $result .='\item '.$Apache::response::foilgroup{$name.'.value'}. ":".$Apache::response::foilgroup{$name.'.text'}."\n"; } @@ -354,53 +355,40 @@ sub displayfoils { $temp++; } else { if ($displayoptionintex == 0) { - my $texoptionlist = $optionlist; - $texoptionlist =~ s/<option><\/option>/\\item \[\] The possible answers are:/; - $texoptionlist =~ s/<option>/{\\bf /g; - $texoptionlist =~ s/<option selected="on">/{\\bf /g; - $texoptionlist =~ s/<\/option>/},/g; - $texoptionlist =~ s/,$/\./g; - $texoptionlist =~ s/>/\$>\$/g; - $texoptionlist =~ s/</\$<\$/g; - $texoptionlist =~ s/=/\$=\$/g; + my $texoptionlist = &optionlist_correction($optionlist); + if ($Apache::lonhomework::type eq 'exam') {$texoptionlist='';} if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { + if ($Apache::lonhomework::type eq 'exam') { + $Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/; + } $result.= $texoptionlist.$Apache::response::foilgroup{$name.'.text'}; } else { - $result.= $texoptionlist.'\item '.$Apache::response::foilgroup{$name.'.text'}; - } if ($Apache::lonhomework::type eq 'exam') { - my $number_of_bubbles = $#opt + 1; - $result.= '\vskip 2 mm \noindent \begin{tabular}{|'; - for (my $ind=0;$ind<$number_of_bubbles;$ind++) { - $result.='lr|'; - } - $result.='}\hline '; - for (my $ind=0;$ind<$number_of_bubbles;$ind++) { - $result.=' '.$alphabet[$ind].': & '.$opt[$ind].' '; - if ($ind != $number_of_bubbles - 1) {$result.=' & ';} - } - $result.='\\\\\hline\end{tabular}\vskip 0 mm '; + $result.= $texoptionlist.'\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'}; + } else { + $result.= $texoptionlist.'\item '.$Apache::response::foilgroup{$name.'.text'}; } + } + if ($Apache::lonhomework::type eq 'exam') { + $result.=&bubbles(\@alphabet,\@opt); + } $displayoptionintex=1; } else { if ($Apache::response::foilgroup{$name.'.text'}=~m/\\item /) { + if ($Apache::lonhomework::type eq 'exam') { + $Apache::response::foilgroup{$name.'.text'}=~s/\\item/\\item[\\textbf{$Apache::lonxml::counter}\.]/; + } $result.= $Apache::response::foilgroup{$name.'.text'}; } else { - $result.= '\item '.$Apache::response::foilgroup{$name.'.text'}; - } if ($Apache::lonhomework::type eq 'exam') { - my $number_of_bubbles = $#opt + 1; - $result.= '\vskip 2 mm \noindent \begin{tabular}{|'; - for (my $ind=0;$ind<$number_of_bubbles;$ind++) { - $result.='lr|'; - } - $result.='}\hline '; - for (my $ind=0;$ind<$number_of_bubbles;$ind++) { - $result.=' '.$alphabet[$ind].': & '.$opt[$ind].' '; - if ($ind != $number_of_bubbles - 1) {$result.=' & ';} - } - $result.='\\\\\hline\end{tabular}\vskip 0 mm '; + $result.= '\item[\textbf{'.$Apache::lonxml::counter.'}.]'.$Apache::response::foilgroup{$name.'.text'}; + } else { + $result.= '\item '.$Apache::response::foilgroup{$name.'.text'}; } + } + if ($Apache::lonhomework::type eq 'exam') { + $result.=&bubbles(\@alphabet,\@opt); + } } } } @@ -414,6 +402,48 @@ sub displayfoils { } +sub optionlist_correction { + + my $texoptionlist = shift; + $texoptionlist =~ s/<option><\/option>/\\item \[\] Possible answers are:/; + $texoptionlist =~ s/<option>/\{\\bf /g; + $texoptionlist =~ s/<option selected="on">/\{\\bf /g; + $texoptionlist =~ s/<\/option>/\},/g; + $texoptionlist =~ s/,$/\./g; + $texoptionlist =~ s/>/\$>\$/g; + $texoptionlist =~ s/</\$<\$/g; + $texoptionlist =~ s/=/\$=\$/g; + return $texoptionlist; +} + + +sub bubbles { + + my ($ralphabit,$ropt) = @_; + my @alphabet = @$ralphabit; + my @opt = @$ropt; + my ($result,$head,$line) =('','',''); + my $number_of_bubbles = $#opt + 1; + my $current_length = 0; + for (my $ind=0;$ind<=$number_of_bubbles;$ind++) { + $current_length += (length($opt[$ind])+length($alphabet[$ind])+2)*2; + if ($current_length<0.9*$ENV{'form.textwidth'} and $ind!=$number_of_bubbles) { + $line.='\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & '; + $head.='lr'; + } else { + $line=~s/\&\s*$//; + $result.='\vskip -5 mm\begin{tabular}{'.$head.'}\\\\'.$line.'\\\\\end{tabular}'; + $line = '\hskip -1 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -1 mm & \hskip -3 mm {\small '.$opt[$ind].'} & ';; + $head ='lr'; + $current_length = (length($opt[$ind])+length($alphabet[$ind]))*2; + } + + } + &Apache::lonxml::increment_counter(); + return $result; +} + + sub start_conceptgroup { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; $Apache::optionresponse::conceptgroup=1; @@ -516,7 +546,7 @@ sub end_foil { my $result = ''; if ($target eq 'web' || $target eq 'tex') { $text=&Apache::lonxml::endredirection; - if ($target eq 'tex') { $text = '\item '.$text; } + if ($target eq 'tex') { $text = '\item '.$text; } if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') {