Diff for /loncom/xml/lonxml.pm between versions 1.58 and 1.59

version 1.58, 2001/03/20 16:47:21 version 1.59, 2001/03/22 22:40:26
Line 8 Line 8
   
 package Apache::lonxml;   package Apache::lonxml; 
 use vars   use vars 
 qw(@pwd @outputstack $redirection $textredirection $import @extlinks);  qw(@pwd @outputstack $redirection $textredirection $import @extlinks $metamode);
 use strict;  use strict;
 use HTML::TokeParser;  use HTML::TokeParser;
 use Safe;  use Safe;
Line 37  use Apache::lontexconvert; Line 37  use Apache::lontexconvert;
 use Apache::run;  use Apache::run;
 use Apache::londefdef;  use Apache::londefdef;
 use Apache::scripttag;  use Apache::scripttag;
   use Apache::edit;
 #==================================================   Main subroutine: xmlparse    #==================================================   Main subroutine: xmlparse  
 @pwd=();  @pwd=();
 @outputstack = ();  @outputstack = ();
 $redirection = 0;  $redirection = 0;
 $import = 1;  $import = 1;
 @extlinks=();  @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') {
    &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;     $Apache::lonxml::import = 0;
  } elsif ($target eq 'grade') {   } elsif ($target eq 'grade') {
    &startredirection;     &startredirection;
      $Apache::lonxml::metamode = 0;
    $Apache::lonxml::import = 1;     $Apache::lonxml::import = 1;
  } else {   } else {
      $Apache::lonxml::metamode = 0;
    $Apache::lonxml::redirection = 0;     $Apache::lonxml::redirection = 0;
    $Apache::lonxml::import = 1;     $Apache::lonxml::import = 1;
  }   }
Line 90  sub xmlparse { Line 96  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') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) {       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') {       } elsif ($token->[0] eq 'PI') {
        $result=$token->[2];         if (!$metamode) { $result=$token->[2]; }
      } elsif ($token->[0] eq 'S') {       } elsif ($token->[0] eq 'S') {
        # add tag to stack             # add tag to stack    
        push (@stack,$token->[1]);         push (@stack,$token->[1]);
Line 100  sub xmlparse { Line 106  sub xmlparse {
        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 ($metamode) {
      $result = $style_for_target{$token->[1]};
    } elsif ($Apache::lonxml::redirection) {
    $Apache::lonxml::outputstack['-1'] .=       $Apache::lonxml::outputstack['-1'] .=  
      &recurse($style_for_target{$token->[1]},$target,$safeeval,       &recurse($style_for_target{$token->[1]},$target,$safeeval,
       \%style_for_target,@parstack);        \%style_for_target,@parstack);
Line 120  sub xmlparse { Line 128  sub xmlparse {
        }         }
                 
        if (exists $style_for_target{'/'."$token->[1]"}) {         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'] .=       $Apache::lonxml::outputstack['-1'] .=  
      &recurse($style_for_target{'/'."$token->[1]"},       &recurse($style_for_target{'/'."$token->[1]"},
       $target,$safeeval,\%style_for_target,@parstack);        $target,$safeeval,\%style_for_target,@parstack);
Line 129  sub xmlparse { Line 139  sub xmlparse {
     $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);
Line 160  sub xmlparse { Line 170  sub xmlparse {
    pop @Apache::lonxml::pwd;     pop @Apache::lonxml::pwd;
  }   }
   
   # if ($target eq 'meta') {
   #   $finaloutput.=&endredirection;
   # }
  return $finaloutput;   return $finaloutput;
 }  }
   
Line 232  sub callsub { Line 245  sub callsub {
   my ($sub,$target,$token,$parstack,$parser,$safeeval,$style)=@_;    my ($sub,$target,$token,$parstack,$parser,$safeeval,$style)=@_;
   my $currentstring='';    my $currentstring='';
   {    {
       my $sub1;      my $sub1;
     no strict 'refs';      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]}) {      if (my $space=$Apache::lonxml::alltags{$token->[1]}) {
       #&Apache::lonxml::debug("Calling sub $sub in $space<br />\n");        #&Apache::lonxml::debug("Calling sub $sub in $space<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 .= &$sub1($target,$token,$parstack,$parser,
      $safeeval,$style);       $safeeval,$style);
     } else {      } else {
       #&Apache::lonxml::debug("NOT Calling sub $sub in $space<br />\n");        #&Apache::lonxml::debug("NOT Calling sub $sub in $space<br />\n");
       if (defined($token->[4])) {        if (defined($token->[4]) && !$metamode) {
  $currentstring = $token->[4];   $currentstring .= $token->[4];
       } else {        } 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';      use strict 'refs';
   }    }
   return $currentstring;    return $currentstring;

Removed from v.1.58  
changed lines
  Added in v.1.59


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