--- trunk/lib/WebPAC/Lookup.pm 2005/07/16 14:44:38 6 +++ trunk/lib/WebPAC/Lookup.pm 2005/07/16 16:00:19 7 @@ -9,6 +9,9 @@ use File::Slurp; use Data::Dumper; +my $LOOKUP_REGEX = 'lookup{[^\{\}]+}'; +my $LOOKUP_REGEX_SAVE = 'lookup{([^\{\}]+)}'; + =head1 NAME WebPAC::Lookup - simple normalisation plugin to produce lookup @@ -81,7 +84,7 @@ Create lookup from record using lookup definition. - $self->create_lookup($rec); + $self->add($rec); Returns true if this record produced lookup. @@ -124,6 +127,52 @@ return $n; } +=head2 lookup + +Perform lookups on format supplied to it. + + my $text = $lookup->lookup('[v900]'); + +Lookups can be nested (like C<[d:[a:[v900]]]>). + +=cut + +sub lookup { + my $self = shift; + + my $log = $self->_get_logger(); + + my $tmp = shift || $log->logconfess("need format"); + + if ($tmp =~ /$LOOKUP_REGEX/o) { + my @in = ( $tmp ); + + $log->debug("lookup for: ",$tmp); + + my @out; + while (my $f = shift @in) { + if ($f =~ /$LOOKUP_REGEX_SAVE/o) { + my $k = $1; + if ($self->{'lookup'}->{$k}) { + foreach my $nv (@{$self->{'lookup'}->{$k}}) { + my $tmp2 = $f; + $tmp2 =~ s/lookup{$k}/$nv/g; + push @in, $tmp2; + } + } else { + undef $f; + } + } elsif ($f) { + push @out, $f; + } + } + $log->logconfess("return is array and it's not expected!") unless wantarray; + return @out; + } else { + return $tmp; + } +} + =head1 AUTHOR Dobrica Pavlinusic, C<< >>