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