--- loncom/xml/lonxml.pm 2001/06/08 17:52:03 1.87 +++ loncom/xml/lonxml.pm 2001/06/16 18:34:31 1.96 @@ -9,7 +9,9 @@ # 5/10 Scott Harrison # 5/26 Gerd Kortemeyer # 5/27 H. K. Ng -# 6/2,6/3,6/8 Gerd Kortemeyer +# 6/2,6/3,6/8,6/9 Gerd Kortemeyer +# 6/12,6/13 H. K. Ng +# 6/16 Gerd Kortemeyer package Apache::lonxml; use vars @@ -19,6 +21,7 @@ use HTML::TokeParser; use Safe; use Safe::Hole; use Math::Cephes qw(:trigs :hypers :bessels erf erfc); +use Math::Random qw(:all); use Opcode; sub register { @@ -106,21 +109,21 @@ sub registerurl { $hwkadd.=(<[0] eq 'S') { - $currentstring = &Apache::edit::tag_start($target,$token,$tagstack, - $parstack,$parser, - $safeeval,$style); - } my $tag=$token->[1]; my $space=$Apache::lonxml::alltags{$tag}; if (!$space) { @@ -465,6 +453,36 @@ sub callsub { return $currentstring; } +sub setup_globals { + my ($target)=@_; + if ($target eq 'meta') { + $Apache::lonxml::redirection = 0; + $Apache::lonxml::metamode = 1; + $Apache::lonxml::evaluate = 1; + $Apache::lonxml::import = 0; + } elsif ($target eq 'grade') { + &startredirection; + $Apache::lonxml::metamode = 0; + $Apache::lonxml::evaluate = 1; + $Apache::lonxml::import = 1; + } elsif ($target eq 'modified') { + $Apache::lonxml::redirection = 0; + $Apache::lonxml::metamode = 0; + $Apache::lonxml::evaluate = 0; + $Apache::lonxml::import = 0; + } elsif ($target eq 'edit') { + $Apache::lonxml::redirection = 0; + $Apache::lonxml::metamode = 0; + $Apache::lonxml::evaluate = 0; + $Apache::lonxml::import = 0; + } else { + $Apache::lonxml::redirection = 0; + $Apache::lonxml::metamode = 0; + $Apache::lonxml::evaluate = 1; + $Apache::lonxml::import = 1; + } +} + sub init_safespace { my ($target,$safeeval,$safehole,$safeinit) = @_; $safeeval->permit("entereval"); @@ -492,10 +510,31 @@ sub init_safespace { $safehole->wrap(\&Math::Cephes::y1,$safeeval,'&y1'); $safehole->wrap(\&Math::Cephes::yn,$safeeval,'&yn'); $safehole->wrap(\&Math::Cephes::yv,$safeeval,'&yv'); - + $safehole->wrap(\&Math::Random::random_beta,$safeeval,'&math_random_beta'); + $safehole->wrap(\&Math::Random::random_chi_square,$safeeval,'&math_random_chi_square'); + $safehole->wrap(\&Math::Random::random_exponential,$safeeval,'&math_random_exponential'); + $safehole->wrap(\&Math::Random::random_f,$safeeval,'&math_random_f'); + $safehole->wrap(\&Math::Random::random_gamma,$safeeval,'&math_random_gamma'); + $safehole->wrap(\&Math::Random::random_multivariate_normal,$safeeval,'&math_random_multivariate_normal'); + $safehole->wrap(\&Math::Random::random_multinomial,$safeeval,'&math_random_multinomial'); + $safehole->wrap(\&Math::Random::random_noncentral_chi_square,$safeeval,'&math_random_noncentral_chi_square'); + $safehole->wrap(\&Math::Random::random_noncentral_f,$safeeval,'&math_random_noncentral_f'); + $safehole->wrap(\&Math::Random::random_normal,$safeeval,'&math_random_normal'); + $safehole->wrap(\&Math::Random::random_permutation,$safeeval,'&math_random_permutation'); + $safehole->wrap(\&Math::Random::random_permuted_index,$safeeval,'&math_random_permuted_index'); + $safehole->wrap(\&Math::Random::random_uniform,$safeeval,'&math_random_uniform'); + $safehole->wrap(\&Math::Random::random_poisson,$safeeval,'&math_random_poisson'); + $safehole->wrap(\&Math::Random::random_uniform_integer,$safeeval,'&math_random_uniform_integer'); + $safehole->wrap(\&Math::Random::random_negative_binomial,$safeeval,'&math_random_negative_binomial'); + $safehole->wrap(\&Math::Random::random_binomial,$safeeval,'&math_random_binomial'); + $safehole->wrap(\&Math::Random::random_seed_from_phrase,$safeeval,'&random_seed_from_phrase'); + $safehole->wrap(\&Math::Random::random_set_seed_from_phrase,$safeeval,'&random_set_seed_from_phrase'); + $safehole->wrap(\&Math::Random::random_get_seed,$safeeval,'&random_get_seed'); + $safehole->wrap(\&Math::Random::random_set_seed,$safeeval,'&random_set_seed'); + #need to inspect this class of ops # $safeeval->deny(":base_orig"); - $safeinit .= ';$external::target='.$target.';'; + $safeinit .= ';$external::target="'.$target.'";'; $safeinit .= ';$external::randomseed='.&Apache::lonnet::rndseed().';'; &Apache::run::run($safeinit,$safeeval); } @@ -781,7 +820,7 @@ ENDNOTFOUND sub debug { if ($Apache::lonxml::debug eq 1) { - print "DEBUG:".$_[0]."
\n"; + print("DEBUG:".$_[0]."
\n"); } } @@ -830,11 +869,13 @@ sub register_insert { my $line = $data[$i]; if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; } if ( $line =~ /TABLE/ ) { last; } - my ($tag,$descrip,$function,$show) = split(/,/, $line); + my ($tag,$descrip,$color,$function,$show) = split(/,/, $line); $insertlist{"$tagnum.tag"} = $tag; $insertlist{"$tagnum.description"} = $descrip; + $insertlist{"$tagnum.color"} = $color; $insertlist{"$tagnum.function"} = $function; $insertlist{"$tagnum.show"}= $show; + $insertlist{"$tag.num"}=$tagnum; $tagnum++; } $i++; #skipping TABLE line