--- loncom/xml/lonxml.pm 2001/06/16 18:34:31 1.96 +++ loncom/xml/lonxml.pm 2001/07/05 15:53:09 1.100 @@ -70,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'}) { @@ -102,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'})) { @@ -278,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]"}) { @@ -315,7 +320,7 @@ sub xmlparse { $result = ''; } if ($token->[0] eq 'E') { - pop @stack;pop @parstack;&decreasedepth($token); + &end_tag(\@stack,\@parstack,$token); } } pop @pars; @@ -363,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, @@ -413,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]; + } } } } @@ -455,6 +469,7 @@ sub callsub { sub setup_globals { my ($target)=@_; + $Apache::lonxml::registered = 0; if ($target eq 'meta') { $Apache::lonxml::redirection = 0; $Apache::lonxml::metamode = 1; @@ -553,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; @@ -894,6 +916,11 @@ sub register_insert { $tagnum++; } } + +sub description { + my ($token)=@_; + return $insertlist{$insertlist{"$token->[1].num"}.'.description'}; +} 1; __END__