From 8502effd1b414b0b0d3bc3082a695db6147e8389 Mon Sep 17 00:00:00 2001 From: "sgunderson@bigfoot.com" <> Date: Thu, 1 Mar 2007 15:06:30 +0100 Subject: [PATCH] Fix some internal oddities in perl-sax/structure; however, the test still does not pass. --- perl-sax/XML/TemplateSAX/Handler.pm | 49 ++++++++++++++--------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/perl-sax/XML/TemplateSAX/Handler.pm b/perl-sax/XML/TemplateSAX/Handler.pm index 72a506c..b7917bc 100644 --- a/perl-sax/XML/TemplateSAX/Handler.pm +++ b/perl-sax/XML/TemplateSAX/Handler.pm @@ -23,34 +23,11 @@ sub new { sub start_element { my ($self, $data) = @_; my $obj = $self->{'obj'}; - + # find the ID, if any my $id = $data->{'Attributes'}->{'{http://template.sesse.net/}id'}; $id = $id->{'Value'} if (defined($id)); - # - # If we have multiple elements with the same name within each other, - # we need to keep track of how many there are, so check here and increment. - # end_element will decrement and optionally pop the stack. - # - my $stack = $self->{'stack'}; - if (scalar @$stack > 0) { - my $top = $stack->[scalar @$stack - 1]; - - if ($data->{'Name'} eq $top->[0]) { - ++$top->[1]; - } - } - - # within a replacement; just ignore everything - return if (!defined($obj)); - - # within a cloning; slurp it up - if (ref($obj) eq 'XML::TemplateSAX::Buffer') { - $obj->start_element($data); - return; - } - # substitution: see if this element matches anything. if so, # descend down into the tree. if (ref($obj) eq 'HASH') { @@ -131,6 +108,28 @@ sub start_element { } } + # + # If we have multiple elements with the same name within each other, + # we need to keep track of how many there are, so check here and increment. + # end_element will decrement and optionally pop the stack. + # + my $stack = $self->{'stack'}; + if (scalar @$stack > 0) { + my $top = $stack->[scalar @$stack - 1]; + + if ($data->{'Name'} eq $top->[0]) { + ++$top->[1]; + } + } + + # within a replacement; just ignore everything + return if (!defined($obj)); + + # within a cloning; slurp it up + if (ref($obj) eq 'XML::TemplateSAX::Buffer') { + $obj->start_element($data); + return; + } $self->SUPER::start_element($data); } @@ -176,7 +175,7 @@ sub processing_instruction { sub end_element { my ($self, $data) = @_; - + my $stack = $self->{'stack'}; if (scalar @$stack > 0) { my $top = $stack->[scalar @$stack - 1]; -- 2.39.2