--- 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: # <randomlabel bgimg=URL code=JAVACLASS codebase=URL width=12 height=45> # <labelgroup name=GroupOne type=image> @@ -16,18 +17,19 @@ # <location x=12 y=45 /> # <location x=32 y=65 /> # <location x=21 y=54 /> -# <label>TEXT</label> -# <label>TEXT</label> -# <label>TEXT</label> +# <label>TEXT-1</label> +# <label>TEXT-2</label> +# <label>TEXT-3</label> # </labelgroup> # </randomlabel> # =========================================== -# 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.="<applet code=$code codebase=$codebase width=\"$w\" height=\"$h\">"; - $result.="<param name=\"bgimg\" value=\"$bgimg\">"; - if ($target eq 'edit') { - } - if ($target eq 'modified') { + $Apache::randomlabel::tlabel_cnt=0; + $Apache::randomlabel::ilabel_cnt=0; + if ($target eq 'web') { + $result.="<applet code=$code codebase=$codebase width=\"$w\" height=\"$h\">"; + $result.="<param name=\"bgimg\" value=\"$bgimg\">"; + } elsif ($target eq 'edit') { + } elsif ($target eq 'modified') { + } else { } return $result; } sub end_randomlabel { - return '</applet><BR />'; + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + my $result=''; + my $count; + + $count = $Apache::randomlabel::tlabel_cnt; + if( $count != 0) { + $result.= "<param name=\"count\" value=\"$count\">"; + } + $count = $Apache::randomlabel::ilabel_cnt; + if( $count != 0) { + $result.= "<param name=\"icount\" value=\"$count\">"; + } + if ($target eq 'web') { + $result .= "</applet><BR />"; + } + 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= "<param name=\"count\" value=\"$count\">"; - $str = 'LB'; - $xstr = 'X'; - $ystr = 'Y'; - } - if( $type eq 'image') { - $text= "<param name=\"icount\" value=\"$count\">"; - $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 .= "<param name=\"" . $str . $_ . "\" value=\"$label\">"; - $text .= "<param name=\"" . $xstr . $_ . "\" value=\"$x\"> "; - $text .= "<param name=\"" . $ystr . $_ . "\" value=\"$y\">"; - $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 .= "<param name=\"" . $str . "\" value=\"$label\">"; + $text .= "<param name=\"" . $xstr . "\" value=\"$x\"> "; + $text .= "<param name=\"" . $ystr . "\" value=\"$y\">"; $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; } # <label>$var_abc</label> 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; }