version 1.71, 2001/05/04 19:18:43
|
version 1.75, 2001/05/13 21:40:32
|
Line 6
|
Line 6
|
# 6/1/1 Gerd Kortemeyer |
# 6/1/1 Gerd Kortemeyer |
# 2/21,3/13 Guy |
# 2/21,3/13 Guy |
# 3/29,5/4 Gerd Kortemeyer |
# 3/29,5/4 Gerd Kortemeyer |
|
# 5/10 Scott Harrison |
|
|
package Apache::lonxml; |
package Apache::lonxml; |
use vars |
use vars |
qw(@pwd @outputstack $redirection $import @extlinks $metamode); |
qw(@pwd @outputstack $redirection $import @extlinks $metamode $evaluate %insertlist); |
use strict; |
use strict; |
use HTML::TokeParser; |
use HTML::TokeParser; |
use Safe; |
use Safe; |
use Safe::Hole; |
use Safe::Hole; |
use Opcode; |
use Opcode; |
|
|
|
sub register { |
|
my $space; |
|
my @taglist; |
|
my $temptag; |
|
($space,@taglist) = @_; |
|
foreach $temptag (@taglist) { |
|
$Apache::lonxml::alltags{$temptag}=$space; |
|
} |
|
} |
|
|
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use Apache::lontexconvert; |
use Apache::lontexconvert; |
|
use Apache::style; |
|
use Apache::run; |
|
use Apache::londefdef; |
|
use Apache::scripttag; |
|
use Apache::edit; |
|
#================================================== Main subroutine: xmlparse |
|
#debugging control, to turn on debugging modify the correct handler |
|
$Apache::lonxml::debug=0; |
|
|
|
#path to the directory containing the file currently being processed |
|
@pwd=(); |
|
|
|
#these two are used for capturing a subset of the output for later processing, |
|
#don't touch them directly use &startredirection and &endredirection |
|
@outputstack = (); |
|
$redirection = 0; |
|
|
|
#controls wheter the <import> tag actually does |
|
$import = 1; |
|
@extlinks=(); |
|
|
|
# meta mode is a bit weird only some output is to be turned off |
|
#<output> tag turns metamode off (defined in londefdef.pm) |
|
$metamode = 0; |
|
|
|
# turns on and of run::evaluate actually derefencing var refs |
|
$evaluate = 1; |
|
|
|
# data structure for eidt mode, determines what tags can go into what other tags |
|
%insertlist=(); |
|
|
sub xmlbegin { |
sub xmlbegin { |
my $output=''; |
my $output=''; |
Line 78 sub unloadevents() {
|
Line 119 sub unloadevents() {
|
return 'LONCAPAstale();'; |
return 'LONCAPAstale();'; |
} |
} |
|
|
sub register { |
|
my $space; |
|
my @taglist; |
|
my $temptag; |
|
($space,@taglist) = @_; |
|
foreach $temptag (@taglist) { |
|
$Apache::lonxml::alltags{$temptag}=$space; |
|
} |
|
} |
|
|
|
sub printalltags { |
sub printalltags { |
my $temp; |
my $temp; |
foreach $temp (sort keys %Apache::lonxml::alltags) { |
foreach $temp (sort keys %Apache::lonxml::alltags) { |
&Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}"); |
&Apache::lonxml::debug("$temp -- $Apache::lonxml::alltags{$temp}"); |
} |
} |
} |
} |
use Apache::style; |
|
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 { |
sub xmlparse { |
|
|
my ($target,$content_file_string,$safeinit,%style_for_target) = @_; |
my ($target,$content_file_string,$safeinit,%style_for_target) = @_; |
if ($target eq 'meta') { |
if ($target eq 'meta') { |
# meta mode is a bit weird only some output is to be turned off |
|
#<output> tag turns metamode off (defined in londefdef.pm) |
|
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::metamode = 1; |
$Apache::lonxml::metamode = 1; |
|
$Apache::lonxml::evaluate = 1; |
$Apache::lonxml::import = 0; |
$Apache::lonxml::import = 0; |
} elsif ($target eq 'grade') { |
} elsif ($target eq 'grade') { |
&startredirection; |
&startredirection; |
$Apache::lonxml::metamode = 0; |
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 1; |
$Apache::lonxml::import = 1; |
$Apache::lonxml::import = 1; |
} else { |
} elsif ($target eq 'modified') { |
|
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::metamode = 0; |
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 0; |
|
$Apache::lonxml::import = 0; |
|
} else { |
$Apache::lonxml::redirection = 0; |
$Apache::lonxml::redirection = 0; |
|
$Apache::lonxml::metamode = 0; |
|
$Apache::lonxml::evaluate = 1; |
$Apache::lonxml::import = 1; |
$Apache::lonxml::import = 1; |
} |
} |
#&printalltags(); |
#&printalltags(); |
Line 308 sub recurse {
|
Line 333 sub recurse {
|
sub callsub { |
sub callsub { |
my ($sub,$target,$token,$parstack,$parser,$safeeval,$style)=@_; |
my ($sub,$target,$token,$parstack,$parser,$safeeval,$style)=@_; |
my $currentstring=''; |
my $currentstring=''; |
|
my $nodefault; |
{ |
{ |
my $sub1; |
my $sub1; |
no strict 'refs'; |
no strict 'refs'; |
Line 323 sub callsub {
|
Line 349 sub callsub {
|
$space=$Apache::lonxml::alltags{$tag} |
$space=$Apache::lonxml::alltags{$tag} |
} |
} |
if ($space) { |
if ($space) { |
&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n"); |
#&Apache::lonxml::debug("Calling sub $sub in $space $metamode<br />\n"); |
$sub1="$space\:\:$sub"; |
$sub1="$space\:\:$sub"; |
$Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter); |
$Apache::lonxml::curdepth=join('_',@Apache::lonxml::depthcounter); |
$currentstring .= &$sub1($target,$token,$parstack,$parser, |
($currentstring,$nodefault) = &$sub1($target,$token,$parstack,$parser, |
$safeeval,$style); |
$safeeval,$style); |
} else { |
} else { |
&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n"); |
#&Apache::lonxml::debug("NOT Calling sub $sub in $space $metamode<br />\n"); |
if ($metamode <1) { |
if ($metamode <1) { |
if (defined($token->[4]) && ($metamode < 1)) { |
if (defined($token->[4]) && ($metamode < 1)) { |
$currentstring .= $token->[4]; |
$currentstring = $token->[4]; |
} else { |
} else { |
$currentstring .= $token->[2]; |
$currentstring = $token->[2]; |
} |
} |
} |
} |
} |
} |
if ($target eq 'edit' && $token->[0] eq 'E') { |
&Apache::lonxml::debug("nodefalt:$nodefault:"); |
$currentstring .= &Apache::edit::tag_end($target,$token,$parstack,$parser, |
if ($currentstring eq '' && $nodefault eq '') { |
$safeeval,$style); |
if ($target eq 'edit') { |
|
&Apache::lonxml::debug("doing default edit for $token->[1]"); |
|
if ($token->[0] eq 'S') { |
|
$currentstring = &Apache::edit::tag_start($target,$token); |
|
} elsif ($token->[0] eq 'E') { |
|
$currentstring = &Apache::edit::tag_end($target,$token); |
|
} |
|
} elsif ($target eq 'modified') { |
|
if ($token->[0] eq 'S') { |
|
$currentstring = $token->[4]; |
|
} else { |
|
$currentstring = $token->[2]; |
|
} |
|
} |
} |
} |
use strict 'refs'; |
use strict 'refs'; |
} |
} |
Line 354 sub startredirection {
|
Line 393 sub startredirection {
|
|
|
sub endredirection { |
sub endredirection { |
if (!$Apache::lonxml::redirection) { |
if (!$Apache::lonxml::redirection) { |
&Apache::lonxml::error("Endredirection was called, before a startredirection, perhaps you have unbalanced tags. Some debuggin information:".join ":",caller); |
&Apache::lonxml::error("Endredirection was called, before a startredirection, perhaps you have unbalanced tags. Some debuging information:".join ":",caller); |
return ''; |
return ''; |
} |
} |
$Apache::lonxml::redirection--; |
$Apache::lonxml::redirection--; |
Line 484 sub writeallows {
|
Line 523 sub writeallows {
|
# |
# |
# Afterburner handles anchors, highlights and links |
# Afterburner handles anchors, highlights and links |
# |
# |
|
|
sub afterburn { |
sub afterburn { |
my $result=shift; |
my $result=shift; |
map { |
map { |
Line 577 sub debug {
|
Line 615 sub debug {
|
} |
} |
|
|
sub error { |
sub error { |
if ($Apache::lonxml::debug eq 1) { |
if (($Apache::lonxml::debug eq 1) || ($ENV{'request.state'} eq 'construct') ) { |
print "<b>ERROR:</b>".$_[0]."<br />\n"; |
print "<b>ERROR:</b>".$_[0]."<br />\n"; |
} else { |
} else { |
print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"; |
print "<b>An Error occured while processing this resource. The instructor has been notified.</b> <br />"; |
Line 591 sub error {
|
Line 629 sub error {
|
&Apache::lonmsg::user_normal_msg($user,$domain,"Error in $ENV{'request.filename'}",$_[0]); |
&Apache::lonmsg::user_normal_msg($user,$domain,"Error in $ENV{'request.filename'}",$_[0]); |
} |
} |
} |
} |
|
|
#FIXME probably shouldn't have me get everything forever. |
#FIXME probably shouldn't have me get everything forever. |
&Apache::lonmsg::user_normal_msg('albertel','msu',"Error in $ENV{'request.filename'}",$_[0]); |
&Apache::lonmsg::user_normal_msg('albertel','msu',"Error in $ENV{'request.filename'}",$_[0]); |
#&Apache::lonmsg::user_normal_msg('albertel','103',"Error in $ENV{'request.filename'}",$_[0]); |
#&Apache::lonmsg::user_normal_msg('albertel','103',"Error in $ENV{'request.filename'}",$_[0]); |
} |
} |
} |
} |
|
|
sub warning { |
sub warning { |
if ($Apache::lonxml::debug eq 1) { |
if ($ENV{'request.state'} eq 'construct') { |
print "<b>W</b>ARNING<b>:</b>".$_[0]."<br />\n"; |
print "<b>W</b>ARNING<b>:</b>".$_[0]."<br />\n"; |
} |
} |
} |
} |
|
|
|
#Should allow multiple definitions of the same tag name |
|
sub register_insert2 { |
|
my @data = split /\n/, &Apache::lonnet::getfile('/home/httpd/lonTabs/insertlist.tab'); |
|
my $i; |
|
my @order; |
|
for ($i=0;$i < $#data; $i++) { |
|
my $line = $data[$i]; |
|
if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; } |
|
if ( $line =~ /TABLE/ ) { last; } |
|
my ($tag,$descrip,$function,$show) = split(/,/, $line); |
|
if ($show eq 'no') { next; } |
|
$insertlist{"$i.tag"} = $tag; |
|
$insertlist{"$i.description"} = $descrip; |
|
$insertlist{"$i.function"} = $function; |
|
} |
|
for (;$i < $#data;$i++) { |
|
my $line = $data[$i]; |
|
my ($tag,@which) = split(/ +/,$line); |
|
for (my $j=0;$j <$#which;$j++) { |
|
if ( $which[$j] eq 'Y' ) { |
|
push(@{ $insertlist{"$tag.which"} },$j); |
|
} |
|
} |
|
} |
|
} |
|
|
|
sub register_insert { |
|
my @data = split /\n/, &Apache::lonnet::getfile('/home/httpd/lonTabs/insertlist.tab'); |
|
my $i; |
|
my @order; |
|
for ($i=0;$i < $#data; $i++) { |
|
my $line = $data[$i]; |
|
if ( $line =~ /^\#/ || $line =~ /^\s*\n/) { next; } |
|
if ( $line =~ /TABLE/ ) { last; } |
|
my ($tag,$descrip,$function,$show) = split(/,/, $line); |
|
if ($show eq 'no') { next; } |
|
$insertlist{"$tag.description"} = $descrip; |
|
$insertlist{"$tag.function"} = $function; |
|
push (@order,$tag); |
|
} |
|
for (;$i < $#data;$i++) { |
|
my $line = $data[$i]; |
|
my ($tag,@which) = split(/ +/,$line); |
|
for (my $j=0;$j <$#which;$j++) { |
|
if ( $which[$j] eq 'Y' ) { |
|
push(@{ $insertlist{"$tag.which"} },$order[$j]); |
|
} |
|
} |
|
} |
|
} |
1; |
1; |
__END__ |
__END__ |
|
|