version 1.68, 2001/09/18 02:21:13
|
version 1.71, 2001/10/30 19:18:15
|
Line 379 sub end_while {
|
Line 379 sub end_while {
|
# </randomlist> |
# </randomlist> |
sub start_randomlist { |
sub start_randomlist { |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my $body= &Apache::lonxml::get_all_text("/randomlist",$$parser[$#$parser]); |
if ($target eq 'answer' || $target eq 'grade' || $target eq 'web') { |
my $b_parser= HTML::TokeParser->new(\$body); |
my $body= &Apache::lonxml::get_all_text("/randomlist",$$parser[$#$parser]); |
my $b_tok; |
my $b_parser= HTML::TokeParser->new(\$body); |
my @randomlist; |
my $b_tok; |
my $list_item; |
my @randomlist; |
|
my $list_item; |
while($b_tok = $b_parser->get_token() ) { |
while($b_tok = $b_parser->get_token() ) { |
if($b_tok->[0] eq 'S') { # start tag |
if($b_tok->[0] eq 'S') { # start tag |
# get content of the tag until matching end tag |
# get content of the tag until matching end tag |
# get all text upto the matching tag |
# get all text upto the matching tag |
# and push the content into @randomlist |
# and push the content into @randomlist |
$list_item = &Apache::lonxml::get_all_text('/'.$b_tok->[1],$b_parser); |
$list_item = &Apache::lonxml::get_all_text('/'.$b_tok->[1],$b_parser); |
$list_item = "$b_tok->[4]"."$list_item"."</$b_tok->[1]>"; |
$list_item = "$b_tok->[4]"."$list_item"."</$b_tok->[1]>"; |
push(@randomlist,$list_item); |
push(@randomlist,$list_item); |
# print "<br /><b>START-TAG $b_tok->[1], $b_tok->[4], $list_item</b>"; |
# print "<br /><b>START-TAG $b_tok->[1], $b_tok->[4], $list_item</b>"; |
} |
} |
if($b_tok->[0] eq 'T') { # text |
if($b_tok->[0] eq 'T') { # text |
# what to do with text in between tags? |
# what to do with text in between tags? |
# print "<b>TEXT $b_tok->[1]</b><br />"; |
# print "<b>TEXT $b_tok->[1]</b><br />"; |
} |
} |
# if($b_tok->[0] eq 'E') { # end tag, should not happen |
# if($b_tok->[0] eq 'E') { # end tag, should not happen |
# print "<b>END-TAG $b_tok->[1]</b><br />"; |
# print "<b>END-TAG $b_tok->[1]</b><br />"; |
# } |
# } |
} |
} |
my @idx_arr = (0 .. $#randomlist); |
|
&Apache::structuretags::shuffle(\@idx_arr); |
|
my $bodytext = ''; |
|
for(0 .. $#randomlist) { |
|
$bodytext .= "$randomlist[ $idx_arr[$_] ]"; |
|
} |
|
|
|
&Apache::lonxml::newparser($parser,\$bodytext); |
my @idx_arr = (0 .. $#randomlist); |
|
&Apache::structuretags::shuffle(\@idx_arr); |
|
my $bodytext = ''; |
|
for(0 .. $#randomlist) { |
|
$bodytext .= "$randomlist[ $idx_arr[$_] ]"; |
|
} |
|
&Apache::lonxml::newparser($parser,\$bodytext); |
|
} |
return ""; |
return ""; |
} |
} |
|
|
sub shuffle { |
sub shuffle { |
my $a=shift; |
my $a=shift; |
my $i; |
my $i; |
&Apache::response::setrandomnumber(); |
if (defined(@$a)) { |
for($i=@$a;--$i;) { |
&Apache::response::setrandomnumber(); |
my $j=int rand($i+1); |
for($i=@$a;--$i;) { |
next if $i == $j; |
my $j=int rand($i+1); |
@$a[$i,$j] = @$a[$j,$i]; |
next if $i == $j; |
|
@$a[$i,$j] = @$a[$j,$i]; |
|
} |
} |
} |
} |
} |
|
|
Line 542 sub end_startouttext {
|
Line 545 sub end_startouttext {
|
my $text=''; |
my $text=''; |
|
|
if ($target eq 'edit') { |
if ($target eq 'edit') { |
$text=&Apache::lonxml::get_all_text("endouttext",$$parser[$#$parser]); |
$text=&Apache::lonxml::get_all_text("endouttext",$$parser[-1]); |
$result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td> |
$result.=&Apache::edit::start_table($token)."<tr><td>Text Block</td> |
<td>Delete:". |
<td>Delete:". |
&Apache::edit::deletelist($target,$token) |
&Apache::edit::deletelist($target,$token) |
Line 576 sub delete_startouttext {
|
Line 579 sub delete_startouttext {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; |
# my $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']); |
# my $text=&Apache::lonxml::get_all_text("endouttext",$$parser['-1']); |
my $text=$$parser['-1']->get_text("/endouttext"); |
my $text=$$parser['-1']->get_text("/endouttext"); |
my $token=$$parser['-1']->get_token(); |
my $ntoken=$$parser['-1']->get_token(); |
&Apache::lonxml::debug("Deleting :$text: and :$token->[0]:$token->[1]:$token->[2]: for startouttext"); |
&Apache::lonxml::debug("Deleting :$text: and :$ntoken->[0]:$ntoken->[1]:$ntoken->[2]: for startouttext"); |
&Apache::lonxml::end_tag($tagstack,$parstack,$token); |
&Apache::lonxml::end_tag($tagstack,$parstack,$ntoken); |
# Deleting 2 parallel tag pairs, but we need the numbers later to look like |
# Deleting 2 parallel tag pairs, but we need the numbers later to look like |
# they did the last time round |
# they did the last time round |
&Apache::lonxml::increasedepth($token); |
&Apache::lonxml::increasedepth($ntoken); |
&Apache::lonxml::decreasedepth($token); |
&Apache::lonxml::decreasedepth($ntoken); |
return 1; |
return 1; |
} |
} |
|
|