r10467 - in /branches/upstream/libxml-filter-saxt-perl: ./ current/ current/Changes current/MANIFEST current/Makefile.PL current/README current/SAXT.pm current/test.pl
vdanjean at users.alioth.debian.org
vdanjean at users.alioth.debian.org
Sat Dec 1 12:29:06 UTC 2007
Author: vdanjean
Date: Sat Dec 1 12:29:06 2007
New Revision: 10467
URL: http://svn.debian.org/wsvn/?sc=1&rev=10467
Log:
[svn-inject] Installing original source of libxml-filter-saxt-perl
Added:
branches/upstream/libxml-filter-saxt-perl/
branches/upstream/libxml-filter-saxt-perl/current/
branches/upstream/libxml-filter-saxt-perl/current/Changes
branches/upstream/libxml-filter-saxt-perl/current/MANIFEST
branches/upstream/libxml-filter-saxt-perl/current/Makefile.PL
branches/upstream/libxml-filter-saxt-perl/current/README
branches/upstream/libxml-filter-saxt-perl/current/SAXT.pm
branches/upstream/libxml-filter-saxt-perl/current/test.pl
Added: branches/upstream/libxml-filter-saxt-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-filter-saxt-perl/current/Changes?rev=10467&op=file
==============================================================================
--- branches/upstream/libxml-filter-saxt-perl/current/Changes (added)
+++ branches/upstream/libxml-filter-saxt-perl/current/Changes Sat Dec 1 12:29:06 2007
@@ -1,0 +1,4 @@
+Revision history for Perl extension XML::Filter::SAXT.
+
+0.01 Sun Aug 26 10:50:49 2001
+ - Moved from libxml-enno into separate distribution.
Added: branches/upstream/libxml-filter-saxt-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-filter-saxt-perl/current/MANIFEST?rev=10467&op=file
==============================================================================
--- branches/upstream/libxml-filter-saxt-perl/current/MANIFEST (added)
+++ branches/upstream/libxml-filter-saxt-perl/current/MANIFEST Sat Dec 1 12:29:06 2007
@@ -1,0 +1,6 @@
+Changes
+Makefile.PL
+MANIFEST
+README
+SAXT.pm
+test.pl
Added: branches/upstream/libxml-filter-saxt-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-filter-saxt-perl/current/Makefile.PL?rev=10467&op=file
==============================================================================
--- branches/upstream/libxml-filter-saxt-perl/current/Makefile.PL (added)
+++ branches/upstream/libxml-filter-saxt-perl/current/Makefile.PL Sat Dec 1 12:29:06 2007
@@ -1,0 +1,7 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+ 'NAME' => 'XML::Filter::SAXT',
+ 'VERSION_FROM' => 'SAXT.pm', # finds $VERSION
+);
Added: branches/upstream/libxml-filter-saxt-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-filter-saxt-perl/current/README?rev=10467&op=file
==============================================================================
--- branches/upstream/libxml-filter-saxt-perl/current/README (added)
+++ branches/upstream/libxml-filter-saxt-perl/current/README Sat Dec 1 12:29:06 2007
@@ -1,0 +1,28 @@
+XML::Filter::SAXT version 0.01
+==============================
+
+DESCRIPTION
+
+SAXT is like the Unix 'tee' command in that it multiplexes the input stream to several output streams. In this case, the
+input stream is a PerlSAX event producer (like XML::Parser::PerlSAX) and the output streams are PerlSAX handlers or
+filters.
+
+The SAXT constructor takes a list of hash references. Each hash specifies an output handler. The hash keys can be:
+DocumentHandler, DTDHandler, EntityResolver or Handler, where Handler is a combination of the previous three and
+acts as the default handler. E.g. if DocumentHandler is not specified, it will try to use Handler.
+
+INSTALLATION
+
+To install this module type the following:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+COPYRIGHT AND LICENCE
+
+Copyright (c) 1999,2000 Enno Derksen
+All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
Added: branches/upstream/libxml-filter-saxt-perl/current/SAXT.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-filter-saxt-perl/current/SAXT.pm?rev=10467&op=file
==============================================================================
--- branches/upstream/libxml-filter-saxt-perl/current/SAXT.pm (added)
+++ branches/upstream/libxml-filter-saxt-perl/current/SAXT.pm Sat Dec 1 12:29:06 2007
@@ -1,0 +1,190 @@
+#
+# To do:
+# - later: ErrorHandler, Locale?
+
+package XML::Filter::SAXT;
+use strict;
+
+use vars qw( $VERSION %SAX_HANDLERS );
+$VERSION = 0.01;
+
+%SAX_HANDLERS = ( DocumentHandler =>
+ [ "start_document",
+ "end_document",
+ "start_element",
+ "end_element",
+ "characters",
+ "processing_instruction",
+ "comment",
+ "start_cdata",
+ "end_cdata",
+ "entity_reference",
+ "set_document_locator" # !! passes {Locator=>$perlsax}
+ ],
+
+ DTDHandler =>
+ [ "notation_decl",
+ "unparsed_entity_decl",
+ "entity_decl",
+ "element_decl",
+ "attlist_decl",
+ "doctype_decl",
+ "xml_decl"
+ ],
+
+ EntityResolver =>
+ [ "resolve_entity" ]);
+
+#
+# Usage:
+#
+# $saxt = new XML::Filter::SAXT ( { Handler => $out0 },
+# { DocumentHandler => $out1 },
+# { DTDHandler => $out3,
+# Handler => $out4
+# }
+# );
+#
+# $perlsax = new XML::Parser::PerlSAX ( Handler => $saxt );
+# $perlsax->parse ( [OPTIONS] );
+#
+sub new
+{
+ my ($class, @out) = @_;
+
+ my $self = bless { Out => \@out }, $class;
+
+ for (my $i = 0; $i < @out; $i++)
+ {
+ for my $handler (keys %SAX_HANDLERS)
+ {
+ my $callbacks = $SAX_HANDLERS{$handler};
+ my $h = ($self->{Out}->[$i]->{$handler} ||= $self->{Out}->[$i]->{Handler});
+ next unless defined $h;
+
+ for my $cb (@$callbacks)
+ {
+ if (UNIVERSAL::can ($h, $cb))
+ {
+ $self->{$cb} .= "\$out->[$i]->{$handler}->$cb (\@_);\n";
+ }
+ }
+ }
+ }
+
+ for my $handler (keys %SAX_HANDLERS)
+ {
+ my $callbacks = $SAX_HANDLERS{$handler};
+ for my $cb (@$callbacks)
+ {
+ my $code = $self->{$cb};
+ if (defined $code)
+ {
+ $self->{$cb} =
+ eval "sub { my \$out = shift->{Out}; $code }";
+ }
+ else
+ {
+ $self->{$cb} = \&noop;
+ }
+ }
+ }
+ return $self;
+}
+
+sub noop
+{
+ # does nothing
+}
+
+for my $cb (map { @{ $_ } } values %SAX_HANDLERS)
+{
+ eval "sub $cb { shift->{$cb}->(\@_); }";
+}
+
+1; # package return code
+
+__END__
+
+=head1 NAME
+
+XML::Filter::SAXT - Replicates SAX events to several SAX event handlers
+
+=head1 SYNOPSIS
+
+ $saxt = new XML::Filter::SAXT ( { Handler => $out1 },
+ { DocumentHandler => $out2 },
+ { DTDHandler => $out3,
+ Handler => $out4
+ }
+ );
+
+ $perlsax = new XML::Parser::PerlSAX ( Handler => $saxt );
+ $perlsax->parse ( [OPTIONS] );
+
+=head1 DESCRIPTION
+
+SAXT is like the Unix 'tee' command in that it multiplexes the input stream
+to several output streams. In this case, the input stream is a PerlSAX event
+producer (like XML::Parser::PerlSAX) and the output streams are PerlSAX
+handlers or filters.
+
+The SAXT constructor takes a list of hash references. Each hash specifies
+an output handler. The hash keys can be: DocumentHandler, DTDHandler,
+EntityResolver or Handler, where Handler is a combination of the previous three
+and acts as the default handler.
+E.g. if DocumentHandler is not specified, it will try to use Handler.
+
+=head2 EXAMPLE
+
+In this example we use L<XML::Parser::PerlSAX> to parse an XML file and
+to invoke the PerlSAX callbacks of our SAXT object. The SAXT object then
+forwards the callbacks to L<XML::Checker>, which will 'die' if it encounters
+an error, and to L<XML::Handler::BuildDOM>, which will store the XML in an
+L<XML::DOM::Document>.
+
+ use XML::Parser::PerlSAX;
+ use XML::Filter::SAXT;
+ use XML::Handler::BuildDOM;
+ use XML::Checker;
+
+ my $checker = new XML::Checker;
+ my $builder = new XML::Handler::BuildDOM (KeepCDATA => 1);
+ my $tee = new XML::Filter::SAXT ( { Handler => $checker },
+ { Handler => $builder } );
+
+ my $parser = new XML::Parser::PerlSAX (Handler => $tee);
+ eval
+ {
+ # This is how you set the error handler for XML::Checker
+ local $XML::Checker::FAIL = \&my_fail;
+
+ my $dom_document = $parser->parsefile ("file.xml");
+ ... your code here ...
+ };
+ if ($@)
+ {
+ # Either XML::Parser::PerlSAX threw an exception (bad XML)
+ # or XML::Checker found an error and my_fail died.
+ ... your error handling code here ...
+ }
+
+ # XML::Checker error handler
+ sub my_fail
+ {
+ my $code = shift;
+ die XML::Checker::error_string ($code, @_)
+ if $code < 200; # warnings and info messages are >= 200
+ }
+
+=head1 CAVEATS
+
+This is still alpha software.
+Package names and interfaces are subject to change.
+
+=head1 AUTHOR
+
+Enno Dersken is the original author.
+
+Send bug reports, hints, tips, suggestions to T.J. Mather at
+<F<tjmather at tjmather.com>>.
Added: branches/upstream/libxml-filter-saxt-perl/current/test.pl
URL: http://svn.debian.org/wsvn/branches/upstream/libxml-filter-saxt-perl/current/test.pl?rev=10467&op=file
==============================================================================
--- branches/upstream/libxml-filter-saxt-perl/current/test.pl (added)
+++ branches/upstream/libxml-filter-saxt-perl/current/test.pl Sat Dec 1 12:29:06 2007
@@ -1,0 +1,17 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+# change 'tests => 1' to 'tests => last_test_to_print';
+
+use Test;
+BEGIN { plan tests => 1 };
+use XML::Filter::SAXT;
+ok(1); # If we made it this far, we're ok.
+
+#########################
+
+# Insert your test code below, the Test module is use()ed here so read
+# its man page ( perldoc Test ) for help writing this test script.
+
More information about the Pkg-perl-cvs-commits
mailing list