SVG-Parser

 view release on metacpan or  search on metacpan

lib/SVG/Parser/Base.pm  view on Meta::CPAN

    # gather SVG constuctor attributes
    my %svg_attr;
    %svg_attr=%{delete $parser->{__svg_attr}} if exists $parser->{__svg_attr};
    $svg_attr{-nostub}=1;
    # instantiate SVG document object
    $parser->{__svg}=new SVG(%svg_attr);
    # empty element list
    $parser->{__elements}=[];
    # empty unassigned attlist list (for internal DTD subset handling)
    $parser->{__unassigned_attlists}=[];
    # cdata count
    $parser->{__in_cdata}=0;

    $parser->debug("Start",$parser."/".$parser->{__svg});
}

# handle start of element - extend chain by one
sub StartTag {
    my ($parser,$type,%attrs)=@_;
    my $elements=$parser->{__elements};
    my $svg=$parser->{__svg};

lib/SVG/Parser/Base.pm  view on Meta::CPAN


# handle cannonical data (text)
sub Text {
    my ($parser,$text)=@_;
    my $elements=$parser->{__elements};

    return if $text=~/^\s*$/s; #ignore redundant whitespace
    my $parent=$elements->[-1];

    # are we in a CDATA section? (see CdataStart/End below)
    if ($parser->{__in_cdata}) {
        my $current=$parent->{-CDATA} || '';
        $parent->CDATA($current.$parser->{__svg}{-elsep}.$text);
    } else {
        my $current=$parent->{-cdata} || '';
        $parent->cdata($current.$parser->{__svg}{-elsep}.$text);
    }

    $parser->debug("CDATA","\"$text\"");
}

# handle cannonical data (CDATA sections)
sub CdataStart {
    my $parser=shift;
    $parser->{__in_cdata}++;

    $parser->debug("CDATA","start->");
}

sub CdataEnd {
    my $parser=shift;
    my $elements=$parser->{__elements};
    my $parent=$elements->[-1];

    my $current=$parent->{-CDATA} || '';
    $parent->CDATA($current.$parser->{__svg}{-elsep});
    $parser->{__in_cdata}--;

    $parser->debug("CDATA","<-end");
}

# handle processing instructions
sub PI {
    my ($parser,$target,$data)=@_;
    my $elements=$parser->{__elements};

    if (my $parent=$elements->[-1]) {

lib/SVG/Parser/SAX/Handler.pm  view on Meta::CPAN

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}
    );



( run in 0.315 second using v1.01-cache-2.11-cpan-454fe037f31 )