You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.5 KiB
85 lines
1.5 KiB
package ANTLR::Runtime::ANTLRFileStream;
|
|
|
|
use Carp;
|
|
use Readonly;
|
|
|
|
use Moose;
|
|
|
|
extends 'ANTLR::Runtime::ANTLRStringStream';
|
|
|
|
has 'file_name' => (
|
|
is => 'ro',
|
|
isa => 'Str',
|
|
required => 1,
|
|
);
|
|
|
|
sub BUILDARGS {
|
|
my ($class, @args) = @_;
|
|
my $args = $class->SUPER::BUILDARGS(@args);
|
|
|
|
my $file_name = $args->{file_name};
|
|
if (!defined $file_name) {
|
|
return;
|
|
}
|
|
|
|
my $fh;
|
|
my $encoding = $args->{encoding};
|
|
if (defined $encoding) {
|
|
open $fh, "<:encoding($encoding)", $file_name
|
|
or croak "Can't open $file_name: $!";
|
|
}
|
|
else {
|
|
open $fh, '<', $file_name
|
|
or croak "Can't open $file_name: $!";
|
|
}
|
|
|
|
my $content;
|
|
{
|
|
local $/;
|
|
$content = <$fh>;
|
|
}
|
|
close $fh or carp "Can't close $fh: $!";
|
|
|
|
$args->{input} = $content;
|
|
|
|
return $args;
|
|
}
|
|
|
|
sub load {
|
|
my ($self, $file_name, $encoding) = @_;
|
|
|
|
if (!defined $file_name) {
|
|
return;
|
|
}
|
|
|
|
my $fh;
|
|
if (defined $encoding) {
|
|
open $fh, "<:encoding($encoding)", $file_name
|
|
or croak "Can't open $file_name: $!";
|
|
}
|
|
else {
|
|
open $fh, '<', $file_name
|
|
or croak "Can't open $file_name: $!";
|
|
}
|
|
|
|
my $content;
|
|
{
|
|
local $/;
|
|
$content = <$fh>;
|
|
}
|
|
close $fh or carp "Can't close $fh: $!";
|
|
|
|
$self->input($content);
|
|
return;
|
|
}
|
|
|
|
sub get_source_name {
|
|
my ($self) = @_;
|
|
return $self->file_name;
|
|
}
|
|
|
|
no Moose;
|
|
__PACKAGE__->meta->make_immutable();
|
|
1;
|
|
__END__
|