Diff for /loncom/xml/lonxml.pm between versions 1.54 and 1.55

version 1.54, 2001/02/19 20:40:55 version 1.55, 2001/02/22 00:49:03
Line 4 Line 4
 # last modified 06/26/00 by Alexander Sakharuk  # last modified 06/26/00 by Alexander Sakharuk
 # 11/6 Gerd Kortemeyer  # 11/6 Gerd Kortemeyer
 # 6/1/1 Gerd Kortemeyer  # 6/1/1 Gerd Kortemeyer
   # 2/21 Guy
   
 package Apache::lonxml;   package Apache::lonxml; 
 use vars   use vars 
 qw(@pwd $outputstack $redirection $textredirection $on_offimport @extlinks);  qw(@pwd @outputstack $redirection $textredirection $import @extlinks);
 use strict;  use strict;
 use HTML::TokeParser;  use HTML::TokeParser;
 use Safe;  use Safe;
Line 38  use Apache::londefdef; Line 39  use Apache::londefdef;
 use Apache::scripttag;  use Apache::scripttag;
 #==================================================   Main subroutine: xmlparse    #==================================================   Main subroutine: xmlparse  
 @pwd=();  @pwd=();
 $outputstack = '';  @outputstack = ();
 $redirection = 1;  $redirection = 0;
 $textredirection = 1;  $import = 1;
 $on_offimport = 0;  
 @extlinks=();  @extlinks=();
   
 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') {
    $Apache::lonxml::textredirection = 0;     &startredirection;
    $Apache::lonxml::on_offimport = 1;     $Apache::lonxml::import = 0;
  } elsif ($target eq 'grade') {   } elsif ($target eq 'grade') {
    $Apache::lonxml::textredirection = 0;     &startredirection;
    $Apache::lonxml::on_offimport = 0;     $Apache::lonxml::import = 1;
  } else {   } else {
    $Apache::lonxml::textredirection = 1;     $Apache::lonxml::redirection = 0;
    $Apache::lonxml::on_offimport = 0;     $Apache::lonxml::import = 1;
  }   }
  #&printalltags();   #&printalltags();
  my @pars = ();   my @pars = ();
