XML-Spice
view release on metacpan or search on metacpan
lib/XML/Spice.pm view on Meta::CPAN
my $WANT_PRETTY = $PRETTY_PRINT && $TIDY_LOADED;
return $chunk->{cached} if exists $chunk->{cached} && !$WANT_PRETTY;
sub _escape_attr {
my ($val) = @_;
$val =~ s/'/'/g;
return $val;
}
sub _escape_cdata {
my ($val) = @_;
$val =~ s/&/&/g;
$val =~ s/</</g;
$val =~ s/>/>/g;
$val =~ s/"/"/g;
$val =~ s/([^\x20-\x7E])/'&#' . ord($1) . ';'/ge;
return $val;
}
sub _serialise {
lib/XML/Spice.pm view on Meta::CPAN
if (ref $thing eq "ARRAY") {
$xml .= $chunk->_serialise(@$thing);
}
elsif (ref $thing eq "XML::Spice::Chunk") {
$xml .= $thing->_xml;
}
else {
next if $thing eq "";
$xml .= _escape_cdata($thing);
}
}
return $xml;
}
my $subxml = $chunk->_serialise(@{$chunk->{sub}}) if exists $chunk->{sub};
my $xml = "<" . $chunk->{tag};
t/10-generation.t view on Meta::CPAN
sub {
x("escapes", '&<>"');
},
"numeric escaping",
qq(<escapes>).join('', (map { sprintf '&#%d;', $_ } (0x20 .. 0xd7ff))).qq(</escapes>),
sub {
x("escapes", join '', (map { chr($_) } (0x20 .. 0xd7ff)));
},
"0 as cdata works",
qq(<foo>0</foo>),
sub {
x("foo", 0);
},
);
while(@tests > 1) {
my $desc = shift @tests;
my $xml = shift @tests;
my $gen = shift @tests;
( run in 2.256 seconds using v1.01-cache-2.11-cpan-995e09ba956 )