63 |
|
|
64 |
$self->read_sources; |
$self->read_sources; |
65 |
|
|
|
$self->{config}->iterate_inputs( sub { |
|
|
my ($input, $database) = @_; |
|
|
return unless $self->valid_database_input($database, _input_name($input)); |
|
|
$self->parse_lookups($database, _input_name($input)); |
|
|
} ); |
|
|
|
|
66 |
$self ? return $self : return undef; |
$self ? return $self : return undef; |
67 |
} |
} |
68 |
|
|
74 |
|
|
75 |
=cut |
=cut |
76 |
|
|
|
sub _input_name($); |
|
|
|
|
77 |
sub read_sources { |
sub read_sources { |
78 |
my $self = shift; |
my $self = shift; |
79 |
|
|
81 |
|
|
82 |
my $nr = 0; |
my $nr = 0; |
83 |
|
|
84 |
|
my @lookups; |
85 |
|
|
86 |
$self->{config}->iterate_inputs( sub { |
$self->{config}->iterate_inputs( sub { |
87 |
my ($input, $database) = @_; |
my ($input, $database) = @_; |
88 |
|
|
89 |
my @normalize; |
$log->debug("database: $database input = ", dump($input)); |
|
|
|
|
if (ref($input->{normalize}) eq 'ARRAY') { |
|
|
@normalize = @{ $input->{normalize} }; |
|
|
} else { |
|
|
@normalize = ( $input->{normalize} ); |
|
|
} |
|
90 |
|
|
91 |
foreach my $normalize (@normalize) { |
foreach my $normalize (@{ $input->{normalize} }) { |
92 |
|
|
93 |
my $path = $normalize->{path}; |
my $path = $normalize->{path}; |
94 |
return unless($path); |
return unless($path); |
102 |
|
|
103 |
$log->debug("$database/$input_name: adding $path"); |
$log->debug("$database/$input_name: adding $path"); |
104 |
|
|
105 |
$self->{valid_inputs}->{$database}->{$input_name} = { |
$self->{valid_inputs}->{$database}->{$input_name}++; |
|
source => $s, |
|
|
path => $full, |
|
|
usage => 0, |
|
|
} unless defined($self->{valid_inputs}->{$database}->{$input_name}); |
|
106 |
|
|
107 |
$self->{valid_inputs}->{$database}->{$input_name}->{usage}++; |
push @lookups, sub { |
108 |
|
$self->parse_lookups( $database, $input_name, $full, $s ); |
109 |
|
}; |
110 |
|
|
111 |
$nr++; |
$nr++; |
112 |
} |
} |
114 |
|
|
115 |
$log->debug("found $nr source files"); |
$log->debug("found $nr source files"); |
116 |
|
|
117 |
|
# parse all lookups |
118 |
|
$_->() foreach (@lookups); |
119 |
|
|
120 |
return $nr; |
return $nr; |
121 |
} |
} |
122 |
|
|
123 |
=head2 parse_lookups |
=head2 parse_lookups |
124 |
|
|
125 |
$parser->parse_lookups($database,$input); |
$parser->parse_lookups($database,$input,$path,$source); |
126 |
|
|
127 |
Called for each input by L</new> |
Called for each normalize source in each input by L</new> |
128 |
|
|
129 |
It will report invalid databases and inputs in error log after parsing. |
It will report invalid databases and inputs in error log after parsing. |
130 |
|
|
132 |
|
|
133 |
sub parse_lookups { |
sub parse_lookups { |
134 |
my $self = shift; |
my $self = shift; |
135 |
my ($database, $input) = @_; |
my ($database, $input, $path, $source) = @_; |
136 |
|
|
137 |
$input = _input_name($input); |
$input = _input_name($input); |
138 |
|
|
141 |
$log->logdie("invalid database $database" ) unless $self->valid_database( $database ); |
$log->logdie("invalid database $database" ) unless $self->valid_database( $database ); |
142 |
$log->logdie("invalid input $input of database $database", ) unless $self->valid_database_input( $database, $input ); |
$log->logdie("invalid input $input of database $database", ) unless $self->valid_database_input( $database, $input ); |
143 |
|
|
|
my $source = $self->{valid_inputs}->{$database}->{$input}->{source}; |
|
|
my $path = $self->{valid_inputs}->{$database}->{$input}->{path}; |
|
|
|
|
144 |
$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); |
145 |
|
|
146 |
$log->info("parsing lookups for $database/$input from $path"); |
$log->info("parsing lookups for $database/$input from $path (",length($source)," bytes)"); |
147 |
|
|
148 |
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}); |
149 |
|
|
229 |
$self->{_lookup_create}->{ _q($e[3]) }->{ _q($e[5]) }->{ _q($key) } .= $create; |
$self->{_lookup_create}->{ _q($e[3]) }->{ _q($e[5]) }->{ _q($key) } .= $create; |
230 |
|
|
231 |
|
|
232 |
if (defined( $self->{depends}->{ $database }->{ $input }->{ _q($e[3]) }->{ _q($e[5]) } )) { |
if (defined( $self->{depends}->{ $database }->{ $input }->{ _q($e[3]) }->{ _q($e[5]) }->{ $key } )) { |
233 |
my $dep_key = $self->{depends}->{ $database }->{ $input }->{ _q($e[3]) }->{ _q($e[5]) }; |
$log->warn("dependency of $database/$input on $e[3]/$e[5] with $key allready recorded"); |
|
$log->warn("dependency of $database/$input on $e[3]/$e[5] allready recorded as $dep_key, now changed to $key") if ($dep_key ne $key); |
|
234 |
} |
} |
235 |
|
|
236 |
# save this dependency |
# save this dependency |
237 |
$self->{depends}->{ $database }->{ $input }->{ _q($e[3]) }->{ _q($e[5]) } .= $key; |
$self->{depends}->{ $database }->{ $input }->{ _q($e[3]) }->{ _q($e[5]) }->{$key}++; |
238 |
|
|
239 |
if ($#e < 10) { |
if ($#e < 10) { |
240 |
$e[8]->insert_after( $e[8]->clone ); |
$e[8]->insert_after( $e[8]->clone ); |
318 |
my $self = shift; |
my $self = shift; |
319 |
my ($database,$input) = @_; |
my ($database,$input) = @_; |
320 |
$self->_get_logger->debug("depends($database,$input)"); |
$self->_get_logger->debug("depends($database,$input)"); |
321 |
return unless defined( $self->{depends}->{ _q($database) }->{ _q($input) } ); |
return unless ( |
322 |
|
defined( $self->{depends}->{ _q($database) } ) && |
323 |
|
defined( $self->{depends}->{ _q($database) }->{ _q($input) } ) |
324 |
|
); |
325 |
return $self->{depends}->{ _q($database) }->{ _q($input) }; |
return $self->{depends}->{ _q($database) }->{ _q($input) }; |
326 |
} |
} |
327 |
|
|