--- loncom/xml/lonxml.pm 2001/06/12 22:39:36 1.92
+++ loncom/xml/lonxml.pm 2001/07/03 20:58:27 1.99
@@ -10,6 +10,8 @@
# 5/26 Gerd Kortemeyer
# 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
@@ -68,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'}) {
@@ -100,6 +105,7 @@ sub fontsettings() {
}
sub registerurl {
+ if ($Apache::lonxml::registered) { return ''; }
if ($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) {
my $hwkadd='';
if ($ENV{'REQUEST_URI'}=~/\.(problem|exam|quiz|assess|survey|form)$/) {
@@ -146,6 +152,12 @@ ENDPARM
(2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)');
menu.switchbutton
(2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)');
+ menu.switchbutton
+ (9,1,'sbkm.gif','set','bookmark','set_bookmark()');
+ menu.switchbutton
+ (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()');
+ menu.switchbutton
+ (9,3,'anot.gif','anno-','tations','annotate()');
$hwkadd
}
@@ -158,7 +170,8 @@ ENDPARM
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(2,1);clearbut(2,3);clearbut(8,1);clearbut(8,2);clearbut(8,3);'+
+ 'clearbut(9,1);clearbut(9,2);clearbut(9,3);',
2000);
}
@@ -216,27 +229,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=();
@@ -288,7 +282,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]"}) {
@@ -325,7 +319,7 @@ sub xmlparse {
$result = '';
}
if ($token->[0] eq 'E') {
- pop @stack;pop @parstack;&decreasedepth($token);
+ &end_tag(\@stack,\@parstack,$token);
}
}
pop @pars;
@@ -373,7 +367,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,
@@ -423,38 +417,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];
+ }
}
}
}
@@ -463,6 +466,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");
@@ -501,7 +535,7 @@ sub init_safespace {
$safehole->wrap(\&Math::Random::random_noncentral_f,$safeeval,'&math_random_noncentral_f');
$safehole->wrap(\&Math::Random::random_normal,$safeeval,'&math_random_normal');
$safehole->wrap(\&Math::Random::random_permutation,$safeeval,'&math_random_permutation');
-# $safehole->wrap(\&Math::Random::random_permuted_index,$safeeval,'&math_random_permuted_index');
+ $safehole->wrap(\&Math::Random::random_permuted_index,$safeeval,'&math_random_permuted_index');
$safehole->wrap(\&Math::Random::random_uniform,$safeeval,'&math_random_uniform');
$safehole->wrap(\&Math::Random::random_poisson,$safeeval,'&math_random_poisson');
$safehole->wrap(\&Math::Random::random_uniform_integer,$safeeval,'&math_random_uniform_integer');
@@ -533,6 +567,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;
@@ -800,7 +841,7 @@ ENDNOTFOUND
sub debug {
if ($Apache::lonxml::debug eq 1) {
- print "DEBUG:".$_[0]."
\n";
+ print("DEBUG:".$_[0]."
\n");
}
}
@@ -874,6 +915,11 @@ sub register_insert {
$tagnum++;
}
}
+
+sub description {
+ my ($token)=@_;
+ return $insertlist{$insertlist{"$token->[1].num"}.'.description'};
+}
1;
__END__