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 )