version 1.333, 2004/07/27 23:35:34
|
version 1.344, 2004/10/12 22:55:22
|
Line 51 use Math::Cephes();
|
Line 51 use Math::Cephes();
|
use Math::Random(); |
use Math::Random(); |
use Opcode(); |
use Opcode(); |
use POSIX qw(strftime); |
use POSIX qw(strftime); |
|
use Time::HiRes qw( gettimeofday tv_interval ); |
|
|
sub register { |
sub register { |
my ($space,@taglist) = @_; |
my ($space,@taglist) = @_; |
Line 159 sub xmlbegin {
|
Line 159 sub xmlbegin {
|
.'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' |
.'<html xmlns:math="http://www.w3.org/1998/Math/MathML" ' |
.'xmlns="http://www.w3.org/TR/REC-html40">'; |
.'xmlns="http://www.w3.org/TR/REC-html40">'; |
} else { |
} else { |
$output='<html>'; |
$output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
|
<html>'; |
} |
} |
return $output; |
return $output; |
} |
} |
|
|
sub xmlend { |
sub xmlend { |
|
my ($target,$parser)=@_; |
my $mode='xml'; |
my $mode='xml'; |
my $status='OPEN'; |
my $status='OPEN'; |
if ($Apache::lonhomework::parsing_a_problem) { |
if ($Apache::lonhomework::parsing_a_problem) { |
$mode='problem'; |
$mode='problem'; |
$status=$Apache::inputtags::status[-1]; |
$status=$Apache::inputtags::status[-1]; |
} |
} |
return &Apache::lonfeedback::list_discussion($mode,$status).'</html>'; |
my $discussion=&Apache::lonfeedback::list_discussion($mode,$status); |
|
if ($target eq 'tex') { |
|
$discussion.='<tex>\keephidden{ENDOFPROBLEM}\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill}\end{document}</tex>'; |
|
&Apache::lonxml::newparser($parser,\$discussion,''); |
|
return ''; |
|
} else { |
|
return $discussion.'</html>'; |
|
} |
} |
} |
|
|
sub tokeninputfield { |
sub tokeninputfield { |
Line 279 sub fontsettings() {
|
Line 288 sub fontsettings() {
|
my $headerstring=''; |
my $headerstring=''; |
if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) { |
if (($ENV{'browser.os'} eq 'mac') && (!$ENV{'browser.mathml'})) { |
$headerstring.= |
$headerstring.= |
'<meta Content-Type="text/html; charset=x-mac-roman">'; |
'<meta Content-Type="text/html; charset=x-mac-roman" />'; |
} elsif (!$ENV{'browser.mathml'} && $ENV{'browser.unicode'}) { |
} elsif (!$ENV{'browser.mathml'} && $ENV{'browser.unicode'}) { |
$headerstring.= |
$headerstring.= |
'<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; |
'<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; |
Line 312 sub xmlparse {
|
Line 321 sub xmlparse {
|
my $bodytext= |
my $bodytext= |
$ENV{'course.'.$ENV{'request.course.id'}.'.default_xml_style'}; |
$ENV{'course.'.$ENV{'request.course.id'}.'.default_xml_style'}; |
if ($bodytext) { |
if ($bodytext) { |
my $location=&Apache::lonnet::filelocation('',$bodytext); |
foreach my $file (split(',',$bodytext)) { |
my $styletext=&Apache::lonnet::getfile($location); |
my $location=&Apache::lonnet::filelocation('',$file); |
if ($styletext ne '-1') { |
my $styletext=&Apache::lonnet::getfile($location); |
%style_for_target = (%style_for_target, |
if ($styletext ne '-1') { |
&Apache::style::styleparser($target,$styletext)); |
%style_for_target = (%style_for_target, |
} |
&Apache::style::styleparser($target,$styletext)); |
} |
} |
|
} |
|
} |
} elsif ($ENV{'construct.style'} && ($ENV{'request.state'} eq 'construct')) { |
} elsif ($ENV{'construct.style'} && ($ENV{'request.state'} eq 'construct')) { |
my $location=&Apache::lonnet::filelocation('',$ENV{'construct.style'}); |
my $location=&Apache::lonnet::filelocation('',$ENV{'construct.style'}); |
my $styletext=&Apache::lonnet::getfile($location); |
my $styletext=&Apache::lonnet::getfile($location); |
Line 805 sub initdepth {
|
Line 816 sub initdepth {
|
$Apache::lonxml::olddepth=-1; |
$Apache::lonxml::olddepth=-1; |
} |
} |
|
|
|
my @timers; |
|
my $lasttime; |
sub increasedepth { |
sub increasedepth { |
my ($token) = @_; |
my ($token) = @_; |
$Apache::lonxml::depth++; |
$Apache::lonxml::depth++; |
Line 812 sub increasedepth {
|
Line 825 sub increasedepth {
|
if ($Apache::lonxml::depthcounter[$Apache::lonxml::depth]==1) { |
if ($Apache::lonxml::depthcounter[$Apache::lonxml::depth]==1) { |
$Apache::lonxml::olddepth=$Apache::lonxml::depth; |
$Apache::lonxml::olddepth=$Apache::lonxml::depth; |
} |
} |
|
my $time; |
|
if ($Apache::lonxml::debug eq "1") { |
|
push(@timers,[&gettimeofday()]); |
|
$time=&tv_interval($lasttime); |
|
$lasttime=[&gettimeofday()]; |
|
} |
|
my $spacing=' 'x($Apache::lonxml::depth-1); |
my $curdepth=join('_',@Apache::lonxml::depthcounter); |
my $curdepth=join('_',@Apache::lonxml::depthcounter); |
&Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n"); |
&Apache::lonxml::debug("s$spacing$Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1] : $time : \n"); |
#print "<br />s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n"; |
#print "<br />s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n"; |
} |
} |
|
|
Line 828 sub decreasedepth {
|
Line 848 sub decreasedepth {
|
&Apache::lonxml::warning(&mt("Missing tags, unable to properly run file.")); |
&Apache::lonxml::warning(&mt("Missing tags, unable to properly run file.")); |
$Apache::lonxml::depth='-1'; |
$Apache::lonxml::depth='-1'; |
} |
} |
|
my ($timer,$time); |
|
if ($Apache::lonxml::debug eq "1") { |
|
$timer=pop(@timers); |
|
$time=&tv_interval($lasttime); |
|
$lasttime=[&gettimeofday()]; |
|
} |
|
my $spacing=' 'x$Apache::lonxml::depth; |
my $curdepth=join('_',@Apache::lonxml::depthcounter); |
my $curdepth=join('_',@Apache::lonxml::depthcounter); |
&Apache::lonxml::debug("e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"); |
&Apache::lonxml::debug("e$spacing$Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1] : $time : ".&tv_interval($timer)."\n"); |
#print "<br />e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"; |
#print "<br />e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n"; |
} |
} |
|
|
Line 1002 sub parstring {
|
Line 1029 sub parstring {
|
unless ($_=~/\W/) { |
unless ($_=~/\W/) { |
my $val=$token->[2]->{$_}; |
my $val=$token->[2]->{$_}; |
$val =~ s/([\%\@\\\"\'])/\\$1/g; |
$val =~ s/([\%\@\\\"\'])/\\$1/g; |
|
$val =~ s/(\$[^{a-zA-Z_])/\\$1/g; |
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; } |
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; } |
$temp .= "my \$$_=\"$val\";"; |
$temp .= "my \$$_=\"$val\";"; |
} |
} |
Line 1159 $cleanbut
|
Line 1187 $cleanbut
|
<input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" /> |
<input type="submit" name="viewmode" accesskey="v" value="$lt{'vi'}" /> |
BUTTONS |
BUTTONS |
$buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont'); |
$buttons.=&Apache::lonhtmlcommon::spelllink('xmledit','filecont'); |
|
$buttons.=&Apache::lonhtmlcommon::htmlareaselectactive('filecont'); |
my $editfooter=(<<ENDFOOTER); |
my $editfooter=(<<ENDFOOTER); |
$initialize |
$initialize |
<hr /> |
<hr /> |
Line 1260 $bodytag
|
Line 1289 $bodytag
|
</body> |
</body> |
</html> |
</html> |
ENDNOTFOUND |
ENDNOTFOUND |
$filecontents=''; |
$filecontents=''; |
if ($ENV{'request.state'} ne 'published') { |
if ($ENV{'request.state'} ne 'published') { |
if ($filetype eq 'sty') { |
if ($filetype eq 'sty') { |
$filecontents=&createnewsty(); |
$filecontents=&createnewsty(); |
Line 1271 ENDNOTFOUND
|
Line 1300 ENDNOTFOUND
|
} |
} |
} else { |
} else { |
unless ($ENV{'request.state'} eq 'published') { |
unless ($ENV{'request.state'} eq 'published') { |
|
if ($filecontents=~/BEGIN LON-CAPA Internal/) { |
|
&Apache::lonxml::error(&mt('This file appears to be a rendering of a Lon-CAPA resource. If this is correct, this resource will act very oddly and incorrectly.')); |
|
} |
|
|
if ($ENV{'form.attemptclean'}) { |
if ($ENV{'form.attemptclean'}) { |
$filecontents=&htmlclean($filecontents,1); |
$filecontents=&htmlclean($filecontents,1); |
} |
} |
Line 1332 sub debug {
|
Line 1365 sub debug {
|
} |
} |
|
|
sub error { |
sub error { |
$errorcount++; |
$errorcount++; |
my $request=$Apache::lonxml::request; |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
if (!$request) { $request=Apache->request; } |
# If printing in construction space, put the error inside <pre></pre> |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
push(@Apache::lonxml::error_messages, |
# If printing in construction space, put the error inside <pre></pre> |
$Apache::lonxml::warnings_error_header. |
push(@Apache::lonxml::error_messages, |
"<b>ERROR:</b>".join("<br />\n",@_)."<br />\n"); |
$Apache::lonxml::warnings_error_header. |
$Apache::lonxml::warnings_error_header=''; |
"<b>ERROR:</b>".join("<br />\n",@_)."<br />\n"); |
} else { |
$Apache::lonxml::warnings_error_header=''; |
my $errormsg; |
} else { |
my ($symb)=&Apache::lonnet::symbread(); |
push(@Apache::lonxml::error_messages, |
if ( !$symb ) { |
"<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"); |
#public or browsers |
#notify author |
$errormsg=&mt("An error occured while processing this resource. The author has been notified."); |
&Apache::lonmsg::author_res_msg($ENV{'request.filename'},join('<br />',@_)); |
} |
#notify course |
#notify author |
if ( $ENV{'request.course.id'} ) { |
&Apache::lonmsg::author_res_msg($ENV{'request.filename'},join('<br />',@_)); |
my (undef,%users)=&Apache::lonfeedback::decide_receiver(undef,0,1,1,1); |
#notify course |
my $declutter=&Apache::lonnet::declutter($ENV{'request.filename'}); |
if ( $symb && $ENV{'request.course.id'} ) { |
foreach (keys %users) { |
my (undef,%users)=&Apache::lonfeedback::decide_receiver(undef,0,1,1,1); |
my ($user,$domain) = split(/:/, $_); |
my $declutter=&Apache::lonnet::declutter($ENV{'request.filename'}); |
&Apache::lonmsg::user_normal_msg($user,$domain, |
my @userlist; |
"Error [$declutter]",join('<br />',@_)); |
foreach (keys %users) { |
} |
my ($user,$domain) = split(/:/, $_); |
|
push(@userlist,"$user\@$domain"); |
|
&Apache::lonmsg::user_normal_msg($user,$domain, |
|
"Error [$declutter]",join('<br />',@_)); |
|
} |
|
if ($ENV{'request.role.adv'}) { |
|
$errormsg=&mt("An error occured while processing this resource. The course personnel ([_1]) and the author have been notified.",join(', ',@userlist)); |
|
} else { |
|
$errormsg=&mt("An error occured while processing this resource. The instructor has been notified."); |
|
} |
|
} |
|
push(@Apache::lonxml::error_messages,"<b>$errormsg</b> <br />"); |
} |
} |
} |
|
} |
} |
|
|
sub warning { |
sub warning { |
Line 1440 sub get_param_var {
|
Line 1483 sub get_param_var {
|
} elsif ( $args !~ /my \$\Q$param\E=\"/ ) { return undef; } |
} elsif ( $args !~ /my \$\Q$param\E=\"/ ) { return undef; } |
my $value=&Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #' |
my $value=&Apache::run::run("{$args;".'return $'.$param.'}',$safeeval); #' |
&Apache::lonxml::debug("first run is $value"); |
&Apache::lonxml::debug("first run is $value"); |
if ($value =~ /^[\$\@\%]\w+$/) { |
if ($value =~ /^[\$\@\%][a-zA-Z_]\w*$/) { |
&Apache::lonxml::debug("doing second"); |
&Apache::lonxml::debug("doing second"); |
my @result=&Apache::run::run("return $value",$safeeval,1); |
my @result=&Apache::run::run("return $value",$safeeval,1); |
if (!defined($result[0])) { |
if (!defined($result[0])) { |