--- loncom/xml/lonxml.pm 2004/02/06 20:59:50 1.301 +++ loncom/xml/lonxml.pm 2004/03/02 22:45:56 1.307 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.301 2004/02/06 20:59:50 sakharuk Exp $ +# $Id: lonxml.pm,v 1.307 2004/03/02 22:45:56 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -410,8 +410,8 @@ sub latex_special_symbols { #fixup & if it doesn't look like # { or α $string=~s/(&(?!((\#[0-9]+)|([a-z]+));))/\\$1/gi; - $string=~s/([^&])\#/$1\\#/g; - $string=~s/([^\\])\#/$1\\#/g; + $string=~s/([^&\\])\#/$1\\#/g; + $string=~s/\#\#/\#\\#/g; $string=~s/(\$|_|{|})/\\$1/g; $string=~s/\\char92 /\\texttt{\\char92}/g; $string=~s/(>|<)/\$$1\$/g; #more or less @@ -750,6 +750,7 @@ sub init_safespace { $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'); + $safehole->wrap(\&Apache::lonxml::error,$safeeval,'&LONCAPA_INTERNAL_ERROR'); #need to inspect this class of ops # $safeeval->deny(":base_orig"); @@ -760,6 +761,28 @@ sub init_safespace { $safeinit .= ';$external::randomseed='.$rndseed.';'; &Apache::lonxml::debug("Setting rndseed to $rndseed"); &Apache::run::run($safeinit,$safeeval); + + my $subroutine=<<'EVALUATESUB'; +sub __LC_INTERNAL_EVALUATE__ { + my ($__LC__a,$__LC__b,$__LC__c)=@_; + my $__LC__prefix; + while(1){ + { + use strict; + no strict "vars"; + if (eval(defined(eval($__LC__a.$__LC__b)))) { + return $__LC__prefix.eval($__LC__a.$__LC__b.$__LC__c); + } + } + $__LC__prefix.=substr($__LC__a,0,1,""); + if ($__LC__a!~/^(\$|&|\#)/) { last; } + } + return $__LC__prefix.$__LC__a.$__LC__b.$__LC__c; +} +EVALUATESUB + $safeeval->permit("require"); + $safeeval->reval($subroutine); + $safeeval->deny("require"); } sub default_homework_load { @@ -1135,8 +1158,8 @@ sub inserteditinfo { 'ed' => 'Edit'); my $buttons=(< - + + BUTTONS my $editfooter=(< @@ -1310,7 +1333,7 @@ sub error { if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { # If printing in construction space, put the error inside

       $request->print($Apache::lonxml::warnings_error_header.
-		      "ERROR:".join("\n",@_)."\n");
+		      "ERROR:".join("
\n",@_)."
\n"); $Apache::lonxml::warnings_error_header=''; } else { $request->print("An Error occured while processing this resource. The instructor has been notified.
"); @@ -1326,10 +1349,6 @@ sub error { "Error [$declutter]",join('
',@_)); } } - - #FIXME probably shouldn't have me get everything forever. - &Apache::lonmsg::user_normal_msg('albertel','msu',"Error in $ENV{'request.filename'}",join('
',@_)); - #&Apache::lonmsg::user_normal_msg('albertel','103',"Error in $ENV{'request.filename'}",$_[0]); } }