XML-Handler-YAWriter
view release on metacpan or search on metacpan
YAWriter.pm view on Meta::CPAN
($self->{Sendbuf} =~ /^$name/ ) &&
($self->{Sendleft} eq "<") &&
($self->{Sendright} eq ">") ) {
$self->{Sendright} = "/>";
} else {
$self->print("</", $name, ">");
}
}
sub characters {
my ($self, $characters) = @_;
return unless defined $characters->{Data};
my $output = $self->{'InCDATA'} ?
$characters->{Data} :
$self->encode($characters->{Data});
if ($self->{'Pretty'}{'catchwhitespace'} && !$self->{'InCDATA'}) {
$output =~ s/^([ \t\n\r]+)//; $self->print("<!--", $1, "-->") if $1;
return if $output eq "";
$output =~ s/([ \t\n\r]+)\$//; $self->print("<!--", $1, "-->") if $1;
return if $output eq "";
} elsif ($self->{'Pretty'}{'nowhitespace'} && !$self->{'InCDATA'}) {
$output =~ s/^([ \t\n\r]+)//;
return if $output eq "";
$output =~ s/([ \t\n\r]+)\$//;
return if $output eq "";
}
$self->print(undef, $output, undef);
}
sub ignorable_whitespace {
my ($self, $whitespace) = @_;
my $output = $whitespace->{Data};
return unless $output;
$self->print("<!--", $output, "-->");
# $self->print($output, undef, undef);
}
sub comment {
my ($self, $comment) = @_;
return if $self->{'Pretty'}{'nocomments'};
my $output = $self->encode($comment->{Data});
return unless $output;
$self->print("<!--", " ".$output." ", "-->");
}
sub encode {
my ($self, $string) = @_;
return &{$self->{EscSub}}($string, $self->{'Escape'});
}
sub start_cdata {
my ($self, $cdata) = @_;
$self->{'InCDATA'} = 1;
$self->print(undef, '<![CDATA[', undef);
}
sub end_cdata {
my ($self, $cdata) = @_;
$self->{'InCDATA'} = 0;
$self->print(undef, ']]>', undef);
}
sub print {
my ($self, $left, $output, $right) = @_;
my $sendbuf = "";
if ($self->{Sendleft}) {
$sendbuf .= $self->{'LeftSPC'};
$sendbuf .= $self->{'Indent'} x $self->{'LastCount'}
if $self->{'Indent'};
$sendbuf .= $self->{Sendleft};
}
$sendbuf .= $self->{Sendbuf} if defined $self->{Sendbuf};
$sendbuf .= $self->{'ElemSPC'}.$self->{Sendright} if $self->{Sendright};
if ($sendbuf ne "") {
$self->{Output}->print( $sendbuf ) if $self->{Output};
push(@{$self->{Strings}}, $sendbuf) unless $self->{NoString};
}
$self->{Sendleft} = $left;
$self->{Sendbuf} = $output;
$self->{Sendright} = $right;
$self->{LastCount} = $self->{'Counter'};
}
1;
=head1 NAME
XML::Handler::YAWriter - Yet another Perl SAX XML Writer
=head1 SYNOPSIS
use XML::Handler::YAWriter;
my $ya = new XML::Handler::YAWriter( %options );
my $perlsax = new XML::Parser::PerlSAX( 'Handler' => $ya );
=head1 DESCRIPTION
YAWriter implements Yet Another XML::Handler::Writer. The reasons for
this one are that I needed a flexible escaping technique, and want
some kind of pretty printing. If an instance of YAWriter is created
without any options, the default behavior is to produce an array of
strings containing the XML in :
@{$ya->{Strings}}
=head2 Options
Options are given in the usual 'key' => 'value' idiom.
=over
=item Output IO::File
This option tells YAWriter to use an already open file for output, instead
( run in 1.023 second using v1.01-cache-2.11-cpan-39bf76dae61 )