# $Id: Parser.pm,v 1.20 2003/10/05 09:34:40 clajac Exp $ package CPANXR::Parser; use IO::File; use Carp qw(carp croak); use strict; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw( CONN_INCLUDE CONN_FUNCTION CONN_METHOD CONN_DECL CONN_MACRO CONN_PACKAGE CONN_ISA CONN_REF CONN_LINK CONN_FILE ); our @EXPORT_OK = @EXPORT; our %EXPORT_TAGS = ( 'constants' => [@EXPORT_OK], ); use constant NO_FILE => 0; use constant XS_FILE => 1; use constant PM_FILE => 2; use constant CONN_INCLUDE => 0; use constant CONN_FUNCTION => 1; use constant CONN_METHOD => 2; use constant CONN_DECL => 3; use constant CONN_MACRO => 4; use constant CONN_PACKAGE => 5; use constant CONN_ISA => 6; use constant CONN_REF => 7; use constant CONN_LINK => 8; use constant CONN_FILE => 9; sub understands { my ($pkg, $path) = @_; if ($path =~ /\.xs$/) { return XS_FILE; } elsif ($path =~ /\.pm$/) { return PM_FILE; } return NO_FILE; } sub parse { my ($pkg, $file, %args) = @_; if ($file =~ /\.pm$/) { require CPANXR::Parser::Perl; return CPANXR::Parser::Perl->new($file, %args)->parse; } elsif ($file =~ /\.xs$/) { require CPANXR::Parser::XS; return CPANXR::Parser::XS->new($file, %args)->parse; } return 0; } sub slurp_file { my ($self, $file) = @_; $file = $self->{file} unless(defined $file); my $io = IO::File->new($file, "r"); croak("Can't open $file") unless(defined $io); my @source = <$io>; $io->close(); return @source; } sub connect { my ($self, $sym_id, $token, $offset, $package_id, $caller_id, $caller_sub_id, $type) = @_; CPANXR::Database->insert_connection($sym_id, $self->{file_id}, $token->{_cpanxr}->[0], $token->{_cpanxr}->[1] + $offset, $package_id, $caller_id, $caller_sub_id, $type); } 1;