--- loncom/homework/randomlabel.pm 2001/08/29 19:48:26 1.2 +++ loncom/homework/randomlabel.pm 2001/08/30 19:39:12 1.3 @@ -1,7 +1,8 @@ # The LearningOnline Network with CAPA # random labelling tool -# 7/20/2001 Isaac Tsai -# 8/10/2001 Isaac Tsai +# 7/20/2001 Isaac Tsai, initial syntax +# 8/10/2001 Isaac Tsai, +# 8/30/2001 Isaac Tsai, # SYNTAX: # # @@ -16,18 +17,19 @@ # # # -# -# -# +# +# +# # # # =========================================== -# location (123,456): $GroupOne[1] = ... -# (321,654): $GroupOne[2] = ... -# (213,546): $GroupOne[3] = ... -# location (12,45) : $GroupOne[1] = ... -# (321,654): $GroupOne[2] = ... -# (213,546): $GroupOne[3] = ... +# side effect: +# location (123,456): $GroupOne[0] = 2 # images give out indexes +# (321,654): $GroupOne[1] = 1 +# (213,546): $GroupOne[2] = 0 +# location (12,45) : $GroupTwo[0] = "TEXT-3" +# (32,65) : $GroupTwo[1] = "TEXT-1" +# (21,54) : $GroupTwo[2] = "TEXT-2" # =========================================== package Apache::randomlabel; use strict; @@ -45,17 +47,35 @@ sub start_randomlabel { my $w= &Apache::lonxml::get_param('width',$parstack,$safeeval); my $h= &Apache::lonxml::get_param('height',$parstack,$safeeval); - $result.=""; - $result.=""; - if ($target eq 'edit') { - } - if ($target eq 'modified') { + $Apache::randomlabel::tlabel_cnt=0; + $Apache::randomlabel::ilabel_cnt=0; + if ($target eq 'web') { + $result.=""; + $result.=""; + } elsif ($target eq 'edit') { + } elsif ($target eq 'modified') { + } else { } return $result; } sub end_randomlabel { - return '
'; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result=''; + my $count; + + $count = $Apache::randomlabel::tlabel_cnt; + if( $count != 0) { + $result.= ""; + } + $count = $Apache::randomlabel::ilabel_cnt; + if( $count != 0) { + $result.= ""; + } + if ($target eq 'web') { + $result .= "

"; + } + return $result; } sub start_labelgroup { @@ -69,50 +89,52 @@ sub start_labelgroup { @Apache::randomlabel::xcoord = (); @Apache::randomlabel::ycoord = (); @Apache::randomlabel::label_arr = (); - return ''; + return $result; } # begin to assign labels to locations sub end_labelgroup { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $gname = $Apache::randomlabel::groupname; - my $count = $#Apache::randomlabel::label_arr + 1; + my $count; my $type = $Apache::randomlabel::type; my $code; my $out; my $label; my $x; my $y; - my $text; + my $text=''; my $str; my $xstr; my $ystr; - if( $type eq 'text') { - $text= ""; - $str = 'LB'; - $xstr = 'X'; - $ystr = 'Y'; - } - if( $type eq 'image') { - $text= ""; - $str = 'IMG'; - $xstr = 'IX'; - $ystr = 'IY'; - } my @idx_arr = (0 .. $#Apache::randomlabel::label_arr); &Apache::structuretags::shuffle(\@idx_arr); for(0 .. $#Apache::randomlabel::label_arr) { $label = "$Apache::randomlabel::label_arr[ $idx_arr[$_] ]"; - $x = pop @Apache::randomlabel::xcoord; - $y = pop @Apache::randomlabel::ycoord; - $text .= ""; - $text .= " "; - $text .= ""; - $code = "push(\@$gname, $label);" ; + if( $type eq 'text') { + $code = "push(\@$gname, $label);" ; + $str = 'LB'.$Apache::randomlabel::tlabel_cnt; + $xstr = 'X'.$Apache::randomlabel::tlabel_cnt; + $ystr = 'Y'.$Apache::randomlabel::tlabel_cnt; + $Apache::randomlabel::tlabel_cnt += 1; + } elsif ( $type eq 'image') { + $code = "push(\@$gname, $idx_arr[$_]);" ; + $str = 'LB'.$Apache::randomlabel::ilabel_cnt; + $xstr = 'X'.$Apache::randomlabel::ilabel_cnt; + $ystr = 'Y'.$Apache::randomlabel::ilabel_cnt; + $Apache::randomlabel::ilabel_cnt += 1; + } else { + } + # $x = pop @Apache::randomlabel::xcoord; + # $y = pop @Apache::randomlabel::ycoord; + $x = $Apache::randomlabel::xcoord[$_]; + $y = $Apache::randomlabel::ycoord[$_]; + $text .= ""; + $text .= " "; + $text .= ""; $out=Apache::run::run($code,$safeeval); } - return $text; } @@ -121,27 +143,34 @@ sub start_location { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $x= &Apache::lonxml::get_param('x',$parstack,$safeeval); my $y= &Apache::lonxml::get_param('y',$parstack,$safeeval); + my $result=''; push(@Apache::randomlabel::xcoord,$x); push(@Apache::randomlabel::ycoord,$y); - return ''; + return $result; } sub end_location { - return ''; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result=''; + return $result; } # sub start_label { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $ltext=&Apache::lonxml::get_all_text("/label",$$parser[$#$parser]); + my $result=''; push(@Apache::randomlabel::label_arr,$ltext); - return ''; + return $result; } sub end_label { - return ''; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result=''; + + return $result; }