version 1.194, 2002/09/10 20:53:36
|
version 1.208, 2002/10/25 18:58:19
|
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 99 use Apache::edit();
|
Line 99 use Apache::edit();
|
use Apache::lonnet(); |
use Apache::lonnet(); |
use Apache::File(); |
use Apache::File(); |
use Apache::loncommon(); |
use Apache::loncommon(); |
|
use Apache::lonfeedback(); |
|
use Apache::lonmsg(); |
|
|
#================================================== Main subroutine: xmlparse |
#================================================== Main subroutine: xmlparse |
#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 138 $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 186 sub xmlend {
|
Line 196 sub xmlend {
|
if ($hidden) { |
if ($hidden) { |
$message='<font color="#888888">'.$message.'</font>'; |
$message='<font color="#888888">'.$message.'</font>'; |
} |
} |
|
my $screenname=&Apache::loncommon::screenname( |
|
$contrib{$idx.':sendername'}, |
|
$contrib{$idx.':senderdomain'}); |
|
my $plainname=&Apache::loncommon::nickname( |
|
$contrib{$idx.':sendername'}, |
|
$contrib{$idx.':senderdomain'}); |
|
|
my $sender='Anonymous'; |
my $sender='Anonymous'; |
if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { |
if ((!$contrib{$idx.':anonymous'}) || ($seeid)) { |
$sender=&Apache::loncommon::aboutmewrapper( |
$sender=&Apache::loncommon::aboutmewrapper( |
$contrib{$idx.':plainname'}, |
$plainname, |
$contrib{$idx.':sendername'}, |
$contrib{$idx.':sendername'}, |
$contrib{$idx.':senderdomain'}).' ('. |
$contrib{$idx.':senderdomain'}).' ('. |
$contrib{$idx.':sendername'}.' at '. |
$contrib{$idx.':sendername'}.' at '. |
$contrib{$idx.':senderdomain'}.')'; |
$contrib{$idx.':senderdomain'}.')'; |
if ($contrib{$idx.':anonymous'}) { |
if ($contrib{$idx.':anonymous'}) { |
$sender.=' [anonymous] '. |
$sender.=' [anonymous] '. |
$contrib{$idx.':screenname'}; |
$screenname; |
} |
} |
if ($seeid) { |
if ($seeid) { |
if ($hidden) { |
if ($hidden) { |
Line 208 sub xmlend {
|
Line 225 sub xmlend {
|
} |
} |
} |
} |
} else { |
} else { |
if ($contrib{$idx.':screenname'}) { |
if ($screenname) { |
$sender='<i>'.$contrib{$idx.':screenname'}.'</i>'; |
$sender='<i>'.$screenname.'</i>'; |
} |
} |
} |
} |
$discussion.='<p><b>'.$sender.'</b> ('. |
$discussion.='<p><b>'.$sender.'</b> ('. |
Line 224 sub xmlend {
|
Line 241 sub xmlend {
|
} |
} |
} |
} |
if ($discussiononly) { |
if ($discussiononly) { |
$discussion.='<h1>'.$symb.'</h1>'; |
$discussion.=(<<ENDDISCUSS); |
|
<form action="/adm/feedback" method="post" name="mailform"> |
|
<input type="submit" name="discuss" value="Post Discussion" /> |
|
<input type="submit" name="anondiscuss" value="Post Anonymous Discussion" /> |
|
<input type="hidden" name="symb" value="$symb" /> |
|
<input type="hidden" name="sendit" value="true" /> |
|
<br /> |
|
<font size="1">Note: in anonymous discussion, your name is visible only to |
|
course faculty</font><br /> |
|
<textarea name=comment cols=60 rows=10 wrap=hard></textarea> |
|
</form> |
|
ENDDISCUSS |
|
$discussion.=&Apache::lonfeedback::generate_preview_button(); |
} |
} |
} |
} |
} |
} |
Line 345 sub registerurl {
|
Line 374 sub registerurl {
|
my $forcereg=shift; |
my $forcereg=shift; |
my $target = shift; |
my $target = shift; |
my $result = ''; |
my $result = ''; |
|
|
if ($target eq 'edit') { |
if ($target eq 'edit') { |
$result .="<script>\n". |
$result .="<script>\n". |
"if (typeof menu != 'undefined') {menu.currentURL=null;}\n". |
"if (typeof menu != 'undefined') {menu.currentURL=null;}\n". |
Line 361 sub registerurl {
|
Line 391 sub registerurl {
|
$Apache::lonxml::registered=1; |
$Apache::lonxml::registered=1; |
my $nothing=''; |
my $nothing=''; |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } |
|
my $newmail=''; |
|
if (&Apache::lonmsg::newmail()) { |
|
$newmail='menu.setstatus("you have","messages");'; |
|
} |
my $timesync='menu.syncclock(1000*'.time.');'; |
my $timesync='menu.syncclock(1000*'.time.');'; |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { |
my $hwkadd=''; |
my $hwkadd=''; |
Line 390 ENDPARM
|
Line 424 ENDPARM
|
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu=window.open("$nothing","LONCAPAmenu","",false); |
menu.clearTimeout(menu.menucltim); |
menu.clearTimeout(menu.menucltim); |
$timesync |
$timesync |
|
$newmail |
menu.currentURL=window.location.pathname; |
menu.currentURL=window.location.pathname; |
menu.reloadURL=window.location.pathname; |
menu.reloadURL=window.location.pathname; |
menu.currentStale=0; |
menu.currentStale=0; |
Line 493 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 528 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 557 sub latex_special_symbols {
|
Line 593 sub latex_special_symbols {
|
$current_token=~s/\\/\\char92 /g; |
$current_token=~s/\\/\\char92 /g; |
$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; |
$current_token=~s/([^&]\#)/\\$1/g; |
$current_token=~s/([^&])\#/$1\\#/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 820 sub setup_globals {
|
Line 856 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 920 sub init_safespace {
|
Line 960 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 1003 sub get_all_text_unbalanced {
|
Line 1055 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 1294 ENDNOTFOUND
|
Line 1366 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 1324 sub error {
|
Line 1397 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"; |
} |
} |