XML-SAX-Writer
view release on metacpan or search on metacpan
lib/XML/SAX/Writer/XML.pm view on Meta::CPAN
$ent = $self->safeConvert($ent);
$self->{Consumer}->output($ent);
}
#-------------------------------------------------------------------#
#-------------------------------------------------------------------#
# comment
#-------------------------------------------------------------------#
sub comment {
my $self = shift;
my $data = shift;
$self->_output_element;
$self->_output_dtd;
my $cmt = '<!--' . $self->escapeComment($data->{Data}) . '-->';
$cmt = $self->safeConvert($cmt);
$self->{Consumer}->output($cmt);
}
#-------------------------------------------------------------------#
#-------------------------------------------------------------------#
# start_dtd
#-------------------------------------------------------------------#
sub start_dtd {
my $self = shift;
my $data = shift;
my $dtd = '<!DOCTYPE ' . $data->{Name};
if ($data->{PublicId}) {
$dtd .= ' PUBLIC \'' . $self->escape($data->{PublicId}) . '\' \'' . $self->escape($data->{SystemId}) . '\'';
}
elsif ($data->{SystemId}) {
$dtd .= ' SYSTEM \'' . $self->escape($data->{SystemId}) . '\'';
}
$self->{BufferDTD} = $dtd;
}
#-------------------------------------------------------------------#
#-------------------------------------------------------------------#
# end_dtd
#-------------------------------------------------------------------#
sub end_dtd {
my $self = shift;
my $data = shift;
my $dtd;
if ($self->{BufferDTD}) {
$dtd = $self->{BufferDTD} . ' >';
}
else {
$dtd = ' ]>';
}
$dtd = $self->safeConvert($dtd);
$self->{Consumer}->output($dtd);
$self->{BufferDTD} = '';
}
#-------------------------------------------------------------------#
#-------------------------------------------------------------------#
# start_cdata
#-------------------------------------------------------------------#
sub start_cdata {
my $self = shift;
$self->_output_element;
$self->{InCDATA} = 1;
my $cds = $self->{Encoder}->convert('<![CDATA[');
$self->{Consumer}->output($cds);
}
#-------------------------------------------------------------------#
#-------------------------------------------------------------------#
# end_cdata
#-------------------------------------------------------------------#
sub end_cdata {
my $self = shift;
$self->{InCDATA} = 0;
my $cds = $self->{Encoder}->convert(']]>');
$self->{Consumer}->output($cds);
}
#-------------------------------------------------------------------#
#-------------------------------------------------------------------#
# start_entity
#-------------------------------------------------------------------#
sub start_entity {
my $self = shift;
my $data = shift;
$self->_output_element;
$self->_output_dtd;
my $ent;
if ($data->{Name} eq '[dtd]') {
# we ignore the fact that we're dealing with an external
# DTD entity here, and probably shouldn't write the DTD
# events unless explicitly told to
# this will probably change
}
elsif ($data->{Name} =~ m/^%/) {
$ent = $data->{Name} . ';';
}
else {
$ent = '&' . $data->{Name} . ';';
}
$ent = $self->safeConvert($ent);
$self->{Consumer}->output($ent);
}
#-------------------------------------------------------------------#
#-------------------------------------------------------------------#
# end_entity
#-------------------------------------------------------------------#
sub end_entity {
# depending on what is done above, we might need to do sth here
}
#-------------------------------------------------------------------#
### SAX1 stuff ######################################################
#-------------------------------------------------------------------#
# xml_decl
#-------------------------------------------------------------------#
sub xml_decl {
my $self = shift;
my $data = shift;
# version info is compulsory, contrary to what some seem to think
# also, there's order in the pseudo-attr
my $xd = '';
if ($data->{Version}) {
$xd .= "<?xml version=\"$data->{Version}\"";
if ($data->{Encoding}) {
( run in 0.544 second using v1.01-cache-2.11-cpan-39bf76dae61 )