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 )