]> git.sesse.net Git - xml-template/commitdiff
Add deferred parsing for perl-sax. Doesn't work yet, though, so it uses
authorsgunderson@bigfoot.com <>
Thu, 1 Mar 2007 15:44:22 +0000 (16:44 +0100)
committersgunderson@bigfoot.com <>
Thu, 1 Mar 2007 15:44:22 +0000 (16:44 +0100)
a fugly workaround.

perl-sax/XML/TemplateSAX.pm
perl-sax/XML/TemplateSAX/Deferred.pm [new file with mode: 0644]
perl-sax/XML/TemplateSAX/Handler.pm
perl-sax/include.pl

index aba8c216af0a5e425ce86cc52612527166341c5d..04403976a3a4e1e902385ed4a9234744a1e842f1 100644 (file)
@@ -23,6 +23,7 @@ use XML::SAX::Expat;
 use XML::SAX::Writer;
 use XML::TemplateSAX::Buffer;
 use XML::TemplateSAX::Cleaner;
+use XML::TemplateSAX::Deferred;
 use XML::TemplateSAX::Handler;
 
 package XML::TemplateSAX;
@@ -32,7 +33,6 @@ sub process_file_to_handler {
        $clean = 1 unless (defined($clean));
 
        my ($cleaner, $filter, $parser);
-       my $str = '';
 
        if ($clean) {
                $cleaner = XML::TemplateSAX::Cleaner->new(Handler => $handler);
@@ -44,8 +44,6 @@ sub process_file_to_handler {
        # FIXME: hardcoding expat = not good?
        $parser = XML::SAX::Expat->new(Handler => $filter);
        $parser->parse_file($filename);
-
-       return $str;
 }
 
 sub process_file {
@@ -68,6 +66,12 @@ sub process_file_to_buffer {
        return $buffer;
 }
 
+sub process_file_to_placeholder {
+       my ($filename, $obj, $clean) = @_;
+
+       return XML::TemplateSAX::Deferred->new($filename, $obj, $clean);
+}
+
 sub alternate {
        my ($tag, $array, @elems) = @_;
 
diff --git a/perl-sax/XML/TemplateSAX/Deferred.pm b/perl-sax/XML/TemplateSAX/Deferred.pm
new file mode 100644 (file)
index 0000000..6ed9d3e
--- /dev/null
@@ -0,0 +1,31 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+use XML::TemplateSAX;
+use Data::Dumper;
+package XML::TemplateSAX::Deferred;
+
+sub new {
+       my $class = shift;
+       my ($filename, $obj, $clean) = @_;
+
+       my $self = {
+               filename => $filename,
+               obj => $obj,
+               clean => $clean
+       };
+       bless($self, $class);
+       return $self;
+}
+
+sub parse {
+       my ($self, $handler) = @_;
+
+       my $buf = XML::TemplateSAX::process_file_to_buffer($self->{'filename'}, $self->{'obj'}, $self->{'clean'});
+       $buf->replay($handler);
+       
+       # XML::TemplateSAX::process_file_to_handler($self->{'filename'}, $handler, $self->{'obj'}, $self->{'clean'});
+}
+
+1;
index b684c93fbf53b3f8011558d4f503623a27deb773..319883bfd6ad883938bbab26d64a42bc5d6352ed 100644 (file)
@@ -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;
                }
        }
index 287351b2773f6cf587462bedf4cc9286a9fbd577..dc26562d5ed286eb51b3935391ebb67483e5271b 100644 (file)
@@ -1,7 +1,7 @@
 #! /usr/bin/perl
 use XML::TemplateSAX;
 
-my $doc = XML::TemplateSAX::process_file_to_buffer('../xml/included.xml', {
+my $doc = XML::TemplateSAX::process_file_to_placeholder('../xml/included.xml', {
        'color' => 'red'
 }, 0);
 my $master = XML::TemplateSAX::process_file('../xml/master.xml', {