107 |
return $nr; |
return $nr; |
108 |
} |
} |
109 |
|
|
110 |
=head2 parse_lookup |
=head2 parse_lookups |
111 |
|
|
112 |
$parser->parse_lookups($database,$input); |
$parser->parse_lookups($database,$input); |
113 |
|
|
127 |
|
|
128 |
$log->logdie("no source found for database $database input $input path $path") unless ($source); |
$log->logdie("no source found for database $database input $input path $path") unless ($source); |
129 |
|
|
130 |
$log->info("parsing lookups for $database/$input in $path"); |
$log->info("parsing lookups for $database/$input from $path"); |
131 |
|
|
132 |
my $Document = PPI::Document->new( \$source ) || $log->logdie("can't parse source:\n", $self->{source}); |
my $Document = PPI::Document->new( \$source ) || $log->logdie("can't parse source:\n", $self->{source}); |
133 |
|
|
136 |
|
|
137 |
# Find all the named subroutines |
# Find all the named subroutines |
138 |
|
|
|
my $eval_create; |
|
139 |
$self->{_lookup_errors} = (); |
$self->{_lookup_errors} = (); |
140 |
|
|
141 |
sub _lookup_error { |
sub _lookup_error { |
209 |
return $self->_lookup_error("invalid database $e[3] in $path" ) unless $self->valid_database( $e[3] ); |
return $self->_lookup_error("invalid database $e[3] in $path" ) unless $self->valid_database( $e[3] ); |
210 |
return $self->_lookup_error("invalid input $e[5] of database $e[3] in $path", ) unless $self->valid_database_input( $e[3], $e[5] ); |
return $self->_lookup_error("invalid input $e[5] of database $e[3] in $path", ) unless $self->valid_database_input( $e[3], $e[5] ); |
211 |
|
|
212 |
$eval_create->{ $e[3] }->{ $e[5] } .= $create; |
$self->add_lookup_create( $e[3], $e[5], $create ); |
213 |
|
|
214 |
if ($#e < 10) { |
if ($#e < 10) { |
215 |
$e[8]->insert_after( $e[8]->clone ); |
$e[8]->insert_after( $e[8]->clone ); |
225 |
$log->debug(">>> ", $Element->snext_sibling); |
$log->debug(">>> ", $Element->snext_sibling); |
226 |
}); |
}); |
227 |
|
|
228 |
$log->info("create: ", dump($eval_create) ); |
my $normalize_source = $Document->serialize; |
229 |
$log->info("lookup: ", $Document->serialize ); |
$log->debug("create: ", dump($self->{_lookup_create}) ); |
230 |
|
$log->debug("normalize: $normalize_source"); |
231 |
|
|
232 |
|
$self->{_normalize_source}->{$database}->{$input} = $normalize_source; |
233 |
|
|
234 |
if ($self->{debug}) { |
if ($self->{debug}) { |
235 |
my $Dumper = PPI::Dumper->new( $Document ); |
my $Dumper = PPI::Dumper->new( $Document ); |
236 |
$Dumper->print; |
$Dumper->print; |
237 |
} |
} |
238 |
|
|
239 |
$log->error("Parser errors: ", join("\n",@{ $self->{_lookup_errors} }) ) if ($self->{_lookup_errors}); |
$log->error("Parser errors:\n", join("\n",@{ $self->{_lookup_errors} }) ) if ($self->{_lookup_errors}); |
240 |
|
|
241 |
return 1; |
return 1; |
242 |
} |
} |
243 |
|
|
244 |
|
=head2 add_lookup_create |
245 |
|
|
246 |
|
$parse->add_lookup_create($database,$input,$source); |
247 |
|
|
248 |
|
=cut |
249 |
|
|
250 |
|
sub add_lookup_create { |
251 |
|
my $self = shift; |
252 |
|
my ($database,$input,$source) = @_; |
253 |
|
$self->{_lookup_create}->{$database}->{$input} .= $source; |
254 |
|
} |
255 |
|
|
256 |
|
|
257 |
=head2 valid_database |
=head2 valid_database |
258 |
|
|
259 |
my $ok = $parse->valid_database('key'); |
my $ok = $parse->valid_database('key'); |