From 91330ff9f516f7ae67422a3d3d676a1e1f9a80a1 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Fri, 12 Mar 2004 15:06:58 +0000 Subject: [PATCH] ported r260 from hidra branch: moved eval to parse_format.pm where it belongs. Also changed eval format to: eval{v901^a eq "Mikrotezaurus"} (please note same format as in ISIS formating language) git-svn-id: file:///home/dpavlin/private/svn/webpac/trunk@263 13eb9ef6-21d5-0310-b721-a9d68796d827 --- all2xml.pl | 22 +++------------------- parse_format.pm | 30 ++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/all2xml.pl b/all2xml.pl index 9ed7e4e..7f5ba01 100755 --- a/all2xml.pl +++ b/all2xml.pl @@ -210,24 +210,10 @@ sub data2xml { # placeholder for all repeatable entries for index - sub chk_eval($) { - my $data = shift; - return if (! defined($data)); - if ($data && $data =~ s/\s*eval{([^}]+)}\s*//) { - if (eval "$1") { - return $data; - } else { - return undef; - } - } else { - return $data; - } - } - sub mkformat($$) { my $x = shift || die "mkformat needs tag reference"; my $data = shift || return; - my $format_name = x($x->{format_name}) || return chk_eval($data); + my $format_name = x($x->{format_name}) || return $data; my $fmt = x($config->{format}->{$format_name}->{content}) || die " is not defined!"; my $format_delimiter = x($x->{format_delimiter}); my @data; @@ -240,10 +226,10 @@ sub data2xml { if ($fmt) { my $nr = scalar $fmt =~ s/%s/%s/g; if (($#data+1) == $nr) { - return chk_eval(sprintf($fmt,@data)); + return sprintf($fmt,@data); } else { #print STDERR "mkformat: [$data] can't be split on [$format_delimiter] to $nr fields!\n"; - return chk_eval($data); + return $data; } } else { print STDERR "usage of link '$format_name' without defined format ( tag)\n"; @@ -298,7 +284,6 @@ sub data2xml { $tmp = join(" ",&$filter($tmp)) if ($s || $se); } - $tmp = chk_eval($tmp); $swish_data .= $tmp if ($s && $tmp); $swish_exact_data .= "xxbxx $tmp xxexx " if ($tmp && $tmp ne "" && $se); } @@ -333,7 +318,6 @@ sub data2xml { no strict 'refs'; $idisplay = &$filter($idisplay); } - $idisplay = chk_eval($idisplay); push @index_data, $idisplay if ($idisplay && !$iterate_by_page); } diff --git a/parse_format.pm b/parse_format.pm index 9123832..ca25b06 100644 --- a/parse_format.pm +++ b/parse_format.pm @@ -55,6 +55,9 @@ sub parse_iso_format { my $f = $format; + my $eval; + $eval = $1 if ($f =~ s/^eval{([^}]+)}//); + if ($f =~ s/^([^\d]+)//) { if ($f) { # there is more to parse push @fmt,$1; @@ -111,6 +114,9 @@ sub parse_iso_format { } } push @fmt,'' if ($#fmt % 3 != 0); # add empty suffix + + $cache->{format_eval}->{$format} = $eval; # store eval string (if any) + $cache->{format}->{$format} = \@fmt; # print STDERR "storing format for '$format': [",join("|",@fmt),"]\n"; @@ -151,9 +157,29 @@ sub parse_iso_format { $sufix = shift @fmt; } $display = $prefix.$display.$sufix if ($display); - print STDERR "format left unused: [",join("|",@fmt),"]\n" if (@fmt); - print STDERR "format: [",join("|",@{$tmp}),"]\n" if (@fmt); + my $eval = $cache->{format_eval}->{$format}; + if ($eval) { + sub fld2str { + my ($func,$row,$f,$sf,$i) = @_; +#print STDERR "## in fld2str\n"; + my $tmp = &$func($row,$f,$sf,$i) || ''; + return "'$tmp'"; + } + + $eval =~ s/v(\d+)\^(\w*)/fld2str($func,$row,$1,$2,$i)/eg; +#print STDERR "## eval: $eval\n"; + if (eval "$eval") { + return ($swish,$display); + } else { + return (undef,undef); + } + } + + if (@fmt) { + print STDERR "format left unused: [",join("|",@fmt),"]\n"; + print STDERR "format: [",join("|",@{$tmp}),"]\n"; + } # print STDERR "format: {",$format || '',"} display: {",$display || '',"} swish: {",$swish || '',"}\n"; -- 2.20.1