--- loncom/xml/lonxml.pm 2004/02/26 23:39:03 1.303 +++ loncom/xml/lonxml.pm 2004/03/09 20:37:58 1.309 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # XML Parser Module # -# $Id: lonxml.pm,v 1.303 2004/02/26 23:39:03 albertel Exp $ +# $Id: lonxml.pm,v 1.309 2004/03/09 20:37:58 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -409,7 +409,7 @@ sub latex_special_symbols { $string=~s/\~/\\char126 /g; #fixup & if it doesn't look like # { or α - $string=~s/(&(?!((\#[0-9]+)|([a-z]+));))/\\$1/gi; + $string=~s/(&(?!((\#[0-9]+)|([a-z][a-z0-9]*));))/\\$1/gi; $string=~s/([^&\\])\#/$1\\#/g; $string=~s/\#\#/\#\\#/g; $string=~s/(\$|_|{|})/\\$1/g; @@ -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"); @@ -765,18 +766,18 @@ sub init_safespace { sub __LC_INTERNAL_EVALUATE__ { my ($__LC__a,$__LC__b,$__LC__c)=@_; my $__LC__prefix; - my $__LC__msg; while(1){ { use strict; + no strict "vars"; if (eval(defined(eval($__LC__a.$__LC__b)))) { - return $__LC__msg.$__LC__prefix.eval($__LC__a.$__LC__b.$__LC__c); + 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.$__LC__msg; + return $__LC__prefix.$__LC__a.$__LC__b.$__LC__c; } EVALUATESUB $safeeval->permit("require"); @@ -1157,8 +1158,8 @@ sub inserteditinfo { 'ed' => 'Edit'); my $buttons=(<<BUTTONS); $cleanbut -<input type="submit" name="savethisfile" value="$lt{'st'}" /> -<input type="submit" name="viewmode" value="$lt{'vi'}" /> +<input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" /> +<input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" /> BUTTONS my $editfooter=(<<ENDFOOTER); <hr /> @@ -1236,8 +1237,10 @@ sub handler { unless ($ENV{'request.state'} eq 'published') { if (($ENV{'form.savethisfile'}) || ($ENV{'form.attemptclean'})) { if (&storefile($file,$ENV{'form.filecont'})) { - $request->print("<font COLOR=\"#0000FF\">".&mt('Updated').": ". -&Apache::lonlocal::locallocaltime(time)." </font>"); + &Apache::lonxml::info("<font COLOR=\"#0000FF\">". + &mt('Updated').": ". + &Apache::lonlocal::locallocaltime(time). + " </font>"); } } } @@ -1289,7 +1292,9 @@ ENDNOTFOUND if ($ENV{'form.editmode'} && (!($ENV{'form.viewmode'}))) { my $displayfile=$request->uri; $displayfile=~s/^\/[^\/]*//; - $result='<html><body bgcolor="#FFFFFF"><h3>'.$displayfile. + $result='<html><body bgcolor="#FFFFFF">'. + &Apache::lonxml::message_location().'<h3>'. + $displayfile. '</h3></body></html>'; $result=&inserteditinfo($result,$filecontents,$filetype); } @@ -1297,7 +1302,7 @@ ENDNOTFOUND if ($filetype eq 'html') { writeallows($request->uri); } - + &Apache::lonxml::add_messages(\$result); $request->print($result); return OK; @@ -1331,11 +1336,13 @@ sub error { if (!$request) { $request=Apache->request; } if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { # If printing in construction space, put the error inside <pre></pre> - $request->print($Apache::lonxml::warnings_error_header. - "<b>ERROR:</b>".join("\n",@_)."\n"); + push(@Apache::lonxml::error_messages, + $Apache::lonxml::warnings_error_header. + "<b>ERROR:</b>".join("<br />\n",@_)."<br />\n"); $Apache::lonxml::warnings_error_header=''; } else { - $request->print("<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"); + push(@Apache::lonxml::error_messages, + "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"); #notify author &Apache::lonmsg::author_res_msg($ENV{'request.filename'},join('<br />',@_)); #notify course @@ -1358,13 +1365,38 @@ sub warning { if ($ENV{'request.state'} eq 'construct' || $Apache::lonxml::debug) { my $request=$Apache::lonxml::request; if (!$request) { $request=Apache->request; } - $request->print($Apache::lonxml::warnings_error_header. - "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n"); + push(@Apache::lonxml::warning_messages, + $Apache::lonxml::warnings_error_header. + "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n"); $Apache::lonxml::warnings_error_header=''; } } } +sub info { + if ($ENV{'form.grade_target'} ne 'tex' + && $ENV{'request.state'} eq 'construct') { + push(@Apache::lonxml::info_messages,join('<br />',@_)."<br />\n"); + } +} + +sub message_location { + return '__LONCAPA_INTERNAL_MESSAGE_LOCATION__'; +} + +sub add_messages { + my ($msg)=@_; + my $result=join(' ', + @Apache::lonxml::info_messages, + @Apache::lonxml::error_messages, + @Apache::lonxml::warning_messages); + undef(@Apache::lonxml::info_messages); + undef(@Apache::lonxml::error_messages); + undef(@Apache::lonxml::warning_messages); + $$msg=~s/__LONCAPA_INTERNAL_MESSAGE_LOCATION__/$result/; + $$msg=~s/__LONCAPA_INTERNAL_MESSAGE_LOCATION__//g; +} + sub get_param { my ($param,$parstack,$safeeval,$context,$case_insensitive) = @_; if ( ! $context ) { $context = -1; }