--- loncom/xml/lonxml.pm 2000/12/04 22:10:23 1.41
+++ loncom/xml/lonxml.pm 2001/02/13 00:15:49 1.51
@@ -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;
@@ -22,7 +24,13 @@ sub register {
$Apache::lonxml::alltags{$temptag}=$space;
}
}
-
+
+sub printalltags {
+ my $temp;
+ foreach $temp (sort keys %Apache::lonxml::alltags) {
+ &Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}");
+ }
+}
use Apache::style;
use Apache::lontexconvert;
use Apache::run;
@@ -42,7 +50,14 @@ 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;
}
+ #&printalltags();
my @pars = ();
@Apache::lonxml::pwd=();
my $pwd=$ENV{'request.filename'};
@@ -104,7 +119,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::warning("Unbalanced tags in resource $stack['-1']");
+ pop @stack;pop @parstack;&decreasedepth($token);
+ }
if (exists $style_for_target{'/'."$token->[1]"}) {
@@ -175,8 +193,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::warning("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);
@@ -247,8 +267,9 @@ sub increasedepth {
if ($Apache::lonxml::depthcounter[$Apache::lonxml::depth]==1) {
$Apache::lonxml::olddepth=$Apache::lonxml::depth;
}
-# my $curdepth=join('_',@Apache::lonxml::depthcounter);
-# print "
s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]
\n";
+ my $curdepth=join('_',@Apache::lonxml::depthcounter);
+ &Apache::lonxml::debug("s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n");
+#print "
s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $curdepth : $token->[1]\n";
}
sub decreasedepth {
@@ -258,8 +279,13 @@ sub decreasedepth {
$#Apache::lonxml::depthcounter--;
$Apache::lonxml::olddepth=$Apache::lonxml::depth+1;
}
-# my $curdepth=join('_',@Apache::lonxml::depthcounter);
-# print "
e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth
\n";
+ if ( $Apache::lonxml::depth < -1) {
+ &Apache::lonxml::warning("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 "
e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1] : $curdepth\n";
}
sub get_all_text {
@@ -269,8 +295,9 @@ sub get_all_text {
my $token;
my $result='';
my $tag=substr($tag,1); #strip the / off the tag
-# &Apache::lonxml::debug("have:$tag:");
+ #&Apache::lonxml::debug("have:$tag:");
while (($depth >=0) && ($token = $pars->get_token)) {
+ #&Apache::lonxml::debug("token:$token->[0]:$depth:$token->[1]");
if ($token->[0] eq 'T') {
$result.=$token->[1];
} elsif ($token->[0] eq 'S') {
@@ -284,6 +311,7 @@ sub get_all_text {
}
}
}
+# &Apache::lonxml::debug("Exit:$result:");
return $result
}
@@ -304,7 +332,10 @@ sub parstring {
my $temp='';
map {
unless ($_=~/\W/) {
- $temp .= "my \$$_=\"$token->[2]->{$_}\";"
+ my $val=$token->[2]->{$_};
+ $val =~ s/([\%\@\\])/\$1/;
+ #if ($val =~ m/^[\%\@]/) { $val="\\".$val; }
+ $temp .= "my \$$_=\"$val\";"
}
} @{$token->[3]};
return $temp;
@@ -323,9 +354,9 @@ sub writeallows {
sub handler {
my $request=shift;
-
+
my $target='web';
- $Apache::lonxml::debug=1;
+ $Apache::lonxml::debug=0;
if ($ENV{'browser.mathml'}) {
$request->content_type('text/xml');
} else {
@@ -342,22 +373,29 @@ 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());
$request->print('