Diff for /loncom/homework/caparesponse/caparesponse.pm between versions 1.127 and 1.129

version 1.127, 2004/02/05 21:04:24 version 1.129, 2004/02/13 15:09:52
Line 29 Line 29
 package Apache::caparesponse;  package Apache::caparesponse;
 use strict;  use strict;
 use capa;  use capa;
   use Apache::lonlocal;
   
 BEGIN {  BEGIN {
     &Apache::lonxml::register('Apache::caparesponse',('caparesponse','numericalresponse','stringresponse','formularesponse'));      &Apache::lonxml::register('Apache::caparesponse',('caparesponse','numericalresponse','stringresponse','formularesponse'));
Line 179  sub end_numericalresponse { Line 180  sub end_numericalresponse {
     my $unit=&Apache::lonxml::get_param_var('unit',$parstack,      my $unit=&Apache::lonxml::get_param_var('unit',$parstack,
     $safeeval);      $safeeval);
     if ($target eq 'web') {      if ($target eq 'web') {
  $result="<br />The correct answer is ";   $result="<br />".&mt('The correct answer is')." ";
     }      }
     for (my $i=0; $i <= $#answers; $i++) {      for (my $i=0; $i <= $#answers; $i++) {
  my $answer=$answers[$i];   my $answer=$answers[$i];
Line 254  sub end_numericalresponse { Line 255  sub end_numericalresponse {
  }   }
  if ($tag eq 'numericalresponse') {   if ($tag eq 'numericalresponse') {
     my ($celllength,$number_of_tables,@table_range)=      my ($celllength,$number_of_tables,@table_range)=
  &get_table_sizes($formats[0],$number_of_bubbles);   &get_table_sizes($number_of_bubbles,\@bubble_values);
     my $j=0;      my $j=0;
     my $cou=0;      my $cou=0;
     $result.='\vskip -1 mm \noindent \begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]';      $result.='\vskip -1 mm \noindent \begin{enumerate}\item[\textbf{'.$Apache::lonxml::counter.'}.]';
     for (my $i=0;$i<$number_of_tables;$i++) {      for (my $i=0;$i<$number_of_tables;$i++) {
  $result.='\vskip -1 mm \noindent \begin{tabular}{';   $result.='\vskip -1 mm \noindent \begin{tabular}{';
  for (my $ind=0;$ind<$table_range[$j];$ind++) {   for (my $ind=0;$ind<$table_range[$j];$ind++) {
     $result.='lp{'.$celllength.' mm}';      $result.='p{3 mm}p{'.$celllength.' mm}';
  }   }
  $result.='}';   $result.='}';
  for (my $ind=$cou;$ind<$cou+$table_range[$j];$ind++) {   for (my $ind=$cou;$ind<$cou+$table_range[$j];$ind++) {
     $result.='\hskip -3 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$\hskip -2 mm & {\small '.$bubble_values[$ind].'} ';      $result.='\hskip -4 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$ & \hskip -3 mm {\small '.$bubble_values[$ind].'} ';
     if ($ind != $cou+$table_range[$j]-1) {$result.=' & ';}      if ($ind != $cou+$table_range[$j]-1) {$result.=' & ';}
  }   }
  $cou += $table_range[$j];   $cou += $table_range[$j];
Line 376  sub end_numericalresponse { Line 377  sub end_numericalresponse {
 }  }
   
 sub get_table_sizes {  sub get_table_sizes {
     my ($format,$number_of_bubbles)=@_;      my ($number_of_bubbles,$rbubble_values)=@_;
     my $max_val = 0;      my $scale=2; #mm for one digit
     if ($format=~m/^(\d+)E([^\d]*)(\d*)$/) {      my $cell_width=0;
  $max_val=$1+$2+4;      foreach my $member (@$rbubble_values) {
     } else {   my $cell_width_real=0;
  $max_val=4;   if ($member=~/(\d*)\.?(\d*)(E|e)(\+|-)?(\d*)/) {
       $cell_width_real=(length($1)+length($2)+length($5)+9)*$scale;
    } elsif ($member=~/(\d*)\.?(\d*)/) {
       $cell_width_real=(length($1)+length($2)+2)*$scale;
    } else {
       $cell_width_real=(length($member)+1)*$scale;
    }
    if ($cell_width_real>$cell_width) {$cell_width=$cell_width_real;}
     }      }
     $max_val = int(0.9*$ENV{'form.textwidth'}/(($max_val+6)*2));      $cell_width+=8;
     my $celllength = 0.9*$ENV{'form.textwidth'}/$max_val-10;      $ENV{'form.textwidth'}=~/(\d+)/;
       my $textwidth=$1;
       my $bubbles_per_line=int($textwidth/$cell_width);
       my $number_of_tables = int($number_of_bubbles/$bubbles_per_line);
     my @table_range = ();      my @table_range = ();
     my $number_of_tables = int($number_of_bubbles/$max_val);      for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$bubbles_per_line;}
     for (my $i=0;$i<$number_of_tables;$i++) {push @table_range,$max_val;}      if ($number_of_bubbles % $bubbles_per_line) {
     if ($number_of_bubbles % $max_val != 0) {  
  $number_of_tables++;   $number_of_tables++;
  push @table_range,($number_of_bubbles % $max_val);   push @table_range,($number_of_bubbles % $bubbles_per_line);
     }      }
     return ($celllength,$number_of_tables,@table_range);      $cell_width-=8;
       return ($cell_width,$number_of_tables,@table_range);
 }  }
   
 sub format_number {  sub format_number {
Line 514  sub start_stringresponse { Line 525  sub start_stringresponse {
  [['cs','Case Sensitive'],['ci','Case Insensitive'],   [['cs','Case Sensitive'],['ci','Case Insensitive'],
   ['mc','Case Insensitive, Any Order'],    ['mc','Case Insensitive, Any Order'],
   ['re','Regular Expression']],$token);    ['re','Regular Expression']],$token);
    $result.=&Apache::edit::checked_arg('Answer Display:','answerdisplay',
       [['inline','Inline']],$token);
  $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();   $result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
     } elsif ($target eq 'modified') {      } elsif ($target eq 'modified') {
  my $constructtag;   &Apache::edit::get_new_args($token,$parstack,
  $constructtag=&Apache::edit::get_new_args($token,$parstack,      $safeeval,'answer','type');
   $safeeval,'answer',   my $answerdisplay=$ENV{'form.'.&Apache::edit::html_element_name('answerdisplay')};
   'type');   if ($answerdisplay) {
  if ($constructtag) {      $token->[2]->{'answerdisplay'}=$answerdisplay;
     $result = &Apache::edit::rebuild_tag($token);   } else {
     $result.=&Apache::edit::handle_insert();      delete $token->[2]->{'answerdisplay'};
  }   }
    $result = &Apache::edit::rebuild_tag($token);
    $result.=&Apache::edit::handle_insert();
     } elsif ($target eq 'answer' || $target eq 'grade') {      } elsif ($target eq 'answer' || $target eq 'grade') {
  &Apache::response::reset_params();   &Apache::response::reset_params();
     }      }
Line 538  sub end_stringresponse { Line 553  sub end_stringresponse {
     my $id=$Apache::inputtags::response[-1];      my $id=$Apache::inputtags::response[-1];
     my $answer=&Apache::lonxml::get_param('answer',$parstack,$safeeval);      my $answer=&Apache::lonxml::get_param('answer',$parstack,$safeeval);
     my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval);      my $type=&Apache::lonxml::get_param('type',$parstack,$safeeval);
       my $answerdisplay=&Apache::lonxml::get_param('answerdisplay',$parstack,$safeeval);
     &Apache::lonxml::debug("current $answer ".$token->[2]);      &Apache::lonxml::debug("current $answer ".$token->[2]);
     if (!$Apache::lonxml::default_homework_loaded) {      if (!$Apache::lonxml::default_homework_loaded) {
  &Apache::lonxml::default_homework_load($safeeval);   &Apache::lonxml::default_homework_load($safeeval);
Line 600  sub end_stringresponse { Line 616  sub end_stringresponse {
  my $status = $Apache::inputtags::status['-1'];   my $status = $Apache::inputtags::status['-1'];
  if (  &Apache::response::show_answer() ) {   if (  &Apache::response::show_answer() ) {
     if ($target eq 'web') {      if ($target eq 'web') {
  $result="<br />The correct answer is ".$answer;   $result=($answerdisplay eq 'inline'?'':"<br />".&mt('The correct answer is')." ")
       .$answer;
 #    join(', ',@answers).".<br />";  #    join(', ',@answers).".<br />";
     }      }
  }   }

Removed from v.1.127  
changed lines
  Added in v.1.129


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>