<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># $Id$
#
# 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 = "2.0108"; # VERSION TEMPLATE: DO NOT CHANGE

use XML::LibXML;
use XML::SAX::Base;

use parent qw(XML::SAX::Base);

use Carp;
use IO::File;

sub CLONE_SKIP {
  return $XML::LibXML::__threads_shared ? 0 : 1;
}

sub set_feature {
	my ($self, $feat, $val) = @_;

	if ($feat eq 'http://xmlns.perl.org/sax/join-character-data') {
		$self-&gt;{JOIN_CHARACTERS} = $val;
		return 1;
	}

	shift(@_);
	return $self-&gt;SUPER::set_feature(@_);
}

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-&gt;{ParserOptions}{LibParser}      = XML::LibXML-&gt;new;
    $self-&gt;{ParserOptions}{ParseFunc}      = \&amp;XML::LibXML::parse_fh;
    $self-&gt;{ParserOptions}{ParseFuncParam} = $fh;
    $self-&gt;_parse;
    return $self-&gt;end_document({});
}

sub _parse_string {
    my ( $self, $string ) = @_;
#    $self-&gt;{ParserOptions}{LibParser}      = XML::LibXML-&gt;new;
    $self-&gt;{ParserOptions}{LibParser}      = XML::LibXML-&gt;new()     unless defined $self-&gt;{ParserOptions}{LibParser};
    $self-&gt;{ParserOptions}{ParseFunc}      = \&amp;XML::LibXML::parse_string;
    $self-&gt;{ParserOptions}{ParseFuncParam} = $string;
    $self-&gt;_parse;
    return $self-&gt;end_document({});
}

sub _parse_systemid {
    my $self = shift;
    $self-&gt;{ParserOptions}{LibParser}      = XML::LibXML-&gt;new;
    $self-&gt;{ParserOptions}{ParseFunc}      = \&amp;XML::LibXML::parse_file;
    $self-&gt;{ParserOptions}{ParseFuncParam} = shift;
    $self-&gt;_parse;
    return $self-&gt;end_document({});
}

sub parse_chunk {
    my ( $self, $chunk ) = @_;
    $self-&gt;{ParserOptions}{LibParser}      = XML::LibXML-&gt;new;
    $self-&gt;{ParserOptions}{ParseFunc}      = \&amp;XML::LibXML::parse_xml_chunk;
    $self-&gt;{ParserOptions}{LibParser}-&gt;{IS_FILTER}=1; # a hack to prevent parse_xml_chunk from issuing end_document
    $self-&gt;{ParserOptions}{ParseFuncParam} = $chunk;
    $self-&gt;_parse;
    return;
}

sub _parse {
    my $self = shift;
    my $args = bless $self-&gt;{ParserOptions}, ref($self);

    if (defined($self-&gt;{JOIN_CHARACTERS})) {
    	$args-&gt;{LibParser}-&gt;{JOIN_CHARACTERS} = $self-&gt;{JOIN_CHARACTERS};
    } else {
    	$args-&gt;{LibParser}-&gt;{JOIN_CHARACTERS} = 0;
    }

    $args-&gt;{LibParser}-&gt;set_handler( $self );
    eval {
      $args-&gt;{ParseFunc}-&gt;($args-&gt;{LibParser}, $args-&gt;{ParseFuncParam});
    };

    if ( $args-&gt;{LibParser}-&gt;{SAX}-&gt;{State} == 1 ) {
        croak( "SAX Exception not implemented, yet; Data ended before document ended\n" );
    }

    # break a possible circular reference
    $args-&gt;{LibParser}-&gt;set_handler( undef );
    if ( $@ ) {
        croak $@;
    }
    return;
}

1;

</pre></body></html>