diff options
Diffstat (limited to 'Master/tlpkg/tlperl.straw/lib/XML/LibXML/SAX.pm')
-rwxr-xr-x | Master/tlpkg/tlperl.straw/lib/XML/LibXML/SAX.pm | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl.straw/lib/XML/LibXML/SAX.pm b/Master/tlpkg/tlperl.straw/lib/XML/LibXML/SAX.pm new file mode 100755 index 00000000000..8877240b5e6 --- /dev/null +++ b/Master/tlpkg/tlperl.straw/lib/XML/LibXML/SAX.pm @@ -0,0 +1,97 @@ +# $Id: SAX.pm 785 2009-07-16 14:17:46Z pajas $ +# +# This is free software, you may use it and distribute it under the same terms as +# Perl itself. +# +# Copyright 2001-2003 AxKit.com Ltd., 2002-2006 Christian Glahn, 2006-2009 Petr Pajas +# +# + +package XML::LibXML::SAX; + +use strict; +use vars qw($VERSION @ISA); + +$VERSION = "1.70"; # VERSION TEMPLATE: DO NOT CHANGE + +use XML::LibXML; +use XML::SAX::Base; + +use base qw(XML::SAX::Base); + +use Carp; +use IO::File; + +sub CLONE_SKIP { + return $XML::LibXML::__threads_shared ? 0 : 1; +} + +sub _parse_characterstream { + my ( $self, $fh ) = @_; + # this my catch the xml decl, so the parser won't get confused about + # a possibly wrong encoding. + croak( "not implemented yet" ); +} + +sub _parse_bytestream { + my ( $self, $fh ) = @_; + $self->{ParserOptions}{LibParser} = XML::LibXML->new; + $self->{ParserOptions}{ParseFunc} = \&XML::LibXML::parse_fh; + $self->{ParserOptions}{ParseFuncParam} = $fh; + $self->_parse; + return $self->end_document({}); +} + +sub _parse_string { + my ( $self, $string ) = @_; +# $self->{ParserOptions}{LibParser} = XML::LibXML->new; + $self->{ParserOptions}{LibParser} = XML::LibXML->new() unless defined $self->{ParserOptions}{LibParser}; + $self->{ParserOptions}{ParseFunc} = \&XML::LibXML::parse_string; + $self->{ParserOptions}{ParseFuncParam} = $string; + $self->_parse; + return $self->end_document({}); +} + +sub _parse_systemid { + my $self = shift; + $self->{ParserOptions}{LibParser} = XML::LibXML->new; + $self->{ParserOptions}{ParseFunc} = \&XML::LibXML::parse_file; + $self->{ParserOptions}{ParseFuncParam} = shift; + $self->_parse; + return $self->end_document({}); +} + +sub parse_chunk { + my ( $self, $chunk ) = @_; + $self->{ParserOptions}{LibParser} = XML::LibXML->new; + $self->{ParserOptions}{ParseFunc} = \&XML::LibXML::parse_xml_chunk; + $self->{ParserOptions}{LibParser}->{IS_FILTER}=1; # a hack to prevent parse_xml_chunk from issuing end_document + $self->{ParserOptions}{ParseFuncParam} = $chunk; + $self->_parse; + return; +} + +sub _parse { + my $self = shift; + my $args = bless $self->{ParserOptions}, ref($self); + + $args->{LibParser}->set_handler( $self ); + eval { + $args->{ParseFunc}->($args->{LibParser}, $args->{ParseFuncParam}); + }; + + if ( $args->{LibParser}->{SAX}->{State} == 1 ) { + croak( "SAX Exception not implemented, yet; Data ended before document ended\n" ); + } + + # break a possible circular reference + $args->{LibParser}->set_handler( undef ); + if ( $@ ) { + croak $@; + } + return; +} + + +1; + |