1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpackage ANTLR::Runtime::ANTLRFileStream; 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse Carp; 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse Readonly; 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruveruse Moose; 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverextends 'ANTLR::Runtime::ANTLRStringStream'; 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhas 'file_name' => ( 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver is => 'ro', 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver isa => 'Str', 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver required => 1, 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver); 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub BUILDARGS { 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my ($class, @args) = @_; 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my $args = $class->SUPER::BUILDARGS(@args); 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my $file_name = $args->{file_name}; 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (!defined $file_name) { 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return; 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my $fh; 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my $encoding = $args->{encoding}; 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (defined $encoding) { 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver open $fh, "<:encoding($encoding)", $file_name 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver or croak "Can't open $file_name: $!"; 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else { 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver open $fh, '<', $file_name 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver or croak "Can't open $file_name: $!"; 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my $content; 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver local $/; 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver $content = <$fh>; 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver close $fh or carp "Can't close $fh: $!"; 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver $args->{input} = $content; 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return $args; 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub load { 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my ($self, $file_name, $encoding) = @_; 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (!defined $file_name) { 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return; 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my $fh; 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (defined $encoding) { 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver open $fh, "<:encoding($encoding)", $file_name 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver or croak "Can't open $file_name: $!"; 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver else { 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver open $fh, '<', $file_name 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver or croak "Can't open $file_name: $!"; 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my $content; 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver { 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver local $/; 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver $content = <$fh>; 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver close $fh or carp "Can't close $fh: $!"; 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver $self->input($content); 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return; 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruversub get_source_name { 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver my ($self) = @_; 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return $self->file_name; 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverno Moose; 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver__PACKAGE__->meta->make_immutable(); 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1; 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver__END__ 85