use
vars
qw(@ISA @EXPORT_OK)
;
@ISA
=
qw(Exporter)
;
@EXPORT_OK
=
qw(
EOF
BUFFER
LINE
COLUMN
ENCODING
XML_VERSION
)
;
if
($] >= 5.007002) {
}
else
{
}
sub
new {
my
$class
=
shift
;
my
$thing
=
shift
;
if
(
ref
(
$thing
) && UNIVERSAL::isa(
$thing
,
'IO::Handle'
)) {
return
XML::SAX::PurePerl::Reader::Stream->new(
$thing
)->init;
}
my
$ioref
;
if
(
tied
(
$thing
)) {
my
$class
=
ref
(
$thing
);
no
strict
'refs'
;
$ioref
=
$thing
if
defined
&{
"${class}::TIEHANDLE"
};
}
else
{
eval
{
$ioref
= *{
$thing
}{IO};
};
undef
$@;
}
if
(
$ioref
) {
return
XML::SAX::PurePerl::Reader::Stream->new(
$thing
)->init;
}
if
(
$thing
=~ /</) {
return
XML::SAX::PurePerl::Reader::String->new(
$thing
)->init;
}
return
XML::SAX::PurePerl::Reader::URI->new(
$thing
)->init;
}
sub
init {
my
$self
=
shift
;
$self
->[LINE] = 1;
$self
->[COLUMN] = 1;
$self
->read_more;
return
$self
;
}
sub
data {
my
(
$self
,
$min_length
) = (
@_
, 1);
if
(
length
(
$self
->[BUFFER]) <
$min_length
) {
$self
->read_more;
}
return
$self
->[BUFFER];
}
sub
match {
my
(
$self
,
$char
) =
@_
;
my
$data
=
$self
->data;
if
(
substr
(
$data
, 0, 1) eq
$char
) {
$self
->move_along(1);
return
1;
}
return
0;
}
sub
public_id {
my
$self
=
shift
;
@_
and
$self
->[PUBLIC_ID] =
shift
;
$self
->[PUBLIC_ID];
}
sub
system_id {
my
$self
=
shift
;
@_
and
$self
->[SYSTEM_ID] =
shift
;
$self
->[SYSTEM_ID];
}
sub
line {
shift
->[LINE];
}
sub
column {
shift
->[COLUMN];
}
sub
get_encoding {
my
$self
=
shift
;
return
$self
->[ENCODING];
}
sub
get_xml_version {
my
$self
=
shift
;
return
$self
->[XML_VERSION];
}
1;