]> git.sesse.net Git - xml-template/commitdiff
Find out how we're going to handle includes. Some comment updates. Add
authorsgunderson@bigfoot.com <>
Thu, 1 Mar 2007 12:23:50 +0000 (13:23 +0100)
committersgunderson@bigfoot.com <>
Thu, 1 Mar 2007 12:23:50 +0000 (13:23 +0100)
(failing) include test.

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

index 5edeea69f535b3af9f669310834037709b24a5ee..10714a435bdbb7faf03fb7b1e77d39916ef88a0c 100644 (file)
@@ -3,7 +3,7 @@
 #
 # SAX version of XML::Template. Advantages over DOM: Doesn't have to load
 # the entire thing into memory, and you can chain filters. Disadvantages:
-# Slightly kludgier interface.
+# Slightly kludgier interface, and you won't get a DOM tree out.
 #
 # Differences from the DOM version:
 # 
 #   in the stream, usually between a parser and a writer (ie.
 #   parser -> XML::TemplateSAX::Handler -> writer). process_file works as
 #   before, but it returns a _string_, not a DOM tree.
-# - You can no longer insert a DOM tree. Instead, what you have is -- FIXME:
-#   figure out this :-)
+# - You can no longer insert a DOM tree, naturally. Instead, you can set up
+#   an XML::TemplateSAX::Buffer, let it gobble up your data, and send it
+#   in the way you'd insert a DOM tree. process_file_to_buffer does this
+#   transparently for you, returning a buffer you can give in.
 #
 
 use strict;
@@ -32,7 +34,6 @@ sub process_file {
        my ($writer, $cleaner, $filter, $parser);
        my $str = '';
 
-       # FIXME: hardcoding expat = not good?
        $writer = XML::SAX::Writer->new(Output => \$str);
 
        if ($clean) {
@@ -42,10 +43,33 @@ sub process_file {
                $filter = XML::TemplateSAX::Handler->new(Handler => $writer, Content => $obj);
        }
 
+       # FIXME: hardcoding expat = not good?
        $parser = XML::SAX::Expat->new(Handler => $filter);
        $parser->parse_file($filename);
 
        return $str;
 }
 
+sub process_file_to_buffer {
+       my ($filename, $obj, $clean) = @_;
+       $clean = 1 unless (defined($clean));
+
+       my ($buffer, $cleaner, $filter, $parser);
+
+       $buffer = XML::TemplateSAX::Buffer->new;
+
+       if ($clean) {
+               $cleaner = XML::TemplateSAX::Cleaner->new(Handler => $buffer, Content => $obj);
+               $filter = XML::TemplateSAX::Handler->new(Handler => $cleaner, Content => $obj);
+       } else {
+               $filter = XML::TemplateSAX::Handler->new(Handler => $buffer, Content => $obj);
+       }
+
+       # FIXME: hardcoding expat = not good?
+       $parser = XML::SAX::Expat->new(Handler => $filter);
+       $parser->parse_file($filename);
+
+       return $buffer;
+}
+
 1;
diff --git a/perl-sax/include.pl b/perl-sax/include.pl
new file mode 100644 (file)
index 0000000..287351b
--- /dev/null
@@ -0,0 +1,12 @@
+#! /usr/bin/perl
+use XML::TemplateSAX;
+
+my $doc = XML::TemplateSAX::process_file_to_buffer('../xml/included.xml', {
+       'color' => 'red'
+}, 0);
+my $master = XML::TemplateSAX::process_file('../xml/master.xml', {
+       'title' => 'Main HTML title',
+       'h1' => 'Nice heading here',
+       'contents' => $doc
+});
+print $master;