Line 90  sub xmlparse { Line 90  sub xmlparse {
  while ( $#pars > -1 ) {   while ( $#pars > -1 ) {
    while ($token = $pars[$#pars]->get_token) {     while ($token = $pars[$#pars]->get_token) {
      if ($token->[0] eq 'T') {       if ($token->[0] eq 'T') {
        if ($Apache::lonxml::textredirection == 1) {$result=$token->[1];}         $result=$token->[1];
        # $finaloutput .= &Apache::run::evaluate($token->[1],$safeeval,'');  
      } elsif ($token->[0] eq 'S') {       } elsif ($token->[0] eq 'S') {
        # if ($target eq 'meta' and $token->[2]->{metaout} eq 'ON') {$Apache::lonxml::textredirection = 1;}  
        # add tag to stack             # add tag to stack    
        push (@stack,$token->[1]);         push (@stack,$token->[1]);
        # add parameters list to another stack         # add parameters list to another stack
        push (@parstack,&parstring($token));         push (@parstack,&parstring($token));
        &increasedepth($token);                &increasedepth($token);       
        if (exists $style_for_target{$token->[1]}) {         if (exists $style_for_target{$token->[1]}) {
      if ($Apache::lonxml::redirection) {
  if ($Apache::lonxml::redirection == 1) {     $Apache::lonxml::outputstack['-1'] .=  
    $finaloutput .= &recurse($style_for_target{$token->[1]},       &recurse($style_for_target{$token->[1]},$target,$safeeval,
     $target,$safeeval,\%style_for_target,        \%style_for_target,@parstack);
     @parstack);  
  } else {   } else {
    $Apache::lonxml::outputstack .=  &recurse($style_for_target{$token->[1]},     $finaloutput .= &recurse($style_for_target{$token->[1]},$target,
  $target,$safeeval,\%style_for_target,      $safeeval,\%style_for_target,@parstack);
  @parstack);  
  }   }
     
        } else {         } else {
  $result = &callsub("start_$token->[1]", $target, $token,\@parstack,   $result = &callsub("start_$token->[1]", $target, $token,\@parstack,
     \@pars, $safeeval, \%style_for_target);      \@pars, $safeeval, \%style_for_target);
        }                       }              
      } elsif ($token->[0] eq 'E')  {       } elsif ($token->[0] eq 'E')  {
        #if ($target eq 'meta') {$Apache::lonxml::textredirection = 0;}  
        #clear out any tags that didn't end         #clear out any tags that didn't end
        while ($token->[1] ne $stack[$#stack]          while ($token->[1] ne $stack[$#stack] && ($#stack > -1)) {
       && ($#stack > -1)) {   &Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']");
  &Apache::lonxml::warning("Unbalanced tags in resource $stack['-1']");     
  pop @stack;pop @parstack;&decreasedepth($token);   pop @stack;pop @parstack;&decreasedepth($token);
        }         }
                 
        if (exists $style_for_target{'/'."$token->[1]"}) {         if (exists $style_for_target{'/'."$token->[1]"}) {
    if ($Apache::lonxml::redirection) {
  if ($Apache::lonxml::redirection == 1) {     $Apache::lonxml::outputstack['-1'] .=  
  $finaloutput .= &recurse($style_for_target{'/'."$token->[1]"},       &recurse($style_for_target{'/'."$token->[1]"},
   $target,$safeeval,\%style_for_target,        $target,$safeeval,\%style_for_target,@parstack);
   @parstack);   } else {
         } else {     $finaloutput .= &recurse($style_for_target{'/'."$token->[1]"},
          $Apache::lonxml::outputstack .=  &recurse($style_for_target{'/'."$token->[1]"},      $target,$safeeval,\%style_for_target,
   $target,$safeeval,\%style_for_target,      @parstack);
   @parstack);   }
         }    
   
        } else {         } else {
  $result = &callsub("end_$token->[1]", $target, $token, \@parstack,   $result = &callsub("end_$token->[1]", $target, $token, \@parstack,
        \@pars,$safeeval, \%style_for_target);      \@pars,$safeeval, \%style_for_target);
        }         }
      }       }
        #evaluate variable refs in result
      if ($result ne "") {       if ($result ne "") {
        if ( $#parstack > -1 ) {         if ( $#parstack > -1 ) {
     if ($Apache::lonxml::redirection) {
  if ($Apache::lonxml::redirection == 1) {     $Apache::lonxml::outputstack['-1'] .= 
  $finaloutput .= &Apache::run::evaluate($result,$safeeval,       &Apache::run::evaluate($result,$safeeval,$parstack[$#parstack]);
  $parstack[$#parstack]);   } else {
         } else {     $finaloutput .= &Apache::run::evaluate($result,$safeeval,
          $Apache::lonxml::outputstack .= &Apache::run::evaluate($result,$safeeval,    $parstack[$#parstack]);
  $parstack[$#parstack]);   }
         }  
   
        } else {         } else {
  $finaloutput .= &Apache::run::evaluate($result,$safeeval,'');   $finaloutput .= &Apache::run::evaluate($result,$safeeval,'');
        }         }
        $result = '';         $result = '';
      } else {       } 
          $finaloutput .= $result;       if ($token->[0] eq 'E') { 
          pop @stack;pop @parstack;&decreasedepth($token);
      }       }
      if ($token->[0] eq 'E') { pop @stack;pop @parstack;&decreasedepth($token);}  
    }     }
    pop @pars;     pop @pars;
    pop @Apache::lonxml::pwd;     pop @Apache::lonxml::pwd;
Line 182  sub recurse { Line 173  sub recurse {
   while ( $#pat > -1 ) {    while ( $#pat > -1 ) {
     while  ($tokenpat = $pat[$#pat]->get_token) {      while  ($tokenpat = $pat[$#pat]->get_token) {
       if ($tokenpat->[0] eq 'T') {        if ($tokenpat->[0] eq 'T') {
   if ($Apache::lonxml::textredirection == 1) {$partstring = $tokenpat->[1];}   $partstring = $tokenpat->[1];
       } elsif ($tokenpat->[0] eq 'S') {        } elsif ($tokenpat->[0] eq 'S') {
  push (@innerstack,$tokenpat->[1]);   push (@innerstack,$tokenpat->[1]);
  push (@innerparstack,&parstring($tokenpat));   push (@innerparstack,&parstring($tokenpat));
Line 254  sub callsub { Line 245  sub callsub {
   return $currentstring;    return $currentstring;
 }  }
   
   sub startredirection {
     $Apache::lonxml::redirection++;
     push (@Apache::lonxml::outputstack, '');
   }
   
   sub endredirection {
     if (!$Apache::lonxml::redirection) {
       &Apache::lonxml::error("Endredirection was called, before a startredirection, perhaps you have unbalanced tags. Some debuggin information:".join ":",caller);
       return '';
     }
     $Apache::lonxml::redirection--;
     pop @Apache::lonxml::outputstack;
   }
   
 sub initdepth {  sub initdepth {
   @Apache::lonxml::depthcounter=();    @Apache::lonxml::depthcounter=();
   $Apache::lonxml::depth=-1;    $Apache::lonxml::depth=-1;
Line 407  sub debug { Line 412  sub debug {
   
 sub error {  sub error {
   if ($Apache::lonxml::debug eq 1) {    if ($Apache::lonxml::debug eq 1) {
     print "ERROR:".$_[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 />";
     #notify author      #notify author
Line 429  sub error { Line 434  sub error {
   
 sub warning {  sub warning {
   if ($Apache::lonxml::debug eq 1) {    if ($Apache::lonxml::debug eq 1) {
     print "WARNING:".$_[0]."<br />\n";      print "<b>W</b>ARNING<b>:</b>".$_[0]."<br />\n";
   }    }
 }  }
   

Removed from v.1.54  
changed lines
  Added in v.1.55


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