XML-Handler-Composer
view release on metacpan or search on metacpan
Composer.pm view on Meta::CPAN
}
# else: all attributes are defaulted i.e. @attr = ();
}
else # no attr are defaulted
{
@attr = @{ $event->{AttributeOrder} };
}
}
else # no attr order defined
{
@attr = keys %$ha;
}
my $escape = $self->{Escape}->{Attr};
my $q = $self->{Quote}->{Attr};
for (my $i = 0; $i < @attr; $i++)
{
#?? could print a newline every so often...
my $name = $attr[$i];
my $val = &$escape ($ha->{$name});
$str .= " $name=$q$val$q";
}
$str .= $suffix;
$self->print ($str);
}
sub end_element
{
my ($self, $event) = @_;
$self->{PreserveWS} = pop @{ $self->{PreserveStack} };
return if $event->{Compress};
$self->print ("</" . $event->{Name} . ">");
}
sub characters
{
my ($self, $event) = @_;
if ($self->{InCDATA})
{
#?? should this use $self->{PreserveWS} ?
my $esc = $self->{Escape}->{CDataSection};
$self->print (&$esc ($event->{Data}));
}
else # regular text
{
my $esc = $self->{PreserveWS} ?
$self->{Escape}->{TextPreserveNL} :
$self->{Escape}->{Text};
$self->print (&$esc ($event->{Data}));
}
}
sub start_cdata
{
my $self = shift;
$self->{InCDATA} = 1;
$self->print ("<![CDATA[");
}
sub end_cdata
{
my $self = shift;
$self->{InCDATA} = 0;
$self->print ("]]>");
}
sub comment
{
my ($self, $event) = @_;
$self->flush_xml_decl;
my $esc = $self->{Escape}->{Comment};
#?? still need to support comments in the DTD
$self->print ("<!--" . &$esc ($event->{Data}) . "-->");
}
sub entity_reference
{
my ($self, $event) = @_;
$self->flush_xml_decl;
my $par = $event->{Parameter} ? '%' : '&';
#?? parameter entities (like %par;) are NOT supported!
# PerlSAX::handle_default should be fixed!
$self->print ($par . $event->{Name} . ";");
}
sub unparsed_entity_decl
{
my ($self, $event) = @_;
$self->flush_xml_decl;
$self->entity_decl ($event);
}
sub notation_decl
{
my ($self, $event) = @_;
$self->flush_xml_decl;
my $name = $event->{Name};
my $sysId = $event->{SystemId};
my $pubId = $event->{PublicId};
my $q = $self->{Quote}->{SystemLiteral};
my $escape = $self->{Escape}->{SystemLiteral};
$sysId = &$escape ($sysId) if defined $sysId;
$pubId = &$escape ($pubId) if defined $pubId;
my $str = $self->{DocTypeIndent} . "<!NOTATION $name";
if (defined $pubId)
{
$str .= " PUBLIC $q$pubId$q";
}
if (defined $sysId)
( run in 1.111 second using v1.01-cache-2.11-cpan-39bf76dae61 )