--- loncom/xml/lonxml.pm	2000/09/19 19:10:01	1.21
+++ loncom/xml/lonxml.pm	2000/10/05 19:30:14	1.23
@@ -26,12 +26,15 @@ use Apache::run;
 use Apache::londefdef;
 use Apache::scripttag;
 #==================================================   Main subroutine: xmlparse  
-
+@Apache::lonxml::pwd=();
 sub xmlparse {
 
  my ($target,$content_file_string,$safeinit,%style_for_target) = @_;
  my @pars = ();
- push (@pars,HTML::TokeParser->new(\$content_file_string));
+ @Apache::lonxml::pwd=();
+ my $pwd=$ENV{'request.filename'};
+ $pwd =~ s:/[^/]*$::;
+ &newparser(\@pars,\$content_file_string,$pwd);
  my $currentstring = '';
  my $finaloutput = ''; 
  my $newarg = '';
@@ -97,6 +100,7 @@ sub xmlparse {
      if ($token->[0] eq 'E') { pop @stack;pop @parstack;&decreasedepth($token);}
    }
    pop @pars;
+   pop @Apache::lonxml::pwd;
  }
  return $finaloutput;
 }
@@ -107,7 +111,7 @@ sub recurse {
   my @innerparstack = ();
   my ($newarg,$target,$safeeval,$style_for_target,@parstack) = @_;
   my @pat = ();
-  push (@pat,HTML::TokeParser->new(\$newarg));
+  &newparser(\@pat,\$newarg);
   my $tokenpat;
   my $partstring = '';
   my $output='';
@@ -155,6 +159,7 @@ sub recurse {
 				 &decreasedepth($tokenpat);}
     }
     pop @pat;
+    pop @Apache::lonxml::pwd;
   }
   return $output;
 }
@@ -165,13 +170,13 @@ sub callsub {
   {
     no strict 'refs';
     if (my $space=$Apache::lonxml::alltags{$token->[1]}) {
-      #print "Calling sub $sub in $space<br>\n";
+      #&Apache::lonxml::debug("Calling sub $sub in $space<br>\n");
       $sub="$space\:\:$sub";
       $Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
       $currentstring = &$sub($target,$token,$parstack,$parser,
 			     $safeeval,$style);
     } else {
-      #print "NOT Calling sub $sub<br>\n";
+      #&Apache::lonxml::debug("NOT Calling sub $sub in $space<br>\n");
       if (defined($token->[4])) {
 	$currentstring = $token->[4];
       } else {
@@ -230,6 +235,17 @@ sub get_all_text {
  return $result
 }
 
+sub newparser {
+  my ($parser,$contentref,$dir) = @_;
+  push (@$parser,HTML::TokeParser->new($contentref));
+  if ( $dir eq '' ) {
+    push (@Apache::lonxml::pwd, $Apache::lonxml::pwd[$#Apache::lonxml::pwd]);
+  } else {
+    push (@Apache::lonxml::pwd, $dir);
+  } 
+#  &Apache::lonxml::debug("pwd:$#Apache::lonxml::pwd");
+#  &Apache::lonxml::debug("pwd:$Apache::lonxml::pwd[$#Apache::lonxml::pwd]");
+}
 
 sub parstring {
   my ($token) = @_;
@@ -241,6 +257,22 @@ sub parstring {
   } @{$token->[3]};
   return $temp;
 }
+
+$Apache::lonxml::debug=0;
+sub debug {
+  if ($Apache::lonxml::debug eq 1) {
+    print "DEBUG:".$_[0]."<br>\n";
+  }
+}
+sub error {
+  print "ERROR:".$_[0]."<br>\n";
+}
+sub warning {
+  if ($Apache::lonxml::debug eq 1) {
+    print "WARNING:".$_[0]."<br>\n";
+  }
+}
+
 1;
 __END__