use XML::SAX::Writer;
use XML::TemplateSAX::Buffer;
use XML::TemplateSAX::Cleaner;
+use XML::TemplateSAX::Deferred;
use XML::TemplateSAX::Handler;
package XML::TemplateSAX;
-sub process_file {
- my ($filename, $obj, $clean) = @_;
+sub process_file_to_handler {
+ my ($filename, $handler, $obj, $clean) = @_;
$clean = 1 unless (defined($clean));
- my ($writer, $cleaner, $filter, $parser);
- my $str = '';
-
- $writer = XML::SAX::Writer->new(Output => \$str);
+ my ($cleaner, $filter, $parser);
if ($clean) {
- $cleaner = XML::TemplateSAX::Cleaner->new(Handler => $writer);
+ $cleaner = XML::TemplateSAX::Cleaner->new(Handler => $handler);
$filter = XML::TemplateSAX::Handler->new(Handler => $cleaner, Content => $obj);
} else {
- $filter = XML::TemplateSAX::Handler->new(Handler => $writer, Content => $obj);
+ $filter = XML::TemplateSAX::Handler->new(Handler => $handler, 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 {
+sub process_file {
my ($filename, $obj, $clean) = @_;
- $clean = 1 unless (defined($clean));
- my ($buffer, $cleaner, $filter, $parser);
+ my $str = '';
+ my $writer = XML::SAX::Writer->new(Output => \$str);
- $buffer = XML::TemplateSAX::Buffer->new;
+ process_file_to_handler($filename, $writer, $obj, $clean);
- if ($clean) {
- $cleaner = XML::TemplateSAX::Cleaner->new(Handler => $buffer);
- $filter = XML::TemplateSAX::Handler->new(Handler => $cleaner, Content => $obj);
- } else {
- $filter = XML::TemplateSAX::Handler->new(Handler => $buffer, Content => $obj);
- }
+ return $str;
+}
- # FIXME: hardcoding expat = not good?
- $parser = XML::SAX::Expat->new(Handler => $filter);
- $parser->parse_file($filename);
+sub process_file_to_buffer {
+ my ($filename, $obj, $clean) = @_;
+
+ my $buffer = XML::TemplateSAX::Buffer->new;
+ process_file_to_handler($filename, $buffer, $obj, $clean);
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) = @_;