--- loncom/xml/lonxml.pm	2001/01/03 00:13:22	1.42
+++ loncom/xml/lonxml.pm	2001/01/06 16:52:34	1.47
@@ -3,6 +3,7 @@
 #
 # last modified 06/26/00 by Alexander Sakharuk
 # 11/6 Gerd Kortemeyer
+# 6/1/1 Gerd Kortemeyer
 
 package Apache::lonxml; 
 use vars 
@@ -12,6 +13,7 @@ use HTML::TokeParser;
 use Safe;
 use Safe::Hole;
 use Opcode;
+use Apache::Constants qw(:common);
 
 sub register {
   my $space;
@@ -42,6 +44,12 @@ sub xmlparse {
  if ($target eq 'meta') {
    $Apache::lonxml::textredirection = 0;
    $Apache::lonxml::on_offimport = 1;
+ } elsif ($target eq 'grade') {
+   $Apache::lonxml::textredirection = 0;
+   $Apache::lonxml::on_offimport = 0;
+ } else {
+   $Apache::lonxml::textredirection = 1;
+   $Apache::lonxml::on_offimport = 0;
  }
  my @pars = ();
  @Apache::lonxml::pwd=();
@@ -104,7 +112,10 @@ sub xmlparse {
        #if ($target eq 'meta') {$Apache::lonxml::textredirection = 0;}
        #clear out any tags that didn't end
        while ($token->[1] ne $stack[$#stack] 
-	      && ($#stack > -1)) {pop @stack;pop @parstack;&decreasedepth($token);}
+	      && ($#stack > -1)) {
+	 &Apache::lonxml::error("Unbalanced tags in resource $stack['-1']");   
+	 pop @stack;pop @parstack;&decreasedepth($token);
+       }
        
        if (exists $style_for_target{'/'."$token->[1]"}) {
 
@@ -175,8 +186,10 @@ sub recurse {
       } elsif ($tokenpat->[0] eq 'E') {
 	#clear out any tags that didn't end
 	while ($tokenpat->[1] ne $innerstack[$#innerstack] 
-	       && ($#innerstack > -1)) {pop @innerstack;pop @innerparstack;
-					&decreasedepth($tokenpat);}
+	       && ($#innerstack > -1)) {
+	  &Apache::lonxml::error("Unbalanced tags in resource $innerstack['-1']");
+	  pop @innerstack;pop @innerparstack;&decreasedepth($tokenpat);
+	}
 	$partstring = &callsub("end_$tokenpat->[1]",
 			       $target, $tokenpat, \@innerparstack,
 			       \@pat, $safeeval, $style_for_target);
@@ -249,6 +262,7 @@ sub increasedepth {
   }
   my $curdepth=join('_',@Apache::lonxml::depthcounter);
   &Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n");
+#print "<br>s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n";
 }
 
 sub decreasedepth {
@@ -258,8 +272,13 @@ sub decreasedepth {
     $#Apache::lonxml::depthcounter--;
     $Apache::lonxml::olddepth=$Apache::lonxml::depth+1;
   }
+  if (  $Apache::lonxml::depth < -1) {
+    &Apache::lonxml::error("Unbalanced tags in resource");   
+    $Apache::lonxml::depth='-1';
+  }
   my $curdepth=join('_',@Apache::lonxml::depthcounter);
   &Apache::lonxml::debug("e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n");
+#print "<br>e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n";
 }
 
 sub get_all_text {
@@ -325,9 +344,9 @@ sub writeallows {
 
 sub handler {
   my $request=shift;
-
+  
   my $target='web';
-  $Apache::lonxml::debug=1;
+#  $Apache::lonxml::debug=1;
   if ($ENV{'browser.mathml'}) {
     $request->content_type('text/xml');
   } else {
@@ -344,7 +363,7 @@ sub handler {
 #  &Apache::lonhomework::send_header($request);
   $request->send_http_header;
 
-  return 'OK' if $request->header_only;
+  return OK if $request->header_only;
 
   $request->print(&Apache::lontexconvert::header());
 
@@ -359,7 +378,7 @@ sub handler {
   $request->print('</body>');
   $request->print(&Apache::lontexconvert::footer());
   writeallows($request->uri);
-  return 'OK';
+  return OK;
 }
  
 $Apache::lonxml::debug=0;
@@ -369,7 +388,7 @@ sub debug {
   }
 }
 sub error {
-  print "ERROR:".$_[0]."<br>\n";
+#  print "ERROR:".$_[0]."<br>\n";
 }
 sub warning {
   if ($Apache::lonxml::debug eq 1) {