--- trunk2/lib/WebPAC.pm 2004/06/16 13:41:54 356 +++ trunk2/lib/WebPAC.pm 2004/06/16 16:50:30 362 @@ -4,6 +4,8 @@ use Text::Iconv; use Config::IniFiles; +use Data::Dumper; + =head1 NAME WebPAC - base class for WebPAC @@ -129,6 +131,8 @@ my $maxmfn = OpenIsis::maxRowid( $isis_db ) || 1; + $maxmfn = $self->{limit_mfn} if ($self->{limit_mfn}); + # read database for (my $mfn = 1; $mfn <= $maxmfn; $mfn++) { @@ -161,10 +165,34 @@ } + $self->{'current_mfn'} = 1; + # store max mfn and return it. return $self->{'max_mfn'} = $maxmfn; } +=head2 fetch_rec + +Fetch next record from database. It will also display progress bar (once +it's implemented, that is). + + my $rec = $webpac->fetch_rec; + +=cut + +sub fetch_rec { + my $self = shift; + + my $mfn = $self->{'current_mfn'}++ || confess "it seems that you didn't load database!"; + + if ($mfn > $self->{'max_mfn'}) { + $self->{'current_mfn'} = $self->{'max_mfn'}; + return; + } + + return $self->{'data'}->{$mfn}; +} + =head2 create_lookup Create lookup from record using lookup definition. @@ -264,10 +292,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); @@ -338,31 +374,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;