SVG-Parser
view release on metacpan or search on metacpan
lib/SVG/Parser/SAX/Handler.pm view on Meta::CPAN
use SVG::Parser::Base;
use SVG 2.0;
$VERSION="1.03";
#-------------------------------------------------------------------------------
sub new {
my $proto=shift;
my $class=ref($proto) || $proto;
my %attrs=@_;
# pass on non-minus-prefixed attributes to handler
my %handler_attrs;
foreach (keys %attrs) {
$handler_attrs{$_}=delete $attrs{$_} unless /^-/;
}
my $self=$class->SUPER::new(%handler_attrs);
# minus-prefixed attributes stay here, double-minus to SVG object
foreach (keys %attrs) {
if (/^-(-.+)$/) {
$self->{__svg_attr}{$1}=$attrs{$_};
} else {
$self->{$_}=$attrs{$_};
}
}
return $self;
}
#-------------------------------------------------------------------------------
sub start_document {
my ($self,$document)=@_;
return $self->SVG::Parser::Base::StartDocument();
}
sub start_element {
my ($self,$element)=@_;
my $name=$element->{Name};
my %attrs=map {
$element->{Attributes}{$_}{Name} => $element->{Attributes}{$_}{Value}
} keys %{$element->{Attributes}};
$self->SVG::Parser::Base::StartTag($name,%attrs);
}
sub end_element {
my ($self,$element)=@_;
return $self->SVG::Parser::Base::EndTag($element);
}
sub characters {
my ($self,$text)=@_;
return $self->SVG::Parser::Base::Text($text->{Data});
}
sub start_cdata {
my $self=shift;
return $self->SVG::Parser::Base::CdataStart();
}
sub end_cdata {
my $self=shift;
return $self->SVG::Parser::Base::CdataEnd();
}
sub processing_instruction {
my ($self,$pi)=@_;
return $self->SVG::Parser::Base::PI(
$pi->{Target},
$pi->{Data}
);
}
sub comment {
my ($self,$comment)=@_;
return $self->SVG::Parser::Base::Comment($comment->{Data});
}
sub end_document {
my ($self,$document)=@_;
return $self->SVG::Parser::Base::FinishDocument();
}
#-------------------------------------------------------------------------------
# handle XML declaration, if present
sub xml_decl {
my ($self,$decl)=@_;
$self->SVG::Parser::Base::XMLDecl(
$decl->{Version},
$decl->{Encoding},
$decl->{Standalone}
);
}
# handle Doctype declaration, if present (and if parser handles it)
sub doctype_decl {
my ($self,$dtd)=@_;
$self->SVG::Parser::Base::Doctype(
$dtd->{Name},
$dtd->{SystemId},
$dtd->{PublicId},
$dtd->{Internal}
);
}
#-------------------------------------------------------------------------------
sub entity_decl {
my ($self,$edecl)=@_;
if (defined $edecl->{Notation}) {
# unparsed entity decl
$self->SVG::Parser::Base::Unparsed(
$edecl->{Name},
$edecl->{Value},
$edecl->{SystemID},
$edecl->{PublicID},
$edecl->{Notation},
( run in 0.999 second using v1.01-cache-2.11-cpan-39bf76dae61 )