--- loncom/xml/lonxml.pm 2001/06/16 15:08:09 1.94
+++ loncom/xml/lonxml.pm 2001/07/05 15:53:09 1.100
@@ -11,6 +11,7 @@
# 5/27 H. K. Ng
# 6/2,6/3,6/8,6/9 Gerd Kortemeyer
# 6/12,6/13 H. K. Ng
+# 6/16 Gerd Kortemeyer
package Apache::lonxml;
use vars
@@ -69,9 +70,12 @@ $evaluate = 1;
# data structure for eidt mode, determines what tags can go into what other tags
%insertlist=();
-#stores the list of active tag namespaces
+# stores the list of active tag namespaces
@namespace=();
+# has the dynamic menu been updated to know about this resource
+$Apache::lonxml::registered=0;
+
sub xmlbegin {
my $output='';
if ($ENV{'browser.mathml'}) {
@@ -101,7 +105,9 @@ sub fontsettings() {
}
sub registerurl {
- if ($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) {
+ my $forcereg=shift;
+ if ($Apache::lonxml::registered) { return ''; }
+ if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
my $hwkadd='';
if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) {
@@ -152,8 +158,7 @@ ENDPARM
menu.switchbutton
(9,2,'vbkm.gif','view','bookmark','edit_bookmarks()');
menu.switchbutton
- (9,3,'anot.gif','anno-','tations','gopost("/adm/annotations",currentURL)');
-
+ (9,3,'anot.gif','anno-','tations','annotate()');
$hwkadd
}
@@ -225,27 +230,8 @@ sub printalltags {
sub xmlparse {
my ($target,$content_file_string,$safeinit,%style_for_target) = @_;
- if ($target eq 'meta') {
- $Apache::lonxml::redirection = 0;
- $Apache::lonxml::metamode = 1;
- $Apache::lonxml::evaluate = 1;
- $Apache::lonxml::import = 0;
- } elsif ($target eq 'grade') {
- &startredirection;
- $Apache::lonxml::metamode = 0;
- $Apache::lonxml::evaluate = 1;
- $Apache::lonxml::import = 1;
- } elsif ($target eq 'modified') {
- $Apache::lonxml::redirection = 0;
- $Apache::lonxml::metamode = 0;
- $Apache::lonxml::evaluate = 0;
- $Apache::lonxml::import = 0;
- } else {
- $Apache::lonxml::redirection = 0;
- $Apache::lonxml::metamode = 0;
- $Apache::lonxml::evaluate = 1;
- $Apache::lonxml::import = 1;
- }
+
+ &setup_globals($target);
#&printalltags();
my @pars = ();
@Apache::lonxml::pwd=();
@@ -297,7 +283,7 @@ sub xmlparse {
#clear out any tags that didn't end
while ($token->[1] ne $stack[$#stack] && ($#stack > -1)) {
&Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']");
- pop @stack;pop @parstack;&decreasedepth($token);
+ &end_tag(\@stack,\@parstack,$token);
}
if (exists $style_for_target{'/'."$token->[1]"}) {
@@ -334,7 +320,7 @@ sub xmlparse {
$result = '';
}
if ($token->[0] eq 'E') {
- pop @stack;pop @parstack;&decreasedepth($token);
+ &end_tag(\@stack,\@parstack,$token);
}
}
pop @pars;
@@ -382,7 +368,7 @@ sub recurse {
while ($tokenpat->[1] ne $innerstack[$#innerstack]
&& ($#innerstack > -1)) {
&Apache::lonxml::warning("Unbalanced tags in resource $innerstack['-1']");
- pop @innerstack;pop @innerparstack;&decreasedepth($tokenpat);
+ &end_tag(\@innerstack,\@innerparstack,$tokenpat);
}
$partstring = &callsub("end_$tokenpat->[1]", $target, $tokenpat,
\@innerstack, \@innerparstack, \@pat,
@@ -432,38 +418,47 @@ sub callsub {
$sub=~tr/A-Z/a-z/;
$space=$Apache::lonxml::alltags{$tag}
}
- if ($space) {
- #&Apache::lonxml::debug("Calling sub $sub in $space $metamode
\n");
- $sub1="$space\:\:$sub";
- $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
- ($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
- $parstack,$parser,$safeeval,
- $style);
- } else {
- #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode
\n");
- if ($metamode <1) {
- if (defined($token->[4]) && ($metamode < 1)) {
- $currentstring = $token->[4];
- } else {
- $currentstring = $token->[2];
+
+ my $deleted=0;
+ $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
+ if (($token->[0] eq 'S') && ($target eq 'modified')) {
+ $deleted=&Apache::edit::handle_delete($space,$target,$token,$tagstack,
+ $parstack,$parser,$safeeval,
+ $style);
+ }
+ if (!$deleted) {
+ if ($space) {
+ #&Apache::lonxml::debug("Calling sub $sub in $space $metamode
\n");
+ $sub1="$space\:\:$sub";
+ ($currentstring,$nodefault) = &$sub1($target,$token,$tagstack,
+ $parstack,$parser,$safeeval,
+ $style);
+ } else {
+ #&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode
\n");
+ if ($metamode <1) {
+ if (defined($token->[4]) && ($metamode < 1)) {
+ $currentstring = $token->[4];
+ } else {
+ $currentstring = $token->[2];
+ }
}
}
- }
-# &Apache::lonxml::debug("nodefalt:$nodefault:");
- if ($currentstring eq '' && $nodefault eq '') {
- if ($target eq 'edit') {
- &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') {
- $currentstring = &Apache::edit::tag_end($target,$token);
- }
- } elsif ($target eq 'modified') {
- if ($token->[0] eq 'S') {
- $currentstring = $token->[4];
- $currentstring.=&Apache::edit::handle_insert();
- } else {
- $currentstring = $token->[2];
+ # &Apache::lonxml::debug("nodefalt:$nodefault:");
+ if ($currentstring eq '' && $nodefault eq '') {
+ if ($target eq 'edit') {
+ &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') {
+ $currentstring = &Apache::edit::tag_end($target,$token);
+ }
+ } elsif ($target eq 'modified') {
+ if ($token->[0] eq 'S') {
+ $currentstring = $token->[4];
+ $currentstring.=&Apache::edit::handle_insert();
+ } else {
+ $currentstring = $token->[2];
+ }
}
}
}
@@ -472,6 +467,37 @@ sub callsub {
return $currentstring;
}
+sub setup_globals {
+ my ($target)=@_;
+ $Apache::lonxml::registered = 0;
+ if ($target eq 'meta') {
+ $Apache::lonxml::redirection = 0;
+ $Apache::lonxml::metamode = 1;
+ $Apache::lonxml::evaluate = 1;
+ $Apache::lonxml::import = 0;
+ } elsif ($target eq 'grade') {
+ &startredirection;
+ $Apache::lonxml::metamode = 0;
+ $Apache::lonxml::evaluate = 1;
+ $Apache::lonxml::import = 1;
+ } elsif ($target eq 'modified') {
+ $Apache::lonxml::redirection = 0;
+ $Apache::lonxml::metamode = 0;
+ $Apache::lonxml::evaluate = 0;
+ $Apache::lonxml::import = 0;
+ } elsif ($target eq 'edit') {
+ $Apache::lonxml::redirection = 0;
+ $Apache::lonxml::metamode = 0;
+ $Apache::lonxml::evaluate = 0;
+ $Apache::lonxml::import = 0;
+ } else {
+ $Apache::lonxml::redirection = 0;
+ $Apache::lonxml::metamode = 0;
+ $Apache::lonxml::evaluate = 1;
+ $Apache::lonxml::import = 1;
+ }
+}
+
sub init_safespace {
my ($target,$safeeval,$safehole,$safeinit) = @_;
$safeeval->permit("entereval");
@@ -542,6 +568,13 @@ sub endredirection {
pop @Apache::lonxml::outputstack;
}
+sub end_tag {
+ my ($tagstack,$parstack,$token)=@_;
+ pop(@$tagstack);
+ pop(@$parstack);
+ &decreasedepth($token);
+}
+
sub initdepth {
@Apache::lonxml::depthcounter=();
$Apache::lonxml::depth=-1;
@@ -809,7 +842,7 @@ ENDNOTFOUND
sub debug {
if ($Apache::lonxml::debug eq 1) {
- print "DEBUG:".$_[0]."
\n";
+ print("DEBUG:".$_[0]."
\n");
}
}
@@ -883,6 +916,11 @@ sub register_insert {
$tagnum++;
}
}
+
+sub description {
+ my ($token)=@_;
+ return $insertlist{$insertlist{"$token->[1].num"}.'.description'};
+}
1;
__END__