--- trunk2/lib/WebPAC.pm 2004/06/16 13:39:17 357 +++ trunk2/lib/WebPAC.pm 2004/06/16 15:41:16 359 @@ -4,6 +4,8 @@ use Text::Iconv; use Config::IniFiles; +use Data::Dumper; + =head1 NAME WebPAC - base class for WebPAC @@ -266,10 +268,18 @@ my $found = 0; + my $eval_code; + # remove eval{...} from beginning + $eval_code = $1 if ($format =~ s/^eval{([^}]+)}//s); + # do actual replacement of placeholders $format =~ s/v(\d+)(?:\^(\w))*/$self->get_data(\$rec,$1,$2,$i,\$found)/ges; if ($found) { + if ($eval_code) { + my $eval = $self->fill_in($rec,$eval_code,$i); + return if (! eval $eval); + } # do we have lookups? if ($format =~ /\[[^\[\]]+\]/o) { return $self->lookup($format); @@ -340,31 +350,49 @@ my ($rec, $format, $i) = @_; + confess("need HASH as first argument!") if ($rec !~ /HASH/o); + + $i = 0 if (! $i); + my @out; my $eval_code; # remove eval{...} from beginning $eval_code = $1 if ($format =~ s/^eval{([^}]+)}//s); - my $prefix = ''; - $prefix = $1 if ($format =~ s/^(.+)(v\d+(?:\^\w)*)/$2/s); + my $prefix; + my $all_found=0; + +#print "## $format\n"; + while ($format =~ s/^(.*?)v(\d+)(?:\^(\w))*//s) { +#print "## [ $1 | $2 | $3 ] $format\n"; + + my $del = $1 || ''; + $prefix ||= $del if ($all_found == 0); - sub f_sf_del { - my ($self,$rec,$out,$f,$sf,$del,$i) = @_; + my $found = 0; + my $tmp = $self->get_data(\$rec,$2,$3,$i,\$found); - my $found=0; - my $tmp = $self->get_data($rec,$f,$sf,$i,\$found); if ($found) { - push @{$$out}, $tmp; - push @{$$out}, $del; + push @out, $del; + push @out, $tmp; + $all_found += $found; } - return ''; } - #$format =~ s/(.*)v(\d+)(?:\^(\w))*/f_sf_del($self,\$rec,\@out,$2,$3,$1,$i/ges; + return if (! $all_found); + + my $out = join('',@out) . $format; - print Dumper(@out); + # add prefix if not there + $out = $prefix . $out if ($out !~ m/^\Q$prefix\E/); + + if ($eval_code) { + my $eval = $self->fill_in($rec,$eval_code,$i); + return if (! eval $eval); + } + return $out; } 1;