--- trunk/lib/WebPAC/Parser.pm 2006/09/24 17:49:05 687 +++ trunk/lib/WebPAC/Parser.pm 2006/09/24 19:00:56 690 @@ -17,11 +17,11 @@ =head1 VERSION -Version 0.01 +Version 0.02 =cut -our $VERSION = '0.01'; +our $VERSION = '0.02'; =head1 SYNOPSIS @@ -54,13 +54,15 @@ my $source; $self->{config}->iterate_inputs( sub { - my $input = shift; + my ($input, $database) = @_; my $path = $input->{normalize}->{path} || return; my $full = $self->{base_path} ? $self->{base_path} . '/' . $path : $path; $log->logdie("normalization input $full doesn't exist") unless (-e $full); my $s = read_file( $full ) || $log->logdie("can't read $full: $!"); - $log->debug("adding $path to parser [",length($s)," bytes]"); + my $input_name = $input->{name} || $log->logdie("can't deduce name of input: ", dump( $input )); + $log->debug("$database/$input_name: adding $path to parser [",length($s)," bytes]"); $source .= $s; + $self->{valid_inputs}->{$database}->{$input_name}++; } ); $log->debug("collected ", length($source), " bytes of source"); @@ -81,6 +83,8 @@ $log->logdie('no source found in object') unless ($self->{source}); + $log->debug("valid_inputs = ", dump( $self->{valid_inputs} )); + my $Document = PPI::Document->new( \$self->{source} ) || $log->logdie("can't parse source:\n", $self->{source}); $Document->prune('PPI::Token::Whitespace'); @@ -89,6 +93,13 @@ # Find all the named subroutines my $eval_create; + my @errors; + + sub error { + my $msg = shift || $log->logconfess("error without message?"); + push @errors, $msg; + return ''; + } $Document->find( sub { my ($Document,$Element) = @_; @@ -150,7 +161,9 @@ $log->debug("create: $create"); - $create =~ s/\s+/ /gs; + return error("invalid database $e[3]" ) unless $self->valid_database( $e[3] ); + return error("invalid input $e[5] of database $e[3]", ) unless $self->valid_database_input( $e[3], $e[5] ); + $eval_create->{ $e[3] }->{ $e[5] } .= $create; if ($#e < 10) { @@ -175,9 +188,42 @@ $Dumper->print; } + $log->error("Parser errors: ", join("\n",@errors) ) if (@errors); + return 1; } +=head2 valid_database + + my $ok = $parse->valid_database('key'); + +=cut + +sub valid_database { + my $self = shift; + + my $database = shift || return; + $database =~ s/['"]//g; + + return defined($self->{valid_inputs}->{$database}); +} + +=head2 valid_database_input + + my $ok = $parse->valid_database('database_key','input_name'); + +=cut + +sub valid_database_input { + my $self = shift; + + my ($database,$input) = @_; + $database =~ s/['"]//g; + $input =~ s/['"]//g; + + return defined($self->{valid_inputs}->{$database}->{$input}); +} + =head1 AUTHOR Dobrica Pavlinusic, C<< >>