Diff for /loncom/homework/randomlabel.pm between versions 1.4 and 1.5

version 1.4, 2001/10/13 05:57:43 version 1.5, 2001/10/14 05:08:09
Line 103  sub start_labelgroup { Line 103  sub start_labelgroup {
   my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);    my $name = &Apache::lonxml::get_param('name',$parstack,$safeeval);
   my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval);    my $type = &Apache::lonxml::get_param('type',$parstack,$safeeval);
   $type =~tr/A-Z/a-z/;    $type =~tr/A-Z/a-z/;
   if ($target eq 'web' || $target eq 'tex') {    if ($target eq 'web' || $target eq 'tex' || 
         $target eq 'grade' || $target eq 'answer') {
     $Apache::randomlabel::groupname=$name;      $Apache::randomlabel::groupname=$name;
     $Apache::randomlabel::type=$type;      $Apache::randomlabel::type=$type;
     @Apache::randomlabel::xcoord = ();      @Apache::randomlabel::xcoord = ();
     @Apache::randomlabel::ycoord = ();      @Apache::randomlabel::ycoord = ();
       @Apache::randomlabel::value = ();
     @Apache::randomlabel::label_arr  = ();      @Apache::randomlabel::label_arr  = ();
   } elsif ($target eq 'edit') {    } elsif ($target eq 'edit') {
     $result.=&Apache::edit::tag_start($target,$token);      $result.=&Apache::edit::tag_start($target,$token);
Line 125  sub start_labelgroup { Line 127  sub start_labelgroup {
   return $result;    return $result;
 }  }
   
 sub add_var {  sub add_vars {
   my ($name,$value,$type,$safeeval) = @_;    my ($name,$order,$label,$labelorder,$value,$safeeval) = @_;
   if ($type eq 'array') {    my $code = '${'.$name."}{'".($order+1)."'}='".$label."';";
     my $code = 'push(@'.$name.',\''.$value.'\');';    my $out=Apache::run::run($code,$safeeval);
     my $out=Apache::run::run($code,$safeeval);    if ($value) {
   } else {      $code = '${'.$name."}{'value_".($order+1)."'}='".$value."';";
     &Apache::lonxml::error('Unsupported add_var type :'.$type.':');      $out=Apache::run::run($code,$safeeval);
       $code = '${'.$name."}{'labelvalue_".($labelorder+1)."'}='".$value."';";
       $out=Apache::run::run($code,$safeeval);
   }    }
     $code = '${'.$name."}{'numlocations'}='".($order+1)."';";
     $out=Apache::run::run($code,$safeeval);
 }  }
   
 # begin to assign labels to locations  # begin to assign labels to locations
 sub end_labelgroup {  sub end_labelgroup {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $gname = $Apache::randomlabel::groupname;    my $gname = $Apache::randomlabel::groupname;
   my $type  = $Apache::randomlabel::type;    my $type  = $Apache::randomlabel::type;
   my $result='';    my $result='';
   if ($target eq 'web') {    if ($target eq 'web' || $target eq 'answer' || $target eq 'grade') {
     my @idx_arr = (0 .. $#Apache::randomlabel::label_arr);      my @idx_arr = (0 .. $#Apache::randomlabel::label_arr);
     &Apache::structuretags::shuffle(\@idx_arr);      &Apache::structuretags::shuffle(\@idx_arr);
     for(0 .. $#Apache::randomlabel::label_arr) {      for(0 .. $#Apache::randomlabel::label_arr) {
Line 148  sub end_labelgroup { Line 155  sub end_labelgroup {
       my $xstr;        my $xstr;
       my $ystr;        my $ystr;
       my $label = "$Apache::randomlabel::label_arr[ $idx_arr[$_] ]";        my $label = "$Apache::randomlabel::label_arr[ $idx_arr[$_] ]";
         my $x = $Apache::randomlabel::xcoord[$_];
         my $y = $Apache::randomlabel::ycoord[$_];
         my $value = $Apache::randomlabel::value[$_];
       if( $type eq 'text') {        if( $type eq 'text') {
  &add_var($gname,$label,'array',$safeeval);   &add_vars($gname,$_,$label,$idx_arr[$_],$value,$safeeval);
  $str = 'LB'.$Apache::randomlabel::tlabel_cnt;   $str = 'LB'.$Apache::randomlabel::tlabel_cnt;
  $xstr = 'X'.$Apache::randomlabel::tlabel_cnt;   $xstr = 'X'.$Apache::randomlabel::tlabel_cnt;
  $ystr = 'Y'.$Apache::randomlabel::tlabel_cnt;   $ystr = 'Y'.$Apache::randomlabel::tlabel_cnt;
  $Apache::randomlabel::tlabel_cnt += 1;   $Apache::randomlabel::tlabel_cnt += 1;
       } elsif ( $type eq 'image') {        } elsif ( $type eq 'image') {
  &add_var($gname,$idx_arr[$_],'array',$safeeval);   &add_vars($gname,$_,$idx_arr[$_],$idx_arr[$_],$value,$safeeval);
  $str = 'LB'.$Apache::randomlabel::ilabel_cnt;   $str = 'LB'.$Apache::randomlabel::ilabel_cnt;
  $xstr = 'X'.$Apache::randomlabel::ilabel_cnt;   $xstr = 'X'.$Apache::randomlabel::ilabel_cnt;
  $ystr = 'Y'.$Apache::randomlabel::ilabel_cnt;   $ystr = 'Y'.$Apache::randomlabel::ilabel_cnt;
Line 163  sub end_labelgroup { Line 173  sub end_labelgroup {
       } else {        } else {
  &Apache::lonxml::error('Unknown type of label :'.$type.':');   &Apache::lonxml::error('Unknown type of label :'.$type.':');
       }        }
       my $x = $Apache::randomlabel::xcoord[$_];        if ($target eq 'web') {
       my $y = $Apache::randomlabel::ycoord[$_];   $result .= '<param name="' . $str  . '" value="'.$label.'">';
       $result .= '<param name="' . $str  . '" value="'.$label.'">';   $result .= '<param name="' . $xstr . '" value="'.$x.'">';
       $result .= '<param name="' . $xstr . '" value="'.$x.'">';   $result .= '<param name="' . $ystr . '" value="'.$y.'">';
       $result .= '<param name="' . $ystr . '" value="'.$y.'">';        }
     }      }
   } elsif ($target eq 'tex') {    } elsif ($target eq 'tex') {
     my $WX1=0; #  Web x-coord. of upper left corner (ULC)      my $WX1=0; #  Web x-coord. of upper left corner (ULC)
Line 194  sub end_labelgroup { Line 204  sub end_labelgroup {
       my $label = "$Apache::randomlabel::label_arr[ $idx_arr[$i] ]";        my $label = "$Apache::randomlabel::label_arr[ $idx_arr[$i] ]";
       my $x = $Apache::randomlabel::xcoord[$i];        my $x = $Apache::randomlabel::xcoord[$i];
       my $y = $Apache::randomlabel::ycoord[$i];        my $y = $Apache::randomlabel::ycoord[$i];
         my $value = $Apache::randomlabel::value[$i];
       my $tcX=$x*($texwidth/$wwidth);        my $tcX=$x*($texwidth/$wwidth);
       my $tcY=$TY1-$y*($TY1/$wheight)-2;        my $tcY=$TY1-$y*($TY1/$wheight)-2;
       $tcX=sprintf('%.2f',$tcX);        $tcX=sprintf('%.2f',$tcX);
       $tcY=sprintf('%.2f',$tcY);        $tcY=sprintf('%.2f',$tcY);
       $result.='\put('.$tcX.','.$tcY.'){\normalsize \bf '.$label.'}'."\n";        $result.='\put('.$tcX.','.$tcY.'){\normalsize \bf '.$label.'}'."\n";
       if( $type eq 'text') {        if( $type eq 'text') {
  &add_var($gname,$label,'array',$safeeval);   &add_vars($gname,$i,$label,$idx_arr[$i],$value,$safeeval);
       } elsif ( $type eq 'image') {        } elsif ( $type eq 'image') {
  &add_var($gname,$idx_arr[$i],'array',$safeeval);   &add_vars($gname,$i,$idx_arr[$i],$idx_arr[$i],$value,$safeeval);
       } else {        } else {
  &Apache::lonxml::error('Unknown type of label :'.$type.':');   &Apache::lonxml::error('Unknown type of label :'.$type.':');
       }        }
Line 213  sub end_labelgroup { Line 224  sub end_labelgroup {
   return $result;    return $result;
 }  }
   
 # <location x=123 y=456 />  # <location x="123" y="456" value="some value"/>
 sub start_location {  sub start_location {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $x= &Apache::lonxml::get_param('x',$parstack,$safeeval);    my $x= &Apache::lonxml::get_param('x',$parstack,$safeeval);
   my $y= &Apache::lonxml::get_param('y',$parstack,$safeeval);    my $y= &Apache::lonxml::get_param('y',$parstack,$safeeval);
     my $value= &Apache::lonxml::get_param('value',$parstack,$safeeval);
   my $result='';    my $result='';
   push(@Apache::randomlabel::xcoord,$x);    push(@Apache::randomlabel::xcoord,$x);
   push(@Apache::randomlabel::ycoord,$y);    push(@Apache::randomlabel::ycoord,$y);
     push(@Apache::randomlabel::value,$value);
   if ($target eq 'edit') {    if ($target eq 'edit') {
     $result.=&Apache::edit::tag_start($target,$token);      $result.=&Apache::edit::tag_start($target,$token);
     $result.=&Apache::edit::text_arg('X:','x',$token,4).      $result.=&Apache::edit::text_arg('X:','x',$token,4).
       &Apache::edit::text_arg('Y:','y',$token,4).        &Apache::edit::text_arg('Y:','y',$token,4).
    &Apache::edit::text_arg('Value:','value',$token).
  '</td></tr><tr><td colspan="3">';   '</td></tr><tr><td colspan="3">';
     $result.=&Apache::edit::end_table;      $result.=&Apache::edit::end_table;
   } elsif ($target eq 'modified') {    } elsif ($target eq 'modified') {
     my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,      my $constructtag=&Apache::edit::get_new_args($token,$parstack,$safeeval,
  'x','y');   'x','y','value');
     if ($constructtag) {      if ($constructtag) {
       $result = &Apache::edit::rebuild_tag($token);        $result = &Apache::edit::rebuild_tag($token);
       $result.=&Apache::edit::handle_insert();        $result.=&Apache::edit::handle_insert();
Line 249  sub end_location { Line 263  sub end_location {
 sub start_label {  sub start_label {
   my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
   my $result='';    my $result='';
   if ($target eq 'web' || $target eq 'tex') {    if ($target eq 'web' || $target eq 'tex' || 
         $target eq 'grade' || $target eq 'answer') {
     my $ltext=&Apache::lonxml::get_all_text("/label",$$parser[-1]);      my $ltext=&Apache::lonxml::get_all_text("/label",$$parser[-1]);
     push(@Apache::randomlabel::label_arr,$ltext);      push(@Apache::randomlabel::label_arr,$ltext);
   } elsif ($target eq 'edit') {    } elsif ($target eq 'edit') {

Removed from v.1.4  
changed lines
  Added in v.1.5


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