Diff for /loncom/xml/lonxml.pm between versions 1.56 and 1.57

version 1.56, 2001/03/13 22:44:24 version 1.57, 2001/03/19 20:08:53
Line 89  sub xmlparse { Line 89  sub xmlparse {
  my $token;   my $token;
  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') || ($token->[0] eq 'C') || ($token->[0] eq 'D') ) {
        $result=$token->[1];         $result=$token->[1];
        } elsif ($token->[0] eq 'PI') {
          $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 132  sub xmlparse { Line 134  sub xmlparse {
  $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);
        }         }
        } else {
          &Apache::lonxml::error("Unknown token event :$token->[0]:$token->[1]:");
      }       }
      #evaluate variable refs in result       #evaluate variable refs in result
      if ($result ne "") {       if ($result ne "") {
Line 172  sub recurse { Line 176  sub recurse {
   my $decls='';    my $decls='';
   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') || ($tokenpat->[0] eq 'C') || ($tokenpat->[0] eq 'D') ) {
  $partstring = $tokenpat->[1];   $partstring = $tokenpat->[1];
         } elsif ($tokenpat->[0] eq 'PI') {
    $result=$tokenpat->[2];
       } 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 191  sub recurse { Line 197  sub recurse {
  $partstring = &callsub("end_$tokenpat->[1]",   $partstring = &callsub("end_$tokenpat->[1]",
        $target, $tokenpat, \@innerparstack,         $target, $tokenpat, \@innerparstack,
        \@pat, $safeeval, $style_for_target);         \@pat, $safeeval, $style_for_target);
         } else {
    &Apache::lonxml::error("Unknown token event :$tokenpat->[0]:$tokenpat->[1]:");
       }        }
       #pass both the variable to the style tag, and the tag we         #pass both the variable to the style tag, and the tag we 
       #are processing inside the <definedtag>        #are processing inside the <definedtag>
Line 299  sub get_all_text { Line 307  sub get_all_text {
  my $depth=0;   my $depth=0;
  my $token;   my $token;
  my $result='';   my $result='';
  my $tag=substr($tag,1); #strip the / off the tag   if ( $tag =~ m:^/: ) { 
  #&Apache::lonxml::debug("have:$tag:");     my $tag=substr($tag,1); 
  while (($depth >=0) && ($token = $pars->get_token)) {  #   &Apache::lonxml::debug("have:$tag:");
    #&Apache::lonxml::debug("token:$token->[0]:$depth:$token->[1]");     while (($depth >=0) && ($token = $pars->get_token)) {
    if ($token->[0] eq 'T') {  #     &Apache::lonxml::debug("e token:$token->[0]:$depth:$token->[1]");
      $result.=$token->[1];       if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) {
    } elsif ($token->[0] eq 'S') {         $result.=$token->[1];
      if ($token->[1] eq $tag) { $depth++; }       } elsif ($token->[0] eq 'PI') {
      $result.=$token->[4];         $result.=$token->[2];
    } elsif ($token->[0] eq 'E')  {       } elsif ($token->[0] eq 'S') {
      if ( $token->[1] eq $tag) { $depth--; }         if ($token->[1] eq $tag) { $depth++; }
      #skip sending back the last end tag         $result.=$token->[4];
      if ($depth > -1) { $result.=$token->[2]; } else {       } elsif ($token->[0] eq 'E')  {
        $pars->unget_token($token);         if ( $token->[1] eq $tag) { $depth--; }
          #skip sending back the last end tag
          if ($depth > -1) { $result.=$token->[2]; } else {
    $pars->unget_token($token);
          }
        }
      }
    } else {
      while ($token = $pars->get_token) {
   #     &Apache::lonxml::debug("s token:$token->[0]:$depth:$token->[1]");
        if (($token->[0] eq 'T')||($token->[0] eq 'C')||($token->[0] eq 'D')) {
          $result.=$token->[1];
        } elsif ($token->[0] eq 'PI') {
          $result.=$token->[2];
        } elsif ($token->[0] eq 'S') {
          if ( $token->[1] eq $tag) { 
    $pars->unget_token($token); last;
          } else {
    $result.=$token->[4];
          }
        } elsif ($token->[0] eq 'E')  {
          $result.=$token->[2];
      }       }
    }     }
  }   }

Removed from v.1.56  
changed lines
  Added in v.1.57


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