--- loncom/xml/lonxml.pm 2002/12/06 17:56:53 1.218
+++ loncom/xml/lonxml.pm 2003/04/03 22:34:26 1.246
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# XML Parser Module
#
-# $Id: lonxml.pm,v 1.218 2002/12/06 17:56:53 matthew Exp $
+# $Id: lonxml.pm,v 1.246 2003/04/03 22:34:26 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
@@ -192,10 +191,18 @@ sub xmlend {
my $idx;
for ($idx=1;$idx<=$contrib{'version'};$idx++) {
my $hidden=($contrib{'hidden'}=~/\.$idx\./);
- unless (($hidden) && (!$seeid)) {
+ my $deleted=($contrib{'deleted'}=~/\.$idx\./);
+ unless ((($hidden) && (!$seeid)) || ($deleted)) {
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.'';
@@ -226,8 +233,10 @@ sub xmlend {
} else {
$sender.=' Hide';
- }
- }
+ }
+ $sender.=' Delete';
+ }
} else {
if ($screenname) {
$sender=''.$screenname.'';
@@ -246,7 +255,7 @@ sub xmlend {
}
if ($discussiononly) {
$discussion.=(<
+
ENDDISCUSS
$discussion.=&Apache::lonfeedback::generate_preview_button();
@@ -268,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 $nothing='';
- 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.');';
- 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=window.open("$nothing","LONCAPAmenu","",false);
- 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()');
- 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=window.open("$nothing","LONCAPAmenu","",false);
- 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)',
- 2000);
-
- }
-
-// END LON-CAPA Internal
-
-ENDREGTHIS
-
- } else {
- $result = (<
-// BEGIN LON-CAPA Internal
-
- function LONCAPAreg() {
- menu=window.open("$nothing","LONCAPAmenu","",false);
- $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) {
@@ -602,6 +398,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?
#
@@ -667,18 +467,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;
}
@@ -693,7 +497,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;
}
@@ -722,10 +527,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);
}
}
@@ -771,7 +576,7 @@ sub inner_xmlparse {
if ($token->[0] eq 'E') {
&end_tag($stack,$parstack,$token);
}
- }
+ }
if ($#$pars > -1) {
pop @$pars;
pop @Apache::lonxml::pwd;
@@ -797,6 +602,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/;
@@ -813,13 +620,13 @@ sub callsub {
}
if (!$deleted) {
if ($space) {
- &Apache::lonxml::debug("Calling sub $sub in $space $metamode");
+ #&Apache::lonxml::debug("Calling sub $sub in $space $metamode");
$sub1="$space\:\:$sub";
($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
$parstack,$parser,$safeeval,
$style);
} else {
- &Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
+ #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode");
if ($metamode <1) {
if (defined($token->[4]) && ($metamode < 1)) {
$currentstring = $token->[4];
@@ -831,7 +638,7 @@ sub callsub {
# &Apache::lonxml::debug("nodefalt:$nodefault:");
if ($currentstring eq '' && $nodefault eq '') {
if ($target eq 'edit') {
- &Apache::lonxml::debug("doing default edit for $token->[1]");
+ #&Apache::lonxml::debug("doing default edit for $token->[1]");
if ($token->[0] eq 'S') {
$currentstring = &Apache::edit::tag_start($target,$token);
} elsif ($token->[0] eq 'E') {
@@ -999,7 +806,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);
@@ -1098,7 +905,7 @@ sub increment_counter {
sub init_counter {
if (defined($ENV{'form.counter'})) {
$Apache::lonxml::counter=$ENV{'form.counter'};
- } elsif (not defined($Apache::lonxml::counter)) {
+ } else {
$Apache::lonxml::counter=1;
&store_counter();
}
@@ -1113,7 +920,9 @@ sub store_counter {
sub get_all_text {
my($tag,$pars)= @_;
&Apache::lonxml::debug("Got a ".ref($pars));
+ my $gotfullstack=1;
if (ref($pars) ne 'ARRAY') {
+ $gotfullstack=0;
$pars=[$pars];
}
my $depth=0;
@@ -1122,7 +931,8 @@ sub get_all_text {
if ( $tag =~ m:^/: ) {
my $tag=substr($tag,1);
#&Apache::lonxml::debug("have:$tag:");
- while (($depth >=0) && ($#$pars > -1)) {
+ my $top_empty=0;
+ while (($depth >=0) && ($#$pars > -1) && (!$top_empty)) {
while (($depth >=0) && ($token = $$pars[-1]->get_token)) {
#&Apache::lonxml::debug("e token:$token->[0]:$depth:$token->[1]:".$#$pars.":".$#Apache::lonxml::pwd);
if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) {
@@ -1140,11 +950,21 @@ sub get_all_text {
}
}
}
+ if (($depth >=0) && ($#$pars == 0) ) { $top_empty=1; }
if (($depth >=0) && ($#$pars > 0) ) {
pop(@$pars);
pop(@Apache::lonxml::pwd);
}
}
+ if ($top_empty && $depth >= 0) {
+ #never found the end tag ran out of text, throw error send back blank
+ &error('Never found end tag for <'.$tag.'>');
+ if ($gotfullstack) {
+ my $newstring=''.$tag.'>'.$result;
+ &Apache::lonxml::newparser($pars,\$newstring);
+ }
+ $result='';
+ }
} else {
while ($#$pars > -1) {
while ($token = $$pars[-1]->get_token) {
@@ -1196,7 +1016,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\";"
}
@@ -1250,7 +1070,7 @@ sub afterburn {
$matchthis=~s/\_+/\\s\+/g;
$result=~s/($matchthis)/\$1\<\/a\>/s;
$result.=(<<"ENDSCRIPT");
-
ENDSCRIPT
@@ -1291,6 +1111,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=(<
@@ -1301,6 +1128,7 @@ BUTTONS