Diff for /loncom/xml/lonxml.pm between versions 1.71 and 1.74

version 1.71, 2001/05/04 19:18:43 version 1.74, 2001/05/13 20:01:11
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";
   }    }
 }  }
   
   sub register_insert {
     my @data = split /\n/, &Apache::lonnet::getfile('/home/httpd/html/res/adm/includes/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__
   

Removed from v.1.71  
changed lines
  Added in v.1.74


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>