--- trunk2/lib/WebPAC.pm 2004/10/10 09:33:57 499 +++ trunk2/lib/WebPAC.pm 2004/10/10 11:04:52 500 @@ -36,12 +36,18 @@ config_file => 'name.conf', code_page => 'ISO-8859-2', low_mem => 1, + filter => { + 'lower' => sub { lc($_[0]) }, + }, ); Default C is C. Default is not to use C options (see L below). +There is optinal parametar C which specify different filters which +can be applied using C notation. + This method will also read configuration files C (used by indexer and Web font-end) and configuration file specified by C @@ -138,6 +144,8 @@ $self->{'db'} = $db; } + $log->debug("filters defined: ",Dumper($self->{'filter'})); + return $self; } @@ -575,6 +583,10 @@ # remove eval{...} from beginning $eval_code = $1 if ($format =~ s/^eval{([^}]+)}//s); + my $filter_name; + # remove filter{...} from beginning + $filter_name = $1 if ($format =~ s/^filter{([^}]+)}//s); + # do actual replacement of placeholders $format =~ s/v(\d+)(?:\^(\w))?/$self->get_data(\$rec,$1,$2,$i,\$found)/ges; @@ -584,6 +596,12 @@ my $eval = $self->fill_in($rec,$eval_code,$i); return if (! $self->_eval($eval)); } + if ($filter_name && $self->{'filter'}->{$filter_name}) { + $log->debug("filter '$filter_name' for $format"); + $format = $self->{'filter'}->{$filter_name}->($format); + return unless(defined($format)); + $log->debug("filter result: $format"); + } # do we have lookups? if ($format =~ /$LOOKUP_REGEX/o) { $log->debug("format '$format' has lookup"); @@ -676,6 +694,10 @@ # remove eval{...} from beginning $eval_code = $1 if ($format =~ s/^eval{([^}]+)}//s); + my $filter_name; + # remove filter{...} from beginning + $filter_name = $1 if ($format =~ s/^filter{([^}]+)}//s); + my $prefix; my $all_found=0; @@ -710,9 +732,16 @@ if ($eval_code) { my $eval = $self->fill_in($rec,$eval_code,$i); - $log->debug("about to eval{",$eval,"} format: $out"); + $log->debug("about to eval{$eval} format: $out"); return if (! $self->_eval($eval)); } + + if ($filter_name && $self->{'filter'}->{$filter_name}) { + $log->debug("about to filter{$filter_name} format: $out"); + $out = $self->{'filter'}->{$filter_name}->($out); + return unless(defined($out)); + $log->debug("filter result: $out"); + } return $out; } @@ -1070,7 +1099,7 @@ $log->debug("eval: ",$code," [",$ret,"]"); - return $ret || 0; + return $ret || undef; } =head2 _sort_by_order