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 )