--- loncom/xml/lonxml.pm 2000/11/06 14:32:35 1.32
+++ loncom/xml/lonxml.pm 2000/11/07 23:41:27 1.37
@@ -2,9 +2,11 @@
# XML Parser Module
#
# last modified 06/26/00 by Alexander Sakharuk
+# 11/6 Gerd Kortemeyer
package Apache::lonxml;
-
+use vars
+qw(@pwd $outputstack $redirection $textredirection $on_offimport @extlinks);
use strict;
use HTML::TokeParser;
use Safe;
@@ -26,11 +28,12 @@ use Apache::run;
use Apache::londefdef;
use Apache::scripttag;
#================================================== Main subroutine: xmlparse
-@Apache::lonxml::pwd=();
-$Apache::lonxml::outputstack = '';
-$Apache::lonxml::redirection = 1;
-$Apache::lonxml::textredirection = 1;
-$Apache::lonxml::on_offimport = 0;
+@pwd=();
+$outputstack = '';
+$redirection = 1;
+$textredirection = 1;
+$on_offimport = 0;
+@extlinks=();
sub xmlparse {
@@ -236,22 +239,24 @@ sub initdepth {
sub increasedepth {
my ($token) = @_;
- if ($Apache::lonxml::depth<$Apache::lonxml::olddepth-1) {
- $#Apache::lonxml::depthcounter--;
- $Apache::lonxml::olddepth=$Apache::lonxml::depth;
- }
$Apache::lonxml::depth++;
-# print "
s $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1]
\n";
$Apache::lonxml::depthcounter[$Apache::lonxml::depth]++;
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";
}
sub decreasedepth {
my ($token) = @_;
$Apache::lonxml::depth--;
-# print "
e $Apache::lonxml::depth : $Apache::lonxml::olddepth : $token->[1]
\n";
+ if ($Apache::lonxml::depth<$Apache::lonxml::olddepth-1) {
+ $#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";
}
sub get_all_text {
@@ -271,7 +276,9 @@ sub get_all_text {
} elsif ($token->[0] eq 'E') {
if ( $token->[1] eq $tag) { $depth--; }
#skip sending back the last end tag
- if ($depth > -1) { $result.=$token->[2]; }
+ if ($depth > -1) { $result.=$token->[2]; } else {
+ $pars->unget_token($token);
+ }
}
}
return $result
@@ -293,13 +300,24 @@ sub parstring {
my ($token) = @_;
my $temp='';
map {
- if ($_=~/\w+/) {
+ unless ($_=~/\W/) {
$temp .= "my \$$_=\"$token->[2]->{$_}\";"
}
} @{$token->[3]};
return $temp;
}
+sub writeallows {
+ my $thisurl='/res/'.&Apache::lonnet::declutter(shift);
+ my $thisdir=$thisurl;
+ $thisdir=~s/\/[^\/]+$//;
+ my %httpref=();
+ map {
+ $httpref{'httpref.'.
+ &Apache::lonnet::hreflocation($thisdir,$_)}=$thisurl; } @extlinks;
+ &Apache::lonnet::appenv(%httpref);
+}
+
sub handler {
my $request=shift;
@@ -335,6 +353,7 @@ sub handler {
$request->print('