• Parser.pm

    145 146  
    54 54 $content = $res->decoded_content( charset => 'none' );
    55 55 # warn "Charset: ".$res->content_charset."\n";
    56 56 } else {
    57 warn $res->status_line." \n";
    57 warn $res->status_line." \n" if $DEBUG;
    58 58 $self->{success} = 0;
    59 59 $self->{reason} = $res->status_line;
    60 60 return $self;
     
    207 207 return \@tags;
    208 208 }
    209 209
    210 ### Имеет дело с "ободранным" тегом,
    211 # в котором отстутсвуют < и >
    212 ########################################
    213 sub parse_html_tag {
    214 my $self = shift;
    215 my $tagstr = shift;
    216
    217 my %struct;
    218 for ( $tagstr ) {
    219 s/\ *=\ */=/g;
    220 $_ = __encode_quotes($_);
    221 }
    222 my @tag = split /\ +/, $tagstr;
    223 $struct{tag} = lc(shift @tag);
    224
    225 foreach my $str ( @tag ) {
    226 if ( $str =~ /^(.*?)=(.*)$/ ) {
    227 my $attr = lc($1);
    228 my $val = $2;
    229 for ( $val ) {
    230 s/^"//;
    231 s/"$//;
    232 s/&nbsp;/\ /sg;
    233 }
    234 $struct{$attr} = $val;
    235 }
    236 }
    237 return \%struct;
    238 }
    239
    240
    210 241 sub __encode_quotes {
    211 242 my $str = shift;
    212 243 my @in = split //, $str;
     
    230 261 return $out;
    231 262 }
    232 263
    264
    265 sub image_replace {
    266 my ($self, $img_params, $replace_struct) = @_;
    267
    268 my $img = $self->parse_html_tag('img '.$img_params);
    269 if ( exists $replace_struct->{$img->{src}} ) {
    270 my $new_image = $replace_struct->{$img->{src}};
    271 if ( ref $new_image && exists $new_image->{filename} ) {
    272 $img->{src} = $new_image->{filename};
    273 } else {
    274 $img->{src} = $new_image;
    275 }
    276 return '<img '.join(' ', map { $_.'="'.$img->{$_}.'"' } grep { $_ ne 'tag' } keys %$img).'>';
    277 } else {
    278 return '';
    279 }
    280 }
    281
    233 282 sub scheme {
    234 283 my $uri = shift;
    235 284 my $scheme;