Diff for /loncom/lonnet/perl/lonnet.pm between versions 1.638 and 1.639

version 1.638, 2005/06/13 20:23:54 version 1.639, 2005/06/17 16:48:13
Line 1381  sub extract_embedded_items { Line 1381  sub extract_embedded_items {
                      );                       );
     my $p = HTML::Parser->new      my $p = HTML::Parser->new
     (      (
         xml_mode => 1,  
         start_h =>          start_h =>
             [sub {              [sub {
                  my ($tagname, $attr) = @_;                   my ($tagname, $attr) = @_;
                  push (@state, $tagname);                   push (@state, $tagname);
                  if (lc($tagname) eq 'img') {                   if (lc($tagname) eq 'img') {
                      if (exists($$allfiles{$attr->{'src'}})) {       &add_filetype($allfiles,$attr->{'src'},'src');
                          unless (grep/^src$/,@{$$allfiles{$attr->{'src'}}}) {  
                              push (@{$$allfiles{$attr->{'src'}}},&escape('src'));  
                          }  
                      } else {  
                          @{$$allfiles{$attr->{'src'}}} = (&escape('src'));  
                      }  
                  }                   }
                  if (lc($tagname) eq 'object') {                   if (lc($tagname) eq 'object' ||
                      foreach my $item (keys (%javafiles)) {       (lc($tagname) eq 'embed' && lc($state[-2]) ne 'object')) {
                        foreach my $item (keys(%javafiles)) {
                          $javafiles{$item} = '';                           $javafiles{$item} = '';
                      }                       }
                  }                   }
                  if (lc($state[-2]) eq 'object') {                   if (lc($state[-2]) eq 'object' && lc($tagname) eq 'param') {
                      if (lc($tagname) eq 'param') {       my $name = lc($attr->{'name'});
                          my $name = lc($attr->{'name'});       foreach my $item (keys(%javafiles)) {
                          foreach my $item (keys (%mediafiles)) {   if ($name eq $item) {
                              if ($name eq $item) {       $javafiles{$item} = $attr->{'value'};
                                  if (exists($$allfiles{$attr->{'value'}})) {       last;
                                      unless(grep/^value$/,@{$$allfiles{$attr->{'value'}}}) {   }
                                          push(@{$$allfiles{$attr->{'value'}}},&escape('value'));       }
                                      }       foreach my $item (keys(%mediafiles)) {
                                  } else {   if ($name eq $item) {
                                      @{$$allfiles{$attr->{'value'}}} = (&escape('value'));       &add_filetype($allfiles, $attr->{'value'}, 'value');
                                  }       last;
                                  last;   }
                              }       }
                          }   }
                          foreach my $item (keys (%javafiles)) {                   if (lc($tagname) eq 'embed' || lc($tagname) eq 'applet') {
                              if ($name eq $item) {       foreach my $item (keys(%javafiles)) {
                                  $javafiles{$item} = $attr->{'value'};  
                                  last;  
                              }  
                          }  
                      }  
                  }  
                  if (lc($tagname) eq 'embed') {  
                      unless (lc($state[-2]) eq 'object') {  
                          foreach my $item (keys (%javafiles)) {  
                              $javafiles{$item} = '';  
                          }  
                      }  
                      foreach my $item (keys (%javafiles)) {  
                          if ($attr->{$item}) {                           if ($attr->{$item}) {
                              $javafiles{$item} = $attr->{$item};                               $javafiles{$item} = $attr->{$item};
                              last;                               last;
                          }                           }
                      }                       }
                      foreach my $item (keys (%mediafiles)) {                       foreach my $item (keys(%mediafiles)) {
                          if ($attr->{$item}) {                           if ($attr->{$item}) {
                              if (exists($$allfiles{$attr->{$item}})) {       &add_filetype($allfiles,$attr->{$item},$item);
                                  unless (grep/^$item$/,@{$$allfiles{$item}}) {  
                                      push(@{$$allfiles{$attr->{$item}}},&escape($item));  
                                  }  
                              } else {  
                                  @{$$allfiles{$attr->{$item}}} = (&escape($item));  
                              }  
                              last;                               last;
                          }                           }
                      }                       }
                  }                   }
             }, "tagname, attr"],              }, "tagname, attr"],
         text_h =>  
              [sub {  
                  my ($text) = @_;  
         }, "dtext"],  
         end_h =>          end_h =>
                [sub {                 [sub {
                    my ($tagname) = @_;                     my ($tagname) = @_;
                    unless ($javafiles{'codebase'} eq '') {                     if ($javafiles{'codebase'} ne '') {
                        $javafiles{'codebase'} .= '/';                         $javafiles{'codebase'} .= '/';
                    }                       }  
                    if (lc($tagname) eq 'object') {                     if (lc($tagname) eq 'applet' ||
                        &extract_java_items(\%javafiles,$allfiles,$codebase);         lc($tagname) eq 'object' ||
          (lc($tagname) eq 'embed' && lc($state[-2]) ne 'object')
          ) {
          foreach my $item (keys(%javafiles)) {
      if ($item ne 'codebase' && 
          $javafiles{$item} ne '') {
          my $file=$javafiles{'codebase'}.
      $javafiles{$item};
          &add_filetype($allfiles,$file,$item);
      }
          }
                    }                      } 
                    if (lc($tagname) eq 'embed') {  
                        unless (lc($state[-2]) eq 'object') {  
                            &extract_java_items(\%javafiles,$allfiles,$codebase);  
                        }  
                    }  
                    pop @state;                     pop @state;
                 }, "tagname"],                  }, "tagname"],
     );      );
Line 1475  sub extract_embedded_items { Line 1451  sub extract_embedded_items {
     return 'ok';      return 'ok';
 }  }
   
 sub extract_java_items {  sub add_filetype {
     my ($javafiles,$allfiles,$codebase) = @_;      my ($allfiles,$file,$type)=@_;
     foreach my $item (keys(%{$javafiles})) {      if (exists($allfiles->{$file})) {
         if ($item ne 'codebase') {   unless (grep/^\Q$type\E$/, @{$allfiles->{$file}}) {
             if ($$javafiles{$item} ne '') {      push(@{$allfiles->{$file}}, &escape($type));
  my $file=$javafiles->{'codebase'}.$javafiles->{$item};   }
                 if (exists($allfiles->{$file})) {      } else {
                     unless (scalar(grep(/^$item$/, @{$allfiles->{$file}}))) {   @{$allfiles->{$file}} = (&escape($type));
                         push(@{$allfiles->{$file}}, &escape($item));  
     }  
  } else {  
                     @{$allfiles->{$file}} = (&escape($item));  
                     $codebase->{$file} = $javafiles->{'codebase'};  
                 }  
             }  
         }  
     }      }
 }  }
   

Removed from v.1.638  
changed lines
  Added in v.1.639


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