--- loncom/xml/lonxml.pm 2003/01/15 23:59:27 1.225
+++ loncom/xml/lonxml.pm 2003/05/03 21:09:03 1.251
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.225 2003/01/15 23:59:27 www Exp $
+# $Id: lonxml.pm,v 1.251 2003/05/03 21:09:03 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -41,7 +41,6 @@
# 6/1/1 Gerd Kortemeyer
# 2/21,3/13 Guy
# 3/29,5/4 Gerd Kortemeyer
-# 5/10 Scott Harrison
# 5/26 Gerd Kortemeyer
# 5/27 H. K. Ng
# 6/2,6/3,6/8,6/9 Gerd Kortemeyer
@@ -197,6 +196,13 @@ sub xmlend {
my $message=$contrib{$idx.':message'};
$message=~s/\n/\
/g;
$message=&Apache::lontexconvert::msgtexconverted($message);
+ if ($contrib{$idx.':attachmenturl'}) {
+ my ($fname,$ft)
+ =($contrib{$idx.':attachmenturl'}=~/\/(\w+)\.(\w+)$/);
+ $message.='
Attachment: '.$fname.'.'.$ft.'';
+ }
if ($message) {
if ($hidden) {
$message=''.$message.'';
@@ -249,7 +255,7 @@ sub xmlend {
}
if ($discussiononly) {
$discussion.=(<
+
ENDDISCUSS
$discussion.=&Apache::lonfeedback::generate_preview_button();
@@ -271,7 +280,7 @@ sub tokeninputfield {
my $defhost=$Apache::lonnet::perlvar{'lonHostID'};
$defhost=~tr/a-z/A-Z/;
return (<
+\n";
- }
- if ((($ENV{'request.publicaccess'}) ||
- (!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) &&
- (!$forcereg)) {
- return $result.
- '';
- }
- if ($Apache::lonxml::registered && !$forcereg) { return ''; }
- $Apache::lonxml::registered=1;
- my $reopen=&Apache::lonmenu::reopenmenu();
- my $newmail='';
- if (&Apache::lonmsg::newmail()) {
- $newmail='menu.setstatus("you have","messages");';
- }
- my $timesync='menu.syncclock(1000*'.time.');';
- if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
- my $hwkadd='';
- if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
- if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
- $hwkadd.=(<
-// BEGIN LON-CAPA Internal
-
- function LONCAPAreg() {
- menu=$reopen;
- menu.clearTimeout(menu.menucltim);
- $timesync
- $newmail
- menu.currentURL=window.location.pathname;
- menu.reloadURL=window.location.pathname;
- menu.currentSymb="$ENV{'request.symb'}";
- menu.reloadSymb="$ENV{'request.symb'}";
- menu.currentStale=0;
- menu.clearbut(3,1);
- menu.switchbutton
- (6,3,'catalog.gif','catalog','info','catalog_info()','Show catalog information');
- menu.switchbutton
- (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)','Provide my evaluation of this resource');
- menu.switchbutton
- (8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)','Provide feedback messages or contribute to the course discussion about this resource');
- menu.switchbutton
- (8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)','Prepare a printable document');
- menu.switchbutton
- (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)','Go to the previous resource in the course sequence');
- menu.switchbutton
- (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)','Go to the next resource in the course sequence');
- menu.switchbutton
- (9,1,'sbkm.gif','set','bookmark','set_bookmark()','Set a bookmark for this resource');
- menu.switchbutton
- (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()','Use or edit my bookmark collection');
- menu.switchbutton
- (9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource');
- $hwkadd
- $editbutton
- }
-
- function LONCAPAstale() {
- menu=$reopen
- menu.currentStale=1;
- if (menu.reloadURL!='' && menu.reloadURL!= null) {
- menu.switchbutton
- (3,1,'reload.gif','return','location','go(reloadURL)','Return to the last known location in the course sequence');
- }
- menu.clearbut(7,1);
- menu.clearbut(7,2);
- menu.clearbut(7,3);
- menu.menucltim=menu.setTimeout(
- 'clearbut(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
- 'clearbut(9,1);clearbut(9,2);clearbut(9,3);clearbut(6,3);clearbut(6,1)',
- 2000);
-
- }
-
-// END LON-CAPA Internal
-
-ENDREGTHIS
-
- } else {
- $result = (<
-// BEGIN LON-CAPA Internal
-
- function LONCAPAreg() {
- menu=$reopen
- $timesync
- menu.currentStale=1;
- menu.clearbut(2,1);
- menu.clearbut(2,3);
- menu.clearbut(8,1);
- menu.clearbut(8,2);
- menu.clearbut(8,3);
- if (menu.currentURL) {
- menu.switchbutton
- (3,1,'reload.gif','return','location','go(currentURL)');
- } else {
- menu.clearbut(3,1);
- }
- }
-
- function LONCAPAstale() {
- }
-
-// END LON-CAPA Internal
-
-ENDDONOTREGTHIS
- }
- return $result;
-}
-
-sub loadevents() {
- return 'LONCAPAreg();';
-}
-
-sub unloadevents() {
- return 'LONCAPAstale();';
-}
-
sub printalltags {
my $temp;
foreach $temp (sort keys %Apache::lonxml::alltags) {
@@ -604,6 +401,10 @@ sub xmlparse {
my ($request,$target,$content_file_string,$safeinit,%style_for_target) = @_;
&setup_globals($request,$target);
+ &Apache::inputtags::initialize_inputtags();
+ &Apache::outputtags::initialize_outputtags();
+ &Apache::edit::initialize_edit();
+
#
# do we have a course style file?
#
@@ -669,18 +470,22 @@ sub htmlclean {
}
sub latex_special_symbols {
- my ($current_token,$stack,$parstack)=@_;
- $current_token=~s/\\ /\\char92 /g;
- $current_token=~s/\^/\\char94 /g;
- $current_token=~s/\~/\\char126 /g;
- $current_token=~s/(&[^a-z\#])/\\$1/g;
- $current_token=~s/([^&])\#/$1\\#/g;
- $current_token=~s/(\$|_|{|})/\\$1/g;
- $current_token=~s/\\char92 /\\texttt{\\char92}/g;
- $current_token=~s/>/\$>\$/g; #more
- $current_token=~s/\$<\$/g; #less
- if ($current_token=~m/\d%/) {$current_token =~ s/(\d)%/$1\\%/g;} #percent after digit
- if ($current_token=~m/\s%/) {$current_token =~ s/(\s)%/$1\\%/g;} #persent after space
+ my ($current_token,$stack,$parstack,$where)=@_;
+ if ($where eq 'header') {
+ $current_token =~ s/(\\|_|\^)/ /g;
+ $current_token =~ s/(\$|%|\#|&|\{|\})/\\$1/g;
+ } else {
+ $current_token=~s/\\ /\\char92 /g;
+ $current_token=~s/\^/\\char94 /g;
+ $current_token=~s/\~/\\char126 /g;
+ $current_token=~s/(&[^A-Za-z\#])/\\$1/g;
+ $current_token=~s/([^&])\#/$1\\#/g;
+ $current_token=~s/(\$|_|{|})/\\$1/g;
+ $current_token=~s/\\char92 /\\texttt{\\char92}/g;
+ $current_token=~s/(>|<)/\$$1\$/g; #more or less
+ if ($current_token=~m/\d%/) {$current_token =~ s/(\d)%/$1\\%/g;} #percent after digit
+ if ($current_token=~m/\s%/) {$current_token =~ s/(\s)%/$1\\%/g;} #persent after space
+ }
return $current_token;
}
@@ -695,7 +500,8 @@ sub inner_xmlparse {
if ($metamode<1) {
my $text=$token->[1];
if ($token->[0] eq 'C' && $target eq 'tex') {
- $text = '%'.$text."\n";
+ $text = '';
+# $text = '%'.$text."\n";
}
$result.=$text;
}
@@ -724,10 +530,10 @@ sub inner_xmlparse {
while ($token->[1] ne $$stack['-1'] && ($#$stack > -1)) {
my $lasttag=$$stack[-1];
if ($token->[1] =~ /^$lasttag$/i) {
- &Apache::lonxml::warning('Using tag </'.$token->[1].'> as end tag to <'.$$stack[-1].'>');
+ &Apache::lonxml::warning('Using tag </'.$token->[1].'> on line '.$token->[3].' as end tag to <'.$$stack[-1].'>');
last;
} else {
- &Apache::lonxml::warning('Found tag </'.$token->[1].'> when looking for </'.$$stack[-1].'> in file');
+ &Apache::lonxml::warning('Found tag </'.$token->[1].'> on line '.$token->[3].' when looking for </'.$$stack[-1].'> in file');
&end_tag($stack,$parstack,$token);
}
}
@@ -754,9 +560,10 @@ sub inner_xmlparse {
}
}
if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) {
- if ($target eq 'tex') {
- $result=&latex_special_symbols($result,$stack,$parstack);
- }
+ #Style file definitions should be correct
+ if ($target eq 'tex' && ($Apache::lonxml::usestyle)) {
+ $result=&latex_special_symbols($result,$stack,$parstack);
+ }
}
# Encode any high ASCII characters
@@ -799,6 +606,8 @@ sub callsub {
my $sub1;
no strict 'refs';
my $tag=$token->[1];
+# get utterly rid of extended html tags
+ if ($tag=~/^x\-/i) { return ''; }
my $space=$Apache::lonxml::alltags{$tag}[-1];
if (!$space) {
$tag=~tr/A-Z/a-z/;
@@ -913,6 +722,7 @@ sub init_safespace {
$safeeval->permit("sort");
$safeeval->deny(":base_io");
$safehole->wrap(\&Apache::scripttag::xmlparse,$safeeval,'&xmlparse');
+ $safehole->wrap(\&Apache::outputtags::multipart,$safeeval,'&multipart');
$safehole->wrap(\&Apache::lonnet::EXT,$safeeval,'&EXT');
$safehole->wrap(\&Math::Cephes::asin,$safeeval,'&asin');
@@ -994,6 +804,7 @@ sub init_safespace {
my ($symb,$courseid,$domain,$name) = &Apache::lonxml::whichuser();
$rndseed=&Apache::lonnet::rndseed($symb,$courseid,$domain,$name);
$safeinit .= ';$external::randomseed='.$rndseed.';';
+ &Apache::lonxml::debug("Setting rndseed to $rndseed");
&Apache::run::run($safeinit,$safeeval);
}
@@ -1001,7 +812,7 @@ 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) {
+ if ($default eq -1) {
&Apache::lonxml::error("Unable to find default_homework.lcpm");
} else {
&Apache::run::run($default,$safeeval);
@@ -1093,18 +904,23 @@ sub get_all_text_unbalanced {
}
sub increment_counter {
- $Apache::lonxml::counter++;
+ my ($increment) = @_;
+ if (defined($increment) && $increment gt 0) {
+ $Apache::lonxml::counter+=$increment;
+ } else {
+ $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_changed=0;
+ } else {
$Apache::lonxml::counter=1;
- &store_counter();
+ $Apache::lonxml::counter_changed=1;
}
- $Apache::lonxml::counter_changed=0;
}
sub store_counter {
@@ -1145,11 +961,11 @@ sub get_all_text {
}
}
}
+ if (($depth >=0) && ($#$pars == 0) ) { $top_empty=1; }
if (($depth >=0) && ($#$pars > 0) ) {
pop(@$pars);
pop(@Apache::lonxml::pwd);
}
- if (($depth >=0) && ($#$pars == 0) ) { &debug("here4");$top_empty=1; }
}
if ($top_empty && $depth >= 0) {
#never found the end tag ran out of text, throw error send back blank
@@ -1211,7 +1027,7 @@ sub parstring {
foreach (@{$token->[3]}) {
unless ($_=~/\W/) {
my $val=$token->[2]->{$_};
- $val =~ s/([\%\@\\\"])/\\$1/g;
+ $val =~ s/([\%\@\\\"\'])/\\$1/g;
#if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
$temp .= "my \$$_=\"$val\";"
}
@@ -1265,7 +1081,7 @@ sub afterburn {
$matchthis=~s/\_+/\\s\+/g;
$result=~s/($matchthis)/\$1\<\/a\>/s;
$result.=(<<"ENDSCRIPT");
-
ENDSCRIPT
@@ -1306,6 +1122,13 @@ sub inserteditinfo {
my ($result,$filecontents)=@_;
$filecontents = &HTML::Entities::encode($filecontents);
# my $editheader='Edit below
';
+ my $xml_help = ''.
+ &Apache::loncommon::help_open_topic("Greek_Symbols",'Greek Symbols',
+ undef,undef,600)
+ .' | '.
+ &Apache::loncommon::help_open_topic("Other_Symbols",'Other Symbols',
+ undef,undef,600)
+ .' |
';
my $buttons=(<
@@ -1316,6 +1139,7 @@ BUTTONS