version 1.386, 2005/11/02 22:48:52
|
version 1.398, 2006/03/08 21:49:26
|
Line 52 use Math::Random();
|
Line 52 use Math::Random();
|
use Opcode(); |
use Opcode(); |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
use Time::HiRes qw( gettimeofday tv_interval ); |
use Time::HiRes qw( gettimeofday tv_interval ); |
|
use Symbol(); |
|
|
sub register { |
sub register { |
my ($space,@taglist) = @_; |
my ($space,@taglist) = @_; |
Line 148 $Apache::lonxml::post_evaluate=1;
|
Line 149 $Apache::lonxml::post_evaluate=1;
|
#a header message to emit in the case of any generated warning or errors |
#a header message to emit in the case of any generated warning or errors |
$Apache::lonxml::warnings_error_header=''; |
$Apache::lonxml::warnings_error_header=''; |
|
|
|
# Control whether or not LaTeX symbols should be substituted for their |
|
# \ style equivalents...this may be turned off e.g. in an verbatim |
|
# environment. |
|
|
|
$Apache::lonxml::substitute_LaTeX_symbols = 1; # Starts out on. |
|
|
|
sub enable_LaTeX_substitutions { |
|
$Apache::lonxml::substitute_LaTeX_symbols = 1; |
|
} |
|
sub disable_LaTeX_substitutions { |
|
$Apache::lonxml::substitute_LaTeX_symbols = 0; |
|
} |
|
|
sub xmlbegin { |
sub xmlbegin { |
my ($style)=@_; |
my ($style)=@_; |
my $output=''; |
my $output=''; |
Line 272 sub printtokenheader {
|
Line 286 sub printtokenheader {
|
$tcrsid=$courseid; |
$tcrsid=$courseid; |
} |
} |
|
|
my %reply=&Apache::lonnet::get('environment', |
my $plainname=&Apache::loncommon::plainname($tuname,$tudom); |
['firstname','middlename','lastname','generation'], |
|
$tudom,$tuname); |
|
my $plainname=$reply{'firstname'}.' '. |
|
$reply{'middlename'}.' '. |
|
$reply{'lastname'}.' '. |
|
$reply{'generation'}; |
|
|
|
if ($target eq 'web') { |
if ($target eq 'web') { |
my %idhash=&Apache::lonnet::idrget($tudom,($tuname)); |
my %idhash=&Apache::lonnet::idrget($tudom,($tuname)); |
Line 369 sub xmlparse {
|
Line 377 sub xmlparse {
|
&initdepth(); |
&initdepth(); |
&init_alarm(); |
&init_alarm(); |
my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars, |
my $finaloutput = &inner_xmlparse($target,\@stack,\@parstack,\@pars, |
$safeeval,\%style_for_target); |
$safeeval,\%style_for_target,1); |
|
|
if ($env{'request.uri'}) { |
if ($env{'request.uri'}) { |
&writeallows($env{'request.uri'}); |
&writeallows($env{'request.uri'}); |
} |
} |
&do_registered_ssi(); |
&do_registered_ssi(); |
if ($Apache::lonxml::counter_changed) { &store_counter() } |
if ($Apache::lonxml::counter_changed) { &store_counter() } |
|
|
|
&clean_safespace($safeeval); |
|
|
if ($env{'form.return_only_error_and_warning_counts'}) { |
if ($env{'form.return_only_error_and_warning_counts'}) { |
return "$errorcount:$warningcount"; |
return "$errorcount:$warningcount"; |
} |
} |
Line 384 sub xmlparse {
|
Line 395 sub xmlparse {
|
|
|
sub latex_special_symbols { |
sub latex_special_symbols { |
my ($string,$where)=@_; |
my ($string,$where)=@_; |
|
# |
|
# If e.g. in verbatim mode, then don't substitute. |
|
# but return original string. |
|
# |
|
if (!($Apache::lonxml::substitute_LaTeX_symbols)) { |
|
return $string; |
|
} |
if ($where eq 'header') { |
if ($where eq 'header') { |
$string =~ s/(\\|_|\^)/ /g; |
$string =~ s/(\\|_|\^)/ /g; |
$string =~ s/(\$|%|\{|\})/\\$1/g; |
$string =~ s/(\$|%|\{|\})/\\$1/g; |
Line 413 sub latex_special_symbols {
|
Line 431 sub latex_special_symbols {
|
} |
} |
|
|
sub inner_xmlparse { |
sub inner_xmlparse { |
my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target)=@_; |
my ($target,$stack,$parstack,$pars,$safeeval,$style_for_target,$start)=@_; |
my $finaloutput = ''; |
my $finaloutput = ''; |
my $result; |
my $result; |
my $token; |
my $token; |
my $dontpop=0; |
my $dontpop=0; |
|
my $startredirection = $Apache::lonxml::redirection; |
while ( $#$pars > -1 ) { |
while ( $#$pars > -1 ) { |
while ($token = $$pars['-1']->get_token) { |
while ($token = $$pars['-1']->get_token) { |
if (($token->[0] eq 'T') || ($token->[0] eq 'C') ) { |
if (($token->[0] eq 'T') || ($token->[0] eq 'C') ) { |
Line 527 sub inner_xmlparse {
|
Line 546 sub inner_xmlparse {
|
# $finaloutput.=&endredirection; |
# $finaloutput.=&endredirection; |
# } |
# } |
|
|
|
if ( $start && $target eq 'grade') { &endredirection(); } |
|
if ( $Apache::lonxml::redirection > $startredirection) { |
|
while ($Apache::lonxml::redirection > $startredirection) { |
|
$finaloutput .= &endredirection(); |
|
} |
|
} |
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
if (($ENV{'QUERY_STRING'}) && ($target eq 'web')) { |
$finaloutput=&afterburn($finaloutput); |
$finaloutput=&afterburn($finaloutput); |
} |
} |
Line 625 sub setup_globals {
|
Line 649 sub setup_globals {
|
@Apache::lonxml::ssi_info=(); |
@Apache::lonxml::ssi_info=(); |
$Apache::lonxml::post_evaluate=1; |
$Apache::lonxml::post_evaluate=1; |
$Apache::lonxml::warnings_error_header=''; |
$Apache::lonxml::warnings_error_header=''; |
|
$Apache::lonxml::substitute_LaTeX_symbols = 1; |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::metamode = 1; |
$Apache::lonxml::metamode = 1; |
Line 636 sub setup_globals {
|
Line 661 sub setup_globals {
|
$Apache::lonxml::evaluate = 1; |
$Apache::lonxml::evaluate = 1; |
$Apache::lonxml::import = 1; |
$Apache::lonxml::import = 1; |
} elsif ($target eq 'grade') { |
} elsif ($target eq 'grade') { |
&startredirection; |
&startredirection(); #ended in inner_xmlparse on exit |
$Apache::lonxml::metamode = 0; |
$Apache::lonxml::metamode = 0; |
$Apache::lonxml::evaluate = 1; |
$Apache::lonxml::evaluate = 1; |
$Apache::lonxml::import = 1; |
$Apache::lonxml::import = 1; |
Line 795 sub init_safespace {
|
Line 820 sub init_safespace {
|
&initialize_rndseed($safeeval); |
&initialize_rndseed($safeeval); |
} |
} |
|
|
|
sub clean_safespace { |
|
my ($safeeval) = @_; |
|
delete_package_recurse($safeeval->{Root}); |
|
} |
|
|
|
sub delete_package_recurse { |
|
my ($package) = @_; |
|
my @subp; |
|
{ |
|
no strict 'refs'; |
|
while (my ($key,$val) = each(%{*{"$package\::"}})) { |
|
if (!defined($val)) { next; } |
|
local (*ENTRY) = $val; |
|
if (defined *ENTRY{HASH} && $key =~ /::$/ && |
|
$key ne "main::" && $key ne "<none>::") |
|
{ |
|
my ($p) = $package ne "main" ? "$package\::" : ""; |
|
($p .= $key) =~ s/::$//; |
|
push(@subp,$p); |
|
} |
|
} |
|
} |
|
foreach my $p (@subp) { |
|
delete_package_recurse($p); |
|
} |
|
Symbol::delete_package($package); |
|
} |
|
|
sub initialize_rndseed { |
sub initialize_rndseed { |
my ($safeeval)=@_; |
my ($safeeval)=@_; |
my $rndseed; |
my $rndseed; |
Line 961 sub increment_counter {
|
Line 1014 sub increment_counter {
|
} |
} |
|
|
sub init_counter { |
sub init_counter { |
if (defined($env{'form.counter'})) { |
if ($env{'request.state'} eq 'construct') { |
|
$Apache::lonxml::counter=1; |
|
$Apache::lonxml::counter_changed=1; |
|
} elsif (defined($env{'form.counter'})) { |
$Apache::lonxml::counter=$env{'form.counter'}; |
$Apache::lonxml::counter=$env{'form.counter'}; |
$Apache::lonxml::counter_changed=0; |
$Apache::lonxml::counter_changed=0; |
} else { |
} else { |
Line 975 sub store_counter {
|
Line 1031 sub store_counter {
|
return ''; |
return ''; |
} |
} |
|
|
|
{ |
|
my $state; |
|
sub clear_problem_counter { |
|
&Apache::lonnet::logthis(" cpc called from ".(join(':',caller(0)))); |
|
undef($state); |
|
&Apache::lonnet::delenv('form.counter'); |
|
&Apache::lonxml::init_counter(); |
|
&Apache::lonxml::store_counter(); |
|
} |
|
|
|
sub remember_problem_counter { |
|
&Apache::lonnet::transfer_profile_to_env(); |
|
$state = $env{'form.counter'}; |
|
} |
|
|
|
sub restore_problem_counter { |
|
if (defined($state)) { |
|
&Apache::lonnet::appenv(('form.counter' => $state)); |
|
} |
|
} |
|
} |
|
|
sub get_all_text { |
sub get_all_text { |
my($tag,$pars,$style)= @_; |
my($tag,$pars,$style)= @_; |
my $gotfullstack=1; |
my $gotfullstack=1; |
Line 1402 ENDNOTFOUND
|
Line 1480 ENDNOTFOUND
|
undef($Apache::lonhomework::parsing_a_task); |
undef($Apache::lonhomework::parsing_a_task); |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['rawmode']); |
['rawmode']); |
if ($env{'rawmode'}) { $result = $filecontents; } |
if ($env{'form.rawmode'}) { $result = $filecontents; } |
} |
} |
} |
} |
|
|
Line 1450 sub debug {
|
Line 1528 sub debug {
|
if ($Apache::lonxml::debug eq "1") { |
if ($Apache::lonxml::debug eq "1") { |
$|=1; |
$|=1; |
my $request=$Apache::lonxml::request; |
my $request=$Apache::lonxml::request; |
if (!$request) { $request=Apache->request; } |
if (!$request) { |
|
eval { $request=Apache->request; }; |
|
} |
|
if (!$request) { |
|
eval { $request=Apache2::RequestUtil->request; }; |
|
} |
$request->print('<font size="-2"><pre>DEBUG:'.&HTML::Entities::encode($_[0],'<>&"')."</pre></font>\n"); |
$request->print('<font size="-2"><pre>DEBUG:'.&HTML::Entities::encode($_[0],'<>&"')."</pre></font>\n"); |
#&Apache::lonnet::logthis($_[0]); |
#&Apache::lonnet::logthis($_[0]); |
} |
} |