--- loncom/lonnet/perl/lonnet.pm 2005/06/17 16:48:13 1.639 +++ loncom/lonnet/perl/lonnet.pm 2005/06/17 16:53:07 1.640 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.639 2005/06/17 16:48:13 albertel Exp $ +# $Id: lonnet.pm,v 1.640 2005/06/17 16:53:07 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1379,75 +1379,68 @@ sub extract_embedded_items { src => '', movie => '', ); - my $p = HTML::Parser->new - ( - start_h => - [sub { - my ($tagname, $attr) = @_; - push (@state, $tagname); - if (lc($tagname) eq 'img') { - &add_filetype($allfiles,$attr->{'src'},'src'); - } - if (lc($tagname) eq 'object' || - (lc($tagname) eq 'embed' && lc($state[-2]) ne 'object')) { - foreach my $item (keys(%javafiles)) { - $javafiles{$item} = ''; - } - } - if (lc($state[-2]) eq 'object' && lc($tagname) eq 'param') { - my $name = lc($attr->{'name'}); - foreach my $item (keys(%javafiles)) { - if ($name eq $item) { - $javafiles{$item} = $attr->{'value'}; - last; - } - } - foreach my $item (keys(%mediafiles)) { - if ($name eq $item) { - &add_filetype($allfiles, $attr->{'value'}, 'value'); - last; - } - } - } - if (lc($tagname) eq 'embed' || lc($tagname) eq 'applet') { - foreach my $item (keys(%javafiles)) { - if ($attr->{$item}) { - $javafiles{$item} = $attr->{$item}; - last; - } - } - foreach my $item (keys(%mediafiles)) { - if ($attr->{$item}) { - &add_filetype($allfiles,$attr->{$item},$item); - last; - } - } - } - }, "tagname, attr"], - end_h => - [sub { - my ($tagname) = @_; - if ($javafiles{'codebase'} ne '') { - $javafiles{'codebase'} .= '/'; - } - if (lc($tagname) eq 'applet' || - 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); - } - } - } - pop @state; - }, "tagname"], - ); - $p->parse_file($filepath.'/'.$file); - $p->eof; + my $p = HTML::LCParser->new($filepath.'/'.$file); + while ($t=$p->get_token()) { + if ($t->[0] eq 'S') { + my ($tagname, $attr) = ($t->[1],$t->[2]); + push (@state, $tagname); + if (lc($tagname) eq 'img') { + &add_filetype($allfiles,$attr->{'src'},'src'); + } + if (lc($tagname) eq 'object' || + (lc($tagname) eq 'embed' && lc($state[-2]) ne 'object')) { + foreach my $item (keys(%javafiles)) { + $javafiles{$item} = ''; + } + } + if (lc($state[-2]) eq 'object' && lc($tagname) eq 'param') { + my $name = lc($attr->{'name'}); + foreach my $item (keys(%javafiles)) { + if ($name eq $item) { + $javafiles{$item} = $attr->{'value'}; + last; + } + } + foreach my $item (keys(%mediafiles)) { + if ($name eq $item) { + &add_filetype($allfiles, $attr->{'value'}, 'value'); + last; + } + } + } + if (lc($tagname) eq 'embed' || lc($tagname) eq 'applet') { + foreach my $item (keys(%javafiles)) { + if ($attr->{$item}) { + $javafiles{$item} = $attr->{$item}; + last; + } + } + foreach my $item (keys(%mediafiles)) { + if ($attr->{$item}) { + &add_filetype($allfiles,$attr->{$item},$item); + last; + } + } + } + } elsif ($t->[0] eq 'E') { + my ($tagname) = ($t->[1]); + if ($javafiles{'codebase'} ne '') { + $javafiles{'codebase'} .= '/'; + } + if (lc($tagname) eq 'applet' || + 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); + } + } + } + pop @state; + } + } return 'ok'; }