-
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/ /\ /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;