version 1.201, 2002/10/11 20:52:13
|
version 1.211, 2002/11/06 22:36:08
|
Line 60
|
Line 60
|
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $prevent_entity_encode); |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist @namespace $prevent_entity_encode $errorcount $warningcount); |
use strict; |
use strict; |
use HTML::LCParser(); |
use HTML::LCParser(); |
use HTML::TreeBuilder(); |
use HTML::TreeBuilder(); |
Line 106 use Apache::lonmsg();
|
Line 106 use Apache::lonmsg();
|
#debugging control, to turn on debugging modify the correct handler |
#debugging control, to turn on debugging modify the correct handler |
$Apache::lonxml::debug=0; |
$Apache::lonxml::debug=0; |
|
|
|
# keeps count of the number of warnings and errors generated in a parse |
|
$warningcount=0; |
|
$errorcount=0; |
|
|
#path to the directory containing the file currently being processed |
#path to the directory containing the file currently being processed |
@pwd=(); |
@pwd=(); |
|
|
Line 140 $Apache::lonxml::registered=0;
|
Line 144 $Apache::lonxml::registered=0;
|
# a pointer the the Apache request object |
# a pointer the the Apache request object |
$Apache::lonxml::request=''; |
$Apache::lonxml::request=''; |
|
|
|
# a problem number counter, and check on hether it is used |
|
$Apache::lonxml::counter=0; |
|
$Apache::lonxml::counter_changed=0; |
|
|
sub xmlbegin { |
sub xmlbegin { |
my $output=''; |
my $output=''; |
if ($ENV{'browser.mathml'}) { |
if ($ENV{'browser.mathml'}) { |
Line 520 sub xmlparse {
|
Line 528 sub xmlparse {
|
# do we have a course style file? |
# do we have a course style file? |
# |
# |
|
|
if ($ENV{'request.course.id'}) { |
if ($ENV{'request.course.id'} && $ENV{'request.state'} ne 'construct') { |
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) { |
Line 555 sub xmlparse {
|
Line 563 sub xmlparse {
|
if ($ENV{'request.uri'}) { |
if ($ENV{'request.uri'}) { |
&writeallows($ENV{'request.uri'}); |
&writeallows($ENV{'request.uri'}); |
} |
} |
|
if ($Apache::lonxml::counter_changed) { &store_counter() } |
return $finaloutput; |
return $finaloutput; |
} |
} |
|
|
Line 585 sub latex_special_symbols {
|
Line 594 sub latex_special_symbols {
|
$current_token=~s/\^/\\char94 /g; |
$current_token=~s/\^/\\char94 /g; |
$current_token=~s/\~/\\char126 /g; |
$current_token=~s/\~/\\char126 /g; |
$current_token=~s/(&[^a-z\#])/\\$1/g; |
$current_token=~s/(&[^a-z\#])/\\$1/g; |
if ($current_token=~/ \#\w/) { |
$current_token=~s/([^&])\#/$1\\#/g; |
$current_token=~s/ \#(\w)/ \\#$1/; |
|
} else { |
|
$current_token=~s/([^&])(\#)/$1\\$2/g; |
|
} |
|
$current_token=~s/(\$|_|{|})/\\$1/g; |
$current_token=~s/(\$|_|{|})/\\$1/g; |
$current_token=~s/\\char92 /\\texttt{\\char92}/g; |
$current_token=~s/\\char92 /\\texttt{\\char92}/g; |
$current_token=~s/>/\$>\$/g; #more |
$current_token=~s/>/\$>\$/g; #more |
Line 836 sub callsub {
|
Line 841 sub callsub {
|
if ($token->[0] eq 'S') { |
if ($token->[0] eq 'S') { |
$currentstring = $token->[4]; |
$currentstring = $token->[4]; |
$currentstring.=&Apache::edit::handle_insert(); |
$currentstring.=&Apache::edit::handle_insert(); |
|
} elsif ($token->[0] eq 'E') { |
|
$currentstring = $token->[2]; |
|
$currentstring.=&Apache::edit::handle_insertafter($token->[1]); |
} else { |
} else { |
$currentstring = $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
Line 851 sub setup_globals {
|
Line 859 sub setup_globals {
|
my ($request,$target)=@_; |
my ($request,$target)=@_; |
$Apache::lonxml::request=$request; |
$Apache::lonxml::request=$request; |
$Apache::lonxml::registered = 0; |
$Apache::lonxml::registered = 0; |
|
$errorcount=0; |
|
$warningcount=0; |
|
$Apache::lonxml::default_homework_loaded=0; |
|
&init_counter(); |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::pwd=(); |
@Apache::lonxml::extlinks=(); |
@Apache::lonxml::extlinks=(); |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
Line 951 sub init_safespace {
|
Line 963 sub init_safespace {
|
&Apache::run::run($safeinit,$safeeval); |
&Apache::run::run($safeinit,$safeeval); |
} |
} |
|
|
|
sub default_homework_load { |
|
my ($safeeval)=@_; |
|
&Apache::lonxml::debug('Loading default_homework'); |
|
my $default=&Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/default_homework.lcpm'); |
|
if ($default == -1) { |
|
&Apache::lonxml::error("<b>Unable to find <i>default_homework.lcpm</i></b>"); |
|
} else { |
|
&Apache::run::run($default,$safeeval); |
|
$Apache::lonxml::default_homework_loaded=1; |
|
} |
|
} |
|
|
sub startredirection { |
sub startredirection { |
$Apache::lonxml::redirection++; |
$Apache::lonxml::redirection++; |
push (@Apache::lonxml::outputstack, ''); |
push (@Apache::lonxml::outputstack, ''); |
Line 1022 sub get_all_text_unbalanced {
|
Line 1046 sub get_all_text_unbalanced {
|
} elsif ($token->[0] eq 'E') { |
} elsif ($token->[0] eq 'E') { |
$result.=$token->[2]; |
$result.=$token->[2]; |
} |
} |
if ($result =~ /(.*)$tag(.*)/) { |
if ($result =~ /(.*)\Q$tag\E(.*)/s) { |
&Apache::lonxml::debug('Got a winner with leftovers ::'.$2); |
&Apache::lonxml::debug('Got a winner with leftovers ::'.$2); |
&Apache::lonxml::debug('Result is :'.$1); |
&Apache::lonxml::debug('Result is :'.$1); |
$result=$1; |
$result=$1; |
Line 1034 sub get_all_text_unbalanced {
|
Line 1058 sub get_all_text_unbalanced {
|
return $result |
return $result |
} |
} |
|
|
|
sub increment_counter { |
|
$Apache::lonxml::counter++; |
|
$Apache::lonxml::counter_changed=1; |
|
} |
|
|
|
sub init_counter { |
|
if (defined($ENV{'form.counter'})) { |
|
$Apache::lonxml::counter=$ENV{'form.counter'}; |
|
} elsif (not defined($Apache::lonxml::counter)) { |
|
$Apache::lonxml::counter=1; |
|
&store_counter(); |
|
} |
|
$Apache::lonxml::counter_changed=0; |
|
} |
|
|
|
sub store_counter { |
|
&Apache::lonnet::appenv(('form.counter' => $Apache::lonxml::counter)); |
|
return ''; |
|
} |
|
|
sub get_all_text { |
sub get_all_text { |
my($tag,$pars)= @_; |
my($tag,$pars)= @_; |
my $depth=0; |
my $depth=0; |
Line 1325 ENDNOTFOUND
|
Line 1369 ENDNOTFOUND
|
sub debug { |
sub debug { |
if ($Apache::lonxml::debug eq 1) { |
if ($Apache::lonxml::debug eq 1) { |
$|=1; |
$|=1; |
print("DEBUG:".&HTML::Entities::encode($_[0])."<br />\n"); |
print('<font size="-2"<pre>DEBUG:'.&HTML::Entities::encode($_[0])."</pre></font>\n"); |
} |
} |
} |
} |
|
|
sub error { |
sub error { |
|
$errorcount++; |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
# If printing in construction space, put the error inside <pre></pre> |
# If printing in construction space, put the error inside <pre></pre> |
print "<b>ERROR:</b>".join("\n",@_)."\n"; |
print "<b>ERROR:</b>".join("\n",@_)."\n"; |
Line 1339 sub error {
|
Line 1384 sub error {
|
&Apache::lonmsg::author_res_msg($ENV{'request.filename'},join('<br />',@_)); |
&Apache::lonmsg::author_res_msg($ENV{'request.filename'},join('<br />',@_)); |
#notify course |
#notify course |
if ( $ENV{'request.course.id'} ) { |
if ( $ENV{'request.course.id'} ) { |
my $users=$ENV{'course.'.$ENV{'request.course.id'}.'.comment.email'}; |
my (undef,%users)=&Apache::lonfeedback::decide_receiver(undef,0,1,1,1); |
my $declutter=&Apache::lonnet::declutter($ENV{'request.filename'}); |
my $declutter=&Apache::lonnet::declutter($ENV{'request.filename'}); |
foreach my $user (split /\,/, $users) { |
foreach (keys %users) { |
($user,my $domain) = split /:/, $user; |
my ($user,$domain) = split(/:/, $_); |
&Apache::lonmsg::user_normal_msg($user,$domain, |
&Apache::lonmsg::user_normal_msg($user,$domain, |
"Error [$declutter]",join('<br />',@_)); |
"Error [$declutter]",join('<br />',@_)); |
} |
} |
Line 1355 sub error {
|
Line 1400 sub error {
|
} |
} |
|
|
sub warning { |
sub warning { |
|
$warningcount++; |
if ($ENV{'request.state'} eq 'construct') { |
if ($ENV{'request.state'} eq 'construct') { |
print "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n"; |
print "<b>W</b>ARNING<b>:</b>".join('<br />',@_)."<br />\n"; |
} |
} |