]> git.sesse.net Git - xml-template/blobdiff - perl-sax/XML/TemplateSAX/Handler.pm
Add deferred parsing for perl-sax. Doesn't work yet, though, so it uses
[xml-template] / perl-sax / XML / TemplateSAX / Handler.pm
index e63ee4c8b04b3167161ca81963c5cab25155e502..319883bfd6ad883938bbab26d64a42bc5d6352ed 100644 (file)
@@ -78,7 +78,7 @@ sub start_element {
                if (defined($match)) {
                        $self->SUPER::start_element($data);
                
-                       push @{$self->{'stack'}}, [ $data->{'Name'}, $self->{'level'}, $obj ];
+                       push @{$self->{'stack'}}, [ $self->{'level'}, $obj ];
 
                        #
                        # This is sort of ugly. We special-case replacement by outputting
@@ -113,9 +113,12 @@ sub start_element {
                        if (ref($match) eq 'XML::TemplateSAX::Buffer') {
                                $match->replay($self);
                                $self->{'obj'} = undef;
+                       } elsif (ref($match) eq 'XML::TemplateSAX::Deferred') {
+                               $match->parse($self);
+                               $self->{'obj'} = undef;
+                       } else {
+                               $self->{'obj'} = $match;
                        }
-                       
-                       $self->{'obj'} = $match;
                        return;
                }
        }
@@ -170,7 +173,7 @@ sub end_element {
        if (scalar @$stack > 0) {
                my $top = $stack->[scalar @$stack - 1];
                
-               if ($data->{'Name'} eq $top->[0] && $self->{'level'} == $top->[1]) {
+               if ($self->{'level'} == $top->[0]) {
                        my $obj = $self->{'obj'};
 
                        # did we just finish a clone operation?
@@ -182,7 +185,7 @@ sub end_element {
                        }
 
                        $self->SUPER::end_element($data);
-                       $self->{'obj'} = $top->[2];
+                       $self->{'obj'} = $top->[1];
                        pop @$stack;
                        --$self->{'level'};
                        return;