--- 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
\n";
+ #&Apache::lonxml::debug("Calling sub $sub in $space
\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
\n";
+ #&Apache::lonxml::debug("NOT Calling sub $sub in $space
\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]."
\n";
+ }
+}
+sub error {
+ print "ERROR:".$_[0]."
\n";
+}
+sub warning {
+ if ($Apache::lonxml::debug eq 1) {
+ print "WARNING:".$_[0]."
\n";
+ }
+}
+
1;
__END__