--- loncom/xml/lonxml.pm 2001/03/20 16:47:21 1.58
+++ loncom/xml/lonxml.pm 2001/03/22 22:40:26 1.59
@@ -8,7 +8,7 @@
package Apache::lonxml;
use vars
-qw(@pwd @outputstack $redirection $textredirection $import @extlinks);
+qw(@pwd @outputstack $redirection $textredirection $import @extlinks $metamode);
use strict;
use HTML::TokeParser;
use Safe;
@@ -37,23 +37,29 @@ use Apache::lontexconvert;
use Apache::run;
use Apache::londefdef;
use Apache::scripttag;
+use Apache::edit;
#================================================== Main subroutine: xmlparse
@pwd=();
@outputstack = ();
$redirection = 0;
$import = 1;
@extlinks=();
+$metamode = 0;
sub xmlparse {
my ($target,$content_file_string,$safeinit,%style_for_target) = @_;
if ($target eq 'meta') {
- &startredirection;
+ # meta mode is a bit weird only some output is to be turned off
+ $Apache::lonxml::redirection = 0;
+ $Apache::lonxml::metamode = 1;
$Apache::lonxml::import = 0;
} elsif ($target eq 'grade') {
&startredirection;
+ $Apache::lonxml::metamode = 0;
$Apache::lonxml::import = 1;
} else {
+ $Apache::lonxml::metamode = 0;
$Apache::lonxml::redirection = 0;
$Apache::lonxml::import = 1;
}
@@ -90,9 +96,9 @@ sub xmlparse {
while ( $#pars > -1 ) {
while ($token = $pars[$#pars]->get_token) {
if (($token->[0] eq 'T') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) {
- $result=$token->[1];
+ if (!$metamode) { $result=$token->[1]; }
} elsif ($token->[0] eq 'PI') {
- $result=$token->[2];
+ if (!$metamode) { $result=$token->[2]; }
} elsif ($token->[0] eq 'S') {
# add tag to stack
push (@stack,$token->[1]);
@@ -100,7 +106,9 @@ sub xmlparse {
push (@parstack,&parstring($token));
&increasedepth($token);
if (exists $style_for_target{$token->[1]}) {
- if ($Apache::lonxml::redirection) {
+ if ($metamode) {
+ $result = $style_for_target{$token->[1]};
+ } elsif ($Apache::lonxml::redirection) {
$Apache::lonxml::outputstack['-1'] .=
&recurse($style_for_target{$token->[1]},$target,$safeeval,
\%style_for_target,@parstack);
@@ -120,7 +128,9 @@ sub xmlparse {
}
if (exists $style_for_target{'/'."$token->[1]"}) {
- if ($Apache::lonxml::redirection) {
+ if ($metamode) {
+ $result = $style_for_target{$token->[1]};
+ } elsif ($Apache::lonxml::redirection) {
$Apache::lonxml::outputstack['-1'] .=
&recurse($style_for_target{'/'."$token->[1]"},
$target,$safeeval,\%style_for_target,@parstack);
@@ -129,7 +139,7 @@ sub xmlparse {
$target,$safeeval,\%style_for_target,
@parstack);
}
-
+
} else {
$result = &callsub("end_$token->[1]", $target, $token, \@parstack,
\@pars,$safeeval, \%style_for_target);
@@ -160,6 +170,9 @@ sub xmlparse {
pop @Apache::lonxml::pwd;
}
+# if ($target eq 'meta') {
+# $finaloutput.=&endredirection;
+# }
return $finaloutput;
}
@@ -232,22 +245,30 @@ sub callsub {
my ($sub,$target,$token,$parstack,$parser,$safeeval,$style)=@_;
my $currentstring='';
{
- my $sub1;
+ my $sub1;
no strict 'refs';
+ if ($target eq 'edit' && $token->[0] eq 'S') {
+ $currentstring = &Apache::edit::tag_start($target,$token,$parstack,$parser,
+ $safeeval,$style);
+ }
if (my $space=$Apache::lonxml::alltags{$token->[1]}) {
#&Apache::lonxml::debug("Calling sub $sub in $space
\n");
$sub1="$space\:\:$sub";
$Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter);
- $currentstring = &$sub1($target,$token,$parstack,$parser,
+ $currentstring .= &$sub1($target,$token,$parstack,$parser,
$safeeval,$style);
} else {
#&Apache::lonxml::debug("NOT Calling sub $sub in $space
\n");
- if (defined($token->[4])) {
- $currentstring = $token->[4];
+ if (defined($token->[4]) && !$metamode) {
+ $currentstring .= $token->[4];
} else {
- $currentstring = $token->[2];
+ $currentstring .= $token->[2];
}
}
+ if ($target eq 'edit' && $token->[0] eq 'E') {
+ $currentstring = &Apache::edit::tag_end($target,$token,$parstack,$parser,
+ $safeeval,$style);
+ }
use strict 'refs';
}
return $currentstring;